mirror of
https://github.com/canna71/obsidian-sheets.git
synced 2026-07-22 08:30:27 +00:00
SAving Button
This commit is contained in:
parent
15443c4fe7
commit
df96e128d4
4 changed files with 52 additions and 917 deletions
7
main.css
7
main.css
File diff suppressed because one or more lines are too long
903
package-lock.json
generated
903
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue