Skip to content

Commit 9454dcc

Browse files
authored
Merge pull request #1781 from romainmenke/fix-issue-1778--practical-snowy-owl-25291b279a
recalculate the insertion index after normalizing a node
2 parents e1538a4 + 7278432 commit 9454dcc

2 files changed

Lines changed: 46 additions & 10 deletions

File tree

lib/container.js

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -176,16 +176,16 @@ class Container extends Node {
176176
}
177177

178178
insertBefore(exist, add) {
179-
exist = this.index(exist)
180-
179+
let existIndex = this.index(exist)
181180
let type = exist === 0 ? 'prepend' : false
182-
let nodes = this.normalize(add, this.proxyOf.nodes[exist], type).reverse()
183-
for (let node of nodes) this.proxyOf.nodes.splice(exist, 0, node)
181+
let nodes = this.normalize(add, this.proxyOf.nodes[existIndex], type).reverse()
182+
existIndex = this.index(exist)
183+
for (let node of nodes) this.proxyOf.nodes.splice(existIndex, 0, node)
184184

185185
let index
186186
for (let id in this.indexes) {
187187
index = this.indexes[id]
188-
if (exist <= index) {
188+
if (existIndex <= index) {
189189
this.indexes[id] = index + nodes.length
190190
}
191191
}
@@ -196,15 +196,15 @@ class Container extends Node {
196196
}
197197

198198
insertAfter(exist, add) {
199-
exist = this.index(exist)
200-
201-
let nodes = this.normalize(add, this.proxyOf.nodes[exist]).reverse()
202-
for (let node of nodes) this.proxyOf.nodes.splice(exist + 1, 0, node)
199+
let existIndex = this.index(exist)
200+
let nodes = this.normalize(add, this.proxyOf.nodes[existIndex]).reverse()
201+
existIndex = this.index(exist)
202+
for (let node of nodes) this.proxyOf.nodes.splice(existIndex + 1, 0, node)
203203

204204
let index
205205
for (let id in this.indexes) {
206206
index = this.indexes[id]
207-
if (exist < index) {
207+
if (existIndex < index) {
208208
this.indexes[id] = index + nodes.length
209209
}
210210
}

test/container.test.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -636,6 +636,24 @@ test('insertBefore() receives array', () => {
636636
is(a.toString(), 'a{ color: red; width: 1; height: 2; z-index: 1 }')
637637
})
638638

639+
test('insertBefore() receives pre-existing child node - a', () => {
640+
let a = parse('a{ align-items: start; color: red; z-index: 1 }')
641+
let declA = (a.first as Rule).nodes[0];
642+
let declC = (a.first as Rule).nodes[2];
643+
declC.before(declA);
644+
645+
is(a.toString(), 'a{ color: red; align-items: start; z-index: 1 }')
646+
})
647+
648+
test('insertBefore() receives pre-existing child node - b', () => {
649+
let a = parse('a{ align-items: start; color: red; z-index: 1 }')
650+
let declA = (a.first as Rule).nodes[0];
651+
let declC = (a.first as Rule).nodes[2];
652+
declA.before(declC);
653+
654+
is(a.toString(), 'a{ z-index: 1; align-items: start; color: red }')
655+
})
656+
639657
test('insertAfter() inserts child', () => {
640658
let rule = parse('a { a: 1; b: 2 }').first as Rule
641659
rule.insertAfter(0, { prop: 'c', value: '3' })
@@ -666,6 +684,24 @@ test('insertAfter() receives array', () => {
666684
is(a.toString(), 'a{ color: red; width: 1; height: 2; z-index: 1 }')
667685
})
668686

687+
test('insertAfter() receives pre-existing child node - a', () => {
688+
let a = parse('a{ align-items: start; color: red; z-index: 1 }')
689+
let declA = (a.first as Rule).nodes[0];
690+
let declC = (a.first as Rule).nodes[2];
691+
declC.after(declA);
692+
693+
is(a.toString(), 'a{ color: red; z-index: 1; align-items: start }')
694+
})
695+
696+
test('insertAfter() receives pre-existing child node - b', () => {
697+
let a = parse('a{ align-items: start; color: red; z-index: 1 }')
698+
let declA = (a.first as Rule).nodes[0];
699+
let declC = (a.first as Rule).nodes[2];
700+
declA.after(declC);
701+
702+
is(a.toString(), 'a{ align-items: start; z-index: 1; color: red }')
703+
})
704+
669705
test('removeChild() removes by index', () => {
670706
let rule = parse('a { a: 1; b: 2 }').first as Rule
671707
rule.removeChild(1)

0 commit comments

Comments
 (0)