diff --git a/Gruntfile.js b/Gruntfile.js index f931cadca..c684401aa 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -214,6 +214,14 @@ module.exports = function(grunt) { specs: 'test/browser/runner-global-vars-spec.js', outfile: 'tmp/browser/test-runner-global-vars.html' } + }, + postProcessor: { + src: ['test/browser/less/postProcessor/*.less'], + options: { + helpers: 'test/browser/runner-postProcessor-options.js', + specs: 'test/browser/runner-postProcessor.js', + outfile: 'tmp/browser/test-postProcessor.html' + } } }, diff --git a/lib/less/browser.js b/lib/less/browser.js index ffcf82fc1..f89eb9e83 100644 --- a/lib/less/browser.js +++ b/lib/less/browser.js @@ -159,6 +159,13 @@ function createCSS(styles, sheet, lastModified) { } } +function postProcessCSS(styles) { + if (less.postProcessor && typeof less.postProcessor === 'function') { + styles = less.postProcessor.call(styles, styles) || styles; + } + return styles; +} + function errorHTML(e, rootHref) { var id = 'less-error-message:' + extractId(rootHref || ""); var template = '
  • {content}
  • '; @@ -575,7 +582,9 @@ function initRunningMode(){ if (e) { error(e, sheet.href); } else if (root) { - createCSS(root.toCSS(less), sheet, env.lastModified); + var styles = root.toCSS(less); + styles = postProcessCSS(styles); + createCSS(styles, sheet, env.lastModified); } }); } @@ -645,7 +654,9 @@ less.refresh = function (reload, modifyVars) { log("loading " + sheet.href + " from cache.", logLevel.info); } else { log("parsed " + sheet.href + " successfully.", logLevel.info); - createCSS(root.toCSS(less), sheet, env.lastModified); + var styles = root.toCSS(less); + styles = postProcessCSS(styles); + createCSS(styles, sheet, env.lastModified); } log("css for " + sheet.href + " generated in " + (new Date() - endTime) + 'ms', logLevel.info); if (env.remaining === 0) { diff --git a/test/browser/css/postProcessor/postProcessor.css b/test/browser/css/postProcessor/postProcessor.css new file mode 100644 index 000000000..76de30bd0 --- /dev/null +++ b/test/browser/css/postProcessor/postProcessor.css @@ -0,0 +1,4 @@ +hr {height:50px;} +.test { + color: #ffffff; +} diff --git a/test/browser/less/postProcessor/postProcessor.less b/test/browser/less/postProcessor/postProcessor.less new file mode 100644 index 000000000..0d4c0304d --- /dev/null +++ b/test/browser/less/postProcessor/postProcessor.less @@ -0,0 +1,4 @@ +@color: white; +.test { + color: @color; +} diff --git a/test/browser/runner-postProcessor-options.js b/test/browser/runner-postProcessor-options.js new file mode 100644 index 000000000..94044da21 --- /dev/null +++ b/test/browser/runner-postProcessor-options.js @@ -0,0 +1,4 @@ +var less = {}; +less.postProcessor = function(styles) { + return 'hr {height:50px;}\n' + styles; +}; diff --git a/test/browser/runner-postProcessor.js b/test/browser/runner-postProcessor.js new file mode 100644 index 000000000..be9eb24bb --- /dev/null +++ b/test/browser/runner-postProcessor.js @@ -0,0 +1,3 @@ +describe("less.js postProcessor", function() { + testLessEqualsInDocument(); +});