bayan-api / src /js /documents /documents.js
youssefreda9's picture
feat: Summary UI improvements + PDF fix - Swap short/long labels on summary length slider (RTL: long left, short right) - Remove 'تلخيص النص كاملاً' checkbox and button - Replace single export button with dropdown (TXT/DOCX/PDF) in summary - Hide format toolbar when on summary tab, show on writing tab - Fix PDF export freeze: use foreignObjectRendering:false + lower scale - Add loading toast during PDF export - Add summary DOCX and PDF export functions
18fcb1a
Raw
History Blame Contribute Delete
4.34 kB
// Document management — UI wiring and initialization
function initDocuments() {
const importBtn = document.getElementById('doc-import-btn');
const importInput = document.getElementById('doc-import-input');
const exportTrigger = document.getElementById('doc-export-trigger');
const exportMenu = document.getElementById('doc-export-menu');
const mobileExportTrigger = document.getElementById('doc-mobile-export-trigger');
const exportSheet = document.getElementById('doc-export-sheet');
if (importBtn && importInput) {
importBtn.addEventListener('click', () => importInput.click());
importInput.addEventListener('change', (e) => {
const file = e.target.files && e.target.files[0];
if (file) handleImportFile(file);
importInput.value = '';
});
}
if (exportTrigger && exportMenu) {
exportTrigger.addEventListener('click', (e) => {
e.stopPropagation();
const open = exportMenu.classList.toggle('is-open');
exportTrigger.setAttribute('aria-expanded', open ? 'true' : 'false');
});
exportMenu.querySelectorAll('[data-export-format]').forEach((item) => {
item.addEventListener('click', (e) => {
e.stopPropagation();
const format = item.dataset.exportFormat;
closeExportMenu();
if (format === 'txt') exportTxtFile();
else if (format === 'docx') exportDocxFile();
else if (format === 'pdf') exportPdfFile();
});
});
}
// Summary export dropdown
const summExportTrigger = document.getElementById('summary-export-trigger');
const summExportMenu = document.getElementById('summary-export-menu');
if (summExportTrigger && summExportMenu) {
summExportTrigger.addEventListener('click', (e) => {
e.stopPropagation();
const open = summExportMenu.classList.toggle('is-open');
summExportTrigger.setAttribute('aria-expanded', open ? 'true' : 'false');
});
}
if (mobileExportTrigger && exportSheet) {
mobileExportTrigger.addEventListener('click', () => {
exportSheet.classList.add('open');
exportSheet.setAttribute('aria-hidden', 'false');
mobileExportTrigger.setAttribute('aria-expanded', 'true');
});
const backdrop = document.getElementById('doc-export-sheet-backdrop');
const closeBtn = document.getElementById('doc-export-sheet-close');
const close = () => {
exportSheet.classList.remove('open');
exportSheet.setAttribute('aria-hidden', 'true');
mobileExportTrigger.setAttribute('aria-expanded', 'false');
};
if (backdrop) backdrop.addEventListener('click', close);
if (closeBtn) closeBtn.addEventListener('click', close);
exportSheet.querySelectorAll('[data-export-format]').forEach((item) => {
item.addEventListener('click', () => {
const format = item.dataset.exportFormat;
close();
if (format === 'txt') exportTxtFile();
else if (format === 'docx') exportDocxFile();
else if (format === 'pdf') exportPdfFile();
});
});
}
document.addEventListener('click', () => closeExportMenu());
document.addEventListener('keydown', (e) => {
if (e.key === 'Escape') {
closeExportMenu();
const sheet = document.getElementById('doc-export-sheet');
if (sheet && sheet.classList.contains('open')) {
sheet.classList.remove('open');
sheet.setAttribute('aria-hidden', 'true');
const mobileTrigger = document.getElementById('doc-mobile-export-trigger');
if (mobileTrigger) mobileTrigger.setAttribute('aria-expanded', 'false');
}
}
});
const editor = getEditorElement();
if (editor) {
editor.addEventListener('input', () => {
updateExportButtonStates();
});
}
updateExportButtonStates();
}
function closeExportMenu() {
const menu = document.getElementById('doc-export-menu');
const trigger = document.getElementById('doc-export-trigger');
if (menu) menu.classList.remove('is-open');
if (trigger) trigger.setAttribute('aria-expanded', 'false');
// Also close summary export menu
const summMenu = document.getElementById('summary-export-menu');
const summTrigger = document.getElementById('summary-export-trigger');
if (summMenu) summMenu.classList.remove('is-open');
if (summTrigger) summTrigger.setAttribute('aria-expanded', 'false');
}