mirror of
https://github.com/less/less.js.git
synced 2026-01-22 05:37:56 -05:00
Convert property merging to the new agreed syntax of +:
This commit is contained in:
@@ -1230,12 +1230,12 @@ less.Parser = function Parser(env) {
|
||||
}
|
||||
},
|
||||
rule: function (tryAnonymous) {
|
||||
var name, value, c = input.charAt(i), important, merge, match;
|
||||
var name, value, c = input.charAt(i), important, merge = false, match;
|
||||
save();
|
||||
|
||||
if (c === '.' || c === '#' || c === '&') { return }
|
||||
|
||||
if (name = $(this.variable) || $(this.property)) {
|
||||
if (name = $(this.variable) || $(this.ruleProperty)) {
|
||||
// prefer to try to parse first if its a variable or we are compressing
|
||||
// but always fallback on the other one
|
||||
value = !tryAnonymous && (env.compress || (name.charAt(0) === '@')) ?
|
||||
@@ -1244,7 +1244,10 @@ less.Parser = function Parser(env) {
|
||||
|
||||
|
||||
important = $(this.important);
|
||||
merge = $(this.merge);
|
||||
if (name[name.length-1] === "+") {
|
||||
merge = true;
|
||||
name = name.substr(0, name.length - 1);
|
||||
}
|
||||
|
||||
if (value && $(this.end)) {
|
||||
return new (tree.Rule)(name, value, important, merge, memo, env.currentFileInfo);
|
||||
@@ -1497,21 +1500,6 @@ less.Parser = function Parser(env) {
|
||||
return $(/^! *important/);
|
||||
}
|
||||
},
|
||||
merge: function () {
|
||||
var separator;
|
||||
if (input.charAt(i) === '!') {
|
||||
if ($(/^! *merge\(/)) {
|
||||
separator = expect(/^ *space|comma */);
|
||||
if (separator) {
|
||||
separator = (separator.trim() === 'space')
|
||||
? ' '
|
||||
: ',';
|
||||
}
|
||||
expect(')');
|
||||
}
|
||||
}
|
||||
return separator;
|
||||
},
|
||||
sub: function () {
|
||||
var a, e;
|
||||
|
||||
@@ -1632,6 +1620,13 @@ less.Parser = function Parser(env) {
|
||||
if (name = $(/^(\*?-?[_a-z0-9-]+)\s*:/)) {
|
||||
return name[1];
|
||||
}
|
||||
},
|
||||
ruleProperty: function () {
|
||||
var name;
|
||||
|
||||
if (name = $(/^(\*?-?[_a-z0-9-]+)\s*(\+?)\s*:/)) {
|
||||
return name[1] + (name[2] || "");
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -20,7 +20,7 @@ tree.Rule.prototype = {
|
||||
this.value = visitor.visit(this.value);
|
||||
},
|
||||
toCSS: function (env) {
|
||||
if (this.variable) { return "" }
|
||||
if (this.variable) { return ""; }
|
||||
else {
|
||||
try {
|
||||
return this.name + (env.compress ? ':' : ': ') +
|
||||
|
||||
@@ -178,7 +178,8 @@ tree.Ruleset.prototype = {
|
||||
debugInfo, // Line number debugging
|
||||
rule;
|
||||
|
||||
this.mergeRules();
|
||||
this.mergeRules();
|
||||
|
||||
// Compile rules and rulesets
|
||||
for (var i = 0; i < this.rules.length; i++) {
|
||||
rule = this.rules[i];
|
||||
@@ -468,8 +469,7 @@ tree.Ruleset.prototype = {
|
||||
|
||||
if ((rule instanceof tree.Rule) && rule.merge) {
|
||||
key = [rule.name,
|
||||
rule.important ? "!" : "",
|
||||
rule.merge].join(",");
|
||||
rule.important ? "!" : ""].join(",");
|
||||
|
||||
if (!groups[key]) {
|
||||
parts = groups[key] = [];
|
||||
@@ -487,7 +487,7 @@ tree.Ruleset.prototype = {
|
||||
if (parts.length > 1) {
|
||||
rule = parts[0];
|
||||
|
||||
rule.value = new ((rule.merge === ' ') ? tree.Expression : tree.Value)(parts.map(function (p) {
|
||||
rule.value = new (tree.Value)(parts.map(function (p) {
|
||||
return p.value;
|
||||
}));
|
||||
}
|
||||
|
||||
@@ -1,29 +1,22 @@
|
||||
.test1 {
|
||||
transform: rotate(90deg) skew(30deg) scale(2, 4);
|
||||
transform: rotate(90deg), skew(30deg), scale(2, 4);
|
||||
}
|
||||
.test2 {
|
||||
transform: rotate(90deg) skew(30deg);
|
||||
transform: rotate(90deg), skew(30deg);
|
||||
transform: scaleX(45deg);
|
||||
}
|
||||
.test3 {
|
||||
background: url(data://img1.png), url(data://img2.png);
|
||||
}
|
||||
.test4 {
|
||||
transform: rotate(90deg) skew(30deg);
|
||||
transform: scaleX(45deg);
|
||||
}
|
||||
.test5 {
|
||||
transform: scaleX(45deg);
|
||||
background: url(data://img1.png);
|
||||
}
|
||||
.test4 {
|
||||
transform: rotate(90deg), skew(30deg);
|
||||
transform: scale(2, 4) !important;
|
||||
}
|
||||
.test5 {
|
||||
transform: rotate(90deg), skew(30deg);
|
||||
transform: scale(2, 4) !important;
|
||||
}
|
||||
.test6 {
|
||||
transform: rotate(90deg) skew(30deg);
|
||||
transform: scale(2, 4) !important;
|
||||
}
|
||||
.test7 {
|
||||
transform: rotate(90deg) skew(30deg);
|
||||
transform: scale(2, 4) !important;
|
||||
}
|
||||
.test8 {
|
||||
transform: scale(2, 4);
|
||||
}
|
||||
|
||||
@@ -1,61 +1,51 @@
|
||||
.first-transform() {
|
||||
transform: rotate(90deg) skew(30deg) !merge(space);
|
||||
transform+: rotate(90deg), skew(30deg);
|
||||
}
|
||||
.second-transform() {
|
||||
transform: scale(2,4) !merge(space);
|
||||
transform+: scale(2,4);
|
||||
}
|
||||
.third-transform() {
|
||||
transform: scaleX(45deg);
|
||||
}
|
||||
.fourth-transform() {
|
||||
transform: scaleX(45deg) !merge(comma);
|
||||
transform+: scaleX(45deg);
|
||||
}
|
||||
.fifth-transform() {
|
||||
transform: scale(2,4) !important !merge(space);
|
||||
transform+: scale(2,4) !important;
|
||||
}
|
||||
.first-background() {
|
||||
background: url(data://img1.png) !merge(comma);
|
||||
background+: url(data://img1.png);
|
||||
}
|
||||
.second-background() {
|
||||
background: url(data://img2.png) !merge(comma);
|
||||
background+: url(data://img2.png);
|
||||
}
|
||||
|
||||
.test1 {
|
||||
// Can merge values with space separator
|
||||
// Can merge values
|
||||
.first-transform();
|
||||
.second-transform();
|
||||
}
|
||||
.test2 {
|
||||
// Wont merge values without !merge directive, for backwards compatibility with css
|
||||
// Wont merge values without +: merge directive, for backwards compatibility with css
|
||||
.first-transform();
|
||||
.third-transform();
|
||||
}
|
||||
.test3 {
|
||||
// Can merge values with comma separator
|
||||
// Wont merge values from two sources with different properties
|
||||
.fourth-transform();
|
||||
.first-background();
|
||||
.second-background();
|
||||
}
|
||||
.test4 {
|
||||
// Wont merge values from two sources with different seperators
|
||||
.first-transform();
|
||||
.fourth-transform();
|
||||
}
|
||||
.test5 {
|
||||
// Wont merge values from two sources with the same seperators but different properties
|
||||
.fourth-transform();
|
||||
.first-background();
|
||||
}
|
||||
.test6 {
|
||||
// Wont merge values from sources that merked as !important, for backwards compatibility with css
|
||||
.first-transform();
|
||||
.fifth-transform();
|
||||
}
|
||||
.test7 {
|
||||
.test5 {
|
||||
// Wont merge values from mixins that merked as !important, for backwards compatibility with css
|
||||
.first-transform();
|
||||
.second-transform() !important;
|
||||
}
|
||||
.test8 {
|
||||
.test6 {
|
||||
// Ignores !merge if no peers found
|
||||
.second-transform();
|
||||
}
|
||||
Reference in New Issue
Block a user