vue-editify 0.0.46 → 0.0.48

Sign up to get free protection for your applications and to get access to all the features.
package/lib/editify.es.js CHANGED
@@ -1722,7 +1722,7 @@ const speech$1 = {
1722
1722
  }
1723
1723
  };
1724
1724
  const obj$1 = { number: number$1, data: data$1, element: element$1, event: event$1, common: common$1, color: color$1, file: file$1, string: string$1, platform: platform$1, speech: speech$1 };
1725
- const getAttributes = (node) => {
1725
+ const getAttributes = function(node) {
1726
1726
  let o = {};
1727
1727
  const length = node.attributes.length;
1728
1728
  for (let i = 0; i < length; i++) {
@@ -1733,7 +1733,7 @@ const getAttributes = (node) => {
1733
1733
  }
1734
1734
  return o;
1735
1735
  };
1736
- const getStyles = (node) => {
1736
+ const getStyles = function(node) {
1737
1737
  let o = {};
1738
1738
  if (node.getAttribute("style")) {
1739
1739
  const styles = node.getAttribute("style");
@@ -1759,34 +1759,34 @@ const getStyles = (node) => {
1759
1759
  }
1760
1760
  return o;
1761
1761
  };
1762
- const createUniqueKey = () => {
1762
+ const createUniqueKey = function() {
1763
1763
  let key = obj$1.data.get(window, "data-alex-editor-key") || 0;
1764
1764
  key++;
1765
1765
  obj$1.data.set(window, "data-alex-editor-key", key);
1766
1766
  return key;
1767
1767
  };
1768
- const createGuid = () => {
1768
+ const createGuid = function() {
1769
1769
  let key = obj$1.data.get(window, "data-alex-editor-guid") || 0;
1770
1770
  key++;
1771
1771
  obj$1.data.set(window, "data-alex-editor-guid", key);
1772
1772
  return key;
1773
1773
  };
1774
- const isSpaceText = (val) => {
1774
+ const isSpaceText = function(val) {
1775
1775
  return /^[\uFEFF]+$/g.test(val);
1776
1776
  };
1777
- const cloneData = (data2) => {
1777
+ const cloneData = function(data2) {
1778
1778
  if (obj$1.common.isObject(data2) || Array.isArray(data2)) {
1779
1779
  return JSON.parse(JSON.stringify(data2));
1780
1780
  }
1781
1781
  return data2;
1782
1782
  };
1783
- const isContains = (parentNode, childNode) => {
1783
+ const isContains = function(parentNode, childNode) {
1784
1784
  if (childNode.nodeType == 3) {
1785
1785
  return obj$1.element.isContains(parentNode, childNode.parentNode);
1786
1786
  }
1787
1787
  return obj$1.element.isContains(parentNode, childNode);
1788
1788
  };
1789
- const blobToBase64 = (blob) => {
1789
+ const blobToBase64 = function(blob) {
1790
1790
  return new Promise((resolve) => {
1791
1791
  const fileReader = new FileReader();
1792
1792
  fileReader.onload = (e) => {
@@ -1795,7 +1795,7 @@ const blobToBase64 = (blob) => {
1795
1795
  fileReader.readAsDataURL(blob);
1796
1796
  });
1797
1797
  };
1798
- const canUseClipboard = () => {
1798
+ const canUseClipboard = function() {
1799
1799
  if (!window.ClipboardItem) {
1800
1800
  console.warn("window.ClipboardItem must be obtained in a secure environment, such as localhost, 127.0.0.1, or https, so the editor's copy, paste, and cut functions cannot be used");
1801
1801
  return false;
@@ -1806,7 +1806,7 @@ const canUseClipboard = () => {
1806
1806
  }
1807
1807
  return true;
1808
1808
  };
1809
- const initEditorNode = (node) => {
1809
+ const initEditorNode = function(node) {
1810
1810
  if (typeof node == "string" && node) {
1811
1811
  node = document.body.querySelector(node);
1812
1812
  }
@@ -1819,7 +1819,7 @@ const initEditorNode = (node) => {
1819
1819
  obj$1.data.set(node, "data-alex-editor-init", true);
1820
1820
  return node;
1821
1821
  };
1822
- const initEditorOptions = (options) => {
1822
+ const initEditorOptions = function(options) {
1823
1823
  let opts = {
1824
1824
  //是否禁用
1825
1825
  disabled: false,
@@ -1891,7 +1891,7 @@ const initEditorOptions = (options) => {
1891
1891
  }
1892
1892
  return opts;
1893
1893
  };
1894
- const queryHasValue = (obj$1$1, name, value) => {
1894
+ const queryHasValue = function(obj$1$1, name, value) {
1895
1895
  if (value == null || value == void 0) {
1896
1896
  return obj$1$1.hasOwnProperty(name);
1897
1897
  }
@@ -1921,6 +1921,60 @@ const queryHasValue = (obj$1$1, name, value) => {
1921
1921
  }
1922
1922
  return ownValue == value;
1923
1923
  };
1924
+ const getNewFlatData = function(arr) {
1925
+ const length = arr.length;
1926
+ let newArr = [];
1927
+ for (let i = length - 1; i >= 0; i--) {
1928
+ if (arr[i].element.hasChildren()) {
1929
+ let allIn = arr[i].element.children.every((child) => {
1930
+ return newArr.some((item) => {
1931
+ return item.element.isEqual(child) && !item.offset;
1932
+ });
1933
+ });
1934
+ if (allIn) {
1935
+ newArr.unshift(arr[i]);
1936
+ }
1937
+ } else {
1938
+ newArr.unshift(arr[i]);
1939
+ }
1940
+ }
1941
+ for (let i = 0; i < newArr.length; i++) {
1942
+ const element2 = newArr[i].element;
1943
+ if (!element2.offset && element2.parent) {
1944
+ const selfIn = newArr.some((item) => {
1945
+ return item.element.isEqual(element2.parent);
1946
+ });
1947
+ const allIn = element2.parent.children.every((child) => {
1948
+ return newArr.some((item) => {
1949
+ return item.element.isEqual(child) && !item.offset;
1950
+ });
1951
+ });
1952
+ if (allIn && !selfIn) {
1953
+ newArr.splice(i, 0, {
1954
+ element: element2.parent,
1955
+ offset: false
1956
+ });
1957
+ i++;
1958
+ }
1959
+ }
1960
+ }
1961
+ return newArr;
1962
+ };
1963
+ const getNoFlatData = function(arr) {
1964
+ let noFlat = [];
1965
+ const length = arr.length;
1966
+ for (let i = 0; i < length; i++) {
1967
+ if (arr[i].element.isBlock()) {
1968
+ noFlat.push(arr[i]);
1969
+ } else {
1970
+ const isIn = arr.some((item) => item.element.isEqual(arr[i].element.parent));
1971
+ if (!isIn) {
1972
+ noFlat.push(arr[i]);
1973
+ }
1974
+ }
1975
+ }
1976
+ return noFlat;
1977
+ };
1924
1978
  const _AlexElement = class _AlexElement2 {
1925
1979
  constructor(type, parsedom, marks, styles, textContent) {
1926
1980
  this.key = createUniqueKey();
@@ -3277,7 +3331,16 @@ class AlexEditor {
3277
3331
  this.__isInputChinese = false;
3278
3332
  this.__innerSelectionChange = false;
3279
3333
  this.__chineseInputTimer = null;
3280
- this.__dataCaches = {};
3334
+ this.__getElementsByRangeData = {
3335
+ //起点和终点范围内的元素,但是不包含起点和终点所在的元素
3336
+ default: [],
3337
+ //起点和终点范围内的元素,但是包含起点和终点所在的元素
3338
+ includes: [],
3339
+ //起点和终点范围内的元素扁平化处理结果,不包含起点和终点所在的元素
3340
+ flat: [],
3341
+ //起点和终点范围内的元素扁平化处理结果,包含起点和终点所在的元素
3342
+ flatIncludes: []
3343
+ };
3281
3344
  this.disabled ? this.setDisabled() : this.setEnabled();
3282
3345
  obj$1.event.on(document, `selectionchange.alex_editor_${this.__guid}`, handleSelectionChange.bind(this));
3283
3346
  obj$1.event.on(this.$el, "beforeinput.alex_editor", handleBeforeInput.bind(this));
@@ -3427,7 +3490,7 @@ class AlexEditor {
3427
3490
  const result = await this.copy(true);
3428
3491
  if (result) {
3429
3492
  if (!this.disabled) {
3430
- this.delete();
3493
+ this.delete(true);
3431
3494
  }
3432
3495
  this.emit("cut", result.text, result.html);
3433
3496
  }
@@ -3447,7 +3510,7 @@ class AlexEditor {
3447
3510
  if (!this.allowCopy) {
3448
3511
  return;
3449
3512
  }
3450
- let result = this.getElementsByRange(true, false);
3513
+ let result = this.getElementsByRange().includes;
3451
3514
  if (result.length == 0) {
3452
3515
  return;
3453
3516
  }
@@ -3475,7 +3538,7 @@ class AlexEditor {
3475
3538
  /**
3476
3539
  * 根据光标进行删除操作
3477
3540
  */
3478
- delete() {
3541
+ delete(useCache = false) {
3479
3542
  if (this.disabled) {
3480
3543
  return;
3481
3544
  }
@@ -3623,7 +3686,7 @@ class AlexEditor {
3623
3686
  }
3624
3687
  }
3625
3688
  } else {
3626
- const result = this.getElementsByRange(true, false).filter((item) => {
3689
+ const result = this.getElementsByRange(useCache).includes.filter((item) => {
3627
3690
  return !AlexElement.VOID_NODES.includes(item.element.parsedom);
3628
3691
  });
3629
3692
  const anchorInblock = this.range.anchor.element.getInblock();
@@ -3741,7 +3804,7 @@ class AlexEditor {
3741
3804
  /**
3742
3805
  * 根据光标位置向编辑器内插入文本
3743
3806
  */
3744
- insertText(data2) {
3807
+ insertText(data2, useCache = false) {
3745
3808
  if (this.disabled) {
3746
3809
  return;
3747
3810
  }
@@ -3775,14 +3838,14 @@ class AlexEditor {
3775
3838
  this.range.focus.moveToEnd(textEl);
3776
3839
  }
3777
3840
  } else {
3778
- this.delete();
3841
+ this.delete(useCache);
3779
3842
  this.insertText(data2);
3780
3843
  }
3781
3844
  }
3782
3845
  /**
3783
3846
  * 在光标处换行
3784
3847
  */
3785
- insertParagraph() {
3848
+ insertParagraph(useCache = false) {
3786
3849
  if (this.disabled) {
3787
3850
  return;
3788
3851
  }
@@ -3878,7 +3941,7 @@ class AlexEditor {
3878
3941
  }
3879
3942
  }
3880
3943
  } else {
3881
- this.delete();
3944
+ this.delete(useCache);
3882
3945
  this.insertParagraph();
3883
3946
  }
3884
3947
  }
@@ -3886,7 +3949,7 @@ class AlexEditor {
3886
3949
  * 根据光标插入元素
3887
3950
  * cover表示所在根级块或者内部块元素只有换行符时是否覆盖此元素
3888
3951
  */
3889
- insertElement(ele, cover = true) {
3952
+ insertElement(ele, cover = true, useCache = false) {
3890
3953
  if (this.disabled) {
3891
3954
  return;
3892
3955
  }
@@ -4020,7 +4083,7 @@ class AlexEditor {
4020
4083
  this.range.anchor.moveToEnd(ele);
4021
4084
  this.range.focus.moveToEnd(ele);
4022
4085
  } else {
4023
- this.delete();
4086
+ this.delete(useCache);
4024
4087
  this.insertElement(ele, cover);
4025
4088
  }
4026
4089
  }
@@ -4428,122 +4491,96 @@ class AlexEditor {
4428
4491
  /**
4429
4492
  * 获取选区之间的元素
4430
4493
  */
4431
- getElementsByRange(includes = false, flat = false) {
4494
+ getElementsByRange(useCache = false) {
4495
+ if (useCache) {
4496
+ return this.__getElementsByRangeData;
4497
+ }
4498
+ const result = {
4499
+ //起点和终点范围内的元素,但是不包含起点和终点所在的元素
4500
+ default: [],
4501
+ //起点和终点范围内的元素,但是包含起点和终点所在的元素
4502
+ includes: [],
4503
+ //起点和终点范围内的元素扁平化处理结果,不包含起点和终点所在的元素
4504
+ flat: [],
4505
+ //起点和终点范围内的元素扁平化处理结果,包含起点和终点所在的元素
4506
+ flatIncludes: []
4507
+ };
4432
4508
  if (!this.range) {
4433
- return [];
4509
+ this.__getElementsByRangeData = result;
4510
+ return result;
4434
4511
  }
4435
4512
  if (this.range.anchor.isEqual(this.range.focus)) {
4436
- return [];
4513
+ this.__getElementsByRangeData = result;
4514
+ return result;
4437
4515
  }
4438
4516
  if (this.range.anchor.element.isEqual(this.range.focus.element)) {
4439
- if (includes) {
4440
- 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 [
4442
- {
4443
- element: this.range.anchor.element,
4444
- offset: isCover ? false : [this.range.anchor.offset, this.range.focus.offset]
4445
- }
4446
- ];
4447
- }
4448
- return [];
4449
- }
4450
- let result = [];
4451
- if (includes) {
4452
- if (this.range.anchor.offset == 0) {
4453
- result.push({
4517
+ const isCover = this.range.anchor.offset == 0 && this.range.focus.offset == (this.range.anchor.element.isText() ? this.range.anchor.element.textContent.length : 1);
4518
+ result.includes = [
4519
+ {
4454
4520
  element: this.range.anchor.element,
4455
- offset: false
4456
- });
4457
- } else if (this.range.anchor.offset < (this.range.anchor.element.isText() ? this.range.anchor.element.textContent.length : 1)) {
4458
- result.push({
4521
+ offset: isCover ? false : [this.range.anchor.offset, this.range.focus.offset]
4522
+ }
4523
+ ];
4524
+ result.flatIncludes = [
4525
+ {
4459
4526
  element: this.range.anchor.element,
4460
- offset: [this.range.anchor.offset, this.range.anchor.element.isText() ? this.range.anchor.element.textContent.length : 1]
4461
- });
4462
- }
4527
+ offset: isCover ? false : [this.range.anchor.offset, this.range.focus.offset]
4528
+ }
4529
+ ];
4530
+ this.__getElementsByRangeData = result;
4531
+ return result;
4532
+ }
4533
+ if (this.range.anchor.offset == 0) {
4534
+ result.flatIncludes.push({
4535
+ element: this.range.anchor.element,
4536
+ offset: false
4537
+ });
4538
+ } else if (this.range.anchor.offset < (this.range.anchor.element.isText() ? this.range.anchor.element.textContent.length : 1)) {
4539
+ result.flatIncludes.push({
4540
+ element: this.range.anchor.element,
4541
+ offset: [this.range.anchor.offset, this.range.anchor.element.isText() ? this.range.anchor.element.textContent.length : 1]
4542
+ });
4463
4543
  }
4464
4544
  const elements = AlexElement.flatElements(this.stack);
4465
4545
  const anchorIndex = elements.findIndex((el) => el.isEqual(this.range.anchor.element));
4466
4546
  const focusIndex = elements.findIndex((el) => el.isEqual(this.range.focus.element));
4467
4547
  for (let i = anchorIndex + 1; i < focusIndex; i++) {
4468
- result.push({
4548
+ result.flatIncludes.push({
4549
+ element: elements[i],
4550
+ offset: false
4551
+ });
4552
+ result.flat.push({
4469
4553
  element: elements[i],
4470
4554
  offset: false
4471
4555
  });
4472
4556
  }
4473
- if (includes) {
4474
- if (this.range.focus.offset == (this.range.focus.element.isText() ? this.range.focus.element.textContent.length : 1)) {
4475
- result.push({
4476
- element: this.range.focus.element,
4477
- offset: false
4478
- });
4479
- } else if (this.range.focus.offset > 0) {
4480
- result.push({
4481
- element: this.range.focus.element,
4482
- offset: [0, this.range.focus.offset]
4483
- });
4484
- }
4485
- }
4486
- const resLength = result.length;
4487
- let newResult = [];
4488
- for (let i = resLength - 1; i >= 0; i--) {
4489
- if (result[i].element.hasChildren()) {
4490
- let allIn = result[i].element.children.every((child) => {
4491
- return newResult.some((item) => {
4492
- return item.element.isEqual(child) && !item.offset;
4493
- });
4494
- });
4495
- if (allIn) {
4496
- newResult.unshift(result[i]);
4497
- }
4498
- } else {
4499
- newResult.unshift(result[i]);
4500
- }
4501
- }
4502
- for (let i = 0; i < newResult.length; i++) {
4503
- const element2 = newResult[i].element;
4504
- if (!element2.offset && element2.parent) {
4505
- const selfIn = newResult.some((item) => {
4506
- return item.element.isEqual(element2.parent);
4507
- });
4508
- const allIn = element2.parent.children.every((child) => {
4509
- return newResult.some((item) => {
4510
- return item.element.isEqual(child) && !item.offset;
4511
- });
4512
- });
4513
- if (allIn && !selfIn) {
4514
- newResult.splice(i, 0, {
4515
- element: element2.parent,
4516
- offset: false
4517
- });
4518
- i++;
4519
- }
4520
- }
4521
- }
4522
- if (flat) {
4523
- return newResult;
4524
- }
4525
- let notFlatResult = [];
4526
- const length = newResult.length;
4527
- for (let i = 0; i < length; i++) {
4528
- if (newResult[i].element.isBlock()) {
4529
- notFlatResult.push(newResult[i]);
4530
- } else {
4531
- const isIn = newResult.some((item) => item.element.isEqual(newResult[i].element.parent));
4532
- if (!isIn) {
4533
- notFlatResult.push(newResult[i]);
4534
- }
4535
- }
4557
+ if (this.range.focus.offset == (this.range.focus.element.isText() ? this.range.focus.element.textContent.length : 1)) {
4558
+ result.flatIncludes.push({
4559
+ element: this.range.focus.element,
4560
+ offset: false
4561
+ });
4562
+ } else if (this.range.focus.offset > 0) {
4563
+ result.flatIncludes.push({
4564
+ element: this.range.focus.element,
4565
+ offset: [0, this.range.focus.offset]
4566
+ });
4536
4567
  }
4537
- return notFlatResult;
4568
+ result.flat = getNewFlatData.apply(this, [result.flat]);
4569
+ result.flatIncludes = getNewFlatData.apply(this, [result.flatIncludes]);
4570
+ result.default = getNoFlatData.apply(this, [result.flat]);
4571
+ result.includes = getNoFlatData.apply(this, [result.flatIncludes]);
4572
+ this.__getElementsByRangeData = result;
4573
+ return result;
4538
4574
  }
4539
4575
  /**
4540
4576
  * 分割选区选中的元素,会更新光标位置
4541
4577
  */
4542
- splitElementsByRange(includes = false, flat = false) {
4578
+ splitElementsByRange(includes = false, flat = false, useCache = false) {
4543
4579
  if (!this.range) {
4544
4580
  return [];
4545
4581
  }
4546
- const result = this.getElementsByRange(includes, flat);
4582
+ const key = includes && flat ? "flatIncludes" : includes ? "includes" : flat ? "flat" : "default";
4583
+ const result = this.getElementsByRange(useCache)[key];
4547
4584
  let elements = [];
4548
4585
  result.forEach((item, index) => {
4549
4586
  if (item.offset) {
@@ -4733,7 +4770,7 @@ class AlexEditor {
4733
4770
  /**
4734
4771
  * 设置文本元素的样式
4735
4772
  */
4736
- setTextStyle(styles) {
4773
+ setTextStyle(styles, useCache = false) {
4737
4774
  if (this.disabled) {
4738
4775
  return;
4739
4776
  }
@@ -4766,7 +4803,7 @@ class AlexEditor {
4766
4803
  this.insertElement(el);
4767
4804
  }
4768
4805
  } else {
4769
- const elements = this.splitElementsByRange(true, true);
4806
+ const elements = this.splitElementsByRange(true, true, useCache);
4770
4807
  elements.forEach((ele) => {
4771
4808
  if (ele.isText()) {
4772
4809
  if (ele.hasStyles()) {
@@ -4781,7 +4818,7 @@ class AlexEditor {
4781
4818
  /**
4782
4819
  * 移除文本元素的样式
4783
4820
  */
4784
- removeTextStyle(styleNames) {
4821
+ removeTextStyle(styleNames, useCache = false) {
4785
4822
  if (this.disabled) {
4786
4823
  return;
4787
4824
  }
@@ -4814,7 +4851,7 @@ class AlexEditor {
4814
4851
  this.insertElement(el);
4815
4852
  }
4816
4853
  } else {
4817
- const elements = this.splitElementsByRange(true, true);
4854
+ const elements = this.splitElementsByRange(true, true, useCache);
4818
4855
  elements.forEach((ele) => {
4819
4856
  if (ele.isText()) {
4820
4857
  removeFn(ele);
@@ -4838,17 +4875,9 @@ class AlexEditor {
4838
4875
  }
4839
4876
  return false;
4840
4877
  }
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
- }
4878
+ let result = this.getElementsByRange(useCache).flatIncludes.filter((item) => {
4879
+ return item.element.isText();
4880
+ });
4852
4881
  if (result.length == 0) {
4853
4882
  return false;
4854
4883
  }
@@ -4863,7 +4892,7 @@ class AlexEditor {
4863
4892
  /**
4864
4893
  * 设置文本元素的标记
4865
4894
  */
4866
- setTextMark(marks) {
4895
+ setTextMark(marks, useCache = false) {
4867
4896
  if (this.disabled) {
4868
4897
  return;
4869
4898
  }
@@ -4896,7 +4925,7 @@ class AlexEditor {
4896
4925
  this.insertElement(el);
4897
4926
  }
4898
4927
  } else {
4899
- const elements = this.splitElementsByRange(true, true);
4928
+ const elements = this.splitElementsByRange(true, true, useCache);
4900
4929
  elements.forEach((ele) => {
4901
4930
  if (ele.isText()) {
4902
4931
  if (ele.hasMarks()) {
@@ -4911,7 +4940,7 @@ class AlexEditor {
4911
4940
  /**
4912
4941
  * 移除文本元素的标记
4913
4942
  */
4914
- removeTextMark(markNames) {
4943
+ removeTextMark(markNames, useCache = false) {
4915
4944
  if (this.disabled) {
4916
4945
  return;
4917
4946
  }
@@ -4944,7 +4973,7 @@ class AlexEditor {
4944
4973
  this.insertElement(el);
4945
4974
  }
4946
4975
  } else {
4947
- const elements = this.splitElementsByRange(true, true);
4976
+ const elements = this.splitElementsByRange(true, true, useCache);
4948
4977
  elements.forEach((ele) => {
4949
4978
  if (ele.isText()) {
4950
4979
  removeFn(ele);
@@ -4968,17 +4997,9 @@ class AlexEditor {
4968
4997
  }
4969
4998
  return false;
4970
4999
  }
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
- }
5000
+ let result = this.getElementsByRange(useCache).flatIncludes.filter((item) => {
5001
+ return item.element.isText();
5002
+ });
4982
5003
  if (result.length == 0) {
4983
5004
  return false;
4984
5005
  }
@@ -17869,7 +17890,7 @@ function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {
17869
17890
  ]);
17870
17891
  }
17871
17892
  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 = "";
17893
+ const Toolbar_vue_vue_type_style_index_0_scoped_36dbd332_lang = "";
17873
17894
  const _sfc_main$6 = {
17874
17895
  name: "Toolbar",
17875
17896
  emits: ["update:modelValue"],
@@ -18144,80 +18165,80 @@ const _sfc_main$6 = {
18144
18165
  methods: {
18145
18166
  //清除格式
18146
18167
  clearFormat() {
18147
- this.$parent.formatText();
18168
+ this.$parent.formatText(true, true);
18148
18169
  },
18149
18170
  //设置背景色
18150
18171
  setBackColor(value) {
18151
- this.$parent.setTextStyle("background-color", value);
18172
+ this.$parent.setTextStyle("background-color", value, true, true);
18152
18173
  this.$refs.backColor.hideLayer();
18153
18174
  },
18154
18175
  //设置前景色
18155
18176
  setForeColor(value) {
18156
- this.$parent.setTextStyle("color", value);
18177
+ this.$parent.setTextStyle("color", value, true, true);
18157
18178
  this.$refs.foreColor.hideLayer();
18158
18179
  },
18159
18180
  //设置行高
18160
18181
  setLineHeight(name, value) {
18161
- this.$parent.setLineHeight(value);
18182
+ this.$parent.setLineHeight(value, true, true);
18162
18183
  },
18163
18184
  //设置字体
18164
18185
  setFontFamily(name, value) {
18165
- this.$parent.setTextStyle("font-family", value);
18186
+ this.$parent.setTextStyle("font-family", value, true, true);
18166
18187
  },
18167
18188
  //设置字号
18168
18189
  setFontSize(name, value) {
18169
- this.$parent.setTextStyle("font-size", value);
18190
+ this.$parent.setTextStyle("font-size", value, true, true);
18170
18191
  },
18171
18192
  //设置上标
18172
18193
  setSuperscript() {
18173
- this.$parent.setTextStyle("vertical-align", "super");
18194
+ this.$parent.setTextStyle("vertical-align", "super", true, true);
18174
18195
  },
18175
18196
  //设置下标
18176
18197
  setSubscript() {
18177
- this.$parent.setTextStyle("vertical-align", "sub");
18198
+ this.$parent.setTextStyle("vertical-align", "sub", true, true);
18178
18199
  },
18179
18200
  //设置行内代码样式
18180
18201
  setCodeStyle() {
18181
- this.$parent.setTextMark("data-editify-code", true);
18202
+ this.$parent.setTextMark("data-editify-code", true, true, true);
18182
18203
  },
18183
18204
  //设置下划线
18184
18205
  setUnderline() {
18185
- this.$parent.setTextStyle("text-decoration", "underline");
18206
+ this.$parent.setTextStyle("text-decoration", "underline", true, true);
18186
18207
  },
18187
18208
  //设置删除线
18188
18209
  setStrikethrough() {
18189
- this.$parent.setTextStyle("text-decoration", "line-through");
18210
+ this.$parent.setTextStyle("text-decoration", "line-through", true, true);
18190
18211
  },
18191
18212
  //设置列表
18192
18213
  setList(name) {
18193
- this.$parent.setList(name == "orderList");
18214
+ this.$parent.setList(name == "orderList", true, true);
18194
18215
  },
18195
18216
  //设置任务列表
18196
18217
  setTask() {
18197
- this.$parent.setTask();
18218
+ this.$parent.setTask(true, true);
18198
18219
  },
18199
18220
  //斜体
18200
18221
  setItalic() {
18201
- this.$parent.setTextStyle("font-style", "italic");
18222
+ this.$parent.setTextStyle("font-style", "italic", true, true);
18202
18223
  },
18203
18224
  //加粗
18204
18225
  setBold() {
18205
- this.$parent.setTextStyle("font-weight", "bold");
18226
+ this.$parent.setTextStyle("font-weight", "bold", true, true);
18206
18227
  },
18207
18228
  //设置标题
18208
18229
  setHeading(name, value) {
18209
- this.$parent.setHeading(value);
18230
+ this.$parent.setHeading(value, true, true);
18210
18231
  },
18211
18232
  //设置对齐方式
18212
18233
  setAlign(name, value) {
18213
- this.$parent.setAlign(value);
18234
+ this.$parent.setAlign(value, true, true);
18214
18235
  },
18215
18236
  //设置视频
18216
18237
  setVideo(prop) {
18217
18238
  if (this.$parent.disabled) {
18218
18239
  return;
18219
18240
  }
18220
- const video = this.$parent.getCurrentParsedomElement("video");
18241
+ const video = this.$parent.getCurrentParsedomElement("video", true);
18221
18242
  if (video) {
18222
18243
  if (this.videoConfig[prop]) {
18223
18244
  delete video.marks[prop];
@@ -18234,7 +18255,7 @@ const _sfc_main$6 = {
18234
18255
  if (this.$parent.disabled) {
18235
18256
  return;
18236
18257
  }
18237
- const element2 = this.$parent.getCurrentParsedomElement("img") || this.$parent.getCurrentParsedomElement("video");
18258
+ const element2 = this.$parent.getCurrentParsedomElement("img", true) || this.$parent.getCurrentParsedomElement("video", true);
18238
18259
  if (element2) {
18239
18260
  const styles = {
18240
18261
  width: value
@@ -18260,7 +18281,7 @@ const _sfc_main$6 = {
18260
18281
  if (!this.linkConfig.url) {
18261
18282
  return;
18262
18283
  }
18263
- const link = this.$parent.getCurrentParsedomElement("a");
18284
+ const link = this.$parent.getCurrentParsedomElement("a", true);
18264
18285
  if (link) {
18265
18286
  link.marks.href = this.linkConfig.url;
18266
18287
  if (this.linkConfig.newOpen) {
@@ -18293,7 +18314,7 @@ const _sfc_main$6 = {
18293
18314
  if (this.$parent.disabled) {
18294
18315
  return;
18295
18316
  }
18296
- const pre = this.$parent.getCurrentParsedomElement("pre");
18317
+ const pre = this.$parent.getCurrentParsedomElement("pre", true);
18297
18318
  if (pre) {
18298
18319
  Object.assign(pre.marks, {
18299
18320
  "data-editify-hljs": value
@@ -18312,7 +18333,7 @@ const _sfc_main$6 = {
18312
18333
  this.$parent.editor.range.anchor.element = this.$parent.editor.range.focus.element;
18313
18334
  this.$parent.editor.range.anchor.offset = this.$parent.editor.range.focus.offset;
18314
18335
  }
18315
- const pre = this.$parent.getCurrentParsedomElement("pre");
18336
+ const pre = this.$parent.getCurrentParsedomElement("pre", true);
18316
18337
  if (pre) {
18317
18338
  const paragraph = new AlexElement("block", AlexElement.BLOCK_NODE, null, null, null);
18318
18339
  const breakEl = new AlexElement("closed", "br", null, null, null);
@@ -18338,9 +18359,9 @@ const _sfc_main$6 = {
18338
18359
  this.$parent.editor.range.anchor.element = this.$parent.editor.range.focus.element;
18339
18360
  this.$parent.editor.range.anchor.offset = this.$parent.editor.range.focus.offset;
18340
18361
  }
18341
- const table = this.$parent.getCurrentParsedomElement("table");
18342
- const column = this.$parent.getCurrentParsedomElement("td");
18343
- const tbody = this.$parent.getCurrentParsedomElement("tbody");
18362
+ const table = this.$parent.getCurrentParsedomElement("table", true);
18363
+ const column = this.$parent.getCurrentParsedomElement("td", true);
18364
+ const tbody = this.$parent.getCurrentParsedomElement("tbody", true);
18344
18365
  if (column && table && tbody) {
18345
18366
  const rows = tbody.children;
18346
18367
  const index = column.parent.children.findIndex((item) => {
@@ -18379,7 +18400,7 @@ const _sfc_main$6 = {
18379
18400
  this.$parent.editor.rangeRender();
18380
18401
  }
18381
18402
  },
18382
- //表格插入前后插入行
18403
+ //表格前后插入行
18383
18404
  insertTableRow(type = "up") {
18384
18405
  if (this.$parent.disabled) {
18385
18406
  return;
@@ -18388,8 +18409,8 @@ const _sfc_main$6 = {
18388
18409
  this.$parent.editor.range.anchor.element = this.$parent.editor.range.focus.element;
18389
18410
  this.$parent.editor.range.anchor.offset = this.$parent.editor.range.focus.offset;
18390
18411
  }
18391
- const table = this.$parent.getCurrentParsedomElement("table");
18392
- const row = this.$parent.getCurrentParsedomElement("tr");
18412
+ const table = this.$parent.getCurrentParsedomElement("table", true);
18413
+ const row = this.$parent.getCurrentParsedomElement("tr", true);
18393
18414
  if (table && row) {
18394
18415
  const newRow = row.clone();
18395
18416
  newRow.children.forEach((column) => {
@@ -18417,7 +18438,7 @@ const _sfc_main$6 = {
18417
18438
  if (this.$parent.disabled) {
18418
18439
  return;
18419
18440
  }
18420
- const table = this.$parent.getCurrentParsedomElement("table");
18441
+ const table = this.$parent.getCurrentParsedomElement("table", true);
18421
18442
  if (table) {
18422
18443
  const paragraph = new AlexElement("block", AlexElement.BLOCK_NODE, null, null, null);
18423
18444
  const breakEl = new AlexElement("closed", "br", null, null, null);
@@ -18443,12 +18464,12 @@ const _sfc_main$6 = {
18443
18464
  this.$parent.editor.range.anchor.element = this.$parent.editor.range.focus.element;
18444
18465
  this.$parent.editor.range.anchor.offset = this.$parent.editor.range.focus.offset;
18445
18466
  }
18446
- const table = this.$parent.getCurrentParsedomElement("table");
18447
- const row = this.$parent.getCurrentParsedomElement("tr");
18467
+ const table = this.$parent.getCurrentParsedomElement("table", true);
18468
+ const row = this.$parent.getCurrentParsedomElement("tr", true);
18448
18469
  if (table && row) {
18449
18470
  const parent = row.parent;
18450
18471
  if (parent.children.length == 1) {
18451
- this.$parent.deleteByParsedom("table");
18472
+ this.$parent.deleteByParsedom("table", true, true);
18452
18473
  return;
18453
18474
  }
18454
18475
  const previousRow = this.$parent.editor.getPreviousElement(row);
@@ -18478,14 +18499,14 @@ const _sfc_main$6 = {
18478
18499
  this.$parent.editor.range.anchor.element = this.$parent.editor.range.focus.element;
18479
18500
  this.$parent.editor.range.anchor.offset = this.$parent.editor.range.focus.offset;
18480
18501
  }
18481
- const column = this.$parent.getCurrentParsedomElement("td");
18482
- const tbody = this.$parent.getCurrentParsedomElement("tbody");
18483
- const table = this.$parent.getCurrentParsedomElement("table");
18502
+ const column = this.$parent.getCurrentParsedomElement("td", true);
18503
+ const tbody = this.$parent.getCurrentParsedomElement("tbody", true);
18504
+ const table = this.$parent.getCurrentParsedomElement("table", true);
18484
18505
  if (column && table && tbody) {
18485
18506
  const rows = tbody.children;
18486
18507
  const parent = column.parent;
18487
18508
  if (parent.children.length == 1) {
18488
- this.$parent.deleteByParsedom("table");
18509
+ this.$parent.deleteByParsedom("table", true, true);
18489
18510
  return;
18490
18511
  }
18491
18512
  const previousColumn = this.$parent.editor.getPreviousElement(column);
@@ -18514,19 +18535,20 @@ const _sfc_main$6 = {
18514
18535
  },
18515
18536
  //浮层显示时
18516
18537
  layerShow() {
18538
+ const result = this.$parent.editor.getElementsByRange(true).includes;
18517
18539
  if (this.type == "codeBlock") {
18518
- const pre = this.$parent.getCurrentParsedomElement("pre");
18540
+ const pre = this.$parent.getCurrentParsedomElement("pre", true);
18519
18541
  if (pre) {
18520
18542
  this.languageConfig.displayConfig.value = pre.marks["data-editify-hljs"] || "";
18521
18543
  }
18522
18544
  } else if (this.type == "link") {
18523
- const link = this.$parent.getCurrentParsedomElement("a");
18545
+ const link = this.$parent.getCurrentParsedomElement("a", true);
18524
18546
  if (link) {
18525
18547
  this.linkConfig.url = link.marks["href"];
18526
18548
  this.linkConfig.newOpen = link.marks["target"] == "_blank";
18527
18549
  }
18528
18550
  } else if (this.type == "video") {
18529
- const video = this.$parent.getCurrentParsedomElement("video");
18551
+ const video = this.$parent.getCurrentParsedomElement("video", true);
18530
18552
  if (video) {
18531
18553
  this.videoConfig.autoplay = !!video.marks["autoplay"];
18532
18554
  this.videoConfig.loop = !!video.marks["loop"];
@@ -18540,7 +18562,6 @@ const _sfc_main$6 = {
18540
18562
  }
18541
18563
  return false;
18542
18564
  };
18543
- const result = this.$parent.editor.getElementsByRange(true, false);
18544
18565
  const findHeadingItem = this.headingConfig.displayConfig.options.find((item) => {
18545
18566
  let val = item;
18546
18567
  if (obj.common.isObject(item)) {
@@ -18556,13 +18577,13 @@ const _sfc_main$6 = {
18556
18577
  this.headingConfig.displayConfig.value = findHeadingItem ? obj.common.isObject(findHeadingItem) ? findHeadingItem.value : findHeadingItem : this.headingConfig.defaultValue;
18557
18578
  this.headingConfig.disabled = extraDisabled("heading");
18558
18579
  this.alignConfig.disabled = extraDisabled("align");
18559
- this.orderListConfig.active = this.$parent.inList(true);
18580
+ this.orderListConfig.active = this.$parent.inList(true, true);
18560
18581
  this.orderListConfig.disabled = extraDisabled("orderList");
18561
- this.unorderListConfig.active = this.$parent.inList(false);
18582
+ this.unorderListConfig.active = this.$parent.inList(false, true);
18562
18583
  this.unorderListConfig.disabled = extraDisabled("unorderList");
18563
- this.taskConfig.active = this.$parent.inTask();
18584
+ this.taskConfig.active = this.$parent.inTask(true, true);
18564
18585
  this.taskConfig.disabled = extraDisabled("task");
18565
- this.boldConfig.active = this.$parent.queryTextStyle("font-weight", "bold");
18586
+ this.boldConfig.active = this.$parent.queryTextStyle("font-weight", "bold", true);
18566
18587
  this.boldConfig.disabled = extraDisabled("bold");
18567
18588
  this.italicConfig.active = this.$parent.queryTextStyle("font-style", "italic", true);
18568
18589
  this.italicConfig.disabled = extraDisabled("italic");
@@ -18570,7 +18591,7 @@ const _sfc_main$6 = {
18570
18591
  this.strikethroughConfig.disabled = extraDisabled("strikethrough");
18571
18592
  this.underlineConfig.active = this.$parent.queryTextStyle("text-decoration", "underline", true);
18572
18593
  this.underlineConfig.disabled = extraDisabled("underline");
18573
- this.codeConfig.active = this.$parent.queryTextMark("data-editify-code");
18594
+ this.codeConfig.active = this.$parent.queryTextMark("data-editify-code", null, true);
18574
18595
  this.codeConfig.disabled = extraDisabled("code");
18575
18596
  this.superConfig.active = this.$parent.queryTextStyle("vertical-align", "super", true);
18576
18597
  this.superConfig.disabled = extraDisabled("super");
@@ -19364,7 +19385,7 @@ function _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) {
19364
19385
  _: 1
19365
19386
  }, 8, ["modelValue", "node", "onShow", "useRange"]);
19366
19387
  }
19367
- const Toolbar = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["render", _sfc_render$6], ["__scopeId", "data-v-43553c16"]]);
19388
+ const Toolbar = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["render", _sfc_render$6], ["__scopeId", "data-v-36dbd332"]]);
19368
19389
  const InsertLink_vue_vue_type_style_index_0_scoped_e6c3c2ee_lang = "";
19369
19390
  const _sfc_main$5 = {
19370
19391
  name: "InsertLink",
@@ -20012,7 +20033,7 @@ function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {
20012
20033
  ]);
20013
20034
  }
20014
20035
  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 = "";
20036
+ const Menu_vue_vue_type_style_index_0_scoped_da918768_lang = "";
20016
20037
  const _sfc_main$1 = {
20017
20038
  name: "Menu",
20018
20039
  props: {
@@ -20762,7 +20783,7 @@ const _sfc_main$1 = {
20762
20783
  hideScroll: true,
20763
20784
  onLayerShow: () => {
20764
20785
  let text2 = "";
20765
- const result = this.$parent.$parent.editor.getElementsByRange(true, true);
20786
+ const result = this.$parent.$parent.editor.getElementsByRange().flatIncludes;
20766
20787
  result.forEach((item) => {
20767
20788
  if (item.element.isText()) {
20768
20789
  if (item.offset) {
@@ -21086,19 +21107,19 @@ const _sfc_main$1 = {
21086
21107
  }
21087
21108
  },
21088
21109
  //处理光标更新
21089
- handleRangeUpdate() {
21110
+ handleRangeUpdate(useCache = false) {
21090
21111
  if (this.disabled) {
21091
21112
  return;
21092
21113
  }
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();
21114
+ const result = this.$parent.editor.getElementsByRange(useCache).includes;
21115
+ const hasPreStyle = this.$parent.hasPreStyle(true);
21116
+ const hasTable = this.$parent.hasTable(true);
21117
+ const hasQuote = this.$parent.hasQuote(true);
21118
+ const inQuote = this.$parent.inQuote(true);
21119
+ const hasLink = this.$parent.hasLink(true);
21120
+ const inOrderList = this.$parent.inList(true, true);
21121
+ const inUnorderList = this.$parent.inList(false, true);
21122
+ const inTask = this.$parent.inTask(true);
21102
21123
  const extraDisabled = (name) => {
21103
21124
  if (typeof this.config.extraDisabled == "function") {
21104
21125
  return this.config.extraDisabled.apply(this.$parent, [name]) || false;
@@ -21134,7 +21155,7 @@ const _sfc_main$1 = {
21134
21155
  this.unorderListConfig.disabled = hasPreStyle || hasTable || extraDisabled("unorderList");
21135
21156
  this.taskConfig.active = inTask;
21136
21157
  this.taskConfig.disabled = hasPreStyle || hasTable || extraDisabled("task");
21137
- this.boldConfig.active = this.$parent.queryTextStyle("font-weight", "bold");
21158
+ this.boldConfig.active = this.$parent.queryTextStyle("font-weight", "bold", true);
21138
21159
  this.boldConfig.disabled = hasPreStyle || extraDisabled("bold");
21139
21160
  this.underlineConfig.active = this.$parent.queryTextStyle("text-decoration", "underline", true);
21140
21161
  this.underlineConfig.disabled = hasPreStyle || extraDisabled("underline");
@@ -21142,7 +21163,7 @@ const _sfc_main$1 = {
21142
21163
  this.italicConfig.disabled = hasPreStyle || extraDisabled("italic");
21143
21164
  this.strikethroughConfig.active = this.$parent.queryTextStyle("text-decoration", "line-through", true);
21144
21165
  this.strikethroughConfig.disabled = hasPreStyle || extraDisabled("strikethrough");
21145
- this.codeConfig.active = this.$parent.queryTextMark("data-editify-code");
21166
+ this.codeConfig.active = this.$parent.queryTextMark("data-editify-code", null, true);
21146
21167
  this.codeConfig.disabled = hasPreStyle || extraDisabled("code");
21147
21168
  this.superConfig.active = this.$parent.queryTextStyle("vertical-align", "super", true);
21148
21169
  this.superConfig.disabled = hasPreStyle || extraDisabled("super");
@@ -21208,7 +21229,7 @@ const _sfc_main$1 = {
21208
21229
  this.imageConfig.disabled = hasPreStyle || extraDisabled("image");
21209
21230
  this.videoConfig.disabled = hasPreStyle || extraDisabled("video");
21210
21231
  this.tableConfig.disabled = hasPreStyle || hasTable || hasQuote || extraDisabled("table");
21211
- this.codeBlockConfig.active = !!this.$parent.getCurrentParsedomElement("pre");
21232
+ this.codeBlockConfig.active = !!this.$parent.getCurrentParsedomElement("pre", true);
21212
21233
  this.codeBlockConfig.disabled = hasTable || hasQuote || extraDisabled("codeBlock");
21213
21234
  this.sourceViewConfig.active = this.$parent.isSourceView;
21214
21235
  }
@@ -21230,8 +21251,8 @@ function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {
21230
21251
  }), 256))
21231
21252
  ], 14, _hoisted_1$1);
21232
21253
  }
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 = "";
21254
+ const Menu = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["render", _sfc_render$1], ["__scopeId", "data-v-da918768"]]);
21255
+ const Editify_vue_vue_type_style_index_0_scoped_3f1c784c_lang = "";
21235
21256
  const _sfc_main = {
21236
21257
  name: "editify",
21237
21258
  props: { ...editorProps },
@@ -21268,8 +21289,8 @@ const _sfc_main = {
21268
21289
  //类型
21269
21290
  type: "text"
21270
21291
  },
21271
- //toolbar显示延时器
21272
- toolbarTime: null,
21292
+ //rangeUpdate更新延时器
21293
+ updateTimer: null,
21273
21294
  //菜单栏是否可以使用标识
21274
21295
  canUseMenu: false
21275
21296
  };
@@ -21430,76 +21451,71 @@ const _sfc_main = {
21430
21451
  removeScroll(this.$refs.content);
21431
21452
  },
21432
21453
  //工具条显示判断
21433
- handleToolbar() {
21454
+ handleToolbar(useCache = false) {
21434
21455
  if (this.disabled || this.isSourceView) {
21435
21456
  return;
21436
21457
  }
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}"]`;
21458
+ this.hideToolbar();
21459
+ this.$nextTick(() => {
21460
+ const table = this.getCurrentParsedomElement("table", useCache);
21461
+ const pre = this.getCurrentParsedomElement("pre", true);
21462
+ const link = this.getCurrentParsedomElement("a", true);
21463
+ const image = this.getCurrentParsedomElement("img", true);
21464
+ const video = this.getCurrentParsedomElement("video", true);
21465
+ if (link) {
21466
+ this.toolbarOptions.type = "link";
21467
+ this.toolbarOptions.node = `[data-editify-uid="${this.uid}"] [data-editify-element="${link.key}"]`;
21468
+ if (this.toolbarOptions.show) {
21469
+ this.$refs.toolbar.$refs.layer.setPosition();
21470
+ } else {
21471
+ this.toolbarOptions.show = true;
21472
+ }
21473
+ } else if (image) {
21474
+ this.toolbarOptions.type = "image";
21475
+ this.toolbarOptions.node = `[data-editify-uid="${this.uid}"] [data-editify-element="${image.key}"]`;
21476
+ if (this.toolbarOptions.show) {
21477
+ this.$refs.toolbar.$refs.layer.setPosition();
21478
+ } else {
21479
+ this.toolbarOptions.show = true;
21480
+ }
21481
+ } else if (video) {
21482
+ this.toolbarOptions.type = "video";
21483
+ this.toolbarOptions.node = `[data-editify-uid="${this.uid}"] [data-editify-element="${video.key}"]`;
21484
+ if (this.toolbarOptions.show) {
21485
+ this.$refs.toolbar.$refs.layer.setPosition();
21486
+ } else {
21487
+ this.toolbarOptions.show = true;
21488
+ }
21489
+ } else if (table) {
21490
+ this.toolbarOptions.type = "table";
21491
+ this.toolbarOptions.node = `[data-editify-uid="${this.uid}"] [data-editify-element="${table.key}"]`;
21492
+ if (this.toolbarOptions.show) {
21493
+ this.$refs.toolbar.$refs.layer.setPosition();
21494
+ } else {
21495
+ this.toolbarOptions.show = true;
21496
+ }
21497
+ } else if (pre) {
21498
+ this.toolbarOptions.type = "codeBlock";
21499
+ this.toolbarOptions.node = `[data-editify-uid="${this.uid}"] [data-editify-element="${pre.key}"]`;
21500
+ if (this.toolbarOptions.show) {
21501
+ this.$refs.toolbar.$refs.layer.setPosition();
21502
+ } else {
21503
+ this.toolbarOptions.show = true;
21504
+ }
21505
+ } else {
21506
+ const result = this.editor.getElementsByRange(true).flatIncludes.filter((item) => {
21507
+ return item.element.isText();
21508
+ });
21509
+ if (result.length && !this.hasTable(true) && !this.hasPreStyle(true) && !this.hasLink(true) && !this.hasImage(true) && !this.hasVideo(true)) {
21510
+ this.toolbarOptions.type = "text";
21483
21511
  if (this.toolbarOptions.show) {
21484
21512
  this.$refs.toolbar.$refs.layer.setPosition();
21485
21513
  } else {
21486
21514
  this.toolbarOptions.show = true;
21487
21515
  }
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
21516
  }
21501
- });
21502
- }, 200);
21517
+ }
21518
+ });
21503
21519
  },
21504
21520
  //重新定义编辑器合并元素的逻辑
21505
21521
  handleCustomMerge(ele, preEle) {
@@ -21741,17 +21757,25 @@ const _sfc_main = {
21741
21757
  this.$emit("insertparagraph", this.value);
21742
21758
  },
21743
21759
  //编辑器焦点更新
21744
- handleRangeUpdate(range) {
21760
+ handleRangeUpdate() {
21745
21761
  if (this.disabled) {
21746
21762
  return;
21747
21763
  }
21748
- if (this.toolbarConfig.use) {
21749
- this.handleToolbar();
21750
- }
21751
- if (this.menuConfig.use) {
21752
- this.$refs.menu.handleRangeUpdate();
21764
+ if (this.updateTimer) {
21765
+ clearTimeout(this.updateTimer);
21753
21766
  }
21754
- this.$emit("rangeupdate", this.value, range);
21767
+ this.updateTimer = setTimeout(() => {
21768
+ if (this.toolbarConfig.use || this.menuConfig.use) {
21769
+ this.editor.getElementsByRange();
21770
+ if (this.toolbarConfig.use) {
21771
+ this.handleToolbar(true);
21772
+ }
21773
+ if (this.menuConfig.use) {
21774
+ this.$refs.menu.handleRangeUpdate(true);
21775
+ }
21776
+ }
21777
+ }, 200);
21778
+ this.$emit("rangeupdate", this.value);
21755
21779
  },
21756
21780
  //编辑器复制
21757
21781
  handleCopy(text2, html) {
@@ -21766,7 +21790,7 @@ const _sfc_main = {
21766
21790
  this.$emit("paste-text", data2);
21767
21791
  },
21768
21792
  //编辑器粘贴html
21769
- handlePasteHtml(elements, data2) {
21793
+ handlePasteHtml(elements) {
21770
21794
  const keepStyles = Object.assign(pasteKeepData.styles, this.pasteKeepStyles || {});
21771
21795
  const keepMarks = Object.assign(pasteKeepData.marks, this.pasteKeepMarks || {});
21772
21796
  AlexElement.flatElements(elements).forEach((el) => {
@@ -21866,7 +21890,7 @@ const _sfc_main = {
21866
21890
  return this.getParsedomElementByElement(element2.parent, parsedom);
21867
21891
  },
21868
21892
  //api:获取光标是否在指定标签元素下,如果是返回该标签元素,否则返回null
21869
- getCurrentParsedomElement(parsedom) {
21893
+ getCurrentParsedomElement(parsedom, useCache = false) {
21870
21894
  if (this.disabled) {
21871
21895
  return null;
21872
21896
  }
@@ -21876,7 +21900,7 @@ const _sfc_main = {
21876
21900
  if (this.editor.range.anchor.element.isEqual(this.editor.range.focus.element)) {
21877
21901
  return this.getParsedomElementByElement(this.editor.range.anchor.element, parsedom);
21878
21902
  }
21879
- const arr = this.editor.getElementsByRange(true, false).map((item) => {
21903
+ const arr = this.editor.getElementsByRange(useCache).includes.map((item) => {
21880
21904
  return this.getParsedomElementByElement(item.element, parsedom);
21881
21905
  });
21882
21906
  let hasNull = arr.some((el) => {
@@ -21901,14 +21925,14 @@ const _sfc_main = {
21901
21925
  return null;
21902
21926
  },
21903
21927
  //api:删除光标所在的指定标签元素
21904
- deleteByParsedom(parsedom, isRender = true) {
21928
+ deleteByParsedom(parsedom, isRender = true, useCache = false) {
21905
21929
  if (this.disabled) {
21906
21930
  return;
21907
21931
  }
21908
21932
  if (!this.editor.range) {
21909
21933
  return;
21910
21934
  }
21911
- const element2 = this.getCurrentParsedomElement(parsedom);
21935
+ const element2 = this.getCurrentParsedomElement(parsedom, useCache);
21912
21936
  if (element2) {
21913
21937
  element2.toEmpty();
21914
21938
  if (isRender) {
@@ -21919,14 +21943,14 @@ const _sfc_main = {
21919
21943
  }
21920
21944
  },
21921
21945
  //api:当光标在链接上时可以移除链接
21922
- removeLink(isRender = true) {
21946
+ removeLink(isRender = true, useCache = false) {
21923
21947
  if (this.disabled) {
21924
21948
  return;
21925
21949
  }
21926
21950
  if (!this.editor.range) {
21927
21951
  return;
21928
21952
  }
21929
- const link = this.getCurrentParsedomElement("a");
21953
+ const link = this.getCurrentParsedomElement("a", useCache);
21930
21954
  if (link) {
21931
21955
  link.parsedom = AlexElement.TEXT_NODE;
21932
21956
  delete link.marks.target;
@@ -21939,7 +21963,7 @@ const _sfc_main = {
21939
21963
  }
21940
21964
  },
21941
21965
  //api:设置标题
21942
- setHeading(parsedom, isRender = true) {
21966
+ setHeading(parsedom, isRender = true, useCache = false) {
21943
21967
  if (this.disabled) {
21944
21968
  return;
21945
21969
  }
@@ -21957,7 +21981,7 @@ const _sfc_main = {
21957
21981
  blockToParagraph(block);
21958
21982
  block.parsedom = parsedom;
21959
21983
  } else {
21960
- const result = this.editor.getElementsByRange(true, false);
21984
+ const result = this.editor.getElementsByRange(useCache).includes;
21961
21985
  result.forEach((el) => {
21962
21986
  if (el.element.isBlock()) {
21963
21987
  blockToParagraph(el.element);
@@ -21976,7 +22000,7 @@ const _sfc_main = {
21976
22000
  }
21977
22001
  },
21978
22002
  //api:插入有序列表 ordered为true表示有序列表
21979
- setList(ordered, isRender = true) {
22003
+ setList(ordered, isRender = true, useCache = false) {
21980
22004
  if (this.disabled) {
21981
22005
  return;
21982
22006
  }
@@ -21993,7 +22017,7 @@ const _sfc_main = {
21993
22017
  }
21994
22018
  } else {
21995
22019
  let blocks = [];
21996
- const result = this.editor.getElementsByRange(true, false);
22020
+ const result = this.editor.getElementsByRange(useCache).includes;
21997
22021
  result.forEach((item) => {
21998
22022
  const block = item.element.getBlock();
21999
22023
  const exist = blocks.some((el) => block.isEqual(el));
@@ -22017,7 +22041,7 @@ const _sfc_main = {
22017
22041
  }
22018
22042
  },
22019
22043
  //api:插入任务列表
22020
- setTask(isRender = true) {
22044
+ setTask(isRender = true, useCache = false) {
22021
22045
  if (this.disabled) {
22022
22046
  return;
22023
22047
  }
@@ -22034,7 +22058,7 @@ const _sfc_main = {
22034
22058
  }
22035
22059
  } else {
22036
22060
  let blocks = [];
22037
- const result = this.editor.getElementsByRange(true, false);
22061
+ const result = this.editor.getElementsByRange(useCache).includes;
22038
22062
  result.forEach((item) => {
22039
22063
  const block = item.element.getBlock();
22040
22064
  const exist = blocks.some((el) => block.isEqual(el));
@@ -22058,20 +22082,20 @@ const _sfc_main = {
22058
22082
  }
22059
22083
  },
22060
22084
  //api:设置样式
22061
- setTextStyle(name, value, isRender = true) {
22085
+ setTextStyle(name, value, isRender = true, useCache = false) {
22062
22086
  if (this.disabled) {
22063
22087
  return;
22064
22088
  }
22065
22089
  if (!this.editor.range) {
22066
22090
  return;
22067
22091
  }
22068
- const active = this.queryTextStyle(name, value);
22092
+ const active = this.queryTextStyle(name, value, useCache);
22069
22093
  if (active) {
22070
- this.editor.removeTextStyle([name]);
22094
+ this.editor.removeTextStyle([name], true);
22071
22095
  } else {
22072
22096
  let styles = {};
22073
22097
  styles[name] = value;
22074
- this.editor.setTextStyle(styles);
22098
+ this.editor.setTextStyle(styles, true);
22075
22099
  }
22076
22100
  if (isRender) {
22077
22101
  this.editor.formatElementStack();
@@ -22080,24 +22104,24 @@ const _sfc_main = {
22080
22104
  }
22081
22105
  },
22082
22106
  //api:查询是否具有某个样式
22083
- queryTextStyle(name, value, useCache) {
22107
+ queryTextStyle(name, value, useCache = false) {
22084
22108
  return this.editor.queryTextStyle(name, value, useCache);
22085
22109
  },
22086
22110
  //api:设置标记
22087
- setTextMark(name, value, isRender = true) {
22111
+ setTextMark(name, value, isRender = true, useCache = false) {
22088
22112
  if (this.disabled) {
22089
22113
  return;
22090
22114
  }
22091
22115
  if (!this.editor.range) {
22092
22116
  return;
22093
22117
  }
22094
- const active = this.queryTextMark(name, value);
22118
+ const active = this.queryTextMark(name, value, useCache);
22095
22119
  if (active) {
22096
- this.editor.removeTextMark([name]);
22120
+ this.editor.removeTextMark([name], true);
22097
22121
  } else {
22098
22122
  let marks = {};
22099
22123
  marks[name] = value;
22100
- this.editor.setTextMark(marks);
22124
+ this.editor.setTextMark(marks, true);
22101
22125
  }
22102
22126
  if (isRender) {
22103
22127
  this.editor.formatElementStack();
@@ -22106,19 +22130,19 @@ const _sfc_main = {
22106
22130
  }
22107
22131
  },
22108
22132
  //api:查询是否具有某个标记
22109
- queryTextMark(name, value, useCache) {
22133
+ queryTextMark(name, value, useCache = false) {
22110
22134
  return this.editor.queryTextMark(name, value, useCache);
22111
22135
  },
22112
22136
  //api:清除文本样式和标记
22113
- formatText(isRender = true) {
22137
+ formatText(isRender = true, useCache = false) {
22114
22138
  if (this.disabled) {
22115
22139
  return;
22116
22140
  }
22117
22141
  if (!this.editor.range) {
22118
22142
  return;
22119
22143
  }
22120
- this.editor.removeTextStyle();
22121
- this.editor.removeTextMark();
22144
+ this.editor.removeTextStyle(null, useCache);
22145
+ this.editor.removeTextMark(null);
22122
22146
  if (isRender) {
22123
22147
  this.editor.formatElementStack();
22124
22148
  this.editor.domRender();
@@ -22126,7 +22150,7 @@ const _sfc_main = {
22126
22150
  }
22127
22151
  },
22128
22152
  //api:设置对齐方式,参数取值justify/left/right/center
22129
- setAlign(value, isRender = true) {
22153
+ setAlign(value, isRender = true, useCache = false) {
22130
22154
  if (this.disabled) {
22131
22155
  return;
22132
22156
  }
@@ -22154,7 +22178,7 @@ const _sfc_main = {
22154
22178
  }
22155
22179
  }
22156
22180
  } else {
22157
- const result = this.editor.getElementsByRange(true, false);
22181
+ const result = this.editor.getElementsByRange(useCache).includes;
22158
22182
  result.forEach((el) => {
22159
22183
  if (el.element.isBlock() || el.element.isInblock()) {
22160
22184
  if (el.element.hasStyles()) {
@@ -22224,7 +22248,7 @@ const _sfc_main = {
22224
22248
  }
22225
22249
  },
22226
22250
  //api:插入引用
22227
- setQuote(isRender = true) {
22251
+ setQuote(isRender = true, useCache = false) {
22228
22252
  if (this.disabled) {
22229
22253
  return;
22230
22254
  }
@@ -22240,7 +22264,7 @@ const _sfc_main = {
22240
22264
  }
22241
22265
  } else {
22242
22266
  let blocks = [];
22243
- const result = this.editor.getElementsByRange(true, false);
22267
+ const result = this.editor.getElementsByRange(useCache).includes;
22244
22268
  result.forEach((item) => {
22245
22269
  const block = item.element.getBlock();
22246
22270
  const exist = blocks.some((el) => block.isEqual(el));
@@ -22263,7 +22287,7 @@ const _sfc_main = {
22263
22287
  }
22264
22288
  },
22265
22289
  //api:设置行高
22266
- setLineHeight(value, isRender = true) {
22290
+ setLineHeight(value, isRender = true, useCache = false) {
22267
22291
  if (this.disabled) {
22268
22292
  return;
22269
22293
  }
@@ -22291,7 +22315,7 @@ const _sfc_main = {
22291
22315
  }
22292
22316
  }
22293
22317
  } else {
22294
- const result = this.editor.getElementsByRange(true, false);
22318
+ const result = this.editor.getElementsByRange(useCache).includes;
22295
22319
  result.forEach((el) => {
22296
22320
  if (el.element.isBlock() || el.element.isInblock()) {
22297
22321
  if (el.element.hasStyles()) {
@@ -22331,7 +22355,7 @@ const _sfc_main = {
22331
22355
  }
22332
22356
  },
22333
22357
  //api:增加缩进
22334
- setIndentIncrease(isRender = true) {
22358
+ setIndentIncrease(isRender = true, useCache = false) {
22335
22359
  if (this.disabled) {
22336
22360
  return;
22337
22361
  }
@@ -22366,7 +22390,7 @@ const _sfc_main = {
22366
22390
  fn(block);
22367
22391
  }
22368
22392
  } else {
22369
- const result = this.editor.getElementsByRange(true, false);
22393
+ const result = this.editor.getElementsByRange(useCache).includes;
22370
22394
  result.forEach((item) => {
22371
22395
  const block = item.element.getBlock();
22372
22396
  const inblock = item.element.getInblock();
@@ -22384,7 +22408,7 @@ const _sfc_main = {
22384
22408
  }
22385
22409
  },
22386
22410
  //api:减少缩进
22387
- setIndentDecrease(isRender = true) {
22411
+ setIndentDecrease(isRender = true, useCache = false) {
22388
22412
  if (this.disabled) {
22389
22413
  return;
22390
22414
  }
@@ -22411,7 +22435,7 @@ const _sfc_main = {
22411
22435
  fn(block);
22412
22436
  }
22413
22437
  } else {
22414
- const result = this.editor.getElementsByRange(true, false);
22438
+ const result = this.editor.getElementsByRange(useCache).includes;
22415
22439
  result.forEach((item) => {
22416
22440
  const block = item.element.getBlock();
22417
22441
  const inblock = item.element.getInblock();
@@ -22429,7 +22453,7 @@ const _sfc_main = {
22429
22453
  }
22430
22454
  },
22431
22455
  //api:插入图片
22432
- insertImage(url2, isRender = true) {
22456
+ insertImage(url2, isRender = true, useCache = false) {
22433
22457
  if (this.disabled) {
22434
22458
  return;
22435
22459
  }
@@ -22448,7 +22472,7 @@ const _sfc_main = {
22448
22472
  null,
22449
22473
  null
22450
22474
  );
22451
- this.editor.insertElement(image);
22475
+ this.editor.insertElement(image, true, useCache);
22452
22476
  if (isRender) {
22453
22477
  this.editor.formatElementStack();
22454
22478
  this.editor.domRender();
@@ -22456,7 +22480,7 @@ const _sfc_main = {
22456
22480
  }
22457
22481
  },
22458
22482
  //api:插入视频
22459
- insertVideo(url2, isRender = true) {
22483
+ insertVideo(url2, isRender = true, useCache = false) {
22460
22484
  if (this.disabled) {
22461
22485
  return;
22462
22486
  }
@@ -22475,7 +22499,7 @@ const _sfc_main = {
22475
22499
  null,
22476
22500
  null
22477
22501
  );
22478
- this.editor.insertElement(video);
22502
+ this.editor.insertElement(video, true, useCache);
22479
22503
  const leftSpace = AlexElement.getSpaceElement();
22480
22504
  const rightSpace = AlexElement.getSpaceElement();
22481
22505
  this.editor.addElementAfter(rightSpace, video);
@@ -22489,20 +22513,20 @@ const _sfc_main = {
22489
22513
  }
22490
22514
  },
22491
22515
  //api:选区是否含有代码块样式
22492
- hasPreStyle() {
22516
+ hasPreStyle(useCache = false) {
22493
22517
  if (!this.editor.range) {
22494
22518
  return false;
22495
22519
  }
22496
22520
  if (this.editor.range.anchor.isEqual(this.editor.range.focus)) {
22497
22521
  return this.editor.range.anchor.element.isPreStyle();
22498
22522
  }
22499
- const result = this.editor.getElementsByRange(true, false);
22523
+ const result = this.editor.getElementsByRange(useCache).includes;
22500
22524
  return result.some((item) => {
22501
22525
  return item.element.isPreStyle();
22502
22526
  });
22503
22527
  },
22504
22528
  //api:选区是否含有引用
22505
- hasQuote() {
22529
+ hasQuote(useCache = false) {
22506
22530
  if (!this.editor.range) {
22507
22531
  return false;
22508
22532
  }
@@ -22510,7 +22534,7 @@ const _sfc_main = {
22510
22534
  const block = this.editor.range.anchor.element.getBlock();
22511
22535
  return block.parsedom == "blockquote";
22512
22536
  }
22513
- const result = this.editor.getElementsByRange(true, false);
22537
+ const result = this.editor.getElementsByRange(useCache).includes;
22514
22538
  return result.some((item) => {
22515
22539
  if (item.element.isBlock()) {
22516
22540
  return item.element.parsedom == "blockquote";
@@ -22521,7 +22545,7 @@ const _sfc_main = {
22521
22545
  });
22522
22546
  },
22523
22547
  //api:选区是否含有列表
22524
- hasList(ordered = false) {
22548
+ hasList(ordered = false, useCache = false) {
22525
22549
  if (!this.editor.range) {
22526
22550
  return false;
22527
22551
  }
@@ -22529,7 +22553,7 @@ const _sfc_main = {
22529
22553
  const block = this.editor.range.anchor.element.getBlock();
22530
22554
  return blockIsList(block, ordered);
22531
22555
  }
22532
- const result = this.editor.getElementsByRange(true, false);
22556
+ const result = this.editor.getElementsByRange(useCache).includes;
22533
22557
  return result.some((item) => {
22534
22558
  if (item.element.isBlock()) {
22535
22559
  return blockIsList(item.element, ordered);
@@ -22540,14 +22564,14 @@ const _sfc_main = {
22540
22564
  });
22541
22565
  },
22542
22566
  //api:选区是否含有链接
22543
- hasLink() {
22567
+ hasLink(useCache = false) {
22544
22568
  if (!this.editor.range) {
22545
22569
  return false;
22546
22570
  }
22547
22571
  if (this.editor.range.anchor.isEqual(this.editor.range.focus)) {
22548
22572
  return !!this.getParsedomElementByElement(this.editor.range.anchor.element, "a");
22549
22573
  }
22550
- const result = this.editor.getElementsByRange(true, true).filter((item) => {
22574
+ const result = this.editor.getElementsByRange(useCache).flatIncludes.filter((item) => {
22551
22575
  return item.element.isText();
22552
22576
  });
22553
22577
  return result.some((item) => {
@@ -22555,7 +22579,7 @@ const _sfc_main = {
22555
22579
  });
22556
22580
  },
22557
22581
  //api:选区是否含有表格
22558
- hasTable() {
22582
+ hasTable(useCache = false) {
22559
22583
  if (!this.editor.range) {
22560
22584
  return false;
22561
22585
  }
@@ -22563,7 +22587,7 @@ const _sfc_main = {
22563
22587
  const block = this.editor.range.anchor.element.getBlock();
22564
22588
  return block.parsedom == "table";
22565
22589
  }
22566
- const result = this.editor.getElementsByRange(true, false);
22590
+ const result = this.editor.getElementsByRange(useCache).includes;
22567
22591
  return result.some((item) => {
22568
22592
  if (item.element.isBlock()) {
22569
22593
  return item.element.parsedom == "table";
@@ -22574,7 +22598,7 @@ const _sfc_main = {
22574
22598
  });
22575
22599
  },
22576
22600
  //api:选区是否含有任务列表
22577
- hasTask() {
22601
+ hasTask(useCache = false) {
22578
22602
  if (!this.editor.range) {
22579
22603
  return false;
22580
22604
  }
@@ -22582,7 +22606,7 @@ const _sfc_main = {
22582
22606
  const block = this.editor.range.anchor.element.getBlock();
22583
22607
  return blockIsTask(block);
22584
22608
  }
22585
- const result = this.editor.getElementsByRange(true, false);
22609
+ const result = this.editor.getElementsByRange(useCache).includes;
22586
22610
  return result.some((item) => {
22587
22611
  if (item.element.isBlock()) {
22588
22612
  return blockIsTask(item.element);
@@ -22593,33 +22617,33 @@ const _sfc_main = {
22593
22617
  });
22594
22618
  },
22595
22619
  //api:选区是否含有图片
22596
- hasImage() {
22620
+ hasImage(useCache = false) {
22597
22621
  if (!this.editor.range) {
22598
22622
  return false;
22599
22623
  }
22600
22624
  if (this.editor.range.anchor.isEqual(this.editor.range.focus)) {
22601
22625
  return this.editor.range.anchor.element.isClosed() && this.editor.range.anchor.element.parsedom == "img";
22602
22626
  }
22603
- const result = this.editor.getElementsByRange(true, true);
22627
+ const result = this.editor.getElementsByRange(useCache).flatIncludes;
22604
22628
  return result.some((item) => {
22605
22629
  return item.element.isClosed() && item.element.parsedom == "img";
22606
22630
  });
22607
22631
  },
22608
22632
  //api:选区是否含有视频
22609
- hasVideo() {
22633
+ hasVideo(useCache = false) {
22610
22634
  if (!this.editor.range) {
22611
22635
  return false;
22612
22636
  }
22613
22637
  if (this.editor.range.anchor.isEqual(this.editor.range.focus)) {
22614
22638
  return this.editor.range.anchor.element.isClosed() && this.editor.range.anchor.element.parsedom == "video";
22615
22639
  }
22616
- const result = this.editor.getElementsByRange(true, true);
22640
+ const result = this.editor.getElementsByRange(useCache).flatIncludes;
22617
22641
  return result.some((item) => {
22618
22642
  return item.element.isClosed() && item.element.parsedom == "video";
22619
22643
  });
22620
22644
  },
22621
22645
  //api:选区是否全部在引用内
22622
- inQuote() {
22646
+ inQuote(useCache = false) {
22623
22647
  if (!this.editor.range) {
22624
22648
  return false;
22625
22649
  }
@@ -22627,7 +22651,7 @@ const _sfc_main = {
22627
22651
  const block = this.editor.range.anchor.element.getBlock();
22628
22652
  return block.parsedom == "blockquote";
22629
22653
  }
22630
- const result = this.editor.getElementsByRange(true, false);
22654
+ const result = this.editor.getElementsByRange(useCache).includes;
22631
22655
  return result.every((item) => {
22632
22656
  if (item.element.isBlock()) {
22633
22657
  return item.element.parsedom == "blockquote";
@@ -22638,7 +22662,7 @@ const _sfc_main = {
22638
22662
  });
22639
22663
  },
22640
22664
  //api:选区是否全部在列表内
22641
- inList(ordered = false) {
22665
+ inList(ordered = false, useCache = false) {
22642
22666
  if (!this.editor.range) {
22643
22667
  return false;
22644
22668
  }
@@ -22646,7 +22670,7 @@ const _sfc_main = {
22646
22670
  const block = this.editor.range.anchor.element.getBlock();
22647
22671
  return blockIsList(block, ordered);
22648
22672
  }
22649
- const result = this.editor.getElementsByRange(true, false);
22673
+ const result = this.editor.getElementsByRange(useCache).includes;
22650
22674
  return result.every((item) => {
22651
22675
  if (item.element.isBlock()) {
22652
22676
  return blockIsList(item.element, ordered);
@@ -22657,7 +22681,7 @@ const _sfc_main = {
22657
22681
  });
22658
22682
  },
22659
22683
  //api:选区是否全部在任务列表里
22660
- inTask() {
22684
+ inTask(useCache = false) {
22661
22685
  if (!this.editor.range) {
22662
22686
  return false;
22663
22687
  }
@@ -22665,7 +22689,7 @@ const _sfc_main = {
22665
22689
  const block = this.editor.range.anchor.element.getBlock();
22666
22690
  return blockIsTask(block);
22667
22691
  }
22668
- const result = this.editor.getElementsByRange(true, false);
22692
+ const result = this.editor.getElementsByRange(useCache).includes;
22669
22693
  return result.every((item) => {
22670
22694
  if (item.element.isBlock()) {
22671
22695
  return blockIsTask(item.element);
@@ -22676,7 +22700,7 @@ const _sfc_main = {
22676
22700
  });
22677
22701
  },
22678
22702
  //api:创建一个空的表格
22679
- insertTable(rowLength, colLength, isRender = true) {
22703
+ insertTable(rowLength, colLength, isRender = true, useCache = false) {
22680
22704
  if (this.disabled) {
22681
22705
  return;
22682
22706
  }
@@ -22696,7 +22720,7 @@ const _sfc_main = {
22696
22720
  }
22697
22721
  this.editor.addElementTo(row, tbody);
22698
22722
  }
22699
- this.editor.insertElement(table);
22723
+ this.editor.insertElement(table, true, useCache);
22700
22724
  const paragraph = new AlexElement("block", AlexElement.BLOCK_NODE, null, null, null);
22701
22725
  const breakEl = new AlexElement("closed", "br", null, null, null);
22702
22726
  this.editor.addElementTo(breakEl, paragraph);
@@ -22710,14 +22734,14 @@ const _sfc_main = {
22710
22734
  }
22711
22735
  },
22712
22736
  //api:插入代码块
22713
- insertCodeBlock(isRender = true) {
22737
+ insertCodeBlock(isRender = true, useCache = false) {
22714
22738
  if (this.disabled) {
22715
22739
  return;
22716
22740
  }
22717
22741
  if (!this.editor.range) {
22718
22742
  return;
22719
22743
  }
22720
- const pre = this.getCurrentParsedomElement("pre");
22744
+ const pre = this.getCurrentParsedomElement("pre", useCache);
22721
22745
  if (pre) {
22722
22746
  let content = "";
22723
22747
  AlexElement.flatElements(pre.children).filter((item) => {
@@ -22743,10 +22767,10 @@ const _sfc_main = {
22743
22767
  this.editor.addElementTo(breakEl, paragraph);
22744
22768
  this.editor.addElementAfter(paragraph, block);
22745
22769
  } else {
22746
- let result = this.editor.getElementsByRange(true, false);
22770
+ let result = this.editor.getElementsByRange(true).includes;
22747
22771
  this.editor.range.anchor.moveToStart(result[0].element.getBlock());
22748
22772
  this.editor.range.focus.moveToEnd(result[result.length - 1].element.getBlock());
22749
- const res = this.editor.getElementsByRange(true, true).filter((el) => el.element.isText());
22773
+ const res = this.editor.getElementsByRange(true).flatIncludes.filter((el) => el.element.isText());
22750
22774
  const obj2 = {};
22751
22775
  res.forEach((el) => {
22752
22776
  if (obj2[el.element.getBlock().key]) {
@@ -22788,14 +22812,14 @@ const _sfc_main = {
22788
22812
  }
22789
22813
  },
22790
22814
  //api:插入文本
22791
- insertText(text2, isRender = true) {
22815
+ insertText(text2, isRender = true, useCache = false) {
22792
22816
  if (this.disabled) {
22793
22817
  return;
22794
22818
  }
22795
22819
  if (!this.editor.range) {
22796
22820
  return;
22797
22821
  }
22798
- this.editor.insertText(text2);
22822
+ this.editor.insertText(text2, useCache);
22799
22823
  if (isRender) {
22800
22824
  this.editor.formatElementStack();
22801
22825
  this.editor.domRender();
@@ -22803,7 +22827,7 @@ const _sfc_main = {
22803
22827
  }
22804
22828
  },
22805
22829
  //api:插入html
22806
- insertHtml(html, isRender = true) {
22830
+ insertHtml(html, isRender = true, useCache = false) {
22807
22831
  if (this.disabled) {
22808
22832
  return;
22809
22833
  }
@@ -22812,7 +22836,7 @@ const _sfc_main = {
22812
22836
  }
22813
22837
  const elements = this.editor.parseHtml(html);
22814
22838
  for (let i = 0; i < elements.length; i++) {
22815
- this.editor.insertElement(elements[i], false);
22839
+ this.editor.insertElement(elements[i], false, i == 0 ? useCache : false);
22816
22840
  }
22817
22841
  if (isRender) {
22818
22842
  this.editor.formatElementStack();
@@ -22883,7 +22907,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
22883
22907
  ])) : createCommentVNode("", true)
22884
22908
  ]);
22885
22909
  }
22886
- const Editify = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-31c1a2aa"]]);
22910
+ const Editify = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-3f1c784c"]]);
22887
22911
  const iconfont = "";
22888
22912
  const en_US = {
22889
22913
  textWrapUp: "Up feed",
@@ -23064,7 +23088,7 @@ const i18n = (locale) => {
23064
23088
  return translations[locale][key];
23065
23089
  };
23066
23090
  };
23067
- const version = "0.0.46";
23091
+ const version = "0.0.48";
23068
23092
  const install = (app, props) => {
23069
23093
  const locale = (props ? props.locale : "zh_CN") || "zh_CN";
23070
23094
  app.provide("$editTrans", i18n(locale));