This commit is contained in:
frostime 2023-06-11 15:43:43 +08:00
parent 6b903d5a14
commit 5cfd0da04d
5 changed files with 10 additions and 433 deletions

View file

@ -59,6 +59,7 @@
* 插件中使用的文本,比如按钮文字和提示信息
* src/i18n/*.json 语言配置文件
* 代码中使用 `this.i18.key` 获取文本
* 最后在 plugin.json 中的 `i18n` 字段中声明该插件支持的语言
建议插件至少支持英文和简体中文,这样可以方便更多人使用。

View file

@ -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",

View file

@ -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"],

424
src/siyuan.d.ts vendored
View file

@ -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查询语法2SQL3正则表达式
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<IWebSocketData>;
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<any>;
saveData(storageName: string, content: any): Promise<void>;
removeData(storageName: string): Promise<any>;
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<any>) => void): void;
once(type: TEventBus, listener: (event: CustomEvent<any>) => void): void;
off(type: TEventBus, listener: (event: CustomEvent<any>) => 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;
}

View file

@ -36,10 +36,10 @@
"vite/client",
"svelte"
],
"baseUrl": "./src",
// "baseUrl": "./src",
"paths": {
"@/*": ["*"],
"@/libs/*": ["libs/*"],
"@/*": ["./src/*"],
"@/libs/*": ["./src/libs/*"],
}
},
"include": [