Fix merge errors/problems and change format to ++

This commit is contained in:
Luke Page
2012-10-28 16:53:29 +00:00
parent 815ca4a818
commit ecc9b0606b
11 changed files with 213 additions and 47 deletions

94
dist/less-1.4.0.js vendored
View File

@@ -655,7 +655,8 @@ less.Parser = function Parser(env) {
var node, root = [];
while ((node = $(this.mixin.definition) || $(this.rule) || $(this.ruleset) ||
$(this.mixin.call) || $(this.comment) || $(this.directive))
$(this.mixin.call) || $(this.comment) || $(this.directive) ||
$(this.extend))
|| $(/^[\s\n]+/) || $(/^;+/)) {
node && root.push(node);
}
@@ -917,10 +918,27 @@ less.Parser = function Parser(env) {
if ((a = $(this.entity)) && $('/') && (b = $(this.entity))) {
return new(tree.Shorthand)(a, b);
}
restore();
},
//
// extend
//
extend: function() {
var elements = [], e, args, index = i;
if (input.charAt(i) !== '+') { return; }
while (e = $(/^\+\+[#.](?:[\w-]|\\(?:[a-fA-F0-9]{1,6} ?|[^a-fA-F0-9]))+/)) {
elements.push(new(tree.Element)(null, e.slice(2), i));
}
if (elements.length > 0 && ($(';') || peek('}'))) {
return new(tree.Extend)(elements, index);
}
},
//
// Mixins
//
@@ -2736,6 +2754,62 @@ tree.Expression.prototype = {
}
};
})(require('../tree'));
(function (tree) {
tree.Extend = function Extend(elements, index) {
this.selector = new(tree.Selector)(elements);
this.index = index;
};
tree.Extend.prototype.eval = function Extend_eval(env) {
var selfSelectors = findSelfSelectors(env.selectors),
targetValue = this.selector.elements[0].value;
env.frames.forEach(function(frame) {
frame.rulesets().forEach(function(rule) {
rule.selectors.forEach(function(selector) {
selector.elements.forEach(function(element, idx) {
if (element.value === targetValue) {
selfSelectors.forEach(function(_selector) {
_selector.elements[0] = new tree.Element(
element.combinator,
_selector.elements[0].value,
_selector.elements[0].index
);
rule.selectors.push(new tree.Selector(
selector.elements
.slice(0, idx)
.concat(_selector.elements)
.concat(selector.elements.slice(idx + 1))
));
});
}
});
});
});
});
return this;
};
function findSelfSelectors(selectors) {
var ret = [];
(function loop(elem, i) {
if (selectors[i] && selectors[i].length) {
selectors[i].forEach(function(s) {
loop(s.elements.concat(elem), i + 1);
});
}
else {
ret.push({ elements: elem });
}
})([], 0);
return ret;
}
})(require('../tree'));
(function (tree) {
//
@@ -3392,6 +3466,12 @@ tree.Ruleset.prototype = {
// push the current ruleset to the frames stack
env.frames.unshift(ruleset);
// currrent selectors
if (!env.selectors) {
env.selectors = [];
}
env.selectors.unshift(this.selectors);
// Evaluate imports
if (ruleset.root || ruleset.allowImports || !ruleset.strictImports) {
for (var i = 0; i < ruleset.rules.length; i++) {
@@ -3436,6 +3516,7 @@ tree.Ruleset.prototype = {
// Pop the stack
env.frames.shift();
env.selectors.shift();
if (env.mediaBlocks) {
for(var i = mediaBlockCount; i < env.mediaBlocks.length; i++) {
@@ -3472,12 +3553,9 @@ tree.Ruleset.prototype = {
return this.variables()[name];
},
rulesets: function () {
if (this._rulesets) { return this._rulesets }
else {
return this._rulesets = this.rules.filter(function (r) {
return (r instanceof tree.Ruleset) || (r instanceof tree.mixin.Definition);
});
}
return this.rules.filter(function (r) {
return (r instanceof tree.Ruleset) || (r instanceof tree.mixin.Definition);
});
},
find: function (selector, self) {
self = self || this;

File diff suppressed because one or more lines are too long

View File

@@ -647,7 +647,8 @@ less.Parser = function Parser(env) {
var node, root = [];
while ((node = $(this.mixin.definition) || $(this.rule) || $(this.ruleset) ||
$(this.mixin.call) || $(this.comment) || $(this.directive))
$(this.mixin.call) || $(this.comment) || $(this.directive) ||
$(this.extend))
|| $(/^[\s\n]+/) || $(/^;+/)) {
node && root.push(node);
}
@@ -909,10 +910,27 @@ less.Parser = function Parser(env) {
if ((a = $(this.entity)) && $('/') && (b = $(this.entity))) {
return new(tree.Shorthand)(a, b);
}
restore();
},
//
// extend
//
extend: function() {
var elements = [], e, args, index = i;
if (input.charAt(i) !== '+') { return; }
while (e = $(/^\+\+[#.](?:[\w-]|\\(?:[a-fA-F0-9]{1,6} ?|[^a-fA-F0-9]))+/)) {
elements.push(new(tree.Element)(null, e.slice(2), i));
}
if (elements.length > 0 && ($(';') || peek('}'))) {
return new(tree.Extend)(elements, index);
}
},
//
// Mixins
//
@@ -2728,6 +2746,62 @@ tree.Expression.prototype = {
}
};
})(require('../tree'));
(function (tree) {
tree.Extend = function Extend(elements, index) {
this.selector = new(tree.Selector)(elements);
this.index = index;
};
tree.Extend.prototype.eval = function Extend_eval(env) {
var selfSelectors = findSelfSelectors(env.selectors),
targetValue = this.selector.elements[0].value;
env.frames.forEach(function(frame) {
frame.rulesets().forEach(function(rule) {
rule.selectors.forEach(function(selector) {
selector.elements.forEach(function(element, idx) {
if (element.value === targetValue) {
selfSelectors.forEach(function(_selector) {
_selector.elements[0] = new tree.Element(
element.combinator,
_selector.elements[0].value,
_selector.elements[0].index
);
rule.selectors.push(new tree.Selector(
selector.elements
.slice(0, idx)
.concat(_selector.elements)
.concat(selector.elements.slice(idx + 1))
));
});
}
});
});
});
});
return this;
};
function findSelfSelectors(selectors) {
var ret = [];
(function loop(elem, i) {
if (selectors[i] && selectors[i].length) {
selectors[i].forEach(function(s) {
loop(s.elements.concat(elem), i + 1);
});
}
else {
ret.push({ elements: elem });
}
})([], 0);
return ret;
}
})(require('../tree'));
(function (tree) {
//
@@ -3384,6 +3458,12 @@ tree.Ruleset.prototype = {
// push the current ruleset to the frames stack
env.frames.unshift(ruleset);
// currrent selectors
if (!env.selectors) {
env.selectors = [];
}
env.selectors.unshift(this.selectors);
// Evaluate imports
if (ruleset.root || ruleset.allowImports || !ruleset.strictImports) {
for (var i = 0; i < ruleset.rules.length; i++) {
@@ -3428,6 +3508,7 @@ tree.Ruleset.prototype = {
// Pop the stack
env.frames.shift();
env.selectors.shift();
if (env.mediaBlocks) {
for(var i = mediaBlockCount; i < env.mediaBlocks.length; i++) {
@@ -3464,12 +3545,9 @@ tree.Ruleset.prototype = {
return this.variables()[name];
},
rulesets: function () {
if (this._rulesets) { return this._rulesets }
else {
return this._rulesets = this.rules.filter(function (r) {
return (r instanceof tree.Ruleset) || (r instanceof tree.mixin.Definition);
});
}
return this.rules.filter(function (r) {
return (r instanceof tree.Ruleset) || (r instanceof tree.mixin.Definition);
});
},
find: function (selector, self) {
self = self || this;

View File

@@ -804,25 +804,25 @@ less.Parser = function Parser(env) {
if ((a = $(this.entity)) && $('/') && (b = $(this.entity))) {
return new(tree.Shorthand)(a, b);
}
restore();
},
//
// extend
//
extend: function() {
var elements = [], e, c, args, index = i, s = input.charAt(i);
var elements = [], e, args, index = i;
if (s !== '+') { return }
if (input.charAt(i) !== '+') { return; }
while (e = $(/^\+[#.](?:[\w-]|\\(?:[a-fA-F0-9]{1,6} ?|[^a-fA-F0-9]))+/)) {
elements.push(new(tree.Element)(c, e.slice(1), i));
while (e = $(/^\+\+[#.](?:[\w-]|\\(?:[a-fA-F0-9]{1,6} ?|[^a-fA-F0-9]))+/)) {
elements.push(new(tree.Element)(null, e.slice(2), i));
}
if (elements.length > 0 && ($(';') || peek('}'))) {
return new(tree.Extend)(elements, index);
}
restore();
},
//

View File

@@ -122,12 +122,9 @@ tree.Ruleset.prototype = {
return this.variables()[name];
},
rulesets: function () {
if (this._rulesets) { return this._rulesets }
else {
return this._rulesets = this.rules.filter(function (r) {
return (r instanceof tree.Ruleset) || (r instanceof tree.mixin.Definition);
});
}
return this.rules.filter(function (r) {
return (r instanceof tree.Ruleset) || (r instanceof tree.mixin.Definition);
});
},
find: function (selector, self) {
self = self || this;

View File

@@ -1,7 +1,11 @@
.clearfix, .foo, .bar {
.clearfix,
.foo,
.bar {
*zoom: 1;
}
.clearfix:after, .foo:after, .bar:after {
.clearfix:after,
.foo:after,
.bar:after {
content: '';
display: block;
clear: both;

View File

@@ -1,8 +1,12 @@
.sidebar, .sidebar2, .type1 .sidebar3 {
.sidebar,
.sidebar2,
.type1 .sidebar3 {
width: 300px;
background: red;
}
.sidebar .box, .sidebar2 .box, .type1 .sidebar3 .box {
.sidebar .box,
.sidebar2 .box,
.type1 .sidebar3 .box {
background: #FFF;
border: 1px solid #000;
margin: 10px 0;

View File

@@ -1,12 +1,15 @@
.error, .badError {
.error,
.badError {
border: 1px #f00;
background: #fdd;
}
.error.intrusion, .badError.intrusion {
.error.intrusion,
.badError.intrusion {
font-size: 1.3em;
font-weight: bold;
}
.intrusion .error, .intrusion .badError {
.intrusion .error,
.intrusion .badError {
display: none;
}
.badError {

View File

@@ -9,11 +9,11 @@
}
.foo {
+.clearfix;
++.clearfix;
color: red;
}
.bar {
+.clearfix;
++.clearfix;
color: blue;
}

View File

@@ -10,13 +10,13 @@
}
.sidebar2 {
+.sidebar;
++.sidebar;
background: blue;
}
.type1 {
.sidebar3 {
+.sidebar;
++.sidebar;
background: green;
}
}

View File

@@ -10,7 +10,7 @@
display: none;
}
.badError {
+.error;
++.error;
border-width: 3px;
}
@@ -19,17 +19,19 @@
}
.ext1 .ext2 {
+.foo;
++.foo;
}
.ext3, .ext4 {
+.foo;
.ext3,
.ext4 {
++.foo;
}
div.ext5, .ext6 > .ext5 {
div.ext5,
.ext6 > .ext5 {
width: 100px;
}
.ext7 {
+.ext5;
++.ext5;
}