Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions l10n/en-US/viewer.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -764,6 +764,7 @@ pdfjs-views-manager-status-warning-copy-label = Couldn’t copy. Refresh page an
pdfjs-views-manager-status-warning-delete-label = Couldn’t delete. Refresh page and try again.
pdfjs-views-manager-status-warning-save-label = Couldn’t save. Refresh page and try again.
pdfjs-views-manager-status-undo-button-label = Undo
pdfjs-views-manager-status-done-button-label = Done
pdfjs-views-manager-status-close-button =
.title = Close
pdfjs-views-manager-status-close-button-label = Close
Expand Down
25 changes: 25 additions & 0 deletions src/display/api.js
Original file line number Diff line number Diff line change
Expand Up @@ -2406,6 +2406,8 @@ class WorkerTransport {

#copiedPageInfo = null;

#savedPageInfo = null;

constructor(
messageHandler,
loadingTask,
Expand Down Expand Up @@ -2477,13 +2479,36 @@ class WorkerTransport {
return;
}

if (type === "cancelCopy") {
this.#copiedPageInfo = null;
return;
}

if (type === "delete") {
this.#savedPageInfo = {
pageCache: new Map(this.#pageCache),
pagePromises: new Map(this.#pagePromises),
};
for (const pageNum of pageNumbers) {
this.#pageCache.delete(pageNum - 1);
this.#pagePromises.delete(pageNum - 1);
}
}

if (type === "cancelDelete") {
if (this.#savedPageInfo) {
this.#pageCache = this.#savedPageInfo.pageCache;
this.#pagePromises = this.#savedPageInfo.pagePromises;
this.#savedPageInfo = null;
}
return;
}

if (type === "cleanSavedData") {
this.#savedPageInfo = null;
return;
}

const newPageCache = new Map();
const newPromiseCache = new Map();
const { pagesMapper } = this;
Expand Down
34 changes: 33 additions & 1 deletion src/display/display_utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -1082,6 +1082,8 @@ class PagesMapper {
*/
#copiedPageNumbers = null;

#savedData = null;

/**
* Gets the total number of pages.
* @returns {number} The number of pages.
Expand Down Expand Up @@ -1253,6 +1255,13 @@ class PagesMapper {
const pageNumberToId = this.#pageNumberToId;
const prevIdToPageNumber = this.#idToPageNumber;

this.#savedData = {
pageNumberToId: pageNumberToId.slice(),
idToPageNumber: new Map(prevIdToPageNumber),
pageNumber: this.#pagesNumber,
prevPageNumbers: this.#prevPageNumbers.slice(),
};

this.pagesNumber -= pagesToDelete.length;
this.#init(false);
const newPageNumberToId = this.#pageNumberToId;
Expand All @@ -1279,6 +1288,22 @@ class PagesMapper {
this.#updateListeners({ type: "delete", pageNumbers: pagesToDelete });
}

cancelDelete() {
if (this.#savedData) {
this.#pageNumberToId = this.#savedData.pageNumberToId;
this.#idToPageNumber = this.#savedData.idToPageNumber;
this.pagesNumber = this.#savedData.pageNumber;
this.#prevPageNumbers = this.#savedData.prevPageNumbers;
this.#savedData = null;
this.#updateListeners({ type: "cancelDelete" });
}
}

cleanSavedData() {
this.#savedData = null;
this.#updateListeners({ type: "cleanSavedData" });
}

/**
* Copies a set of pages while keeping ID→number mappings in sync.
* @param {Uint32Array} pagesToCopy - Page numbers to copy (1-indexed).
Expand All @@ -1292,6 +1317,12 @@ class PagesMapper {
this.#updateListeners({ type: "copy", pageNumbers: pagesToCopy });
}

cancelCopy() {
this.#copiedPageIds = null;
this.#copiedPageNumbers = null;
this.#updateListeners({ type: "cancelCopy" });
}

/**
* Pastes a set of pages while keeping ID→number mappings in sync.
* @param {number} index - Zero-based insertion index in the page-number list.
Expand Down Expand Up @@ -1323,6 +1354,7 @@ class PagesMapper {
this.#updateListeners({ type: "paste" });

this.#copiedPageIds = null;
this.#copiedPageNumbers = null;
}

/**
Expand Down Expand Up @@ -1455,7 +1487,7 @@ class PagesMapper {
}

getMapping() {
return this.#pageNumberToId.subarray(0, this.pagesNumber);
return this.#pageNumberToId?.subarray(0, this.pagesNumber);
}
}

Expand Down
Loading