Skip to content

Commit 3166564

Browse files
committed
Merge pull request #2226 from levithomason/feature/notify-on-finish
Notify when less.js is done processing
2 parents c40069e + 999af91 commit 3166564

File tree

1 file changed

+36
-23
lines changed

1 file changed

+36
-23
lines changed

lib/less-browser/index.js

Lines changed: 36 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ require("./log-listener")(less, options);
2626
var errors = require("./error-reporting")(window, less, options);
2727
var browser = require("./browser");
2828
var cache = options.cache || require("./cache")(window, options, less.logger);
29+
var PromiseConstructor = typeof Promise === 'undefined' ? require('promise') : Promise;
2930

3031
options.env = options.env || (window.location.hostname == '127.0.0.1' ||
3132
window.location.hostname == '0.0.0.0' ||
@@ -238,33 +239,45 @@ for (var i = 0; i < links.length; i++) {
238239
// CSS without reloading less-files
239240
//
240241
less.modifyVars = function(record) {
241-
less.refresh(false, record);
242+
return less.refresh(false, record);
242243
};
243244

244245
less.refresh = function (reload, modifyVars) {
245-
var startTime, endTime;
246-
startTime = endTime = new Date();
247-
248-
loadStyleSheets(function (e, css, _, sheet, webInfo) {
249-
if (e) {
250-
return errors.add(e, e.href || sheet.href);
251-
}
252-
if (webInfo.local) {
253-
less.logger.info("loading " + sheet.href + " from cache.");
254-
} else {
255-
less.logger.info("rendered " + sheet.href + " successfully.");
256-
css = postProcessCSS(css);
257-
browser.createCSS(window.document, css, sheet);
258-
cache.setCSS(sheet.href, webInfo.lastModified, css);
259-
}
260-
less.logger.info("css for " + sheet.href + " generated in " + (new Date() - endTime) + 'ms');
261-
if (webInfo.remaining === 0) {
262-
less.logger.info("less has finished. css generated in " + (new Date() - startTime) + 'ms');
263-
}
264-
endTime = new Date();
265-
}, reload, modifyVars);
246+
less.hasFinished = new PromiseConstructor(function (resolve, reject) {
247+
var startTime, endTime, totalMilliseconds;
248+
startTime = endTime = new Date();
249+
250+
loadStyleSheets(function (e, css, _, sheet, webInfo) {
251+
if (e) {
252+
errors.add(e, e.href || sheet.href);
253+
reject(e);
254+
}
255+
if (webInfo.local) {
256+
less.logger.info("loading " + sheet.href + " from cache.");
257+
} else {
258+
less.logger.info("rendered " + sheet.href + " successfully.");
259+
css = postProcessCSS(css);
260+
browser.createCSS(window.document, css, sheet);
261+
cache.setCSS(sheet.href, webInfo.lastModified, css);
262+
}
263+
less.logger.info("css for " + sheet.href + " generated in " + (new Date() - endTime) + 'ms');
264+
if (webInfo.remaining === 0) {
265+
totalMilliseconds = new Date() - startTime;
266+
less.logger.info("less has finished. css generated in " + totalMilliseconds + 'ms');
267+
resolve({
268+
startTime: startTime,
269+
endTime: endTime,
270+
totalMilliseconds: totalMilliseconds,
271+
sheets: less.sheets.length
272+
});
273+
}
274+
endTime = new Date();
275+
}, reload, modifyVars);
276+
277+
loadStyles(modifyVars);
278+
});
266279

267-
loadStyles(modifyVars);
280+
return less.hasFinished;
268281
};
269282

270283
less.refreshStyles = loadStyles;

0 commit comments

Comments
 (0)