Skip to content

Commit

Permalink
Fix merge errors/problems and change format to ++
Browse files Browse the repository at this point in the history
  • Loading branch information
lukeapage committed Nov 27, 2012
1 parent f3e636a commit 0bf5835
Show file tree
Hide file tree
Showing 11 changed files with 213 additions and 47 deletions.
94 changes: 86 additions & 8 deletions dist/less-1.4.0.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down Expand Up @@ -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
//
Expand Down Expand Up @@ -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) {
//
Expand Down Expand Up @@ -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++) {
Expand Down Expand Up @@ -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++) {
Expand Down Expand Up @@ -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;
Expand Down
4 changes: 2 additions & 2 deletions dist/less-1.4.0.min.js

Large diffs are not rendered by default.

94 changes: 86 additions & 8 deletions dist/less-rhino-1.4.0.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down Expand Up @@ -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
//
Expand Down Expand Up @@ -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) {
//
Expand Down Expand Up @@ -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++) {
Expand Down Expand Up @@ -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++) {
Expand Down Expand Up @@ -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;
Expand Down
12 changes: 6 additions & 6 deletions lib/less/parser.js
Original file line number Diff line number Diff line change
Expand Up @@ -797,25 +797,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();
},

//
Expand Down
9 changes: 3 additions & 6 deletions lib/less/tree/ruleset.js
Original file line number Diff line number Diff line change
Expand Up @@ -110,12 +110,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;
Expand Down
8 changes: 6 additions & 2 deletions test/css/extend-clearfix.css
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
8 changes: 6 additions & 2 deletions test/css/extend-nest.css
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
9 changes: 6 additions & 3 deletions test/css/extend.css
Original file line number Diff line number Diff line change
@@ -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 {
Expand Down
4 changes: 2 additions & 2 deletions test/less/extend-clearfix.less
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@
}

.foo {
+.clearfix;
++.clearfix;
color: red;
}

.bar {
+.clearfix;
++.clearfix;
color: blue;
}

0 comments on commit 0bf5835

Please sign in to comment.