improved spreadsheet editing
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
@@ -2,7 +2,15 @@
|
||||
import { onMount, onDestroy } from 'svelte';
|
||||
import { t } from '../translations.svelte';
|
||||
|
||||
let { classes='markdown', markdown=$bindable({source:'',rendered:''}), onclick = null, oncontextmenu = null, title='', wrapper = 'div' } = $props();
|
||||
let {
|
||||
classes='markdown',
|
||||
markdown=$bindable({source:'',rendered:''}),
|
||||
onclick = null,
|
||||
oncontextmenu = e => {},
|
||||
sheet = null,
|
||||
title='',
|
||||
wrapper = 'div'
|
||||
} = $props();
|
||||
let jspreadsheet = null;
|
||||
const regex = /@startsheet[\s\S]*?@endsheet/g;
|
||||
const number = /^[0-9.-]+$/
|
||||
@@ -31,16 +39,16 @@
|
||||
if (!markdown.rendered) return;
|
||||
let sheets = document.getElementsByClassName('spreadsheet');
|
||||
for (let i = 0; i < sheets.length; i++) {
|
||||
let sheet = sheets[i];
|
||||
let raw = sheet.innerHTML.trim();
|
||||
let current_sheet = sheets[i];
|
||||
let raw = current_sheet.innerHTML.trim();
|
||||
if (!jspreadsheet) {
|
||||
sheet.innerHTML = t('Loading spreadsheet library…');
|
||||
current_sheet.innerHTML = t('Loading spreadsheet library…');
|
||||
let module = await import('jspreadsheet-ce'); // path or package name
|
||||
await import('jspreadsheet-ce/dist/jspreadsheet.css');
|
||||
jspreadsheet = module.default ?? module;
|
||||
}
|
||||
if (!jspreadsheet) break; // break loop if library fails to load
|
||||
sheet.innerHTML = t('Processing spreadsheet data…');
|
||||
current_sheet.innerHTML = t('Processing spreadsheet data…');
|
||||
|
||||
|
||||
// Use parseCSV from the helpers
|
||||
@@ -60,14 +68,25 @@
|
||||
render: formatCell,
|
||||
width:`${len}0px`
|
||||
}});
|
||||
var w = window.innerWidth;
|
||||
if (classes == 'preview') w = w/2;
|
||||
let config = {
|
||||
worksheets : [{
|
||||
data:parsed,
|
||||
columns
|
||||
columns,
|
||||
tableOverflow: true,
|
||||
tableWidth: `${w}px`,
|
||||
}],
|
||||
onchange : (instance, cell, x, y, value) => update(instance, i)
|
||||
onchange : (instance, cell, x, y, value) => update(instance, i),
|
||||
oneditionstart : (instance, cell, x, y) => oncontextmenu({sheet:current_sheet.id, x,y})
|
||||
};
|
||||
let wb = jspreadsheet(document.getElementById(sheet.id), config);
|
||||
let wb = jspreadsheet(document.getElementById(current_sheet.id), config);
|
||||
if (sheet && sheet.sheet == current_sheet.id) {
|
||||
let cell = wb[0].getCellFromCoords(sheet.x, sheet.y);
|
||||
cell.scrollIntoView({block:'center'});
|
||||
wb[0].updateSelectionFromCoords(sheet.x, sheet.y);
|
||||
wb[0].openEditor(cell);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user