@@ -28,6 +28,7 @@ import {
2828 watchScroll ,
2929} from "./ui_utils.js" ;
3030import { MathClamp , noContextMenu , PagesMapper , stopEvent } from "pdfjs-lib" ;
31+ import { Menu } from "./menu.js" ;
3132import { PDFThumbnailView } from "./pdf_thumbnail_view.js" ;
3233
3334const SCROLL_OPTIONS = {
@@ -67,6 +68,8 @@ const SPACE_FOR_DRAG_MARKER_WHEN_NO_NEXT_ELEMENT = 15;
6768 * rendering. The default value is `false`.
6869 * @property {boolean } [enableSplitMerge] - Enables split and merge features.
6970 * The default value is `false`.
71+ * @property {Object } [manageMenu] - The menu elements to manage saving edited
72+ * PDF.
7073 */
7174
7275/**
@@ -109,6 +112,8 @@ class PDFThumbnailViewer {
109112
110113 #pagesMapper = PagesMapper . instance ;
111114
115+ #manageSaveAsButton = null ;
116+
112117 /**
113118 * @param {PDFThumbnailViewerOptions } options
114119 */
@@ -123,6 +128,7 @@ class PDFThumbnailViewer {
123128 abortSignal,
124129 enableHWA,
125130 enableSplitMerge,
131+ manageMenu,
126132 } ) {
127133 this . scrollableContainer = container . parentElement ;
128134 this . container = container ;
@@ -135,6 +141,20 @@ class PDFThumbnailViewer {
135141 this . enableHWA = enableHWA || false ;
136142 this . #enableSplitMerge = enableSplitMerge || false ;
137143
144+ if ( this . #enableSplitMerge && manageMenu ) {
145+ const { button, menu, copy, cut, delete : del , saveAs } = manageMenu ;
146+ this . _manageMenu = new Menu ( menu , button , [ copy , cut , del , saveAs ] ) ;
147+ this . #manageSaveAsButton = saveAs ;
148+ saveAs . addEventListener ( "click" , ( ) => {
149+ this . eventBus . dispatch ( "savepageseditedpdf" , {
150+ source : this ,
151+ data : this . #pagesMapper. getPageMappingForSaving ( ) ,
152+ } ) ;
153+ } ) ;
154+ } else {
155+ manageMenu . button . hidden = true ;
156+ }
157+
138158 this . scroll = watchScroll (
139159 this . scrollableContainer ,
140160 this . #scrollUpdated. bind ( this ) ,
@@ -519,10 +539,16 @@ class PDFThumbnailViewer {
519539 selectedPages . clear ( ) ;
520540 this . #pageNumberToRemove = NaN ;
521541
522- this . eventBus . dispatch ( "pagesedited" , {
523- source : this ,
524- pagesMapper,
525- } ) ;
542+ const isIdentity = ( this . #manageSaveAsButton. disabled =
543+ ! this . #pagesMapper. hasBeenAltered ( ) ) ;
544+ if ( ! isIdentity ) {
545+ this . eventBus . dispatch ( "pagesedited" , {
546+ source : this ,
547+ pagesMapper,
548+ index : newIndex ,
549+ pagesToMove,
550+ } ) ;
551+ }
526552
527553 const newCurrentPageNumber = pagesMapper . getPageNumber ( newCurrentPageId ) ;
528554 setTimeout ( ( ) => {
0 commit comments