vditor 3.11.0 → 3.11.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2019 B3log 开源, b3log.org
3
+ Copyright (c) 2019-present B3log 开源, b3log.org
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -201,7 +201,7 @@ Markdown 输出的 HTML 所展现的外观。内置 ant-design, light,dark,w
201
201
  | minHeight | 编辑区域最小高度 | - |
202
202
  | width | 编辑器总宽度,支持 % | 'auto' |
203
203
  | placeholder | 输入区域为空时的提示 | '' |
204
- | lang | 语言种类:en_US, fr_FR, pt_BR, ja_JP, ko_KR, ru_RU, sv_SE, zh_CN, zh_TW | 'zh_CN' |
204
+ | lang | 语言种类:de_DE, en_US, es_ES, fr_FR, ja_JP, ko_KR, pt_BR, ru_RU, sv_SE, vi_VN, zh_CN, zh_TW | 'zh_CN' |
205
205
  | input(value: string) | 输入后触发 | - |
206
206
  | focus(value: string) | 聚焦后触发 | - |
207
207
  | blur(value: string) | 失焦后触发 | - |
@@ -219,6 +219,7 @@ Markdown 输出的 HTML 所展现的外观。内置 ant-design, light,dark,w
219
219
  | theme | 主题:classic, dark | 'classic' |
220
220
  | icon | 图标风格:ant, material | 'ant' |
221
221
  | customRenders: {language: string, render: (element: HTMLElement, vditor: IVditor) => void}[] | 自定义渲染器 | [] |
222
+ | customWysiwygToolbar(type: TWYSISYGToolbar, element: HTMLElement): void | 对 wysiwyg 模式下的工具栏进行自定义 | - |
222
223
 
223
224
  #### options.toolbar
224
225
 
@@ -465,6 +466,7 @@ if (xhr.status === 200) {
465
466
 
466
467
  | | 说明 | 默认值 |
467
468
  | - | - | - |
469
+ | xhr | 上传时使用的 XMLHttpRequest | - |
468
470
  | url | 上传 url,为空则不会触发上传相关事件 | '' |
469
471
  | max | 上传文件最大 Byte | 10 * 1024 * 1024 |
470
472
  | linkToImgUrl | 剪切板中包含图片地址时,使用此 url 重新上传 | '' |
package/dist/index.css CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vditor v3.11.0 - A markdown editor written in TypeScript.
2
+ * Vditor v3.11.2 - A markdown editor written in TypeScript.
3
3
  *
4
4
  * MIT License
5
5
  *
@@ -25,7 +25,7 @@
25
25
  *
26
26
  */
27
27
  /*!
28
- * Vditor v3.11.0 - A markdown editor written in TypeScript.
28
+ * Vditor v3.11.2 - A markdown editor written in TypeScript.
29
29
  *
30
30
  * MIT License
31
31
  *
package/dist/index.d.ts CHANGED
@@ -4,6 +4,7 @@ import VditorMethod from "./method";
4
4
  declare class Vditor extends VditorMethod {
5
5
  readonly version: string;
6
6
  vditor: IVditor;
7
+ private isDestroyed;
7
8
  /**
8
9
  * @param id 要挂载 Vditor 的元素或者元素 ID。
9
10
  * @param options Vditor 参数
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vditor v3.11.0 - A markdown editor written in TypeScript.
2
+ * Vditor v3.11.2 - A markdown editor written in TypeScript.
3
3
  *
4
4
  * MIT License
5
5
  *
@@ -2471,7 +2471,7 @@ var previewRender = function (previewElement, markdown, options) { return __awai
2471
2471
  previewElement.innerHTML = html;
2472
2472
  previewElement.classList.add("vditor-reset");
2473
2473
  if (!!mergedOptions.i18n) return [3 /*break*/, 5];
2474
- if (!!["en_US", "fr_FR", "pt_BR", "ja_JP", "ko_KR", "ru_RU", "sv_SE", "zh_CN", "zh_TW"].includes(mergedOptions.lang)) return [3 /*break*/, 2];
2474
+ if (!!["de_DE", "en_US", "es_ES", "fr_FR", "ja_JP", "ko_KR", "pt_BR", "ru_RU", "sv_SE", "vi_VN", "zh_CN", "zh_TW"].includes(mergedOptions.lang)) return [3 /*break*/, 2];
2475
2475
  throw new Error("options.lang error, see https://ld246.com/article/1549638745630#options");
2476
2476
  case 2:
2477
2477
  i18nScriptPrefix = "vditorI18nScript";
@@ -2633,7 +2633,7 @@ var Vditor = /** @class */ (function () {
2633
2633
  /* harmony export */ "H": () => (/* binding */ _VDITOR_VERSION),
2634
2634
  /* harmony export */ "g": () => (/* binding */ Constants)
2635
2635
  /* harmony export */ });
2636
- var _VDITOR_VERSION = "3.11.0";
2636
+ var _VDITOR_VERSION = "3.11.2";
2637
2637
 
2638
2638
  var Constants = /** @class */ (function () {
2639
2639
  function Constants() {
@@ -2681,7 +2681,7 @@ var Constants = /** @class */ (function () {
2681
2681
  // 别名
2682
2682
  "js", "ts", "html", "toml", "c#", "bat"
2683
2683
  ];
2684
- Constants.CDN = "https://unpkg.com/vditor@".concat("3.11.0");
2684
+ Constants.CDN = "https://unpkg.com/vditor@".concat("3.11.2");
2685
2685
  Constants.MARKDOWN_OPTIONS = {
2686
2686
  autoSpace: false,
2687
2687
  gfmAutoLink: true,
@@ -4785,7 +4785,13 @@ var insertHTML = function (html, vditor) {
4785
4785
  vditor[vditor.currentMode].element.insertAdjacentHTML("beforeend", pasteElement.innerHTML);
4786
4786
  }
4787
4787
  else {
4788
- blockElement.insertAdjacentHTML("afterend", pasteElement.innerHTML);
4788
+ var liElement = (0,_hasClosest__WEBPACK_IMPORTED_MODULE_1__/* .hasClosestByMatchTag */ .lG)(range.startContainer, "LI");
4789
+ if (liElement && pasteElement.firstElementChild.tagName === "UL") {
4790
+ liElement.insertAdjacentHTML("afterend", pasteElement.firstElementChild.innerHTML);
4791
+ }
4792
+ else {
4793
+ blockElement.insertAdjacentHTML("afterend", pasteElement.innerHTML);
4794
+ }
4789
4795
  }
4790
4796
  setRangeByWbr(vditor[vditor.currentMode].element, range);
4791
4797
  }
@@ -7132,6 +7138,7 @@ var highlightToolbarWYSIWYG = function (vditor) {
7132
7138
  if (footnotesElement) {
7133
7139
  vditor.wysiwyg.popover.innerHTML = "";
7134
7140
  genClose(footnotesElement, vditor);
7141
+ customWysiwygToolbar(vditor, "footnotes-block");
7135
7142
  setPopoverPosition(vditor, footnotesElement);
7136
7143
  return;
7137
7144
  }
@@ -7254,6 +7261,7 @@ var highlightToolbarWYSIWYG = function (vditor) {
7254
7261
  if (tocElement) {
7255
7262
  vditor.wysiwyg.popover.innerHTML = "";
7256
7263
  genClose(tocElement, vditor);
7264
+ customWysiwygToolbar(vditor, "vditor-toc");
7257
7265
  setPopoverPosition(vditor, tocElement);
7258
7266
  return;
7259
7267
  }
@@ -7264,6 +7272,7 @@ var highlightToolbarWYSIWYG = function (vditor) {
7264
7272
  genUp(range, blockquoteElement, vditor);
7265
7273
  genDown(range, blockquoteElement, vditor);
7266
7274
  genClose(blockquoteElement, vditor);
7275
+ customWysiwygToolbar(vditor, "blockquote");
7267
7276
  setPopoverPosition(vditor, blockquoteElement);
7268
7277
  }
7269
7278
  // list item popover
@@ -7272,6 +7281,7 @@ var highlightToolbarWYSIWYG = function (vditor) {
7272
7281
  genUp(range, liElement, vditor);
7273
7282
  genDown(range, liElement, vditor);
7274
7283
  genClose(liElement, vditor);
7284
+ customWysiwygToolbar(vditor, "li");
7275
7285
  setPopoverPosition(vditor, liElement);
7276
7286
  }
7277
7287
  // table popover
@@ -7586,6 +7596,7 @@ var highlightToolbarWYSIWYG = function (vditor) {
7586
7596
  vditor.wysiwyg.popover.insertAdjacentElement("beforeend", inputWrap);
7587
7597
  vditor.wysiwyg.popover.insertAdjacentHTML("beforeend", " x ");
7588
7598
  vditor.wysiwyg.popover.insertAdjacentElement("beforeend", input2Wrap);
7599
+ customWysiwygToolbar(vditor, "table");
7589
7600
  setPopoverPosition(vditor, tableElement);
7590
7601
  }
7591
7602
  // link ref popover
@@ -7629,6 +7640,7 @@ var highlightToolbarWYSIWYG = function (vditor) {
7629
7640
  };
7630
7641
  genClose(footnotesRefElement, vditor);
7631
7642
  vditor.wysiwyg.popover.insertAdjacentElement("beforeend", inputWrap);
7643
+ customWysiwygToolbar(vditor, "footnotes-ref");
7632
7644
  setPopoverPosition(vditor, footnotesRefElement);
7633
7645
  }
7634
7646
  // block popover: math-inline, math-block, html-block, html-inline, code-block, html-entity
@@ -7721,6 +7733,10 @@ var highlightToolbarWYSIWYG = function (vditor) {
7721
7733
  event.preventDefault();
7722
7734
  };
7723
7735
  vditor.wysiwyg.popover.insertAdjacentElement("beforeend", languageWrap);
7736
+ customWysiwygToolbar(vditor, "code-block");
7737
+ }
7738
+ else {
7739
+ customWysiwygToolbar(vditor, "block");
7724
7740
  }
7725
7741
  setPopoverPosition(vditor, blockRenderElement);
7726
7742
  }
@@ -7759,6 +7775,7 @@ var highlightToolbarWYSIWYG = function (vditor) {
7759
7775
  genDown(range, headingElement, vditor);
7760
7776
  genClose(headingElement, vditor);
7761
7777
  vditor.wysiwyg.popover.insertAdjacentElement("beforeend", inputWrap);
7778
+ customWysiwygToolbar(vditor, "heading");
7762
7779
  setPopoverPosition(vditor, headingElement);
7763
7780
  }
7764
7781
  // a popover
@@ -7781,6 +7798,7 @@ var highlightToolbarWYSIWYG = function (vditor) {
7781
7798
  genUp(range, blockElement, vditor);
7782
7799
  genDown(range, blockElement, vditor);
7783
7800
  genClose(blockElement, vditor);
7801
+ customWysiwygToolbar(vditor, "block");
7784
7802
  setPopoverPosition(vditor, blockElement);
7785
7803
  }
7786
7804
  else {
@@ -7878,6 +7896,7 @@ var genLinkRefPopover = function (vditor, linkRefElement, range) {
7878
7896
  genClose(linkRefElement, vditor);
7879
7897
  vditor.wysiwyg.popover.insertAdjacentElement("beforeend", inputWrap);
7880
7898
  vditor.wysiwyg.popover.insertAdjacentElement("beforeend", input1Wrap);
7899
+ customWysiwygToolbar(vditor, "link-ref");
7881
7900
  setPopoverPosition(vditor, linkRefElement);
7882
7901
  };
7883
7902
  var genUp = function (range, element, vditor) {
@@ -8051,6 +8070,7 @@ var genAPopover = function (vditor, aElement, range) {
8051
8070
  vditor.wysiwyg.popover.insertAdjacentElement("beforeend", inputWrap);
8052
8071
  vditor.wysiwyg.popover.insertAdjacentElement("beforeend", input1Wrap);
8053
8072
  vditor.wysiwyg.popover.insertAdjacentElement("beforeend", input2Wrap);
8073
+ customWysiwygToolbar(vditor, "a");
8054
8074
  setPopoverPosition(vditor, aElement);
8055
8075
  };
8056
8076
  var genImagePopover = function (event, vditor) {
@@ -8111,6 +8131,7 @@ var genImagePopover = function (event, vditor) {
8111
8131
  vditor.wysiwyg.popover.insertAdjacentElement("beforeend", inputWrap);
8112
8132
  vditor.wysiwyg.popover.insertAdjacentElement("beforeend", altWrap);
8113
8133
  vditor.wysiwyg.popover.insertAdjacentElement("beforeend", titleWrap);
8134
+ customWysiwygToolbar(vditor, "image");
8114
8135
  setPopoverPosition(vditor, imgElement);
8115
8136
  };
8116
8137
  var focusToElement = function (event, range) {
@@ -8123,6 +8144,9 @@ var focusToElement = function (event, range) {
8123
8144
  return true;
8124
8145
  }
8125
8146
  };
8147
+ var customWysiwygToolbar = function (vditor, type) {
8148
+ vditor.options.customWysiwygToolbar(type, vditor.wysiwyg.popover);
8149
+ };
8126
8150
 
8127
8151
  ;// CONCATENATED MODULE: ./src/ts/util/highlightToolbar.ts
8128
8152
 
@@ -9488,6 +9512,7 @@ var uploadFiles = function (vditor, files, element) { return __awaiter(void 0, v
9488
9512
  formData.append(vditor.options.upload.fieldName, validateResult[i]);
9489
9513
  }
9490
9514
  xhr = new XMLHttpRequest();
9515
+ vditor.upload.xhr = xhr;
9491
9516
  xhr.open("POST", vditor.options.upload.url);
9492
9517
  if (vditor.options.upload.token) {
9493
9518
  xhr.setRequestHeader("X-Upload-Token", vditor.options.upload.token);
@@ -9526,6 +9551,7 @@ var uploadFiles = function (vditor, files, element) { return __awaiter(void 0, v
9526
9551
  element.value = "";
9527
9552
  }
9528
9553
  vditor.upload.element.style.display = "none";
9554
+ vditor.upload.xhr = undefined;
9529
9555
  }
9530
9556
  };
9531
9557
  xhr.upload.onprogress = function (event) {
@@ -9815,7 +9841,7 @@ var fixCJKPosition = function (range, vditor, event) {
9815
9841
  if (pLiElement && (0,selection/* getSelectPosition */.im)(pLiElement, vditor[vditor.currentMode].element, range).start === 0) {
9816
9842
  // https://github.com/Vanessa219/vditor/issues/1289 WKWebView切换输入法产生六分之一空格,造成光标错位
9817
9843
  if (pLiElement.nodeValue) {
9818
- pLiElement.nodeValue = pLiElement.nodeValue.replace(/\u2006/g, '');
9844
+ pLiElement.nodeValue = pLiElement.nodeValue.replace(/\u2006/g, "");
9819
9845
  }
9820
9846
  var zwspNode = document.createTextNode(constants/* Constants.ZWSP */.g.ZWSP);
9821
9847
  range.insertNode(zwspNode);
@@ -10799,7 +10825,7 @@ var fixBlockquote = function (vditor, range, event, pElement) {
10799
10825
  };
10800
10826
  var fixTask = function (vditor, range, event) {
10801
10827
  var startContainer = range.startContainer;
10802
- var taskItemElement = (0,hasClosest/* hasClosestByMatchTag */.lG)(startContainer, "li");
10828
+ var taskItemElement = (0,hasClosest/* hasClosestByMatchTag */.lG)(startContainer, "LI");
10803
10829
  if (taskItemElement && taskItemElement.classList.contains("vditor-task")) {
10804
10830
  if (matchHotKey("⇧⌘J", event)) {
10805
10831
  // ctrl + shift: toggle checked
@@ -11109,15 +11135,23 @@ var paste = function (vditor, event, callback) { return fixBrowserBehavior_await
11109
11135
  processCodeRender(codeElement.parentElement.nextElementSibling, vditor);
11110
11136
  }
11111
11137
  }
11112
- return [3 /*break*/, 8];
11138
+ return [3 /*break*/, 10];
11113
11139
  case 1:
11114
11140
  if (!code) return [3 /*break*/, 2];
11115
11141
  callback.pasteCode(code);
11116
- return [3 /*break*/, 8];
11142
+ return [3 /*break*/, 10];
11117
11143
  case 2:
11118
- if (!(textHTML.trim() !== "")) return [3 /*break*/, 3];
11144
+ if (!(textHTML.trim() !== "")) return [3 /*break*/, 5];
11119
11145
  tempElement = document.createElement("div");
11120
11146
  tempElement.innerHTML = textHTML;
11147
+ if (!!vditor.options.upload.base64ToLink) return [3 /*break*/, 4];
11148
+ // word 复制的图文混合,替换为 link: <v:imagedata src="file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image001.png" o:title="">
11149
+ return [4 /*yield*/, processVMLImage(vditor, tempElement, ("clipboardData" in event ? event.clipboardData : event.dataTransfer).getData("text/rtf"))];
11150
+ case 3:
11151
+ // word 复制的图文混合,替换为 link: <v:imagedata src="file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image001.png" o:title="">
11152
+ _b.sent();
11153
+ _b.label = 4;
11154
+ case 4:
11121
11155
  tempElement.querySelectorAll("[style]").forEach(function (e) {
11122
11156
  e.removeAttribute("style");
11123
11157
  });
@@ -11140,15 +11174,15 @@ var paste = function (vditor, event, callback) { return fixBrowserBehavior_await
11140
11174
  processPaste(vditor, vditor.lute.HTML2Md(tempElement.innerHTML).trimRight());
11141
11175
  }
11142
11176
  vditor.outline.render(vditor);
11143
- return [3 /*break*/, 8];
11144
- case 3:
11145
- if (!(files.length > 0)) return [3 /*break*/, 7];
11146
- if (!(vditor.options.upload.url || vditor.options.upload.handler)) return [3 /*break*/, 5];
11177
+ return [3 /*break*/, 10];
11178
+ case 5:
11179
+ if (!(files.length > 0)) return [3 /*break*/, 9];
11180
+ if (!(vditor.options.upload.url || vditor.options.upload.handler)) return [3 /*break*/, 7];
11147
11181
  return [4 /*yield*/, uploadFiles(vditor, files)];
11148
- case 4:
11182
+ case 6:
11149
11183
  _b.sent();
11150
- return [3 /*break*/, 6];
11151
- case 5:
11184
+ return [3 /*break*/, 8];
11185
+ case 7:
11152
11186
  fileReader_1 = new FileReader();
11153
11187
  if ("clipboardData" in event) {
11154
11188
  files = event.clipboardData.files;
@@ -11161,7 +11195,7 @@ var paste = function (vditor, event, callback) { return fixBrowserBehavior_await
11161
11195
  if (file_1 && file_1.type.startsWith("image")) {
11162
11196
  fileReader_1.readAsDataURL(file_1);
11163
11197
  fileReader_1.onload = function () {
11164
- var imgHTML = '';
11198
+ var imgHTML = "";
11165
11199
  if (vditor.currentMode === "wysiwyg") {
11166
11200
  imgHTML += "<img alt=\"".concat(file_1.name, "\" src=\"").concat(fileReader_1.result.toString(), "\">\n");
11167
11201
  }
@@ -11171,9 +11205,9 @@ var paste = function (vditor, event, callback) { return fixBrowserBehavior_await
11171
11205
  document.execCommand("insertHTML", false, imgHTML);
11172
11206
  };
11173
11207
  }
11174
- _b.label = 6;
11175
- case 6: return [3 /*break*/, 8];
11176
- case 7:
11208
+ _b.label = 8;
11209
+ case 8: return [3 /*break*/, 10];
11210
+ case 9:
11177
11211
  if (textPlain.trim() !== "" && files.length === 0) {
11178
11212
  range = (0,selection/* getEditorRange */.zh)(vditor);
11179
11213
  if (range.toString() !== "" && vditor.lute.IsValidLinkDest(textPlain)) {
@@ -11182,12 +11216,12 @@ var paste = function (vditor, event, callback) { return fixBrowserBehavior_await
11182
11216
  if (vditor.currentMode === "ir") {
11183
11217
  renderers.Md2VditorIRDOM = { renderLinkDest: renderLinkDest };
11184
11218
  vditor.lute.SetJSRenderers({ renderers: renderers });
11185
- (0,selection/* insertHTML */.oC)(vditor.lute.Md2VditorIRDOM(textPlain), vditor);
11219
+ (0,selection/* insertHTML */.oC)(Lute.Sanitize(vditor.lute.Md2VditorIRDOM(textPlain)), vditor);
11186
11220
  }
11187
11221
  else if (vditor.currentMode === "wysiwyg") {
11188
11222
  renderers.Md2VditorDOM = { renderLinkDest: renderLinkDest };
11189
11223
  vditor.lute.SetJSRenderers({ renderers: renderers });
11190
- (0,selection/* insertHTML */.oC)(vditor.lute.Md2VditorDOM(textPlain), vditor);
11224
+ (0,selection/* insertHTML */.oC)(Lute.Sanitize(vditor.lute.Md2VditorDOM(textPlain)), vditor);
11191
11225
  }
11192
11226
  else {
11193
11227
  renderers.Md2VditorSVDOM = { renderLinkDest: renderLinkDest };
@@ -11196,8 +11230,8 @@ var paste = function (vditor, event, callback) { return fixBrowserBehavior_await
11196
11230
  }
11197
11231
  vditor.outline.render(vditor);
11198
11232
  }
11199
- _b.label = 8;
11200
- case 8:
11233
+ _b.label = 10;
11234
+ case 10:
11201
11235
  if (vditor.currentMode !== "sv") {
11202
11236
  blockElement = (0,hasClosest/* hasClosestBlock */.F9)((0,selection/* getEditorRange */.zh)(vditor).startContainer);
11203
11237
  if (blockElement) {
@@ -11229,6 +11263,81 @@ var paste = function (vditor, event, callback) { return fixBrowserBehavior_await
11229
11263
  }
11230
11264
  });
11231
11265
  }); };
11266
+ var processVMLImage = function (vditor, root, rtfData) { return fixBrowserBehavior_awaiter(void 0, void 0, void 0, function () {
11267
+ var regexPictureHeader, regexPicture, regImages, images, _i, regImages_1, image, imageType, shapes, i, img, newSrc, imgs, i, src, _a;
11268
+ return fixBrowserBehavior_generator(this, function (_b) {
11269
+ switch (_b.label) {
11270
+ case 0:
11271
+ if (!rtfData) {
11272
+ return [2 /*return*/];
11273
+ }
11274
+ regexPictureHeader = /{\\pict[\s\S]+?\\bliptag-?\d+(\\blipupi-?\d+)?({\\\*\\blipuid\s?[\da-fA-F]+)?[\s}]*?/;
11275
+ regexPicture = new RegExp("(?:(" + regexPictureHeader.source + "))([\\da-fA-F\\s]+)\\}", "g");
11276
+ regImages = rtfData.match(regexPicture);
11277
+ images = [];
11278
+ if (regImages) {
11279
+ for (_i = 0, regImages_1 = regImages; _i < regImages_1.length; _i++) {
11280
+ image = regImages_1[_i];
11281
+ imageType = void 0;
11282
+ if (image.includes("\\pngblip")) {
11283
+ imageType = "image/png";
11284
+ }
11285
+ else if (image.includes("\\jpegblip")) {
11286
+ imageType = "image/jpeg";
11287
+ }
11288
+ if (imageType) {
11289
+ images.push({
11290
+ hex: image.replace(regexPictureHeader, "").replace(/[^\da-fA-F]/g, ""),
11291
+ type: imageType,
11292
+ });
11293
+ }
11294
+ }
11295
+ }
11296
+ shapes = [];
11297
+ walk(root, function (child) {
11298
+ if (child.tagName === "V:SHAPE") {
11299
+ walk(child, function (sub) {
11300
+ if (sub.tagName === "V:IMAGEDATA")
11301
+ shapes.push({ shape: child, img: sub });
11302
+ });
11303
+ return false;
11304
+ }
11305
+ });
11306
+ for (i = 0; i < shapes.length; i++) {
11307
+ img = document.createElement("img");
11308
+ newSrc = "data:" + images[i].type + ";base64," + btoa((images[i].hex.match(/\w{2}/g) || []).map(function (char) {
11309
+ return String.fromCharCode(parseInt(char, 16));
11310
+ }).join(""));
11311
+ img.src = newSrc;
11312
+ img.title = shapes[i].img.getAttribute("title");
11313
+ shapes[i].shape.parentNode.replaceChild(img, shapes[i].shape);
11314
+ }
11315
+ imgs = root.querySelectorAll("img");
11316
+ i = 0;
11317
+ _b.label = 1;
11318
+ case 1:
11319
+ if (!(i < imgs.length)) return [3 /*break*/, 4];
11320
+ src = imgs[i].src || "";
11321
+ if (!src) return [3 /*break*/, 3];
11322
+ _a = imgs[i];
11323
+ return [4 /*yield*/, vditor.options.upload.base64ToLink(src)];
11324
+ case 2:
11325
+ _a.src = _b.sent();
11326
+ _b.label = 3;
11327
+ case 3:
11328
+ i++;
11329
+ return [3 /*break*/, 1];
11330
+ case 4: return [2 /*return*/];
11331
+ }
11332
+ });
11333
+ }); };
11334
+ var walk = function (el, fn) {
11335
+ var goNext = fn(el);
11336
+ if (goNext !== false)
11337
+ for (var i = 0; i < el.children.length; i++) {
11338
+ walk(el.children[i], fn);
11339
+ }
11340
+ };
11232
11341
  var templateObject_1;
11233
11342
 
11234
11343
  ;// CONCATENATED MODULE: ./src/ts/ir/process.ts
@@ -15409,6 +15518,7 @@ var Vditor = /** @class */ (function (_super) {
15409
15518
  */
15410
15519
  function Vditor(id, options) {
15411
15520
  var _this = _super.call(this) || this;
15521
+ _this.isDestroyed = false;
15412
15522
  _this.version = constants/* VDITOR_VERSION */.H;
15413
15523
  if (typeof id === "string") {
15414
15524
  if (!options) {
@@ -15434,7 +15544,7 @@ var Vditor = /** @class */ (function (_super) {
15434
15544
  var mergedOptions = getOptions.merge();
15435
15545
  // 支持自定义国际化
15436
15546
  if (!mergedOptions.i18n) {
15437
- if (!["en_US", "fr_FR", "pt_BR", "ja_JP", "ko_KR", "ru_RU", "sv_SE", "zh_CN", "zh_TW"].includes(mergedOptions.lang)) {
15547
+ if (!["de_DE", "en_US", "es_ES", "fr_FR", "ja_JP", "ko_KR", "pt_BR", "ru_RU", "sv_SE", "vi_VN", "zh_CN", "zh_TW"].includes(mergedOptions.lang)) {
15438
15548
  throw new Error("options.lang error, see https://ld246.com/article/1549638745630#options");
15439
15549
  }
15440
15550
  else {
@@ -15706,6 +15816,7 @@ var Vditor = /** @class */ (function (_super) {
15706
15816
  UIUnbindListener();
15707
15817
  this.vditor.wysiwyg.unbindListener();
15708
15818
  this.vditor.options.after = undefined;
15819
+ this.isDestroyed = true;
15709
15820
  };
15710
15821
  /** 获取评论 ID */
15711
15822
  Vditor.prototype.getCommentIds = function () {
@@ -15809,6 +15920,9 @@ var Vditor = /** @class */ (function (_super) {
15809
15920
  };
15810
15921
  Vditor.prototype.init = function (id, mergedOptions) {
15811
15922
  var _this = this;
15923
+ if (this.isDestroyed) {
15924
+ return;
15925
+ }
15812
15926
  this.vditor = {
15813
15927
  currentMode: mergedOptions.mode,
15814
15928
  element: id,