@@ -2,6 +2,7 @@ import {Fragment, type Node, type NodeRange, type NodeType, Slice} from 'prosemi
22import { wrapInList } from 'prosemirror-schema-list' ;
33import type { Command , Transaction } from 'prosemirror-state' ;
44import { ReplaceAroundStep , liftTarget } from 'prosemirror-transform' ;
5+ import { findParentNodeClosestToPos } from 'prosemirror-utils' ;
56
67import { 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)
102103export 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