From 22d9563f395bd6ff27f5cbaaae2b5da4cc4d420a Mon Sep 17 00:00:00 2001 From: syntaxbullet Date: Mon, 28 Apr 2025 21:07:18 +0200 Subject: [PATCH] feat: [Electron Demo] - Add CSS styles, loading spinner, worksheet tabs. --- docz/docs/03-demos/19-desktop/01-electron.md | 3 + docz/static/electron/ew.png | Bin 74510 -> 25564 bytes docz/static/electron/index.html | 54 +-- docz/static/electron/index.js | 294 +++++++++++++--- docz/static/electron/styles.css | 350 +++++++++++++++++++ 5 files changed, 635 insertions(+), 66 deletions(-) create mode 100644 docz/static/electron/styles.css diff --git a/docz/docs/03-demos/19-desktop/01-electron.md b/docz/docs/03-demos/19-desktop/01-electron.md index 711e139..344803e 100644 --- a/docz/docs/03-demos/19-desktop/01-electron.md +++ b/docz/docs/03-demos/19-desktop/01-electron.md @@ -231,6 +231,7 @@ The demo project is wired for `electron-forge` to build the standalone binary. - [`main.js`](pathname:///electron/main.js) : main process script - [`index.html`](pathname:///electron/index.html) : window page - [`index.js`](pathname:///electron/index.js) : script loaded in render context +- [`styles.css`](pathname:///electron/styles.css) : stylesheet :::caution pass @@ -248,6 +249,7 @@ curl -LO https://docs.sheetjs.com/electron/package.json curl -LO https://docs.sheetjs.com/electron/main.js curl -LO https://docs.sheetjs.com/electron/index.html curl -LO https://docs.sheetjs.com/electron/index.js +curl -LO https://docs.sheetjs.com/electron/styles.css ``` :::note pass @@ -265,6 +267,7 @@ curl.exe -LO https://docs.sheetjs.com/electron/package.json curl.exe -LO https://docs.sheetjs.com/electron/main.js curl.exe -LO https://docs.sheetjs.com/electron/index.html curl.exe -LO https://docs.sheetjs.com/electron/index.js +curl.exe -LO https://docs.sheetjs.com/electron/styles.css ``` ::: diff --git a/docz/static/electron/ew.png b/docz/static/electron/ew.png index 67c7b3e1007ebf974a23f1f245474d136fc320f9..8b9db9f4aa3fd99754c29f88fe12d09f863161e8 100644 GIT binary patch literal 25564 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 B`lkQ@ diff --git a/docz/static/electron/index.html b/docz/static/electron/index.html index f20cfe4..8fcafe1 100644 --- a/docz/static/electron/index.html +++ b/docz/static/electron/index.html @@ -7,31 +7,37 @@ SheetJS Electron Demo - + + + + - -

-
-
- + +
+

SheetJS Electron Demo

+

Load a spreadsheet file to see it's contents

+
+
+
+ +

Drag and drop a file here

+

or

+ + +
+
+
+
+

+
+ + + diff --git a/docz/static/electron/index.js b/docz/static/electron/index.js index 35327a2..524953d 100644 --- a/docz/static/electron/index.js +++ b/docz/static/electron/index.js @@ -1,73 +1,283 @@ -/* sheetjs (C) 2013-present SheetJS -- https://sheetjs.com */ const XLSX = require('xlsx'); const electron = require('@electron/remote'); -/* list of supported extensions */ +// --- Supported Extensions --- const EXTENSIONS = "xls|xlsx|xlsm|xlsb|xml|csv|txt|dif|sylk|slk|prn|ods|fods|htm|html|numbers".split("|"); -/* write file with Electron API */ +/** + * Export current HTML table as a spreadsheet file using Electron API. + */ async function exportFile() { const HTMLOUT = document.getElementById('htmlout'); const wb = XLSX.utils.table_to_book(HTMLOUT.getElementsByTagName("TABLE")[0]); const o = await electron.dialog.showSaveDialog({ title: 'Save file as', - filters: [{ - name: "Spreadsheets", - extensions: EXTENSIONS - }] + filters: [{ name: "Spreadsheets", extensions: EXTENSIONS }] }); XLSX.writeFile(wb, o.filePath); electron.dialog.showMessageBox({ message: "Exported data to " + o.filePath, buttons: ["OK"] }); } document.getElementById('exportBtn').addEventListener('click', exportFile, false); -/* common handler to create HTML tables on the page */ -function process_wb(wb) { - const HTMLOUT = document.getElementById('htmlout'); - const XPORT = document.getElementById('exportBtn'); - XPORT.disabled = false; - HTMLOUT.innerHTML = ""; - wb.SheetNames.forEach(function(sheetName) { - const htmlstr = XLSX.utils.sheet_to_html(wb.Sheets[sheetName],{editable:true}); - HTMLOUT.innerHTML += htmlstr; +/** + * Create a element for a table from a header row array. + */ +function createTableHead(headerRow) { + const thead = document.createElement('thead'); + const headRow = document.createElement('tr'); + headerRow.forEach(cell => { + const th = document.createElement('th'); + th.textContent = cell !== undefined ? cell : ''; + headRow.appendChild(th); }); + thead.appendChild(headRow); + return thead; } -/* read file with Electron API */ +/** + * Create a element for a table from a 2D data array. + */ +function createTableBody(data) { + const tbody = document.createElement('tbody'); + for (let i = 1; i < data.length; ++i) { + const row = data[i]; + const tr = document.createElement('tr'); + row.forEach(cell => { + const td = document.createElement('td'); + td.textContent = cell !== undefined ? cell : ''; + tr.appendChild(td); + }); + tbody.appendChild(tr); + } + return tbody; +} + +/** + * Wrap a table in a responsive container div. + */ +function createResponsiveDiv(table) { + const responsiveDiv = document.createElement('div'); + responsiveDiv.className = 'table-responsive'; + responsiveDiv.appendChild(table); + return responsiveDiv; +} + +// --- Main Table Processing --- +/** + * Render all sheets of a workbook as HTML tables with clickable tabs. + */ +function renderWorkbookToTables(wb) { + const HTMLOUT = document.getElementById('htmlout'); + const exportBtn = document.getElementById('exportBtn'); + exportBtn.disabled = false; + HTMLOUT.innerHTML = ""; + + // Create tab container + const tabContainer = document.createElement('div'); + tabContainer.className = 'sheetjs-tab-container'; + + // Create content container + const contentContainer = document.createElement('div'); + contentContainer.className = 'sheetjs-tab-content'; + + // Store tables for each sheet + const tables = []; + + wb.SheetNames.forEach(function(sheetName, idx) { + // Create tab button + const tab = document.createElement('button'); + tab.className = 'sheetjs-tab-btn text-small'; + tab.textContent = sheetName; + tab.setAttribute('data-sheet-idx', idx); + if(idx === 0) tab.classList.add('active'); + tab.addEventListener('click', function() { + // Remove active from all tabs + Array.from(tabContainer.children).forEach(btn => btn.classList.remove('active')); + tab.classList.add('active'); + // Hide all tables and show the selected one + tables.forEach((tableDiv, tIdx) => { + tableDiv.style.display = (tIdx === idx) ? '' : 'none'; + }); + }); + tabContainer.appendChild(tab); + + // Create table for this sheet + const sheet = wb.Sheets[sheetName]; + const data = XLSX.utils.sheet_to_json(sheet, { header: 1 }); + if (data.length === 0) { + const emptyDiv = document.createElement('div'); + emptyDiv.textContent = `Sheet '${sheetName}' is empty.`; + tables.push(emptyDiv); + contentContainer.appendChild(emptyDiv); + return; + } + const table = document.createElement('table'); + table.className = 'sheetjs-table'; + // Remove caption, handled by tab + table.appendChild(createTableHead(data[0])); + table.appendChild(createTableBody(data)); + const responsiveDiv = createResponsiveDiv(table); + if(idx !== 0) responsiveDiv.style.display = 'none'; + tables.push(responsiveDiv); + contentContainer.appendChild(responsiveDiv); + }); + + // Only show tabs if more than one sheet + if (wb.SheetNames.length > 1) { + HTMLOUT.appendChild(tabContainer); + } + HTMLOUT.appendChild(contentContainer); +} + +// --- File Import Logic --- +/** + * Handle file selection dialog and render the selected spreadsheet. + */ async function handleReadBtn() { const o = await electron.dialog.showOpenDialog({ title: 'Select a file', - filters: [{ - name: "Spreadsheets", - extensions: EXTENSIONS - }], + filters: [{ name: "Spreadsheets", extensions: EXTENSIONS }], properties: ['openFile'] }); if(o.filePaths.length == 0) throw new Error("No file was selected!"); - process_wb(XLSX.readFile(o.filePaths[0])); + showSpinner(); + // yield to event loop to render spinner + await new Promise(resolve => setTimeout(resolve, 200)); + try { + const filePath = o.filePaths[0]; + const fileName = filePath.split(/[/\\]/).pop(); + renderWorkbookToTables(XLSX.readFile(filePath)); + showLoadedFileUI(fileName); + } finally { + hideSpinner(); + } } -document.getElementById('readBtn').addEventListener('click', handleReadBtn, false); -/* read file with Web APIs */ +// --- UI Templates and Helpers --- +/** + * Return HTML for the drag-and-drop area. + */ +function getDropAreaHTML() { + return `
+ +

Drag and drop a file here

+

or

+ + +
`; +} + +/** + * Return HTML for the file-loaded UI. + */ +function getFileLoadedHTML(fileName) { + return `
+ ${fileName} + +
`; +} + +/** + * Update the drop-container's inner HTML. + */ +function updateDropContainer(html) { + document.getElementById('drop-container').innerHTML = html; +} + +/** + * Restore the original drag-and-drop UI and reset state. + */ +function restoreDropUI() { + updateDropContainer(getDropAreaHTML()); + // Remove the table/output + const htmlout = document.getElementById('htmlout'); + if (htmlout) htmlout.innerHTML = ''; + // Reset export button state + const exportBtn = document.getElementById('exportBtn'); + if (exportBtn) { + exportBtn.disabled = true; + exportBtn.classList.add('disabled'); + } + // Re-attach event listeners after restoring UI + attachDropListeners(); +} + +/** + * Show UI for loaded file and attach unload handler. + */ +function showLoadedFileUI(fileName) { + updateDropContainer(getFileLoadedHTML(fileName)); + document.getElementById('unloadBtn').addEventListener('click', restoreDropUI); +} + +// --- Event Listener Helpers --- +/** + * Add an event listener to an element if it exists. + */ +function addListener(id, event, handler) { + const el = document.getElementById(id); + if (el) el.addEventListener(event, handler, false); +} + +/** + * Attach drag-and-drop and file input listeners to the UI. + */ +function attachDropListeners() { + addListener('readIn', 'change', (e) => { + showSpinner(); + // Defer to next tick to ensure spinner renders before heavy work + setTimeout(() => readFile(e.target.files), 0); + }); + addListener('readBtn', 'click', handleReadBtn); + const drop = document.getElementById('drop'); + const dropContainer = document.getElementById('drop-container'); + if (!drop || !dropContainer) return; + const handleDrag = (e) => { + e.stopPropagation(); e.preventDefault(); + e.dataTransfer.dropEffect = 'copy'; + dropContainer.classList.add('drag-over'); + }; + const handleDragLeave = (e) => { + e.stopPropagation(); e.preventDefault(); + dropContainer.classList.remove('drag-over'); + }; + drop.addEventListener('drop', (e) => { + e.stopPropagation(); e.preventDefault(); + dropContainer.classList.remove('drag-over'); + readFile(e.dataTransfer.files); + }, false); + drop.addEventListener('dragenter', handleDrag, false); + drop.addEventListener('dragover', handleDrag, false); + drop.addEventListener('dragleave', handleDragLeave, false); + drop.addEventListener('dragend', handleDragLeave, false); +} + +// --- Spinner Helpers --- +function showSpinner() { + const spinner = document.getElementById('spinner-overlay'); + if (spinner) spinner.style.display = 'flex'; +} +function hideSpinner() { + const spinner = document.getElementById('spinner-overlay'); + if (spinner) spinner.style.display = 'none'; +} + +// --- File Reader for Drag-and-Drop and Input --- +/** + * Read file(s) from input or drag-and-drop and render as table. + */ async function readFile(files) { + if (!files || files.length === 0) return; const f = files[0]; - const data = await f.arrayBuffer(); - process_wb(XLSX.read(data)); + showSpinner(); + try { + const data = await f.arrayBuffer(); + renderWorkbookToTables(XLSX.read(data)); + showLoadedFileUI(f.name); + } finally { + hideSpinner(); + } } -// file input element -document.getElementById('readIn').addEventListener('change', (e) => { readFile(e.target.files); }, false); - -// drag and drop -const drop = document.getElementById('drop'); -drop.addEventListener('drop', (e) => { - e.stopPropagation(); e.preventDefault(); - readFile(e.dataTransfer.files); -}, false); - -const handleDrag = (e) => { - e.stopPropagation(); e.preventDefault(); - e.dataTransfer.dropEffect = 'copy'; -}; -drop.addEventListener('dragenter', handleDrag, false); -drop.addEventListener('dragover', handleDrag, false); +// --- Initial Setup --- +attachDropListeners(); diff --git a/docz/static/electron/styles.css b/docz/static/electron/styles.css new file mode 100644 index 0000000..99405ab --- /dev/null +++ b/docz/static/electron/styles.css @@ -0,0 +1,350 @@ +/* ===================== + Root Variables + ===================== */ +:root { + --text-base: #212529; + --text-muted: #666363; + --text-accent: #0c9244; + --button-primary: #212529; + --button-text: #fff; + --button-primary-hover: #0c9244; + --button-primary-active: #075025; + --button-primary-disabled: #6c757d; + --white: #fff; + --black: #000; + --table-even: #f6f6f6; + --table-hover: #88dda98f; + --table-head: #f8f9faaf; + --danger: #c0392b; +} + +/* ===================== + Global Styles & Reset + ===================== */ +body, html { + width: 100%; + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + min-height: 100vh; + width: 100%; + margin: 0; + box-sizing: border-box; + font-family: "Roboto", sans-serif; + font-optical-sizing: auto; + font-style: normal; + display: flex; + flex-direction: column; + align-items: stretch; + justify-content: flex-start; +} + +li { + list-style: none; +} + +/* ===================== + Typography + ===================== */ +h1, p { + margin: 0; + color: var(--text-base); + text-align: center; +} + +.text-muted { + color: var(--text-muted) !important; +} + +.text-condensed { + font-family: "Roboto Condensed", sans-serif; + font-optical-sizing: auto; + font-style: normal; +} + +.text-small { + font-size: 0.875rem !important; +} + +/* ===================== + Links + ===================== */ +a { + text-decoration: none; + color: var(--text-base); +} +a:hover { + text-decoration: underline; + color: var(--text-accent); +} + +/* ===================== + Header + ===================== */ +header { + margin: 4rem 0; +} + +/* ===================== + Buttons & Inputs + ===================== */ +button, input[type="submit"] { + background-color: var(--button-primary); + border: none; + padding: 0.5rem 1rem; + border-radius: 4px; + cursor: pointer; + transition: background-color 0.2s ease; + color: var(--button-text); +} +button:hover, input[type="submit"]:hover { + background-color: var(--button-primary-hover); +} +button:active, input[type="submit"]:active { + background-color: var(--button-primary-active); +} +button:disabled, input[type="submit"]:disabled { + background-color: var(--button-primary-disabled); + cursor: not-allowed; + opacity: 0.3; +} +input[type="file"] { + display: none; +} + +button:focus, input[type="submit"]:focus, input[type="file"]:focus { + outline: 3px solid var(--text-accent); + outline-offset: 2px; + box-shadow: 0 0 0 2px var(--text-accent); + z-index: 2; +} + +/* ===================== + File Upload + ===================== */ +.file-upload { + display: flex; + margin: 1rem auto; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 0.5rem; + border: 1px dashed var(--text-muted); + padding: 1rem; + width: 75%; + max-width: 600px; + border-radius: 4px; + background-color: var(--white); +} +.file-upload input[type="file"] { + display: none; +} +.file-upload.drag-over { + border-color: var(--text-accent); + background-color: #e6f8ee; + box-shadow: 0 0 0 2px var(--text-accent); + transition: border-color 0.2s, background-color 0.2s, box-shadow 0.2s; +} + +#drop { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + gap: 0.5rem; +} + +/* ===================== + Export Section + ===================== */ +.export { + margin: 2rem 0; + flex-grow: 1; +} + +/* ===================== + Footer + ===================== */ +footer { + background-color: #eee; + padding: 1rem; + display: flex; + justify-content: center; + align-items: center; + position: relative; + bottom: 0; +} +footer ul { + margin: 0; + padding: 0; + display: flex; + justify-content: center; + align-items: center; + gap: 1rem; + width: 100%; +} +footer li { + list-style: none; +} + +/* ===================== + Responsive Table Container + ===================== */ +.table-responsive { + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + margin: 2rem 0; +} + +/* ===================== + SheetJS Table Styles + ===================== */ +.sheetjs-table { + width: 80%; + padding: 1rem; + max-width: 900px; + border-collapse: collapse; + margin: 0 auto; + font-family: "Roboto", "Roboto Condensed", sans-serif; + overflow: hidden; +} +#htmlout { + padding: 1rem; +} +.sheetjs-table caption { + caption-side: top; + font-family: "Roboto Condensed", sans-serif; + font-size: 1.2rem; + color: var(--text-accent); + padding: 0.5rem; + letter-spacing: 0.05em; +} +.sheetjs-table thead { + background: var(--table-head); +} +.sheetjs-table th, .sheetjs-table td { + padding: 0.25rem 1rem; + border: 1px solid var(--text-muted); + text-align: left; + font-size: 1rem; +} +.sheetjs-table th { + color: var(--text-base); + font-family: "Roboto Condensed", sans-serif; + font-weight: 600; + letter-spacing: 0.03em; +} +.sheetjs-table tbody tr:nth-child(even) { + background: var(--table-even); +} +.sheetjs-table tbody tr:hover { + background: var(--table-hover); +} + +/* ===================== + File Status/Loaded/Unload + ===================== */ +.file-status { + margin-top: 10px; + font-size: 1rem; + color: var(--gray-888); + min-height: 1.5em; + transition: color 0.2s; +} +.file-loaded { + display: flex; + gap: 1rem; + align-items: center; + justify-content: space-between; + padding: 1em; +} +.unload-btn:hover { + background: var(--danger); + color: var(--white); +} + +/* ===================== + Sheet Tabs + ===================== */ +.sheetjs-tab-container { + display: flex; + gap: 0.5rem; + margin: 1rem auto 0.5rem auto; + justify-content: center; +} +.sheetjs-tab-btn { + background: var(--button-primary); + border: none; + padding: 0.5rem 1.2rem; + border-radius: 6px 6px 0 0; + font-family: "Roboto Condensed", sans-serif; + font-size: 1rem; + color: var(--button-text); + cursor: pointer; + transition: background 0.18s, color 0.18s, box-shadow 0.18s; + outline: none; + position: relative; + top: 2px; + box-shadow: 0 2px 6px rgba(12, 146, 68, 0.05); + opacity: 0.94; +} +.sheetjs-tab-btn.active, .sheetjs-tab-btn:focus { + background: var(--text-accent); + color: var(--white); + z-index: 2; + opacity: 1; + box-shadow: 0 4px 12px rgba(12, 146, 68, 0.12); +} +.sheetjs-tab-btn:hover:not(.active) { + background: var(--button-primary-hover); + color: var(--white); + opacity: 1; +} +.sheetjs-tab-content { + width: 100%; +} + +/* Spinner Styles */ +.spinner-overlay { + position: fixed; + top: 0; left: 0; + width: 100vw; + height: 100vh; + background: rgba(255,255,255,0.6); + display: flex; + align-items: center; + justify-content: center; + z-index: 10000; +} +.spinner { + border: 6px solid #f3f3f3; + border-top: 6px solid var(--text-accent); + border-radius: 50%; + width: 48px; + height: 48px; + animation: spin 1s linear infinite; +} +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + +/* ===================== + Media Queries + ===================== */ +@media (max-width: 700px) { + .sheetjs-table th, .sheetjs-table td { + padding: 0.25rem 0.5rem; + font-size: 0.9rem; + } + .sheetjs-table caption { + font-size: 1rem; + padding: 0.25rem; + } +} + +
-SheetJS Electron Demo
-
-
-
Drop a spreadsheet file here to see sheet data
- ... or click here to select a file - -