Skip to content

Commit 3eac1a7

Browse files
committed
fix: updated skip logic
1 parent 218f79e commit 3eac1a7

File tree

1 file changed

+28
-16
lines changed

1 file changed

+28
-16
lines changed

src/extensions/markdown/Lists/commands.ts

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import {Fragment, type Node, type NodeRange, type NodeType, Slice} from 'prosemi
22
import {wrapInList} from 'prosemirror-schema-list';
33
import type {Command, Transaction} from 'prosemirror-state';
44
import {ReplaceAroundStep, liftTarget} from 'prosemirror-transform';
5+
import {findParentNodeClosestToPos} from 'prosemirror-utils';
56

67
import {joinPreviousBlock} from '../../../commands/join';
78

@@ -83,8 +84,8 @@ function findDeepestListItem(tr: Transaction, itemType: NodeType, start: number)
8384
while (pos >= 0) {
8485
const node = tr.doc.nodeAt(pos);
8586

86-
console.log('pos', pos);
87-
console.log('node', node?.type.name);
87+
// console.log('pos', pos);
88+
// console.log('node', node?.type.name);
8889

8990
if (node?.type === itemType) {
9091
console.log('poses:', pos, pos + node.nodeSize);
@@ -102,39 +103,50 @@ function findDeepestListItem(tr: Transaction, itemType: NodeType, start: number)
102103
export function getListItemsToTransform(
103104
tr: Transaction,
104105
itemType: NodeType,
105-
{
106-
start,
107-
end,
108-
from,
109-
to,
110-
}: {
111-
start: number;
112-
end: number;
113-
from: number;
114-
to: number;
115-
},
106+
{start, end, from, to}: {start: number; end: number; from: number; to: number},
116107
): Map<number, number> {
117108
console.warn('getListItemsToTransform', start, end, from, to);
118109
const listItemsPoses = new Map<number, number>();
119110

120111
const [fromStart, fromEnd] = findDeepestListItem(tr, itemType, from);
121112
const [toStart, toEnd] = findDeepestListItem(tr, itemType, to);
122113

114+
const $from = tr.doc.resolve(from);
115+
const $to = tr.doc.resolve(to);
116+
117+
const fromParent = findParentNodeClosestToPos($from, (node) => node.type === itemType);
118+
const toParent = findParentNodeClosestToPos($to, (node) => node.type === itemType);
119+
120+
console.error('+++');
121+
console.log('form', fromStart, fromEnd);
122+
console.log('to', toStart, toEnd);
123+
console.log(
124+
'fromParent',
125+
fromParent?.pos,
126+
Number(fromParent?.pos) + Number(fromParent?.node?.nodeSize),
127+
);
128+
console.log(
129+
'toParent',
130+
toParent?.pos,
131+
Number(toParent?.pos) + Number(toParent?.node?.nodeSize),
132+
);
133+
123134
listItemsPoses.set(fromStart, fromEnd);
124135
listItemsPoses.set(toStart, toEnd);
125136

126137
let pos = fromStart + 1;
127138

128-
while (pos < toEnd) {
139+
while (pos < toStart) {
129140
const node = tr.doc.nodeAt(pos);
130141

131142
console.log('pos', pos);
132143
console.log('node', node?.type.name);
133144

134145
if (node?.type === itemType) {
135146
listItemsPoses.set(pos, pos + node.nodeSize);
147+
} else if (node && !isListNode(node)) {
148+
pos += node.nodeSize - 1;
136149
}
137-
138150
pos++;
139151
}
140152

@@ -234,7 +246,7 @@ export function sinkOnlySelectedListItem(itemType: NodeType): Command {
234246
let j = 0;
235247
while (j < tr.doc.nodeSize - 1) {
236248
const node = tr.doc.nodeAt(j);
237-
console.log('node', j, node?.type.name);
249+
// console.log('node', j, node?.type.name);
238250
j++;
239251
}
240252

0 commit comments

Comments
 (0)