feat(rotate,delete-pages): Add custom rotation angles and enhance page management UI
- Add TypeScript type definitions for merge and alternate-merge Web Workers - Implement custom rotation angle input with increment/decrement controls for rotate tool - Extend delete-pages tool to render page thumbnails for better UX - Hide number input spin buttons across all number inputs via CSS - Refactor rotateAll function to accept angle parameter instead of direction multiplier - Update fileHandler to support delete-pages tool thumbnail rendering - Improve type safety in alternate-merge logic with proper interface definitions - Enhance rotate tool UI with custom angle input field and adjustment buttons
This commit is contained in:
@@ -68,3 +68,44 @@ export async function deletePages() {
|
||||
hideLoader();
|
||||
}
|
||||
}
|
||||
|
||||
export function setupDeletePagesTool() {
|
||||
const input = document.getElementById('pages-to-delete') as HTMLInputElement;
|
||||
if (!input) return;
|
||||
|
||||
const updateHighlights = () => {
|
||||
const val = input.value;
|
||||
const pagesToDelete = new Set<number>();
|
||||
|
||||
const parts = val.split(',');
|
||||
for (const part of parts) {
|
||||
const trimmed = part.trim();
|
||||
if (trimmed.includes('-')) {
|
||||
const [start, end] = trimmed.split('-').map(Number);
|
||||
if (!isNaN(start) && !isNaN(end) && start <= end) {
|
||||
for (let i = start; i <= end; i++) pagesToDelete.add(i);
|
||||
}
|
||||
} else {
|
||||
const num = Number(trimmed);
|
||||
if (!isNaN(num)) pagesToDelete.add(num);
|
||||
}
|
||||
}
|
||||
|
||||
const thumbnails = document.querySelectorAll('#delete-pages-preview .page-thumbnail');
|
||||
thumbnails.forEach((thumb) => {
|
||||
const pageNum = parseInt((thumb as HTMLElement).dataset.pageNumber || '0');
|
||||
const innerContainer = thumb.querySelector('div.relative');
|
||||
|
||||
if (pagesToDelete.has(pageNum)) {
|
||||
innerContainer?.classList.add('border-red-500');
|
||||
innerContainer?.classList.remove('border-gray-600');
|
||||
} else {
|
||||
innerContainer?.classList.remove('border-red-500');
|
||||
innerContainer?.classList.add('border-gray-600');
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
input.addEventListener('input', updateHighlights);
|
||||
updateHighlights();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user