@@ -26,6 +26,7 @@ require("./log-listener")(less, options);
26
26
var errors = require ( "./error-reporting" ) ( window , less , options ) ;
27
27
var browser = require ( "./browser" ) ;
28
28
var cache = options . cache || require ( "./cache" ) ( window , options , less . logger ) ;
29
+ var PromiseConstructor = typeof Promise === 'undefined' ? require ( 'promise' ) : Promise ;
29
30
30
31
options . env = options . env || ( window . location . hostname == '127.0.0.1' ||
31
32
window . location . hostname == '0.0.0.0' ||
@@ -238,33 +239,45 @@ for (var i = 0; i < links.length; i++) {
238
239
// CSS without reloading less-files
239
240
//
240
241
less . modifyVars = function ( record ) {
241
- less . refresh ( false , record ) ;
242
+ return less . refresh ( false , record ) ;
242
243
} ;
243
244
244
245
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
+ } ) ;
266
279
267
- loadStyles ( modifyVars ) ;
280
+ return less . hasFinished ;
268
281
} ;
269
282
270
283
less . refreshStyles = loadStyles ;
0 commit comments