mirror of
https://github.com/Stirling-Tools/Stirling-PDF.git
synced 2025-06-18 05:25:04 +00:00
102 lines
3.3 KiB
JavaScript
102 lines
3.3 KiB
JavaScript
![]() |
import { Command } from "./command.js";
|
||
|
|
||
|
export class RemoveSelectedCommand extends Command {
|
||
|
constructor(pagesContainer, selectedPages, updatePageNumbersAndCheckboxes) {
|
||
|
super();
|
||
|
this.pagesContainer = pagesContainer;
|
||
|
this.selectedPages = selectedPages;
|
||
|
|
||
|
this.deletedChildren = [];
|
||
|
|
||
|
if (updatePageNumbersAndCheckboxes) {
|
||
|
this.updatePageNumbersAndCheckboxes = updatePageNumbersAndCheckboxes;
|
||
|
} else {
|
||
|
const pageDivs = document.querySelectorAll(".pdf-actions_container");
|
||
|
|
||
|
pageDivs.forEach((div, index) => {
|
||
|
const pageNumber = index + 1;
|
||
|
const checkbox = div.querySelector(".pdf-actions_checkbox");
|
||
|
checkbox.id = `selectPageCheckbox-${pageNumber}`;
|
||
|
checkbox.setAttribute("data-page-number", pageNumber);
|
||
|
checkbox.checked = window.selectedPages.includes(pageNumber);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
const filenameInput = document.getElementById("filename-input");
|
||
|
const filenameParagraph = document.getElementById("filename");
|
||
|
|
||
|
this.originalFilenameInputValue = filenameInput ? filenameInput.value : "";
|
||
|
if (filenameParagraph)
|
||
|
this.originalFilenameParagraphText = filenameParagraph.innerText;
|
||
|
}
|
||
|
|
||
|
execute() {
|
||
|
let deletions = 0;
|
||
|
|
||
|
this.selectedPages.forEach((pageIndex) => {
|
||
|
const adjustedIndex = pageIndex - 1 - deletions;
|
||
|
const child = this.pagesContainer.children[adjustedIndex];
|
||
|
if (child) {
|
||
|
this.pagesContainer.removeChild(child);
|
||
|
deletions++;
|
||
|
|
||
|
this.deletedChildren.push({
|
||
|
idx: adjustedIndex,
|
||
|
childNode: child,
|
||
|
});
|
||
|
}
|
||
|
});
|
||
|
|
||
|
if (this.pagesContainer.childElementCount === 0) {
|
||
|
const filenameInput = document.getElementById("filename-input");
|
||
|
const filenameParagraph = document.getElementById("filename");
|
||
|
const downloadBtn = document.getElementById("export-button");
|
||
|
|
||
|
if (filenameInput) filenameInput.disabled = true;
|
||
|
filenameInput.value = "";
|
||
|
if (filenameParagraph) filenameParagraph.innerText = "";
|
||
|
|
||
|
downloadBtn.disabled = true;
|
||
|
}
|
||
|
|
||
|
window.selectedPages = [];
|
||
|
this.updatePageNumbersAndCheckboxes();
|
||
|
document.dispatchEvent(new Event("selectedPagesUpdated"));
|
||
|
}
|
||
|
|
||
|
undo() {
|
||
|
while (this.deletedChildren.length > 0) {
|
||
|
let deletedChild = this.deletedChildren.pop();
|
||
|
if (this.pagesContainer.children.length <= deletedChild.idx)
|
||
|
this.pagesContainer.appendChild(deletedChild.childNode);
|
||
|
else {
|
||
|
this.pagesContainer.insertBefore(
|
||
|
deletedChild.childNode,
|
||
|
this.pagesContainer.children[deletedChild.idx]
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (this.pagesContainer.childElementCount > 0) {
|
||
|
const filenameInput = document.getElementById("filename-input");
|
||
|
const filenameParagraph = document.getElementById("filename");
|
||
|
const downloadBtn = document.getElementById("export-button");
|
||
|
|
||
|
if (filenameInput) filenameInput.disabled = false;
|
||
|
filenameInput.value = this.originalFilenameInputValue;
|
||
|
if (filenameParagraph)
|
||
|
filenameParagraph.innerText = this.originalFilenameParagraphText;
|
||
|
|
||
|
downloadBtn.disabled = false;
|
||
|
}
|
||
|
|
||
|
window.selectedPages = this.selectedPages;
|
||
|
this.updatePageNumbersAndCheckboxes();
|
||
|
document.dispatchEvent(new Event("selectedPagesUpdated"));
|
||
|
}
|
||
|
|
||
|
redo() {
|
||
|
this.execute();
|
||
|
}
|
||
|
}
|