|
2 | 2 | 'use strict'; |
3 | 3 | var regModules = ['ng'], |
4 | 4 | regInvokes = [], |
| 5 | + regConfigs = [], |
5 | 6 | ocLazyLoad = angular.module('oc.lazyLoad', ['ng']), |
6 | 7 | broadcast = angular.noop; |
7 | 8 |
|
|
189 | 190 | templatesLoader.ocLazyLoadLoader = true; |
190 | 191 | } |
191 | 192 |
|
192 | | - var filesLoader = function(paths, params) { |
| 193 | + var filesLoader = function(config, params) { |
193 | 194 | var cssFiles = [], |
194 | 195 | templatesFiles = [], |
195 | 196 | jsFiles = [], |
196 | 197 | promises = []; |
197 | 198 |
|
198 | | - angular.forEach(paths, function(path) { |
| 199 | + angular.extend(params || {}, config); |
| 200 | + |
| 201 | + angular.forEach(params.files, function(path) { |
199 | 202 | if(angular.isUndefined(filesCache.get(path)) || params.cache === false) { |
200 | 203 | if(/\.css[^\.]*$/.test(path) && cssFiles.indexOf(path) === -1) { |
201 | 204 | cssFiles.push(path); |
|
268 | 271 |
|
269 | 272 | // deprecated |
270 | 273 | loadTemplateFile: function(paths, params) { |
271 | | - return filesLoader(paths, params); |
| 274 | + return filesLoader({files: paths}, params); |
272 | 275 | }, |
273 | 276 |
|
274 | 277 | load: function(module, params) { |
|
394 | 397 | }); |
395 | 398 | if (diff.length !== 0) { |
396 | 399 | $log.warn('Module "', moduleName, '" attempted to redefine configuration for dependency. "', requireEntry.name, '"\n Additional Files Loaded:', diff); |
397 | | - promisesList.push(filesLoader(diff, params).then(function () { |
| 400 | + var c = angular.copy(requireEntry); |
| 401 | + c.files = diff; |
| 402 | + promisesList.push(filesLoader(c, params).then(function () { |
398 | 403 | return loadDependencies(requireEntry); |
399 | 404 | })); |
400 | 405 | } |
|
420 | 425 | // Check if the dependency has any files that need to be loaded. If there are, push a new promise to the promise list. |
421 | 426 | if(requireEntry.hasOwnProperty('files') && requireEntry.files.length !== 0) { |
422 | 427 | if(requireEntry.files) { |
423 | | - promisesList.push(filesLoader(requireEntry.files, params).then(function() { |
| 428 | + promisesList.push(filesLoader(requireEntry, params).then(function() { |
424 | 429 | return loadDependencies(requireEntry) |
425 | 430 | })); |
426 | 431 | } |
|
431 | 436 | return $q.all(promisesList); |
432 | 437 | } |
433 | 438 |
|
434 | | - filesLoader(config.files, params).then(function success() { |
| 439 | + filesLoader(config, params).then(function success() { |
435 | 440 | if(moduleName === null) { |
436 | 441 | deferred.resolve(module); |
437 | 442 | } else { |
438 | 443 | moduleCache.push(moduleName); |
439 | 444 | loadDependencies(moduleName).then(function success() { |
440 | 445 | try { |
441 | | - register(providers, moduleCache); |
| 446 | + register(providers, moduleCache, params); |
442 | 447 | } catch(e) { |
443 | 448 | $log.error(e.message); |
444 | 449 | deferred.reject(e); |
|
624 | 629 | } |
625 | 630 | } |
626 | 631 |
|
627 | | - function invokeQueue(providers, queue) { |
| 632 | + function invokeQueue(providers, queue, moduleName, reconfig) { |
628 | 633 | if(!queue) { |
629 | 634 | return; |
630 | 635 | } |
|
638 | 643 | } else { |
639 | 644 | throw new Error('unsupported provider ' + args[0]); |
640 | 645 | } |
641 | | - if(registerInvokeList(args[2][0])) { |
| 646 | + var invoked = regConfigs.indexOf(moduleName); |
| 647 | + if(registerInvokeList(args[2][0]) && (args[1] !== 'invoke' || (args[1] === 'invoke' && (!invoked || reconfig)))) { |
| 648 | + if(!invoked) { |
| 649 | + regConfigs.push(moduleName); |
| 650 | + } |
642 | 651 | provider[args[1]].apply(provider, args[2]); |
643 | 652 | } |
644 | 653 | } |
|
651 | 660 | * @param registerModules |
652 | 661 | * @returns {*} |
653 | 662 | */ |
654 | | - function register(providers, registerModules) { |
| 663 | + function register(providers, registerModules, params) { |
655 | 664 | if(registerModules) { |
656 | 665 | var k, moduleName, moduleFn, runBlocks = []; |
657 | 666 | for(k = registerModules.length - 1; k >= 0; k--) { |
|
665 | 674 | moduleFn = angular.module(moduleName); |
666 | 675 | if(regModules.indexOf(moduleName) === -1) { // new module |
667 | 676 | regModules.push(moduleName); |
668 | | - register(providers, moduleFn.requires); |
| 677 | + register(providers, moduleFn.requires, params); |
669 | 678 | runBlocks = runBlocks.concat(moduleFn._runBlocks); |
670 | 679 | } |
671 | | - invokeQueue(providers, moduleFn._invokeQueue); |
672 | | - invokeQueue(providers, moduleFn._configBlocks); |
| 680 | + invokeQueue(providers, moduleFn._invokeQueue, moduleName, params.reconfig); |
| 681 | + invokeQueue(providers, moduleFn._configBlocks, moduleName, params.reconfig); // angular 1.3+ |
673 | 682 | broadcast('ocLazyLoad.moduleLoaded', moduleName); |
674 | 683 | registerModules.pop(); |
675 | 684 | } |
|
0 commit comments