🐛 Koenig - Fixed pasting content into a container card (HTML, markdown, code)

refs https://github.com/TryGhost/Ghost/issues/9623
- pasting inside a container card such as markdown or HTML would paste content into the card and duplicate that content outside of the card, exiting the card's edit mode in the process
- use the same "addressable" check that mobiledoc-kit's event manager uses
This commit is contained in:
Kevin Ansfield 2018-05-28 11:28:25 +01:00
parent 7438eb05e9
commit 7846192ac3

View File

@ -637,11 +637,20 @@ export default Component.extend({
handlePaste(event) { handlePaste(event) {
let editor = this.editor; let editor = this.editor;
let {target: element} = event;
// don't trigger our paste handling for pastes within cards or outside
// of the editor canvas. Avoids double-paste of content when pasting
// into cards
if (!editor.cursor.isAddressable(element)) {
return;
}
let range = editor.range; let range = editor.range;
let {html, text} = getContentFromPasteEvent(event);
// if a URL is pasted and we have a selection, make that selection a link // if a URL is pasted and we have a selection, make that selection a link
if (range && !range.isCollapsed && range.headSection === range.tailSection && range.headSection.isMarkerable) { if (range && !range.isCollapsed && range.headSection === range.tailSection && range.headSection.isMarkerable) {
let {text} = getContentFromPasteEvent(event);
if (text && validator.isURL(text)) { if (text && validator.isURL(text)) {
let linkMarkup = editor.builder.createMarkup('a', {href: text}); let linkMarkup = editor.builder.createMarkup('a', {href: text});
editor.run((postEditor) => { editor.run((postEditor) => {
@ -659,7 +668,6 @@ export default Component.extend({
// we get better output than mobiledoc's default text parsing and we can // we get better output than mobiledoc's default text parsing and we can
// provide an easier MD->Mobiledoc conversion route // provide an easier MD->Mobiledoc conversion route
// NOTE: will not work in IE/Edge which only ever expose `html` // NOTE: will not work in IE/Edge which only ever expose `html`
let {html, text} = getContentFromPasteEvent(event);
if (text && !html && !this._modifierKeys.shift) { if (text && !html && !this._modifierKeys.shift) {
// prevent mobiledoc's default paste event handler firing // prevent mobiledoc's default paste event handler firing
event.preventDefault(); event.preventDefault();