@wangeditor-next/editor 5.6.38 → 5.6.40

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.
@@ -98,6 +98,7 @@ interface ICodeLangConfig {
98
98
  codeLangs: {
99
99
  text: string;
100
100
  value: string;
101
+ selected?: boolean;
101
102
  }[];
102
103
  }
103
104
  export interface IMenuConfig {
package/dist/index.js CHANGED
@@ -40006,15 +40006,13 @@
40006
40006
  this.iconSvg = FULL_WIDTH_SVG;
40007
40007
  this.tag = 'button';
40008
40008
  }
40009
- TableFullWidth.prototype.getValue = function (editor) {
40010
- var tableNode = DomEditor.getSelectedNodeByType(editor, 'table');
40011
- if (tableNode == null) {
40012
- return false;
40013
- }
40014
- return tableNode.width === '100%';
40009
+ TableFullWidth.prototype.getValue = function (_editor) {
40010
+ // 每次点击都执行调整,不需要状态判断
40011
+ return false;
40015
40012
  };
40016
- TableFullWidth.prototype.isActive = function (editor) {
40017
- return !!this.getValue(editor);
40013
+ TableFullWidth.prototype.isActive = function (_editor) {
40014
+ // 每次点击都执行调整,不需要状态判断
40015
+ return false;
40018
40016
  };
40019
40017
  TableFullWidth.prototype.isDisabled = function (editor) {
40020
40018
  var selection = editor.selection;
@@ -40031,14 +40029,63 @@
40031
40029
  }
40032
40030
  return false;
40033
40031
  };
40034
- TableFullWidth.prototype.exec = function (editor, value) {
40032
+ TableFullWidth.prototype.exec = function (editor, _value) {
40035
40033
  if (this.isDisabled(editor)) {
40036
40034
  return;
40037
40035
  }
40038
- var props = {
40039
- width: value ? 'auto' : '100%', // 切换 'auto' 和 '100%'
40040
- };
40041
- distExports$1.Transforms.setNodes(editor, props, { mode: 'highest' });
40036
+ var tableNode = DomEditor.getSelectedNodeByType(editor, 'table');
40037
+ if (!tableNode) {
40038
+ return;
40039
+ }
40040
+ var _a = tableNode.columnWidths, columnWidths = _a === void 0 ? [] : _a;
40041
+ // 获取当前选中的表格的DOM元素,再查找table-container容器元素,防止文档多表格时,获取到其他表格的容器元素
40042
+ var tableDom = DomEditor.toDOMNode(editor, tableNode);
40043
+ var containerElement = tableDom.querySelector('.table-container');
40044
+ if (!containerElement || columnWidths.length === 0) {
40045
+ // 如果找不到容器或没有列宽信息,则使用原来的逻辑,先使用auto预留以后实现按比例实现缩放功能
40046
+ var props = {
40047
+ width: 'auto',
40048
+ };
40049
+ distExports$1.Transforms.setNodes(editor, props, { mode: 'highest' });
40050
+ return;
40051
+ }
40052
+ var containerWidth = containerElement.clientWidth;
40053
+ var currentTotalWidth = columnWidths.reduce(function (a, b) { return a + b; }, 0);
40054
+ // 计算等比例调整后的列宽
40055
+ var adjustedColumnWidths = columnWidths.map(function (width) {
40056
+ var ratio = width / currentTotalWidth;
40057
+ return Math.floor(ratio * containerWidth);
40058
+ });
40059
+ // 确保最小宽度限制(每列至少10px)
40060
+ var minWidth = 10;
40061
+ var adjustedWithMinWidth = adjustedColumnWidths.map(function (width) { return Math.max(minWidth, width); });
40062
+ // 如果调整后的总宽度超过容器宽度,按比例缩小
40063
+ var adjustedTotalWidth = adjustedWithMinWidth.reduce(function (a, b) { return a + b; }, 0);
40064
+ if (adjustedTotalWidth > containerWidth) {
40065
+ var scaleFactor_1 = containerWidth / adjustedTotalWidth;
40066
+ var finalColumnWidths = adjustedWithMinWidth.map(function (width) { return Math.max(minWidth, Math.floor(width * scaleFactor_1)); });
40067
+ // 应用新的列宽和宽度设置
40068
+ var props = {
40069
+ width: 'auto',
40070
+ columnWidths: finalColumnWidths,
40071
+ };
40072
+ distExports$1.Transforms.setNodes(editor, props, { mode: 'highest' });
40073
+ }
40074
+ else {
40075
+ // 如果调整后的总宽度小于容器宽度,将剩余宽度加到最后一列
40076
+ var finalColumnWidths = __spreadArray([], __read(adjustedWithMinWidth), false);
40077
+ var remainingWidth = containerWidth - adjustedTotalWidth - 1;
40078
+ if (remainingWidth > 0 && finalColumnWidths.length > 0) {
40079
+ // 将剩余宽度加到最后一列
40080
+ finalColumnWidths[finalColumnWidths.length - 1] += remainingWidth;
40081
+ }
40082
+ // 应用新的列宽和宽度设置
40083
+ var props = {
40084
+ width: 'auto',
40085
+ columnWidths: finalColumnWidths,
40086
+ };
40087
+ distExports$1.Transforms.setNodes(editor, props, { mode: 'highest' });
40088
+ }
40042
40089
  };
40043
40090
  return TableFullWidth;
40044
40091
  }());
@@ -41551,6 +41598,39 @@
41551
41598
  var hasTable = !!__spreadArray([], __read(tables), false).find(function () { return true; });
41552
41599
  return hasTable;
41553
41600
  }
41601
+ /**
41602
+ * 检查当前选中的节点是否是受保护的节点类型(不应该被删除的节点)
41603
+ * @param editor editor
41604
+ * @returns 是否是受保护的节点
41605
+ */
41606
+ function isProtectedNode(editor) {
41607
+ var e_1, _a;
41608
+ // 检查是否是受保护的节点类型
41609
+ var protectedTypes = [
41610
+ 'paragraph',
41611
+ 'header1', 'header2', 'header3', 'header4', 'header5', 'header6',
41612
+ 'blockquote',
41613
+ 'list-item',
41614
+ 'todo',
41615
+ 'divider',
41616
+ ];
41617
+ try {
41618
+ for (var protectedTypes_1 = __values(protectedTypes), protectedTypes_1_1 = protectedTypes_1.next(); !protectedTypes_1_1.done; protectedTypes_1_1 = protectedTypes_1.next()) {
41619
+ var type = protectedTypes_1_1.value;
41620
+ if (DomEditor.getSelectedNodeByType(editor, type)) {
41621
+ return true;
41622
+ }
41623
+ }
41624
+ }
41625
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
41626
+ finally {
41627
+ try {
41628
+ if (protectedTypes_1_1 && !protectedTypes_1_1.done && (_a = protectedTypes_1.return)) _a.call(protectedTypes_1);
41629
+ }
41630
+ finally { if (e_1) throw e_1.error; }
41631
+ }
41632
+ return false;
41633
+ }
41554
41634
  function withTable(editor) {
41555
41635
  var insertBreak = editor.insertBreak, deleteBackward = editor.deleteBackward, deleteForward = editor.deleteForward, deleteFragment = editor.deleteFragment, normalizeNode = editor.normalizeNode, insertData = editor.insertData, handleTab = editor.handleTab, selectAll = editor.selectAll;
41556
41636
  var newEditor = editor;
@@ -41586,7 +41666,8 @@
41586
41666
  var isTableOnBeforeLocation = isTableLocation(newEditor, before); // before 是否是 table
41587
41667
  // 如果前面是 table, 当前是 paragraph ,则不执行删除。否则会删除 table 最后一个 cell
41588
41668
  // 兼容了 table 嵌套 p标签元素 selection数组五层的情况 - issues/342
41589
- if (!tableCell && isTableOnBeforeLocation && DomEditor.getSelectedNodeByType(newEditor, 'paragraph')) {
41669
+ // 如果前面是 table, 当前是受保护的节点类型,则不执行删除
41670
+ if (!tableCell && isTableOnBeforeLocation && isProtectedNode(newEditor)) {
41590
41671
  return;
41591
41672
  }
41592
41673
  }
@@ -41646,7 +41727,8 @@
41646
41727
  if (after) {
41647
41728
  var isTableOnAfterLocation = isTableLocation(newEditor, after); // after 是否是 table
41648
41729
  // 如果后面是 table, 当前是 paragraph,则不执行删除
41649
- if (!tableCell && isTableOnAfterLocation && DomEditor.getSelectedNodeByType(newEditor, 'paragraph')) {
41730
+ // 如果后面是 table, 当前是受保护的节点类型,则不执行删除
41731
+ if (!tableCell && isTableOnAfterLocation && isProtectedNode(newEditor)) {
41650
41732
  return;
41651
41733
  }
41652
41734
  }
@@ -41889,7 +41971,13 @@
41889
41971
  if (displayNoneRegex.test(styleAttr)) {
41890
41972
  $cell.remove();
41891
41973
  }
41974
+ else {
41975
+ // 删除style属性(保留单元格,只删除样式)
41976
+ $cell.removeAttr('style');
41977
+ }
41892
41978
  }
41979
+ // 设置width属性为auto
41980
+ $cell.attr('width', 'auto');
41893
41981
  }
41894
41982
  // 处理表格单元格中的 <p> 标签(通常来自Word复制)
41895
41983
  var $cells = $table.find('td, th');