Skip to content

Commit

Permalink
fix(): table & delete & br
Browse files Browse the repository at this point in the history
  • Loading branch information
yanmao committed Sep 25, 2021
1 parent 40440f1 commit 447544c
Show file tree
Hide file tree
Showing 10 changed files with 76 additions and 14 deletions.
50 changes: 43 additions & 7 deletions packages/engine/src/change/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ class ChangeModel implements ChangeInterface {
if (this.isComposing()) return this;
//折叠状态
if (range.collapsed) {
const { startNode, startOffset, endNode, endOffset } = range;
const { startNode, startOffset } = range;
//如果节点下只要一个br标签,并且是<p><br /><cursor /></p>,那么选择让光标选择在 <p><cursor /><br /></p>
if (
((startNode.isElement() &&
Expand All @@ -170,7 +170,7 @@ class ChangeModel implements ChangeInterface {
}
}
//修复inline光标
const { startNode, endNode, startOffset, endOffset } = range
let { startNode, endNode, startOffset, endOffset } = range
.cloneRange()
.shrinkToTextNode();
const prev = startNode.prev();
Expand Down Expand Up @@ -230,12 +230,48 @@ class ChangeModel implements ChangeInterface {
if (range.collapsed) range.collapse(false);
}
}
startNode = range.startNode;
endNode = range.endNode;
const startChildNodes = startNode.children();
// 自定义列表节点选中卡片前面就让光标到卡片后面去
if (node.isCustomize(range.startNode) && startOffset === 0) {
range.setStart(range.startNode, 1);
if (node.isCustomize(startNode) && startOffset === 0) {
range.setStart(startNode, 1);
}
if (node.isCustomize(range.endNode) && endOffset === 0) {
range.setEnd(range.endNode, 1);
if (node.isCustomize(endNode) && endOffset === 0) {
range.setEnd(endNode, 1);
}
// 空节点添加br
if (startNode.name === 'p' && startChildNodes.length === 0) {
startNode.append('<br />');
}
if (
!range.collapsed &&
endNode.name === 'p' &&
endNode.children().length === 0
) {
endNode.append('<br />');
}
// 空列表添加br
if (startNode.name === 'li') {
if (startChildNodes.length === 0) {
startNode.append('<br />');
} else if (
node.isCustomize(startNode) &&
startChildNodes.length === 1
) {
startNode.append('<br />');
}
}
if (!range.collapsed && endNode.name === 'li') {
const endChildNodes = endNode.children();
if (endChildNodes.length === 0) {
endNode.append('<br />');
} else if (
node.isCustomize(endNode) &&
endChildNodes.length === 1
) {
endNode.append('<br />');
}
}
//在非折叠,或者当前range对象和selection中的对象不一致的时候重新设置range
if (
Expand Down Expand Up @@ -400,7 +436,7 @@ class ChangeModel implements ChangeInterface {
value = this.getOriginValue();
selection?.move();
}
return formatEngineValue(value);
return value;
}

cacheRangeBeforeCommand() {
Expand Down
4 changes: 3 additions & 1 deletion packages/engine/src/constants/conversion.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { DATA_ELEMENT, ROOT } from './root';
import $ from '../node/query';
import { ConversionData } from '../types';
import {
Expand Down Expand Up @@ -47,7 +48,8 @@ const defaultConversion: ConversionData = [
from: (_name, _styles, attributes) => {
return (
_name === 'div' &&
(!attributes[CARD_KEY] || !attributes[READY_CARD_KEY])
(!attributes[CARD_KEY] || !attributes[READY_CARD_KEY]) &&
attributes[DATA_ELEMENT] !== ROOT
);
},
to: (_, style, attributes) => {
Expand Down
10 changes: 10 additions & 0 deletions packages/engine/src/constants/schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,16 @@ const defualtSchema: Array<SchemaRule | SchemaGlobal> = [
type: 'inline',
isVoid: true,
},
{
name: 'span',
type: 'mark',
attributes: {
'data-element': {
required: true,
value: ['anchor', 'cursor', 'focus'],
},
},
},
{
name: 'card',
type: 'inline',
Expand Down
2 changes: 1 addition & 1 deletion packages/engine/src/node/entry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -693,7 +693,7 @@ class NodeEntry implements NodeInterface {
html(): string;
html(html: string): NodeEntry;
html(html?: string): NodeEntry | string {
if (html) {
if (html !== undefined) {
this.each((node) => {
(node as Element).innerHTML = html;
});
Expand Down
1 change: 1 addition & 0 deletions packages/engine/src/typing/keydown/delete.ts
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ class Delete implements TypingHandleInterface {
cloneRange.setEnd(range.endContainer, range.endOffset + 1);
change.select(cloneRange);
change.deleteContent();
change.select(change.getRange().shrinkToTextNode());
return;
}
nextNode = range.endContainer;
Expand Down
13 changes: 12 additions & 1 deletion plugins/math/src/component/index.css
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
}
.am-engine span[data-card-key="math"] .data-math-container {
display: inline-block;
cursor: pointer;
border: 2px solid transparent;
}
.data-card-math-editor {
outline: none;
Expand Down Expand Up @@ -81,4 +83,13 @@
.data-card-math-editor .data-math-editor-toolbar .data-math-editor-toolbar-button .data-embed-toolbar-btn {
font-size: 14px;
display: block;
}
}

.am-engine span[data-card-key="math"].card-selected [data-card-element="center"].data-card-border-selected {
outline: none;
}

.am-engine span[data-card-key="math"] .data-card-border-selected .data-math-container {
border: 2px solid #1890FF;
border-radius: 4px;
}
1 change: 0 additions & 1 deletion plugins/table/src/component/helper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -271,7 +271,6 @@ class Helper implements HelperInterface {
trs.each((_, index) => {
const $tr = trs.eq(index);
if (!$tr) return;
if ($tr.find('td').length === 0) $tr.remove();
let height = parseInt($tr.css('height'));
height = height || 33;
$tr.css('height', height + 'px');
Expand Down
1 change: 1 addition & 0 deletions plugins/table/src/component/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -440,6 +440,7 @@ class TableComponent extends Card<TableValue> implements TableInterface {
.addClass('data-table')
.addClass('data-table-view');
}
value.rows = this.wrapper.find('tr').length;
if (value.width)
this.wrapper.find('table').css('width', `${value.width}px`);
return this.wrapper;
Expand Down
7 changes: 4 additions & 3 deletions plugins/table/src/component/template.ts
Original file line number Diff line number Diff line change
Expand Up @@ -176,9 +176,10 @@ class Template implements TemplateInterface {
return match + colgroup;
});
}

html = this.table.helper.normalize($(html)).get<HTMLElement>()!
.outerHTML;
const normalTable = this.table.helper.normalize($(html));
const trs = normalTable.find('tr');
rows = trs.length;
html = normalTable.get<HTMLElement>()!.outerHTML;
}

const table =
Expand Down
1 change: 1 addition & 0 deletions plugins/table/src/index.css
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@ div[data-card-key="table"].card-selected .data-table, div[data-card-key="table"]
width: 100%;
cursor: default;
margin-bottom: -1px;
z-index: 1;
}

.table-wrapper.active .table-cols-header {
Expand Down

0 comments on commit 447544c

Please sign in to comment.