This adds an additional vars parameter to the parse method. It allows a user to inject variables into a less string before compiling.

This commit is contained in:
Joscha Feth
2013-11-20 19:15:04 +01:00
parent 3b242daacd
commit 723cdb501e
9 changed files with 74 additions and 17 deletions

View File

@@ -595,16 +595,6 @@ function initRunningMode(){
}
}
function serializeVars(vars) {
var s = "";
for (var name in vars) {
s += ((name.slice(0,1) === '@')? '' : '@') + name +': '+
((vars[name].slice(-1) === ';')? vars[name] : vars[name] +';');
}
return s;
}
//
@@ -649,7 +639,7 @@ for (var i = 0; i < links.length; i++) {
// CSS without reloading less-files
//
less.modifyVars = function(record) {
less.refresh(false, serializeVars(record));
less.refresh(false, less.Parser.serializeVars(record));
};
less.refresh = function (reload, newVars) {
@@ -677,7 +667,7 @@ less.refresh = function (reload, newVars) {
};
if (less.globalVars) {
varsPre = serializeVars(less.globalVars) + "\n";
varsPre = less.Parser.serializeVars(less.globalVars) + "\n";
}
less.refreshStyles = loadStyles;

View File

@@ -295,13 +295,17 @@ less.Parser = function Parser(env) {
imports: imports,
//
// Parse an input string into an abstract syntax tree,
// call `callback` when done.
// @param str A string containing 'less' markup
// @param callback call `callback` when done.
// @param [vars] An optional map (key, value) of variables to apply
//
parse: function (str, callback) {
parse: function (str, callback, vars) {
var root, line, lines, error = null;
i = j = current = furthest = 0;
input = str.replace(/\r\n/g, '\n');
vars = vars ? less.Parser.serializeVars(vars) + '\n' : '';
input = (vars + str).replace(/\r\n/g, '\n');
// Remove potential UTF Byte Order Mark
input = input.replace(/^\uFEFF/, '');
@@ -1726,4 +1730,17 @@ less.Parser = function Parser(env) {
}
};
};
less.Parser.serializeVars = function(vars) {
var s = '';
for (var name in vars) {
if (Object.hasOwnProperty.call(vars, name)) {
var value = vars[name];
s += ((name[0] === '@') ? '' : '@') + name +': '+ value +
((('' + value).slice(-1) === ';') ? '' : ';');
}
}
return s;
};