Skip to content

Commit d90530b

Browse files
committed
Add the pages organization actions in the Firefox context menu (bug 2018138)
1 parent 68cca32 commit d90530b

3 files changed

Lines changed: 54 additions & 2 deletions

File tree

src/display/editor/tools.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1852,7 +1852,7 @@ class AnnotationEditorUIManager {
18521852
);
18531853

18541854
if (hasChanged) {
1855-
this._eventBus.dispatch("annotationeditorstateschanged", {
1855+
this._eventBus.dispatch("editingstateschanged", {
18561856
source: this,
18571857
details: Object.assign(this.#previousStates, details),
18581858
});

web/app.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2173,7 +2173,7 @@ const PDFViewerApplication = {
21732173
}
21742174
if (typeof PDFJSDev !== "undefined" && PDFJSDev.test("MOZCENTRAL")) {
21752175
eventBus._on(
2176-
"annotationeditorstateschanged",
2176+
"editingstateschanged",
21772177
evt => externalServices.updateEditorStates(evt),
21782178
opts
21792179
);

web/pdf_thumbnail_viewer.js

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,10 @@ class PDFThumbnailViewer {
133133

134134
#scrollableContainerHeight = 0;
135135

136+
#previousStates = {
137+
hasSelectedPages: false,
138+
};
139+
136140
/**
137141
* @param {PDFThumbnailViewerOptions} options
138142
*/
@@ -185,6 +189,23 @@ class PDFThumbnailViewer {
185189

186190
this.#toggleMenuEntries(false);
187191
button.disabled = true;
192+
193+
this.eventBus.on("editingaction", ({ name }) => {
194+
switch (name) {
195+
case "copyPage":
196+
this.#copyPages();
197+
break;
198+
case "cutPage":
199+
this.#cutPages();
200+
break;
201+
case "deletePage":
202+
this.#deletePages();
203+
break;
204+
case "savePage":
205+
this.#saveExtractedPages();
206+
break;
207+
}
208+
});
188209
} else {
189210
manageMenu.button.hidden = true;
190211
}
@@ -198,6 +219,24 @@ class PDFThumbnailViewer {
198219
this.#addEventListeners();
199220
}
200221

222+
/**
223+
* Update the different possible states of this manager, e.g. is there
224+
* something to copy, paste, ...
225+
* @param {Object} details
226+
*/
227+
#dispatchUpdateStates(details) {
228+
const hasChanged = Object.entries(details).some(
229+
([key, value]) => this.#previousStates[key] !== value
230+
);
231+
232+
if (hasChanged) {
233+
this.eventBus.dispatch("editingstateschanged", {
234+
source: this,
235+
details: Object.assign(this.#previousStates, details),
236+
});
237+
}
238+
}
239+
201240
#scrollUpdated() {
202241
this.renderingQueue.renderHighestPriority();
203242
}
@@ -730,6 +769,9 @@ class PDFThumbnailViewer {
730769
this.#manageCopyButton.disabled =
731770
this.#manageCutButton.disabled =
732771
!this.#selectedPages?.size;
772+
this.#dispatchUpdateStates({
773+
hasSelectedPages: !!this.#selectedPages?.size,
774+
});
733775
}
734776

735777
#toggleMenuEntries(enable) {
@@ -895,6 +937,16 @@ class PDFThumbnailViewer {
895937
this.#computeThumbnailsPosition();
896938
}
897939
});
940+
this.container.addEventListener("focusout", () => {
941+
this.#dispatchUpdateStates({
942+
hasSelectedPages: false,
943+
});
944+
});
945+
this.container.addEventListener("focusin", () => {
946+
this.#dispatchUpdateStates({
947+
hasSelectedPages: !!this.#selectedPages?.size,
948+
});
949+
});
898950
this.container.addEventListener("keydown", e => {
899951
const { target } = e;
900952
const isCheckbox =

0 commit comments

Comments
 (0)