diff --git a/README_zh_CN.md b/README_zh_CN.md index 90b2ee1..1674ece 100644 --- a/README_zh_CN.md +++ b/README_zh_CN.md @@ -55,10 +55,11 @@ 国际化方面我们主要考虑的是支持多语言,具体需要完成以下工作: * 插件自身的元信息,比如插件描述和自述文件 - * plugin.json 中的 `description` 和 `readme` 字段,以及对应的 README*.md 文件 + * plugin.json 中的 `description` 和 `readme` 字段,以及对应的 README*.md 文件 * 插件中使用的文本,比如按钮文字和提示信息 - * src/i18n/*.json 语言配置文件 - * 代码中使用 `this.i18.key` 获取文本 + * src/i18n/*.json 语言配置文件 + * 代码中使用 `this.i18.key` 获取文本 +* 最后在 plugin.json 中的 `i18n` 字段中声明该插件支持的语言 建议插件至少支持英文和简体中文,这样可以方便更多人使用。 diff --git a/package.json b/package.json index db69246..e86835a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "plugin-sample-vite-svelte", - "version": "0.0.6", + "version": "0.1.4", "type": "module", "description": "", "repository": "", @@ -21,7 +21,7 @@ "minimist": "^1.2.8", "rollup-plugin-livereload": "^2.0.5", "sass": "^1.62.1", - "siyuan": "^0.7.2", + "siyuan": "0.7.3", "svelte": "^3.57.0", "ts-node": "^10.9.1", "typescript": "^5.0.4", diff --git a/plugin.json b/plugin.json index 311de7b..224f731 100644 --- a/plugin.json +++ b/plugin.json @@ -2,7 +2,7 @@ "name": "plugin-sample-vite-svelte", "author": "frostime", "url": "https://github.com/siyuan-note/plugin-sample-vite-svelte", - "version": "0.1.3", + "version": "0.1.4", "minAppVersion": "2.9.0", "backends": ["windows", "linux", "darwin"], "frontends": ["desktop"], diff --git a/src/siyuan.d.ts b/src/siyuan.d.ts deleted file mode 100644 index 4c74dc5..0000000 --- a/src/siyuan.d.ts +++ /dev/null @@ -1,424 +0,0 @@ -type TEventBus = "ws-main" | "click-blockicon" | "click-editorcontent" | "click-pdf" | - "click-editortitleicon" | "open-noneditableblock" - -type TCardType = "doc" | "notebook" | "all" - -declare global { - interface Window { - Lute: Lute - } -} - -interface ITab { - id: string; - headElement: HTMLElement; - panelElement: HTMLElement; - model: IModel; - title: string; - icon: string; - docIcon: string; - updateTitle: (title: string) => void; - pin: () => void; - unpin: () => void; - setDocIcon: (icon: string) => void; - close: () => void; -} - -interface IModel { - element: Element; - tab: ITab; - data: any; - type: string; -} - -interface IObject { - [key: string]: string; -} - -interface ILuteNode { - TokensStr: () => string; - __internal_object__: { - Parent: { - Type: number, - }, - HeadingLevel: string, - }; -} - -interface ISearchOption { - page?: number - group?: number, // 0:不分组,1:按文档分组 - hasReplace?: boolean, - method?: number // 0:文本,1:查询语法,2:SQL,3:正则表达式 - hPath?: string - idPath?: string[] - k: string - r?: string - types?: { - mathBlock: boolean - table: boolean - blockquote: boolean - superBlock: boolean - paragraph: boolean - document: boolean - heading: boolean - list: boolean - listItem: boolean - codeBlock: boolean - htmlBlock: boolean - embedBlock: boolean - } -} - -interface IWebSocketData { - cmd: string - callback?: string - data: any - msg: string - code: number - sid: string -} - -declare interface IPluginDockTab { - position: "LeftTop" | "LeftBottom" | "RightTop" | "RightBottom" | "BottomLeft" | "BottomRight", - size: { width: number, height: number }, - icon: string, - hotkey?: string, - title: string, - index?: number, - show?: boolean -} - -interface IMenuItemOption { - label?: string, - click?: (element: HTMLElement) => void, - type?: "separator" | "submenu" | "readonly", - accelerator?: string, - action?: string, - id?: string, - submenu?: IMenuItemOption[] - disabled?: boolean - icon?: string - iconHTML?: string - current?: boolean - bind?: (element: HTMLElement) => void - index?: number - element?: HTMLElement -} - -interface ICommandOption { - langKey: string, // 多语言 key - /** - * 目前需使用 MacOS 符号标识,顺序按照 ⌥⇧⌘,入 ⌥⇧⌘A - * "Ctrl": "⌘", - * "Shift": "⇧", - * "Alt": "⌥", - * "Tab": "⇥", - * "Backspace": "⌫", - * "Delete": "⌦", - * "Enter": "↩", - */ - hotkey: string, - customHotkey?: string, - callback?: () => void - fileTreeCallback?: (file: any) => void - editorCallback?: (protyle: any) => void - dockCallback?: (element: HTMLElement) => void -} - -export function fetchPost(url: string, data?: any, callback?: (response: IWebSocketData) => void, headers?: IObject): void; - -export function fetchSyncPost(url: string, data?: any): Promise; - -export function fetchGet(url: string, callback: (response: IWebSocketData) => void): void; - -export function openTab(options: { - app: App, - doc?: { - id: string, // 块 id - action?: string [] // cb-get-all:获取所有内容;cb-get-focus:打开后光标定位在 id 所在的块;cb-get-hl: 打开后 id 块高亮 - zoomIn?: boolean // 是否缩放 - }, - pdf?: { - path: string, - page?: number, // pdf 页码 - id?: string, // File Annotation id - }, - asset?: { - path: string, - }, - search?: ISearchOption - card?: { - type: TCardType, - id?: string, // cardType 为 all 时不传,否则传文档或笔记本 id - title?: string // cardType 为 all 时不传,否则传文档或笔记本名称 - }, - custom?: { - title: string, - icon: string, - data?: any - fn?: () => IModel, - } - position?: "right" | "bottom", - keepCursor?: boolean // 是否跳转到新 tab 上 - removeCurrentTab?: boolean // 在当前页签打开时需移除原有页签 - afterOpen?: () => void // 打开后回调 -}): ITab - -export function getFrontend(): "desktop" | "desktop-window" | "mobile" | "browser-desktop" | "browser-mobile"; - -export function getBackend(): "windows" | "linux" | "darwin" | "docker" | "android" | "ios" - -export function adaptHotkey(hotkey: string): string; - -export function confirm(title: string, text: string, confirmCallback?: () => void, cancelCallback?: () => void): void; - -/** - * @param timeout - ms. 0: manual close;-1: always show; 6000: default - * @param {string} [type=info] - */ -export function showMessage(text: string, timeout?: number, type?: "info" | "error", id?: string): void; - -export class App { - plugins: Plugin[]; -} - -export abstract class Plugin { - eventBus: EventBus; - i18n: IObject; - data: any; - name: string; - app: App; - commands: ICommandOption[]; - - constructor(options: { - app: App, - name: string, - i18n: IObject - }) - - onload(): void; - - onunload(): void; - - onLayoutReady(): void; - - /** - * Must be executed before the synchronous function. - * @param {string} [options.position=right] - */ - addTopBar(options: { - icon: string, - title: string, - callback: (event: MouseEvent) => void - position?: "right" | "left" - }): HTMLElement; - - /** - * Must be executed before the synchronous function. - * @param {string} [options.position=right] - */ - addStatusBar(options: { - element: HTMLElement, - position?: "right" | "left" - }): HTMLElement - - openSetting(): void - - loadData(storageName: string): Promise; - - saveData(storageName: string, content: any): Promise; - - removeData(storageName: string): Promise; - - addIcons(svg: string): void; - - /** - * Must be executed before the synchronous function. - */ - addTab(options: { - type: string, - destroy?: () => void, - resize?: () => void, - update?: () => void, - init: () => void - }): () => IModel - - /** - * Must be executed before the synchronous function. - */ - addDock(options: { - config: IPluginDockTab, - data: any, - type: string, - destroy?: () => void, - resize?: () => void, - update?: () => void, - init: () => void - }): { config: IPluginDockTab, model: IModel } - - addCommand(options: ICommandOption): void - - addFloatLayer(options: { - ids: string[], - defIds?: string[], - x?: number, - y?: number, - targetElement?: HTMLElement - }): void -} - -export class EventBus { - on(type: TEventBus, listener: (event: CustomEvent) => void): void; - - once(type: TEventBus, listener: (event: CustomEvent) => void): void; - - off(type: TEventBus, listener: (event: CustomEvent) => void): void; - - emit(type: TEventBus, detail?: any): boolean; -} - -export class Dialog { - - element: HTMLElement; - - constructor(options: { - title?: string, - transparent?: boolean, - content: string, - width?: string - height?: string, - destroyCallback?: (options?: IObject) => void - disableClose?: boolean - disableAnimation?: boolean - }); - - destroy(options?: IObject): void; - - bindInput(inputElement: HTMLInputElement | HTMLTextAreaElement, enterEvent?: () => void): void; -} - -export class Menu { - constructor(id?: string, closeCallback?: () => void); - - showSubMenu(subMenuElement: HTMLElement): void; - - addItem(options: IMenuItemOption): HTMLElement; - - addSeparator(index?: number): void; - - open(options: { x: number, y: number, h?: number, w?: number, isLeft?: boolean }): void; - - /** - * @param {string} [position=all] - */ - fullscreen(position?: "bottom" | "all"): void; - - close(): void; -} - -declare class Lute { - public static WalkStop: number; - public static WalkSkipChildren: number; - public static WalkContinue: number; - public static Version: string; - public static Caret: string; - - public static New(): Lute; - - public static EChartsMindmapStr(text: string): string; - - public static NewNodeID(): string; - - public static Sanitize(html: string): string; - - public static EscapeHTMLStr(str: string): string; - - public static UnEscapeHTMLStr(str: string): string; - - public static GetHeadingID(node: ILuteNode): string; - - public static BlockDOM2Content(html: string): string; - - private constructor(); - - public BlockDOM2Content(text: string): string; - - public BlockDOM2EscapeMarkerContent(text: string): string; - - public SetTextMark(enable: boolean): void; - - public SetHeadingID(enable: boolean): void; - - public SetProtyleMarkNetImg(enable: boolean): void; - - public SetSpellcheck(enable: boolean): void; - - public SetFileAnnotationRef(enable: boolean): void; - - public SetSetext(enable: boolean): void; - - public SetYamlFrontMatter(enable: boolean): void; - - public SetChineseParagraphBeginningSpace(enable: boolean): void; - - public SetRenderListStyle(enable: boolean): void; - - public SetImgPathAllowSpace(enable: boolean): void; - - public SetKramdownIAL(enable: boolean): void; - - public BlockDOM2Md(html: string): string; - - public BlockDOM2StdMd(html: string): string; - - public SetGitConflict(enable: boolean): void; - - public SetSuperBlock(enable: boolean): void; - - public SetTag(enable: boolean): void; - - public SetMark(enable: boolean): void; - - public SetSub(enable: boolean): void; - - public SetSup(enable: boolean): void; - - public SetBlockRef(enable: boolean): void; - - public SetSanitize(enable: boolean): void; - - public SetHeadingAnchor(enable: boolean): void; - - public SetImageLazyLoading(imagePath: string): void; - - public SetInlineMathAllowDigitAfterOpenMarker(enable: boolean): void; - - public SetToC(enable: boolean): void; - - public SetIndentCodeBlock(enable: boolean): void; - - public SetParagraphBeginningSpace(enable: boolean): void; - - public SetFootnotes(enable: boolean): void; - - public SetLinkRef(enalbe: boolean): void; - - public SetEmojiSite(emojiSite: string): void; - - public PutEmojis(emojis: IObject): void; - - public SpinBlockDOM(html: string): string; - - public Md2BlockDOM(html: string): string; - - public SetProtyleWYSIWYG(wysiwyg: boolean): void; - - public MarkdownStr(name: string, md: string): string; - - public IsValidLinkDest(text: string): boolean; - - public BlockDOM2InlineBlockDOM(html: string): string; - - public BlockDOM2HTML(html: string): string; -} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 1712b7a..e196929 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -36,10 +36,10 @@ "vite/client", "svelte" ], - "baseUrl": "./src", + // "baseUrl": "./src", "paths": { - "@/*": ["*"], - "@/libs/*": ["libs/*"], + "@/*": ["./src/*"], + "@/libs/*": ["./src/libs/*"], } }, "include": [