md-editor-v3
Version:
Markdown editor for vue3, developed in jsx and typescript, dark theme、beautify content by prettier、render articles directly、paste or clip the picture and upload it...
1,221 lines (1,220 loc) • 115 kB
JavaScript
"use strict";
var __defProp = Object.defineProperty;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
const vue = require("vue");
const config = require("./chunks/config.cjs");
const util = require("@vavt/util");
const DropdownToolbar = require("./chunks/index.cjs");
const eventName = require("./chunks/event-name.cjs");
const dom = require("./chunks/dom.cjs");
const MdPreview = require("./chunks/index3.cjs");
const MdModal = require("./chunks/index2.cjs");
const index = require("./chunks/index5.cjs");
const MdCatalog = require("./chunks/index4.cjs");
const codemirror = require("codemirror");
const view = require("@codemirror/view");
const languageData = require("@codemirror/language-data");
const langMarkdown = require("@codemirror/lang-markdown");
const state = require("@codemirror/state");
const commands = require("@codemirror/commands");
const language = require("@codemirror/language");
const highlight = require("@lezer/highlight");
const autocomplete = require("@codemirror/autocomplete");
const search = require("@codemirror/search");
const vueTsx = require("./chunks/vue-tsx.cjs");
const NormalToolbar = require("./NormalToolbar.cjs");
const ModalToolbar = require("./ModalToolbar.cjs");
const Divider = /* @__PURE__ */ vue.defineComponent({
name: `${config.prefix}-divider`,
setup() {
return () => vue.createVNode("div", {
"class": `${config.prefix}-divider`
}, null);
}
});
const toolbarProps = {
noPrettier: {
type: Boolean
},
// 工具栏选择显示
toolbars: {
type: Array,
default: () => []
},
// 工具栏选择不显示
toolbarsExclude: {
type: Array,
default: () => []
},
setting: {
type: Object,
default: () => ({})
},
screenfull: {
type: Object,
default: null
},
screenfullJs: {
type: String,
default: ""
},
updateSetting: {
type: Function,
default: () => {
}
},
tableShape: {
type: Array,
default: () => [6, 4]
},
defToolbars: {
type: Object
},
noUploadImg: {
type: Boolean
},
/**
* 是否在工具栏下面显示对应的文字名称
*
* @default false
*/
showToolbarName: {
type: Boolean
},
catalogVisible: {
type: Boolean
},
codeTheme: {
type: String
},
insertLinkDirect: {
type: Boolean
}
};
const useSreenfull = (props2) => {
const editorId = vue.inject("editorId");
const { editorExtensions, editorExtensionsAttrs } = config.globalConfig;
let screenfull = editorExtensions.screenfull.instance;
const screenfullMe = vue.ref(false);
const fullscreenHandler = (status) => {
if (!screenfull) {
eventName.bus.emit(editorId, eventName.ERROR_CATCHER, {
name: "fullscreen",
message: "fullscreen is undefined"
});
return;
}
if (screenfull.isEnabled) {
screenfullMe.value = true;
const targetStatus = status === void 0 ? !screenfull.isFullscreen : status;
if (targetStatus) {
screenfull.request();
} else {
screenfull.exit();
}
} else {
console.error("browser does not support screenfull!");
}
};
const onScreenfullEvent = () => {
if (screenfull && screenfull.isEnabled) {
screenfull.on("change", () => {
if (screenfullMe.value || props2.setting.fullscreen) {
screenfullMe.value = false;
props2.updateSetting("fullscreen");
}
});
}
};
const screenfullLoad = () => {
screenfull = window.screenfull;
onScreenfullEvent();
};
vue.onMounted(() => {
var _a;
onScreenfullEvent();
if (!screenfull) {
dom.appendHandler(
"script",
{
...(_a = editorExtensionsAttrs.screenfull) == null ? void 0 : _a.js,
src: editorExtensions.screenfull.js,
id: MdPreview.CDN_IDS.screenfull,
onload: screenfullLoad
},
"screenfull"
);
}
});
vue.onMounted(() => {
eventName.bus.on(editorId, {
name: eventName.CHANGE_FULL_SCREEN,
callback: fullscreenHandler
});
});
return { fullscreenHandler };
};
const props$6 = {
tableShape: {
type: Array,
default: () => [6, 4]
},
onSelected: {
type: Function,
default: () => {
}
}
};
const TableShape = /* @__PURE__ */ vue.defineComponent({
name: "TableShape",
props: props$6,
setup(props2) {
const hoverPosition = vue.reactive({
x: -1,
y: -1
});
const tableShapeStr = vue.computed(() => {
return JSON.stringify(props2.tableShape);
});
const initShape = () => {
const shape = [...JSON.parse(tableShapeStr.value)];
if (!shape[2] || shape[2] < shape[0]) {
shape[2] = shape[0];
}
if (!shape[3] || shape[3] < shape[3]) {
shape[3] = shape[1];
}
return shape;
};
const tableShape = vue.ref(initShape());
vue.watch([tableShapeStr], () => {
tableShape.value = initShape();
});
return () => vue.createVNode("div", {
"class": `${config.prefix}-table-shape`,
"onMouseleave": () => {
tableShape.value = initShape();
hoverPosition.x = -1;
hoverPosition.y = -1;
}
}, [new Array(tableShape.value[1]).fill("").map((_, rowIndex) => vue.createVNode("div", {
"class": `${config.prefix}-table-shape-row`,
"key": `table-shape-row-${rowIndex}`
}, [new Array(tableShape.value[0]).fill("").map((_2, colIndex) => vue.createVNode("div", {
"class": `${config.prefix}-table-shape-col`,
"key": `table-shape-col-${colIndex}`,
"onMouseenter": () => {
hoverPosition.x = rowIndex;
hoverPosition.y = colIndex;
if (colIndex + 1 === tableShape.value[0] && colIndex + 1 < tableShape.value[2]) {
tableShape.value[0]++;
} else if (colIndex + 2 < tableShape.value[0] && tableShape.value[0] > props2.tableShape[0]) {
tableShape.value[0]--;
}
if (rowIndex + 1 === tableShape.value[1] && rowIndex + 1 < tableShape.value[3]) {
tableShape.value[1]++;
} else if (rowIndex + 2 < tableShape.value[1] && tableShape.value[1] > props2.tableShape[1]) {
tableShape.value[1]--;
}
},
"onClick": () => {
props2.onSelected(hoverPosition);
}
}, [vue.createVNode("div", {
"class": [`${config.prefix}-table-shape-col-default`, rowIndex <= hoverPosition.x && colIndex <= hoverPosition.y && `${config.prefix}-table-shape-col-include`]
}, null)]))]))]);
}
});
const props$5 = {
type: {
type: String,
default: "link"
},
visible: {
type: Boolean,
default: false
},
onCancel: {
type: Function,
default: () => {
}
},
onOk: {
type: Function,
default: () => {
}
}
};
const LinkModal = /* @__PURE__ */ vue.defineComponent({
name: `${config.prefix}-modal-link`,
props: props$5,
setup(props2) {
const ult = vue.inject("usedLanguageText");
const editorId = vue.inject("editorId");
const title = vue.computed(() => {
var _a, _b;
switch (props2.type) {
case "link": {
return (_a = ult.value.linkModalTips) == null ? void 0 : _a.linkTitle;
}
case "image": {
return (_b = ult.value.linkModalTips) == null ? void 0 : _b.imageTitle;
}
default: {
return "";
}
}
});
const linkData = vue.reactive({
desc: "",
url: ""
});
vue.watch(() => props2.visible, (nVal) => {
if (!nVal) {
setTimeout(() => {
linkData.desc = "";
linkData.url = "";
}, 200);
}
});
return () => vue.createVNode(MdModal.MdModal, {
"title": title.value,
"visible": props2.visible,
"onClose": props2.onCancel
}, {
default: () => {
var _a, _b, _c, _d, _e;
return [vue.createVNode("div", {
"class": `${config.prefix}-form-item`
}, [vue.createVNode("label", {
"class": `${config.prefix}-label`,
"for": `link-desc-${editorId}`
}, [(_a = ult.value.linkModalTips) == null ? void 0 : _a.descLabel]), vue.createVNode("input", {
"placeholder": (_b = ult.value.linkModalTips) == null ? void 0 : _b.descLabelPlaceHolder,
"class": `${config.prefix}-input`,
"id": `link-desc-${editorId}`,
"type": "text",
"value": linkData.desc,
"onChange": (e) => {
linkData.desc = e.target.value;
},
"autocomplete": "off"
}, null)]), vue.createVNode("div", {
"class": `${config.prefix}-form-item`
}, [vue.createVNode("label", {
"class": `${config.prefix}-label`,
"for": `link-url-${editorId}`
}, [(_c = ult.value.linkModalTips) == null ? void 0 : _c.urlLabel]), vue.createVNode("input", {
"placeholder": (_d = ult.value.linkModalTips) == null ? void 0 : _d.urlLabelPlaceHolder,
"class": `${config.prefix}-input`,
"id": `link-url-${editorId}`,
"type": "text",
"value": linkData.url,
"onChange": (e) => {
linkData.url = e.target.value;
},
"autocomplete": "off"
}, null)]), vue.createVNode("div", {
"class": `${config.prefix}-form-item`
}, [vue.createVNode("button", {
"class": [`${config.prefix}-btn`, `${config.prefix}-btn-row`],
"type": "button",
"onClick": () => {
props2.onOk(linkData);
linkData.desc = "";
linkData.url = "";
}
}, [(_e = ult.value.linkModalTips) == null ? void 0 : _e.buttonOK])])];
}
});
}
});
const props$4 = {
visible: {
type: Boolean,
default: false
},
onCancel: {
type: Function,
default: () => {
}
},
onOk: {
type: Function,
default: () => {
}
}
};
const ClipModal = /* @__PURE__ */ vue.defineComponent({
name: `${config.prefix}-modal-clip`,
props: props$4,
setup(props2) {
const ult = vue.inject("usedLanguageText");
const editorId = vue.inject("editorId");
const rootRef = vue.inject("rootRef");
let Cropper = config.globalConfig.editorExtensions.cropper.instance;
const uploadRef = vue.ref();
const uploadImgRef = vue.ref();
const previewTargetRef = vue.ref();
const data = vue.reactive({
cropperInited: false,
imgSelected: false,
imgSrc: "",
// 是否全屏
isFullscreen: false
});
let cropper = null;
vue.watch(() => props2.visible, () => {
if (props2.visible && !data.cropperInited) {
Cropper = Cropper || window.Cropper;
uploadRef.value.onchange = () => {
if (!Cropper) {
eventName.bus.emit(editorId, eventName.ERROR_CATCHER, {
name: "Cropper",
message: "Cropper is undefined"
});
return;
}
const fileList = uploadRef.value.files || [];
data.imgSelected = true;
if ((fileList == null ? void 0 : fileList.length) > 0) {
const fileReader = new FileReader();
fileReader.onload = (e) => {
data.imgSrc = e.target.result;
};
fileReader.readAsDataURL(fileList[0]);
}
};
}
});
vue.watch(() => [data.imgSelected], () => {
previewTargetRef.value.style = "";
});
vue.watch([vue.toRef(() => data.isFullscreen), vue.toRef(() => data.imgSrc)], () => {
if (data.imgSrc) {
vue.nextTick(() => {
cropper == null ? void 0 : cropper.destroy();
previewTargetRef.value.style = "";
if (uploadImgRef.value) {
cropper = new Cropper(uploadImgRef.value, {
viewMode: 2,
preview: rootRef.value.getRootNode().querySelector(`.${config.prefix}-clip-preview-target`)
// aspectRatio: 16 / 9,
});
}
});
}
});
const reset = () => {
cropper.clear();
cropper.destroy();
cropper = null;
uploadRef.value.value = "";
data.imgSelected = false;
};
return () => {
var _a;
return vue.createVNode(MdModal.MdModal, {
"class": `${config.prefix}-modal-clip`,
"title": (_a = ult.value.clipModalTips) == null ? void 0 : _a.title,
"visible": props2.visible,
"onClose": props2.onCancel,
"showAdjust": true,
"isFullscreen": data.isFullscreen,
"onAdjust": (val) => {
data.isFullscreen = val;
},
"width": "668px",
"height": "421px"
}, {
default: () => {
var _a2, _b, _c;
return [vue.createVNode("div", {
"class": `${config.prefix}-form-item ${config.prefix}-clip`
}, [vue.createVNode("div", {
"class": `${config.prefix}-clip-main`
}, [data.imgSelected ? vue.createVNode("div", {
"class": `${config.prefix}-clip-cropper`
}, [vue.createVNode("img", {
"src": data.imgSrc,
"ref": uploadImgRef,
"style": {
display: "none"
},
"alt": ""
}, null), vue.createVNode("div", {
"class": `${config.prefix}-clip-delete`,
"onClick": reset
}, [vue.createVNode(MdModal.Icon, {
"name": "delete"
}, null)])]) : vue.createVNode("div", {
"class": `${config.prefix}-clip-upload`,
"onClick": () => {
uploadRef.value.click();
},
"role": "button",
"tabindex": "0",
"aria-label": (_a2 = ult.value.imgTitleItem) == null ? void 0 : _a2.upload
}, [vue.createVNode(MdModal.Icon, {
"name": "upload"
}, null)])]), vue.createVNode("div", {
"class": `${config.prefix}-clip-preview`
}, [vue.createVNode("div", {
"class": `${config.prefix}-clip-preview-target`,
"ref": previewTargetRef
}, null)])]), vue.createVNode("div", {
"class": `${config.prefix}-form-item`
}, [vue.createVNode("button", {
"class": `${config.prefix}-btn`,
"type": "button",
"onClick": () => {
if (cropper) {
const cvs = cropper.getCroppedCanvas();
eventName.bus.emit(editorId, eventName.UPLOAD_IMAGE, [index.base642File(cvs.toDataURL("image/png"))], props2.onOk);
reset();
}
}
}, [((_b = ult.value.clipModalTips) == null ? void 0 : _b.buttonUpload) || ((_c = ult.value.linkModalTips) == null ? void 0 : _c.buttonOK)])]), vue.createVNode("input", {
"ref": uploadRef,
"accept": "image/*",
"type": "file",
"multiple": false,
"style": {
display: "none"
},
"aria-hidden": "true"
}, null)];
}
});
};
}
});
const props$3 = {
type: {
type: String,
default: "link"
},
linkVisible: {
type: Boolean,
default: false
},
clipVisible: {
type: Boolean,
default: false
},
onCancel: {
type: Function,
default: () => {
}
},
onOk: {
type: Function,
default: () => {
}
}
};
const Modals = /* @__PURE__ */ vue.defineComponent({
name: `${config.prefix}-modals`,
props: props$3,
setup(props2) {
return () => vue.createVNode(vue.Fragment, null, [vue.createVNode(LinkModal, {
"type": props2.type,
"visible": props2.linkVisible,
"onOk": props2.onOk,
"onCancel": props2.onCancel
}, null), vue.createVNode(ClipModal, {
"visible": props2.clipVisible,
"onOk": props2.onOk,
"onCancel": props2.onCancel
}, null)]);
}
});
const ToolBar = /* @__PURE__ */ vue.defineComponent({
name: "MDEditorToolbar",
props: toolbarProps,
setup(props2) {
const editorId = vue.inject("editorId");
const ult = vue.inject("usedLanguageText");
const theme = vue.inject("theme");
const previewTheme = vue.inject("previewTheme");
const language2 = vue.inject("language");
const disabled = vue.inject("disabled");
const {
fullscreenHandler
} = useSreenfull(props2);
const wrapperId = `${editorId}-toolbar-wrapper`;
const wrapperRef = vue.ref();
const visible = vue.reactive({
title: false,
catalog: false,
// 图片上传下拉
image: false,
// 表格预选
table: false,
// mermaid
mermaid: false,
katex: false
});
const emitHandler = (direct, params) => {
if (disabled == null ? void 0 : disabled.value) {
return false;
}
eventName.bus.emit(editorId, eventName.REPLACE, direct, params);
};
const modalData = vue.reactive({
type: "link",
linkVisible: false,
clipVisible: false
});
const toolbarLeftRef = vue.ref();
vue.onMounted(() => {
eventName.bus.on(editorId, {
name: eventName.OPEN_MODALS,
callback(type) {
modalData.type = type;
modalData.linkVisible = true;
}
});
});
const splitedbar = vue.computed(() => {
const excluedBars = props2.toolbars.filter((barItem) => !props2.toolbarsExclude.includes(barItem));
const moduleSplitIndex = excluedBars.indexOf("=");
const barLeft = moduleSplitIndex === -1 ? excluedBars : excluedBars.slice(0, moduleSplitIndex + 1);
const barRight = moduleSplitIndex === -1 ? [] : excluedBars.slice(moduleSplitIndex, Number.MAX_SAFE_INTEGER);
return [barLeft, barRight];
});
const uploadRef = vue.ref();
const uploadHandler = () => {
eventName.bus.emit(editorId, eventName.UPLOAD_IMAGE, Array.from(uploadRef.value.files || []));
uploadRef.value.value = "";
};
vue.onMounted(() => {
uploadRef.value.addEventListener("change", uploadHandler);
});
const barRender = (barItem) => {
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M, _N, _O, _P, _Q, _R, _S, _T, _U, _V, _W, _X, _Y, _Z, __, _$, _aa, _ba, _ca, _da, _ea, _fa, _ga, _ha, _ia, _ja, _ka, _la, _ma, _na, _oa, _pa, _qa, _ra, _sa, _ta, _ua, _va, _wa, _xa, _ya, _za, _Aa;
if (config.allToolbar.includes(barItem)) {
switch (barItem) {
case "-": {
return vue.createVNode(Divider, null, null);
}
case "bold": {
return vue.createVNode("div", {
"class": [`${config.prefix}-toolbar-item`, (disabled == null ? void 0 : disabled.value) && `${config.prefix}-disabled`],
"title": (_a = ult.value.toolbarTips) == null ? void 0 : _a.bold,
"onClick": () => {
emitHandler("bold");
}
}, [vue.createVNode(MdModal.Icon, {
"name": "bold"
}, null), props2.showToolbarName && vue.createVNode("div", {
"class": `${config.prefix}-toolbar-item-name`
}, [(_b = ult.value.toolbarTips) == null ? void 0 : _b.bold])]);
}
case "underline": {
return vue.createVNode("div", {
"class": [`${config.prefix}-toolbar-item`, (disabled == null ? void 0 : disabled.value) && `${config.prefix}-disabled`],
"title": (_c = ult.value.toolbarTips) == null ? void 0 : _c.underline,
"onClick": () => {
emitHandler("underline");
}
}, [vue.createVNode(MdModal.Icon, {
"name": "underline"
}, null), props2.showToolbarName && vue.createVNode("div", {
"class": `${config.prefix}-toolbar-item-name`
}, [(_d = ult.value.toolbarTips) == null ? void 0 : _d.underline])]);
}
case "italic": {
return vue.createVNode("div", {
"class": [`${config.prefix}-toolbar-item`, (disabled == null ? void 0 : disabled.value) && `${config.prefix}-disabled`],
"title": (_e = ult.value.toolbarTips) == null ? void 0 : _e.italic,
"onClick": () => {
emitHandler("italic");
}
}, [vue.createVNode(MdModal.Icon, {
"name": "italic"
}, null), props2.showToolbarName && vue.createVNode("div", {
"class": `${config.prefix}-toolbar-item-name`
}, [(_f = ult.value.toolbarTips) == null ? void 0 : _f.italic])]);
}
case "strikeThrough": {
return vue.createVNode("div", {
"class": [`${config.prefix}-toolbar-item`, (disabled == null ? void 0 : disabled.value) && `${config.prefix}-disabled`],
"title": (_g = ult.value.toolbarTips) == null ? void 0 : _g.strikeThrough,
"onClick": () => {
emitHandler("strikeThrough");
}
}, [vue.createVNode(MdModal.Icon, {
"name": "strike-through"
}, null), props2.showToolbarName && vue.createVNode("div", {
"class": `${config.prefix}-toolbar-item-name`
}, [(_h = ult.value.toolbarTips) == null ? void 0 : _h.strikeThrough])]);
}
case "title": {
return vue.createVNode(DropdownToolbar.Dropdown, {
"relative": `#${wrapperId}`,
"visible": visible.title,
"onChange": (v) => {
visible.title = v;
},
"disabled": disabled == null ? void 0 : disabled.value,
"overlay": vue.createVNode("ul", {
"class": `${config.prefix}-menu`,
"onClick": () => {
visible.title = false;
},
"role": "menu"
}, [vue.createVNode("li", {
"class": `${config.prefix}-menu-item ${config.prefix}-menu-item-title`,
"onClick": () => {
emitHandler("h1");
},
"role": "menuitem",
"tabindex": "0"
}, [(_i = ult.value.titleItem) == null ? void 0 : _i.h1]), vue.createVNode("li", {
"class": `${config.prefix}-menu-item ${config.prefix}-menu-item-title`,
"onClick": () => {
emitHandler("h2");
},
"role": "menuitem",
"tabindex": "0"
}, [(_j = ult.value.titleItem) == null ? void 0 : _j.h2]), vue.createVNode("li", {
"class": `${config.prefix}-menu-item ${config.prefix}-menu-item-title`,
"onClick": () => {
emitHandler("h3");
},
"role": "menuitem",
"tabindex": "0"
}, [(_k = ult.value.titleItem) == null ? void 0 : _k.h3]), vue.createVNode("li", {
"class": `${config.prefix}-menu-item ${config.prefix}-menu-item-title`,
"onClick": () => {
emitHandler("h4");
},
"role": "menuitem",
"tabindex": "0"
}, [(_l = ult.value.titleItem) == null ? void 0 : _l.h4]), vue.createVNode("li", {
"class": `${config.prefix}-menu-item ${config.prefix}-menu-item-title`,
"onClick": () => {
emitHandler("h5");
},
"role": "menuitem",
"tabindex": "0"
}, [(_m = ult.value.titleItem) == null ? void 0 : _m.h5]), vue.createVNode("li", {
"class": `${config.prefix}-menu-item ${config.prefix}-menu-item-title`,
"onClick": () => {
emitHandler("h6");
},
"role": "menuitem",
"tabindex": "0"
}, [(_n = ult.value.titleItem) == null ? void 0 : _n.h6])])
}, {
default: () => {
var _a2, _b2;
return [vue.createVNode("div", {
"class": [`${config.prefix}-toolbar-item`, (disabled == null ? void 0 : disabled.value) && `${config.prefix}-disabled`],
"title": (_a2 = ult.value.toolbarTips) == null ? void 0 : _a2.title
}, [vue.createVNode(MdModal.Icon, {
"name": "title"
}, null), props2.showToolbarName && vue.createVNode("div", {
"class": `${config.prefix}-toolbar-item-name`
}, [(_b2 = ult.value.toolbarTips) == null ? void 0 : _b2.title])])];
}
});
}
case "sub": {
return vue.createVNode("div", {
"class": [`${config.prefix}-toolbar-item`, (disabled == null ? void 0 : disabled.value) && `${config.prefix}-disabled`],
"title": (_o = ult.value.toolbarTips) == null ? void 0 : _o.sub,
"onClick": () => {
emitHandler("sub");
}
}, [vue.createVNode(MdModal.Icon, {
"name": "sub"
}, null), props2.showToolbarName && vue.createVNode("div", {
"class": `${config.prefix}-toolbar-item-name`
}, [(_p = ult.value.toolbarTips) == null ? void 0 : _p.sub])]);
}
case "sup": {
return vue.createVNode("div", {
"class": [`${config.prefix}-toolbar-item`, (disabled == null ? void 0 : disabled.value) && `${config.prefix}-disabled`],
"title": (_q = ult.value.toolbarTips) == null ? void 0 : _q.sup,
"onClick": () => {
emitHandler("sup");
}
}, [vue.createVNode(MdModal.Icon, {
"name": "sup"
}, null), props2.showToolbarName && vue.createVNode("div", {
"class": `${config.prefix}-toolbar-item-name`
}, [(_r = ult.value.toolbarTips) == null ? void 0 : _r.sup])]);
}
case "quote": {
return vue.createVNode("div", {
"class": [`${config.prefix}-toolbar-item`, (disabled == null ? void 0 : disabled.value) && `${config.prefix}-disabled`],
"title": (_s = ult.value.toolbarTips) == null ? void 0 : _s.quote,
"onClick": () => {
emitHandler("quote");
}
}, [vue.createVNode(MdModal.Icon, {
"name": "quote"
}, null), props2.showToolbarName && vue.createVNode("div", {
"class": `${config.prefix}-toolbar-item-name`
}, [(_t = ult.value.toolbarTips) == null ? void 0 : _t.quote])]);
}
case "unorderedList": {
return vue.createVNode("div", {
"class": [`${config.prefix}-toolbar-item`, (disabled == null ? void 0 : disabled.value) && `${config.prefix}-disabled`],
"title": (_u = ult.value.toolbarTips) == null ? void 0 : _u.unorderedList,
"onClick": () => {
emitHandler("unorderedList");
}
}, [vue.createVNode(MdModal.Icon, {
"name": "unordered-list"
}, null), props2.showToolbarName && vue.createVNode("div", {
"class": `${config.prefix}-toolbar-item-name`
}, [(_v = ult.value.toolbarTips) == null ? void 0 : _v.unorderedList])]);
}
case "orderedList": {
return vue.createVNode("div", {
"class": [`${config.prefix}-toolbar-item`, (disabled == null ? void 0 : disabled.value) && `${config.prefix}-disabled`],
"title": (_w = ult.value.toolbarTips) == null ? void 0 : _w.orderedList,
"onClick": () => {
emitHandler("orderedList");
}
}, [vue.createVNode(MdModal.Icon, {
"name": "ordered-list"
}, null), props2.showToolbarName && vue.createVNode("div", {
"class": `${config.prefix}-toolbar-item-name`
}, [(_x = ult.value.toolbarTips) == null ? void 0 : _x.orderedList])]);
}
case "task": {
return vue.createVNode("div", {
"class": [`${config.prefix}-toolbar-item`, (disabled == null ? void 0 : disabled.value) && `${config.prefix}-disabled`],
"title": (_y = ult.value.toolbarTips) == null ? void 0 : _y.task,
"onClick": () => {
emitHandler("task");
}
}, [vue.createVNode(MdModal.Icon, {
"name": "task"
}, null), props2.showToolbarName && vue.createVNode("div", {
"class": `${config.prefix}-toolbar-item-name`
}, [(_z = ult.value.toolbarTips) == null ? void 0 : _z.task])]);
}
case "codeRow": {
return vue.createVNode("div", {
"class": [`${config.prefix}-toolbar-item`, (disabled == null ? void 0 : disabled.value) && `${config.prefix}-disabled`],
"title": (_A = ult.value.toolbarTips) == null ? void 0 : _A.codeRow,
"onClick": () => {
emitHandler("codeRow");
}
}, [vue.createVNode(MdModal.Icon, {
"name": "code-row"
}, null), props2.showToolbarName && vue.createVNode("div", {
"class": `${config.prefix}-toolbar-item-name`
}, [(_B = ult.value.toolbarTips) == null ? void 0 : _B.codeRow])]);
}
case "code": {
return vue.createVNode("div", {
"class": [`${config.prefix}-toolbar-item`, (disabled == null ? void 0 : disabled.value) && `${config.prefix}-disabled`],
"title": (_C = ult.value.toolbarTips) == null ? void 0 : _C.code,
"onClick": () => {
emitHandler("code");
}
}, [vue.createVNode(MdModal.Icon, {
"name": "code"
}, null), props2.showToolbarName && vue.createVNode("div", {
"class": `${config.prefix}-toolbar-item-name`
}, [(_D = ult.value.toolbarTips) == null ? void 0 : _D.code])]);
}
case "link": {
return vue.createVNode("div", {
"class": [`${config.prefix}-toolbar-item`, (disabled == null ? void 0 : disabled.value) && `${config.prefix}-disabled`],
"title": (_E = ult.value.toolbarTips) == null ? void 0 : _E.link,
"onClick": () => {
if (disabled == null ? void 0 : disabled.value) {
return false;
}
if (props2.insertLinkDirect) {
emitHandler("link");
} else {
modalData.type = "link";
modalData.linkVisible = true;
}
}
}, [vue.createVNode(MdModal.Icon, {
"name": "link"
}, null), props2.showToolbarName && vue.createVNode("div", {
"class": `${config.prefix}-toolbar-item-name`
}, [(_F = ult.value.toolbarTips) == null ? void 0 : _F.link])]);
}
case "image": {
return props2.noUploadImg ? vue.createVNode("div", {
"class": [`${config.prefix}-toolbar-item`, (disabled == null ? void 0 : disabled.value) && `${config.prefix}-disabled`],
"title": (_G = ult.value.toolbarTips) == null ? void 0 : _G.image,
"onClick": () => {
if (disabled == null ? void 0 : disabled.value) {
return false;
}
if (props2.insertLinkDirect) {
emitHandler("image");
} else {
modalData.type = "image";
modalData.linkVisible = true;
}
}
}, [vue.createVNode(MdModal.Icon, {
"name": "image"
}, null), props2.showToolbarName && vue.createVNode("div", {
"class": `${config.prefix}-toolbar-item-name`
}, [(_H = ult.value.toolbarTips) == null ? void 0 : _H.image])]) : vue.createVNode(DropdownToolbar.Dropdown, {
"relative": `#${wrapperId}`,
"visible": visible.image,
"onChange": (v) => {
visible.image = v;
},
"disabled": disabled == null ? void 0 : disabled.value,
"overlay": vue.createVNode("ul", {
"class": `${config.prefix}-menu`,
"onClick": () => {
visible.image = false;
},
"role": "menu"
}, [vue.createVNode("li", {
"class": `${config.prefix}-menu-item ${config.prefix}-menu-item-image`,
"onClick": () => {
if (props2.insertLinkDirect) {
emitHandler("image");
} else {
modalData.type = "image";
modalData.linkVisible = true;
}
},
"role": "menuitem",
"tabindex": "0"
}, [(_I = ult.value.imgTitleItem) == null ? void 0 : _I.link]), vue.createVNode("li", {
"class": `${config.prefix}-menu-item ${config.prefix}-menu-item-image`,
"onClick": () => {
uploadRef.value.click();
},
"role": "menuitem",
"tabindex": "0"
}, [(_J = ult.value.imgTitleItem) == null ? void 0 : _J.upload]), vue.createVNode("li", {
"class": `${config.prefix}-menu-item ${config.prefix}-menu-item-image`,
"onClick": () => {
modalData.clipVisible = true;
},
"role": "menuitem",
"tabindex": "0"
}, [(_K = ult.value.imgTitleItem) == null ? void 0 : _K.clip2upload])])
}, {
default: () => {
var _a2, _b2;
return [vue.createVNode("div", {
"class": [`${config.prefix}-toolbar-item`, (disabled == null ? void 0 : disabled.value) && `${config.prefix}-disabled`],
"title": (_a2 = ult.value.toolbarTips) == null ? void 0 : _a2.image
}, [vue.createVNode(MdModal.Icon, {
"name": "image"
}, null), props2.showToolbarName && vue.createVNode("div", {
"class": `${config.prefix}-toolbar-item-name`
}, [(_b2 = ult.value.toolbarTips) == null ? void 0 : _b2.image])])];
}
});
}
case "table": {
return vue.createVNode(DropdownToolbar.Dropdown, {
"relative": `#${wrapperId}`,
"visible": visible.table,
"onChange": (v) => {
visible.table = v;
},
"disabled": disabled == null ? void 0 : disabled.value,
"key": "bar-table",
"overlay": vue.createVNode(TableShape, {
"tableShape": props2.tableShape,
"onSelected": (selectedShape) => {
emitHandler("table", {
selectedShape
});
}
}, null)
}, {
default: () => {
var _a2, _b2;
return [vue.createVNode("div", {
"class": [`${config.prefix}-toolbar-item`, (disabled == null ? void 0 : disabled.value) && `${config.prefix}-disabled`],
"title": (_a2 = ult.value.toolbarTips) == null ? void 0 : _a2.table
}, [vue.createVNode(MdModal.Icon, {
"name": "table"
}, null), props2.showToolbarName && vue.createVNode("div", {
"class": `${config.prefix}-toolbar-item-name`
}, [(_b2 = ult.value.toolbarTips) == null ? void 0 : _b2.table])])];
}
});
}
case "revoke": {
return vue.createVNode("div", {
"class": [`${config.prefix}-toolbar-item`, (disabled == null ? void 0 : disabled.value) && `${config.prefix}-disabled`],
"title": (_L = ult.value.toolbarTips) == null ? void 0 : _L.revoke,
"onClick": () => {
if (disabled == null ? void 0 : disabled.value) {
return false;
}
eventName.bus.emit(editorId, eventName.CTRL_Z);
}
}, [vue.createVNode(MdModal.Icon, {
"name": "revoke"
}, null), props2.showToolbarName && vue.createVNode("div", {
"class": `${config.prefix}-toolbar-item-name`
}, [(_M = ult.value.toolbarTips) == null ? void 0 : _M.revoke])]);
}
case "next": {
return vue.createVNode("div", {
"class": [`${config.prefix}-toolbar-item`, (disabled == null ? void 0 : disabled.value) && `${config.prefix}-disabled`],
"title": (_N = ult.value.toolbarTips) == null ? void 0 : _N.next,
"onClick": () => {
if (disabled == null ? void 0 : disabled.value) {
return false;
}
eventName.bus.emit(editorId, eventName.CTRL_SHIFT_Z);
}
}, [vue.createVNode(MdModal.Icon, {
"name": "next"
}, null), props2.showToolbarName && vue.createVNode("div", {
"class": `${config.prefix}-toolbar-item-name`
}, [(_O = ult.value.toolbarTips) == null ? void 0 : _O.next])]);
}
case "save": {
return vue.createVNode("div", {
"class": [`${config.prefix}-toolbar-item`, (disabled == null ? void 0 : disabled.value) && `${config.prefix}-disabled`],
"title": (_P = ult.value.toolbarTips) == null ? void 0 : _P.save,
"onClick": () => {
if (disabled == null ? void 0 : disabled.value) {
return false;
}
eventName.bus.emit(editorId, eventName.ON_SAVE);
}
}, [vue.createVNode(MdModal.Icon, {
"name": "save"
}, null), props2.showToolbarName && vue.createVNode("div", {
"class": `${config.prefix}-toolbar-item-name`
}, [(_Q = ult.value.toolbarTips) == null ? void 0 : _Q.save])]);
}
case "prettier": {
return !props2.noPrettier ? vue.createVNode("div", {
"class": [`${config.prefix}-toolbar-item`, (disabled == null ? void 0 : disabled.value) && `${config.prefix}-disabled`],
"title": (_R = ult.value.toolbarTips) == null ? void 0 : _R.prettier,
"onClick": () => {
emitHandler("prettier");
}
}, [vue.createVNode(MdModal.Icon, {
"name": "prettier"
}, null), props2.showToolbarName && vue.createVNode("div", {
"class": `${config.prefix}-toolbar-item-name`
}, [(_S = ult.value.toolbarTips) == null ? void 0 : _S.prettier])]) : "";
}
case "pageFullscreen": {
return !props2.setting.fullscreen && vue.createVNode("div", {
"class": [`${config.prefix}-toolbar-item`, props2.setting.pageFullscreen && `${config.prefix}-toolbar-active`, (disabled == null ? void 0 : disabled.value) && `${config.prefix}-disabled`],
"title": (_T = ult.value.toolbarTips) == null ? void 0 : _T.pageFullscreen,
"onClick": () => {
if (disabled == null ? void 0 : disabled.value) {
return false;
}
props2.updateSetting("pageFullscreen");
}
}, [vue.createVNode(MdModal.Icon, {
"name": props2.setting.pageFullscreen ? "minimize" : "maximize"
}, null), props2.showToolbarName && vue.createVNode("div", {
"class": `${config.prefix}-toolbar-item-name`
}, [(_U = ult.value.toolbarTips) == null ? void 0 : _U.pageFullscreen])]);
}
case "fullscreen": {
return vue.createVNode("div", {
"class": [`${config.prefix}-toolbar-item`, props2.setting.fullscreen && `${config.prefix}-toolbar-active`, (disabled == null ? void 0 : disabled.value) && `${config.prefix}-disabled`],
"title": (_V = ult.value.toolbarTips) == null ? void 0 : _V.fullscreen,
"onClick": () => {
if (disabled == null ? void 0 : disabled.value) {
return false;
}
fullscreenHandler();
}
}, [vue.createVNode(MdModal.Icon, {
"name": props2.setting.fullscreen ? "fullscreen-exit" : "fullscreen"
}, null), props2.showToolbarName && vue.createVNode("div", {
"class": `${config.prefix}-toolbar-item-name`
}, [(_W = ult.value.toolbarTips) == null ? void 0 : _W.fullscreen])]);
}
case "preview": {
return vue.createVNode("div", {
"class": [`${config.prefix}-toolbar-item`, props2.setting.preview && `${config.prefix}-toolbar-active`, (disabled == null ? void 0 : disabled.value) && `${config.prefix}-disabled`],
"title": (_X = ult.value.toolbarTips) == null ? void 0 : _X.preview,
"onClick": () => {
if (disabled == null ? void 0 : disabled.value) {
return false;
}
props2.updateSetting("preview");
}
}, [vue.createVNode(MdModal.Icon, {
"name": "preview"
}, null), props2.showToolbarName && vue.createVNode("div", {
"class": `${config.prefix}-toolbar-item-name`
}, [(_Y = ult.value.toolbarTips) == null ? void 0 : _Y.preview])]);
}
case "previewOnly": {
return vue.createVNode("div", {
"class": [`${config.prefix}-toolbar-item`, props2.setting.previewOnly && `${config.prefix}-toolbar-active`, (disabled == null ? void 0 : disabled.value) && `${config.prefix}-disabled`],
"title": (_Z = ult.value.toolbarTips) == null ? void 0 : _Z.previewOnly,
"onClick": () => {
if (disabled == null ? void 0 : disabled.value) {
return false;
}
props2.updateSetting("previewOnly");
}
}, [vue.createVNode(MdModal.Icon, {
"name": "preview-only"
}, null), props2.showToolbarName && vue.createVNode("div", {
"class": `${config.prefix}-toolbar-item-name`
}, [(__ = ult.value.toolbarTips) == null ? void 0 : __.previewOnly])]);
}
case "htmlPreview": {
return vue.createVNode("div", {
"class": [`${config.prefix}-toolbar-item`, props2.setting.htmlPreview && `${config.prefix}-toolbar-active`, (disabled == null ? void 0 : disabled.value) && `${config.prefix}-disabled`],
"title": (_$ = ult.value.toolbarTips) == null ? void 0 : _$.htmlPreview,
"onClick": () => {
if (disabled == null ? void 0 : disabled.value) {
return false;
}
props2.updateSetting("htmlPreview");
}
}, [vue.createVNode(MdModal.Icon, {
"name": "preview-html"
}, null), props2.showToolbarName && vue.createVNode("div", {
"class": `${config.prefix}-toolbar-item-name`
}, [(_aa = ult.value.toolbarTips) == null ? void 0 : _aa.htmlPreview])]);
}
case "catalog": {
return vue.createVNode("div", {
"class": [`${config.prefix}-toolbar-item`, props2.catalogVisible && `${config.prefix}-toolbar-active`, (disabled == null ? void 0 : disabled.value) && `${config.prefix}-disabled`],
"title": (_ba = ult.value.toolbarTips) == null ? void 0 : _ba.catalog,
"onClick": () => {
if (disabled == null ? void 0 : disabled.value) {
return false;
}
eventName.bus.emit(editorId, eventName.CHANGE_CATALOG_VISIBLE);
},
"key": "bar-catalog"
}, [vue.createVNode(MdModal.Icon, {
"name": "catalog"
}, null), props2.showToolbarName && vue.createVNode("div", {
"class": `${config.prefix}-toolbar-item-name`
}, [(_ca = ult.value.toolbarTips) == null ? void 0 : _ca.catalog])]);
}
case "github": {
return vue.createVNode("div", {
"class": [`${config.prefix}-toolbar-item`, (disabled == null ? void 0 : disabled.value) && `${config.prefix}-disabled`],
"title": (_da = ult.value.toolbarTips) == null ? void 0 : _da.github,
"onClick": () => {
if (disabled == null ? void 0 : disabled.value) {
return false;
}
util.linkTo("https://github.com/imzbf/md-editor-v3");
}
}, [vue.createVNode(MdModal.Icon, {
"name": "github"
}, null), props2.showToolbarName && vue.createVNode("div", {
"class": `${config.prefix}-toolbar-item-name`
}, [(_ea = ult.value.toolbarTips) == null ? void 0 : _ea.github])]);
}
case "mermaid": {
return vue.createVNode(DropdownToolbar.Dropdown, {
"relative": `#${wrapperId}`,
"visible": visible.mermaid,
"onChange": (v) => {
visible.mermaid = v;
},
"disabled": disabled == null ? void 0 : disabled.value,
"overlay": vue.createVNode("ul", {
"class": `${config.prefix}-menu`,
"onClick": () => {
visible.mermaid = false;
},
"role": "menu"
}, [vue.createVNode("li", {
"class": `${config.prefix}-menu-item ${config.prefix}-menu-item-mermaid`,
"onClick": () => {
emitHandler("flow");
},
"role": "menuitem",
"tabindex": "0"
}, [(_fa = ult.value.mermaid) == null ? void 0 : _fa.flow]), vue.createVNode("li", {
"class": `${config.prefix}-menu-item ${config.prefix}-menu-item-mermaid`,
"onClick": () => {
emitHandler("sequence");
},
"role": "menuitem",
"tabindex": "0"
}, [(_ga = ult.value.mermaid) == null ? void 0 : _ga.sequence]), vue.createVNode("li", {
"class": `${config.prefix}-menu-item ${config.prefix}-menu-item-mermaid`,
"onClick": () => {
emitHandler("gantt");
},
"role": "menuitem",
"tabindex": "0"
}, [(_ha = ult.value.mermaid) == null ? void 0 : _ha.gantt]), vue.createVNode("li", {
"class": `${config.prefix}-menu-item ${config.prefix}-menu-item-mermaid`,
"onClick": () => {
emitHandler("class");
},
"role": "menuitem",
"tabindex": "0"
}, [(_ia = ult.value.mermaid) == null ? void 0 : _ia.class]), vue.createVNode("li", {
"class": `${config.prefix}-menu-item ${config.prefix}-menu-item-mermaid`,
"onClick": () => {
emitHandler("state");
},
"role": "menuitem",
"tabindex": "0"
}, [(_ja = ult.value.mermaid) == null ? void 0 : _ja.state]), vue.createVNode("li", {
"class": `${config.prefix}-menu-item ${config.prefix}-menu-item-mermaid`,
"onClick": () => {
emitHandler("pie");
},
"role": "menuitem",
"tabindex": "0"
}, [(_ka = ult.value.mermaid) == null ? void 0 : _ka.pie]), vue.createVNode("li", {
"class": `${config.prefix}-menu-item ${config.prefix}-menu-item-mermaid`,
"onClick": () => {
emitHandler("relationship");
},
"role": "menuitem",
"tabindex": "0"
}, [(_la = ult.value.mermaid) == null ? void 0 : _la.relationship]), vue.createVNode("li", {
"class": `${config.prefix}-menu-item ${config.prefix}-menu-item-mermaid`,
"onClick": () => {
emitHandler("journey");
},
"role": "menuitem",
"tabindex": "0"
}, [(_ma = ult.value.mermaid) == null ? void 0 : _ma.journey])]),
"key": "bar-mermaid"
}, {
default: () => {
var _a2, _b2;
return [vue.createVNode("div", {
"class": [`${config.prefix}-toolbar-item`, (disabled == null ? void 0 : disabled.value) && `${config.prefix}-disabled`],
"title": (_a2 = ult.value.toolbarTips) == null ? void 0 : _a2.mermaid
}, [vue.createVNode(MdModal.Icon, {
"name": "mermaid"
}, null), props2.showToolbarName && vue.createVNode("div", {
"class": `${config.prefix}-toolbar-item-name`
}, [(_b2 = ult.value.toolbarTips) == null ? void 0 : _b2.mermaid])])];
}
});
}
case "katex": {
return vue.createVNode(DropdownToolbar.Dropdown, {
"relative": `#${wrapperId}`,
"visible": visible.katex,
"onChange": (v) => {
visible.katex = v;
},