diff --git a/web/app.js b/web/app.js index 14fe84e70..3cc4126a5 100644 --- a/web/app.js +++ b/web/app.js @@ -2051,6 +2051,8 @@ const PDFViewerApplication = { eventBus._on("lastpage", () => (this.page = this.pagesCount), opts); eventBus._on("nextpage", () => pdfViewer.nextPage(), opts); eventBus._on("previouspage", () => pdfViewer.previousPage(), opts); + eventBus._on("redo", evt => pdfViewer.redo(), opts); + eventBus._on("undo", evt => pdfViewer.undo(), opts); eventBus._on("zoomin", this.zoomIn.bind(this), opts); eventBus._on("zoomout", this.zoomOut.bind(this), opts); eventBus._on("zoomreset", this.zoomReset.bind(this), opts); diff --git a/web/images/toolbarButton-redo.svg b/web/images/toolbarButton-redo.svg new file mode 100644 index 000000000..855425506 --- /dev/null +++ b/web/images/toolbarButton-redo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/images/toolbarButton-undo.svg b/web/images/toolbarButton-undo.svg new file mode 100644 index 000000000..82d8655ff --- /dev/null +++ b/web/images/toolbarButton-undo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/pdf_viewer.js b/web/pdf_viewer.js index 37644840f..7e596deb1 100644 --- a/web/pdf_viewer.js +++ b/web/pdf_viewer.js @@ -2532,6 +2532,24 @@ class PDFViewer { updater(); } + undo() { + if (!this.#annotationEditorUIManager) { + throw new Error(`The AnnotationEditor is not enabled.`); + } + if (this.pdfDocument) { + this.#annotationEditorUIManager.undo(); + } + } + + redo() { + if (!this.#annotationEditorUIManager) { + throw new Error(`The AnnotationEditor is not enabled.`); + } + if (this.pdfDocument) { + this.#annotationEditorUIManager.redo(); + } + } + refresh(noUpdate = false, updateArgs = Object.create(null)) { if (!this.pdfDocument) { return; diff --git a/web/toolbar.js b/web/toolbar.js index 5945cd409..ea3bccc07 100644 --- a/web/toolbar.js +++ b/web/toolbar.js @@ -67,6 +67,8 @@ class Toolbar { { element: options.zoomOut, eventName: "zoomout" }, { element: options.print, eventName: "print" }, { element: options.download, eventName: "download" }, + { element: options.undo, eventName: "undo" }, + { element: options.redo, eventName: "redo" }, { element: options.editorFreeTextButton, eventName: "switchannotationeditormode", diff --git a/web/viewer.css b/web/viewer.css index daf980b78..ab0a7dfd0 100644 --- a/web/viewer.css +++ b/web/viewer.css @@ -111,6 +111,8 @@ --toolbarButton-pageDown-icon: url(images/toolbarButton-pageDown.svg); --toolbarButton-zoomOut-icon: url(images/toolbarButton-zoomOut.svg); --toolbarButton-zoomIn-icon: url(images/toolbarButton-zoomIn.svg); + --toolbarButton-redo-icon: url(images/toolbarButton-redo.svg); + --toolbarButton-undo-icon: url(images/toolbarButton-undo.svg); --toolbarButton-presentationMode-icon: url(images/toolbarButton-presentationMode.svg); --toolbarButton-print-icon: url(images/toolbarButton-print.svg); /*#if GENERIC*/ @@ -540,6 +542,14 @@ body { mask-image: var(--toolbarButton-zoomIn-icon); } +#redoButton::before { + mask-image: var(--toolbarButton-redo-icon); +} + +#undoButton::before { + mask-image: var(--toolbarButton-undo-icon); +} + #editorFreeTextButton::before { mask-image: var(--toolbarButton-editorFreeText-icon); } diff --git a/web/viewer.html b/web/viewer.html index a57bc06a9..92db547fd 100644 --- a/web/viewer.html +++ b/web/viewer.html @@ -332,6 +332,12 @@ See https://github.com/adobe-type-tools/cmap-resources + +
diff --git a/web/viewer.js b/web/viewer.js index 3973a6b2f..e9c64ea84 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -45,6 +45,12 @@ function getViewerConfiguration() { zoomIn: document.getElementById("zoomInButton"), zoomOut: document.getElementById("zoomOutButton"), print: document.getElementById("printButton"), + undo: document.getElementById("undoButton"), + redo: document.getElementById("redoButton"), + editorEraserButton: document.getElementById("editorEraserButton"), + editorEraserParamsToolbar: document.getElementById( + "editorEraserParamsToolbar" + ), editorFreeTextButton: document.getElementById("editorFreeTextButton"), editorFreeTextParamsToolbar: document.getElementById( "editorFreeTextParamsToolbar" @@ -241,6 +247,7 @@ function getViewerConfiguration() { updateButton: document.getElementById("editSignatureUpdateButton"), }, annotationEditorParams: { + editorEraserThickness: document.getElementById("editorEraserThickness"), editorFreeTextFontSize: document.getElementById("editorFreeTextFontSize"), editorFreeTextColor: document.getElementById("editorFreeTextColor"), editorInkColor: document.getElementById("editorInkColor"),