mirror of
https://github.com/less/less.js.git
synced 2026-05-01 03:00:22 -04:00
update mergeRules (no separate !important rules + cleanup)
This commit is contained in:
@@ -321,62 +321,37 @@ ToCSSVisitor.prototype = {
|
||||
}
|
||||
},
|
||||
|
||||
_mergeRules: function (rules) {
|
||||
if (!rules) { return; }
|
||||
|
||||
var groups = {},
|
||||
parts,
|
||||
rule,
|
||||
key;
|
||||
_mergeRules: function(rules) {
|
||||
if (!rules) {
|
||||
return;
|
||||
}
|
||||
|
||||
var groups = {},
|
||||
groupsArr = [];
|
||||
|
||||
for (var i = 0; i < rules.length; i++) {
|
||||
rule = rules[i];
|
||||
|
||||
if ((rule instanceof tree.Declaration) && rule.merge) {
|
||||
key = [rule.name,
|
||||
rule.important ? "!" : ""].join(",");
|
||||
|
||||
if (!groups[key]) {
|
||||
groups[key] = [];
|
||||
} else {
|
||||
rules.splice(i--, 1);
|
||||
}
|
||||
|
||||
var rule = rules[i];
|
||||
if (rule.merge) {
|
||||
var key = rule.name;
|
||||
groups[key] ? rules.splice(i--, 1) :
|
||||
groupsArr.push(groups[key] = []);
|
||||
groups[key].push(rule);
|
||||
}
|
||||
}
|
||||
|
||||
Object.keys(groups).map(function (k) {
|
||||
|
||||
function toExpression(values) {
|
||||
return new (tree.Expression)(values.map(function (p) {
|
||||
return p.value;
|
||||
}));
|
||||
}
|
||||
|
||||
function toValue(values) {
|
||||
return new (tree.Value)(values.map(function (p) {
|
||||
return p;
|
||||
}));
|
||||
}
|
||||
|
||||
parts = groups[k];
|
||||
|
||||
if (parts.length > 1) {
|
||||
rule = parts[0];
|
||||
var spacedGroups = [];
|
||||
var lastSpacedGroup = [];
|
||||
parts.map(function (p) {
|
||||
if (p.merge === "+") {
|
||||
if (lastSpacedGroup.length > 0) {
|
||||
spacedGroups.push(toExpression(lastSpacedGroup));
|
||||
}
|
||||
lastSpacedGroup = [];
|
||||
groupsArr.forEach(function(group) {
|
||||
if (group.length > 0) {
|
||||
var result = group[0],
|
||||
space = [],
|
||||
comma = [new tree.Expression(space)];
|
||||
group.forEach(function(rule) {
|
||||
if ((rule.merge === '+') && (space.length > 0)) {
|
||||
comma.push(new tree.Expression(space = []));
|
||||
}
|
||||
lastSpacedGroup.push(p);
|
||||
space.push(rule.value);
|
||||
result.important = result.important || rule.important;
|
||||
});
|
||||
spacedGroups.push(toExpression(lastSpacedGroup));
|
||||
rule.value = toValue(spacedGroups);
|
||||
result.value = new tree.Value(comma);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
@@ -10,16 +10,17 @@
|
||||
background: url(data://img1.png);
|
||||
}
|
||||
.test4 {
|
||||
transform: rotate(90deg), skew(30deg);
|
||||
transform: scale(2, 4) !important;
|
||||
transform: rotate(90deg), skew(30deg), scale(2, 4) !important;
|
||||
}
|
||||
.test5 {
|
||||
transform: rotate(90deg), skew(30deg);
|
||||
transform: scale(2, 4) !important;
|
||||
transform: rotate(90deg), skew(30deg), scale(2, 4) !important;
|
||||
}
|
||||
.test6 {
|
||||
transform: scale(2, 4);
|
||||
}
|
||||
.test7 {
|
||||
transform: scale(2, 4), scale(2, 4), scale(2, 4) !important;
|
||||
}
|
||||
.test-interleaved {
|
||||
transform: t1, t2, t3;
|
||||
background: b1, b2, b3;
|
||||
|
||||
@@ -36,17 +36,20 @@
|
||||
.first-background();
|
||||
}
|
||||
.test4 {
|
||||
// Won't merge values from sources that merked as !important, for backwards compatibility with css
|
||||
.first-transform();
|
||||
.fifth-transform();
|
||||
}
|
||||
.test5 {
|
||||
// Won't merge values from mixins that merked as !important, for backwards compatibility with css
|
||||
.first-transform();
|
||||
.second-transform() !important;
|
||||
}
|
||||
.test6 {
|
||||
// Ignores !merge if no peers found
|
||||
.second-transform();
|
||||
}
|
||||
.test7 {
|
||||
// inherit !important from merged subrules
|
||||
.second-transform();
|
||||
.second-transform() !important;
|
||||
.second-transform();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user