Skip to content

Commit 27b48ca

Browse files
committed
fix: 🐛 search for rule index before removing it
1 parent d4b2f29 commit 27b48ca

File tree

1 file changed

+16
-4
lines changed

1 file changed

+16
-4
lines changed

addon/vcssom.js

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,19 @@ var cssToTree = function (tree, css, selector, prelude) {
4343

4444
exports.cssToTree = cssToTree;
4545

46+
function removeRule (sh, rule) {
47+
var maxIndex = rule.index;
48+
var rules = sh.cssRules || sh.rules;
49+
maxIndex = Math.max(maxIndex, rules.length - 1);
50+
while (maxIndex >= 0) {
51+
if (rules[maxIndex] === rule) {
52+
sh.deleteRule(maxIndex);
53+
break;
54+
}
55+
maxIndex--;
56+
}
57+
}
58+
4659
exports.addon = function (renderer) {
4760
if (process.env.NODE_ENV !== 'production') {
4861
require('./__dev__/warnOnMissingDependencies')('pipe', renderer, ['createRule']); // cssom
@@ -94,7 +107,7 @@ exports.addon = function (renderer) {
94107
if (newTree[prelude] === undefined) {
95108
var rules = oldTree[prelude];
96109
for (var selector in rules) {
97-
msh.deleteRule(rules[selector].index);
110+
removeRule(msh, rules[selector]);
98111
}
99112
}
100113
}
@@ -113,10 +126,9 @@ exports.addon = function (renderer) {
113126
var newRules = newTree[prelude];
114127

115128
// Remove rules not present in new tree.
116-
for (var selector in oldRules) {
129+
for (var selector in oldRules)
117130
if (!newRules[selector])
118-
sh.deleteRule(oldRules[selector].index)
119-
}
131+
deleteRule(sh, oldRules[selector]);
120132

121133
// Apply new rules.
122134
for (var selector in newRules) {

0 commit comments

Comments
 (0)