vue-editify 0.0.46 → 0.0.47

Sign up to get free protection for your applications and to get access to all the features.
package/lib/editify.es.js CHANGED
@@ -3277,7 +3277,16 @@ class AlexEditor {
3277
3277
  this.__isInputChinese = false;
3278
3278
  this.__innerSelectionChange = false;
3279
3279
  this.__chineseInputTimer = null;
3280
- this.__dataCaches = {};
3280
+ this.__rangeElementsCache = {
3281
+ //includes和flat都是true
3282
+ all: [],
3283
+ //includes为true
3284
+ includes: [],
3285
+ //flat为true
3286
+ flat: [],
3287
+ //includes和flat都是false
3288
+ none: []
3289
+ };
3281
3290
  this.disabled ? this.setDisabled() : this.setEnabled();
3282
3291
  obj$1.event.on(document, `selectionchange.alex_editor_${this.__guid}`, handleSelectionChange.bind(this));
3283
3292
  obj$1.event.on(this.$el, "beforeinput.alex_editor", handleBeforeInput.bind(this));
@@ -4428,24 +4437,48 @@ class AlexEditor {
4428
4437
  /**
4429
4438
  * 获取选区之间的元素
4430
4439
  */
4431
- getElementsByRange(includes = false, flat = false) {
4440
+ getElementsByRange(includes = false, flat = false, useCache = false) {
4432
4441
  if (!this.range) {
4433
4442
  return [];
4434
4443
  }
4435
4444
  if (this.range.anchor.isEqual(this.range.focus)) {
4436
4445
  return [];
4437
4446
  }
4447
+ if (useCache) {
4448
+ if (includes && flat) {
4449
+ return this.__rangeElementsCache.all || [];
4450
+ }
4451
+ if (includes) {
4452
+ return this.__rangeElementsCache.includes || [];
4453
+ }
4454
+ if (flat) {
4455
+ return this.__rangeElementsCache.flat || [];
4456
+ }
4457
+ return this.__rangeElementsCache.none || [];
4458
+ }
4459
+ const setRangeElementsCache = (result2 = []) => {
4460
+ if (includes && flat) {
4461
+ this.__rangeElementsCache.all = result2;
4462
+ } else if (includes) {
4463
+ this.__rangeElementsCache.includes = result2;
4464
+ } else if (flat) {
4465
+ this.__rangeElementsCache.flat = result2;
4466
+ } else {
4467
+ this.__rangeElementsCache.none = result2;
4468
+ }
4469
+ return result2;
4470
+ };
4438
4471
  if (this.range.anchor.element.isEqual(this.range.focus.element)) {
4439
4472
  if (includes) {
4440
4473
  const isCover = this.range.anchor.offset == 0 && this.range.focus.offset == (this.range.anchor.element.isText() ? this.range.anchor.element.textContent.length : 1);
4441
- return [
4474
+ return setRangeElementsCache([
4442
4475
  {
4443
4476
  element: this.range.anchor.element,
4444
4477
  offset: isCover ? false : [this.range.anchor.offset, this.range.focus.offset]
4445
4478
  }
4446
- ];
4479
+ ]);
4447
4480
  }
4448
- return [];
4481
+ return setRangeElementsCache();
4449
4482
  }
4450
4483
  let result = [];
4451
4484
  if (includes) {
@@ -4520,7 +4553,7 @@ class AlexEditor {
4520
4553
  }
4521
4554
  }
4522
4555
  if (flat) {
4523
- return newResult;
4556
+ return setRangeElementsCache(newResult);
4524
4557
  }
4525
4558
  let notFlatResult = [];
4526
4559
  const length = newResult.length;
@@ -4534,16 +4567,16 @@ class AlexEditor {
4534
4567
  }
4535
4568
  }
4536
4569
  }
4537
- return notFlatResult;
4570
+ return setRangeElementsCache(notFlatResult);
4538
4571
  }
4539
4572
  /**
4540
4573
  * 分割选区选中的元素,会更新光标位置
4541
4574
  */
4542
- splitElementsByRange(includes = false, flat = false) {
4575
+ splitElementsByRange(includes = false, flat = false, useCache = false) {
4543
4576
  if (!this.range) {
4544
4577
  return [];
4545
4578
  }
4546
- const result = this.getElementsByRange(includes, flat);
4579
+ const result = this.getElementsByRange(includes, flat, useCache);
4547
4580
  let elements = [];
4548
4581
  result.forEach((item, index) => {
4549
4582
  if (item.offset) {
@@ -4733,7 +4766,7 @@ class AlexEditor {
4733
4766
  /**
4734
4767
  * 设置文本元素的样式
4735
4768
  */
4736
- setTextStyle(styles) {
4769
+ setTextStyle(styles, useCache = false) {
4737
4770
  if (this.disabled) {
4738
4771
  return;
4739
4772
  }
@@ -4766,7 +4799,7 @@ class AlexEditor {
4766
4799
  this.insertElement(el);
4767
4800
  }
4768
4801
  } else {
4769
- const elements = this.splitElementsByRange(true, true);
4802
+ const elements = this.splitElementsByRange(true, true, useCache);
4770
4803
  elements.forEach((ele) => {
4771
4804
  if (ele.isText()) {
4772
4805
  if (ele.hasStyles()) {
@@ -4781,7 +4814,7 @@ class AlexEditor {
4781
4814
  /**
4782
4815
  * 移除文本元素的样式
4783
4816
  */
4784
- removeTextStyle(styleNames) {
4817
+ removeTextStyle(styleNames, useCache = false) {
4785
4818
  if (this.disabled) {
4786
4819
  return;
4787
4820
  }
@@ -4814,7 +4847,7 @@ class AlexEditor {
4814
4847
  this.insertElement(el);
4815
4848
  }
4816
4849
  } else {
4817
- const elements = this.splitElementsByRange(true, true);
4850
+ const elements = this.splitElementsByRange(true, true, useCache);
4818
4851
  elements.forEach((ele) => {
4819
4852
  if (ele.isText()) {
4820
4853
  removeFn(ele);
@@ -4838,17 +4871,9 @@ class AlexEditor {
4838
4871
  }
4839
4872
  return false;
4840
4873
  }
4841
- let result = null;
4842
- if (useCache) {
4843
- result = this.__dataCaches["queryTextStyle"] || [];
4844
- } else {
4845
- result = this.getElementsByRange(true, true).filter((item) => {
4846
- return item.element.isText();
4847
- });
4848
- }
4849
- if (!useCache) {
4850
- this.__dataCaches["queryTextStyle"] = result;
4851
- }
4874
+ let result = this.getElementsByRange(true, true, useCache).filter((item) => {
4875
+ return item.element.isText();
4876
+ });
4852
4877
  if (result.length == 0) {
4853
4878
  return false;
4854
4879
  }
@@ -4863,7 +4888,7 @@ class AlexEditor {
4863
4888
  /**
4864
4889
  * 设置文本元素的标记
4865
4890
  */
4866
- setTextMark(marks) {
4891
+ setTextMark(marks, useCache = false) {
4867
4892
  if (this.disabled) {
4868
4893
  return;
4869
4894
  }
@@ -4896,7 +4921,7 @@ class AlexEditor {
4896
4921
  this.insertElement(el);
4897
4922
  }
4898
4923
  } else {
4899
- const elements = this.splitElementsByRange(true, true);
4924
+ const elements = this.splitElementsByRange(true, true, useCache);
4900
4925
  elements.forEach((ele) => {
4901
4926
  if (ele.isText()) {
4902
4927
  if (ele.hasMarks()) {
@@ -4911,7 +4936,7 @@ class AlexEditor {
4911
4936
  /**
4912
4937
  * 移除文本元素的标记
4913
4938
  */
4914
- removeTextMark(markNames) {
4939
+ removeTextMark(markNames, useCache = false) {
4915
4940
  if (this.disabled) {
4916
4941
  return;
4917
4942
  }
@@ -4944,7 +4969,7 @@ class AlexEditor {
4944
4969
  this.insertElement(el);
4945
4970
  }
4946
4971
  } else {
4947
- const elements = this.splitElementsByRange(true, true);
4972
+ const elements = this.splitElementsByRange(true, true, useCache);
4948
4973
  elements.forEach((ele) => {
4949
4974
  if (ele.isText()) {
4950
4975
  removeFn(ele);
@@ -4968,17 +4993,9 @@ class AlexEditor {
4968
4993
  }
4969
4994
  return false;
4970
4995
  }
4971
- let result = null;
4972
- if (useCache) {
4973
- result = this.__dataCaches["queryTextMark"] || [];
4974
- } else {
4975
- result = this.getElementsByRange(true, true).filter((item) => {
4976
- return item.element.isText();
4977
- });
4978
- }
4979
- if (!useCache) {
4980
- this.__dataCaches["queryTextMark"] = result;
4981
- }
4996
+ let result = this.getElementsByRange(true, true, useCache).filter((item) => {
4997
+ return item.element.isText();
4998
+ });
4982
4999
  if (result.length == 0) {
4983
5000
  return false;
4984
5001
  }
@@ -17869,7 +17886,7 @@ function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {
17869
17886
  ]);
17870
17887
  }
17871
17888
  const Colors = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["render", _sfc_render$7], ["__scopeId", "data-v-dc6d3d68"]]);
17872
- const Toolbar_vue_vue_type_style_index_0_scoped_43553c16_lang = "";
17889
+ const Toolbar_vue_vue_type_style_index_0_scoped_38c4144f_lang = "";
17873
17890
  const _sfc_main$6 = {
17874
17891
  name: "Toolbar",
17875
17892
  emits: ["update:modelValue"],
@@ -18234,7 +18251,7 @@ const _sfc_main$6 = {
18234
18251
  if (this.$parent.disabled) {
18235
18252
  return;
18236
18253
  }
18237
- const element2 = this.$parent.getCurrentParsedomElement("img") || this.$parent.getCurrentParsedomElement("video");
18254
+ const element2 = this.$parent.getCurrentParsedomElement("img") || this.$parent.getCurrentParsedomElement("video", true);
18238
18255
  if (element2) {
18239
18256
  const styles = {
18240
18257
  width: value
@@ -18339,8 +18356,8 @@ const _sfc_main$6 = {
18339
18356
  this.$parent.editor.range.anchor.offset = this.$parent.editor.range.focus.offset;
18340
18357
  }
18341
18358
  const table = this.$parent.getCurrentParsedomElement("table");
18342
- const column = this.$parent.getCurrentParsedomElement("td");
18343
- const tbody = this.$parent.getCurrentParsedomElement("tbody");
18359
+ const column = this.$parent.getCurrentParsedomElement("td", true);
18360
+ const tbody = this.$parent.getCurrentParsedomElement("tbody", true);
18344
18361
  if (column && table && tbody) {
18345
18362
  const rows = tbody.children;
18346
18363
  const index = column.parent.children.findIndex((item) => {
@@ -18389,7 +18406,7 @@ const _sfc_main$6 = {
18389
18406
  this.$parent.editor.range.anchor.offset = this.$parent.editor.range.focus.offset;
18390
18407
  }
18391
18408
  const table = this.$parent.getCurrentParsedomElement("table");
18392
- const row = this.$parent.getCurrentParsedomElement("tr");
18409
+ const row = this.$parent.getCurrentParsedomElement("tr", true);
18393
18410
  if (table && row) {
18394
18411
  const newRow = row.clone();
18395
18412
  newRow.children.forEach((column) => {
@@ -18444,7 +18461,7 @@ const _sfc_main$6 = {
18444
18461
  this.$parent.editor.range.anchor.offset = this.$parent.editor.range.focus.offset;
18445
18462
  }
18446
18463
  const table = this.$parent.getCurrentParsedomElement("table");
18447
- const row = this.$parent.getCurrentParsedomElement("tr");
18464
+ const row = this.$parent.getCurrentParsedomElement("tr", true);
18448
18465
  if (table && row) {
18449
18466
  const parent = row.parent;
18450
18467
  if (parent.children.length == 1) {
@@ -18479,13 +18496,13 @@ const _sfc_main$6 = {
18479
18496
  this.$parent.editor.range.anchor.offset = this.$parent.editor.range.focus.offset;
18480
18497
  }
18481
18498
  const column = this.$parent.getCurrentParsedomElement("td");
18482
- const tbody = this.$parent.getCurrentParsedomElement("tbody");
18483
- const table = this.$parent.getCurrentParsedomElement("table");
18499
+ const tbody = this.$parent.getCurrentParsedomElement("tbody", true);
18500
+ const table = this.$parent.getCurrentParsedomElement("table", true);
18484
18501
  if (column && table && tbody) {
18485
18502
  const rows = tbody.children;
18486
18503
  const parent = column.parent;
18487
18504
  if (parent.children.length == 1) {
18488
- this.$parent.deleteByParsedom("table");
18505
+ this.$parent.deleteByParsedom("table", true);
18489
18506
  return;
18490
18507
  }
18491
18508
  const previousColumn = this.$parent.editor.getPreviousElement(column);
@@ -18514,19 +18531,20 @@ const _sfc_main$6 = {
18514
18531
  },
18515
18532
  //浮层显示时
18516
18533
  layerShow() {
18534
+ const result = this.$parent.editor.getElementsByRange(true, false, true);
18517
18535
  if (this.type == "codeBlock") {
18518
- const pre = this.$parent.getCurrentParsedomElement("pre");
18536
+ const pre = this.$parent.getCurrentParsedomElement("pre", true);
18519
18537
  if (pre) {
18520
18538
  this.languageConfig.displayConfig.value = pre.marks["data-editify-hljs"] || "";
18521
18539
  }
18522
18540
  } else if (this.type == "link") {
18523
- const link = this.$parent.getCurrentParsedomElement("a");
18541
+ const link = this.$parent.getCurrentParsedomElement("a", true);
18524
18542
  if (link) {
18525
18543
  this.linkConfig.url = link.marks["href"];
18526
18544
  this.linkConfig.newOpen = link.marks["target"] == "_blank";
18527
18545
  }
18528
18546
  } else if (this.type == "video") {
18529
- const video = this.$parent.getCurrentParsedomElement("video");
18547
+ const video = this.$parent.getCurrentParsedomElement("video", true);
18530
18548
  if (video) {
18531
18549
  this.videoConfig.autoplay = !!video.marks["autoplay"];
18532
18550
  this.videoConfig.loop = !!video.marks["loop"];
@@ -18540,7 +18558,6 @@ const _sfc_main$6 = {
18540
18558
  }
18541
18559
  return false;
18542
18560
  };
18543
- const result = this.$parent.editor.getElementsByRange(true, false);
18544
18561
  const findHeadingItem = this.headingConfig.displayConfig.options.find((item) => {
18545
18562
  let val = item;
18546
18563
  if (obj.common.isObject(item)) {
@@ -18556,13 +18573,13 @@ const _sfc_main$6 = {
18556
18573
  this.headingConfig.displayConfig.value = findHeadingItem ? obj.common.isObject(findHeadingItem) ? findHeadingItem.value : findHeadingItem : this.headingConfig.defaultValue;
18557
18574
  this.headingConfig.disabled = extraDisabled("heading");
18558
18575
  this.alignConfig.disabled = extraDisabled("align");
18559
- this.orderListConfig.active = this.$parent.inList(true);
18576
+ this.orderListConfig.active = this.$parent.inList(true, true);
18560
18577
  this.orderListConfig.disabled = extraDisabled("orderList");
18561
- this.unorderListConfig.active = this.$parent.inList(false);
18578
+ this.unorderListConfig.active = this.$parent.inList(false, true);
18562
18579
  this.unorderListConfig.disabled = extraDisabled("unorderList");
18563
- this.taskConfig.active = this.$parent.inTask();
18580
+ this.taskConfig.active = this.$parent.inTask(true, true);
18564
18581
  this.taskConfig.disabled = extraDisabled("task");
18565
- this.boldConfig.active = this.$parent.queryTextStyle("font-weight", "bold");
18582
+ this.boldConfig.active = this.$parent.queryTextStyle("font-weight", "bold", true);
18566
18583
  this.boldConfig.disabled = extraDisabled("bold");
18567
18584
  this.italicConfig.active = this.$parent.queryTextStyle("font-style", "italic", true);
18568
18585
  this.italicConfig.disabled = extraDisabled("italic");
@@ -18570,7 +18587,7 @@ const _sfc_main$6 = {
18570
18587
  this.strikethroughConfig.disabled = extraDisabled("strikethrough");
18571
18588
  this.underlineConfig.active = this.$parent.queryTextStyle("text-decoration", "underline", true);
18572
18589
  this.underlineConfig.disabled = extraDisabled("underline");
18573
- this.codeConfig.active = this.$parent.queryTextMark("data-editify-code");
18590
+ this.codeConfig.active = this.$parent.queryTextMark("data-editify-code", null, true);
18574
18591
  this.codeConfig.disabled = extraDisabled("code");
18575
18592
  this.superConfig.active = this.$parent.queryTextStyle("vertical-align", "super", true);
18576
18593
  this.superConfig.disabled = extraDisabled("super");
@@ -19364,7 +19381,7 @@ function _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) {
19364
19381
  _: 1
19365
19382
  }, 8, ["modelValue", "node", "onShow", "useRange"]);
19366
19383
  }
19367
- const Toolbar = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["render", _sfc_render$6], ["__scopeId", "data-v-43553c16"]]);
19384
+ const Toolbar = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["render", _sfc_render$6], ["__scopeId", "data-v-38c4144f"]]);
19368
19385
  const InsertLink_vue_vue_type_style_index_0_scoped_e6c3c2ee_lang = "";
19369
19386
  const _sfc_main$5 = {
19370
19387
  name: "InsertLink",
@@ -20012,7 +20029,7 @@ function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {
20012
20029
  ]);
20013
20030
  }
20014
20031
  const InsertTable = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["render", _sfc_render$2], ["__scopeId", "data-v-227ede65"]]);
20015
- const Menu_vue_vue_type_style_index_0_scoped_85cbaf03_lang = "";
20032
+ const Menu_vue_vue_type_style_index_0_scoped_afb2092e_lang = "";
20016
20033
  const _sfc_main$1 = {
20017
20034
  name: "Menu",
20018
20035
  props: {
@@ -21090,15 +21107,15 @@ const _sfc_main$1 = {
21090
21107
  if (this.disabled) {
21091
21108
  return;
21092
21109
  }
21093
- const result = this.$parent.editor.getElementsByRange(true, false);
21094
- const hasPreStyle = this.$parent.hasPreStyle();
21095
- const hasTable = this.$parent.hasTable();
21096
- const hasQuote = this.$parent.hasQuote();
21097
- const inQuote = this.$parent.inQuote();
21098
- const hasLink = this.$parent.hasLink();
21099
- const inOrderList = this.$parent.inList(true);
21100
- const inUnorderList = this.$parent.inList(false);
21101
- const inTask = this.$parent.inTask();
21110
+ const result = this.$parent.editor.getElementsByRange(true, false, true);
21111
+ const hasPreStyle = this.$parent.hasPreStyle(true);
21112
+ const hasTable = this.$parent.hasTable(true);
21113
+ const hasQuote = this.$parent.hasQuote(true);
21114
+ const inQuote = this.$parent.inQuote(true);
21115
+ const hasLink = this.$parent.hasLink(true);
21116
+ const inOrderList = this.$parent.inList(true, true);
21117
+ const inUnorderList = this.$parent.inList(false, true);
21118
+ const inTask = this.$parent.inTask(true);
21102
21119
  const extraDisabled = (name) => {
21103
21120
  if (typeof this.config.extraDisabled == "function") {
21104
21121
  return this.config.extraDisabled.apply(this.$parent, [name]) || false;
@@ -21134,7 +21151,7 @@ const _sfc_main$1 = {
21134
21151
  this.unorderListConfig.disabled = hasPreStyle || hasTable || extraDisabled("unorderList");
21135
21152
  this.taskConfig.active = inTask;
21136
21153
  this.taskConfig.disabled = hasPreStyle || hasTable || extraDisabled("task");
21137
- this.boldConfig.active = this.$parent.queryTextStyle("font-weight", "bold");
21154
+ this.boldConfig.active = this.$parent.queryTextStyle("font-weight", "bold", true);
21138
21155
  this.boldConfig.disabled = hasPreStyle || extraDisabled("bold");
21139
21156
  this.underlineConfig.active = this.$parent.queryTextStyle("text-decoration", "underline", true);
21140
21157
  this.underlineConfig.disabled = hasPreStyle || extraDisabled("underline");
@@ -21142,7 +21159,7 @@ const _sfc_main$1 = {
21142
21159
  this.italicConfig.disabled = hasPreStyle || extraDisabled("italic");
21143
21160
  this.strikethroughConfig.active = this.$parent.queryTextStyle("text-decoration", "line-through", true);
21144
21161
  this.strikethroughConfig.disabled = hasPreStyle || extraDisabled("strikethrough");
21145
- this.codeConfig.active = this.$parent.queryTextMark("data-editify-code");
21162
+ this.codeConfig.active = this.$parent.queryTextMark("data-editify-code", null, true);
21146
21163
  this.codeConfig.disabled = hasPreStyle || extraDisabled("code");
21147
21164
  this.superConfig.active = this.$parent.queryTextStyle("vertical-align", "super", true);
21148
21165
  this.superConfig.disabled = hasPreStyle || extraDisabled("super");
@@ -21208,7 +21225,7 @@ const _sfc_main$1 = {
21208
21225
  this.imageConfig.disabled = hasPreStyle || extraDisabled("image");
21209
21226
  this.videoConfig.disabled = hasPreStyle || extraDisabled("video");
21210
21227
  this.tableConfig.disabled = hasPreStyle || hasTable || hasQuote || extraDisabled("table");
21211
- this.codeBlockConfig.active = !!this.$parent.getCurrentParsedomElement("pre");
21228
+ this.codeBlockConfig.active = !!this.$parent.getCurrentParsedomElement("pre", true);
21212
21229
  this.codeBlockConfig.disabled = hasTable || hasQuote || extraDisabled("codeBlock");
21213
21230
  this.sourceViewConfig.active = this.$parent.isSourceView;
21214
21231
  }
@@ -21230,8 +21247,8 @@ function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {
21230
21247
  }), 256))
21231
21248
  ], 14, _hoisted_1$1);
21232
21249
  }
21233
- const Menu = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["render", _sfc_render$1], ["__scopeId", "data-v-85cbaf03"]]);
21234
- const Editify_vue_vue_type_style_index_0_scoped_31c1a2aa_lang = "";
21250
+ const Menu = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["render", _sfc_render$1], ["__scopeId", "data-v-afb2092e"]]);
21251
+ const Editify_vue_vue_type_style_index_0_scoped_b523f8ea_lang = "";
21235
21252
  const _sfc_main = {
21236
21253
  name: "editify",
21237
21254
  props: { ...editorProps },
@@ -21268,8 +21285,8 @@ const _sfc_main = {
21268
21285
  //类型
21269
21286
  type: "text"
21270
21287
  },
21271
- //toolbar显示延时器
21272
- toolbarTime: null,
21288
+ //rangeUpdate更新延时器
21289
+ updateTimer: null,
21273
21290
  //菜单栏是否可以使用标识
21274
21291
  canUseMenu: false
21275
21292
  };
@@ -21434,72 +21451,67 @@ const _sfc_main = {
21434
21451
  if (this.disabled || this.isSourceView) {
21435
21452
  return;
21436
21453
  }
21437
- if (this.toolbarTime) {
21438
- clearTimeout(this.toolbarTime);
21439
- }
21440
- this.toolbarTime = setTimeout(() => {
21441
- this.hideToolbar();
21442
- this.$nextTick(() => {
21443
- const table = this.getCurrentParsedomElement("table");
21444
- const pre = this.getCurrentParsedomElement("pre");
21445
- const link = this.getCurrentParsedomElement("a");
21446
- const image = this.getCurrentParsedomElement("img");
21447
- const video = this.getCurrentParsedomElement("video");
21448
- if (link) {
21449
- this.toolbarOptions.type = "link";
21450
- this.toolbarOptions.node = `[data-editify-uid="${this.uid}"] [data-editify-element="${link.key}"]`;
21451
- if (this.toolbarOptions.show) {
21452
- this.$refs.toolbar.$refs.layer.setPosition();
21453
- } else {
21454
- this.toolbarOptions.show = true;
21455
- }
21456
- } else if (image) {
21457
- this.toolbarOptions.type = "image";
21458
- this.toolbarOptions.node = `[data-editify-uid="${this.uid}"] [data-editify-element="${image.key}"]`;
21459
- if (this.toolbarOptions.show) {
21460
- this.$refs.toolbar.$refs.layer.setPosition();
21461
- } else {
21462
- this.toolbarOptions.show = true;
21463
- }
21464
- } else if (video) {
21465
- this.toolbarOptions.type = "video";
21466
- this.toolbarOptions.node = `[data-editify-uid="${this.uid}"] [data-editify-element="${video.key}"]`;
21467
- if (this.toolbarOptions.show) {
21468
- this.$refs.toolbar.$refs.layer.setPosition();
21469
- } else {
21470
- this.toolbarOptions.show = true;
21471
- }
21472
- } else if (table) {
21473
- this.toolbarOptions.type = "table";
21474
- this.toolbarOptions.node = `[data-editify-uid="${this.uid}"] [data-editify-element="${table.key}"]`;
21475
- if (this.toolbarOptions.show) {
21476
- this.$refs.toolbar.$refs.layer.setPosition();
21477
- } else {
21478
- this.toolbarOptions.show = true;
21479
- }
21480
- } else if (pre) {
21481
- this.toolbarOptions.type = "codeBlock";
21482
- this.toolbarOptions.node = `[data-editify-uid="${this.uid}"] [data-editify-element="${pre.key}"]`;
21454
+ this.hideToolbar();
21455
+ this.$nextTick(() => {
21456
+ const table = this.getCurrentParsedomElement("table", true);
21457
+ const pre = this.getCurrentParsedomElement("pre", true);
21458
+ const link = this.getCurrentParsedomElement("a", true);
21459
+ const image = this.getCurrentParsedomElement("img", true);
21460
+ const video = this.getCurrentParsedomElement("video", true);
21461
+ if (link) {
21462
+ this.toolbarOptions.type = "link";
21463
+ this.toolbarOptions.node = `[data-editify-uid="${this.uid}"] [data-editify-element="${link.key}"]`;
21464
+ if (this.toolbarOptions.show) {
21465
+ this.$refs.toolbar.$refs.layer.setPosition();
21466
+ } else {
21467
+ this.toolbarOptions.show = true;
21468
+ }
21469
+ } else if (image) {
21470
+ this.toolbarOptions.type = "image";
21471
+ this.toolbarOptions.node = `[data-editify-uid="${this.uid}"] [data-editify-element="${image.key}"]`;
21472
+ if (this.toolbarOptions.show) {
21473
+ this.$refs.toolbar.$refs.layer.setPosition();
21474
+ } else {
21475
+ this.toolbarOptions.show = true;
21476
+ }
21477
+ } else if (video) {
21478
+ this.toolbarOptions.type = "video";
21479
+ this.toolbarOptions.node = `[data-editify-uid="${this.uid}"] [data-editify-element="${video.key}"]`;
21480
+ if (this.toolbarOptions.show) {
21481
+ this.$refs.toolbar.$refs.layer.setPosition();
21482
+ } else {
21483
+ this.toolbarOptions.show = true;
21484
+ }
21485
+ } else if (table) {
21486
+ this.toolbarOptions.type = "table";
21487
+ this.toolbarOptions.node = `[data-editify-uid="${this.uid}"] [data-editify-element="${table.key}"]`;
21488
+ if (this.toolbarOptions.show) {
21489
+ this.$refs.toolbar.$refs.layer.setPosition();
21490
+ } else {
21491
+ this.toolbarOptions.show = true;
21492
+ }
21493
+ } else if (pre) {
21494
+ this.toolbarOptions.type = "codeBlock";
21495
+ this.toolbarOptions.node = `[data-editify-uid="${this.uid}"] [data-editify-element="${pre.key}"]`;
21496
+ if (this.toolbarOptions.show) {
21497
+ this.$refs.toolbar.$refs.layer.setPosition();
21498
+ } else {
21499
+ this.toolbarOptions.show = true;
21500
+ }
21501
+ } else {
21502
+ const result = this.editor.getElementsByRange(true, true, true).filter((item) => {
21503
+ return item.element.isText();
21504
+ });
21505
+ if (result.length && !this.hasTable(true) && !this.hasPreStyle(true) && !this.hasLink(true) && !this.hasImage(true) && !this.hasVideo(true)) {
21506
+ this.toolbarOptions.type = "text";
21483
21507
  if (this.toolbarOptions.show) {
21484
21508
  this.$refs.toolbar.$refs.layer.setPosition();
21485
21509
  } else {
21486
21510
  this.toolbarOptions.show = true;
21487
21511
  }
21488
- } else {
21489
- const result = this.editor.getElementsByRange(true, true).filter((item) => {
21490
- return item.element.isText();
21491
- });
21492
- if (result.length && !this.hasTable() && !this.hasPreStyle() && !this.hasLink() && !this.hasImage() && !this.hasVideo()) {
21493
- this.toolbarOptions.type = "text";
21494
- if (this.toolbarOptions.show) {
21495
- this.$refs.toolbar.$refs.layer.setPosition();
21496
- } else {
21497
- this.toolbarOptions.show = true;
21498
- }
21499
- }
21500
21512
  }
21501
- });
21502
- }, 200);
21513
+ }
21514
+ });
21503
21515
  },
21504
21516
  //重新定义编辑器合并元素的逻辑
21505
21517
  handleCustomMerge(ele, preEle) {
@@ -21745,12 +21757,21 @@ const _sfc_main = {
21745
21757
  if (this.disabled) {
21746
21758
  return;
21747
21759
  }
21748
- if (this.toolbarConfig.use) {
21749
- this.handleToolbar();
21750
- }
21751
- if (this.menuConfig.use) {
21752
- this.$refs.menu.handleRangeUpdate();
21760
+ if (this.updateTimer) {
21761
+ clearTimeout(this.updateTimer);
21753
21762
  }
21763
+ this.updateTimer = setTimeout(() => {
21764
+ if (this.toolbarConfig.use || this.menuConfig.use) {
21765
+ this.editor.getElementsByRange(true, false);
21766
+ this.editor.getElementsByRange(true, true);
21767
+ }
21768
+ if (this.toolbarConfig.use) {
21769
+ this.handleToolbar();
21770
+ }
21771
+ if (this.menuConfig.use) {
21772
+ this.$refs.menu.handleRangeUpdate();
21773
+ }
21774
+ }, 200);
21754
21775
  this.$emit("rangeupdate", this.value, range);
21755
21776
  },
21756
21777
  //编辑器复制
@@ -21866,7 +21887,7 @@ const _sfc_main = {
21866
21887
  return this.getParsedomElementByElement(element2.parent, parsedom);
21867
21888
  },
21868
21889
  //api:获取光标是否在指定标签元素下,如果是返回该标签元素,否则返回null
21869
- getCurrentParsedomElement(parsedom) {
21890
+ getCurrentParsedomElement(parsedom, useCache = false) {
21870
21891
  if (this.disabled) {
21871
21892
  return null;
21872
21893
  }
@@ -21876,7 +21897,7 @@ const _sfc_main = {
21876
21897
  if (this.editor.range.anchor.element.isEqual(this.editor.range.focus.element)) {
21877
21898
  return this.getParsedomElementByElement(this.editor.range.anchor.element, parsedom);
21878
21899
  }
21879
- const arr = this.editor.getElementsByRange(true, false).map((item) => {
21900
+ const arr = this.editor.getElementsByRange(true, false, useCache).map((item) => {
21880
21901
  return this.getParsedomElementByElement(item.element, parsedom);
21881
21902
  });
21882
21903
  let hasNull = arr.some((el) => {
@@ -21901,14 +21922,14 @@ const _sfc_main = {
21901
21922
  return null;
21902
21923
  },
21903
21924
  //api:删除光标所在的指定标签元素
21904
- deleteByParsedom(parsedom, isRender = true) {
21925
+ deleteByParsedom(parsedom, isRender = true, useCache = false) {
21905
21926
  if (this.disabled) {
21906
21927
  return;
21907
21928
  }
21908
21929
  if (!this.editor.range) {
21909
21930
  return;
21910
21931
  }
21911
- const element2 = this.getCurrentParsedomElement(parsedom);
21932
+ const element2 = this.getCurrentParsedomElement(parsedom, useCache);
21912
21933
  if (element2) {
21913
21934
  element2.toEmpty();
21914
21935
  if (isRender) {
@@ -21919,14 +21940,14 @@ const _sfc_main = {
21919
21940
  }
21920
21941
  },
21921
21942
  //api:当光标在链接上时可以移除链接
21922
- removeLink(isRender = true) {
21943
+ removeLink(isRender = true, useCache = false) {
21923
21944
  if (this.disabled) {
21924
21945
  return;
21925
21946
  }
21926
21947
  if (!this.editor.range) {
21927
21948
  return;
21928
21949
  }
21929
- const link = this.getCurrentParsedomElement("a");
21950
+ const link = this.getCurrentParsedomElement("a", useCache);
21930
21951
  if (link) {
21931
21952
  link.parsedom = AlexElement.TEXT_NODE;
21932
21953
  delete link.marks.target;
@@ -21939,7 +21960,7 @@ const _sfc_main = {
21939
21960
  }
21940
21961
  },
21941
21962
  //api:设置标题
21942
- setHeading(parsedom, isRender = true) {
21963
+ setHeading(parsedom, isRender = true, useCache = false) {
21943
21964
  if (this.disabled) {
21944
21965
  return;
21945
21966
  }
@@ -21957,7 +21978,7 @@ const _sfc_main = {
21957
21978
  blockToParagraph(block);
21958
21979
  block.parsedom = parsedom;
21959
21980
  } else {
21960
- const result = this.editor.getElementsByRange(true, false);
21981
+ const result = this.editor.getElementsByRange(true, false, useCache);
21961
21982
  result.forEach((el) => {
21962
21983
  if (el.element.isBlock()) {
21963
21984
  blockToParagraph(el.element);
@@ -21976,7 +21997,7 @@ const _sfc_main = {
21976
21997
  }
21977
21998
  },
21978
21999
  //api:插入有序列表 ordered为true表示有序列表
21979
- setList(ordered, isRender = true) {
22000
+ setList(ordered, isRender = true, useCache = false) {
21980
22001
  if (this.disabled) {
21981
22002
  return;
21982
22003
  }
@@ -21993,7 +22014,7 @@ const _sfc_main = {
21993
22014
  }
21994
22015
  } else {
21995
22016
  let blocks = [];
21996
- const result = this.editor.getElementsByRange(true, false);
22017
+ const result = this.editor.getElementsByRange(true, false, useCache);
21997
22018
  result.forEach((item) => {
21998
22019
  const block = item.element.getBlock();
21999
22020
  const exist = blocks.some((el) => block.isEqual(el));
@@ -22017,7 +22038,7 @@ const _sfc_main = {
22017
22038
  }
22018
22039
  },
22019
22040
  //api:插入任务列表
22020
- setTask(isRender = true) {
22041
+ setTask(isRender = true, useCache = false) {
22021
22042
  if (this.disabled) {
22022
22043
  return;
22023
22044
  }
@@ -22034,7 +22055,7 @@ const _sfc_main = {
22034
22055
  }
22035
22056
  } else {
22036
22057
  let blocks = [];
22037
- const result = this.editor.getElementsByRange(true, false);
22058
+ const result = this.editor.getElementsByRange(true, false, useCache);
22038
22059
  result.forEach((item) => {
22039
22060
  const block = item.element.getBlock();
22040
22061
  const exist = blocks.some((el) => block.isEqual(el));
@@ -22058,20 +22079,20 @@ const _sfc_main = {
22058
22079
  }
22059
22080
  },
22060
22081
  //api:设置样式
22061
- setTextStyle(name, value, isRender = true) {
22082
+ setTextStyle(name, value, isRender = true, useCache = false) {
22062
22083
  if (this.disabled) {
22063
22084
  return;
22064
22085
  }
22065
22086
  if (!this.editor.range) {
22066
22087
  return;
22067
22088
  }
22068
- const active = this.queryTextStyle(name, value);
22089
+ const active = this.queryTextStyle(name, value, useCache);
22069
22090
  if (active) {
22070
- this.editor.removeTextStyle([name]);
22091
+ this.editor.removeTextStyle([name], useCache);
22071
22092
  } else {
22072
22093
  let styles = {};
22073
22094
  styles[name] = value;
22074
- this.editor.setTextStyle(styles);
22095
+ this.editor.setTextStyle(styles, useCache);
22075
22096
  }
22076
22097
  if (isRender) {
22077
22098
  this.editor.formatElementStack();
@@ -22080,24 +22101,24 @@ const _sfc_main = {
22080
22101
  }
22081
22102
  },
22082
22103
  //api:查询是否具有某个样式
22083
- queryTextStyle(name, value, useCache) {
22104
+ queryTextStyle(name, value, useCache = false) {
22084
22105
  return this.editor.queryTextStyle(name, value, useCache);
22085
22106
  },
22086
22107
  //api:设置标记
22087
- setTextMark(name, value, isRender = true) {
22108
+ setTextMark(name, value, isRender = true, useCache = false) {
22088
22109
  if (this.disabled) {
22089
22110
  return;
22090
22111
  }
22091
22112
  if (!this.editor.range) {
22092
22113
  return;
22093
22114
  }
22094
- const active = this.queryTextMark(name, value);
22115
+ const active = this.queryTextMark(name, value, useCache);
22095
22116
  if (active) {
22096
- this.editor.removeTextMark([name]);
22117
+ this.editor.removeTextMark([name], useCache);
22097
22118
  } else {
22098
22119
  let marks = {};
22099
22120
  marks[name] = value;
22100
- this.editor.setTextMark(marks);
22121
+ this.editor.setTextMark(marks, useCache);
22101
22122
  }
22102
22123
  if (isRender) {
22103
22124
  this.editor.formatElementStack();
@@ -22106,19 +22127,19 @@ const _sfc_main = {
22106
22127
  }
22107
22128
  },
22108
22129
  //api:查询是否具有某个标记
22109
- queryTextMark(name, value, useCache) {
22130
+ queryTextMark(name, value, useCache = false) {
22110
22131
  return this.editor.queryTextMark(name, value, useCache);
22111
22132
  },
22112
22133
  //api:清除文本样式和标记
22113
- formatText(isRender = true) {
22134
+ formatText(isRender = true, useCache = false) {
22114
22135
  if (this.disabled) {
22115
22136
  return;
22116
22137
  }
22117
22138
  if (!this.editor.range) {
22118
22139
  return;
22119
22140
  }
22120
- this.editor.removeTextStyle();
22121
- this.editor.removeTextMark();
22141
+ this.editor.removeTextStyle(null, useCache);
22142
+ this.editor.removeTextMark(null, useCache);
22122
22143
  if (isRender) {
22123
22144
  this.editor.formatElementStack();
22124
22145
  this.editor.domRender();
@@ -22126,7 +22147,7 @@ const _sfc_main = {
22126
22147
  }
22127
22148
  },
22128
22149
  //api:设置对齐方式,参数取值justify/left/right/center
22129
- setAlign(value, isRender = true) {
22150
+ setAlign(value, isRender = true, useCache = false) {
22130
22151
  if (this.disabled) {
22131
22152
  return;
22132
22153
  }
@@ -22154,7 +22175,7 @@ const _sfc_main = {
22154
22175
  }
22155
22176
  }
22156
22177
  } else {
22157
- const result = this.editor.getElementsByRange(true, false);
22178
+ const result = this.editor.getElementsByRange(true, false, useCache);
22158
22179
  result.forEach((el) => {
22159
22180
  if (el.element.isBlock() || el.element.isInblock()) {
22160
22181
  if (el.element.hasStyles()) {
@@ -22224,7 +22245,7 @@ const _sfc_main = {
22224
22245
  }
22225
22246
  },
22226
22247
  //api:插入引用
22227
- setQuote(isRender = true) {
22248
+ setQuote(isRender = true, useCache = false) {
22228
22249
  if (this.disabled) {
22229
22250
  return;
22230
22251
  }
@@ -22240,7 +22261,7 @@ const _sfc_main = {
22240
22261
  }
22241
22262
  } else {
22242
22263
  let blocks = [];
22243
- const result = this.editor.getElementsByRange(true, false);
22264
+ const result = this.editor.getElementsByRange(true, false, useCache);
22244
22265
  result.forEach((item) => {
22245
22266
  const block = item.element.getBlock();
22246
22267
  const exist = blocks.some((el) => block.isEqual(el));
@@ -22263,7 +22284,7 @@ const _sfc_main = {
22263
22284
  }
22264
22285
  },
22265
22286
  //api:设置行高
22266
- setLineHeight(value, isRender = true) {
22287
+ setLineHeight(value, isRender = true, useCache = false) {
22267
22288
  if (this.disabled) {
22268
22289
  return;
22269
22290
  }
@@ -22291,7 +22312,7 @@ const _sfc_main = {
22291
22312
  }
22292
22313
  }
22293
22314
  } else {
22294
- const result = this.editor.getElementsByRange(true, false);
22315
+ const result = this.editor.getElementsByRange(true, false, useCache);
22295
22316
  result.forEach((el) => {
22296
22317
  if (el.element.isBlock() || el.element.isInblock()) {
22297
22318
  if (el.element.hasStyles()) {
@@ -22331,7 +22352,7 @@ const _sfc_main = {
22331
22352
  }
22332
22353
  },
22333
22354
  //api:增加缩进
22334
- setIndentIncrease(isRender = true) {
22355
+ setIndentIncrease(isRender = true, useCache = false) {
22335
22356
  if (this.disabled) {
22336
22357
  return;
22337
22358
  }
@@ -22366,7 +22387,7 @@ const _sfc_main = {
22366
22387
  fn(block);
22367
22388
  }
22368
22389
  } else {
22369
- const result = this.editor.getElementsByRange(true, false);
22390
+ const result = this.editor.getElementsByRange(true, false, useCache);
22370
22391
  result.forEach((item) => {
22371
22392
  const block = item.element.getBlock();
22372
22393
  const inblock = item.element.getInblock();
@@ -22384,7 +22405,7 @@ const _sfc_main = {
22384
22405
  }
22385
22406
  },
22386
22407
  //api:减少缩进
22387
- setIndentDecrease(isRender = true) {
22408
+ setIndentDecrease(isRender = true, useCache = false) {
22388
22409
  if (this.disabled) {
22389
22410
  return;
22390
22411
  }
@@ -22411,7 +22432,7 @@ const _sfc_main = {
22411
22432
  fn(block);
22412
22433
  }
22413
22434
  } else {
22414
- const result = this.editor.getElementsByRange(true, false);
22435
+ const result = this.editor.getElementsByRange(true, false, useCache);
22415
22436
  result.forEach((item) => {
22416
22437
  const block = item.element.getBlock();
22417
22438
  const inblock = item.element.getInblock();
@@ -22489,20 +22510,20 @@ const _sfc_main = {
22489
22510
  }
22490
22511
  },
22491
22512
  //api:选区是否含有代码块样式
22492
- hasPreStyle() {
22513
+ hasPreStyle(useCache = false) {
22493
22514
  if (!this.editor.range) {
22494
22515
  return false;
22495
22516
  }
22496
22517
  if (this.editor.range.anchor.isEqual(this.editor.range.focus)) {
22497
22518
  return this.editor.range.anchor.element.isPreStyle();
22498
22519
  }
22499
- const result = this.editor.getElementsByRange(true, false);
22520
+ const result = this.editor.getElementsByRange(true, false, useCache);
22500
22521
  return result.some((item) => {
22501
22522
  return item.element.isPreStyle();
22502
22523
  });
22503
22524
  },
22504
22525
  //api:选区是否含有引用
22505
- hasQuote() {
22526
+ hasQuote(useCache = false) {
22506
22527
  if (!this.editor.range) {
22507
22528
  return false;
22508
22529
  }
@@ -22510,7 +22531,7 @@ const _sfc_main = {
22510
22531
  const block = this.editor.range.anchor.element.getBlock();
22511
22532
  return block.parsedom == "blockquote";
22512
22533
  }
22513
- const result = this.editor.getElementsByRange(true, false);
22534
+ const result = this.editor.getElementsByRange(true, false, useCache);
22514
22535
  return result.some((item) => {
22515
22536
  if (item.element.isBlock()) {
22516
22537
  return item.element.parsedom == "blockquote";
@@ -22521,7 +22542,7 @@ const _sfc_main = {
22521
22542
  });
22522
22543
  },
22523
22544
  //api:选区是否含有列表
22524
- hasList(ordered = false) {
22545
+ hasList(ordered = false, useCache = false) {
22525
22546
  if (!this.editor.range) {
22526
22547
  return false;
22527
22548
  }
@@ -22529,7 +22550,7 @@ const _sfc_main = {
22529
22550
  const block = this.editor.range.anchor.element.getBlock();
22530
22551
  return blockIsList(block, ordered);
22531
22552
  }
22532
- const result = this.editor.getElementsByRange(true, false);
22553
+ const result = this.editor.getElementsByRange(true, false, useCache);
22533
22554
  return result.some((item) => {
22534
22555
  if (item.element.isBlock()) {
22535
22556
  return blockIsList(item.element, ordered);
@@ -22540,14 +22561,14 @@ const _sfc_main = {
22540
22561
  });
22541
22562
  },
22542
22563
  //api:选区是否含有链接
22543
- hasLink() {
22564
+ hasLink(useCache = false) {
22544
22565
  if (!this.editor.range) {
22545
22566
  return false;
22546
22567
  }
22547
22568
  if (this.editor.range.anchor.isEqual(this.editor.range.focus)) {
22548
22569
  return !!this.getParsedomElementByElement(this.editor.range.anchor.element, "a");
22549
22570
  }
22550
- const result = this.editor.getElementsByRange(true, true).filter((item) => {
22571
+ const result = this.editor.getElementsByRange(true, true, useCache).filter((item) => {
22551
22572
  return item.element.isText();
22552
22573
  });
22553
22574
  return result.some((item) => {
@@ -22555,7 +22576,7 @@ const _sfc_main = {
22555
22576
  });
22556
22577
  },
22557
22578
  //api:选区是否含有表格
22558
- hasTable() {
22579
+ hasTable(useCache = false) {
22559
22580
  if (!this.editor.range) {
22560
22581
  return false;
22561
22582
  }
@@ -22563,7 +22584,7 @@ const _sfc_main = {
22563
22584
  const block = this.editor.range.anchor.element.getBlock();
22564
22585
  return block.parsedom == "table";
22565
22586
  }
22566
- const result = this.editor.getElementsByRange(true, false);
22587
+ const result = this.editor.getElementsByRange(true, false, useCache);
22567
22588
  return result.some((item) => {
22568
22589
  if (item.element.isBlock()) {
22569
22590
  return item.element.parsedom == "table";
@@ -22574,7 +22595,7 @@ const _sfc_main = {
22574
22595
  });
22575
22596
  },
22576
22597
  //api:选区是否含有任务列表
22577
- hasTask() {
22598
+ hasTask(useCache = false) {
22578
22599
  if (!this.editor.range) {
22579
22600
  return false;
22580
22601
  }
@@ -22582,7 +22603,7 @@ const _sfc_main = {
22582
22603
  const block = this.editor.range.anchor.element.getBlock();
22583
22604
  return blockIsTask(block);
22584
22605
  }
22585
- const result = this.editor.getElementsByRange(true, false);
22606
+ const result = this.editor.getElementsByRange(true, false, useCache);
22586
22607
  return result.some((item) => {
22587
22608
  if (item.element.isBlock()) {
22588
22609
  return blockIsTask(item.element);
@@ -22593,33 +22614,33 @@ const _sfc_main = {
22593
22614
  });
22594
22615
  },
22595
22616
  //api:选区是否含有图片
22596
- hasImage() {
22617
+ hasImage(useCache = false) {
22597
22618
  if (!this.editor.range) {
22598
22619
  return false;
22599
22620
  }
22600
22621
  if (this.editor.range.anchor.isEqual(this.editor.range.focus)) {
22601
22622
  return this.editor.range.anchor.element.isClosed() && this.editor.range.anchor.element.parsedom == "img";
22602
22623
  }
22603
- const result = this.editor.getElementsByRange(true, true);
22624
+ const result = this.editor.getElementsByRange(true, true, useCache);
22604
22625
  return result.some((item) => {
22605
22626
  return item.element.isClosed() && item.element.parsedom == "img";
22606
22627
  });
22607
22628
  },
22608
22629
  //api:选区是否含有视频
22609
- hasVideo() {
22630
+ hasVideo(useCache = false) {
22610
22631
  if (!this.editor.range) {
22611
22632
  return false;
22612
22633
  }
22613
22634
  if (this.editor.range.anchor.isEqual(this.editor.range.focus)) {
22614
22635
  return this.editor.range.anchor.element.isClosed() && this.editor.range.anchor.element.parsedom == "video";
22615
22636
  }
22616
- const result = this.editor.getElementsByRange(true, true);
22637
+ const result = this.editor.getElementsByRange(true, true, useCache);
22617
22638
  return result.some((item) => {
22618
22639
  return item.element.isClosed() && item.element.parsedom == "video";
22619
22640
  });
22620
22641
  },
22621
22642
  //api:选区是否全部在引用内
22622
- inQuote() {
22643
+ inQuote(useCache = false) {
22623
22644
  if (!this.editor.range) {
22624
22645
  return false;
22625
22646
  }
@@ -22627,7 +22648,7 @@ const _sfc_main = {
22627
22648
  const block = this.editor.range.anchor.element.getBlock();
22628
22649
  return block.parsedom == "blockquote";
22629
22650
  }
22630
- const result = this.editor.getElementsByRange(true, false);
22651
+ const result = this.editor.getElementsByRange(true, false, useCache);
22631
22652
  return result.every((item) => {
22632
22653
  if (item.element.isBlock()) {
22633
22654
  return item.element.parsedom == "blockquote";
@@ -22638,7 +22659,7 @@ const _sfc_main = {
22638
22659
  });
22639
22660
  },
22640
22661
  //api:选区是否全部在列表内
22641
- inList(ordered = false) {
22662
+ inList(ordered = false, useCache = false) {
22642
22663
  if (!this.editor.range) {
22643
22664
  return false;
22644
22665
  }
@@ -22646,7 +22667,7 @@ const _sfc_main = {
22646
22667
  const block = this.editor.range.anchor.element.getBlock();
22647
22668
  return blockIsList(block, ordered);
22648
22669
  }
22649
- const result = this.editor.getElementsByRange(true, false);
22670
+ const result = this.editor.getElementsByRange(true, false, useCache);
22650
22671
  return result.every((item) => {
22651
22672
  if (item.element.isBlock()) {
22652
22673
  return blockIsList(item.element, ordered);
@@ -22657,7 +22678,7 @@ const _sfc_main = {
22657
22678
  });
22658
22679
  },
22659
22680
  //api:选区是否全部在任务列表里
22660
- inTask() {
22681
+ inTask(useCache = false) {
22661
22682
  if (!this.editor.range) {
22662
22683
  return false;
22663
22684
  }
@@ -22665,7 +22686,7 @@ const _sfc_main = {
22665
22686
  const block = this.editor.range.anchor.element.getBlock();
22666
22687
  return blockIsTask(block);
22667
22688
  }
22668
- const result = this.editor.getElementsByRange(true, false);
22689
+ const result = this.editor.getElementsByRange(true, false, useCache);
22669
22690
  return result.every((item) => {
22670
22691
  if (item.element.isBlock()) {
22671
22692
  return blockIsTask(item.element);
@@ -22710,14 +22731,14 @@ const _sfc_main = {
22710
22731
  }
22711
22732
  },
22712
22733
  //api:插入代码块
22713
- insertCodeBlock(isRender = true) {
22734
+ insertCodeBlock(isRender = true, useCache = false) {
22714
22735
  if (this.disabled) {
22715
22736
  return;
22716
22737
  }
22717
22738
  if (!this.editor.range) {
22718
22739
  return;
22719
22740
  }
22720
- const pre = this.getCurrentParsedomElement("pre");
22741
+ const pre = this.getCurrentParsedomElement("pre", useCache);
22721
22742
  if (pre) {
22722
22743
  let content = "";
22723
22744
  AlexElement.flatElements(pre.children).filter((item) => {
@@ -22743,10 +22764,10 @@ const _sfc_main = {
22743
22764
  this.editor.addElementTo(breakEl, paragraph);
22744
22765
  this.editor.addElementAfter(paragraph, block);
22745
22766
  } else {
22746
- let result = this.editor.getElementsByRange(true, false);
22767
+ let result = this.editor.getElementsByRange(true, false, useCache);
22747
22768
  this.editor.range.anchor.moveToStart(result[0].element.getBlock());
22748
22769
  this.editor.range.focus.moveToEnd(result[result.length - 1].element.getBlock());
22749
- const res = this.editor.getElementsByRange(true, true).filter((el) => el.element.isText());
22770
+ const res = this.editor.getElementsByRange(true, true, useCache).filter((el) => el.element.isText());
22750
22771
  const obj2 = {};
22751
22772
  res.forEach((el) => {
22752
22773
  if (obj2[el.element.getBlock().key]) {
@@ -22883,7 +22904,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
22883
22904
  ])) : createCommentVNode("", true)
22884
22905
  ]);
22885
22906
  }
22886
- const Editify = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-31c1a2aa"]]);
22907
+ const Editify = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-b523f8ea"]]);
22887
22908
  const iconfont = "";
22888
22909
  const en_US = {
22889
22910
  textWrapUp: "Up feed",
@@ -23064,7 +23085,7 @@ const i18n = (locale) => {
23064
23085
  return translations[locale][key];
23065
23086
  };
23066
23087
  };
23067
- const version = "0.0.46";
23088
+ const version = "0.0.47";
23068
23089
  const install = (app, props) => {
23069
23090
  const locale = (props ? props.locale : "zh_CN") || "zh_CN";
23070
23091
  app.provide("$editTrans", i18n(locale));