mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-31 18:36:30 +01:00 
			
		
		
		
	excali 17
This commit is contained in:
		| @@ -4,8 +4,6 @@ import utils from '../../services/utils.js'; | |||||||
| import linkService from '../../services/link.js'; | import linkService from '../../services/link.js'; | ||||||
| import debounce from "../../services/debounce.js"; | import debounce from "../../services/debounce.js"; | ||||||
|  |  | ||||||
| const {sleep} = utils; |  | ||||||
|  |  | ||||||
| const TPL = ` | const TPL = ` | ||||||
|     <div class="canvas-widget note-detail-canvas note-detail-printable note-detail"> |     <div class="canvas-widget note-detail-canvas note-detail-printable note-detail"> | ||||||
|         <style> |         <style> | ||||||
| @@ -115,7 +113,6 @@ export default class ExcalidrawTypeWidget extends TypeWidget { | |||||||
|         this.currentSceneVersion = this.SCENE_VERSION_INITIAL; |         this.currentSceneVersion = this.SCENE_VERSION_INITIAL; | ||||||
|  |  | ||||||
|         // will be overwritten |         // will be overwritten | ||||||
|         this.excalidrawRef; |  | ||||||
|         this.$render; |         this.$render; | ||||||
|         this.$widget; |         this.$widget; | ||||||
|         this.reactHandlers; // used to control react state |         this.reactHandlers; // used to control react state | ||||||
| @@ -155,7 +152,8 @@ export default class ExcalidrawTypeWidget extends TypeWidget { | |||||||
|                 const renderElement = this.$render.get(0); |                 const renderElement = this.$render.get(0); | ||||||
|  |  | ||||||
|                 ReactDOM.unmountComponentAtNode(renderElement); |                 ReactDOM.unmountComponentAtNode(renderElement); | ||||||
|                 ReactDOM.render(React.createElement(this.createExcalidrawReactApp), renderElement); |                 const root = ReactDOM.createRoot(renderElement); | ||||||
|  |                 root.render(React.createElement(this.createExcalidrawReactApp)); | ||||||
|             }); |             }); | ||||||
|  |  | ||||||
|         return this.$widget; |         return this.$widget; | ||||||
| @@ -179,9 +177,9 @@ export default class ExcalidrawTypeWidget extends TypeWidget { | |||||||
|         const blob = await note.getBlob(); |         const blob = await note.getBlob(); | ||||||
|  |  | ||||||
|         // before we load content into excalidraw, make sure excalidraw has loaded |         // before we load content into excalidraw, make sure excalidraw has loaded | ||||||
|         while (!this.excalidrawRef?.current) { |         while (!this.excalidrawApi) { | ||||||
|             console.log("excalidrawRef not yet loaded, sleep 200ms..."); |             console.log("excalidrawApi not yet loaded, sleep 200ms..."); | ||||||
|             await sleep(200); |             await utils.sleep(200); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         /** |         /** | ||||||
| @@ -199,7 +197,7 @@ export default class ExcalidrawTypeWidget extends TypeWidget { | |||||||
|                 collaborators: [] |                 collaborators: [] | ||||||
|             }; |             }; | ||||||
|  |  | ||||||
|             this.excalidrawRef.current.updateScene(sceneData); |             this.excalidrawApi.updateScene(sceneData); | ||||||
|         } |         } | ||||||
|         else if (blob.content) { |         else if (blob.content) { | ||||||
|             // load saved content into excalidraw canvas |             // load saved content into excalidraw canvas | ||||||
| @@ -246,8 +244,8 @@ export default class ExcalidrawTypeWidget extends TypeWidget { | |||||||
|                 fileArray.push(file); |                 fileArray.push(file); | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             this.excalidrawRef.current.updateScene(sceneData); |             this.excalidrawApi.updateScene(sceneData); | ||||||
|             this.excalidrawRef.current.addFiles(fileArray); |             this.excalidrawApi.addFiles(fileArray); | ||||||
|             this.excalidrawRef.current.history.clear(); |             this.excalidrawRef.current.history.clear(); | ||||||
|         } |         } | ||||||
|  |  | ||||||
| @@ -261,7 +259,7 @@ export default class ExcalidrawTypeWidget extends TypeWidget { | |||||||
|             } |             } | ||||||
|  |  | ||||||
|             const libraryItems = blobs.map(blob => blob.getJsonContentSafely()).filter(item => !!item); |             const libraryItems = blobs.map(blob => blob.getJsonContentSafely()).filter(item => !!item); | ||||||
|             this.excalidrawRef.current.updateLibrary({libraryItems, merge: false}); |             this.excalidrawApi.updateLibrary({libraryItems, merge: false}); | ||||||
|         }); |         }); | ||||||
|  |  | ||||||
|         // set initial scene version |         // set initial scene version | ||||||
| @@ -275,17 +273,17 @@ export default class ExcalidrawTypeWidget extends TypeWidget { | |||||||
|      * this is automatically called after this.saveData(); |      * this is automatically called after this.saveData(); | ||||||
|      */ |      */ | ||||||
|     async getData() { |     async getData() { | ||||||
|         const elements = this.excalidrawRef.current.getSceneElements(); |         const elements = this.excalidrawApi.getSceneElements(); | ||||||
|         const appState = this.excalidrawRef.current.getAppState(); |         const appState = this.excalidrawApi.getAppState(); | ||||||
|  |  | ||||||
|         /** |         /** | ||||||
|          * A file is not deleted, even though removed from canvas. Therefore, we only keep |          * A file is not deleted, even though removed from canvas. Therefore, we only keep | ||||||
|          * files that are referenced by an element. Maybe this will change with a new excalidraw version? |          * files that are referenced by an element. Maybe this will change with a new excalidraw version? | ||||||
|          */ |          */ | ||||||
|         const files = this.excalidrawRef.current.getFiles(); |         const files = this.excalidrawApi.getFiles(); | ||||||
|  |  | ||||||
|         // parallel svg export to combat bitrot and enable rendering image for note inclusion, preview, and share |         // parallel svg export to combat bitrot and enable rendering image for note inclusion, preview, and share | ||||||
|         const svg = await window.ExcalidrawLib.exportToSvg({ |         const svg = await this.excalidrawApi.exportToSvg({ | ||||||
|             elements, |             elements, | ||||||
|             appState, |             appState, | ||||||
|             exportPadding: 5, // 5 px padding |             exportPadding: 5, // 5 px padding | ||||||
| @@ -321,7 +319,7 @@ export default class ExcalidrawTypeWidget extends TypeWidget { | |||||||
|             // this.libraryChanged is unset in dataSaved() |             // this.libraryChanged is unset in dataSaved() | ||||||
|  |  | ||||||
|             // there's no separate method to get library items, so have to abuse this one |             // there's no separate method to get library items, so have to abuse this one | ||||||
|             const libraryItems = await this.excalidrawRef.current.updateLibrary({merge: true}); |             const libraryItems = await this.excalidrawApi.updateLibrary({merge: true}); | ||||||
|  |  | ||||||
|             let position = 10; |             let position = 10; | ||||||
|  |  | ||||||
| @@ -379,9 +377,6 @@ export default class ExcalidrawTypeWidget extends TypeWidget { | |||||||
|     createExcalidrawReactApp() { |     createExcalidrawReactApp() { | ||||||
|         const React = window.React; |         const React = window.React; | ||||||
|         const { Excalidraw } = window.ExcalidrawLib; |         const { Excalidraw } = window.ExcalidrawLib; | ||||||
|  |  | ||||||
|         const excalidrawRef = React.useRef(null); |  | ||||||
|         this.excalidrawRef = excalidrawRef; |  | ||||||
|         const excalidrawWrapperRef = React.useRef(null); |         const excalidrawWrapperRef = React.useRef(null); | ||||||
|         this.excalidrawWrapperRef = excalidrawWrapperRef; |         this.excalidrawWrapperRef = excalidrawWrapperRef; | ||||||
|         const [dimensions, setDimensions] = React.useState({ |         const [dimensions, setDimensions] = React.useState({ | ||||||
| @@ -439,7 +434,7 @@ export default class ExcalidrawTypeWidget extends TypeWidget { | |||||||
|                 React.createElement(Excalidraw, { |                 React.createElement(Excalidraw, { | ||||||
|                     // this makes sure that 1) manual theme switch button is hidden 2) theme stays as it should after opening menu |                     // this makes sure that 1) manual theme switch button is hidden 2) theme stays as it should after opening menu | ||||||
|                     theme: this.themeStyle, |                     theme: this.themeStyle, | ||||||
|                     ref: excalidrawRef, |                     excalidrawAPI: api => { this.excalidrawApi = api; }, | ||||||
|                     width: dimensions.width, |                     width: dimensions.width, | ||||||
|                     height: dimensions.height, |                     height: dimensions.height, | ||||||
|                     onPaste: (data, event) => { |                     onPaste: (data, event) => { | ||||||
| @@ -483,8 +478,8 @@ export default class ExcalidrawTypeWidget extends TypeWidget { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     getSceneVersion() { |     getSceneVersion() { | ||||||
|         if (this.excalidrawRef) { |         if (this.excalidrawApi) { | ||||||
|             const elements = this.excalidrawRef.current.getSceneElements(); |             const elements = this.excalidrawApi.getSceneElements(); | ||||||
|             return window.ExcalidrawLib.getSceneVersion(elements); |             return window.ExcalidrawLib.getSceneVersion(elements); | ||||||
|         } else { |         } else { | ||||||
|             return this.SCENE_VERSION_ERROR; |             return this.SCENE_VERSION_ERROR; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user