Bladeren bron

:art: fix https://github.com/siyuan-note/siyuan/issues/8599

Vanessa 2 jaren geleden
bovenliggende
commit
dfc0a35c05
5 gewijzigde bestanden met toevoegingen van 51 en 13 verwijderingen
  1. 6 0
      app/src/plugin/index.ts
  2. 29 13
      app/src/protyle/hint/extend.ts
  3. 14 0
      app/src/protyle/hint/index.ts
  4. 1 0
      app/src/protyle/index.ts
  5. 1 0
      app/src/types/protyle.d.ts

+ 6 - 0
app/src/plugin/index.ts

@@ -17,6 +17,12 @@ export class Plugin {
     public eventBus: EventBus;
     public data: any = {};
     public name: string;
+    public protyleSlash: {
+        filter: string[],
+        html: string,
+        id: string,
+        callback: (protyle: import("../protyle").Protyle) => void
+    }[] = [];
     // TODO
     public customBlockRenders: {
         [key: string]: {

+ 29 - 13
app/src/protyle/hint/extend.ts

@@ -46,13 +46,11 @@ export const hintSlash = (key: string, protyle: IProtyle) => {
         filter: ["ai chat"],
         value: Constants.ZWSP + 5,
         html: '<div class="b3-list-item__first"><svg class="b3-list-item__graphic"><use xlink:href="#iconSparkles"></use></svg><span class="b3-list-item__text">AI Chat</span></div>',
-    },
-    // {
-    //     filter: ["属性视图", "shuxingshitu", "sxst", "attribute view"],
-    //     value: '<div data-type="NodeAttributeView" data-av-type="table"></div>',
-    //     html: `<div class="b3-list-item__first"><svg class="b3-list-item__graphic"><use xlink:href="#iconDatabase"></use></svg><span class="b3-list-item__text">${window.siyuan.languages.attributeView}</span></div>`,
-    // },
-    {
+    }/*,{
+        filter: ["属性视图", "shuxingshitu", "sxst", "attribute view"],
+        value: '<div data-type="NodeAttributeView" data-av-type="table"></div>',
+        html: `<div class="b3-list-item__first"><svg class="b3-list-item__graphic"><use xlink:href="#iconDatabase"></use></svg><span class="b3-list-item__text">${window.siyuan.languages.attributeView}</span></div>`,
+    }*/, {
         filter: ["文档", "子文档", "wendang", "wd", "ziwendang", "zwd", "xjwd"],
         value: Constants.ZWSP + 4,
         html: `<div class="b3-list-item__first"><svg class="b3-list-item__graphic"><use xlink:href="#iconFile"></use></svg><span class="b3-list-item__text">${window.siyuan.languages.newFile}</span><span class="b3-menu__accelerator">${updateHotkeyTip(window.siyuan.config.keymap.general.newFile.custom)}</span></div>`,
@@ -249,6 +247,24 @@ export const hintSlash = (key: string, protyle: IProtyle) => {
         value: `style${Constants.ZWSP}`,
         html: `<div class="b3-list-item__first"><div class="color__square">A</div><span class="b3-list-item__text">${window.siyuan.languages.clearFontStyle}</span></div>`,
     }];
+    allList.push({
+        value: "",
+        html: "separator",
+    });
+    let hasPlugin = false;
+    protyle.app.plugins.forEach((plugin) => {
+        plugin.protyleSlash.forEach(slash => {
+            allList.push({
+                filter: slash.filter,
+                value: `plugin${Constants.ZWSP}${plugin.name}${Constants.ZWSP}${slash.id}`,
+                html: slash.html
+            });
+            hasPlugin = true;
+        });
+    });
+    if (!hasPlugin) {
+        allList.pop();
+    }
     if (key === "") {
         return allList;
     }
@@ -309,7 +325,7 @@ export const hintRef = (key: string, protyle: IProtyle, isQuick = false): IHintD
         id: nodeElement ? nodeElement.getAttribute("data-node-id") : protyle.block.parentID,
         beforeLen: Math.floor((Math.max(protyle.element.clientWidth / 2, 320) - 58) / 28.8),
         rootID: protyle.block.rootID,
-        isSquareBrackets:  ["[[", "【【"].includes(protyle.hint.splitChar)
+        isSquareBrackets: ["[[", "【【"].includes(protyle.hint.splitChar)
     }, (response) => {
         const dataList: IHintData[] = [];
         if (response.data.newDoc) {
@@ -322,8 +338,8 @@ export const hintRef = (key: string, protyle: IProtyle, isQuick = false): IHintD
         }
         response.data.blocks.forEach((item: IBlock) => {
             let iconHTML;
-            if (item.type === "NodeDocument" && item.ial.icon){
-                iconHTML  = unicode2Emoji(item.ial.icon, "b3-list-item__graphic popover__block", true);
+            if (item.type === "NodeDocument" && item.ial.icon) {
+                iconHTML = unicode2Emoji(item.ial.icon, "b3-list-item__graphic popover__block", true);
                 iconHTML = iconHTML.replace('popover__block"', `popover__block" data-id="${item.id}"`);
             } else {
                 iconHTML = `<svg class="b3-list-item__graphic popover__block" data-id="${item.id}"><use xlink:href="#${getIconByType(item.type)}"></use></svg>`;
@@ -386,8 +402,8 @@ export const hintEmbed = (key: string, protyle: IProtyle): IHintData[] => {
         const dataList: IHintData[] = [];
         response.data.blocks.forEach((item: IBlock) => {
             let iconHTML;
-            if (item.type === "NodeDocument" && item.ial.icon){
-                iconHTML  = unicode2Emoji(item.ial.icon, "b3-list-item__graphic popover__block", true);
+            if (item.type === "NodeDocument" && item.ial.icon) {
+                iconHTML = unicode2Emoji(item.ial.icon, "b3-list-item__graphic popover__block", true);
                 iconHTML = iconHTML.replace('popover__block"', `popover__block" data-id="${item.id}"`);
             } else {
                 iconHTML = `<svg class="b3-list-item__graphic popover__block" data-id="${item.id}"><use xlink:href="#${getIconByType(item.type)}"></use></svg>`;
@@ -514,7 +530,7 @@ export const hintMoveBlock = (pathString: string, sourceElements: Element[], pro
         });
     } else if (protyle.block.showAll && parentElement.classList.contains("protyle-wysiwyg") && parentElement.childElementCount === 0) {
         setTimeout(() => {
-            zoomOut({protyle, id: protyle.block.parent2ID, focusId:protyle.block.parent2ID});
+            zoomOut({protyle, id: protyle.block.parent2ID, focusId: protyle.block.parent2ID});
         }, Constants.TIMEOUT_INPUT * 2 + 100);
     } else if (parentElement.classList.contains("protyle-wysiwyg") && parentElement.innerHTML === "" &&
         !hasClosestByClassName(parentElement, "block__edit", true) &&

+ 14 - 0
app/src/protyle/hint/index.ts

@@ -619,6 +619,20 @@ ${unicode2Emoji(emoji.unicode)}</button>`;
                 nodeElement.setAttribute("style", value.split(Constants.ZWSP)[1] || "");
                 updateTransaction(protyle, id, nodeElement.outerHTML, html);
                 return;
+            } else if (value.startsWith("plugin")) {
+                protyle.app.plugins.find((plugin) => {
+                    const ids = value.split(Constants.ZWSP)
+                    if (ids[1] === plugin.name) {
+                        plugin.protyleSlash.find((slash) => {
+                            if (slash.id === ids[2]){
+                                slash.callback(protyle.getInstance());
+                                return true;
+                            }
+                        })
+                        return  true;
+                    }
+                })
+                return;
             } else {
                 range.deleteContents();
                 if (value !== "![]()") {

+ 1 - 0
app/src/protyle/index.ts

@@ -46,6 +46,7 @@ export class Protyle {
         const mergedOptions = getOptions.merge();
 
         this.protyle = {
+            getInstance: () => this,
             app,
             transactionTime: new Date().getTime(),
             id: genUUID(),

+ 1 - 0
app/src/types/protyle.d.ts

@@ -407,6 +407,7 @@ interface IOptions {
 }
 
 interface IProtyle {
+    getInstance: () => import("../protyle").Protyle,
     app: import("../index").App,
     transactionTime: number,
     id: string,