@@ -68,7 +68,12 @@ const appendNode = (node, target) => {
6868 DOM . append ( target , element , placeholder )
6969}
7070
71- const handleMountPoint = ( element , target ) => {
71+ const insertBeforeNode = ( node , ref ) => {
72+ const { element, placeholder} = node . $ctx . nodeInfo
73+ DOM . before ( ref , element , placeholder )
74+ }
75+
76+ const handleMountPoint = ( element , target , ref ) => {
7277 if ( element . nodeType !== 3 ) return
7378
7479 const mountPoint = element [ EFMountPoint ]
@@ -78,9 +83,16 @@ const handleMountPoint = (element, target) => {
7883 if ( ! node ) return
7984
8085 inform ( )
81- if ( ARR . isArray ( node ) ) {
82- for ( let i of node ) appendNode ( i , target )
83- } else appendNode ( node , target )
86+ if ( ref ) {
87+ if ( ARR . isArray ( node ) ) {
88+ for ( let i of node ) insertBeforeNode ( i , ref )
89+ } else insertBeforeNode ( node , ref )
90+ } else {
91+ // eslint-disable-next-line no-lonely-if
92+ if ( ARR . isArray ( node ) ) {
93+ for ( let i of node ) appendNode ( i , target )
94+ } else appendNode ( node , target )
95+ }
8496 exec ( )
8597}
8698
@@ -90,8 +102,9 @@ const appendToTarget = (target, nodes) => {
90102 if ( DOM . isNodeInstance ( i ) ) {
91103 target . appendChild ( i )
92104 handleMountPoint ( i , target )
93- } else if ( isInstance ( i , EFFragment ) ) i . appendTo ( target )
94- else if ( i instanceof shared . EFBaseComponent ) {
105+ } else if ( isInstance ( i , EFFragment ) ) {
106+ i . appendTo ( target )
107+ } else if ( i instanceof shared . EFBaseComponent ) {
95108 i . $mount ( { target} )
96109 }
97110 }
@@ -104,9 +117,10 @@ const addBeforeTarget = (target, nodes) => {
104117 for ( let i of nodes ) {
105118 if ( DOM . isNodeInstance ( i ) ) {
106119 parentNode . insertBefore ( i , target )
107- handleMountPoint ( i , parentNode )
108- } else if ( isInstance ( i , EFFragment ) ) i . addBefore ( target )
109- else if ( i instanceof shared . EFBaseComponent ) {
120+ handleMountPoint ( i , parentNode , target )
121+ } else if ( isInstance ( i , EFFragment ) ) {
122+ i . addBefore ( target )
123+ } else if ( i instanceof shared . EFBaseComponent ) {
110124 i . $mount ( { target, option : mountOptions . BEFORE } )
111125 }
112126 }
@@ -118,23 +132,28 @@ DOM.isNodeInstance = (node) => {
118132 return ! ! ( node && node . nodeType )
119133}
120134
121- DOM . before = ( node , ...nodes ) => {
122- const parent = node . parentNode
135+ DOM . before = ( anchorNode , ...nodes ) => {
136+ const parentNode = anchorNode . parentNode
123137 const firstNode = nodes [ 0 ]
124- // eslint-disable-next-line multiline-ternary, no-ternary
125- if ( nodes . length === 1 && DOM . isNodeInstance ( firstNode ) && ( firstNode . nodeType === 3 ? ! firstNode [ EFMountPoint ] : true ) ) {
126- parent . insertBefore ( nodes [ 0 ] , node )
127- } else if ( parent . nodeType === 11 ) {
128- addBeforeTarget ( node , nodes )
138+ if (
139+ nodes . length === 1 &&
140+ DOM . isNodeInstance ( firstNode ) &&
141+ // When the node is a text node, check if it's not a mount point anchor
142+ // eslint-disable-next-line multiline-ternary, no-ternary
143+ ( firstNode . nodeType === 3 ? ! firstNode [ EFMountPoint ] : true )
144+ ) {
145+ parentNode . insertBefore ( nodes [ 0 ] , anchorNode )
146+ } else if ( parentNode . nodeType === 11 ) {
147+ addBeforeTarget ( anchorNode , nodes )
129148 } else {
130149 useFragment ( ( tempFragment , recycleFragment ) => {
131150 inform ( )
132151 appendToTarget ( tempFragment , nodes )
133152 useAnchor ( ( tempAnchor , recycleAnchor ) => {
134- parent . insertBefore ( tempAnchor , node )
153+ parentNode . insertBefore ( tempAnchor , anchorNode )
135154 queueDom ( ( ) => {
136- parent . insertBefore ( tempFragment , tempAnchor )
137- parent . removeChild ( tempAnchor )
155+ parentNode . insertBefore ( tempFragment , tempAnchor )
156+ parentNode . removeChild ( tempAnchor )
138157 recycleAnchor ( )
139158 recycleFragment ( )
140159 } )
@@ -144,26 +163,26 @@ DOM.before = (node, ...nodes) => {
144163 }
145164}
146165
147- DOM . after = ( node , ...nodes ) => {
148- if ( node . nextSibling ) return DOM . before ( node . nextSibling , ...nodes )
149- return DOM . append ( node . parentNode , ...nodes )
166+ DOM . after = ( anchorNode , ...nodes ) => {
167+ if ( anchorNode . nextSibling ) return DOM . before ( anchorNode . nextSibling , ...nodes )
168+ return DOM . append ( anchorNode . parentNode , ...nodes )
150169}
151170
152- DOM . append = ( node , ...nodes ) => {
153- if ( DOM . isNodeInstance ( node ) ) {
171+ DOM . append = ( parentNode , ...nodes ) => {
172+ if ( DOM . isNodeInstance ( parentNode ) ) {
154173 if ( nodes . length === 1 && DOM . isNodeInstance ( nodes [ 0 ] ) ) {
155- node . appendChild ( nodes [ 0 ] )
156- handleMountPoint ( nodes [ 0 ] , node )
157- } else if ( node . nodeType === 11 ) appendToTarget ( node , nodes )
158- else if ( node . nodeType === 1 || node . nodeType === 9 ) {
174+ parentNode . appendChild ( nodes [ 0 ] )
175+ handleMountPoint ( nodes [ 0 ] , parentNode )
176+ } else if ( parentNode . nodeType === 11 ) appendToTarget ( parentNode , nodes )
177+ else if ( parentNode . nodeType === 1 || parentNode . nodeType === 9 ) {
159178 useFragment ( ( tempFragment , recycleFragment ) => {
160179 inform ( )
161180 appendToTarget ( tempFragment , nodes )
162181 useAnchor ( ( tempAnchor , recycleAnchor ) => {
163- node . appendChild ( tempAnchor )
182+ parentNode . appendChild ( tempAnchor )
164183 queueDom ( ( ) => {
165- node . insertBefore ( tempFragment , tempAnchor )
166- node . removeChild ( tempAnchor )
184+ parentNode . insertBefore ( tempFragment , tempAnchor )
185+ parentNode . removeChild ( tempAnchor )
167186 recycleAnchor ( )
168187 recycleFragment ( )
169188 } )
@@ -176,24 +195,24 @@ DOM.append = (node, ...nodes) => {
176195 }
177196
178197 // Handle EFComponent
179- if ( node instanceof shared . EFBaseComponent ) {
180- if ( ! ( ARR . isArray ( node . children ) ) ) {
181- if ( process . env . NODE_ENV !== 'production' ) dbg . warn ( node , 'has no `children` list mount point! Child nodes are all ignored!' )
198+ if ( parentNode instanceof shared . EFBaseComponent ) {
199+ if ( ! ( ARR . isArray ( parentNode . children ) ) ) {
200+ if ( process . env . NODE_ENV !== 'production' ) dbg . warn ( parentNode , 'has no `children` list mount point! Child nodes are all ignored!' )
182201 return
183202 }
184203
185204 inform ( )
186205 for ( let i of nodes ) {
187206 i = shared . toEFComponent ( i )
188- node . children . push ( i )
207+ parentNode . children . push ( i )
189208 }
190209 exec ( )
191210
192211 return
193212 }
194213
195214 // Handle fragment
196- if ( isInstance ( node , EFFragment ) ) return node . append ( ...nodes )
215+ if ( isInstance ( parentNode , EFFragment ) ) return parentNode . append ( ...nodes )
197216}
198217
199218DOM . remove = ( node ) => {
0 commit comments