SAving Button

This commit is contained in:
Gabriele Cannata 2023-07-28 18:39:41 +02:00
parent 15443c4fe7
commit df96e128d4
4 changed files with 52 additions and 917 deletions

File diff suppressed because one or more lines are too long

903
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -31,7 +31,6 @@
"esbuild-plugin-less": "^1.2.1",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"x-data-spreadsheet": "^1.1.9",
"xlsx": "https://cdn.sheetjs.com/xlsx-0.20.0/xlsx-0.20.0.tgz"
}
}

View file

@ -10,6 +10,7 @@ import Spreadsheet from "x-data-spreadsheet";
import * as XLSX from "xlsx"
import { stox, xtos } from "../utils/xlsxpread"
var saveIcon = 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTc3MTc3MDkyOTg4IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjI2NzgiIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxkZWZzPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PC9zdHlsZT48L2RlZnM+PHBhdGggZD0iTTIxMy4zMzMzMzMgMTI4aDU5Ny4zMzMzMzRhODUuMzMzMzMzIDg1LjMzMzMzMyAwIDAgMSA4NS4zMzMzMzMgODUuMzMzMzMzdjU5Ny4zMzMzMzRhODUuMzMzMzMzIDg1LjMzMzMzMyAwIDAgMS04NS4zMzMzMzMgODUuMzMzMzMzSDIxMy4zMzMzMzNhODUuMzMzMzMzIDg1LjMzMzMzMyAwIDAgMS04NS4zMzMzMzMtODUuMzMzMzMzVjIxMy4zMzMzMzNhODUuMzMzMzMzIDg1LjMzMzMzMyAwIDAgMSA4NS4zMzMzMzMtODUuMzMzMzMzeiBtMzY2LjkzMzMzNCAxMjhoMzQuMTMzMzMzYTI1LjYgMjUuNiAwIDAgMSAyNS42IDI1LjZ2MTE5LjQ2NjY2N2EyNS42IDI1LjYgMCAwIDEtMjUuNiAyNS42aC0zNC4xMzMzMzNhMjUuNiAyNS42IDAgMCAxLTI1LjYtMjUuNlYyODEuNmEyNS42IDI1LjYgMCAwIDEgMjUuNi0yNS42ek0yMTMuMzMzMzMzIDIxMy4zMzMzMzN2NTk3LjMzMzMzNGg1OTcuMzMzMzM0VjIxMy4zMzMzMzNIMjEzLjMzMzMzM3ogbTEyOCAwdjI1NmgzNDEuMzMzMzM0VjIxMy4zMzMzMzNoODUuMzMzMzMzdjI5OC42NjY2NjdhNDIuNjY2NjY3IDQyLjY2NjY2NyAwIDAgMS00Mi42NjY2NjcgNDIuNjY2NjY3SDI5OC42NjY2NjdhNDIuNjY2NjY3IDQyLjY2NjY2NyAwIDAgMS00Mi42NjY2NjctNDIuNjY2NjY3VjIxMy4zMzMzMzNoODUuMzMzMzMzek0yNTYgMjEzLjMzMzMzM2g4NS4zMzMzMzMtODUuMzMzMzMzeiBtNDI2LjY2NjY2NyAwaDg1LjMzMzMzMy04NS4zMzMzMzN6IG0wIDU5Ny4zMzMzMzR2LTEyOEgzNDEuMzMzMzMzdjEyOEgyNTZ2LTE3MC42NjY2NjdhNDIuNjY2NjY3IDQyLjY2NjY2NyAwIDAgMSA0Mi42NjY2NjctNDIuNjY2NjY3aDQyNi42NjY2NjZhNDIuNjY2NjY3IDQyLjY2NjY2NyAwIDAgMSA0Mi42NjY2NjcgNDIuNjY2NjY3djE3MC42NjY2NjdoLTg1LjMzMzMzM3ogbTg1LjMzMzMzMyAwaC04NS4zMzMzMzMgODUuMzMzMzMzek0zNDEuMzMzMzMzIDgxMC42NjY2NjdIMjU2aDg1LjMzMzMzM3oiIHAtaWQ9IjI2NzkiIGZpbGw9IiMyYzJjMmMiPjwvcGF0aD48L3N2Zz4='
function resolve_book_type(fileName: string): XLSX.BookType {
const _BT: any = {
@ -28,14 +29,7 @@ function resolve_book_type(fileName: string): XLSX.BookType {
return bookType as XLSX.BookType;
}
function onElementRemoved(element, callback) {
new MutationObserver(function (mutations) {
if (!document.body.contains(element)) {
callback();
this.disconnect();
}
}).observe(element.parentElement, { childList: true });
}
export function processCodeBlock(source: string, el: HTMLElement, settings: SheetjsSettings, ctx: MarkdownPostProcessorContext) {
@ -82,7 +76,8 @@ export function processCodeBlock(source: string, el: HTMLElement, settings: Shee
// container.style.height = "800px";
// container.style.position="relative";
// const root = createRoot(el);
const s = new Spreadsheet(container, {
const spreadsheet_options: any = {
mode: 'edit', // edit | read
showToolbar: true,
showGrid: true,
@ -117,7 +112,46 @@ export function processCodeBlock(source: string, el: HTMLElement, settings: Shee
italic: false,
} as any,
},
})
}
if (!filename) {
spreadsheet_options.extendToolbar = {
left: [
{
tip: 'Save',
icon: saveIcon,
onClick: (data, sheet) => {
console.log('click save button', data, sheet)
const s = (ctx as any).spreadsheet;
const wb = xtos(s.getData() as any[]) as XLSX.WorkBook;
// const wb = xtos(data as any[]) as XLSX.WorkBook
const dataToSave = XLSX.write(wb, {
bookType: "xlsx",
type: "base64"
// bookType: "txt",
// type: "string"
});
// view contains the editor to change the markdown
const view: MarkdownView = this.app.workspace.getActiveViewOfType(MarkdownView);
// the context contains the begin and end of the block in the markdown file
const sec = ctx.getSectionInfo((ctx as any).el as HTMLElement);
// const lineno = sec?.lineStart + (i + 1);
// let line = view?.editor.getLine(lineno).split(",");
// line[j] = ev.currentTarget.value;
if (sec) {
const obj = { data: dataToSave }
const yaml = stringifyYaml(obj) + "\n"
view?.editor.replaceRange(yaml, { line: sec?.lineStart + 1, ch: 0 }, { line: sec?.lineEnd, ch: 0 }, "*")
console.log("Data saved on code block")
}
}
}
]
}
}
const s = new Spreadsheet(container, spreadsheet_options)
.loadData({
})
@ -140,10 +174,6 @@ export function processCodeBlock(source: string, el: HTMLElement, settings: Shee
// XLSX.writeFile(xtos(s.getData(data)) as any, filename);
}, 1000));
if (!filename) {
// body > div.app-container > div.horizontal-main-container > div > div.workspace-split.mod-vertical.mod-root > div > div.workspace-tab-container > div.workspace-leaf.mod-active > div > div.view-content > div.markdown-source-view.cm-s-obsidian.mod-cm6.is-folding.is-live-preview.node-insert-event > div > div.cm-scroller > div.cm-sizer > div.cm-contentContainer > div > div.cm-preview-code-block.cm-embed-block.markdown-rendered > div.block-language-sheet > div > div > div.x-spreadsheet-toolbar > div > div:nth-child(3)
const toolbar = s.getElementBySelector(".x-spreadsheet-toolbar")
}
// TODO: wait for data to be loaded before creating the spreadsheet
if (filename) {