mirror of
https://github.com/siyuan-note/siyuan.git
synced 2026-01-07 01:08:49 +01:00
70 lines
2.4 KiB
TypeScript
70 lines
2.4 KiB
TypeScript
import {Tab} from "../layout/Tab";
|
|
import {Protyle} from "../protyle";
|
|
import {Model} from "../layout/Model";
|
|
import {disabledProtyle} from "../protyle/util/onGet";
|
|
import {setPadding} from "../protyle/ui/initUI";
|
|
import {getAllModels} from "../layout/getAll";
|
|
import {countBlockWord} from "../layout/status";
|
|
|
|
export class Editor extends Model {
|
|
public element: HTMLElement;
|
|
public editor: Protyle;
|
|
public headElement: HTMLElement;
|
|
|
|
constructor(options: {
|
|
tab: Tab,
|
|
blockId: string,
|
|
mode?: TEditorMode,
|
|
action?: string[],
|
|
scrollAttr?: IScrollAttr
|
|
}) {
|
|
super({
|
|
id: options.tab.id,
|
|
});
|
|
if (window.siyuan.config.fileTree.openFilesUseCurrentTab) {
|
|
options.tab.headElement.classList.add("item--unupdate");
|
|
}
|
|
this.headElement = options.tab.headElement;
|
|
this.element = options.tab.panelElement;
|
|
this.initProtyle(options);
|
|
}
|
|
|
|
private initProtyle(options: {
|
|
blockId: string,
|
|
action?: string[]
|
|
mode?: TEditorMode,
|
|
scrollAttr?: IScrollAttr
|
|
}) {
|
|
this.editor = new Protyle(this.element, {
|
|
action: options.action || [],
|
|
blockId: options.blockId,
|
|
mode: options.mode,
|
|
render: {
|
|
title: true,
|
|
background: true,
|
|
scroll: true,
|
|
},
|
|
scrollAttr: options.scrollAttr,
|
|
typewriterMode: true,
|
|
after: (editor) => {
|
|
if (window.siyuan.config.readonly || window.siyuan.config.editor.readOnly) {
|
|
disabledProtyle(editor.protyle);
|
|
}
|
|
|
|
if (window.siyuan.editorIsFullscreen) {
|
|
editor.protyle.element.classList.add("fullscreen");
|
|
setPadding(editor.protyle);
|
|
getAllModels().editor.forEach(item => {
|
|
if (!editor.protyle.element.isSameNode(item.element) && item.element.classList.contains("fullscreen")) {
|
|
item.element.classList.remove("fullscreen");
|
|
setPadding(item.editor.protyle);
|
|
}
|
|
});
|
|
}
|
|
countBlockWord([], editor.protyle.block.rootID);
|
|
},
|
|
});
|
|
// 需在 after 回调之前,否则不会聚焦 https://github.com/siyuan-note/siyuan/issues/5303
|
|
this.editor.protyle.model = this;
|
|
}
|
|
}
|