Paste Special Project

Greetings eveyone!

I'm Siddhant Sehgal from India and this summer I'll be working with Joplin on the Paste Special plugin!

This proposal draws from this forum thread. Big thanks!

Summary

This will be a Paste Special Plugin for pasting formatted text and provide sub-menu options inside it as discussed in various links provided above. The sub-menu will contain various options for different file formats like Paste Excel or CSV as markdown table, Paste PDF or HTML as formatted markdown text.

Please, let me know what you all think! These details are not set in stone, I'm open to any feedback from the community.

Project details

  1. Assessing all files related to the Toolbar.

Analyzing different patterns in files related to GUI and implementation of Paste Special Plugin will be an important task for implementing the project properly and making it stable as possible.

  1. Designing the Paste Special plugin component.

Designing the whole component by discussing different wireframes with the mentors and creating a user-friendly UI for the user that can be used easily by different users and even effectively.

  1. Implementing the design of Paste Special plugin component

Implementation will be the most prominent part and by using the important steps the whole UI will be designed for the front-end and the different kind of data needs to be analysed whether it’s CSV or PDF or other file format to be converted to markdown.

  1. Deploying it to the Desktop Client, including different sets of testing on the component.

After implementing the feature of paste special text, there’s gotta be rigorous testing too so that it only passes the right format as markdown for even different file formats and then only the feature will be deployed to the master branch of Joplin Desktop-Client.

  1. Documenting and open-sourcing the development process.

During the entire process, each and every step (no matter how small) will be documented for Developers as well as for the users. The final code will be a refactored code by following good development practices.

Implementation

The most prominent and yielding part will be the implementation of the feature. As it’s a plugin needed to created for Desktop-Client (Electron), it will be implemented by the following steps :

  1. Designing the UI for the paste special component.

UI would be the very first thing that will be designed for creating the plugin into the Desktop-Client. So, some wireframes are:

Also do give feeback on UI Designs! These details are not set in stone. Thanks.

  1. Writing code which is related to implementing this feature.

I’d start by analysing the various files for implementing the functionality of user pasting special text (Excel,CSV table or HTML,PDF, etc.) and have it converted to Markdown on the Desktop Client of Joplin. Also, adding styles to the different stylesheets to all the components, elements and containers in the code according to the used code-protocol of layouts in Joplin. Understanding the technology of React, TypeScript files etc. and the conclusion throughout the GSOC program is also an important task.

This plugin would be created in the most modular way possible, so as to increase its future scope such as paste PDF as a markdown by using the concept of Encapsulation and Abstraction and more Object Oriented Standards. Adding this conversion feature and even conversion of other text file formats to Markdown will not be much of a hassle apart from just creating webviews for it just as similar to the CSV to Markdown option and with a conversion function, it’d be good to go. Similarly, the base structure of the plugin would be just similar to the one this proposal suggests to create.

  1. Writing documentation and unit tests

As user documentation is an important part of implementing the whole feature, writing documentation along the whole Google Summer of Code program will be a major priority.

Writing various unit tests for testing all the Boundary Values and different elements of the Component will also be a priority and will be done side by side of development of the plugin as it will help the stable implementation of the feature. Rigorous testing will be done before deploying the feature on master-branch of Joplin.

Timeline

Week Duration Activity
1-3 Building Layouts and Creation, Edition, Selection of the base structure of plugin and UI for the Paste Special toolbar button and submenu with different themes
4-6 Analyzing different file formats and extracting patterns for conversion into Markdown on Desktop Client of Jopline
7-9 Writing code for plugin and user interface with evaluation of test cases and creation of unit tests related to the feature implemented.
9-12 Writing test cases, bug fixes and documentation

When this project is successfully completed, it will act as an example which will provide a paste special text toolbar button(Excel or CSV table, HTML or PDF) and have it converted to Markdown on Desktop Client of Joplin.

Deliverables

  • Fully Working Paste Special toolbar menu option.
  • Implementation of the functionality of user pasting special text (Excel,CSV table or HTML,PDF, etc.) and have it converted to Markdown on the Desktop Client of Joplin.
  • Detailed Documentation for the Paste Special feature.

NOTE: This feature would not be available for Rich Text Editor, and will be disabled when Rich Text Editor mode is enabled.

Future Developments

  • Contribute to the design and development of this and other features.
  • Integrating more options in the submenu, by analysing more file formats.
  • Contribute to Joplin Community.
  • Implementation of this feature for cross-platform devices

I intend to be as open, friendly and communicative as possible, and will develop a bond with the community which will most definitely extend even after GSOC ends. I would inform the community with new updates regarding my project using Discourse and mailing lists. I also request the mentors to test my work on a weekly basis.

This post will serve as a live specification for this project, I will be updating it regularly based on your feedback.

9 Likes

Category Guidelines

In this category GSoC Projects < Paste Special

What to do

  • Post queries related to proposal and feedback
  • Giving development suggestions for the Paste Special plugin
  • UI/UX suggestions and feedback
  • Discussions upon various file formats to be included in the plugin
  • Ask documentation and plugin related queries

What not to do image

  • Posting general Joplin and other plugin related queries
2 Likes

reserved for future content.

reserved for future content..

reserved for future content...

Analyzing different file formats and extracting patterns for conversion into Markdown on Desktop Client of Jopline

I feel this could take time, maybe it will take only 2 weeks, or it could be 3 or more, and that would delay the rest of the project. However, while this part is important, it's not crucial for the project. You could for example start by supporting CSV import only, and write the plugin for this only. That will allow you to get a working prototype ready earlier, which you can then refine over time.

Once that prototype is working, you can indeed start spending more time analysing formats and to see how you can support more, and how many. Basically the idea is to avoid big items that can block the development process and to keep in mind that you don't have to do each step 100% before moving to the next one.

1 Like

Yes, i agree. I have the same notion in my mind. Making the plugin available for CSV file formats is a priority indeed. Then a research would be more feasible for other useful file formats used by user. I'll do that changes incase.

Absolutely.

1 Like

Indeed, and if you get the plugin architecture right, you'll be able to support more formats easily, as you mentioned in your proposal:

This plugin would be created in the most modular way possible, so as to increase its future scope such as paste PDF

1 Like

Yes, that's exactly what i'm aiming for.

1 Like

@coderrsid, once that initial version with CSV support is done, what format do you plan to look at? Perhaps you could already check this and make a list of formats that could potentially be supported? That might depend on what JS library is available, etc. so you might want to check this too.

1 Like

Sure laurent, i will try to find different possible formats. But although i was thinking of pdf as my next target.

Another thing to consider is that when you copy some data from an application, the clipboard might contain multiple formats. For example if you copy from Word, you'll have HTML, plain text and Word native format in the clipboard. In Joplin, when pasting text from Word into the Rich Text editor, we actually use the HTML part of the clipboard.

I think many application populates the HTML clipboard - maybe even Excel and various PDF viewers. So what I'm getting at is that you could perhaps look at how to convert HTML to Markdown when pasting. And that way you'll automatically support many applications without having to add special cases for each of them.

Oh, i'll just read more about it that how the clipboard works for different file formats and try to implement it in most unified and modular way possible

:+1:

Interesting idea to add HTML:

It could be great if that include resources, at least images directly from browser (Ctrl+C) to avoid upload from Joplin.

If the Html file is absolutely needed to do this, a special folder like in Hotfolder pluglin will be a great option to add new Html text with images in new notes.

1 Like

If you have time to answer, could you say what you mean by pasting PDF? I don't really think of a PDF as something to be pasted. Wouldn't that either mean OCR'ing an image PDF, or just pasting the text content of a PFD? Or are you saying you could take the content of the clipboard and create a PDF from it and attach it? (I'm doubting that's what you are talking about.)

1 Like

Sure @whitewall. Actually, upto this moment i and mentors have come to the conclusion that in this plugin, it'd be mostly about pasting different file content instead of importing. But i just took a poll for the same. Let's see if it changes any view. Although, the first task is for CSV. Thanks.

1 Like

Please note that I said that the action Paste Special > CSV as table should be about pasting.
I did not exclude another action. You can still create a context menu or a menu item or both.

But IMO it makes no sense to pop up a window that asks you every single time if you want to paste or import.

But then giving these much of menus sub options wouldn't be a great UX, IMO.

I rather have menus than being presented with a popup every time I paste.

As I said, there's a difference between pasting and importing. In that case you should have called the project differently. This is about pasting data that is special (like csv). If you want to import a file, it belongs into a menu called import, not paste. There's no harm in creating a menu item Import special >.

Forgive me if I'm misunderstanding what your are trying to do...

For me, ctrl-v can only mean paste. And I consider that, into a text document, there can only be paste with formatting and paste without formatting. And that is controlled by the user through the OS. If I copy cells from a spreadsheet and I do a ctrl-v, I would expect them to be pasted as a table. If I want the text only, then I would do ctrl-shift-v and get just the text. (I wouldn't have great expectations of what that would look like.)

If I was copying text that had italics or bold, same thing. Ctrl-v I would expect to have the markdown markup to get that. If I did ctrl-shift-v then I would expect text only, no markup.

I can imagine that the application (i.e. Joplyn) could have a "paste without formatting" in the menu and right click options.

Personally, I would absolutely hate to have a popup menu every time I pasted. I can't think of any other application that hijacks a simple paste every time. I don't even like that LibreOffice has taken over ctrl-shift-v and turned it into paste special forcing a choice every time.

It seems like there is no need to reinvent the wheel here. Assuming I am understanding what you are trying to do, which I may not be!

I appreciate everyone's work on this.

1 Like