From f440c541bba07e15585feb6cd91d5c67c625253d Mon Sep 17 00:00:00 2001 From: Pavlo Palii Date: Fri, 23 Feb 2024 13:02:55 +0200 Subject: [PATCH 1/2] fix [Bug] Can not copy and paste with multiple line on Quote section #1427 --- src/components/modules/paste.ts | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/components/modules/paste.ts b/src/components/modules/paste.ts index bdbec445..89ac3713 100644 --- a/src/components/modules/paste.ts +++ b/src/components/modules/paste.ts @@ -109,6 +109,7 @@ interface PasteData { * @version 2.0.0 */ export default class Paste extends Module { + public pasteEvent; /** If string`s length is greater than this number we don't check paste patterns */ public static readonly PATTERN_PROCESSING_MAX_LENGTH = 450; @@ -224,6 +225,19 @@ export default class Paste extends Module { } } + public isDomElementInCdxInput(elem):boolean{ + try{ + for(const i in document.querySelectorAll('.cdx-input')){ + if(document.querySelectorAll('.cdx-input')[i] && document.querySelectorAll('.cdx-input')[i].contains(elem)){ + return true; + } + } + return false; + }catch (e){ + return false; + } + } + /** * Process pasted text and divide them into Blocks * @@ -238,6 +252,19 @@ export default class Paste extends Module { return; } + if(this.pasteEvent && this.pasteEvent.target && this.isDomElementInCdxInput(this.pasteEvent.target)){ + + const p = document.createElement('p'); + p.innerText = ''; + dataToInsert.forEach((item, index) => { + p.innerText = p.innerText + item.content.innerText; + if(index !== dataToInsert.length-1) p.innerText = p.innerText + ''; + }); + const pasteDataObj = {content:p, isBlock:false, tool: 'paragraph', event:this.pasteEvent}; + this.processInlinePaste(pasteDataObj); + return; + } + if (dataToInsert.length === 1) { if (!dataToInsert[0].isBlock) { this.processInlinePaste(dataToInsert.pop()); @@ -478,7 +505,7 @@ export default class Paste extends Module { */ private handlePasteEvent = async (event: ClipboardEvent): Promise => { const { BlockManager, Toolbar } = this.Editor; - + this.pasteEvent = event; /** * When someone pasting into a block, its more stable to set current block by event target, instead of relying on current block set before */ From 624f2b2ee544e2beebe683770c11cd7fad6e1125 Mon Sep 17 00:00:00 2001 From: Pavlo Palii Date: Fri, 23 Feb 2024 22:14:37 +0200 Subject: [PATCH 2/2] fix [Bug] Can not copy and paste with multiple line on Quote section #1427 --- src/components/modules/paste.ts | 43 ++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/src/components/modules/paste.ts b/src/components/modules/paste.ts index 89ac3713..2563e569 100644 --- a/src/components/modules/paste.ts +++ b/src/components/modules/paste.ts @@ -225,16 +225,27 @@ export default class Paste extends Module { } } - public isDomElementInCdxInput(elem):boolean{ - try{ - for(const i in document.querySelectorAll('.cdx-input')){ - if(document.querySelectorAll('.cdx-input')[i] && document.querySelectorAll('.cdx-input')[i].contains(elem)){ + /** + * Check if elem has input class in parents html elements + * + * @param {HTMLElement} elem - pasted or dropped data transfer object + */ + public isDomElementInCdxInput(elem): boolean { + const { StylesAPI } = this.Editor; + const elements = document.querySelectorAll(`.${StylesAPI.classes.input}`); + + try { + for (const i in elements) { + if (elements[i] && elements[i].contains(elem)) { return true; } } - return false; - }catch (e){ - return false; + + return false; + } catch (e) { + console.log(e); + + return false; } } @@ -252,16 +263,26 @@ export default class Paste extends Module { return; } - if(this.pasteEvent && this.pasteEvent.target && this.isDomElementInCdxInput(this.pasteEvent.target)){ - + if (this.pasteEvent && this.pasteEvent.target && this.isDomElementInCdxInput(this.pasteEvent.target)) { const p = document.createElement('p'); + p.innerText = ''; dataToInsert.forEach((item, index) => { p.innerText = p.innerText + item.content.innerText; - if(index !== dataToInsert.length-1) p.innerText = p.innerText + ''; + + if (index