@@ -2,6 +2,7 @@ import {Fragment, type Node, type NodeRange, type NodeType, Slice} from 'prosemi
2
2
import { wrapInList } from 'prosemirror-schema-list' ;
3
3
import type { Command , Transaction } from 'prosemirror-state' ;
4
4
import { ReplaceAroundStep , liftTarget } from 'prosemirror-transform' ;
5
+ import { findParentNodeClosestToPos } from 'prosemirror-utils' ;
5
6
6
7
import { joinPreviousBlock } from '../../../commands/join' ;
7
8
@@ -83,8 +84,8 @@ function findDeepestListItem(tr: Transaction, itemType: NodeType, start: number)
83
84
while ( pos >= 0 ) {
84
85
const node = tr . doc . nodeAt ( pos ) ;
85
86
86
- console . log ( 'pos' , pos ) ;
87
- console . log ( 'node' , node ?. type . name ) ;
87
+ // console.log('pos', pos);
88
+ // console.log('node', node?.type.name);
88
89
89
90
if ( node ?. type === itemType ) {
90
91
console . log ( 'poses:' , pos , pos + node . nodeSize ) ;
@@ -102,39 +103,50 @@ function findDeepestListItem(tr: Transaction, itemType: NodeType, start: number)
102
103
export function getListItemsToTransform (
103
104
tr : Transaction ,
104
105
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 } ,
116
107
) : Map < number , number > {
117
108
console . warn ( 'getListItemsToTransform' , start , end , from , to ) ;
118
109
const listItemsPoses = new Map < number , number > ( ) ;
119
110
120
111
const [ fromStart , fromEnd ] = findDeepestListItem ( tr , itemType , from ) ;
121
112
const [ toStart , toEnd ] = findDeepestListItem ( tr , itemType , to ) ;
122
113
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
+
123
134
listItemsPoses . set ( fromStart , fromEnd ) ;
124
135
listItemsPoses . set ( toStart , toEnd ) ;
125
136
126
137
let pos = fromStart + 1 ;
127
138
128
- while ( pos < toEnd ) {
139
+ while ( pos < toStart ) {
129
140
const node = tr . doc . nodeAt ( pos ) ;
130
141
131
142
console . log ( 'pos' , pos ) ;
132
143
console . log ( 'node' , node ?. type . name ) ;
133
144
134
145
if ( node ?. type === itemType ) {
135
146
listItemsPoses . set ( pos , pos + node . nodeSize ) ;
147
+ } else if ( node && ! isListNode ( node ) ) {
148
+ pos += node . nodeSize - 1 ;
136
149
}
137
-
138
150
pos ++ ;
139
151
}
140
152
@@ -234,7 +246,7 @@ export function sinkOnlySelectedListItem(itemType: NodeType): Command {
234
246
let j = 0 ;
235
247
while ( j < tr . doc . nodeSize - 1 ) {
236
248
const node = tr . doc . nodeAt ( j ) ;
237
- console . log ( 'node' , j , node ?. type . name ) ;
249
+ // console.log('node', j, node?.type.name);
238
250
j ++ ;
239
251
}
240
252
0 commit comments