Skip to content

Commit 25b47ac

Browse files
committed
chore: updated getListItemsToTransform
1 parent 5a7c89a commit 25b47ac

File tree

1 file changed

+33
-16
lines changed

1 file changed

+33
-16
lines changed

src/extensions/markdown/Lists/commands.ts

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,25 @@ const sink = (tr: Transaction, range: NodeRange, itemType: NodeType) => {
7777
const isListItemNode = (node: Node, itemType: NodeType) =>
7878
node.childCount > 0 && node.firstChild!.type === itemType;
7979

80+
function findDeepestListItem(tr: Transaction, itemType: NodeType, start: number): [number, number] {
81+
let pos = start;
82+
83+
while (pos >= 0) {
84+
const node = tr.doc.nodeAt(pos);
85+
86+
console.log('pos', pos);
87+
console.log('node', node?.type.name);
88+
89+
if (node?.type === itemType) {
90+
console.log('poses:', pos, pos + node.nodeSize);
91+
return [pos, pos + node.nodeSize];
92+
}
93+
94+
pos--;
95+
}
96+
97+
return [start, start];
98+
}
8099
/**
81100
* Returns a map of list item positions that should be transformed (e.g., sink or lift).
82101
*/
@@ -95,27 +114,25 @@ function getListItemsToTransform(
95114
to: number;
96115
},
97116
): Map<number, number> {
98-
// console.warn('getListItemsToTransform', start, end, from, to);
117+
console.warn('getListItemsToTransform', start, end, from, to);
99118
const listItemsPoses = new Map<number, number>();
100-
let pos = start;
101119

102-
while (pos <= end) {
120+
const [fromStart, fromEnd] = findDeepestListItem(tr, itemType, from);
121+
const [toStart, toEnd] = findDeepestListItem(tr, itemType, to);
122+
123+
listItemsPoses.set(fromStart, fromEnd);
124+
listItemsPoses.set(toStart, toEnd);
125+
126+
let pos = fromStart + 1;
127+
128+
while (pos < toEnd) {
103129
const node = tr.doc.nodeAt(pos);
104130

105-
// console.log('pos', pos);
106-
// console.log('node', node?.type.name);
131+
console.log('pos', pos);
132+
console.log('node', node?.type.name);
107133

108134
if (node?.type === itemType) {
109-
// console.log('list pos ----->: ', pos, pos + node.nodeSize);
110-
const isBeetwwen =
111-
(pos <= from && pos + node.nodeSize >= from) ||
112-
(pos <= to && pos + node.nodeSize >= to);
113-
if (isBeetwwen) {
114-
// console.warn(isBeetwwen);
115-
listItemsPoses.set(pos, pos + node.nodeSize);
116-
} else {
117-
// console.log(isBeetwwen, pos, pos + node.nodeSize, 'from:to', from, to);
118-
}
135+
listItemsPoses.set(pos, pos + node.nodeSize);
119136
}
120137

121138
pos++;
@@ -244,7 +261,7 @@ export function sinkOnlySelectedListItem(itemType: NodeType): Command {
244261

245262
if (range) {
246263
console.log('[sink ---->]', range.start, range.end, range);
247-
sink(tr, range, itemType);
264+
// sink(tr, range, itemType);
248265
}
249266
}
250267
dispatch(tr.scrollIntoView());

0 commit comments

Comments
 (0)