vditor
Version:
♏ 易于使用的 Markdown 编辑器,为适配不同的应用场景而生
56 lines (52 loc) • 2.47 kB
text/typescript
import {Constants} from "../constants";
import {setPadding} from "../ui/initUI";
import {getEventName} from "../util/compatibility";
import {MenuItem} from "./MenuItem";
import {disableToolbar, enableToolbar, hidePanel} from "./setToolbar";
export class Preview extends MenuItem {
constructor(vditor: IVditor, menuItem: IMenuItem) {
super(vditor, menuItem);
this._bindEvent(vditor);
}
public _bindEvent(vditor: IVditor) {
this.element.children[0].addEventListener(getEventName(), (event) => {
event.preventDefault();
const btnElement = this.element.firstElementChild;
if (btnElement.classList.contains(Constants.CLASS_MENU_DISABLED)) {
return;
}
const toolbars = Constants.EDIT_TOOLBARS.concat(["both", "edit-mode", "devtools"]);
if (btnElement.classList.contains("vditor-menu--current")) {
btnElement.classList.remove("vditor-menu--current");
if (vditor.currentMode === "sv") {
vditor.sv.element.style.display = "block";
if (vditor.options.preview.mode === "both") {
vditor.preview.element.style.display = "block";
} else {
vditor.preview.element.style.display = "none";
}
} else {
vditor[vditor.currentMode].element.parentElement.style.display = "block";
vditor.preview.element.style.display = "none";
}
enableToolbar(vditor.toolbar.elements, toolbars);
vditor.outline.render(vditor);
} else {
disableToolbar(vditor.toolbar.elements, toolbars);
vditor.preview.element.style.display = "block";
if (vditor.currentMode === "sv") {
vditor.sv.element.style.display = "none";
} else {
vditor[vditor.currentMode].element.parentElement.style.display = "none";
}
vditor.preview.render(vditor);
btnElement.classList.add("vditor-menu--current");
hidePanel(vditor, ["subToolbar", "hint", "popover"]);
setTimeout(() => {
vditor.outline.render(vditor);
}, vditor.options.preview.delay + 10);
}
setPadding(vditor);
});
}
}