vue-editify 0.0.47 → 0.0.49

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/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,15 +3331,15 @@ class AlexEditor {
3277
3331
  this.__isInputChinese = false;
3278
3332
  this.__innerSelectionChange = false;
3279
3333
  this.__chineseInputTimer = null;
3280
- this.__rangeElementsCache = {
3281
- //includes和flat都是true
3282
- all: [],
3283
- //includes为true
3334
+ this.__getElementsByRangeData = {
3335
+ //起点和终点范围内的元素,但是不包含起点和终点所在的元素
3336
+ default: [],
3337
+ //起点和终点范围内的元素,但是包含起点和终点所在的元素
3284
3338
  includes: [],
3285
- //flat为true
3339
+ //起点和终点范围内的元素扁平化处理结果,不包含起点和终点所在的元素
3286
3340
  flat: [],
3287
- //includes和flat都是false
3288
- none: []
3341
+ //起点和终点范围内的元素扁平化处理结果,包含起点和终点所在的元素
3342
+ flatIncludes: []
3289
3343
  };
3290
3344
  this.disabled ? this.setDisabled() : this.setEnabled();
3291
3345
  obj$1.event.on(document, `selectionchange.alex_editor_${this.__guid}`, handleSelectionChange.bind(this));
@@ -3436,7 +3490,7 @@ class AlexEditor {
3436
3490
  const result = await this.copy(true);
3437
3491
  if (result) {
3438
3492
  if (!this.disabled) {
3439
- this.delete();
3493
+ this.delete(true);
3440
3494
  }
3441
3495
  this.emit("cut", result.text, result.html);
3442
3496
  }
@@ -3456,7 +3510,7 @@ class AlexEditor {
3456
3510
  if (!this.allowCopy) {
3457
3511
  return;
3458
3512
  }
3459
- let result = this.getElementsByRange(true, false);
3513
+ let result = this.getElementsByRange().includes;
3460
3514
  if (result.length == 0) {
3461
3515
  return;
3462
3516
  }
@@ -3484,7 +3538,7 @@ class AlexEditor {
3484
3538
  /**
3485
3539
  * 根据光标进行删除操作
3486
3540
  */
3487
- delete() {
3541
+ delete(useCache = false) {
3488
3542
  if (this.disabled) {
3489
3543
  return;
3490
3544
  }
@@ -3632,7 +3686,7 @@ class AlexEditor {
3632
3686
  }
3633
3687
  }
3634
3688
  } else {
3635
- const result = this.getElementsByRange(true, false).filter((item) => {
3689
+ const result = this.getElementsByRange(useCache).includes.filter((item) => {
3636
3690
  return !AlexElement.VOID_NODES.includes(item.element.parsedom);
3637
3691
  });
3638
3692
  const anchorInblock = this.range.anchor.element.getInblock();
@@ -3750,7 +3804,7 @@ class AlexEditor {
3750
3804
  /**
3751
3805
  * 根据光标位置向编辑器内插入文本
3752
3806
  */
3753
- insertText(data2) {
3807
+ insertText(data2, useCache = false) {
3754
3808
  if (this.disabled) {
3755
3809
  return;
3756
3810
  }
@@ -3784,14 +3838,14 @@ class AlexEditor {
3784
3838
  this.range.focus.moveToEnd(textEl);
3785
3839
  }
3786
3840
  } else {
3787
- this.delete();
3841
+ this.delete(useCache);
3788
3842
  this.insertText(data2);
3789
3843
  }
3790
3844
  }
3791
3845
  /**
3792
3846
  * 在光标处换行
3793
3847
  */
3794
- insertParagraph() {
3848
+ insertParagraph(useCache = false) {
3795
3849
  if (this.disabled) {
3796
3850
  return;
3797
3851
  }
@@ -3887,7 +3941,7 @@ class AlexEditor {
3887
3941
  }
3888
3942
  }
3889
3943
  } else {
3890
- this.delete();
3944
+ this.delete(useCache);
3891
3945
  this.insertParagraph();
3892
3946
  }
3893
3947
  }
@@ -3895,7 +3949,7 @@ class AlexEditor {
3895
3949
  * 根据光标插入元素
3896
3950
  * cover表示所在根级块或者内部块元素只有换行符时是否覆盖此元素
3897
3951
  */
3898
- insertElement(ele, cover = true) {
3952
+ insertElement(ele, cover = true, useCache = false) {
3899
3953
  if (this.disabled) {
3900
3954
  return;
3901
3955
  }
@@ -4029,7 +4083,7 @@ class AlexEditor {
4029
4083
  this.range.anchor.moveToEnd(ele);
4030
4084
  this.range.focus.moveToEnd(ele);
4031
4085
  } else {
4032
- this.delete();
4086
+ this.delete(useCache);
4033
4087
  this.insertElement(ele, cover);
4034
4088
  }
4035
4089
  }
@@ -4437,137 +4491,86 @@ class AlexEditor {
4437
4491
  /**
4438
4492
  * 获取选区之间的元素
4439
4493
  */
4440
- getElementsByRange(includes = false, flat = false, useCache = 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
+ };
4441
4508
  if (!this.range) {
4442
- return [];
4509
+ this.__getElementsByRangeData = result;
4510
+ return result;
4443
4511
  }
4444
4512
  if (this.range.anchor.isEqual(this.range.focus)) {
4445
- return [];
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 || [];
4513
+ this.__getElementsByRangeData = result;
4514
+ return result;
4458
4515
  }
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
- };
4471
4516
  if (this.range.anchor.element.isEqual(this.range.focus.element)) {
4472
- if (includes) {
4473
- const isCover = this.range.anchor.offset == 0 && this.range.focus.offset == (this.range.anchor.element.isText() ? this.range.anchor.element.textContent.length : 1);
4474
- return setRangeElementsCache([
4475
- {
4476
- element: this.range.anchor.element,
4477
- offset: isCover ? false : [this.range.anchor.offset, this.range.focus.offset]
4478
- }
4479
- ]);
4480
- }
4481
- return setRangeElementsCache();
4482
- }
4483
- let result = [];
4484
- if (includes) {
4485
- if (this.range.anchor.offset == 0) {
4486
- 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
+ {
4487
4520
  element: this.range.anchor.element,
4488
- offset: false
4489
- });
4490
- } else if (this.range.anchor.offset < (this.range.anchor.element.isText() ? this.range.anchor.element.textContent.length : 1)) {
4491
- result.push({
4521
+ offset: isCover ? false : [this.range.anchor.offset, this.range.focus.offset]
4522
+ }
4523
+ ];
4524
+ result.flatIncludes = [
4525
+ {
4492
4526
  element: this.range.anchor.element,
4493
- offset: [this.range.anchor.offset, this.range.anchor.element.isText() ? this.range.anchor.element.textContent.length : 1]
4494
- });
4495
- }
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
+ });
4496
4543
  }
4497
4544
  const elements = AlexElement.flatElements(this.stack);
4498
4545
  const anchorIndex = elements.findIndex((el) => el.isEqual(this.range.anchor.element));
4499
4546
  const focusIndex = elements.findIndex((el) => el.isEqual(this.range.focus.element));
4500
4547
  for (let i = anchorIndex + 1; i < focusIndex; i++) {
4501
- result.push({
4548
+ result.flatIncludes.push({
4549
+ element: elements[i],
4550
+ offset: false
4551
+ });
4552
+ result.flat.push({
4502
4553
  element: elements[i],
4503
4554
  offset: false
4504
4555
  });
4505
4556
  }
4506
- if (includes) {
4507
- if (this.range.focus.offset == (this.range.focus.element.isText() ? this.range.focus.element.textContent.length : 1)) {
4508
- result.push({
4509
- element: this.range.focus.element,
4510
- offset: false
4511
- });
4512
- } else if (this.range.focus.offset > 0) {
4513
- result.push({
4514
- element: this.range.focus.element,
4515
- offset: [0, this.range.focus.offset]
4516
- });
4517
- }
4518
- }
4519
- const resLength = result.length;
4520
- let newResult = [];
4521
- for (let i = resLength - 1; i >= 0; i--) {
4522
- if (result[i].element.hasChildren()) {
4523
- let allIn = result[i].element.children.every((child) => {
4524
- return newResult.some((item) => {
4525
- return item.element.isEqual(child) && !item.offset;
4526
- });
4527
- });
4528
- if (allIn) {
4529
- newResult.unshift(result[i]);
4530
- }
4531
- } else {
4532
- newResult.unshift(result[i]);
4533
- }
4534
- }
4535
- for (let i = 0; i < newResult.length; i++) {
4536
- const element2 = newResult[i].element;
4537
- if (!element2.offset && element2.parent) {
4538
- const selfIn = newResult.some((item) => {
4539
- return item.element.isEqual(element2.parent);
4540
- });
4541
- const allIn = element2.parent.children.every((child) => {
4542
- return newResult.some((item) => {
4543
- return item.element.isEqual(child) && !item.offset;
4544
- });
4545
- });
4546
- if (allIn && !selfIn) {
4547
- newResult.splice(i, 0, {
4548
- element: element2.parent,
4549
- offset: false
4550
- });
4551
- i++;
4552
- }
4553
- }
4554
- }
4555
- if (flat) {
4556
- return setRangeElementsCache(newResult);
4557
- }
4558
- let notFlatResult = [];
4559
- const length = newResult.length;
4560
- for (let i = 0; i < length; i++) {
4561
- if (newResult[i].element.isBlock()) {
4562
- notFlatResult.push(newResult[i]);
4563
- } else {
4564
- const isIn = newResult.some((item) => item.element.isEqual(newResult[i].element.parent));
4565
- if (!isIn) {
4566
- notFlatResult.push(newResult[i]);
4567
- }
4568
- }
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
+ });
4569
4567
  }
4570
- return setRangeElementsCache(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;
4571
4574
  }
4572
4575
  /**
4573
4576
  * 分割选区选中的元素,会更新光标位置
@@ -4576,7 +4579,8 @@ class AlexEditor {
4576
4579
  if (!this.range) {
4577
4580
  return [];
4578
4581
  }
4579
- const result = this.getElementsByRange(includes, flat, useCache);
4582
+ const key = includes && flat ? "flatIncludes" : includes ? "includes" : flat ? "flat" : "default";
4583
+ const result = this.getElementsByRange(useCache)[key];
4580
4584
  let elements = [];
4581
4585
  result.forEach((item, index) => {
4582
4586
  if (item.offset) {
@@ -4871,7 +4875,7 @@ class AlexEditor {
4871
4875
  }
4872
4876
  return false;
4873
4877
  }
4874
- let result = this.getElementsByRange(true, true, useCache).filter((item) => {
4878
+ let result = this.getElementsByRange(useCache).flatIncludes.filter((item) => {
4875
4879
  return item.element.isText();
4876
4880
  });
4877
4881
  if (result.length == 0) {
@@ -4993,7 +4997,7 @@ class AlexEditor {
4993
4997
  }
4994
4998
  return false;
4995
4999
  }
4996
- let result = this.getElementsByRange(true, true, useCache).filter((item) => {
5000
+ let result = this.getElementsByRange(useCache).flatIncludes.filter((item) => {
4997
5001
  return item.element.isText();
4998
5002
  });
4999
5003
  if (result.length == 0) {
@@ -15366,7 +15370,7 @@ const editorProps = {
15366
15370
  },
15367
15371
  //编辑内容高度
15368
15372
  height: {
15369
- type: String,
15373
+ type: [String, Boolean],
15370
15374
  default: "600px"
15371
15375
  },
15372
15376
  //是否自适应高度
@@ -16156,7 +16160,8 @@ const getMenuConfig = function(editTrans, editLocale) {
16156
16160
  video: 24,
16157
16161
  table: 25,
16158
16162
  codeBlock: 26,
16159
- sourceView: 27
16163
+ sourceView: 27,
16164
+ fullScreen: 28
16160
16165
  },
16161
16166
  //撤销按钮配置
16162
16167
  undo: {
@@ -16486,6 +16491,15 @@ const getMenuConfig = function(editTrans, editLocale) {
16486
16491
  //右侧边框是否显示
16487
16492
  rightBorder: false
16488
16493
  },
16494
+ //全屏
16495
+ fullScreen: {
16496
+ //是否显示此工具
16497
+ show: true,
16498
+ //左侧边框是否显示
16499
+ leftBorder: false,
16500
+ //右侧边框是否显示
16501
+ rightBorder: false
16502
+ },
16489
16503
  //拓展菜单,每个key表示拓展菜单的唯一名称,value是对象,包含type/title/rightBorder/leftBorder/disabled/active/width/maxHeight/options/value/hideScroll/onLayerShow/onLayerShown/onLayerHidden/onOperate/default/layer/option属性
16490
16504
  extends: {}
16491
16505
  };
@@ -17583,8 +17597,8 @@ const _hoisted_4$6 = {
17583
17597
  key: 1,
17584
17598
  class: "editify-button-options"
17585
17599
  };
17586
- const _hoisted_5$6 = ["onClick"];
17587
- const _hoisted_6$6 = {
17600
+ const _hoisted_5$5 = ["onClick"];
17601
+ const _hoisted_6$5 = {
17588
17602
  key: 1,
17589
17603
  class: "editify-button-option-flex"
17590
17604
  };
@@ -17655,14 +17669,14 @@ function _sfc_render$9(_ctx, _cache, $props, $setup, $data, $options) {
17655
17669
  _ctx.$slots.option ? renderSlot(_ctx.$slots, "option", {
17656
17670
  key: 0,
17657
17671
  item
17658
- }, void 0, true) : (openBlock(), createElementBlock("div", _hoisted_6$6, [
17672
+ }, void 0, true) : (openBlock(), createElementBlock("div", _hoisted_6$5, [
17659
17673
  item.icon ? (openBlock(), createBlock(_component_Icon, {
17660
17674
  key: 0,
17661
17675
  value: item.icon
17662
17676
  }, null, 8, ["value"])) : createCommentVNode("", true),
17663
17677
  createElementVNode("span", null, toDisplayString(item.label), 1)
17664
17678
  ]))
17665
- ], 14, _hoisted_5$6);
17679
+ ], 14, _hoisted_5$5);
17666
17680
  }), 256))
17667
17681
  ]))
17668
17682
  ], 4)
@@ -17886,7 +17900,7 @@ function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {
17886
17900
  ]);
17887
17901
  }
17888
17902
  const Colors = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["render", _sfc_render$7], ["__scopeId", "data-v-dc6d3d68"]]);
17889
- const Toolbar_vue_vue_type_style_index_0_scoped_38c4144f_lang = "";
17903
+ const Toolbar_vue_vue_type_style_index_0_scoped_36dbd332_lang = "";
17890
17904
  const _sfc_main$6 = {
17891
17905
  name: "Toolbar",
17892
17906
  emits: ["update:modelValue"],
@@ -18161,80 +18175,80 @@ const _sfc_main$6 = {
18161
18175
  methods: {
18162
18176
  //清除格式
18163
18177
  clearFormat() {
18164
- this.$parent.formatText();
18178
+ this.$parent.formatText(true, true);
18165
18179
  },
18166
18180
  //设置背景色
18167
18181
  setBackColor(value) {
18168
- this.$parent.setTextStyle("background-color", value);
18182
+ this.$parent.setTextStyle("background-color", value, true, true);
18169
18183
  this.$refs.backColor.hideLayer();
18170
18184
  },
18171
18185
  //设置前景色
18172
18186
  setForeColor(value) {
18173
- this.$parent.setTextStyle("color", value);
18187
+ this.$parent.setTextStyle("color", value, true, true);
18174
18188
  this.$refs.foreColor.hideLayer();
18175
18189
  },
18176
18190
  //设置行高
18177
18191
  setLineHeight(name, value) {
18178
- this.$parent.setLineHeight(value);
18192
+ this.$parent.setLineHeight(value, true, true);
18179
18193
  },
18180
18194
  //设置字体
18181
18195
  setFontFamily(name, value) {
18182
- this.$parent.setTextStyle("font-family", value);
18196
+ this.$parent.setTextStyle("font-family", value, true, true);
18183
18197
  },
18184
18198
  //设置字号
18185
18199
  setFontSize(name, value) {
18186
- this.$parent.setTextStyle("font-size", value);
18200
+ this.$parent.setTextStyle("font-size", value, true, true);
18187
18201
  },
18188
18202
  //设置上标
18189
18203
  setSuperscript() {
18190
- this.$parent.setTextStyle("vertical-align", "super");
18204
+ this.$parent.setTextStyle("vertical-align", "super", true, true);
18191
18205
  },
18192
18206
  //设置下标
18193
18207
  setSubscript() {
18194
- this.$parent.setTextStyle("vertical-align", "sub");
18208
+ this.$parent.setTextStyle("vertical-align", "sub", true, true);
18195
18209
  },
18196
18210
  //设置行内代码样式
18197
18211
  setCodeStyle() {
18198
- this.$parent.setTextMark("data-editify-code", true);
18212
+ this.$parent.setTextMark("data-editify-code", true, true, true);
18199
18213
  },
18200
18214
  //设置下划线
18201
18215
  setUnderline() {
18202
- this.$parent.setTextStyle("text-decoration", "underline");
18216
+ this.$parent.setTextStyle("text-decoration", "underline", true, true);
18203
18217
  },
18204
18218
  //设置删除线
18205
18219
  setStrikethrough() {
18206
- this.$parent.setTextStyle("text-decoration", "line-through");
18220
+ this.$parent.setTextStyle("text-decoration", "line-through", true, true);
18207
18221
  },
18208
18222
  //设置列表
18209
18223
  setList(name) {
18210
- this.$parent.setList(name == "orderList");
18224
+ this.$parent.setList(name == "orderList", true, true);
18211
18225
  },
18212
18226
  //设置任务列表
18213
18227
  setTask() {
18214
- this.$parent.setTask();
18228
+ this.$parent.setTask(true, true);
18215
18229
  },
18216
18230
  //斜体
18217
18231
  setItalic() {
18218
- this.$parent.setTextStyle("font-style", "italic");
18232
+ this.$parent.setTextStyle("font-style", "italic", true, true);
18219
18233
  },
18220
18234
  //加粗
18221
18235
  setBold() {
18222
- this.$parent.setTextStyle("font-weight", "bold");
18236
+ this.$parent.setTextStyle("font-weight", "bold", true, true);
18223
18237
  },
18224
18238
  //设置标题
18225
18239
  setHeading(name, value) {
18226
- this.$parent.setHeading(value);
18240
+ this.$parent.setHeading(value, true, true);
18227
18241
  },
18228
18242
  //设置对齐方式
18229
18243
  setAlign(name, value) {
18230
- this.$parent.setAlign(value);
18244
+ this.$parent.setAlign(value, true, true);
18231
18245
  },
18232
18246
  //设置视频
18233
18247
  setVideo(prop) {
18234
18248
  if (this.$parent.disabled) {
18235
18249
  return;
18236
18250
  }
18237
- const video = this.$parent.getCurrentParsedomElement("video");
18251
+ const video = this.$parent.getCurrentParsedomElement("video", true);
18238
18252
  if (video) {
18239
18253
  if (this.videoConfig[prop]) {
18240
18254
  delete video.marks[prop];
@@ -18251,7 +18265,7 @@ const _sfc_main$6 = {
18251
18265
  if (this.$parent.disabled) {
18252
18266
  return;
18253
18267
  }
18254
- const element2 = this.$parent.getCurrentParsedomElement("img") || this.$parent.getCurrentParsedomElement("video", true);
18268
+ const element2 = this.$parent.getCurrentParsedomElement("img", true) || this.$parent.getCurrentParsedomElement("video", true);
18255
18269
  if (element2) {
18256
18270
  const styles = {
18257
18271
  width: value
@@ -18277,7 +18291,7 @@ const _sfc_main$6 = {
18277
18291
  if (!this.linkConfig.url) {
18278
18292
  return;
18279
18293
  }
18280
- const link = this.$parent.getCurrentParsedomElement("a");
18294
+ const link = this.$parent.getCurrentParsedomElement("a", true);
18281
18295
  if (link) {
18282
18296
  link.marks.href = this.linkConfig.url;
18283
18297
  if (this.linkConfig.newOpen) {
@@ -18310,7 +18324,7 @@ const _sfc_main$6 = {
18310
18324
  if (this.$parent.disabled) {
18311
18325
  return;
18312
18326
  }
18313
- const pre = this.$parent.getCurrentParsedomElement("pre");
18327
+ const pre = this.$parent.getCurrentParsedomElement("pre", true);
18314
18328
  if (pre) {
18315
18329
  Object.assign(pre.marks, {
18316
18330
  "data-editify-hljs": value
@@ -18329,7 +18343,7 @@ const _sfc_main$6 = {
18329
18343
  this.$parent.editor.range.anchor.element = this.$parent.editor.range.focus.element;
18330
18344
  this.$parent.editor.range.anchor.offset = this.$parent.editor.range.focus.offset;
18331
18345
  }
18332
- const pre = this.$parent.getCurrentParsedomElement("pre");
18346
+ const pre = this.$parent.getCurrentParsedomElement("pre", true);
18333
18347
  if (pre) {
18334
18348
  const paragraph = new AlexElement("block", AlexElement.BLOCK_NODE, null, null, null);
18335
18349
  const breakEl = new AlexElement("closed", "br", null, null, null);
@@ -18355,7 +18369,7 @@ const _sfc_main$6 = {
18355
18369
  this.$parent.editor.range.anchor.element = this.$parent.editor.range.focus.element;
18356
18370
  this.$parent.editor.range.anchor.offset = this.$parent.editor.range.focus.offset;
18357
18371
  }
18358
- const table = this.$parent.getCurrentParsedomElement("table");
18372
+ const table = this.$parent.getCurrentParsedomElement("table", true);
18359
18373
  const column = this.$parent.getCurrentParsedomElement("td", true);
18360
18374
  const tbody = this.$parent.getCurrentParsedomElement("tbody", true);
18361
18375
  if (column && table && tbody) {
@@ -18396,7 +18410,7 @@ const _sfc_main$6 = {
18396
18410
  this.$parent.editor.rangeRender();
18397
18411
  }
18398
18412
  },
18399
- //表格插入前后插入行
18413
+ //表格前后插入行
18400
18414
  insertTableRow(type = "up") {
18401
18415
  if (this.$parent.disabled) {
18402
18416
  return;
@@ -18405,7 +18419,7 @@ const _sfc_main$6 = {
18405
18419
  this.$parent.editor.range.anchor.element = this.$parent.editor.range.focus.element;
18406
18420
  this.$parent.editor.range.anchor.offset = this.$parent.editor.range.focus.offset;
18407
18421
  }
18408
- const table = this.$parent.getCurrentParsedomElement("table");
18422
+ const table = this.$parent.getCurrentParsedomElement("table", true);
18409
18423
  const row = this.$parent.getCurrentParsedomElement("tr", true);
18410
18424
  if (table && row) {
18411
18425
  const newRow = row.clone();
@@ -18434,7 +18448,7 @@ const _sfc_main$6 = {
18434
18448
  if (this.$parent.disabled) {
18435
18449
  return;
18436
18450
  }
18437
- const table = this.$parent.getCurrentParsedomElement("table");
18451
+ const table = this.$parent.getCurrentParsedomElement("table", true);
18438
18452
  if (table) {
18439
18453
  const paragraph = new AlexElement("block", AlexElement.BLOCK_NODE, null, null, null);
18440
18454
  const breakEl = new AlexElement("closed", "br", null, null, null);
@@ -18460,12 +18474,12 @@ const _sfc_main$6 = {
18460
18474
  this.$parent.editor.range.anchor.element = this.$parent.editor.range.focus.element;
18461
18475
  this.$parent.editor.range.anchor.offset = this.$parent.editor.range.focus.offset;
18462
18476
  }
18463
- const table = this.$parent.getCurrentParsedomElement("table");
18477
+ const table = this.$parent.getCurrentParsedomElement("table", true);
18464
18478
  const row = this.$parent.getCurrentParsedomElement("tr", true);
18465
18479
  if (table && row) {
18466
18480
  const parent = row.parent;
18467
18481
  if (parent.children.length == 1) {
18468
- this.$parent.deleteByParsedom("table");
18482
+ this.$parent.deleteByParsedom("table", true, true);
18469
18483
  return;
18470
18484
  }
18471
18485
  const previousRow = this.$parent.editor.getPreviousElement(row);
@@ -18495,14 +18509,14 @@ const _sfc_main$6 = {
18495
18509
  this.$parent.editor.range.anchor.element = this.$parent.editor.range.focus.element;
18496
18510
  this.$parent.editor.range.anchor.offset = this.$parent.editor.range.focus.offset;
18497
18511
  }
18498
- const column = this.$parent.getCurrentParsedomElement("td");
18512
+ const column = this.$parent.getCurrentParsedomElement("td", true);
18499
18513
  const tbody = this.$parent.getCurrentParsedomElement("tbody", true);
18500
18514
  const table = this.$parent.getCurrentParsedomElement("table", true);
18501
18515
  if (column && table && tbody) {
18502
18516
  const rows = tbody.children;
18503
18517
  const parent = column.parent;
18504
18518
  if (parent.children.length == 1) {
18505
- this.$parent.deleteByParsedom("table", true);
18519
+ this.$parent.deleteByParsedom("table", true, true);
18506
18520
  return;
18507
18521
  }
18508
18522
  const previousColumn = this.$parent.editor.getPreviousElement(column);
@@ -18531,7 +18545,7 @@ const _sfc_main$6 = {
18531
18545
  },
18532
18546
  //浮层显示时
18533
18547
  layerShow() {
18534
- const result = this.$parent.editor.getElementsByRange(true, false, true);
18548
+ const result = this.$parent.editor.getElementsByRange(true).includes;
18535
18549
  if (this.type == "codeBlock") {
18536
18550
  const pre = this.$parent.getCurrentParsedomElement("pre", true);
18537
18551
  if (pre) {
@@ -18656,8 +18670,8 @@ const _hoisted_1$6 = {
18656
18670
  const _hoisted_2$5 = { class: "editify-toolbar-link-label" };
18657
18671
  const _hoisted_3$5 = ["placeholder"];
18658
18672
  const _hoisted_4$5 = { class: "editify-toolbar-link-footer" };
18659
- const _hoisted_5$5 = { class: "editify-toolbar-link-operations" };
18660
- const _hoisted_6$5 = ["href"];
18673
+ const _hoisted_5$4 = { class: "editify-toolbar-link-operations" };
18674
+ const _hoisted_6$4 = ["href"];
18661
18675
  function _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) {
18662
18676
  const _component_Checkbox = resolveComponent("Checkbox");
18663
18677
  const _component_Button = resolveComponent("Button");
@@ -18706,7 +18720,7 @@ function _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) {
18706
18720
  color: _ctx.$parent.color,
18707
18721
  size: 10
18708
18722
  }, null, 8, ["onChange", "modelValue", "label", "color"]),
18709
- createElementVNode("div", _hoisted_5$5, [
18723
+ createElementVNode("div", _hoisted_5$4, [
18710
18724
  createElementVNode("span", {
18711
18725
  onClick: _cache[5] || (_cache[5] = (...args) => _ctx.$parent.removeLink && _ctx.$parent.removeLink(...args))
18712
18726
  }, toDisplayString($options.$editTrans("removeLink")), 1),
@@ -18714,7 +18728,7 @@ function _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) {
18714
18728
  href: $data.linkConfig.url,
18715
18729
  target: "_blank",
18716
18730
  style: normalizeStyle({ color: _ctx.$parent.color })
18717
- }, toDisplayString($options.$editTrans("viewLink")), 13, _hoisted_6$5)
18731
+ }, toDisplayString($options.$editTrans("viewLink")), 13, _hoisted_6$4)
18718
18732
  ])
18719
18733
  ])
18720
18734
  ])) : $props.type == "image" ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [
@@ -19381,7 +19395,7 @@ function _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) {
19381
19395
  _: 1
19382
19396
  }, 8, ["modelValue", "node", "onShow", "useRange"]);
19383
19397
  }
19384
- const Toolbar = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["render", _sfc_render$6], ["__scopeId", "data-v-38c4144f"]]);
19398
+ const Toolbar = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["render", _sfc_render$6], ["__scopeId", "data-v-36dbd332"]]);
19385
19399
  const InsertLink_vue_vue_type_style_index_0_scoped_e6c3c2ee_lang = "";
19386
19400
  const _sfc_main$5 = {
19387
19401
  name: "InsertLink",
@@ -19441,8 +19455,8 @@ const _hoisted_1$5 = { class: "editify-link" };
19441
19455
  const _hoisted_2$4 = { class: "editify-link-label" };
19442
19456
  const _hoisted_3$4 = ["placeholder"];
19443
19457
  const _hoisted_4$4 = ["placeholder"];
19444
- const _hoisted_5$4 = { class: "editify-link-footer" };
19445
- const _hoisted_6$4 = { class: "editify-link-operations" };
19458
+ const _hoisted_5$3 = { class: "editify-link-footer" };
19459
+ const _hoisted_6$3 = { class: "editify-link-operations" };
19446
19460
  function _sfc_render$5(_ctx, _cache, $props, $setup, $data, $options) {
19447
19461
  const _component_Checkbox = resolveComponent("Checkbox");
19448
19462
  return openBlock(), createElementBlock("div", _hoisted_1$5, [
@@ -19475,7 +19489,7 @@ function _sfc_render$5(_ctx, _cache, $props, $setup, $data, $options) {
19475
19489
  { trim: true }
19476
19490
  ]
19477
19491
  ]),
19478
- createElementVNode("div", _hoisted_5$4, [
19492
+ createElementVNode("div", _hoisted_5$3, [
19479
19493
  createVNode(_component_Checkbox, {
19480
19494
  modelValue: $data.newOpen,
19481
19495
  "onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => $data.newOpen = $event),
@@ -19483,7 +19497,7 @@ function _sfc_render$5(_ctx, _cache, $props, $setup, $data, $options) {
19483
19497
  color: $props.color,
19484
19498
  size: 10
19485
19499
  }, null, 8, ["modelValue", "label", "color"]),
19486
- createElementVNode("div", _hoisted_6$4, [
19500
+ createElementVNode("div", _hoisted_6$3, [
19487
19501
  createElementVNode("span", {
19488
19502
  style: normalizeStyle({ color: $props.color }),
19489
19503
  onClick: _cache[7] || (_cache[7] = (...args) => $options.insertLink && $options.insertLink(...args))
@@ -19646,11 +19660,11 @@ const _hoisted_3$3 = {
19646
19660
  class: "editify-image-remote"
19647
19661
  };
19648
19662
  const _hoisted_4$3 = ["placeholder"];
19649
- const _hoisted_5$3 = {
19663
+ const _hoisted_5$2 = {
19650
19664
  key: 1,
19651
19665
  class: "editify-image-upload"
19652
19666
  };
19653
- const _hoisted_6$3 = ["multiple"];
19667
+ const _hoisted_6$2 = ["multiple"];
19654
19668
  function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
19655
19669
  const _component_Icon = resolveComponent("Icon");
19656
19670
  return openBlock(), createElementBlock("div", _hoisted_1$4, [
@@ -19692,14 +19706,14 @@ function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
19692
19706
  onClick: _cache[5] || (_cache[5] = (...args) => $options.insertRemoteImage && $options.insertRemoteImage(...args))
19693
19707
  }, toDisplayString($options.$editTrans("insert")), 1)
19694
19708
  ], 4)
19695
- ])) : (openBlock(), createElementBlock("div", _hoisted_5$3, [
19709
+ ])) : (openBlock(), createElementBlock("div", _hoisted_5$2, [
19696
19710
  createVNode(_component_Icon, { value: "upload" }),
19697
19711
  createElementVNode("input", {
19698
19712
  multiple: $props.multiple,
19699
19713
  accept: "image/*",
19700
19714
  onChange: _cache[6] || (_cache[6] = (...args) => $options.selectFile && $options.selectFile(...args)),
19701
19715
  type: "file"
19702
- }, null, 40, _hoisted_6$3)
19716
+ }, null, 40, _hoisted_6$2)
19703
19717
  ]))
19704
19718
  ]);
19705
19719
  }
@@ -19857,11 +19871,11 @@ const _hoisted_3$2 = {
19857
19871
  class: "editify-video-remote"
19858
19872
  };
19859
19873
  const _hoisted_4$2 = ["placeholder"];
19860
- const _hoisted_5$2 = {
19874
+ const _hoisted_5$1 = {
19861
19875
  key: 1,
19862
19876
  class: "editify-video-upload"
19863
19877
  };
19864
- const _hoisted_6$2 = ["multiple"];
19878
+ const _hoisted_6$1 = ["multiple"];
19865
19879
  function _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) {
19866
19880
  const _component_Icon = resolveComponent("Icon");
19867
19881
  return openBlock(), createElementBlock("div", _hoisted_1$3, [
@@ -19903,14 +19917,14 @@ function _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) {
19903
19917
  onClick: _cache[5] || (_cache[5] = (...args) => $options.insertRemoteVideo && $options.insertRemoteVideo(...args))
19904
19918
  }, toDisplayString($options.$editTrans("insert")), 1)
19905
19919
  ], 4)
19906
- ])) : (openBlock(), createElementBlock("div", _hoisted_5$2, [
19920
+ ])) : (openBlock(), createElementBlock("div", _hoisted_5$1, [
19907
19921
  createVNode(_component_Icon, { value: "upload" }),
19908
19922
  createElementVNode("input", {
19909
19923
  multiple: $props.multiple,
19910
19924
  accept: "video/*",
19911
19925
  onChange: _cache[6] || (_cache[6] = (...args) => $options.selectFile && $options.selectFile(...args)),
19912
19926
  type: "file"
19913
- }, null, 40, _hoisted_6$2)
19927
+ }, null, 40, _hoisted_6$1)
19914
19928
  ]))
19915
19929
  ]);
19916
19930
  }
@@ -20005,8 +20019,8 @@ const _hoisted_3$1 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ createEl
20005
20019
  const _hoisted_4$1 = [
20006
20020
  _hoisted_3$1
20007
20021
  ];
20008
- const _hoisted_5$1 = { class: "editify-table-footer" };
20009
- const _hoisted_6$1 = { key: 0 };
20022
+ const _hoisted_5 = { class: "editify-table-footer" };
20023
+ const _hoisted_6 = { key: 0 };
20010
20024
  const _hoisted_7 = { key: 1 };
20011
20025
  function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {
20012
20026
  return openBlock(), createElementBlock("div", _hoisted_1$2, [
@@ -20023,13 +20037,13 @@ function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {
20023
20037
  ]);
20024
20038
  }), 256))
20025
20039
  ]),
20026
- createElementVNode("div", _hoisted_5$1, [
20027
- $options.specification ? (openBlock(), createElementBlock("span", _hoisted_6$1, toDisplayString($options.specification.x) + " x " + toDisplayString($options.specification.y), 1)) : (openBlock(), createElementBlock("span", _hoisted_7, toDisplayString($options.$editTrans("insertTable")), 1))
20040
+ createElementVNode("div", _hoisted_5, [
20041
+ $options.specification ? (openBlock(), createElementBlock("span", _hoisted_6, toDisplayString($options.specification.x) + " x " + toDisplayString($options.specification.y), 1)) : (openBlock(), createElementBlock("span", _hoisted_7, toDisplayString($options.$editTrans("insertTable")), 1))
20028
20042
  ])
20029
20043
  ]);
20030
20044
  }
20031
20045
  const InsertTable = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["render", _sfc_render$2], ["__scopeId", "data-v-227ede65"]]);
20032
- const Menu_vue_vue_type_style_index_0_scoped_afb2092e_lang = "";
20046
+ const Menu_vue_vue_type_style_index_0_scoped_c952b6ed_lang = "";
20033
20047
  const _sfc_main$1 = {
20034
20048
  name: "Menu",
20035
20049
  props: {
@@ -20345,6 +20359,14 @@ const _sfc_main$1 = {
20345
20359
  rightBorder: this.config.sourceView.rightBorder,
20346
20360
  active: false,
20347
20361
  disabled: false
20362
+ },
20363
+ //全屏按钮配置
20364
+ fullScreenConfig: {
20365
+ show: this.config.fullScreen.show,
20366
+ leftBorder: this.config.fullScreen.leftBorder,
20367
+ rightBorder: this.config.fullScreen.rightBorder,
20368
+ active: false,
20369
+ disabled: false
20348
20370
  }
20349
20371
  };
20350
20372
  },
@@ -20361,11 +20383,27 @@ const _sfc_main$1 = {
20361
20383
  //菜单是否禁用
20362
20384
  menuDisabled() {
20363
20385
  return (name) => {
20364
- if (name == "sourceView") {
20386
+ if (name == "sourceView" || name == "fullScreen") {
20365
20387
  return false;
20366
20388
  }
20367
20389
  return this.$parent.isSourceView;
20368
20390
  };
20391
+ },
20392
+ //菜单模式
20393
+ menuMode() {
20394
+ if (this.$parent.isFullScreen || this.$parent.height === true) {
20395
+ if (this.config.mode == "fixed") {
20396
+ return "default";
20397
+ }
20398
+ }
20399
+ return this.config.mode;
20400
+ },
20401
+ //菜单栏是否显示边框
20402
+ menuShowBorder() {
20403
+ if (this.menuMode == "fixed") {
20404
+ return false;
20405
+ }
20406
+ return this.$parent.showBorder;
20369
20407
  }
20370
20408
  },
20371
20409
  components: {
@@ -20779,7 +20817,7 @@ const _sfc_main$1 = {
20779
20817
  hideScroll: true,
20780
20818
  onLayerShow: () => {
20781
20819
  let text2 = "";
20782
- const result = this.$parent.$parent.editor.getElementsByRange(true, true);
20820
+ const result = this.$parent.$parent.editor.getElementsByRange().flatIncludes;
20783
20821
  result.forEach((item) => {
20784
20822
  if (item.element.isText()) {
20785
20823
  if (item.offset) {
@@ -20946,6 +20984,22 @@ const _sfc_main$1 = {
20946
20984
  () => h(Icon, { value: "source-view" })
20947
20985
  );
20948
20986
  }
20987
+ if (this.name == "fullScreen" && this.$parent.fullScreenConfig.show) {
20988
+ return h(
20989
+ Button,
20990
+ {
20991
+ ...props,
20992
+ title: this.$editTrans("fullScreen"),
20993
+ leftBorder: this.$parent.fullScreenConfig.leftBorder,
20994
+ rightBorder: this.$parent.fullScreenConfig.rightBorder,
20995
+ color: this.$parent.color,
20996
+ disabled: this.$parent.fullScreenConfig.disabled || this.disabled || this.$parent.disabled,
20997
+ active: this.$parent.fullScreenConfig.active,
20998
+ onOperate: this.$parent.handleOperate
20999
+ },
21000
+ () => h(Icon, { value: "full-screen" })
21001
+ );
21002
+ }
20949
21003
  if (obj.common.isObject(this.$parent.config.extends)) {
20950
21004
  const configuration = this.$parent.config.extends[this.name];
20951
21005
  if (configuration) {
@@ -21100,14 +21154,18 @@ const _sfc_main$1 = {
21100
21154
  if (!this.$parent.isSourceView) {
21101
21155
  this.$parent.editor.rangeRender();
21102
21156
  }
21157
+ } else if (name == "fullScreen") {
21158
+ this.$parent.isFullScreen = !this.$parent.isFullScreen;
21159
+ this.fullScreenConfig.active = this.$parent.isFullScreen;
21160
+ this.$parent.editor.rangeRender();
21103
21161
  }
21104
21162
  },
21105
21163
  //处理光标更新
21106
- handleRangeUpdate() {
21164
+ handleRangeUpdate(useCache = false) {
21107
21165
  if (this.disabled) {
21108
21166
  return;
21109
21167
  }
21110
- const result = this.$parent.editor.getElementsByRange(true, false, true);
21168
+ const result = this.$parent.editor.getElementsByRange(useCache).includes;
21111
21169
  const hasPreStyle = this.$parent.hasPreStyle(true);
21112
21170
  const hasTable = this.$parent.hasTable(true);
21113
21171
  const hasQuote = this.$parent.hasQuote(true);
@@ -21228,6 +21286,7 @@ const _sfc_main$1 = {
21228
21286
  this.codeBlockConfig.active = !!this.$parent.getCurrentParsedomElement("pre", true);
21229
21287
  this.codeBlockConfig.disabled = hasTable || hasQuote || extraDisabled("codeBlock");
21230
21288
  this.sourceViewConfig.active = this.$parent.isSourceView;
21289
+ this.fullScreenConfig.active = this.$parent.isFullScreen;
21231
21290
  }
21232
21291
  }
21233
21292
  };
@@ -21235,8 +21294,8 @@ const _hoisted_1$1 = ["data-editify-mode"];
21235
21294
  function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {
21236
21295
  const _component_MenuItem = resolveComponent("MenuItem");
21237
21296
  return openBlock(), createElementBlock("div", {
21238
- class: normalizeClass(["editify-menu", { border: _ctx.$parent.border, source: _ctx.$parent.isSourceView }]),
21239
- "data-editify-mode": $props.config.mode,
21297
+ class: normalizeClass(["editify-menu", { border: $options.menuShowBorder, source: _ctx.$parent.isSourceView && $options.menuMode == "inner", fullscreen: _ctx.$parent.isFullScreen }]),
21298
+ "data-editify-mode": $options.menuMode,
21240
21299
  style: normalizeStyle($props.config.style || "")
21241
21300
  }, [
21242
21301
  (openBlock(true), createElementBlock(Fragment, null, renderList($options.menuNames, (item) => {
@@ -21247,8 +21306,8 @@ function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {
21247
21306
  }), 256))
21248
21307
  ], 14, _hoisted_1$1);
21249
21308
  }
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 = "";
21309
+ const Menu = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["render", _sfc_render$1], ["__scopeId", "data-v-c952b6ed"]]);
21310
+ const Editify_vue_vue_type_style_index_0_scoped_ede8b39b_lang = "";
21252
21311
  const _sfc_main = {
21253
21312
  name: "editify",
21254
21313
  props: { ...editorProps },
@@ -21267,6 +21326,8 @@ const _sfc_main = {
21267
21326
  isModelChange: false,
21268
21327
  //是否代码视图
21269
21328
  isSourceView: false,
21329
+ //是否全屏
21330
+ isFullScreen: false,
21270
21331
  //是否正在输入中文
21271
21332
  isInputChinese: false,
21272
21333
  //表格列宽拖拽记录数据
@@ -21288,7 +21349,9 @@ const _sfc_main = {
21288
21349
  //rangeUpdate更新延时器
21289
21350
  updateTimer: null,
21290
21351
  //菜单栏是否可以使用标识
21291
- canUseMenu: false
21352
+ canUseMenu: false,
21353
+ //手动设定的编辑器编辑区域高度
21354
+ contentHeight: 0
21292
21355
  };
21293
21356
  },
21294
21357
  computed: {
@@ -21315,8 +21378,20 @@ const _sfc_main = {
21315
21378
  }
21316
21379
  return false;
21317
21380
  },
21381
+ //是否显示边框
21382
+ showBorder() {
21383
+ if (this.isFullScreen) {
21384
+ return false;
21385
+ }
21386
+ return this.border;
21387
+ },
21318
21388
  //编辑器样式设置
21319
21389
  contentStyle() {
21390
+ if (this.height === true || this.isFullScreen) {
21391
+ return {
21392
+ height: this.contentHeight + "px"
21393
+ };
21394
+ }
21320
21395
  return this.autoheight ? { minHeight: this.height } : { height: this.height };
21321
21396
  },
21322
21397
  //最终生效的工具栏配置
@@ -21355,6 +21430,21 @@ const _sfc_main = {
21355
21430
  this.handleToolbar();
21356
21431
  }
21357
21432
  }
21433
+ },
21434
+ //全屏切换
21435
+ isFullScreen() {
21436
+ this.$nextTick(() => {
21437
+ this.setContentHeight();
21438
+ });
21439
+ },
21440
+ //监听height为true
21441
+ height: {
21442
+ immediate: true,
21443
+ handler: function() {
21444
+ this.$nextTick(() => {
21445
+ this.setContentHeight();
21446
+ });
21447
+ }
21358
21448
  }
21359
21449
  },
21360
21450
  mounted() {
@@ -21364,7 +21454,10 @@ const _sfc_main = {
21364
21454
  obj.event.on(document.documentElement, `mousemove.editify_${this.uid}`, this.documentMouseMove);
21365
21455
  obj.event.on(document.documentElement, `mouseup.editify_${this.uid}`, this.documentMouseUp);
21366
21456
  obj.event.on(document.documentElement, `click.editify_${this.uid}`, this.documentClick);
21367
- obj.event.on(window, `resize.editify_${this.uid}`, this.setVideoHeight);
21457
+ obj.event.on(window, `resize.editify_${this.uid}`, () => {
21458
+ this.setVideoHeight();
21459
+ this.setContentHeight();
21460
+ });
21368
21461
  },
21369
21462
  methods: {
21370
21463
  //初始创建编辑器
@@ -21447,13 +21540,13 @@ const _sfc_main = {
21447
21540
  removeScroll(this.$refs.content);
21448
21541
  },
21449
21542
  //工具条显示判断
21450
- handleToolbar() {
21543
+ handleToolbar(useCache = false) {
21451
21544
  if (this.disabled || this.isSourceView) {
21452
21545
  return;
21453
21546
  }
21454
21547
  this.hideToolbar();
21455
21548
  this.$nextTick(() => {
21456
- const table = this.getCurrentParsedomElement("table", true);
21549
+ const table = this.getCurrentParsedomElement("table", useCache);
21457
21550
  const pre = this.getCurrentParsedomElement("pre", true);
21458
21551
  const link = this.getCurrentParsedomElement("a", true);
21459
21552
  const image = this.getCurrentParsedomElement("img", true);
@@ -21499,7 +21592,7 @@ const _sfc_main = {
21499
21592
  this.toolbarOptions.show = true;
21500
21593
  }
21501
21594
  } else {
21502
- const result = this.editor.getElementsByRange(true, true, true).filter((item) => {
21595
+ const result = this.editor.getElementsByRange(true).flatIncludes.filter((item) => {
21503
21596
  return item.element.isText();
21504
21597
  });
21505
21598
  if (result.length && !this.hasTable(true) && !this.hasPreStyle(true) && !this.hasLink(true) && !this.hasImage(true) && !this.hasVideo(true)) {
@@ -21671,7 +21764,7 @@ const _sfc_main = {
21671
21764
  if (this.disabled) {
21672
21765
  return;
21673
21766
  }
21674
- if (this.border && this.color) {
21767
+ if (this.border && this.color && !this.isFullScreen) {
21675
21768
  this.$refs.body.style.borderColor = "";
21676
21769
  this.$refs.body.style.boxShadow = "";
21677
21770
  if (this.menuConfig.use) {
@@ -21686,7 +21779,7 @@ const _sfc_main = {
21686
21779
  if (this.disabled) {
21687
21780
  return;
21688
21781
  }
21689
- if (this.border && this.color) {
21782
+ if (this.border && this.color && !this.isFullScreen) {
21690
21783
  this.$refs.body.style.borderColor = this.color;
21691
21784
  const rgb = obj.color.hex2rgb(this.color);
21692
21785
  if (this.menuConfig.use && this.menuConfig.mode == "inner") {
@@ -21753,7 +21846,7 @@ const _sfc_main = {
21753
21846
  this.$emit("insertparagraph", this.value);
21754
21847
  },
21755
21848
  //编辑器焦点更新
21756
- handleRangeUpdate(range) {
21849
+ handleRangeUpdate() {
21757
21850
  if (this.disabled) {
21758
21851
  return;
21759
21852
  }
@@ -21762,17 +21855,16 @@ const _sfc_main = {
21762
21855
  }
21763
21856
  this.updateTimer = setTimeout(() => {
21764
21857
  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();
21858
+ this.editor.getElementsByRange();
21859
+ if (this.toolbarConfig.use) {
21860
+ this.handleToolbar(true);
21861
+ }
21862
+ if (this.menuConfig.use) {
21863
+ this.$refs.menu.handleRangeUpdate(true);
21864
+ }
21773
21865
  }
21774
21866
  }, 200);
21775
- this.$emit("rangeupdate", this.value, range);
21867
+ this.$emit("rangeupdate", this.value);
21776
21868
  },
21777
21869
  //编辑器复制
21778
21870
  handleCopy(text2, html) {
@@ -21787,7 +21879,7 @@ const _sfc_main = {
21787
21879
  this.$emit("paste-text", data2);
21788
21880
  },
21789
21881
  //编辑器粘贴html
21790
- handlePasteHtml(elements, data2) {
21882
+ handlePasteHtml(elements) {
21791
21883
  const keepStyles = Object.assign(pasteKeepData.styles, this.pasteKeepStyles || {});
21792
21884
  const keepMarks = Object.assign(pasteKeepData.marks, this.pasteKeepMarks || {});
21793
21885
  AlexElement.flatElements(elements).forEach((el) => {
@@ -21848,6 +21940,22 @@ const _sfc_main = {
21848
21940
  video.style.height = video.offsetWidth / this.videoRatio + "px";
21849
21941
  });
21850
21942
  },
21943
+ //设置编辑器主体高度
21944
+ setContentHeight() {
21945
+ if (this.height === true || this.isFullScreen) {
21946
+ let height = this.$el.offsetHeight;
21947
+ if (this.menuConfig.use) {
21948
+ height -= this.$refs.menu.$el.offsetHeight;
21949
+ }
21950
+ if (this.showWordLength) {
21951
+ height -= this.$refs.footer.offsetHeight;
21952
+ }
21953
+ if (this.$refs.menu.menuMode == "default") {
21954
+ height -= 10;
21955
+ }
21956
+ this.contentHeight = height - 2;
21957
+ }
21958
+ },
21851
21959
  //api:光标设置到文档底部
21852
21960
  collapseToEnd() {
21853
21961
  if (this.disabled) {
@@ -21897,7 +22005,7 @@ const _sfc_main = {
21897
22005
  if (this.editor.range.anchor.element.isEqual(this.editor.range.focus.element)) {
21898
22006
  return this.getParsedomElementByElement(this.editor.range.anchor.element, parsedom);
21899
22007
  }
21900
- const arr = this.editor.getElementsByRange(true, false, useCache).map((item) => {
22008
+ const arr = this.editor.getElementsByRange(useCache).includes.map((item) => {
21901
22009
  return this.getParsedomElementByElement(item.element, parsedom);
21902
22010
  });
21903
22011
  let hasNull = arr.some((el) => {
@@ -21978,7 +22086,7 @@ const _sfc_main = {
21978
22086
  blockToParagraph(block);
21979
22087
  block.parsedom = parsedom;
21980
22088
  } else {
21981
- const result = this.editor.getElementsByRange(true, false, useCache);
22089
+ const result = this.editor.getElementsByRange(useCache).includes;
21982
22090
  result.forEach((el) => {
21983
22091
  if (el.element.isBlock()) {
21984
22092
  blockToParagraph(el.element);
@@ -22014,7 +22122,7 @@ const _sfc_main = {
22014
22122
  }
22015
22123
  } else {
22016
22124
  let blocks = [];
22017
- const result = this.editor.getElementsByRange(true, false, useCache);
22125
+ const result = this.editor.getElementsByRange(useCache).includes;
22018
22126
  result.forEach((item) => {
22019
22127
  const block = item.element.getBlock();
22020
22128
  const exist = blocks.some((el) => block.isEqual(el));
@@ -22055,7 +22163,7 @@ const _sfc_main = {
22055
22163
  }
22056
22164
  } else {
22057
22165
  let blocks = [];
22058
- const result = this.editor.getElementsByRange(true, false, useCache);
22166
+ const result = this.editor.getElementsByRange(useCache).includes;
22059
22167
  result.forEach((item) => {
22060
22168
  const block = item.element.getBlock();
22061
22169
  const exist = blocks.some((el) => block.isEqual(el));
@@ -22088,11 +22196,11 @@ const _sfc_main = {
22088
22196
  }
22089
22197
  const active = this.queryTextStyle(name, value, useCache);
22090
22198
  if (active) {
22091
- this.editor.removeTextStyle([name], useCache);
22199
+ this.editor.removeTextStyle([name], true);
22092
22200
  } else {
22093
22201
  let styles = {};
22094
22202
  styles[name] = value;
22095
- this.editor.setTextStyle(styles, useCache);
22203
+ this.editor.setTextStyle(styles, true);
22096
22204
  }
22097
22205
  if (isRender) {
22098
22206
  this.editor.formatElementStack();
@@ -22114,11 +22222,11 @@ const _sfc_main = {
22114
22222
  }
22115
22223
  const active = this.queryTextMark(name, value, useCache);
22116
22224
  if (active) {
22117
- this.editor.removeTextMark([name], useCache);
22225
+ this.editor.removeTextMark([name], true);
22118
22226
  } else {
22119
22227
  let marks = {};
22120
22228
  marks[name] = value;
22121
- this.editor.setTextMark(marks, useCache);
22229
+ this.editor.setTextMark(marks, true);
22122
22230
  }
22123
22231
  if (isRender) {
22124
22232
  this.editor.formatElementStack();
@@ -22139,7 +22247,7 @@ const _sfc_main = {
22139
22247
  return;
22140
22248
  }
22141
22249
  this.editor.removeTextStyle(null, useCache);
22142
- this.editor.removeTextMark(null, useCache);
22250
+ this.editor.removeTextMark(null);
22143
22251
  if (isRender) {
22144
22252
  this.editor.formatElementStack();
22145
22253
  this.editor.domRender();
@@ -22175,7 +22283,7 @@ const _sfc_main = {
22175
22283
  }
22176
22284
  }
22177
22285
  } else {
22178
- const result = this.editor.getElementsByRange(true, false, useCache);
22286
+ const result = this.editor.getElementsByRange(useCache).includes;
22179
22287
  result.forEach((el) => {
22180
22288
  if (el.element.isBlock() || el.element.isInblock()) {
22181
22289
  if (el.element.hasStyles()) {
@@ -22261,7 +22369,7 @@ const _sfc_main = {
22261
22369
  }
22262
22370
  } else {
22263
22371
  let blocks = [];
22264
- const result = this.editor.getElementsByRange(true, false, useCache);
22372
+ const result = this.editor.getElementsByRange(useCache).includes;
22265
22373
  result.forEach((item) => {
22266
22374
  const block = item.element.getBlock();
22267
22375
  const exist = blocks.some((el) => block.isEqual(el));
@@ -22312,7 +22420,7 @@ const _sfc_main = {
22312
22420
  }
22313
22421
  }
22314
22422
  } else {
22315
- const result = this.editor.getElementsByRange(true, false, useCache);
22423
+ const result = this.editor.getElementsByRange(useCache).includes;
22316
22424
  result.forEach((el) => {
22317
22425
  if (el.element.isBlock() || el.element.isInblock()) {
22318
22426
  if (el.element.hasStyles()) {
@@ -22387,7 +22495,7 @@ const _sfc_main = {
22387
22495
  fn(block);
22388
22496
  }
22389
22497
  } else {
22390
- const result = this.editor.getElementsByRange(true, false, useCache);
22498
+ const result = this.editor.getElementsByRange(useCache).includes;
22391
22499
  result.forEach((item) => {
22392
22500
  const block = item.element.getBlock();
22393
22501
  const inblock = item.element.getInblock();
@@ -22432,7 +22540,7 @@ const _sfc_main = {
22432
22540
  fn(block);
22433
22541
  }
22434
22542
  } else {
22435
- const result = this.editor.getElementsByRange(true, false, useCache);
22543
+ const result = this.editor.getElementsByRange(useCache).includes;
22436
22544
  result.forEach((item) => {
22437
22545
  const block = item.element.getBlock();
22438
22546
  const inblock = item.element.getInblock();
@@ -22450,7 +22558,7 @@ const _sfc_main = {
22450
22558
  }
22451
22559
  },
22452
22560
  //api:插入图片
22453
- insertImage(url2, isRender = true) {
22561
+ insertImage(url2, isRender = true, useCache = false) {
22454
22562
  if (this.disabled) {
22455
22563
  return;
22456
22564
  }
@@ -22469,7 +22577,7 @@ const _sfc_main = {
22469
22577
  null,
22470
22578
  null
22471
22579
  );
22472
- this.editor.insertElement(image);
22580
+ this.editor.insertElement(image, true, useCache);
22473
22581
  if (isRender) {
22474
22582
  this.editor.formatElementStack();
22475
22583
  this.editor.domRender();
@@ -22477,7 +22585,7 @@ const _sfc_main = {
22477
22585
  }
22478
22586
  },
22479
22587
  //api:插入视频
22480
- insertVideo(url2, isRender = true) {
22588
+ insertVideo(url2, isRender = true, useCache = false) {
22481
22589
  if (this.disabled) {
22482
22590
  return;
22483
22591
  }
@@ -22496,7 +22604,7 @@ const _sfc_main = {
22496
22604
  null,
22497
22605
  null
22498
22606
  );
22499
- this.editor.insertElement(video);
22607
+ this.editor.insertElement(video, true, useCache);
22500
22608
  const leftSpace = AlexElement.getSpaceElement();
22501
22609
  const rightSpace = AlexElement.getSpaceElement();
22502
22610
  this.editor.addElementAfter(rightSpace, video);
@@ -22517,7 +22625,7 @@ const _sfc_main = {
22517
22625
  if (this.editor.range.anchor.isEqual(this.editor.range.focus)) {
22518
22626
  return this.editor.range.anchor.element.isPreStyle();
22519
22627
  }
22520
- const result = this.editor.getElementsByRange(true, false, useCache);
22628
+ const result = this.editor.getElementsByRange(useCache).includes;
22521
22629
  return result.some((item) => {
22522
22630
  return item.element.isPreStyle();
22523
22631
  });
@@ -22531,7 +22639,7 @@ const _sfc_main = {
22531
22639
  const block = this.editor.range.anchor.element.getBlock();
22532
22640
  return block.parsedom == "blockquote";
22533
22641
  }
22534
- const result = this.editor.getElementsByRange(true, false, useCache);
22642
+ const result = this.editor.getElementsByRange(useCache).includes;
22535
22643
  return result.some((item) => {
22536
22644
  if (item.element.isBlock()) {
22537
22645
  return item.element.parsedom == "blockquote";
@@ -22550,7 +22658,7 @@ const _sfc_main = {
22550
22658
  const block = this.editor.range.anchor.element.getBlock();
22551
22659
  return blockIsList(block, ordered);
22552
22660
  }
22553
- const result = this.editor.getElementsByRange(true, false, useCache);
22661
+ const result = this.editor.getElementsByRange(useCache).includes;
22554
22662
  return result.some((item) => {
22555
22663
  if (item.element.isBlock()) {
22556
22664
  return blockIsList(item.element, ordered);
@@ -22568,7 +22676,7 @@ const _sfc_main = {
22568
22676
  if (this.editor.range.anchor.isEqual(this.editor.range.focus)) {
22569
22677
  return !!this.getParsedomElementByElement(this.editor.range.anchor.element, "a");
22570
22678
  }
22571
- const result = this.editor.getElementsByRange(true, true, useCache).filter((item) => {
22679
+ const result = this.editor.getElementsByRange(useCache).flatIncludes.filter((item) => {
22572
22680
  return item.element.isText();
22573
22681
  });
22574
22682
  return result.some((item) => {
@@ -22584,7 +22692,7 @@ const _sfc_main = {
22584
22692
  const block = this.editor.range.anchor.element.getBlock();
22585
22693
  return block.parsedom == "table";
22586
22694
  }
22587
- const result = this.editor.getElementsByRange(true, false, useCache);
22695
+ const result = this.editor.getElementsByRange(useCache).includes;
22588
22696
  return result.some((item) => {
22589
22697
  if (item.element.isBlock()) {
22590
22698
  return item.element.parsedom == "table";
@@ -22603,7 +22711,7 @@ const _sfc_main = {
22603
22711
  const block = this.editor.range.anchor.element.getBlock();
22604
22712
  return blockIsTask(block);
22605
22713
  }
22606
- const result = this.editor.getElementsByRange(true, false, useCache);
22714
+ const result = this.editor.getElementsByRange(useCache).includes;
22607
22715
  return result.some((item) => {
22608
22716
  if (item.element.isBlock()) {
22609
22717
  return blockIsTask(item.element);
@@ -22621,7 +22729,7 @@ const _sfc_main = {
22621
22729
  if (this.editor.range.anchor.isEqual(this.editor.range.focus)) {
22622
22730
  return this.editor.range.anchor.element.isClosed() && this.editor.range.anchor.element.parsedom == "img";
22623
22731
  }
22624
- const result = this.editor.getElementsByRange(true, true, useCache);
22732
+ const result = this.editor.getElementsByRange(useCache).flatIncludes;
22625
22733
  return result.some((item) => {
22626
22734
  return item.element.isClosed() && item.element.parsedom == "img";
22627
22735
  });
@@ -22634,7 +22742,7 @@ const _sfc_main = {
22634
22742
  if (this.editor.range.anchor.isEqual(this.editor.range.focus)) {
22635
22743
  return this.editor.range.anchor.element.isClosed() && this.editor.range.anchor.element.parsedom == "video";
22636
22744
  }
22637
- const result = this.editor.getElementsByRange(true, true, useCache);
22745
+ const result = this.editor.getElementsByRange(useCache).flatIncludes;
22638
22746
  return result.some((item) => {
22639
22747
  return item.element.isClosed() && item.element.parsedom == "video";
22640
22748
  });
@@ -22648,7 +22756,7 @@ const _sfc_main = {
22648
22756
  const block = this.editor.range.anchor.element.getBlock();
22649
22757
  return block.parsedom == "blockquote";
22650
22758
  }
22651
- const result = this.editor.getElementsByRange(true, false, useCache);
22759
+ const result = this.editor.getElementsByRange(useCache).includes;
22652
22760
  return result.every((item) => {
22653
22761
  if (item.element.isBlock()) {
22654
22762
  return item.element.parsedom == "blockquote";
@@ -22667,7 +22775,7 @@ const _sfc_main = {
22667
22775
  const block = this.editor.range.anchor.element.getBlock();
22668
22776
  return blockIsList(block, ordered);
22669
22777
  }
22670
- const result = this.editor.getElementsByRange(true, false, useCache);
22778
+ const result = this.editor.getElementsByRange(useCache).includes;
22671
22779
  return result.every((item) => {
22672
22780
  if (item.element.isBlock()) {
22673
22781
  return blockIsList(item.element, ordered);
@@ -22686,7 +22794,7 @@ const _sfc_main = {
22686
22794
  const block = this.editor.range.anchor.element.getBlock();
22687
22795
  return blockIsTask(block);
22688
22796
  }
22689
- const result = this.editor.getElementsByRange(true, false, useCache);
22797
+ const result = this.editor.getElementsByRange(useCache).includes;
22690
22798
  return result.every((item) => {
22691
22799
  if (item.element.isBlock()) {
22692
22800
  return blockIsTask(item.element);
@@ -22697,7 +22805,7 @@ const _sfc_main = {
22697
22805
  });
22698
22806
  },
22699
22807
  //api:创建一个空的表格
22700
- insertTable(rowLength, colLength, isRender = true) {
22808
+ insertTable(rowLength, colLength, isRender = true, useCache = false) {
22701
22809
  if (this.disabled) {
22702
22810
  return;
22703
22811
  }
@@ -22717,7 +22825,7 @@ const _sfc_main = {
22717
22825
  }
22718
22826
  this.editor.addElementTo(row, tbody);
22719
22827
  }
22720
- this.editor.insertElement(table);
22828
+ this.editor.insertElement(table, true, useCache);
22721
22829
  const paragraph = new AlexElement("block", AlexElement.BLOCK_NODE, null, null, null);
22722
22830
  const breakEl = new AlexElement("closed", "br", null, null, null);
22723
22831
  this.editor.addElementTo(breakEl, paragraph);
@@ -22764,10 +22872,10 @@ const _sfc_main = {
22764
22872
  this.editor.addElementTo(breakEl, paragraph);
22765
22873
  this.editor.addElementAfter(paragraph, block);
22766
22874
  } else {
22767
- let result = this.editor.getElementsByRange(true, false, useCache);
22875
+ let result = this.editor.getElementsByRange(true).includes;
22768
22876
  this.editor.range.anchor.moveToStart(result[0].element.getBlock());
22769
22877
  this.editor.range.focus.moveToEnd(result[result.length - 1].element.getBlock());
22770
- const res = this.editor.getElementsByRange(true, true, useCache).filter((el) => el.element.isText());
22878
+ const res = this.editor.getElementsByRange(true).flatIncludes.filter((el) => el.element.isText());
22771
22879
  const obj2 = {};
22772
22880
  res.forEach((el) => {
22773
22881
  if (obj2[el.element.getBlock().key]) {
@@ -22809,14 +22917,14 @@ const _sfc_main = {
22809
22917
  }
22810
22918
  },
22811
22919
  //api:插入文本
22812
- insertText(text2, isRender = true) {
22920
+ insertText(text2, isRender = true, useCache = false) {
22813
22921
  if (this.disabled) {
22814
22922
  return;
22815
22923
  }
22816
22924
  if (!this.editor.range) {
22817
22925
  return;
22818
22926
  }
22819
- this.editor.insertText(text2);
22927
+ this.editor.insertText(text2, useCache);
22820
22928
  if (isRender) {
22821
22929
  this.editor.formatElementStack();
22822
22930
  this.editor.domRender();
@@ -22824,7 +22932,7 @@ const _sfc_main = {
22824
22932
  }
22825
22933
  },
22826
22934
  //api:插入html
22827
- insertHtml(html, isRender = true) {
22935
+ insertHtml(html, isRender = true, useCache = false) {
22828
22936
  if (this.disabled) {
22829
22937
  return;
22830
22938
  }
@@ -22833,7 +22941,7 @@ const _sfc_main = {
22833
22941
  }
22834
22942
  const elements = this.editor.parseHtml(html);
22835
22943
  for (let i = 0; i < elements.length; i++) {
22836
- this.editor.insertElement(elements[i], false);
22944
+ this.editor.insertElement(elements[i], false, i == 0 ? useCache : false);
22837
22945
  }
22838
22946
  if (isRender) {
22839
22947
  this.editor.formatElementStack();
@@ -22849,19 +22957,16 @@ const _sfc_main = {
22849
22957
  this.editor.destroy();
22850
22958
  }
22851
22959
  };
22852
- const _hoisted_1 = { class: "editify" };
22853
- const _hoisted_2 = ["data-editify-uid"];
22854
- const _hoisted_3 = ["data-editify-placeholder"];
22855
- const _hoisted_4 = ["value"];
22856
- const _hoisted_5 = {
22857
- key: 1,
22858
- class: "editify-footer"
22859
- };
22860
- const _hoisted_6 = { class: "editify-footer-words" };
22960
+ const _hoisted_1 = ["data-editify-uid"];
22961
+ const _hoisted_2 = ["data-editify-placeholder"];
22962
+ const _hoisted_3 = ["value"];
22963
+ const _hoisted_4 = { class: "editify-footer-words" };
22861
22964
  function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
22862
22965
  const _component_Menu = resolveComponent("Menu");
22863
22966
  const _component_Toolbar = resolveComponent("Toolbar");
22864
- return openBlock(), createElementBlock("div", _hoisted_1, [
22967
+ return openBlock(), createElementBlock("div", {
22968
+ class: normalizeClass(["editify", { fullheight: _ctx.height === true && !$data.isFullScreen, fullscreen: $data.isFullScreen }])
22969
+ }, [
22865
22970
  $options.menuConfig.use ? (openBlock(), createBlock(_component_Menu, {
22866
22971
  key: 0,
22867
22972
  config: $options.menuConfig,
@@ -22871,7 +22976,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
22871
22976
  }, null, 8, ["config", "disabled", "color"])) : createCommentVNode("", true),
22872
22977
  createElementVNode("div", {
22873
22978
  ref: "body",
22874
- class: normalizeClass(["editify-body", { border: _ctx.border, menu_inner: $options.menuConfig.use && $options.menuConfig.mode == "inner" }]),
22979
+ class: normalizeClass(["editify-body", { border: $options.showBorder, menu_inner: $options.menuConfig.use && $options.menuConfig.mode == "inner" }]),
22875
22980
  "data-editify-uid": $setup.uid
22876
22981
  }, [
22877
22982
  createElementVNode("div", {
@@ -22883,13 +22988,13 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
22883
22988
  onCompositionstart: _cache[2] || (_cache[2] = ($event) => $data.isInputChinese = true),
22884
22989
  onCompositionend: _cache[3] || (_cache[3] = ($event) => $data.isInputChinese = false),
22885
22990
  "data-editify-placeholder": _ctx.placeholder
22886
- }, null, 46, _hoisted_3),
22991
+ }, null, 46, _hoisted_2),
22887
22992
  $data.isSourceView ? (openBlock(), createElementBlock("textarea", {
22888
22993
  key: 0,
22889
22994
  value: $options.value,
22890
22995
  readonly: "",
22891
22996
  class: "editify-source"
22892
- }, null, 8, _hoisted_4)) : createCommentVNode("", true),
22997
+ }, null, 8, _hoisted_3)) : createCommentVNode("", true),
22893
22998
  createVNode(_component_Toolbar, {
22894
22999
  ref: "toolbar",
22895
23000
  modelValue: $data.toolbarOptions.show,
@@ -22898,13 +23003,17 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
22898
23003
  type: $data.toolbarOptions.type,
22899
23004
  config: $options.toolbarConfig
22900
23005
  }, null, 8, ["modelValue", "node", "type", "config"])
22901
- ], 10, _hoisted_2),
22902
- _ctx.showWordLength ? (openBlock(), createElementBlock("div", _hoisted_5, [
22903
- createElementVNode("div", _hoisted_6, toDisplayString($options.$editTrans("totalWordCount")) + toDisplayString($options.textValue.length), 1)
22904
- ])) : createCommentVNode("", true)
22905
- ]);
23006
+ ], 10, _hoisted_1),
23007
+ _ctx.showWordLength ? (openBlock(), createElementBlock("div", {
23008
+ key: 1,
23009
+ class: normalizeClass(["editify-footer", { fullscreen: $data.isFullScreen && !$data.isSourceView }]),
23010
+ ref: "footer"
23011
+ }, [
23012
+ createElementVNode("div", _hoisted_4, toDisplayString($options.$editTrans("totalWordCount")) + toDisplayString($options.textValue.length), 1)
23013
+ ], 2)) : createCommentVNode("", true)
23014
+ ], 2);
22906
23015
  }
22907
- const Editify = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-b523f8ea"]]);
23016
+ const Editify = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-ede8b39b"]]);
22908
23017
  const iconfont = "";
22909
23018
  const en_US = {
22910
23019
  textWrapUp: "Up feed",
@@ -22989,7 +23098,8 @@ const en_US = {
22989
23098
  alignRight: "Align right",
22990
23099
  alignJustify: "Align justify",
22991
23100
  defaultLineHeight: "Default",
22992
- auto: "auto"
23101
+ auto: "auto",
23102
+ fullScreen: "Full screen"
22993
23103
  };
22994
23104
  const zh_CN = {
22995
23105
  textWrapUp: "向上换行",
@@ -23074,7 +23184,8 @@ const zh_CN = {
23074
23184
  alignRight: "右对齐",
23075
23185
  alignJustify: "两端对齐",
23076
23186
  defaultLineHeight: "默认行高",
23077
- auto: "自适应"
23187
+ auto: "自适应",
23188
+ fullScreen: "全屏"
23078
23189
  };
23079
23190
  const translations = {
23080
23191
  zh_CN,
@@ -23085,7 +23196,7 @@ const i18n = (locale) => {
23085
23196
  return translations[locale][key];
23086
23197
  };
23087
23198
  };
23088
- const version = "0.0.47";
23199
+ const version = "0.0.49";
23089
23200
  const install = (app, props) => {
23090
23201
  const locale = (props ? props.locale : "zh_CN") || "zh_CN";
23091
23202
  app.provide("$editTrans", i18n(locale));