mirror of
https://github.com/less/less.js.git
synced 2026-01-22 21:58:14 -05:00
Fixed nested media bug.
This commit is contained in:
committed by
Luke Page
parent
1b0b84551f
commit
ebc41e5c4b
@@ -234,6 +234,13 @@ less.Parser = function Parser(env) {
|
||||
return require('path').resolve(e.filename);
|
||||
}
|
||||
|
||||
function getDebugInfo(index, inputStream, e) {
|
||||
return {
|
||||
lineNumber: getLocation(index, inputStream).line + 1,
|
||||
fileName: getFileName(e)
|
||||
};
|
||||
}
|
||||
|
||||
function LessError(e, env) {
|
||||
var input = getInput(e, env),
|
||||
loc = getLocation(e.index, input),
|
||||
@@ -1063,14 +1070,11 @@ less.Parser = function Parser(env) {
|
||||
// div, .class, body > p {...}
|
||||
//
|
||||
ruleset: function () {
|
||||
var selectors = [], s, rules, match, sourceLineNumber,
|
||||
sourceFileName;
|
||||
var selectors = [], s, rules, match, debugInfo;
|
||||
save();
|
||||
|
||||
if (env.dumpLineNumbers) {
|
||||
sourceLineNumber = getLocation(i, input).line + 1;
|
||||
sourceFileName = getFileName(env);
|
||||
}
|
||||
if (env.dumpLineNumbers)
|
||||
debugInfo = getDebugInfo(i, input, env);
|
||||
|
||||
while (s = $(this.selector)) {
|
||||
selectors.push(s);
|
||||
@@ -1081,10 +1085,8 @@ less.Parser = function Parser(env) {
|
||||
|
||||
if (selectors.length > 0 && (rules = $(this.block))) {
|
||||
var ruleset = new(tree.Ruleset)(selectors, rules, env.strictImports);
|
||||
if (env.dumpLineNumbers) {
|
||||
ruleset.sourceLineNumber = sourceLineNumber;
|
||||
ruleset.sourceFileName = sourceFileName;
|
||||
}
|
||||
if (env.dumpLineNumbers)
|
||||
ruleset.debugInfo = debugInfo;
|
||||
return ruleset;
|
||||
} else {
|
||||
// Backtrack
|
||||
@@ -1188,13 +1190,19 @@ less.Parser = function Parser(env) {
|
||||
},
|
||||
|
||||
media: function () {
|
||||
var features, rules;
|
||||
var features, rules, media, debugInfo;
|
||||
|
||||
if (env.dumpLineNumbers)
|
||||
debugInfo = getDebugInfo(i, input, env);
|
||||
|
||||
if ($(/^@media/)) {
|
||||
features = $(this.mediaFeatures);
|
||||
|
||||
if (rules = $(this.block)) {
|
||||
return new(tree.Media)(rules, features);
|
||||
media = new(tree.Media)(rules, features);
|
||||
if(env.dumpLineNumbers)
|
||||
media.debugInfo = debugInfo;
|
||||
return media;
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -1,5 +1,31 @@
|
||||
(function (tree) {
|
||||
|
||||
tree.debugInfo = function(env, ctx) {
|
||||
var result="";
|
||||
if (env.dumpLineNumbers && !env.compress) {
|
||||
switch(env.dumpLineNumbers) {
|
||||
case 'comments':
|
||||
result = tree.debugInfo.asComment(ctx);
|
||||
break;
|
||||
case 'mediaquery':
|
||||
result = tree.debugInfo.asMediaQuery(ctx);
|
||||
break;
|
||||
case 'all':
|
||||
result = tree.debugInfo.asComment(ctx)+tree.debugInfo.asMediaQuery(ctx);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
};
|
||||
|
||||
tree.debugInfo.asComment = function(ctx) {
|
||||
return '/* line ' + ctx.debugInfo.lineNumber + ', ' + ctx.debugInfo.fileName + ' */\n';
|
||||
};
|
||||
|
||||
tree.debugInfo.asMediaQuery = function(ctx) {
|
||||
return '@media -sass-debug-info{filename{font-family:"' + ctx.debugInfo.fileName + '";}line{font-family:"' + ctx.debugInfo.lineNumber + '";}}\n';
|
||||
};
|
||||
|
||||
tree.find = function (obj, fun) {
|
||||
for (var i = 0, r; i < obj.length; i++) {
|
||||
if (r = fun.call(obj, obj[i])) { return r }
|
||||
|
||||
@@ -27,6 +27,10 @@ tree.Media.prototype = {
|
||||
env.mediaBlocks.push(this);
|
||||
|
||||
var media = new(tree.Media)([], []);
|
||||
if(this.debugInfo) {
|
||||
this.ruleset.debugInfo = this.debugInfo;
|
||||
media.debugInfo = this.debugInfo;
|
||||
}
|
||||
media.features = this.features.eval(env);
|
||||
|
||||
env.frames.unshift(this.ruleset);
|
||||
|
||||
@@ -15,6 +15,10 @@ tree.Ruleset.prototype = {
|
||||
ruleset.root = this.root;
|
||||
ruleset.allowImports = this.allowImports;
|
||||
|
||||
if(this.debugInfo) {
|
||||
ruleset.debugInfo = this.debugInfo;
|
||||
}
|
||||
|
||||
// push the current ruleset to the frames stack
|
||||
env.frames.unshift(ruleset);
|
||||
|
||||
@@ -69,10 +73,6 @@ tree.Ruleset.prototype = {
|
||||
}
|
||||
}
|
||||
|
||||
if(this.sourceLineNumber && this.sourceFileName) {
|
||||
ruleset.sourceLineNumber = this.sourceLineNumber;
|
||||
ruleset.sourceFileName = this.sourceFileName;
|
||||
}
|
||||
return ruleset;
|
||||
},
|
||||
match: function (args) {
|
||||
@@ -136,9 +136,7 @@ tree.Ruleset.prototype = {
|
||||
rulesets = [], // node.Ruleset instances
|
||||
paths = [], // Current selectors
|
||||
selector, // The fully rendered selector
|
||||
lineNumbersInfo, // Line number debugging, either as comment or fake media query.
|
||||
lineNumbersComment, // Line number debug info as comment
|
||||
lineNumbersMediaQuery, // Line number debug info as media query
|
||||
debugInfo, // Line number debugging
|
||||
rule;
|
||||
|
||||
if (! this.root) {
|
||||
@@ -177,24 +175,7 @@ tree.Ruleset.prototype = {
|
||||
css.push(rules.join(env.compress ? '' : '\n'));
|
||||
} else {
|
||||
if (rules.length > 0) {
|
||||
lineNumbersInfo = "";
|
||||
lineNumbersComment = '';
|
||||
lineNumbersMediaQuery = '';
|
||||
if (env.dumpLineNumbers && !env.compress) {
|
||||
lineNumbersComment = '/* line ' + this.sourceLineNumber + ', ' + this.sourceFileName + ' */\n';
|
||||
lineNumbersMediaQuery = '@media -sass-debug-info{filename{font-family:"' + this.sourceFileName + '";}line{font-family:"' + this.sourceLineNumber + '";}}\n';
|
||||
switch(env.dumpLineNumbers) {
|
||||
case 'comments':
|
||||
lineNumbersInfo = lineNumbersComment;
|
||||
break;
|
||||
case 'mediaquery':
|
||||
lineNumbersInfo = lineNumbersMediaQuery;
|
||||
break;
|
||||
case 'all':
|
||||
lineNumbersInfo = lineNumbersComment+lineNumbersMediaQuery;
|
||||
break;
|
||||
}
|
||||
}
|
||||
debugInfo = tree.debugInfo(env, this);
|
||||
selector = paths.map(function (p) {
|
||||
return p.map(function (s) {
|
||||
return s.toCSS(env);
|
||||
@@ -209,7 +190,7 @@ tree.Ruleset.prototype = {
|
||||
}
|
||||
rules = _rules;
|
||||
|
||||
css.push(lineNumbersInfo + selector +
|
||||
css.push(debugInfo + selector +
|
||||
(env.compress ? '{' : ' {\n ') +
|
||||
rules.join(env.compress ? '' : '\n ') +
|
||||
(env.compress ? '}' : '\n}\n'));
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
}
|
||||
}
|
||||
@media all and screen {
|
||||
/* line 3, {pathimport}test.less */
|
||||
/* line 5, {pathimport}test.less */
|
||||
.tst {
|
||||
color: red;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user