Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DOM / Text Renderer removal (copy / paste implications) #667

Open
rondale-sc opened this issue Jan 17, 2019 · 0 comments
Open

DOM / Text Renderer removal (copy / paste implications) #667

rondale-sc opened this issue Jan 17, 2019 · 0 comments

Comments

@rondale-sc
Copy link
Collaborator

Summary

Currently we ship DOMRenderer and TextRenderer with MobiledocKit by default. In a previous PR I mentioned we could deprecate a small section of code (see details here) and reduce the overall package size. However, upon closer inspect I found that these Renderers are necessary for copy/paste fidelity.

Essentially the Copy Past flow is as follows:

  1. Select range of text (including atoms/cards et, al)
  2. Copy it with system hot-key
  3. setClipboardData function is called which is responsible for:
    1. Setting the {html, text} representation on the event.clipboardData object
    2. It does so by receiving the mobiledoc object, the html from the result of DOMRenderer render, and text from the result of TextREnderer call
    3. html is encoded (by mime type) like so: html = ``<div data-mobiledoc='${JSON.stringify(mobiledoc)}'>${html}</div>``;
    4. text is encoded (by mime type) by simply setting it
  4. Paste range of text with system hot-key
  5. parsePostFromPaste function is called which is responsible for returning a mobiledoc post from html if specified and constructing one from text

This allows copy/paste to parse the mobiledoc document to preserve fidelity when pasting between different mobiledoc editors and within itself and still allows text copy/paste to work as you'd expect wrt system pastes.

The Problem

  1. In order for us to have this fidelity we need to include the DOM/TextRenderers which bloats the payload and may not be necessary.
  2. It means that the current copy/paste functionality cannot be overridden or configured.
    1. Implication here is that custom renderers would not be factored in to the copy/paste solution since they are hardcoded to be the standalone packages.

Design

Remove default copy/paste solution. Which would mean that the default system copy would be what happens and we'd lose fidelity of cards et, al.

Provide an easy configuration to allow a DOMRenderer that if specified would be utilized in the copy/paste flow listed above.

Drawbacks

  1. This represents a breaking change
  2. This would necessitate us updating documentation to show various examples of how to specify this behavior

Alternatives

Leave default implementation in place, but allow override of DOMRenderer. Though this would still involve shipping the DOMRenderer with MDK

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant