From caa1281d23a56528d1b431e9ddc09b97ab0baf02 Mon Sep 17 00:00:00 2001 From: Zsolt Viczian Date: Fri, 17 Sep 2021 21:54:01 +0200 Subject: [PATCH] 1.3.9 --- docs/API/attributes_functions_overview.md | 10 ++++- docs/API/utility.md | 25 ++++++++++- manifest.json | 2 +- src/ExcalidrawAutomate.ts | 52 ++++++++++++++++++++--- src/ExcalidrawData.ts | 1 - src/ExcalidrawView.ts | 10 +++-- src/main.ts | 5 ++- versions.json | 2 +- 8 files changed, 88 insertions(+), 19 deletions(-) diff --git a/docs/API/attributes_functions_overview.md b/docs/API/attributes_functions_overview.md index 36aa1b5..dd8f497 100644 --- a/docs/API/attributes_functions_overview.md +++ b/docs/API/attributes_functions_overview.md @@ -43,9 +43,15 @@ export interface ExcalidrawAutomate extends Window { filename?: string, foldername?:string, templatePath?:string, - onNewPane?: boolean + onNewPane?: boolean, + frontmatterKeys?:{ + "excalidraw-plugin"?: "raw"|"parsed", + "excalidraw-link-prefix"?: string, + "excalidraw-link-brackets"?: boolean, + "excalidraw-url-prefix"?: string + } } - ):Promise; + ):Promise; createSVG (templatePath?:string):Promise; createPNG (templatePath?:string):Promise; wrapText (text:string, lineLen:number):string; diff --git a/docs/API/utility.md b/docs/API/utility.md index ac5254d..b314f62 100644 --- a/docs/API/utility.md +++ b/docs/API/utility.md @@ -35,7 +35,7 @@ Returns the element object matching the id. If the element does not exist, retur ```typescript async create(params?:{filename: string, foldername:string, templatePath:string, onNewPane: boolean}) ``` -Creates the drawing and opens it. +Creates the drawing and opens it. Returns the full filepath of the created file. `filename` is the filename without extension of the drawing to be created. If `null`, then Excalidraw will generate a filename. @@ -45,9 +45,30 @@ Creates the drawing and opens it. `onNewPane` defines where the new drawing should be created. `false` will open the drawing on the current active leaf. `true` will open the drawing by vertically splitting the current leaf. +`frontmatterKeys` are the set of frontmatter keys to apply to the document + { + excalidraw-plugin?: "raw"|"parsed", + excalidraw-link-prefix?: string, + excalidraw-link-brackets?: boolean, + excalidraw-url-prefix?: string + } + Example: ```javascript -create({filename:"my drawing", foldername:"myfolder/subfolder/", templatePath: "Excalidraw/template.excalidraw", onNewPane: true}); +create ( + { + filename:"my drawing", + foldername:"myfolder/subfolder/", + templatePath: "Excalidraw/template.excalidraw", + onNewPane: true, + frontmatterKeys: { + "excalidraw-plugin": "parsed", + "excalidraw-link-prefix": "", + "excalidraw-link-brackets": true, + "excalidraw-url-prefix": "🌐", + } + } +); ``` ### createSVG() ```typescript diff --git a/manifest.json b/manifest.json index 4dfc342..b1a4d13 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "id": "obsidian-excalidraw-plugin", "name": "Excalidraw", - "version": "1.3.8", + "version": "1.3.9", "minAppVersion": "0.12.0", "description": "An Obsidian plugin to edit and view Excalidraw drawings", "author": "Zsolt Viczian", diff --git a/src/ExcalidrawAutomate.ts b/src/ExcalidrawAutomate.ts index c7f8b44..1b30008 100644 --- a/src/ExcalidrawAutomate.ts +++ b/src/ExcalidrawAutomate.ts @@ -61,9 +61,15 @@ export interface ExcalidrawAutomate extends Window { filename?: string, foldername?:string, templatePath?:string, - onNewPane?: boolean + onNewPane?: boolean, + frontmatterKeys?:{ + "excalidraw-plugin"?: "raw"|"parsed", + "excalidraw-link-prefix"?: string, + "excalidraw-link-brackets"?: boolean, + "excalidraw-url-prefix"?: string + } } - ):Promise; + ):Promise; createSVG (templatePath?:string):Promise; createPNG (templatePath?:string):Promise; wrapText (text:string, lineLen:number):string; @@ -243,15 +249,43 @@ export async function initExcalidrawAutomate(plugin: ExcalidrawPlugin) { getElement(id:string):ExcalidrawElement { return this.elementsDict[id]; }, - async create(params?:{filename?: string, foldername?:string, templatePath?:string, onNewPane?: boolean}) { + async create ( + params?:{ + filename?: string, + foldername?:string, + templatePath?:string, + onNewPane?: boolean, + frontmatterKeys?:{ + "excalidraw-plugin"?: "raw"|"parsed", + "excalidraw-link-prefix"?: string, + "excalidraw-link-brackets"?: boolean, + "excalidraw-url-prefix"?: string + } + } + ):Promise { const template = params?.templatePath ? (await getTemplate(params.templatePath)) : null; let elements = template ? template.elements : []; elements = elements.concat(this.getElements()); - plugin.createDrawing( + let frontmatter:string; + if(params?.frontmatterKeys) { + const keys = Object.keys(params.frontmatterKeys); + if(!keys.includes("excalidraw-plugin")) { + params.frontmatterKeys["excalidraw-plugin"] = "parsed"; + } + frontmatter = "---\n\n"; + for(const key of Object.keys(params.frontmatterKeys)) { + //@ts-ignore + frontmatter += key + ": " + (params.frontmatterKeys[key]==="" ? '""' : params.frontmatterKeys[key]) +"\n"; + } + frontmatter += "\n---\n"; + } else { + frontmatter = template?.frontmatter ? template.frontmatter : FRONTMATTER; + } + return plugin.createDrawing( params?.filename ? params.filename + '.excalidraw.md' : this.plugin.getNextDefaultFilename(), params?.onNewPane ? params.onNewPane : false, params?.foldername ? params.foldername : this.plugin.settings.folder, - FRONTMATTER + plugin.exportSceneToMD( + frontmatter + plugin.exportSceneToMD( JSON.stringify({ type: "excalidraw", version: 2, @@ -704,21 +738,27 @@ export function measureText (newText:string, fontSize:number, fontFamily:number) return {w: width, h: height, baseline: baseline }; }; -async function getTemplate(fileWithPath: string):Promise<{elements: any,appState: any}> { +async function getTemplate(fileWithPath: string):Promise<{elements: any,appState: any, frontmatter: string}> { const app = window.ExcalidrawAutomate.plugin.app; const vault = app.vault; const file = app.metadataCache.getFirstLinkpathDest(normalizePath(fileWithPath),''); if(file && file instanceof TFile) { const data = await vault.read(file); + + let trimLocation = data.search("# Text Elements\n"); + if(trimLocation == -1) trimLocation = data.search("# Drawing\n"); + const excalidrawData = JSON_parse(getJSON(data)); return { elements: excalidrawData.elements, appState: excalidrawData.appState, + frontmatter: data.substring(0,trimLocation) }; }; return { elements: [], appState: {}, + frontmatter: null } } diff --git a/src/ExcalidrawData.ts b/src/ExcalidrawData.ts index 24231c3..4106a8d 100644 --- a/src/ExcalidrawData.ts +++ b/src/ExcalidrawData.ts @@ -7,7 +7,6 @@ import { } from "./constants"; import { measureText } from "./ExcalidrawAutomate"; import ExcalidrawPlugin from "./main"; -import { ExcalidrawSettings } from "./settings"; import { JSON_parse } from "./constants"; diff --git a/src/ExcalidrawView.ts b/src/ExcalidrawView.ts index c35af81..43372c3 100644 --- a/src/ExcalidrawView.ts +++ b/src/ExcalidrawView.ts @@ -218,9 +218,11 @@ export default class ExcalidrawView extends TextFileView { //@ts-ignore search[0].view.setQuery("tag:"+tags.value[1]); this.app.workspace.revealLeaf(search[0]); - //if(this.gotoFullscreen.style.display=="none") this.toggleFullscreen(); - document.exitFullscreen(); - this.zoomToFit(); + //if(this.gotoFullscreen.style.display=="none") this.toggleFullscreen(); + if(document.fullscreenElement === this.contentEl) { + document.exitFullscreen(); + this.zoomToFit(); + } return; } @@ -341,7 +343,7 @@ export default class ExcalidrawView extends TextFileView { } if(!this.excalidrawRef) return; if(!this.file) return; - if(file) this.data = await this.app.vault.read(file); + if(file) this.data = await this.app.vault.cachedRead(file); if(fullreload) await this.excalidrawData.loadData(this.data, this.file,this.textMode); else await this.excalidrawData.setTextMode(this.textMode); await this.loadDrawing(false); diff --git a/src/main.ts b/src/main.ts index b69a71a..65e1f38 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1088,7 +1088,7 @@ export default class ExcalidrawPlugin extends Plugin { return outString + this.getMarkdownDrawingSection(data); } - public async createDrawing(filename: string, onNewPane: boolean, foldername?: string, initData?:string) { + public async createDrawing(filename: string, onNewPane: boolean, foldername?: string, initData?:string):Promise { const folderpath = normalizePath(foldername ? foldername: this.settings.folder); await checkAndCreateFolder(this.app.vault,folderpath); //create folder if it does not exist @@ -1096,10 +1096,11 @@ export default class ExcalidrawPlugin extends Plugin { if(initData) { this.openDrawing(await this.app.vault.create(fname,initData),onNewPane); - return; + return fname; } this.openDrawing(await this.app.vault.create(fname,await this.getBlankDrawing()), onNewPane); + return fname; } public async setMarkdownView(leaf: WorkspaceLeaf) { diff --git a/versions.json b/versions.json index f1798aa..34e9d45 100644 --- a/versions.json +++ b/versions.json @@ -1,3 +1,3 @@ { - "1.3.8": "0.11.13" + "1.3.9": "0.11.13" }