almost there:
- spreadsheet is rendered from fenced code block - source gets updated when spreadsheet is updated missing: update spreadsheet, when source is updated
This commit is contained in:
@@ -2,10 +2,26 @@
|
|||||||
import { onMount } from 'svelte';
|
import { onMount } from 'svelte';
|
||||||
let { classes='markdown', markdown, onclick = null, oncontextmenu = null, title='', wrapper = 'div' } = $props();
|
let { classes='markdown', markdown, onclick = null, oncontextmenu = null, title='', wrapper = 'div' } = $props();
|
||||||
let jspreadsheet = null;
|
let jspreadsheet = null;
|
||||||
|
const regex = /@startsheet[\s\S]*?@endsheet/g;
|
||||||
|
|
||||||
|
function update(sheet, index){
|
||||||
|
const data = sheet.getData(false,false,'|',false);
|
||||||
|
markdown.source = replaceNthSpreadsheet(markdown.source,index,data);
|
||||||
|
}
|
||||||
|
|
||||||
|
function replaceNthSpreadsheet(text, n, newContent) {
|
||||||
|
const blocks = text.match(regex) || [];
|
||||||
|
if (blocks.length < n+1){
|
||||||
|
console.warn(`cannot replace block ${n}: only ${blocks.length} blocks found!`);
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
|
return text.replace(regex, (match, index) => index === n ? `@startsheet\n${newContent}\n@endsheet` : match);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
async function transform(){
|
async function transform(){
|
||||||
if (!markdown.rendered) return;
|
if (!markdown.rendered) return;
|
||||||
console.log('transform');
|
|
||||||
let sheets = document.getElementsByClassName('spreadsheet');
|
let sheets = document.getElementsByClassName('spreadsheet');
|
||||||
for (let i = 0; i < sheets.length; i++) {
|
for (let i = 0; i < sheets.length; i++) {
|
||||||
if (!jspreadsheet) {
|
if (!jspreadsheet) {
|
||||||
@@ -21,13 +37,16 @@
|
|||||||
// Use parseCSV from the helpers
|
// Use parseCSV from the helpers
|
||||||
const parsed = jspreadsheet.helpers.parseCSV(raw, '|');
|
const parsed = jspreadsheet.helpers.parseCSV(raw, '|');
|
||||||
|
|
||||||
jspreadsheet(document.getElementById(sheet.id), {worksheets:[{data:parsed}]});
|
jspreadsheet(document.getElementById(sheet.id), {
|
||||||
//sheet.innerHTML = 'spreadsheet transformation not implemented, yet!';
|
worksheets : [{data:parsed}],
|
||||||
|
onchange : (instance, cell, x, y, value) => update(instance, i)
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: use target from urls.svelte to replace internal URLs
|
// TODO: use target from urls.svelte to replace internal URLs
|
||||||
onMount(transform)
|
onMount(transform);
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if markdown.rendered}
|
{#if markdown.rendered}
|
||||||
|
|||||||
Reference in New Issue
Block a user