diff --git a/src/ExcalidrawView.ts b/src/ExcalidrawView.ts index c718231..f2f1d97 100644 --- a/src/ExcalidrawView.ts +++ b/src/ExcalidrawView.ts @@ -93,10 +93,11 @@ import { hyperlinkIsYouTubeLink, getYouTubeThumbnailLink, isContainer, + fragWithHTML, } from "./utils/Utils"; import { getLeaf, getParentOfClass } from "./utils/ObsidianUtils"; import { splitFolderAndFilename } from "./utils/FileUtils"; -import { ConfirmationPrompt, NewFileActions, Prompt } from "./dialogs/Prompt"; +import { ConfirmationPrompt, GenericInputPrompt, NewFileActions, Prompt } from "./dialogs/Prompt"; import { ClipboardData } from "@zsviczian/excalidraw/types/clipboard"; import { updateEquation } from "./LaTeX"; import { @@ -778,7 +779,14 @@ export default class ExcalidrawView extends TextFileView { el.addClass(SHOW); el = el.parentElement; } - if(el) el.addClass(SHOW); + if(el) { + el.addClass(SHOW); + el.querySelectorAll(`div.workspace-split:not(.${SHOW})`).forEach(el=>el.addClass(SHOW)); + el.querySelector(`div.workspace-leaf-content.${SHOW} > .view-header`).addClass(SHOW); + el.querySelectorAll(`div.workspace-tab-container.${SHOW} > div.workspace-leaf:not(.${SHOW})`).forEach(el=>el.addClass(SHOW)); + el.querySelectorAll(`div.workspace-tabs.${SHOW} > div.workspace-tab-header-container`).forEach(el=>el.addClass(SHOW)); + el.querySelectorAll(`div.workspace-split.${SHOW} > div.workspace-tabs:not(.${SHOW})`).forEach(el=>el.addClass(SHOW)); + } const doc = this.ownerDocument; doc.body.querySelectorAll(`div.workspace-split:not(.${SHOW})`).forEach(el=>el.addClass(HIDE)); doc.body.querySelector(`div.workspace-leaf-content.${SHOW} > .view-header`).addClass(HIDE); @@ -991,22 +999,28 @@ export default class ExcalidrawView extends TextFileView { ef.file.extension === "md" && !this.plugin.isExcalidrawFile(ef.file) ) { - const prompt = new Prompt( - app, - "Customize the link", - ef.linkParts.original, - "", - "Do not add [[square brackets]] around the filename!
Follow this format when editing your link:
filename#^blockref|WIDTHxMAXHEIGHT", - ); - prompt.openAndGetValue(async (link: string) => { + const handler = async (link:string) => { if (!link || ef.linkParts.original === link) { return; } ef.resetImage(this.file.path, link); + this.setDirty(2); await this.save(false); await this.loadSceneFiles(); - this.setDirty(2); - }); + } + GenericInputPrompt.Prompt( + this, + this.plugin, + app, + "Customize the link", + undefined, + ef.linkParts.original, + [{caption: "✅", action: handler}], + 1, + false, + (container) => container.createEl("p",{text: fragWithHTML("Do not add [[square brackets]] around the filename!
Follow this format when editing your link:
filename#^blockref|WIDTHxMAXHEIGHT")}), + false + ).then(handler, () => {}); return; } } @@ -3769,7 +3783,7 @@ export default class ExcalidrawView extends TextFileView { } }, - iframeURLWhitelist: [/.*/], + iframeURLWhitelist: [true], renderCustomIFrame: ( element: NonDeletedExcalidrawElement, radius: number, diff --git a/src/customIFrame.tsx b/src/customIFrame.tsx index 7430900..a158004 100644 --- a/src/customIFrame.tsx +++ b/src/customIFrame.tsx @@ -2,7 +2,7 @@ import { NonDeletedExcalidrawElement } from "@zsviczian/excalidraw/types/element import ExcalidrawView from "./ExcalidrawView"; import { Notice, Workspace, WorkspaceLeaf, WorkspaceSplit } from "obsidian"; import * as React from "react"; -import { getParentOfClass, isObsidianThemeDark } from "./utils/ObsidianUtils"; +import { ConstructableWorkspaceSplit, getContainerForDocument, getParentOfClass, isObsidianThemeDark } from "./utils/ObsidianUtils"; import { getLinkParts } from "./utils/Utils"; import { DEVICE, REG_LINKINDEX_INVALIDCHARS } from "./Constants"; import { ExcalidrawImperativeAPI, UIAppState } from "@zsviczian/excalidraw/types/types"; @@ -58,17 +58,6 @@ const VIMEO_REG = /^(?:http(?:s)?:\/\/)?(?:(?:w){3}.)?(?:player\.)?vimeo\.com\/(?:video\/)?([^?\s]+)(?:\?.*)?$/; const TWITTER_REG = /^(?:http(?:s)?:\/\/)?(?:(?:w){3}.)?twitter.com/; -type ConstructableWorkspaceSplit = new (ws: Workspace, dir: "horizontal"|"vertical") => WorkspaceSplit; - -const getContainerForDocument = (doc:Document) => { - if (doc !== document && app.workspace.floatingSplit) { - for (const container of app.workspace.floatingSplit.children) { - if (container.doc === doc) return container; - } - } - return app.workspace.rootSplit; -}; - export const useDefaultExcalidrawFrame = (element: NonDeletedExcalidrawElement) => { return element.link.match(YOUTUBE_REG) || element.link.match(VIMEO_REG); } @@ -226,6 +215,8 @@ function RenderObsidianView( return; } leafRef.current.view.setMode(modes['source']); + //@ts-ignore + window.al = leafRef.current; app.workspace.setActiveLeaf(leafRef.current); isEditingRef.current = true; patchMobileView(); @@ -309,22 +300,6 @@ export const CustomIFrame: React.FC<{element: NonDeletedExcalidrawElement; radiu view={view} containerRef={containerRef} appState={appState}/> - {(appState.activeIFrame?.element === element && appState.activeIFrame?.state === "hover") && (
)}
) } \ No newline at end of file diff --git a/src/dialogs/UniversalInsertFileModal.ts b/src/dialogs/UniversalInsertFileModal.ts index cfbc440..55167ae 100644 --- a/src/dialogs/UniversalInsertFileModal.ts +++ b/src/dialogs/UniversalInsertFileModal.ts @@ -192,12 +192,15 @@ export class UniversalInsertFileModal extends Modal { .setButtonText("as Image") .onClick(async () => { const ea:ExcalidrawAutomate = getEA(this.view); + const isMarkdown = file && file.extension === "md" && !ea.isExcalidrawFile(file); ea.selectElementsInView( [await insertImageToView ( ea, this.center, //this.view.currentPosition, - file, + isMarkdown && sectionPicker.selectEl.value && sectionPicker.selectEl.value !== "" + ? `${file.path}${sectionPicker.selectEl.value}` + : file, ea.isExcalidrawFile(file) ? !anchorTo100 : undefined, )] ); diff --git a/src/lang/locale/en.ts b/src/lang/locale/en.ts index f19fc0f..981bfc7 100644 --- a/src/lang/locale/en.ts +++ b/src/lang/locale/en.ts @@ -100,6 +100,7 @@ export default { CACHE_NOT_READY: "I am sorry, but there was an error loading your file. The plugin has a backup cache, but it looks like as if you've just started Obsidian. Initialization of the Backup Cache " + "can take up to a minute (or more depending on your device). You will be notified when the cache initialization is completed." + "

Press OK to try again, or Cancel to manually correct your file or to come back later.", +OBSIDIAN_TOOLS_PANEL: "Obsidian Tools Panel", //settings.ts RELEASE_NOTES_NAME: "Display Release Notes after update", diff --git a/src/menu/ObsidianMenu.tsx b/src/menu/ObsidianMenu.tsx index bb705fd..84cb63c 100644 --- a/src/menu/ObsidianMenu.tsx +++ b/src/menu/ObsidianMenu.tsx @@ -10,6 +10,7 @@ import { PENS } from "src/utils/Pens"; import ExcalidrawPlugin from "../main"; import { ICONS, penIcon, stringToSVG } from "./ActionIcons"; import { UniversalInsertFileModal } from "src/dialogs/UniversalInsertFileModal"; +import { t } from "src/lang/helpers"; declare const PLUGIN_VERSION:string; @@ -251,7 +252,7 @@ export class ObsidianMenu { ); }} > -