diff --git a/CHANGELOG.md b/CHANGELOG.md index 7310325..aadd6ee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,23 @@ # Changelog +## 0.2.7 2023-10 + +## 0.2.6 2023-10-24 + +* [Deprecated `loaded-protyle` use `loaded-protyle-static` instead](https://github.com/siyuan-note/siyuan/issues/9468) + +## 0.2.5 2023-10-10 + +* [Add plugin event bus `open-menu-doctree`](https://github.com/siyuan-note/siyuan/issues/9351) + +## 0.2.4 2023-09-19 + +* Supports use in windows +* [Add plugin function `transaction`](https://github.com/siyuan-note/siyuan/issues/9172) + ## 0.2.3 2023-09-05 +* [Add plugin function `transaction`](https://github.com/siyuan-note/siyuan/issues/9172) * [Plugin API add openWindow and command.globalCallback](https://github.com/siyuan-note/siyuan/issues/9032) ## 0.2.2 2023-08-29 diff --git a/README.md b/README.md index 279abc8..4a2b21b 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [中文版](./README_zh_CN.md) -> Consistent with [siyuan/plugin-sample](https://github.com/siyuan-note/plugin-sample) [v0.2.3](https://github.com/siyuan-note/plugin-sample/tree/v0.2.3) +> Consistent with [siyuan/plugin-sample](https://github.com/siyuan-note/plugin-sample) [v0.2.6](https://github.com/siyuan-note/plugin-sample/tree/v0.2.6) diff --git a/README_zh_CN.md b/README_zh_CN.md index 198be1d..bf72da3 100644 --- a/README_zh_CN.md +++ b/README_zh_CN.md @@ -4,7 +4,7 @@ [English](./README.md) -> 本例和 [siyuan/plugin-sample](https://github.com/siyuan-note/plugin-sample) [v0.2.3](https://github.com/siyuan-note/plugin-sample/tree/v0.2.3) +> 本例和 [siyuan/plugin-sample](https://github.com/siyuan-note/plugin-sample) [v0.2.6](https://github.com/siyuan-note/plugin-sample/tree/v0.2.6) 1. 使用 vite 打包 2. 使用符号链接、而不是把项目放到插件目录下的模式进行开发 diff --git a/package.json b/package.json index 528917a..bfe4eb0 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,12 @@ { "name": "plugin-sample-vite-svelte", - "version": "0.2.3", + "version": "0.2.6", "type": "module", - "description": "", + "description": "This is a sample plugin based on vite and svelte for Siyuan (https://b3log.org/siyuan)", "repository": "", "homepage": "", "author": "", - "license": "GPL-3.0", + "license": "MIT", "scripts": { "make-link": "node --no-warnings ./scripts/make_dev_link.js", "dev": "vite build --watch", @@ -22,7 +22,7 @@ "minimist": "^1.2.8", "rollup-plugin-livereload": "^2.0.5", "sass": "^1.62.1", - "siyuan": "0.8.3", + "siyuan": "0.8.7", "svelte": "^3.57.0", "ts-node": "^10.9.1", "typescript": "^5.0.4", diff --git a/plugin.json b/plugin.json index 41c9250..04236da 100644 --- a/plugin.json +++ b/plugin.json @@ -2,10 +2,17 @@ "name": "plugin-sample-vite-svelte", "author": "frostime", "url": "https://github.com/siyuan-note/plugin-sample-vite-svelte", - "version": "0.2.3", - "minAppVersion": "2.10.3", - "backends": ["all"], - "frontends": ["all"], + "version": "0.2.6", + "minAppVersion": "2.10.12", + "backends": [ + "windows", + "linux", + "darwin" + ], + "frontends": [ + "desktop", + "desktop-window" + ], "displayName": { "en_US": "Plugin sample with vite and svelte", "zh_CN": "插件样例 vite + svelte 版" diff --git a/src/hello.svelte b/src/hello.svelte index 6d10108..63a54a2 100644 --- a/src/hello.svelte +++ b/src/hello.svelte @@ -6,7 +6,7 @@ export let app; let time: string = ""; - let ver: string; + let ver: string = ""; let divProtyle: HTMLDivElement; let protyle: any; diff --git a/src/i18n/en_US.json b/src/i18n/en_US.json index 4f21f86..c7ed102 100644 --- a/src/i18n/en_US.json +++ b/src/i18n/en_US.json @@ -9,6 +9,7 @@ "removedData": "Data deleted", "confirmRemove": "Confirm to delete the data in ${name}?", "insertEmoji": "Insert Emoji", + "removeSpace": "Remove Space", "getTab": "Print out all opened custom tabs in the debugger", "name": "SiYuan", "hello": { diff --git a/src/i18n/zh_CN.json b/src/i18n/zh_CN.json index 5a586e1..49a7af8 100644 --- a/src/i18n/zh_CN.json +++ b/src/i18n/zh_CN.json @@ -9,6 +9,7 @@ "removedData": "数据已删除", "confirmRemove": "确认删除 ${name} 中的数据?", "insertEmoji": "插入表情", + "removeSpace": "移除空格", "getTab": "在日志中打印出已打开的所有自定义页签", "name": "思源", "hello": { diff --git a/src/index.ts b/src/index.ts index f65b4e1..aa7bd75 100644 --- a/src/index.ts +++ b/src/index.ts @@ -11,7 +11,7 @@ import { IModel, Setting, fetchPost, - Protyle, openWindow + Protyle, openWindow, IOperation } from "siyuan"; import "@/index.scss"; @@ -68,7 +68,7 @@ export default class PluginSample extends Plugin { }); const statusIconTemp = document.createElement("template"); - statusIconTemp.innerHTML = `
+ statusIconTemp.innerHTML = `
@@ -85,27 +85,6 @@ export default class PluginSample extends Plugin { element: statusIconTemp.content.firstElementChild as HTMLElement, }); - let tabDiv = document.createElement("div"); - new HelloExample({ - target: tabDiv, - props: { - app: this.app, - } - }); - this.customTab = this.addTab({ - type: TAB_TYPE, - init() { - this.element.appendChild(tabDiv); - console.log(this.element); - }, - beforeDestroy() { - console.log("before destroy tab:", TAB_TYPE); - }, - destroy() { - console.log("destroy tab:", TAB_TYPE); - } - }); - this.addCommand({ langKey: "showDialog", hotkey: "⇧⌘O", @@ -244,6 +223,26 @@ export default class PluginSample extends Plugin { // this.loadData(STORAGE_NAME); this.settingUtils.load(); console.log(`frontend: ${getFrontend()}; backend: ${getBackend()}`); + let tabDiv = document.createElement("div"); + new HelloExample({ + target: tabDiv, + props: { + app: this.app, + } + }); + this.customTab = this.addTab({ + type: TAB_TYPE, + init() { + this.element.appendChild(tabDiv); + console.log(this.element); + }, + beforeDestroy() { + console.log("before destroy tab:", TAB_TYPE); + }, + destroy() { + console.log("destroy tab:", TAB_TYPE); + } + }); } async onunload() { @@ -272,19 +271,38 @@ export default class PluginSample extends Plugin { }); } + private eventBusPaste(event: any) { + // 如果需异步处理请调用 preventDefault, 否则会进行默认处理 + event.preventDefault(); + // 如果使用了 preventDefault,必须调用 resolve,否则程序会卡死 + event.detail.resolve({ + textPlain: event.detail.textPlain.trim(), + }); + } + private eventBusLog({ detail }: any) { console.log(detail); } private blockIconEvent({ detail }: any) { - const ids: string[] = []; - detail.blockElements.forEach((item: HTMLElement) => { - ids.push(item.getAttribute("data-node-id")); - }); detail.menu.addItem({ iconHTML: "", - type: "readonly", - label: "IDs
" + ids.join("
"), + label: this.i18n.removeSpace, + click: () => { + const doOperations: IOperation[] = []; + detail.blockElements.forEach((item: HTMLElement) => { + const editElement = item.querySelector('[contenteditable="true"]'); + if (editElement) { + editElement.textContent = editElement.textContent.replace(/ /g, ""); + doOperations.push({ + id: item.dataset.nodeId, + data: item.outerHTML, + action: "update" + }); + } + }); + detail.protyle.getInstance().transaction(doOperations); + } }); } @@ -488,9 +506,15 @@ export default class PluginSample extends Plugin { } }, { icon: "iconSelect", - label: "On loaded-protyle", + label: "On loaded-protyle-static", click: () => { - this.eventBus.on("loaded-protyle", this.eventBusLog); + this.eventBus.on("loaded-protyle-static", this.eventBusLog); + } + }, { + icon: "iconClose", + label: "Off loaded-protyle-static", + click: () => { + this.eventBus.off("loaded-protyle-static", this.eventBusLog); } }, { icon: "iconSelect", @@ -516,11 +540,17 @@ export default class PluginSample extends Plugin { click: () => { this.eventBus.off("destroy-protyle", this.eventBusLog); } + }, { + icon: "iconSelect", + label: "On open-menu-doctree", + click: () => { + this.eventBus.on("open-menu-doctree", this.eventBusLog); + } }, { icon: "iconClose", - label: "Off loaded-protyle", + label: "Off open-menu-doctree", click: () => { - this.eventBus.off("loaded-protyle", this.eventBusLog); + this.eventBus.off("open-menu-doctree", this.eventBusLog); } }, { icon: "iconSelect", @@ -630,6 +660,18 @@ export default class PluginSample extends Plugin { click: () => { this.eventBus.off("input-search", this.eventBusLog); } + }, { + icon: "iconSelect", + label: "On paste", + click: () => { + this.eventBus.on("paste", this.eventBusPaste); + } + }, { + icon: "iconClose", + label: "Off paste", + click: () => { + this.eventBus.off("paste", this.eventBusPaste); + } }, { icon: "iconSelect", label: "On open-siyuan-url-plugin",