Răsfoiți Sursa

feat: support importing `obsidian.md` files

dwelle 1 an în urmă
părinte
comite
93c33fef20

+ 6 - 1
excalidraw-app/vite.config.mts

@@ -64,7 +64,12 @@ export default defineConfig({
 
       workbox: {
         // Don't push fonts and locales to app precache
-        globIgnores: ["fonts.css", "**/locales/**", "service-worker.js"],
+        globIgnores: [
+          "fonts.css",
+          "**/locales/**",
+          "service-worker.js",
+          "lz-string",
+        ],
         runtimeCaching: [
           {
             urlPattern: new RegExp("/.+.(ttf|woff2|otf)"),

+ 17 - 1
packages/excalidraw/data/blob.ts

@@ -123,10 +123,26 @@ export const loadSceneOrLibraryFromBlob = async (
   fileHandle?: FileSystemHandle | null,
 ) => {
   const contents = await parseFileContents(blob);
+
   let data;
+
+  // assume Obsidian excalidraw plugin file
+  if (blob.name?.endsWith(".excalidraw.md")) {
+    if (contents.indexOf("```compressed-json") > -1) {
+      let str = contents.slice(
+        contents.indexOf("```compressed-json") + '"```compressed-json'.length,
+      );
+      str = str.slice(0, str.indexOf("```"));
+      str = str.replace(/\n/g, "").replace(/\r/g, "");
+      const LZString = await import("lz-string");
+
+      data = JSON.parse(LZString.decompressFromBase64(str));
+    }
+  }
+
   try {
     try {
-      data = JSON.parse(contents);
+      data = data || JSON.parse(contents);
     } catch (error: any) {
       if (isSupportedImageFile(blob)) {
         throw new ImageSceneDataError(

+ 1 - 0
packages/excalidraw/package.json

@@ -72,6 +72,7 @@
     "image-blob-reduce": "3.0.1",
     "jotai": "1.13.1",
     "lodash.throttle": "4.1.1",
+    "lz-string": "1.5.0",
     "nanoid": "3.3.3",
     "open-color": "1.9.1",
     "pako": "1.0.11",

+ 2 - 2
yarn.lock

@@ -7753,9 +7753,9 @@ lru-cache@^6.0.0:
   dependencies:
     yallist "^4.0.0"
 
-lz-string@^1.5.0:
+[email protected], lz-string@^1.5.0:
   version "1.5.0"
-  resolved "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941"
+  resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941"
   integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==
 
 magic-string@^0.25.0, magic-string@^0.25.7: