@@ -647,13 +647,32 @@ export function sanitizeHtml(html, forbiddenTags = ['meta', 'svg', 'script', 'st
647647 * @returns {Boolean } Whether the paste was handled.
648648 */
649649export function handleClipboardPaste ( { editor, view } , html , plainText ) {
650+ const rawHtml = html || '' ;
651+ const isSuperdocHtml = isSuperdocOriginClipboardHtml ( rawHtml ) ;
652+ const embeddedBodySectPr = isSuperdocHtml ? extractBodySectPrFromHtml ( rawHtml ) : null ;
653+ let pasteHtml = rawHtml ;
654+
655+ let superdocSliceData = extractSliceFromHtml ( rawHtml ) ;
656+ if ( superdocSliceData ) {
657+ superdocSliceData = applySuperdocClipboardMedia ( editor , null , superdocSliceData ) ;
658+ try {
659+ if ( handleSuperdocSlicePaste ( superdocSliceData , editor , view , embeddedBodySectPr ) ) return true ;
660+ } catch ( err ) {
661+ console . warn ( 'Failed to paste SuperDoc slice, falling back to HTML:' , err ) ;
662+ }
663+ }
664+
665+ if ( isSuperdocHtml ) {
666+ pasteHtml = stripSliceFromHtml ( rawHtml ) ;
667+ }
668+
650669 let source ;
651670
652- if ( ! html ) {
671+ if ( ! pasteHtml ) {
653672 source = 'plain-text' ;
654- } else if ( isWordHtml ( html ) ) {
673+ } else if ( isWordHtml ( pasteHtml ) ) {
655674 source = 'word-html' ;
656- } else if ( isGoogleDocsHtml ( html ) ) {
675+ } else if ( isGoogleDocsHtml ( pasteHtml ) ) {
657676 source = 'google-docs' ;
658677 } else {
659678 source = 'browser-html' ;
@@ -667,15 +686,15 @@ export function handleClipboardPaste({ editor, view }, html, plainText) {
667686 return handlePlainTextUrlPaste ( editor , view , plainText , detected ) ;
668687 }
669688 case 'word-html' :
670- if ( editor . options . mode === 'docx' && ! isSuperdocOriginClipboardHtml ( html ) ) {
671- return handleDocxPaste ( html , editor , view ) ;
689+ if ( editor . options . mode === 'docx' && ! isSuperdocHtml ) {
690+ return handleDocxPaste ( pasteHtml , editor , view ) ;
672691 }
673- return handleHtmlPaste ( html , editor ) ;
692+ return handleHtmlPaste ( pasteHtml , editor ) ;
674693 case 'google-docs' :
675- return handleGoogleDocsHtml ( html , editor , view ) ;
694+ return handleGoogleDocsHtml ( pasteHtml , editor , view ) ;
676695 // falls through to browser-html handling when not in DOCX mode
677696 case 'browser-html' :
678- return handleHtmlPaste ( html , editor ) ;
697+ return handleHtmlPaste ( pasteHtml , editor ) ;
679698 }
680699
681700 return false ;
0 commit comments