Skip to content

Commit a003837

Browse files
committed
🎨 #14635
1 parent fc55810 commit a003837

File tree

3 files changed

+14
-8
lines changed

3 files changed

+14
-8
lines changed

app/src/protyle/util/selection.ts

+3-7
Original file line numberDiff line numberDiff line change
@@ -351,10 +351,6 @@ export const setLastNodeRange = (editElement: Element, range: Range, setStart =
351351
}
352352
let lastNode = editElement.lastChild as Element;
353353
while (lastNode && lastNode.nodeType !== 3) {
354-
if (lastNode.nodeType !== 3 && lastNode.tagName === "BR") {
355-
// 防止单元格中 ⇧↓ 全部选中
356-
return range;
357-
}
358354
// https://github.com/siyuan-note/siyuan/issues/12792
359355
if (!lastNode.lastChild) {
360356
break;
@@ -367,14 +363,14 @@ export const setLastNodeRange = (editElement: Element, range: Range, setStart =
367363
lastNode = editElement;
368364
}
369365
if (setStart) {
370-
if (lastNode.nodeType !== 3 && lastNode.classList.contains("render-node") && lastNode.innerHTML === "") {
366+
if (lastNode.nodeType !== 3 && (lastNode.classList.contains("render-node") || lastNode.tagName === "BR") && lastNode.innerHTML === "") {
371367
range.setStartAfter(lastNode);
372368
} else {
373369
range.setStart(lastNode, lastNode.textContent.length);
374370
}
375371
} else {
376-
if (lastNode.nodeType !== 3 && lastNode.classList.contains("render-node") && lastNode.innerHTML === "") {
377-
range.setStartAfter(lastNode);
372+
if (lastNode.nodeType !== 3 && (lastNode.classList.contains("render-node") || lastNode.tagName === "BR") && lastNode.innerHTML === "") {
373+
range.setEndAfter(lastNode);
378374
} else {
379375
range.setEnd(lastNode, lastNode.textContent.length);
380376
}

app/src/protyle/wysiwyg/commonHotkey.ts

+3
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,9 @@ export const downSelect = (options: {
205205
// 代码块中 shift+alt 向下选中到末尾时,最后一个字符无法选中
206206
options.event.preventDefault();
207207
}
208+
} else if (tdElement) {
209+
setLastNodeRange(tdElement, options.range, false);
210+
options.event.preventDefault();
208211
}
209212
return;
210213
}

app/src/protyle/wysiwyg/index.ts

+8-1
Original file line numberDiff line numberDiff line change
@@ -1379,6 +1379,8 @@ export class WYSIWYG {
13791379
}).element);
13801380
}
13811381
window.siyuan.menus.menu.popup({x: mouseUpEvent.clientX - 8, y: mouseUpEvent.clientY - 16});
1382+
// 多选表格单元格后,选择菜单中的居左,然后 shift+左 选中的文字无法显示选中背景,因此需移除
1383+
protyle.wysiwyg.element.classList.remove("protyle-wysiwyg--hiderange");
13821384
}
13831385
}
13841386

@@ -1417,12 +1419,17 @@ export class WYSIWYG {
14171419
}
14181420
const startBlockElement = hasClosestBlock(range.startContainer);
14191421
let endBlockElement: false | HTMLElement;
1420-
if (mouseUpEvent.detail > 2 && range.endContainer.nodeType !== 3 && (range.endContainer as HTMLElement).tagName === "DIV" && range.endOffset === 0) {
1422+
if (mouseUpEvent.detail > 2 && range.endContainer.nodeType !== 3 && ["DIV", "TD", "TH"].includes((range.endContainer as HTMLElement).tagName) && range.endOffset === 0) {
14211423
// 三击选中段落块时,rangeEnd 会在下一个块
14221424
if ((range.endContainer as HTMLElement).classList.contains("protyle-attr") && startBlockElement) {
14231425
// 三击在悬浮层中会选择到 attr https://github.com/siyuan-note/siyuan/issues/4636
14241426
// 需要获取可编辑元素,使用 previousElementSibling 的话会 https://github.com/siyuan-note/siyuan/issues/9714
14251427
setLastNodeRange(getContenteditableElement(startBlockElement), range, false);
1428+
} else if (["TD", "TH"].includes((range.endContainer as HTMLElement).tagName)) {
1429+
const cellElement = hasClosestByTag(range.startContainer, "TH") || hasClosestByTag(range.startContainer, "TD")
1430+
if (cellElement) {
1431+
setLastNodeRange(cellElement, range, false);
1432+
}
14261433
}
14271434
} else {
14281435
endBlockElement = hasClosestBlock(range.endContainer);

0 commit comments

Comments
 (0)