From 08ed860e7051f1f0dd132d760b958c5be1114177 Mon Sep 17 00:00:00 2001 From: Olivier Combe Date: Thu, 9 Apr 2015 22:30:08 +0200 Subject: [PATCH] fix: components can be registered as object maps now Fixes #156 --- dist/modules/ocLazyLoad.core.js | 32 ++++++++++++------------ dist/ocLazyLoad.js | 32 ++++++++++++------------ dist/ocLazyLoad.js.map | 2 +- dist/ocLazyLoad.min.js | 2 +- dist/ocLazyLoad.min.js.map | 2 +- dist/ocLazyLoad.require.js | 32 ++++++++++++------------ dist/ocLazyLoad.require.js.map | 2 +- dist/ocLazyLoad.require.min.js | 2 +- dist/ocLazyLoad.require.min.js.map | 2 +- src/ocLazyLoad.core.js | 33 ++++++++++++------------- tests/unit/lazyLoad/testModule5.js | 5 ++++ tests/unit/specs/ocLazyLoad.spec.js | 38 ++++++++++++++++++++++++++--- 12 files changed, 105 insertions(+), 79 deletions(-) create mode 100644 tests/unit/lazyLoad/testModule5.js diff --git a/dist/modules/ocLazyLoad.core.js b/dist/modules/ocLazyLoad.core.js index bef0286..ad4e33f 100644 --- a/dist/modules/ocLazyLoad.core.js +++ b/dist/modules/ocLazyLoad.core.js @@ -212,9 +212,14 @@ regInvokes[moduleName][type] = {}; } var onInvoke = function onInvoke(invokeName, signature) { - newInvoke = true; - regInvokes[moduleName][type][invokeName].push(signature); - broadcast("ocLazyLoad.componentLoaded", [moduleName, type, invokeName]); + if (angular.isUndefined(regInvokes[moduleName][type][invokeName])) { + regInvokes[moduleName][type][invokeName] = []; + } + if (regInvokes[moduleName][type][invokeName].indexOf(signature) === -1) { + newInvoke = true; + regInvokes[moduleName][type][invokeName].push(signature); + broadcast("ocLazyLoad.componentLoaded", [moduleName, type, invokeName]); + } }; function signature(data) { @@ -235,22 +240,15 @@ } if (angular.isString(invokeList)) { - if (angular.isUndefined(regInvokes[moduleName][type][invokeList])) { - regInvokes[moduleName][type][invokeList] = []; - } - if (regInvokes[moduleName][type][invokeList].indexOf(signature(args[2][1])) === -1) { - onInvoke(invokeList, signature(args[2][1])); - } + onInvoke(invokeList, signature(args[2][1])); } else if (angular.isObject(invokeList)) { - // decorators for example - angular.forEach(invokeList, function (invoke) { + angular.forEach(invokeList, function (invoke, key) { if (angular.isString(invoke)) { - if (angular.isUndefined(regInvokes[moduleName][type][invoke])) { - regInvokes[moduleName][type][invoke] = []; - } - if (regInvokes[moduleName][type][invoke].indexOf(signature(invokeList[1])) === -1) { - onInvoke(invoke, signature(invokeList[1])); - } + // decorators for example + onInvoke(invoke, signature(invokeList[1])); + } else { + // components registered as object lists {"componentName": function() {}} + onInvoke(key, signature(invoke)); } }); } else { diff --git a/dist/ocLazyLoad.js b/dist/ocLazyLoad.js index c0274b6..9e51a64 100644 --- a/dist/ocLazyLoad.js +++ b/dist/ocLazyLoad.js @@ -219,9 +219,14 @@ regInvokes[moduleName][type] = {}; } var onInvoke = function onInvoke(invokeName, signature) { - newInvoke = true; - regInvokes[moduleName][type][invokeName].push(signature); - broadcast("ocLazyLoad.componentLoaded", [moduleName, type, invokeName]); + if (angular.isUndefined(regInvokes[moduleName][type][invokeName])) { + regInvokes[moduleName][type][invokeName] = []; + } + if (regInvokes[moduleName][type][invokeName].indexOf(signature) === -1) { + newInvoke = true; + regInvokes[moduleName][type][invokeName].push(signature); + broadcast("ocLazyLoad.componentLoaded", [moduleName, type, invokeName]); + } }; function signature(data) { @@ -242,22 +247,15 @@ } if (angular.isString(invokeList)) { - if (angular.isUndefined(regInvokes[moduleName][type][invokeList])) { - regInvokes[moduleName][type][invokeList] = []; - } - if (regInvokes[moduleName][type][invokeList].indexOf(signature(args[2][1])) === -1) { - onInvoke(invokeList, signature(args[2][1])); - } + onInvoke(invokeList, signature(args[2][1])); } else if (angular.isObject(invokeList)) { - // decorators for example - angular.forEach(invokeList, function (invoke) { + angular.forEach(invokeList, function (invoke, key) { if (angular.isString(invoke)) { - if (angular.isUndefined(regInvokes[moduleName][type][invoke])) { - regInvokes[moduleName][type][invoke] = []; - } - if (regInvokes[moduleName][type][invoke].indexOf(signature(invokeList[1])) === -1) { - onInvoke(invoke, signature(invokeList[1])); - } + // decorators for example + onInvoke(invoke, signature(invokeList[1])); + } else { + // components registered as object lists {"componentName": function() {}} + onInvoke(key, signature(invoke)); } }); } else { diff --git a/dist/ocLazyLoad.js.map b/dist/ocLazyLoad.js.map index 68d538e..3a489bc 100644 --- a/dist/ocLazyLoad.js.map +++ b/dist/ocLazyLoad.js.map @@ -1 +1 @@ -{"version":3,"sources":["ocLazyLoad.core.js","ocLazyLoad.directive.js","ocLazyLoad.loaders.common.js","ocLazyLoad.loaders.core.js","ocLazyLoad.loaders.cssLoader.js","ocLazyLoad.loaders.jsLoader.js","ocLazyLoad.loaders.templatesLoader.js","ocLazyLoad.polyfill.ie8.js"],"names":[],"mappings":"AAAA,CAAC,UAAS,SAAS,QAAQ;IACvB;;IAEA,IAAI,aAAa,CAAC,MAAM;QACpB,aAAa;QACb,aAAa;QACb,gBAAgB;QAChB,qBAAqB;QACrB,YAAY,QAAQ;QACpB,YAAY;QACZ,aAAa;;IAEjB,IAAI,aAAa,QAAQ,OAAO,eAAe,CAAC;;IAEhD,WAAW,SAAS,2HAAe,UAAS,qBAAqB,UAAU,kBAAkB,iBAAiB,WAAW,kBAAkB;QACvI,IAAI,UAAU;YACV,YAAY;YACR,qBAAqB;YACrB,kBAAkB;YAClB,iBAAiB;YACjB,UAAU;YACV,WAAW;YACX,kBAAkB;;YAEtB,QAAQ;YACR,SAAS;YACT,cAAc;;QAElB,YAAY,OAAO,UAAS,OAAO;YAC/B,IAAG,KAAK,QAAQ,WAAW,CAAC,GAAG;gBAC3B,MAAM,UAAU,KAAK,MAAM,MAAM;;;;QAIzC,KAAK,SAAS,UAAS,QAAQ;;YAE3B,IAAG,QAAQ,UAAU,OAAO,UAAU;gBAClC,IAAG,QAAQ,QAAQ,OAAO,UAAU;oBAChC,QAAQ,QAAQ,OAAO,SAAS,UAAS,cAAc;wBACnD,QAAQ,aAAa,QAAQ;;uBAE9B;oBACH,QAAQ,OAAO,QAAQ,QAAQ,OAAO;;;;YAI9C,IAAG,QAAQ,UAAU,OAAO,QAAQ;gBAChC,QAAQ,OAAO;;;YAGnB,IAAG,QAAQ,UAAU,OAAO,SAAS;gBACjC,SAAS,OAAO;;;;;;;;QAQxB,KAAK,QAAQ,SAAS,MAAM,SAAS;;YAEjC,IAAG,cAAc,WAAW,GAAG;gBAC3B,IAAI,WAAW,CAAC;oBACZ,QAAQ,CAAC,UAAU,UAAU,YAAY;oBACzC,sBAAsB;oBACtB,SAAS,SAAS,OAAO,KAAK;oBAC1B,OAAQ,OAAO,SAAS,KAAK;;;gBAGrC,QAAQ,QAAQ,OAAO,UAAS,MAAM;oBAClC,MAAM,QAAQ;oBACd,OAAO,SAAS,eAAe;oBAC/B,OAAO,KAAK,QAAQ,KAAK;oBACzB,IAAG,QAAQ,GAAG,kBAAkB;wBAC5B,QAAQ,QAAQ,QAAQ,GAAG,iBAAiB,MAAM,OAAO;wBACzD,QAAQ,QAAQ,QAAQ,GAAG,iBAAiB,MAAM,OAAO,QAAQ;wBACjE,QAAQ,QAAQ,QAAQ,GAAG,iBAAiB,MAAM,OAAO,MAAM;;;;gBAIvE,QAAQ,QAAQ,UAAU,UAAS,KAAK;oBACpC,IAAG,cAAc,WAAW,GAAG;wBAC3B,IAAI,YAAY,MAAM,QAAQ,YAAY;wBAC1C,IAAI,QAAQ,oBAAoB,KAAK;wBACrC,IAAG,OAAO;4BACN,cAAc,KAAK,CAAC,MAAM,MAAM,IAAI,QAAQ,QAAQ;+BACjD;4BACH,QAAQ,QAAQ,IAAI,YAAY,UAAS,MAAM;gCAC3C,IAAG,cAAc,WAAW,KAAK,MAAM,KAAK,OAAO;oCAC/C,cAAc,KAAK,KAAK;;;;;;;;YAQhD,IAAG,cAAc,WAAW,KAAK,EAAE,CAAC,OAAO,WAAW,OAAO,UAAU,QAAQ,UAAU,QAAQ,QAAQ;gBACrG,QAAQ,MAAM;;;YAGlB,IAAI,SAAS,SAAS,OAAO,YAAY;gBACrC,IAAG,WAAW,QAAQ,gBAAgB,CAAC,GAAG;;oBAEtC,WAAW,KAAK;oBAChB,IAAI,aAAa,QAAQ,OAAO;;;oBAGhC,aAAa,MAAM,WAAW,cAAc;oBAC5C,aAAa,MAAM,WAAW,eAAe;;oBAE7C,QAAQ,QAAQ,WAAW,UAAU;;;;YAI7C,QAAQ,QAAQ,eAAe,UAAS,YAAY;gBAChD,OAAO;;;YAGX,gBAAgB;YAChB,mBAAmB;;;;;;;QAOvB,IAAI,YAAY,SAAS,UAAU,KAAK;YACpC,IAAI,QAAQ;YACZ,OAAO,KAAK,UAAU,KAAK,UAAS,KAAK,OAAO;gBAC5C,IAAG,QAAQ,SAAS,UAAU,UAAU,MAAM;oBAC1C,IAAG,MAAM,QAAQ,WAAW,CAAC,GAAG;;wBAE5B;;;oBAGJ,MAAM,KAAK;;gBAEf,OAAO;;;;QAIf,IAAI,WAAW,SAAS,SAAS,KAAK;YAClC,IAAI,OAAO;gBAAG;gBAAG;gBAAK;YACtB,IAAG,IAAI,UAAU,GAAG;gBAChB,OAAO;;YAEX,KAAI,IAAI,GAAG,MAAM,IAAI,QAAQ,IAAI,KAAK,KAAK;gBACvC,MAAM,IAAI,WAAW;gBACrB,OAAO,CAAE,QAAQ,KAAK,OAAQ;gBAC9B,QAAQ;;YAEZ,OAAO;;;QAGX,SAAS,UAAU,WAAW,iBAAiB,QAAQ;YACnD,IAAG,iBAAiB;gBAChB,IAAI;oBAAG;oBAAY;oBAAU,gBAAgB;gBAC7C,KAAI,IAAI,gBAAgB,SAAS,GAAG,KAAK,GAAG,KAAK;oBAC7C,aAAa,gBAAgB;oBAC7B,IAAG,CAAC,QAAQ,SAAS,aAAa;wBAC9B,aAAa,cAAc;;oBAE/B,IAAG,CAAC,cAAc,WAAW,QAAQ,gBAAgB,CAAC,GAAG;wBACrD;;oBAEJ,IAAI,YAAY,WAAW,QAAQ,gBAAgB,CAAC;oBACpD,WAAW,YAAY;oBACvB,IAAG,WAAW;;wBACV,WAAW,KAAK;wBAChB,UAAU,WAAW,SAAS,UAAU;;oBAE5C,IAAG,SAAS,WAAW,SAAS,GAAG;;wBAE/B,UAAU,cAAc;wBACxB,OAAM,SAAS,WAAW,SAAS,GAAG;4BAClC,UAAU,YAAY,KAAK,SAAS,WAAW;;;oBAGvD,IAAG,QAAQ,UAAU,UAAU,iBAAiB,aAAa,OAAO,QAAQ;wBACxE,gBAAgB,cAAc,OAAO,UAAU;;oBAEnD,aAAa,WAAW,SAAS,cAAc,YAAY,OAAO;oBAClE,aAAa,WAAW,SAAS,eAAe,YAAY,OAAO;oBACnE,UAAU,YAAY,4BAA4B,6BAA6B;oBAC/E,gBAAgB;oBAChB,WAAW,KAAK;;;gBAGpB,IAAI,mBAAmB,UAAU;gBACjC,QAAQ,QAAQ,eAAe,UAAC,IAAO;oBACnC,iBAAiB,OAAO;;;;;QAKpC,SAAS,oBAAoB,MAAM,YAAY;YAC3C,IAAI,aAAa,KAAK,GAAG;gBACrB,OAAO,KAAK;gBACZ,YAAY;YAChB,IAAG,QAAQ,YAAY,WAAW,cAAc;gBAC5C,WAAW,cAAc;;YAE7B,IAAG,QAAQ,YAAY,WAAW,YAAY,QAAQ;gBAClD,WAAW,YAAY,QAAQ;;YAEnC,IAAI,WAAW,SAAA,SAAS,YAAY,WAAW;gBAC3C,YAAY;gBACZ,WAAW,YAAY,MAAM,YAAY,KAAK;gBAC9C,UAAU,8BAA8B,CAAC,YAAY,MAAM;;;YAG/D,SAAS,UAAU,MAAM;gBACrB,IAAG,QAAQ,QAAQ,OAAO;;oBACtB,OAAO,SAAS,KAAK;uBAClB,IAAG,QAAQ,SAAS,OAAO;;oBAC9B,OAAO,SAAS,UAAU;uBACvB;oBACH,IAAG,QAAQ,UAAU,SAAS,SAAS,MAAM;wBACzC,OAAO,SAAS,KAAK;2BAClB;;wBACH,OAAO;;;;;YAKnB,IAAG,QAAQ,SAAS,aAAa;gBAC7B,IAAG,QAAQ,YAAY,WAAW,YAAY,MAAM,cAAc;oBAC9D,WAAW,YAAY,MAAM,cAAc;;gBAE/C,IAAG,WAAW,YAAY,MAAM,YAAY,QAAQ,UAAU,KAAK,GAAG,SAAS,CAAC,GAAG;oBAC/E,SAAS,YAAY,UAAU,KAAK,GAAG;;mBAExC,IAAG,QAAQ,SAAS,aAAa;;gBACpC,QAAQ,QAAQ,YAAY,UAAS,QAAQ;oBACzC,IAAG,QAAQ,SAAS,SAAS;wBACzB,IAAG,QAAQ,YAAY,WAAW,YAAY,MAAM,UAAU;4BAC1D,WAAW,YAAY,MAAM,UAAU;;wBAE3C,IAAG,WAAW,YAAY,MAAM,QAAQ,QAAQ,UAAU,WAAW,SAAS,CAAC,GAAG;4BAC9E,SAAS,QAAQ,UAAU,WAAW;;;;mBAI/C;gBACH,OAAO;;YAEX,OAAO;;;QAGX,SAAS,aAAa,WAAW,OAAO,YAAY,UAAU;YAC1D,IAAG,CAAC,OAAO;gBACP;;;YAGJ,IAAI,GAAG,KAAK,MAAM;YAClB,KAAI,IAAI,GAAG,MAAM,MAAM,QAAQ,IAAI,KAAK,KAAK;gBACzC,OAAO,MAAM;gBACb,IAAG,QAAQ,QAAQ,OAAO;oBACtB,IAAG,cAAc,MAAM;wBACnB,IAAG,UAAU,eAAe,KAAK,KAAK;4BAClC,WAAW,UAAU,KAAK;+BACvB;4BACH,MAAM,IAAI,MAAM,0BAA0B,KAAK;;;oBAGvD,IAAI,QAAQ,oBAAoB,MAAM;oBACtC,IAAG,KAAK,OAAO,UAAU;wBACrB,IAAG,SAAS,QAAQ,UAAU,WAAW;4BACrC,SAAS,KAAK,IAAI,MAAM,UAAU,KAAK;;2BAExC;;wBACH,IAAI,aAAa,SAAA,WAAS,KAAK;4BAC3B,IAAI,UAAU,WAAW,QAAQ,aAAa,MAAM;4BACpD,IAAG,YAAY,CAAC,KAAK,UAAU;gCAC3B,IAAG,YAAY,CAAC,GAAG;oCACf,WAAW,KAAK,aAAa,MAAM;;gCAEvC,IAAG,QAAQ,UAAU,WAAW;oCAC5B,SAAS,KAAK,IAAI,MAAM,UAAU,KAAK;;;;wBAInD,IAAG,QAAQ,WAAW,KAAK,GAAG,KAAK;4BAC/B,WAAW,KAAK,GAAG;+BAChB,IAAG,QAAQ,QAAQ,KAAK,GAAG,KAAK;4BACnC,KAAI,IAAI,IAAI,GAAG,OAAO,KAAK,GAAG,GAAG,QAAQ,IAAI,MAAM,KAAK;gCACpD,IAAG,QAAQ,WAAW,KAAK,GAAG,GAAG,KAAK;oCAClC,WAAW,KAAK,GAAG,GAAG;;;;;;;;;QASlD,SAAS,cAAc,QAAQ;YAC3B,IAAI,aAAa;YACjB,IAAG,QAAQ,SAAS,SAAS;gBACzB,aAAa;mBACV,IAAG,QAAQ,SAAS,WAAW,OAAO,eAAe,WAAW,QAAQ,SAAS,OAAO,OAAO;gBAClG,aAAa,OAAO;;YAExB,OAAO;;;QAGX,SAAS,aAAa,YAAY;YAC9B,IAAG,CAAC,QAAQ,SAAS,aAAa;gBAC9B,OAAO;;YAEX,IAAI;gBACA,OAAO,YAAY;cACrB,OAAM,GAAG;gBACP,IAAG,YAAY,KAAK,MAAO,EAAE,QAAQ,QAAQ,qBAAqB,CAAC,GAAI;oBACnE,OAAO;;;;;QAKnB,KAAK,qEAAO,UAAS,MAAM,cAAc,YAAY,eAAe,IAAI;YACpE,IAAI;gBACA,aAAa,cAAc;;YAE/B,IAAG,CAAC,OAAO;gBACP,OAAO;gBACP,KAAI,QAAY,QAAQ;gBACxB,KAAI,OAAW,QAAQ;gBACvB,KAAI,OAAW,QAAQ;;;;YAI3B,UAAU,sBAAsB,YAAW;gBACvC,OAAQ,mBAAoB,mBAAoB,mBAAoB,aAAa,KAAK,gBAAgB,QAAQ;;;YAGlH,YAAY,SAAS,UAAU,WAAW,QAAQ;gBAC9C,IAAG,QAAQ;oBACP,WAAW,WAAW,WAAW;;gBAErC,IAAG,OAAO;oBACN,KAAK,KAAK,WAAW;;;;YAI7B,SAAS,OAAO,GAAG;gBACf,IAAI,WAAW,GAAG;gBAClB,KAAK,MAAM,EAAE;gBACb,SAAS,OAAO;gBAChB,OAAO,SAAS;;;YAGpB,OAAO;gBACH,YAAY;;gBAEZ,OAAO;;;;;;gBAMP,gBAAgB,SAAS,gBAAgB;oBACrC,OAAO;;;;;;;gBAOX,aAAa,SAAA,YAAS,OAAO;oBACzB,IAAG,OAAO;wBACN,mBAAmB,KAAK;2BACrB;wBACH,mBAAmB;;;;;;;;;gBAS3B,iBAAiB,SAAA,gBAAS,YAAY;oBAClC,IAAG,CAAC,QAAQ,SAAS,aAAa;wBAC9B,MAAM,IAAI,MAAM;;oBAEpB,IAAG,CAAC,QAAQ,aAAa;wBACrB,OAAO;;oBAEX,OAAO,QAAQ,KAAK,QAAQ;;;;;;;;gBAQhC,iBAAiB,SAAA,gBAAS,cAAc;oBACpC,IAAG,CAAC,QAAQ,SAAS,eAAe;wBAChC,MAAM,IAAI,MAAM;;oBAEpB,QAAQ,aAAa,QAAQ;oBAC7B,OAAO;;;;;;;gBAOX,YAAY,YAAA;oBAaR,OAbc;;;;;;;;gBAOlB,UAAU,SAAA,SAAS,cAAc;oBAC7B,IAAI,eAAe,SAAA,aAAS,QAAQ;wBAChC,IAAI,WAAW,WAAW,QAAQ,UAAU,CAAC;wBAC7C,IAAG,CAAC,UAAU;4BACV,WAAW,CAAC,CAAC,aAAa;;wBAE9B,OAAO;;oBAEX,IAAG,QAAQ,SAAS,eAAe;wBAC/B,eAAe,CAAC;;oBAEpB,IAAG,QAAQ,QAAQ,eAAe;wBAC9B,IAAI,GAAG;wBACP,KAAI,IAAI,GAAG,MAAM,aAAa,QAAQ,IAAI,KAAK,KAAK;4BAChD,IAAG,CAAC,aAAa,aAAa,KAAK;gCAC/B,OAAO;;;wBAGf,OAAO;2BACJ;wBACH,MAAM,IAAI,MAAM;;;;;;;;;gBASxB,gBAAgB;;;;;;;gBAOhB,YAAY,SAAS,UAAU,YAAY;oBACvC,IAAI;wBACA,OAAO,YAAY;sBACrB,OAAM,GAAG;;wBAEP,IAAG,YAAY,KAAK,MAAO,EAAE,QAAQ,QAAQ,qBAAqB,CAAC,GAAI;4BACnE,EAAE,UAAU,kBAAiB,UAAU,cAAc,oDAAmD,EAAE;;wBAE9G,MAAM;;;;;;;;;gBASd,cAAc;;;;;;;;;gBASd,mBAAmB,SAAS,kBAAkB,YAAY,aAAa;oBACnE,IAAI;wBACA;wBACA;wBACA,eAAe;wBACf,OAAO;;oBAEX,aAAa,KAAK,eAAe;;oBAEjC,IAAG,eAAe,MAAM;wBACpB,OAAO,GAAG;2BACP;wBACH,IAAI;4BACA,eAAe,KAAK,WAAW;0BACjC,OAAM,GAAG;4BACP,OAAO,OAAO;;;wBAGlB,WAAW,KAAK,YAAY;;;oBAGhC,QAAQ,QAAQ,UAAU,UAAS,cAAc;;;wBAG7C,IAAG,QAAQ,SAAS,eAAe;4BAC/B,IAAI,SAAS,KAAK,gBAAgB;4BAClC,IAAG,WAAW,MAAM;gCAChB,YAAY,KAAK;gCACjB;;4BAEJ,eAAe;;;;wBAInB,IAAG,KAAK,aAAa,aAAa,OAAO;;4BAErC,OAAO,aAAa,MAAM,OAAO,UAAS,GAAG;gCACzC,OAAO,KAAK,gBAAgB,aAAa,MAAM,MAAM,QAAQ,KAAK;;;;4BAItE,IAAG,KAAK,WAAW,GAAG;gCAClB,KAAK,MAAM,KAAK,aAAY,YAAY,6DAA2D,aAAa,MAAM,iCAAgC;;;;4BAI1J,IAAG,QAAQ,UAAU,KAAK,cAAc;;gCACpC,aAAa,KAAK,KAAK,YAAY,cAAc,aAAa,KAAK,YAAW;oCAC1E,OAAO,KAAK,kBAAkB;;mCAE/B;gCACH,OAAO,OAAO,IAAI,MAAK,oEAAmE,aAAa,QAAK;;4BAEhH;+BACG,IAAG,QAAQ,QAAQ,eAAe;4BACrC,eAAe;gCACX,OAAO;;+BAER,IAAG,QAAQ,SAAS,eAAe;4BACtC,IAAG,aAAa,eAAe,WAAW,aAAY,MAAU;;gCAE5D,KAAK,gBAAgB;gCACrB,YAAY,KAAK,aAAY;;;;;wBAKrC,IAAG,QAAQ,UAAU,aAAa,UAAU,aAAa,MAAM,WAAW,GAAG;4BACzE,IAAG,QAAQ,UAAU,KAAK,cAAc;;gCACpC,aAAa,KAAK,KAAK,YAAY,cAAc,aAAa,KAAK,YAAW;oCAC1E,OAAO,KAAK,kBAAkB;;mCAE/B;gCACH,OAAO,OAAO,IAAI,MAAK,yBAAuB,aAAa,OAAI,sCAAmC,aAAa,QAAK;;;;;;oBAMhI,OAAO,GAAG,IAAI;;;;;;;;gBAQlB,QAAQ,SAAA,OAAS,YAAY,aAAa;oBACtC,IAAI,OAAO;wBACP,WAAW,GAAG;oBAClB,IAAG,QAAQ,UAAU,eAAe,eAAe,MAAM;wBACrD,IAAG,QAAQ,QAAQ,aAAa;4BAC5B,IAAI,eAAe;4BACnB,QAAQ,QAAQ,YAAY,UAAS,QAAQ;gCACzC,aAAa,KAAK,KAAK,OAAO;;4BAElC,OAAO,GAAG,IAAI;+BACX;4BACH,KAAK,eAAe,KAAK,eAAe,aAAa;;;oBAG7D,IAAG,cAAc,SAAS,GAAG;wBACzB,IAAI,MAAM,cAAc;wBACxB,IAAI,WAAW,SAAS,SAAS,YAAY;4BACzC,YAAY,KAAK;4BACjB,KAAK,kBAAkB,YAAY,aAAa,KAAK,SAAS,UAAU;gCACpE,IAAI;oCACA,aAAa;oCACb,UAAU,WAAW,aAAa;kCACpC,OAAM,GAAG;oCACP,KAAK,MAAM,MAAM,EAAE;oCACnB,SAAS,OAAO;oCAChB;;;gCAGJ,IAAG,cAAc,SAAS,GAAG;oCACzB,SAAS,cAAc;uCACpB;oCACH,SAAS,QAAQ;;+BAEtB,SAAS,MAAM,KAAK;gCACnB,SAAS,OAAO;;;;;wBAKxB,SAAS,cAAc;2BACpB;wBACH,SAAS;;oBAEb,OAAO,SAAS;;;;;;;;gBAQpB,aAAa,SAAS,YAAY,QAAQ;oBACtC,IAAI,WAAW;oBACf,QAAQ,QAAQ,OAAO,UAAU,UAAS,eAAe;wBACrD,IAAG,WAAW,QAAQ,mBAAmB,CAAC,GAAG;4BACzC,SAAS,KAAK;;;oBAGtB,OAAO;;;;;;;;;;;gBAWX,cAAc;;;;;;;;gBAQd,qBAAqB;;;;;;;;;gBASrB,WAAW;;;;;;;;gBAQX,gBAAgB;;;;;QAKxB,KAAK,MAAM,QAAQ,QAAQ,OAAO;;;IAGtC,IAAI,eAAe,QAAQ;IAC3B,QAAQ,YAAY,UAAS,SAAS,SAAS,QAAQ;;QAEnD,QAAQ,QAAQ,QAAQ,SAAS,UAAS,QAAQ;YAC9C,eAAe,QAAQ;;QAE3B,OAAO,aAAa,SAAS,SAAS;;;IAG1C,IAAI,iBAAiB,SAAS,eAAe,MAAM,OAAO;QACtD,IAAG,CAAC,mBAAmB,SAAS,KAAK,UAAU,QAAQ,SAAS,SAAS,cAAc,QAAQ,UAAU,CAAC,GAAG;YACzG,cAAc,KAAK;;;;IAI3B,IAAI,cAAc,QAAQ;IAC1B,QAAQ,SAAS,UAAS,MAAM,UAAU,UAAU;QAChD,eAAe;QACf,OAAO,YAAY,MAAM,UAAU;;GAGxC,SAAS,QAAQ;AChrBpB,CAAC,UAAS,SAAS;IACf;;IAEA,QAAQ,OAAO,eAAe,UAAU,gEAAc,UAAS,aAAa,UAAU,UAAU,QAAQ;QACpG,OAAO;YACH,UAAU;YACV,UAAU;YACV,UAAU;YACV,SAAS,SAAA,QAAS,SAAS,OAAO;;gBAE9B,IAAI,UAAU,QAAQ,GAAG;gBACzB,QAAQ,KAAK;;gBAEb,OAAO,UAAS,QAAQ,UAAU,OAAO;oBACrC,IAAI,QAAQ,OAAO,MAAM;oBACzB,OAAO,OAAO,YAAW;wBACrB,OAAO,MAAM,WAAW,MAAM;uBAC/B,UAAS,YAAY;wBACpB,IAAG,QAAQ,UAAU,aAAa;4BAC9B,YAAY,KAAK,YAAY,KAAK,SAAS,UAAU;gCACjD,SAAS,MAAM,SAAS,SAAS,SAAS;;;uBAGnD;;;;;GAMpB,SAAS;AC7BZ,CAAC,UAAS,SAAS;IACf;;IAEA,QAAQ,OAAO,eAAe,oBAAO,UAAS,UAAU;QACpD,SAAS,UAAU,2DAAe,UAAU,WAAW,IAAI,SAAS,WAAW;YAC3E,IAAI,eAAe;gBACf,kBAAkB;gBAClB,SAAS,QAAQ,SAAS,qBAAqB,QAAQ,MAAM,QAAQ,SAAS,qBAAqB,QAAQ;;;;;;;;;YAS/G,UAAU,eAAe,SAAS,aAAa,MAAM,MAAM,QAAQ;gBAC/D,IAAI,WAAW,GAAG;oBACd;oBACA;oBACA,aAAa,UAAU;oBACvB,cAAc,SAAS,YAAY,KAAK;oBACpC,IAAI,KAAK,IAAI,OAAO;oBACpB,IAAG,IAAI,QAAQ,QAAQ,GAAG;wBACtB,IAAG,IAAI,UAAU,GAAG,IAAI,SAAS,OAAO,KAAK;4BACzC,OAAO,MAAM,SAAS;;wBAE1B,OAAO,MAAM,UAAU;2BACpB;wBACH,OAAO,MAAM,UAAU;;;;;;;gBAOnC,IAAG,QAAQ,YAAY,WAAW,IAAI,QAAQ;oBAC1C,WAAW,IAAI,MAAM,SAAS;;;;gBAIlC,QAAO;oBACH,KAAK;wBACD,KAAK,QAAQ,SAAS,cAAc;wBACpC,GAAG,OAAO;wBACV,GAAG,MAAM;wBACT,GAAG,OAAO,OAAO,UAAU,QAAQ,YAAY,QAAQ;wBACvD;oBACJ,KAAK;wBACD,KAAK,QAAQ,SAAS,cAAc;wBACpC,GAAG,MAAM,OAAO,UAAU,QAAQ,YAAY,QAAQ;wBACtD;oBACJ;wBACI,SAAS,OAAO,IAAI,MAAM,sBAAqB,OAAO,yCAAuC,OAAO;wBACpG;;gBAER,GAAG,SAAS,GAAE,qBAAyB,UAAS,GAAG;oBAC/C,IAAG,GAAG,cAAkB,CAAE,WAAW,KAAK,GAAE,eAAqB,QAAQ;oBACzE,GAAG,SAAS,GAAE,qBAAyB;oBACvC,SAAS;oBACT,UAAU,WAAW,yBAAyB;oBAC9C,SAAS;;gBAEb,GAAG,UAAU,YAAW;oBACpB,SAAS,OAAO,IAAI,MAAM,oBAAoB;;gBAElD,GAAG,QAAQ,OAAO,QAAQ,IAAI;;gBAE9B,IAAI,mBAAmB,OAAO;gBAC9B,IAAG,OAAO,cAAc;oBACpB,IAAI,UAAU,QAAQ,QAAQ,OAAO;oBACrC,IAAG,WAAW,QAAQ,SAAS,GAAG;wBAC9B,mBAAmB,QAAQ;;;gBAGnC,OAAO,aAAa,IAAI;;;;;;;;gBAQxB,IAAG,QAAQ,OAAO;oBACd,IAAG,CAAC,cAAc;wBACd,IAAI,KAAK,QAAQ,UAAU,UAAU;;;wBAGrC,IAAG,iBAAiB,KAAK,QAAQ,UAAU,WAAW;4BAClD,IAAI,IAAK,QAAQ,UAAU,WAAY,MAAM;4BAC7C,IAAI,aAAa,WAAW,CAAC,SAAS,EAAE,IAAI,KAAK,SAAS,EAAE,IAAI,KAAK,SAAS,EAAE,MAAM,GAAG,KAAK,KAAK;4BACnG,kBAAkB,aAAa;+BAC5B,IAAG,GAAG,QAAQ,aAAa,CAAC,GAAG;;4BAClC,IAAI,iBAAiB,WAAW,GAAG,MAAM,GAAG,QAAQ,aAAa;4BACjE,kBAAkB,iBAAiB;+BAChC,IAAG,GAAG,QAAQ,YAAY,CAAC,KAAK,GAAG,QAAQ,aAAa,CAAC,KAAK,GAAG,QAAQ,gBAAgB,CAAC,GAAG;4BAChG,IAAI,gBAAgB,WAAW,GAAG,MAAM,uBAAuB;4BAC/D,kBAAkB,gBAAgB;;;;oBAI1C,IAAG,iBAAiB;wBAChB,IAAI,QAAQ;wBACZ,IAAI,WAAW,UAAU,YAAW;4BAChC,IAAI;gCACA,GAAG,MAAM;gCACT,UAAU,OAAO;gCACjB,GAAG;8BACL,OAAM,GAAG;gCACP,IAAG,EAAE,SAAS,GAAG;oCACb,GAAG;;;2BAGZ;;;;gBAIX,OAAO,SAAS;;;YAGpB,OAAO;;;GAIhB,SAAS;AC5HZ,CAAC,UAAS,SAAS;IACf;;IAEA,QAAQ,OAAO,eAAe,oBAAO,UAAS,UAAU;QACpD,SAAS,UAAU,mCAAe,UAAS,WAAW,IAAI;;;;;;;YAOtD,UAAU,cAAc,SAAS,YAAY,QAA6B;gBACtE,IADiD,iBAAc,UAAA,OAAA,YAAG,KAAE,UAAA;;gBACpE,IAAI,WAAW;oBACX,iBAAiB;oBACjB,UAAU;oBACV,WAAW;oBACX,eAAe;oBACf,aAAa,UAAU;;gBAE3B,UAAU,YAAY;;;gBAGtB,IAAI,SAAS,QAAQ,KAAK,QAAQ,OAAO,IAAI,gBAAgB;;gBAE7D,IAAI,WAAW,SAAA,SAAS,MAAM;oBAC1B,IAAI,YAAY;wBAAM;oBACtB,IAAG,QAAQ,SAAS,OAAO;wBACvB,YAAY,KAAK;wBACjB,OAAO,KAAK;;oBAEhB,eAAe,WAAW,IAAI;oBAC9B,IAAG,QAAQ,YAAY,iBAAiB,OAAO,UAAU,OAAO;;;wBAG5D,IAAG,CAAC,IAAI,gCAAgC,KAAK,WAAW,MAAM;;4BAC1D,YAAY,EAAE;4BACd,OAAO,KAAK,OAAO,EAAE,GAAG,SAAS,GAAG,KAAK;;;wBAG7C,IAAG,CAAC,WAAW;4BACX,IAAG,CAAC,IAAI,yCAAyC,KAAK,WAAW,MAAM;;gCACnE,YAAY,EAAE;mCACX,IAAG,CAAC,UAAU,SAAS,eAAe,uBAAuB,UAAU,SAAS,eAAe,SAAS;;gCAC3G,YAAY;mCACT;gCACH,UAAU,MAAM,MAAM,wCAAwC;gCAC9D;;;;wBAIR,IAAG,CAAC,cAAc,SAAS,cAAc,WAAW,SAAS,QAAQ,UAAU,CAAC,GAAG;4BAC/E,SAAS,KAAK;+BACX,IAAG,CAAC,cAAc,UAAU,cAAc,UAAU,eAAe,QAAQ,UAAU,CAAC,GAAG;4BAC5F,eAAe,KAAK;+BACjB,IAAG,cAAe,QAAS,QAAQ,QAAQ,UAAU,CAAC,GAAG;4BAC5D,QAAQ,KAAK;+BACV;4BACH,UAAU,MAAM,MAAM,6BAA6B;;2BAGpD,IAAG,cAAc;wBACpB,SAAS,KAAK;;;;gBAItB,IAAG,OAAO,OAAO;oBACb,SAAS,OAAO,MAAM;uBACnB;oBACH,QAAQ,QAAQ,OAAO,OAAO,UAAA,MAAQ;wBAClC,SAAS;;;;gBAIjB,IAAG,SAAS,SAAS,GAAG;oBACpB,IAAI,cAAc,GAAG;oBACrB,UAAU,UAAU,UAAU,UAAS,KAAK;wBACxC,IAAG,QAAQ,UAAU,QAAQ,UAAU,UAAU,eAAe,qBAAqB;4BACjF,UAAU,MAAM,MAAM;4BACtB,YAAY,OAAO;+BAChB;4BACH,YAAY;;uBAEjB;oBACH,SAAS,KAAK,YAAY;;;gBAG9B,IAAG,eAAe,SAAS,GAAG;oBAC1B,IAAI,oBAAoB,GAAG;oBAC3B,UAAU,gBAAgB,gBAAgB,UAAS,KAAK;wBACpD,IAAG,QAAQ,UAAU,QAAQ,UAAU,gBAAgB,eAAe,qBAAqB;4BACvF,UAAU,MAAM,MAAM;4BACtB,kBAAkB,OAAO;+BACtB;4BACH,kBAAkB;;uBAEvB;oBACH,SAAS,KAAK,kBAAkB;;;gBAGpC,IAAG,QAAQ,SAAS,GAAG;oBACnB,IAAI,aAAa,GAAG;oBACpB,UAAU,SAAS,SAAS,UAAS,KAAK;wBACtC,IAAG,QAAQ,UAAU,QAAQ,UAAU,SAAS,eAAe,qBAAqB;4BAChF,UAAU,MAAM,MAAM;4BACtB,WAAW,OAAO;+BACf;4BACH,WAAW;;uBAEhB;oBACH,SAAS,KAAK,WAAW;;;gBAG7B,IAAG,OAAO,SAAS,OAAO,MAAM,SAAS,GAAG;oBACxC,OAAO,GAAG,IAAI,UAAU,KAAK,SAAS,UAAU;wBAC5C,OAAO,UAAU,YAAY,QAAQ;;uBAEtC;oBACH,OAAO,GAAG,IAAI,UAAS,WAAS,UAAS,KAAK;wBAC1C,UAAU,YAAY;wBACtB,OAAO;;;;;;;;;;;YAWnB,UAAU,OAAO,UAAS,QAAqB;gBAM3C,IAN8B,SAAM,UAAA,OAAA,YAAG,KAAE,UAAA;;gBACzC,IAAI,OAAO;oBACP,SAAS;oBACT,eAAe;oBACf,WAAW,GAAG;oBACd;;;gBAGJ,IAAG,QAAQ,QAAQ,SAAS;;oBAExB,QAAQ,QAAQ,QAAQ,UAAS,GAAG;wBAChC,aAAa,KAAK,KAAK,KAAK,GAAG;;;;oBAInC,GAAG,IAAI,cAAc,KAAK,SAAS,QAAQ,KAAK;wBAC5C,SAAS,QAAQ;uBAClB,SAAS,MAAM,KAAK;wBACnB,SAAS,OAAO;;;oBAGpB,OAAO,SAAS;;;;gBAIpB,IAAG,QAAQ,SAAS,SAAS;oBACzB,SAAS,KAAK,gBAAgB;oBAC9B,IAAG,CAAC,QAAQ;wBACR,SAAS;4BACL,OAAO,CAAC;;;uBAGb,IAAG,QAAQ,SAAS,SAAS;;oBAEhC,IAAG,QAAQ,UAAU,OAAO,SAAS,QAAQ,UAAU,OAAO,OAAO;wBACjE,SAAS;4BACL,OAAO,CAAC;;2BAET;wBACH,SAAS,KAAK,gBAAgB;;;;gBAItC,IAAG,WAAW,MAAM;oBAChB,IAAI,aAAa,KAAK,eAAe;oBACrC,UAAU,eAAc,cAAc,aAAa;oBACnD,UAAU,MAAM,MAAM;oBACtB,SAAS,OAAO,IAAI,MAAM;oBAC1B,OAAO,SAAS;uBACb;;oBAEH,IAAG,QAAQ,UAAU,OAAO,WAAW;wBACnC,IAAG,QAAQ,YAAY,OAAO,QAAQ;4BAClC,OAAO,QAAQ;;wBAEnB,IAAG,QAAQ,SAAS,OAAO,WAAW;4BAClC,OAAO,MAAM,KAAK,OAAO;+BACtB,IAAG,QAAQ,QAAQ,OAAO,WAAW;4BACxC,OAAO,MAAM,OAAO,OAAO;;;;;gBAKvC,IAAI,cAAc;gBAClB,QAAQ,OAAO,aAAa,QAAQ;;;gBAGpC,IAAG,QAAQ,YAAY,OAAO,UAAU,QAAQ,UAAU,OAAO,SAAS,UAAU,aAAa,OAAO,OAAO;oBAC3G,OAAO,UAAU,OAAO,OAAO,MAAM;;;gBAGzC,UAAU,YAAY,QAAQ,aAAa,KAAK,SAAS,UAAU;oBAC/D,UAAU,OAAO,MAAM,aAAa,KAAK,UAAS,KAAK;wBACnD,SAAS,QAAQ;uBAClB,UAAS,KAAK;wBACb,SAAS,OAAO;;mBAErB,SAAS,MAAM,KAAK;oBACnB,SAAS,OAAO;;;gBAGpB,OAAO,SAAS;;;;YAIpB,OAAO;;;GAIhB,SAAS;AC3NZ,CAAC,UAAS,SAAS;IACf;;IAEA,QAAQ,OAAO,eAAe,oBAAO,UAAS,UAAU;QACpD,SAAS,UAAU,mCAAe,UAAU,WAAW,IAAI;;;;;;;;;YASvD,UAAU,YAAY,UAAS,OAAO,UAAU,QAAQ;gBACpD,IAAI,WAAW;gBACf,QAAQ,QAAQ,OAAO,SAAS,QAAQ,MAAM;oBAC1C,SAAS,KAAK,UAAU,aAAa,OAAO,MAAM;;gBAEtD,GAAG,IAAI,UAAU,KAAK,SAAS,UAAU;oBACrC;mBACD,UAAA,KAAO;oBACN,SAAS;;;YAGjB,UAAU,UAAU,mBAAmB;;YAEvC,OAAO;;;GAIhB,SAAS;AC9BZ,CAAC,UAAS,SAAS;IACf;;IAEA,QAAQ,OAAO,eAAe,oBAAO,UAAS,UAAU;QACpD,SAAS,UAAU,mCAAe,UAAU,WAAW,IAAI;;;;;;;;;YASvD,UAAU,WAAW,UAAS,OAAO,UAAU,QAAQ;gBACnD,IAAI,WAAW;gBACf,QAAQ,QAAQ,OAAO,SAAS,QAAQ,MAAM;oBAC1C,SAAS,KAAK,UAAU,aAAa,MAAM,MAAM;;gBAErD,GAAG,IAAI,UAAU,KAAK,SAAS,UAAU;oBACrC;mBACD,SAAS,MAAM,KAAK;oBACnB,SAAS;;;YAGjB,UAAU,SAAS,mBAAmB;;YAEtC,OAAO;;;GAIhB,SAAS;AC9BZ,CAAC,UAAS,SAAS;IACf;;IAEA,QAAQ,OAAO,eAAe,oBAAO,UAAS,UAAU;QACpD,SAAS,UAAU,8DAAe,UAAU,WAAW,gBAAgB,IAAI,OAAO;;;;;;;;;YAS9E,UAAU,kBAAkB,UAAS,OAAO,UAAU,QAAQ;gBAC1D,IAAI,WAAW;oBACX,aAAa,UAAU;;gBAE3B,QAAQ,QAAQ,OAAO,UAAS,KAAK;oBACjC,IAAI,WAAW,GAAG;oBAClB,SAAS,KAAK,SAAS;oBACvB,MAAM,IAAI,KAAK,QAAQ,QAAQ,UAAS,MAAM;wBAC1C,IAAG,QAAQ,SAAS,SAAS,KAAK,SAAS,GAAG;4BAC1C,QAAQ,QAAQ,QAAQ,QAAQ,OAAO,UAAS,MAAM;gCAClD,IAAG,KAAK,aAAa,YAAY,KAAK,SAAS,oBAAoB;oCAC/D,eAAe,IAAI,KAAK,IAAI,KAAK;;;;wBAI7C,IAAG,QAAQ,YAAY,WAAW,IAAI,OAAO;4BACzC,WAAW,IAAI,KAAK;;wBAExB,SAAS;uBACV,MAAM,UAAS,KAAK;wBACnB,SAAS,OAAO,IAAI,MAAM,oCAAmC,MAAM,SAAQ;;;gBAGnF,OAAO,GAAG,IAAI,UAAU,KAAK,SAAS,UAAU;oBAC5C;mBACD,SAAS,MAAM,KAAK;oBACnB,SAAS;;;YAGjB,UAAU,gBAAgB,mBAAmB;;YAE7C,OAAO;;;GAIhB,SAAS;AChDZ;AACA,IAAG,CAAC,MAAM,UAAU,SAAS;IAC3B,MAAM,UAAU,UAAU,UAAS,eAAe,WAAW;QAC3D,IAAI;;;;QAIJ,IAAG,QAAQ,MAAM;YACf,MAAM,IAAI,UAAU;;;QAGtB,IAAI,IAAI,OAAO;;;;;QAKf,IAAI,MAAM,EAAE,WAAW;;;QAGvB,IAAG,QAAQ,GAAG;YACZ,OAAO,CAAC;;;;;QAKV,IAAI,IAAI,CAAC,aAAa;;QAEtB,IAAG,KAAK,IAAI,OAAO,UAAU;YAC3B,IAAI;;;;QAIN,IAAG,KAAK,KAAK;YACX,OAAO,CAAC;;;;;;QAMV,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI,IAAI;;;QAG7C,OAAM,IAAI,KAAK;;;;;;;;;;;;;YAab,IAAG,KAAK,KAAK,EAAE,OAAO,eAAe;gBACnC,OAAO;;YAET;;QAEF,OAAO,CAAC;;CAEX","file":"ocLazyLoad.js","sourcesContent":["(function(angular, window) {\r\n 'use strict';\r\n\r\n var regModules = ['ng', 'oc.lazyLoad'],\r\n regInvokes = {},\r\n regConfigs = [],\r\n modulesToLoad = [],\r\n recordDeclarations = [],\r\n broadcast = angular.noop,\r\n runBlocks = {},\r\n justLoaded = [];\r\n\r\n var ocLazyLoad = angular.module('oc.lazyLoad', ['ng']);\r\n\r\n ocLazyLoad.provider('$ocLazyLoad', function($controllerProvider, $provide, $compileProvider, $filterProvider, $injector, $animateProvider) {\r\n var modules = {},\r\n providers = {\r\n $controllerProvider: $controllerProvider,\r\n $compileProvider: $compileProvider,\r\n $filterProvider: $filterProvider,\r\n $provide: $provide, // other things\r\n $injector: $injector,\r\n $animateProvider: $animateProvider\r\n },\r\n debug = false,\r\n events = false,\r\n moduleCache = [];\r\n\r\n moduleCache.push = function(value) {\r\n if(this.indexOf(value) === -1) {\r\n Array.prototype.push.apply(this, arguments);\r\n }\r\n };\r\n\r\n this.config = function(config) {\r\n // If we want to define modules configs\r\n if(angular.isDefined(config.modules)) {\r\n if(angular.isArray(config.modules)) {\r\n angular.forEach(config.modules, function(moduleConfig) {\r\n modules[moduleConfig.name] = moduleConfig;\r\n });\r\n } else {\r\n modules[config.modules.name] = config.modules;\r\n }\r\n }\r\n\r\n if(angular.isDefined(config.debug)) {\r\n debug = config.debug;\r\n }\r\n\r\n if(angular.isDefined(config.events)) {\r\n events = config.events;\r\n }\r\n };\r\n\r\n /**\r\n * Get the list of existing registered modules\r\n * @param element\r\n */\r\n this._init = function _init(element) {\r\n // this is probably useless now because we override angular.bootstrap\r\n if(modulesToLoad.length === 0) {\r\n var elements = [element],\r\n names = ['ng:app', 'ng-app', 'x-ng-app', 'data-ng-app'],\r\n NG_APP_CLASS_REGEXP = /\\sng[:\\-]app(:\\s*([\\w\\d_]+);?)?\\s/,\r\n append = function append(elm) {\r\n return (elm && elements.push(elm));\r\n };\r\n\r\n angular.forEach(names, function(name) {\r\n names[name] = true;\r\n append(document.getElementById(name));\r\n name = name.replace(':', '\\\\:');\r\n if(element[0].querySelectorAll) {\r\n angular.forEach(element[0].querySelectorAll('.' + name), append);\r\n angular.forEach(element[0].querySelectorAll('.' + name + '\\\\:'), append);\r\n angular.forEach(element[0].querySelectorAll('[' + name + ']'), append);\r\n }\r\n });\r\n\r\n angular.forEach(elements, function(elm) {\r\n if(modulesToLoad.length === 0) {\r\n var className = ' ' + element.className + ' ';\r\n var match = NG_APP_CLASS_REGEXP.exec(className);\r\n if(match) {\r\n modulesToLoad.push((match[2] || '').replace(/\\s+/g, ','));\r\n } else {\r\n angular.forEach(elm.attributes, function(attr) {\r\n if(modulesToLoad.length === 0 && names[attr.name]) {\r\n modulesToLoad.push(attr.value);\r\n }\r\n });\r\n }\r\n }\r\n });\r\n }\r\n\r\n if(modulesToLoad.length === 0 && !((window.jasmine || window.mocha) && angular.isDefined(angular.mock))) {\r\n console.error('No module found during bootstrap, unable to init ocLazyLoad. You should always use the ng-app directive or angular.boostrap when you use ocLazyLoad.');\r\n }\r\n\r\n var addReg = function addReg(moduleName) {\r\n if(regModules.indexOf(moduleName) === -1) {\r\n // register existing modules\r\n regModules.push(moduleName);\r\n var mainModule = angular.module(moduleName);\r\n\r\n // register existing components (directives, services, ...)\r\n _invokeQueue(null, mainModule._invokeQueue, moduleName);\r\n _invokeQueue(null, mainModule._configBlocks, moduleName); // angular 1.3+\r\n\r\n angular.forEach(mainModule.requires, addReg);\r\n }\r\n };\r\n\r\n angular.forEach(modulesToLoad, function(moduleName) {\r\n addReg(moduleName);\r\n });\r\n\r\n modulesToLoad = []; // reset for next bootstrap\r\n recordDeclarations.pop(); // wait for the next lazy load\r\n };\r\n\r\n /**\r\n * Like JSON.stringify but that doesn't throw on circular references\r\n * @param obj\r\n */\r\n var stringify = function stringify(obj) {\r\n var cache = [];\r\n return JSON.stringify(obj, function(key, value) {\r\n if(angular.isObject(value) && value !== null) {\r\n if(cache.indexOf(value) !== -1) {\r\n // Circular reference found, discard key\r\n return;\r\n }\r\n // Store value in our collection\r\n cache.push(value);\r\n }\r\n return value;\r\n });\r\n };\r\n\r\n var hashCode = function hashCode(str) {\r\n var hash = 0, i, chr, len;\r\n if(str.length == 0) {\r\n return hash;\r\n }\r\n for(i = 0, len = str.length; i < len; i++) {\r\n chr = str.charCodeAt(i);\r\n hash = ((hash << 5) - hash) + chr;\r\n hash |= 0; // Convert to 32bit integer\r\n }\r\n return hash;\r\n };\r\n\r\n function _register(providers, registerModules, params) {\r\n if(registerModules) {\r\n var k, moduleName, moduleFn, tempRunBlocks = [];\r\n for(k = registerModules.length - 1; k >= 0; k--) {\r\n moduleName = registerModules[k];\r\n if(!angular.isString(moduleName)) {\r\n moduleName = getModuleName(moduleName);\r\n }\r\n if(!moduleName || justLoaded.indexOf(moduleName) !== -1) {\r\n continue;\r\n }\r\n var newModule = regModules.indexOf(moduleName) === -1;\r\n moduleFn = ngModuleFct(moduleName);\r\n if(newModule) { // new module\r\n regModules.push(moduleName);\r\n _register(providers, moduleFn.requires, params);\r\n }\r\n if(moduleFn._runBlocks.length > 0) {\r\n // new run blocks detected! Replace the old ones (if existing)\r\n runBlocks[moduleName] = [];\r\n while(moduleFn._runBlocks.length > 0) {\r\n runBlocks[moduleName].push(moduleFn._runBlocks.shift());\r\n }\r\n }\r\n if(angular.isDefined(runBlocks[moduleName]) && (newModule || params.rerun)) {\r\n tempRunBlocks = tempRunBlocks.concat(runBlocks[moduleName]);\r\n }\r\n _invokeQueue(providers, moduleFn._invokeQueue, moduleName, params.reconfig);\r\n _invokeQueue(providers, moduleFn._configBlocks, moduleName, params.reconfig); // angular 1.3+\r\n broadcast(newModule ? 'ocLazyLoad.moduleLoaded' : 'ocLazyLoad.moduleReloaded', moduleName);\r\n registerModules.pop();\r\n justLoaded.push(moduleName);\r\n }\r\n // execute the run blocks at the end\r\n var instanceInjector = providers.getInstanceInjector();\r\n angular.forEach(tempRunBlocks, (fn) => {\r\n instanceInjector.invoke(fn);\r\n });\r\n }\r\n }\r\n\r\n function _registerInvokeList(args, moduleName) {\r\n var invokeList = args[2][0],\r\n type = args[1],\r\n newInvoke = false;\r\n if(angular.isUndefined(regInvokes[moduleName])) {\r\n regInvokes[moduleName] = {};\r\n }\r\n if(angular.isUndefined(regInvokes[moduleName][type])) {\r\n regInvokes[moduleName][type] = {};\r\n }\r\n var onInvoke = function(invokeName, signature) {\r\n newInvoke = true;\r\n regInvokes[moduleName][type][invokeName].push(signature);\r\n broadcast('ocLazyLoad.componentLoaded', [moduleName, type, invokeName]);\r\n };\r\n\r\n function signature(data) {\r\n if(angular.isArray(data)) { // arrays are objects, we need to test for it first\r\n return hashCode(data.toString());\r\n } else if(angular.isObject(data)) { // constants & values for example\r\n return hashCode(stringify(data));\r\n } else {\r\n if(angular.isDefined(data) && data !== null) {\r\n return hashCode(data.toString());\r\n } else { // null & undefined constants\r\n return data;\r\n }\r\n }\r\n }\r\n\r\n if(angular.isString(invokeList)) {\r\n if(angular.isUndefined(regInvokes[moduleName][type][invokeList])) {\r\n regInvokes[moduleName][type][invokeList] = [];\r\n }\r\n if(regInvokes[moduleName][type][invokeList].indexOf(signature(args[2][1])) === -1) {\r\n onInvoke(invokeList, signature(args[2][1]));\r\n }\r\n } else if(angular.isObject(invokeList)) { // decorators for example\r\n angular.forEach(invokeList, function(invoke) {\r\n if(angular.isString(invoke)) {\r\n if(angular.isUndefined(regInvokes[moduleName][type][invoke])) {\r\n regInvokes[moduleName][type][invoke] = [];\r\n }\r\n if(regInvokes[moduleName][type][invoke].indexOf(signature(invokeList[1])) === -1) {\r\n onInvoke(invoke, signature(invokeList[1]));\r\n }\r\n }\r\n });\r\n } else {\r\n return false;\r\n }\r\n return newInvoke;\r\n }\r\n\r\n function _invokeQueue(providers, queue, moduleName, reconfig) {\r\n if(!queue) {\r\n return;\r\n }\r\n\r\n var i, len, args, provider;\r\n for(i = 0, len = queue.length; i < len; i++) {\r\n args = queue[i];\r\n if(angular.isArray(args)) {\r\n if(providers !== null) {\r\n if(providers.hasOwnProperty(args[0])) {\r\n provider = providers[args[0]];\r\n } else {\r\n throw new Error('unsupported provider ' + args[0]);\r\n }\r\n }\r\n var isNew = _registerInvokeList(args, moduleName);\r\n if(args[1] !== 'invoke') {\r\n if(isNew && angular.isDefined(provider)) {\r\n provider[args[1]].apply(provider, args[2]);\r\n }\r\n } else { // config block\r\n var callInvoke = function(fct) {\r\n var invoked = regConfigs.indexOf(moduleName + '-' + fct);\r\n if(invoked === -1 || reconfig) {\r\n if(invoked === -1) {\r\n regConfigs.push(moduleName + '-' + fct);\r\n }\r\n if(angular.isDefined(provider)) {\r\n provider[args[1]].apply(provider, args[2]);\r\n }\r\n }\r\n };\r\n if(angular.isFunction(args[2][0])) {\r\n callInvoke(args[2][0]);\r\n } else if(angular.isArray(args[2][0])) {\r\n for(var j = 0, jlen = args[2][0].length; j < jlen; j++) {\r\n if(angular.isFunction(args[2][0][j])) {\r\n callInvoke(args[2][0][j]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n function getModuleName(module) {\r\n var moduleName = null;\r\n if(angular.isString(module)) {\r\n moduleName = module;\r\n } else if(angular.isObject(module) && module.hasOwnProperty('name') && angular.isString(module.name)) {\r\n moduleName = module.name;\r\n }\r\n return moduleName;\r\n }\r\n\r\n function moduleExists(moduleName) {\r\n if(!angular.isString(moduleName)) {\r\n return false;\r\n }\r\n try {\r\n return ngModuleFct(moduleName);\r\n } catch(e) {\r\n if(/No module/.test(e) || (e.message.indexOf('$injector:nomod') > -1)) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n this.$get = function($log, $rootElement, $rootScope, $cacheFactory, $q) {\r\n var instanceInjector,\r\n filesCache = $cacheFactory('ocLazyLoad');\r\n\r\n if(!debug) {\r\n $log = {};\r\n $log['error'] = angular.noop;\r\n $log['warn'] = angular.noop;\r\n $log['info'] = angular.noop;\r\n }\r\n\r\n // Make this lazy because when $get() is called the instance injector hasn't been assigned to the rootElement yet\r\n providers.getInstanceInjector = function() {\r\n return (instanceInjector) ? instanceInjector : (instanceInjector = ($rootElement.data('$injector') || angular.injector()));\r\n };\r\n\r\n broadcast = function broadcast(eventName, params) {\r\n if(events) {\r\n $rootScope.$broadcast(eventName, params);\r\n }\r\n if(debug) {\r\n $log.info(eventName, params);\r\n }\r\n };\r\n\r\n function reject(e) {\r\n var deferred = $q.defer();\r\n $log.error(e.message);\r\n deferred.reject(e);\r\n return deferred.promise;\r\n }\r\n\r\n return {\r\n _broadcast: broadcast,\r\n\r\n _$log: $log,\r\n\r\n /**\r\n * Returns the files cache used by the loaders to store the files currently loading\r\n * @returns {*}\r\n */\r\n _getFilesCache: function getFilesCache() {\r\n return filesCache;\r\n },\r\n\r\n /**\r\n * Let the service know that it should monitor angular.module because files are loading\r\n * @param watch boolean\r\n */\r\n toggleWatch: function(watch) {\r\n if(watch) {\r\n recordDeclarations.push(true);\r\n } else {\r\n recordDeclarations.pop();\r\n }\r\n },\r\n\r\n /**\r\n * Let you get a module config object\r\n * @param moduleName String the name of the module\r\n * @returns {*}\r\n */\r\n getModuleConfig: function(moduleName) {\r\n if(!angular.isString(moduleName)) {\r\n throw new Error('You need to give the name of the module to get');\r\n }\r\n if(!modules[moduleName]) {\r\n return null;\r\n }\r\n return angular.copy(modules[moduleName]);\r\n },\r\n\r\n /**\r\n * Let you define a module config object\r\n * @param moduleConfig Object the module config object\r\n * @returns {*}\r\n */\r\n setModuleConfig: function(moduleConfig) {\r\n if(!angular.isObject(moduleConfig)) {\r\n throw new Error('You need to give the module config object to set');\r\n }\r\n modules[moduleConfig.name] = moduleConfig;\r\n return moduleConfig;\r\n },\r\n\r\n /**\r\n * Returns the list of loaded modules\r\n * @returns {string[]}\r\n */\r\n getModules: () => regModules,\r\n\r\n /**\r\n * Let you check if a module has been loaded into Angular or not\r\n * @param modulesNames String/Object a module name, or a list of module names\r\n * @returns {boolean}\r\n */\r\n isLoaded: function(modulesNames) {\r\n var moduleLoaded = function(module) {\r\n var isLoaded = regModules.indexOf(module) > -1;\r\n if(!isLoaded) {\r\n isLoaded = !!moduleExists(module);\r\n }\r\n return isLoaded;\r\n };\r\n if(angular.isString(modulesNames)) {\r\n modulesNames = [modulesNames];\r\n }\r\n if(angular.isArray(modulesNames)) {\r\n var i, len;\r\n for(i = 0, len = modulesNames.length; i < len; i++) {\r\n if(!moduleLoaded(modulesNames[i])) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n } else {\r\n throw new Error('You need to define the module(s) name(s)');\r\n }\r\n },\r\n\r\n /**\r\n * Given a module, return its name\r\n * @param module\r\n * @returns {String}\r\n */\r\n _getModuleName: getModuleName,\r\n\r\n /**\r\n * Returns a module if it exists\r\n * @param moduleName\r\n * @returns {module}\r\n */\r\n _getModule: function getModule(moduleName) {\r\n try {\r\n return ngModuleFct(moduleName);\r\n } catch(e) {\r\n // this error message really suxx\r\n if(/No module/.test(e) || (e.message.indexOf('$injector:nomod') > -1)) {\r\n e.message = 'The module \"' + stringify(moduleName) + '\" that you are trying to load does not exist. ' + e.message\r\n }\r\n throw e;\r\n }\r\n },\r\n\r\n /**\r\n * Check if a module exists and returns it if it does\r\n * @param moduleName\r\n * @returns {boolean}\r\n */\r\n moduleExists: moduleExists,\r\n\r\n /**\r\n * Load the dependencies, and might try to load new files depending on the config\r\n * @param moduleName (String or Array of Strings)\r\n * @param localParams\r\n * @returns {*}\r\n * @private\r\n */\r\n _loadDependencies: function _loadDependencies(moduleName, localParams) {\r\n var loadedModule,\r\n requires,\r\n diff,\r\n promisesList = [],\r\n self = this;\r\n\r\n moduleName = self._getModuleName(moduleName);\r\n\r\n if(moduleName === null) {\r\n return $q.when();\r\n } else {\r\n try {\r\n loadedModule = self._getModule(moduleName);\r\n } catch(e) {\r\n return reject(e);\r\n }\r\n // get unloaded requires\r\n requires = self.getRequires(loadedModule);\r\n }\r\n\r\n angular.forEach(requires, function(requireEntry) {\r\n // If no configuration is provided, try and find one from a previous load.\r\n // If there isn't one, bail and let the normal flow run\r\n if(angular.isString(requireEntry)) {\r\n var config = self.getModuleConfig(requireEntry);\r\n if(config === null) {\r\n moduleCache.push(requireEntry); // We don't know about this module, but something else might, so push it anyway.\r\n return;\r\n }\r\n requireEntry = config;\r\n }\r\n\r\n // Check if this dependency has been loaded previously\r\n if(self.moduleExists(requireEntry.name)) {\r\n // compare against the already loaded module to see if the new definition adds any new files\r\n diff = requireEntry.files.filter(function(n) {\r\n return self.getModuleConfig(requireEntry.name).files.indexOf(n) < 0;\r\n });\r\n\r\n // If the module was redefined, advise via the console\r\n if(diff.length !== 0) {\r\n self._$log.warn('Module \"', moduleName, '\" attempted to redefine configuration for dependency. \"', requireEntry.name, '\"\\n Additional Files Loaded:', diff);\r\n }\r\n\r\n // Push everything to the file loader, it will weed out the duplicates.\r\n if(angular.isDefined(self.filesLoader)) { // if a files loader is defined\r\n promisesList.push(self.filesLoader(requireEntry, localParams).then(function() {\r\n return self._loadDependencies(requireEntry)\r\n }));\r\n } else {\r\n return reject(new Error(`Error: New dependencies need to be loaded from external files (${requireEntry.files}), but no loader has been defined.`));\r\n }\r\n return;\r\n } else if(angular.isArray(requireEntry)) {\r\n requireEntry = {\r\n files: requireEntry\r\n };\r\n } else if(angular.isObject(requireEntry)) {\r\n if(requireEntry.hasOwnProperty('name') && requireEntry['name']) {\r\n // The dependency doesn't exist in the module cache and is a new configuration, so store and push it.\r\n self.setModuleConfig(requireEntry);\r\n moduleCache.push(requireEntry['name']);\r\n }\r\n }\r\n\r\n // Check if the dependency has any files that need to be loaded. If there are, push a new promise to the promise list.\r\n if(angular.isDefined(requireEntry.files) && requireEntry.files.length !== 0) {\r\n if(angular.isDefined(self.filesLoader)) { // if a files loader is defined\r\n promisesList.push(self.filesLoader(requireEntry, localParams).then(function() {\r\n return self._loadDependencies(requireEntry);\r\n }));\r\n } else {\r\n return reject(new Error(`Error: the module \"${requireEntry.name}\" is defined in external files (${requireEntry.files}), but no loader has been defined.`));\r\n }\r\n }\r\n });\r\n\r\n // Create a wrapper promise to watch the promise list and resolve it once everything is done.\r\n return $q.all(promisesList);\r\n },\r\n\r\n /**\r\n * Inject new modules into Angular\r\n * @param moduleName\r\n * @param localParams\r\n */\r\n inject: function(moduleName, localParams) {\r\n var self = this,\r\n deferred = $q.defer();\r\n if(angular.isDefined(moduleName) && moduleName !== null) {\r\n if(angular.isArray(moduleName)) {\r\n var promisesList = [];\r\n angular.forEach(moduleName, function(module) {\r\n promisesList.push(self.inject(module));\r\n });\r\n return $q.all(promisesList);\r\n } else {\r\n self._addToLoadList(self._getModuleName(moduleName), true);\r\n }\r\n }\r\n if(modulesToLoad.length > 0) {\r\n var res = modulesToLoad.slice(); // clean copy\r\n var loadNext = function loadNext(moduleName) {\r\n moduleCache.push(moduleName);\r\n self._loadDependencies(moduleName, localParams).then(function success() {\r\n try {\r\n justLoaded = [];\r\n _register(providers, moduleCache, localParams);\r\n } catch(e) {\r\n self._$log.error(e.message);\r\n deferred.reject(e);\r\n return;\r\n }\r\n\r\n if(modulesToLoad.length > 0) {\r\n loadNext(modulesToLoad.shift()); // load the next in list\r\n } else {\r\n deferred.resolve(res); // everything has been loaded, resolve\r\n }\r\n }, function error(err) {\r\n deferred.reject(err);\r\n });\r\n };\r\n\r\n // load the first in list\r\n loadNext(modulesToLoad.shift());\r\n } else {\r\n deferred.resolve();\r\n }\r\n return deferred.promise;\r\n },\r\n\r\n /**\r\n * Get the list of required modules/services/... for this module\r\n * @param module\r\n * @returns {Array}\r\n */\r\n getRequires: function getRequires(module) {\r\n var requires = [];\r\n angular.forEach(module.requires, function(requireModule) {\r\n if(regModules.indexOf(requireModule) === -1) {\r\n requires.push(requireModule);\r\n }\r\n });\r\n return requires;\r\n },\r\n\r\n /**\r\n * Invoke the new modules & component by their providers\r\n * @param providers\r\n * @param queue\r\n * @param moduleName\r\n * @param reconfig\r\n * @private\r\n */\r\n _invokeQueue: _invokeQueue,\r\n\r\n /**\r\n * Check if a module has been invoked and registers it if not\r\n * @param args\r\n * @param moduleName\r\n * @returns {boolean} is new\r\n */\r\n _registerInvokeList: _registerInvokeList,\r\n\r\n /**\r\n * Register a new module and loads it, executing the run/config blocks if needed\r\n * @param providers\r\n * @param registerModules\r\n * @param params\r\n * @private\r\n */\r\n _register: _register,\r\n\r\n /**\r\n * Add a module name to the list of modules that will be loaded in the next inject\r\n * @param name\r\n * @param force\r\n * @private\r\n */\r\n _addToLoadList: _addToLoadList\r\n };\r\n };\r\n\r\n // Let's get the list of loaded modules & components\r\n this._init(angular.element(window.document));\r\n });\r\n\r\n var bootstrapFct = angular.bootstrap;\r\n angular.bootstrap = function(element, modules, config) {\r\n // we use slice to make a clean copy\r\n angular.forEach(modules.slice(), function(module) {\r\n _addToLoadList(module, true);\r\n });\r\n return bootstrapFct(element, modules, config);\r\n };\r\n\r\n var _addToLoadList = function _addToLoadList(name, force) {\r\n if((recordDeclarations.length > 0 || force) && angular.isString(name) && modulesToLoad.indexOf(name) === -1) {\r\n modulesToLoad.push(name);\r\n }\r\n };\r\n\r\n var ngModuleFct = angular.module;\r\n angular.module = function(name, requires, configFn) {\r\n _addToLoadList(name);\r\n return ngModuleFct(name, requires, configFn);\r\n };\r\n\r\n})(angular, window);\r\n","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('oc.lazyLoad').directive('ocLazyLoad', function($ocLazyLoad, $compile, $animate, $parse) {\r\n return {\r\n restrict: 'A',\r\n terminal: true,\r\n priority: 1000,\r\n compile: function(element, attrs) {\r\n // we store the content and remove it before compilation\r\n var content = element[0].innerHTML;\r\n element.html('');\r\n\r\n return function($scope, $element, $attr) {\r\n var model = $parse($attr.ocLazyLoad);\r\n $scope.$watch(function() {\r\n return model($scope) || $attr.ocLazyLoad; // it can be a module name (string), an object, an array, or a scope reference to any of this\r\n }, function(moduleName) {\r\n if(angular.isDefined(moduleName)) {\r\n $ocLazyLoad.load(moduleName).then(function success() {\r\n $animate.enter($compile(content)($scope), $element);\r\n });\r\n }\r\n }, true);\r\n };\r\n }\r\n };\r\n });\r\n\r\n})(angular);\r\n","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('oc.lazyLoad').config(function($provide) {\r\n $provide.decorator('$ocLazyLoad', function ($delegate, $q, $window, $interval) {\r\n var uaCssChecked = false,\r\n useCssLoadPatch = false,\r\n anchor = $window.document.getElementsByTagName('head')[0] || $window.document.getElementsByTagName('body')[0];\r\n\r\n /**\r\n * Load a js/css file\r\n * @param type\r\n * @param path\r\n * @param params\r\n * @returns promise\r\n */\r\n $delegate.buildElement = function buildElement(type, path, params) {\r\n var deferred = $q.defer(),\r\n el,\r\n loaded,\r\n filesCache = $delegate._getFilesCache(),\r\n cacheBuster = function cacheBuster(url) {\r\n var dc = new Date().getTime();\r\n if(url.indexOf('?') >= 0) {\r\n if(url.substring(0, url.length - 1) === '&') {\r\n return url + '_dc=' + dc;\r\n }\r\n return url + '&_dc=' + dc;\r\n } else {\r\n return url + '?_dc=' + dc;\r\n }\r\n };\r\n\r\n // Store the promise early so the file load can be detected by other parallel lazy loads\r\n // (ie: multiple routes on one page) a 'true' value isn't sufficient\r\n // as it causes false positive load results.\r\n if(angular.isUndefined(filesCache.get(path))) {\r\n filesCache.put(path, deferred.promise);\r\n }\r\n\r\n // Switch in case more content types are added later\r\n switch(type) {\r\n case 'css':\r\n el = $window.document.createElement('link');\r\n el.type = 'text/css';\r\n el.rel = 'stylesheet';\r\n el.href = params.cache === false ? cacheBuster(path) : path;\r\n break;\r\n case 'js':\r\n el = $window.document.createElement('script');\r\n el.src = params.cache === false ? cacheBuster(path) : path;\r\n break;\r\n default:\r\n deferred.reject(new Error('Requested type \"' + type + '\" is not known. Could not inject \"' + path + '\"'));\r\n break;\r\n }\r\n el.onload = el['onreadystatechange'] = function(e) {\r\n if((el['readyState'] && !(/^c|loade/.test(el['readyState']))) || loaded) return;\r\n el.onload = el['onreadystatechange'] = null;\r\n loaded = 1;\r\n $delegate._broadcast('ocLazyLoad.fileLoaded', path);\r\n deferred.resolve();\r\n };\r\n el.onerror = function() {\r\n deferred.reject(new Error('Unable to load ' + path));\r\n };\r\n el.async = params.serie ? 0 : 1;\r\n\r\n var insertBeforeElem = anchor.lastChild;\r\n if(params.insertBefore) {\r\n var element = angular.element(params.insertBefore);\r\n if(element && element.length > 0) {\r\n insertBeforeElem = element[0];\r\n }\r\n }\r\n anchor.insertBefore(el, insertBeforeElem);\r\n\r\n /*\r\n The event load or readystatechange doesn't fire in:\r\n - iOS < 6 (default mobile browser)\r\n - Android < 4.4 (default mobile browser)\r\n - Safari < 6 (desktop browser)\r\n */\r\n if(type == 'css') {\r\n if(!uaCssChecked) {\r\n var ua = $window.navigator.userAgent.toLowerCase();\r\n\r\n // iOS < 6\r\n if(/iP(hone|od|ad)/.test($window.navigator.platform)) {\r\n var v = ($window.navigator.appVersion).match(/OS (\\d+)_(\\d+)_?(\\d+)?/);\r\n var iOSVersion = parseFloat([parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)].join('.'));\r\n useCssLoadPatch = iOSVersion < 6;\r\n } else if(ua.indexOf(\"android\") > -1) { // Android < 4.4\r\n var androidVersion = parseFloat(ua.slice(ua.indexOf(\"android\") + 8));\r\n useCssLoadPatch = androidVersion < 4.4;\r\n } else if(ua.indexOf('safari') > -1 && ua.indexOf('chrome') == -1 && ua.indexOf('phantomjs') == -1) {\r\n var safariVersion = parseFloat(ua.match(/version\\/([\\.\\d]+)/i)[1]);\r\n useCssLoadPatch = safariVersion < 6;\r\n }\r\n }\r\n\r\n if(useCssLoadPatch) {\r\n var tries = 1000; // * 20 = 20000 miliseconds\r\n var interval = $interval(function() {\r\n try {\r\n el.sheet.cssRules;\r\n $interval.cancel(interval);\r\n el.onload();\r\n } catch(e) {\r\n if(--tries <= 0) {\r\n el.onerror();\r\n }\r\n }\r\n }, 20);\r\n }\r\n }\r\n\r\n return deferred.promise;\r\n };\r\n\r\n return $delegate;\r\n })\r\n });\r\n\r\n})(angular);\r\n","(function(angular) {\n 'use strict';\n\n angular.module('oc.lazyLoad').config(function($provide) {\n $provide.decorator('$ocLazyLoad', function($delegate, $q) {\n /**\n * The function that loads new files\n * @param config\n * @param params\n * @returns {*}\n */\n $delegate.filesLoader = function filesLoader(config, originalParams = {}) {\n var cssFiles = [],\n templatesFiles = [],\n jsFiles = [],\n promises = [],\n cachePromise = null,\n filesCache = $delegate._getFilesCache();\n\n $delegate.toggleWatch(true); // start watching angular.module calls\n\n // we need a real copy because we might edit some parts of it\n var params = angular.copy(angular.extend({}, originalParams, config));\n\n var pushFile = function(path) {\n var file_type = null, m;\n if(angular.isObject(path)) {\n file_type = path.type;\n path = path.path;\n }\n cachePromise = filesCache.get(path);\n if(angular.isUndefined(cachePromise) || params.cache === false) {\n\n // always check for requirejs syntax just in case\n if((m = /^(css|less|html|htm|js)?(?=!)/.exec(path)) !== null) { // Detect file type using preceding type declaration (ala requireJS)\n file_type = m[1];\n path = path.substr(m[1].length + 1, path.length); // Strip the type from the path\n }\n\n if(!file_type) {\n if((m = /[.](css|less|html|htm|js)?((\\?|#).*)?$/.exec(path)) !== null) { // Detect file type via file extension\n file_type = m[1];\n } else if(!$delegate.jsLoader.hasOwnProperty('ocLazyLoadLoader') && $delegate.jsLoader.hasOwnProperty('load')) { // requirejs\n file_type = 'js';\n } else {\n $delegate._$log.error('File type could not be determined. ' + path);\n return;\n }\n }\n\n if((file_type === 'css' || file_type === 'less') && cssFiles.indexOf(path) === -1) {\n cssFiles.push(path);\n } else if((file_type === 'html' || file_type === 'htm') && templatesFiles.indexOf(path) === -1) {\n templatesFiles.push(path);\n } else if((file_type === 'js') || jsFiles.indexOf(path) === -1) {\n jsFiles.push(path);\n } else {\n $delegate._$log.error('File type is not valid. ' + path);\n }\n\n } else if(cachePromise) {\n promises.push(cachePromise);\n }\n };\n\n if(params.serie) {\n pushFile(params.files.shift());\n } else {\n angular.forEach(params.files, path => {\n pushFile(path);\n });\n }\n\n if(cssFiles.length > 0) {\n var cssDeferred = $q.defer();\n $delegate.cssLoader(cssFiles, function(err) {\n if(angular.isDefined(err) && $delegate.cssLoader.hasOwnProperty('ocLazyLoadLoader')) {\n $delegate._$log.error(err);\n cssDeferred.reject(err);\n } else {\n cssDeferred.resolve();\n }\n }, params);\n promises.push(cssDeferred.promise);\n }\n\n if(templatesFiles.length > 0) {\n var templatesDeferred = $q.defer();\n $delegate.templatesLoader(templatesFiles, function(err) {\n if(angular.isDefined(err) && $delegate.templatesLoader.hasOwnProperty('ocLazyLoadLoader')) {\n $delegate._$log.error(err);\n templatesDeferred.reject(err);\n } else {\n templatesDeferred.resolve();\n }\n }, params);\n promises.push(templatesDeferred.promise);\n }\n\n if(jsFiles.length > 0) {\n var jsDeferred = $q.defer();\n $delegate.jsLoader(jsFiles, function(err) {\n if(angular.isDefined(err) && $delegate.jsLoader.hasOwnProperty('ocLazyLoadLoader')) {\n $delegate._$log.error(err);\n jsDeferred.reject(err);\n } else {\n jsDeferred.resolve();\n }\n }, params);\n promises.push(jsDeferred.promise);\n }\n\n if(params.serie && params.files.length > 0) {\n return $q.all(promises).then(function success() {\n return $delegate.filesLoader(config, params);\n });\n } else {\n return $q.all(promises).finally(function(res) {\n $delegate.toggleWatch(false); // stop watching angular.module calls\n return res;\n });\n }\n };\n\n /**\n * Load a module or a list of modules into Angular\n * @param module Mixed the name of a predefined module config object, or a module config object, or an array of either\n * @param params Object optional parameters\n * @returns promise\n */\n $delegate.load = function(module, params = {}) {\n var self = this,\n config = null,\n deferredList = [],\n deferred = $q.defer(),\n errText;\n\n // If module is an array, break it down\n if(angular.isArray(module)) {\n // Resubmit each entry as a single module\n angular.forEach(module, function(m) {\n deferredList.push(self.load(m, params));\n });\n\n // Resolve the promise once everything has loaded\n $q.all(deferredList).then(function success(res) {\n deferred.resolve(res);\n }, function error(err) {\n deferred.reject(err);\n });\n\n return deferred.promise;\n }\n\n // Get or Set a configuration depending on what was passed in\n if(angular.isString(module)) {\n config = self.getModuleConfig(module);\n if(!config) {\n config = {\n files: [module]\n };\n }\n } else if(angular.isObject(module)) {\n // case {type: 'js', path: lazyLoadUrl + 'testModule.fakejs'}\n if(angular.isDefined(module.path) && angular.isDefined(module.type)) {\n config = {\n files: [module]\n };\n } else {\n config = self.setModuleConfig(module);\n }\n }\n\n if(config === null) {\n var moduleName = self._getModuleName(module);\n errText = 'Module \"' + (moduleName || 'unknown') + '\" is not configured, cannot load.';\n $delegate._$log.error(errText);\n deferred.reject(new Error(errText));\n return deferred.promise;\n } else {\n // deprecated\n if(angular.isDefined(config.template)) {\n if(angular.isUndefined(config.files)) {\n config.files = [];\n }\n if(angular.isString(config.template)) {\n config.files.push(config.template);\n } else if(angular.isArray(config.template)) {\n config.files.concat(config.template);\n }\n }\n }\n\n var localParams = {};\n angular.extend(localParams, params, config);\n\n // if someone used an external loader and called the load function with just the module name\n if(angular.isUndefined(config.files) && angular.isDefined(config.name) && $delegate.moduleExists(config.name)) {\n return $delegate.inject(config.name, localParams);\n }\n\n $delegate.filesLoader(config, localParams).then(function success() {\n $delegate.inject(null, localParams).then(function(res) {\n deferred.resolve(res);\n }, function(err) {\n deferred.reject(err);\n });\n }, function error(err) {\n deferred.reject(err);\n });\n\n return deferred.promise;\n };\n\n // return the patched service\n return $delegate;\n });\n });\n\n})(angular);\n","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('oc.lazyLoad').config(function($provide) {\r\n $provide.decorator('$ocLazyLoad', function ($delegate, $q) {\r\n /**\r\n * cssLoader function\r\n * @type Function\r\n * @param paths array list of css files to load\r\n * @param callback to call when everything is loaded. We use a callback and not a promise\r\n * @param params object config parameters\r\n * because the user can overwrite cssLoader and it will probably not use promises :(\r\n */\r\n $delegate.cssLoader = function(paths, callback, params) {\r\n var promises = [];\r\n angular.forEach(paths, function loading(path) {\r\n promises.push($delegate.buildElement('css', path, params));\r\n });\r\n $q.all(promises).then(function success() {\r\n callback();\r\n }, err => {\r\n callback(err);\r\n });\r\n };\r\n $delegate.cssLoader.ocLazyLoadLoader = true;\r\n\r\n return $delegate;\r\n })\r\n });\r\n\r\n})(angular);\r\n","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('oc.lazyLoad').config(function($provide) {\r\n $provide.decorator('$ocLazyLoad', function ($delegate, $q) {\r\n /**\r\n * jsLoader function\r\n * @type Function\r\n * @param paths array list of js files to load\r\n * @param callback to call when everything is loaded. We use a callback and not a promise\r\n * @param params object config parameters\r\n * because the user can overwrite jsLoader and it will probably not use promises :(\r\n */\r\n $delegate.jsLoader = function(paths, callback, params) {\r\n var promises = [];\r\n angular.forEach(paths, function loading(path) {\r\n promises.push($delegate.buildElement('js', path, params));\r\n });\r\n $q.all(promises).then(function success() {\r\n callback();\r\n }, function error(err) {\r\n callback(err);\r\n });\r\n };\r\n $delegate.jsLoader.ocLazyLoadLoader = true;\r\n\r\n return $delegate;\r\n })\r\n });\r\n\r\n})(angular);\r\n","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('oc.lazyLoad').config(function($provide) {\r\n $provide.decorator('$ocLazyLoad', function ($delegate, $templateCache, $q, $http) {\r\n /**\r\n * templatesLoader function\r\n * @type Function\r\n * @param paths array list of css files to load\r\n * @param callback to call when everything is loaded. We use a callback and not a promise\r\n * @param params object config parameters for $http\r\n * because the user can overwrite templatesLoader and it will probably not use promises :(\r\n */\r\n $delegate.templatesLoader = function(paths, callback, params) {\r\n var promises = [],\r\n filesCache = $delegate._getFilesCache();\r\n\r\n angular.forEach(paths, function(url) {\r\n var deferred = $q.defer();\r\n promises.push(deferred.promise);\r\n $http.get(url, params).success(function(data) {\r\n if(angular.isString(data) && data.length > 0) {\r\n angular.forEach(angular.element(data), function(node) {\r\n if(node.nodeName === 'SCRIPT' && node.type === 'text/ng-template') {\r\n $templateCache.put(node.id, node.innerHTML);\r\n }\r\n });\r\n }\r\n if(angular.isUndefined(filesCache.get(url))) {\r\n filesCache.put(url, true);\r\n }\r\n deferred.resolve();\r\n }).error(function(err) {\r\n deferred.reject(new Error('Unable to load template file \"' + url + '\": ' + err));\r\n });\r\n });\r\n return $q.all(promises).then(function success() {\r\n callback();\r\n }, function error(err) {\r\n callback(err);\r\n });\r\n };\r\n $delegate.templatesLoader.ocLazyLoadLoader = true;\r\n\r\n return $delegate;\r\n })\r\n });\r\n\r\n})(angular);\r\n","// Array.indexOf polyfill for IE8\r\nif(!Array.prototype.indexOf) {\r\n Array.prototype.indexOf = function(searchElement, fromIndex) {\r\n var k;\r\n\r\n // 1. Let O be the result of calling ToObject passing\r\n // the this value as the argument.\r\n if(this == null) {\r\n throw new TypeError('\"this\" is null or not defined');\r\n }\r\n\r\n var O = Object(this);\r\n\r\n // 2. Let lenValue be the result of calling the Get\r\n // internal method of O with the argument \"length\".\r\n // 3. Let len be ToUint32(lenValue).\r\n var len = O.length >>> 0;\r\n\r\n // 4. If len is 0, return -1.\r\n if(len === 0) {\r\n return -1;\r\n }\r\n\r\n // 5. If argument fromIndex was passed let n be\r\n // ToInteger(fromIndex); else let n be 0.\r\n var n = +fromIndex || 0;\r\n\r\n if(Math.abs(n) === Infinity) {\r\n n = 0;\r\n }\r\n\r\n // 6. If n >= len, return -1.\r\n if(n >= len) {\r\n return -1;\r\n }\r\n\r\n // 7. If n >= 0, then Let k be n.\r\n // 8. Else, n<0, Let k be len - abs(n).\r\n // If k is less than 0, then let k be 0.\r\n k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);\r\n\r\n // 9. Repeat, while k < len\r\n while(k < len) {\r\n // a. Let Pk be ToString(k).\r\n // This is implicit for LHS operands of the in operator\r\n // b. Let kPresent be the result of calling the\r\n // HasProperty internal method of O with argument Pk.\r\n // This step can be combined with c\r\n // c. If kPresent is true, then\r\n // i. Let elementK be the result of calling the Get\r\n // internal method of O with the argument ToString(k).\r\n // ii. Let same be the result of applying the\r\n // Strict Equality Comparison Algorithm to\r\n // searchElement and elementK.\r\n // iii. If same is true, return k.\r\n if(k in O && O[k] === searchElement) {\r\n return k;\r\n }\r\n k++;\r\n }\r\n return -1;\r\n };\r\n}\r\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["ocLazyLoad.core.js","ocLazyLoad.directive.js","ocLazyLoad.loaders.common.js","ocLazyLoad.loaders.core.js","ocLazyLoad.loaders.cssLoader.js","ocLazyLoad.loaders.jsLoader.js","ocLazyLoad.loaders.templatesLoader.js","ocLazyLoad.polyfill.ie8.js"],"names":[],"mappings":"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","file":"ocLazyLoad.js","sourcesContent":["(function(angular, window) {\n 'use strict';\n\n var regModules = ['ng', 'oc.lazyLoad'],\n regInvokes = {},\n regConfigs = [],\n modulesToLoad = [],\n recordDeclarations = [],\n broadcast = angular.noop,\n runBlocks = {},\n justLoaded = [];\n\n var ocLazyLoad = angular.module('oc.lazyLoad', ['ng']);\n\n ocLazyLoad.provider('$ocLazyLoad', function($controllerProvider, $provide, $compileProvider, $filterProvider, $injector, $animateProvider) {\n var modules = {},\n providers = {\n $controllerProvider: $controllerProvider,\n $compileProvider: $compileProvider,\n $filterProvider: $filterProvider,\n $provide: $provide, // other things\n $injector: $injector,\n $animateProvider: $animateProvider\n },\n debug = false,\n events = false,\n moduleCache = [];\n\n moduleCache.push = function(value) {\n if(this.indexOf(value) === -1) {\n Array.prototype.push.apply(this, arguments);\n }\n };\n\n this.config = function(config) {\n // If we want to define modules configs\n if(angular.isDefined(config.modules)) {\n if(angular.isArray(config.modules)) {\n angular.forEach(config.modules, function(moduleConfig) {\n modules[moduleConfig.name] = moduleConfig;\n });\n } else {\n modules[config.modules.name] = config.modules;\n }\n }\n\n if(angular.isDefined(config.debug)) {\n debug = config.debug;\n }\n\n if(angular.isDefined(config.events)) {\n events = config.events;\n }\n };\n\n /**\n * Get the list of existing registered modules\n * @param element\n */\n this._init = function _init(element) {\n // this is probably useless now because we override angular.bootstrap\n if(modulesToLoad.length === 0) {\n var elements = [element],\n names = ['ng:app', 'ng-app', 'x-ng-app', 'data-ng-app'],\n NG_APP_CLASS_REGEXP = /\\sng[:\\-]app(:\\s*([\\w\\d_]+);?)?\\s/,\n append = function append(elm) {\n return (elm && elements.push(elm));\n };\n\n angular.forEach(names, function(name) {\n names[name] = true;\n append(document.getElementById(name));\n name = name.replace(':', '\\\\:');\n if(element[0].querySelectorAll) {\n angular.forEach(element[0].querySelectorAll('.' + name), append);\n angular.forEach(element[0].querySelectorAll('.' + name + '\\\\:'), append);\n angular.forEach(element[0].querySelectorAll('[' + name + ']'), append);\n }\n });\n\n angular.forEach(elements, function(elm) {\n if(modulesToLoad.length === 0) {\n var className = ' ' + element.className + ' ';\n var match = NG_APP_CLASS_REGEXP.exec(className);\n if(match) {\n modulesToLoad.push((match[2] || '').replace(/\\s+/g, ','));\n } else {\n angular.forEach(elm.attributes, function(attr) {\n if(modulesToLoad.length === 0 && names[attr.name]) {\n modulesToLoad.push(attr.value);\n }\n });\n }\n }\n });\n }\n\n if(modulesToLoad.length === 0 && !((window.jasmine || window.mocha) && angular.isDefined(angular.mock))) {\n console.error('No module found during bootstrap, unable to init ocLazyLoad. You should always use the ng-app directive or angular.boostrap when you use ocLazyLoad.');\n }\n\n var addReg = function addReg(moduleName) {\n if(regModules.indexOf(moduleName) === -1) {\n // register existing modules\n regModules.push(moduleName);\n var mainModule = angular.module(moduleName);\n\n // register existing components (directives, services, ...)\n _invokeQueue(null, mainModule._invokeQueue, moduleName);\n _invokeQueue(null, mainModule._configBlocks, moduleName); // angular 1.3+\n\n angular.forEach(mainModule.requires, addReg);\n }\n };\n\n angular.forEach(modulesToLoad, function(moduleName) {\n addReg(moduleName);\n });\n\n modulesToLoad = []; // reset for next bootstrap\n recordDeclarations.pop(); // wait for the next lazy load\n };\n\n /**\n * Like JSON.stringify but that doesn't throw on circular references\n * @param obj\n */\n var stringify = function stringify(obj) {\n var cache = [];\n return JSON.stringify(obj, function(key, value) {\n if(angular.isObject(value) && value !== null) {\n if(cache.indexOf(value) !== -1) {\n // Circular reference found, discard key\n return;\n }\n // Store value in our collection\n cache.push(value);\n }\n return value;\n });\n };\n\n var hashCode = function hashCode(str) {\n var hash = 0, i, chr, len;\n if(str.length == 0) {\n return hash;\n }\n for(i = 0, len = str.length; i < len; i++) {\n chr = str.charCodeAt(i);\n hash = ((hash << 5) - hash) + chr;\n hash |= 0; // Convert to 32bit integer\n }\n return hash;\n };\n\n function _register(providers, registerModules, params) {\n if(registerModules) {\n var k, moduleName, moduleFn, tempRunBlocks = [];\n for(k = registerModules.length - 1; k >= 0; k--) {\n moduleName = registerModules[k];\n if(!angular.isString(moduleName)) {\n moduleName = getModuleName(moduleName);\n }\n if(!moduleName || justLoaded.indexOf(moduleName) !== -1) {\n continue;\n }\n var newModule = regModules.indexOf(moduleName) === -1;\n moduleFn = ngModuleFct(moduleName);\n if(newModule) { // new module\n regModules.push(moduleName);\n _register(providers, moduleFn.requires, params);\n }\n if(moduleFn._runBlocks.length > 0) {\n // new run blocks detected! Replace the old ones (if existing)\n runBlocks[moduleName] = [];\n while(moduleFn._runBlocks.length > 0) {\n runBlocks[moduleName].push(moduleFn._runBlocks.shift());\n }\n }\n if(angular.isDefined(runBlocks[moduleName]) && (newModule || params.rerun)) {\n tempRunBlocks = tempRunBlocks.concat(runBlocks[moduleName]);\n }\n _invokeQueue(providers, moduleFn._invokeQueue, moduleName, params.reconfig);\n _invokeQueue(providers, moduleFn._configBlocks, moduleName, params.reconfig); // angular 1.3+\n broadcast(newModule ? 'ocLazyLoad.moduleLoaded' : 'ocLazyLoad.moduleReloaded', moduleName);\n registerModules.pop();\n justLoaded.push(moduleName);\n }\n // execute the run blocks at the end\n var instanceInjector = providers.getInstanceInjector();\n angular.forEach(tempRunBlocks, (fn) => {\n instanceInjector.invoke(fn);\n });\n }\n }\n\n function _registerInvokeList(args, moduleName) {\n var invokeList = args[2][0],\n type = args[1],\n newInvoke = false;\n if(angular.isUndefined(regInvokes[moduleName])) {\n regInvokes[moduleName] = {};\n }\n if(angular.isUndefined(regInvokes[moduleName][type])) {\n regInvokes[moduleName][type] = {};\n }\n var onInvoke = function(invokeName, signature) {\n if(angular.isUndefined(regInvokes[moduleName][type][invokeName])) {\n regInvokes[moduleName][type][invokeName] = [];\n }\n if(regInvokes[moduleName][type][invokeName].indexOf(signature) === -1) {\n newInvoke = true;\n regInvokes[moduleName][type][invokeName].push(signature);\n broadcast('ocLazyLoad.componentLoaded', [moduleName, type, invokeName]);\n }\n };\n\n function signature(data) {\n if(angular.isArray(data)) { // arrays are objects, we need to test for it first\n return hashCode(data.toString());\n } else if(angular.isObject(data)) { // constants & values for example\n return hashCode(stringify(data));\n } else {\n if(angular.isDefined(data) && data !== null) {\n return hashCode(data.toString());\n } else { // null & undefined constants\n return data;\n }\n }\n }\n\n if(angular.isString(invokeList)) {\n onInvoke(invokeList, signature(args[2][1]));\n } else if(angular.isObject(invokeList)) {\n angular.forEach(invokeList, function(invoke, key) {\n if(angular.isString(invoke)) { // decorators for example\n onInvoke(invoke, signature(invokeList[1]));\n } else { // components registered as object lists {\"componentName\": function() {}}\n onInvoke(key, signature(invoke));\n }\n });\n } else {\n return false;\n }\n return newInvoke;\n }\n\n function _invokeQueue(providers, queue, moduleName, reconfig) {\n if(!queue) {\n return;\n }\n\n var i, len, args, provider;\n for(i = 0, len = queue.length; i < len; i++) {\n args = queue[i];\n if(angular.isArray(args)) {\n if(providers !== null) {\n if(providers.hasOwnProperty(args[0])) {\n provider = providers[args[0]];\n } else {\n throw new Error('unsupported provider ' + args[0]);\n }\n }\n var isNew = _registerInvokeList(args, moduleName);\n if(args[1] !== 'invoke') {\n if(isNew && angular.isDefined(provider)) {\n provider[args[1]].apply(provider, args[2]);\n }\n } else { // config block\n var callInvoke = function(fct) {\n var invoked = regConfigs.indexOf(moduleName + '-' + fct);\n if(invoked === -1 || reconfig) {\n if(invoked === -1) {\n regConfigs.push(moduleName + '-' + fct);\n }\n if(angular.isDefined(provider)) {\n provider[args[1]].apply(provider, args[2]);\n }\n }\n };\n if(angular.isFunction(args[2][0])) {\n callInvoke(args[2][0]);\n } else if(angular.isArray(args[2][0])) {\n for(var j = 0, jlen = args[2][0].length; j < jlen; j++) {\n if(angular.isFunction(args[2][0][j])) {\n callInvoke(args[2][0][j]);\n }\n }\n }\n }\n }\n }\n }\n\n function getModuleName(module) {\n var moduleName = null;\n if(angular.isString(module)) {\n moduleName = module;\n } else if(angular.isObject(module) && module.hasOwnProperty('name') && angular.isString(module.name)) {\n moduleName = module.name;\n }\n return moduleName;\n }\n\n function moduleExists(moduleName) {\n if(!angular.isString(moduleName)) {\n return false;\n }\n try {\n return ngModuleFct(moduleName);\n } catch(e) {\n if(/No module/.test(e) || (e.message.indexOf('$injector:nomod') > -1)) {\n return false;\n }\n }\n }\n\n this.$get = function($log, $rootElement, $rootScope, $cacheFactory, $q) {\n var instanceInjector,\n filesCache = $cacheFactory('ocLazyLoad');\n\n if(!debug) {\n $log = {};\n $log['error'] = angular.noop;\n $log['warn'] = angular.noop;\n $log['info'] = angular.noop;\n }\n\n // Make this lazy because when $get() is called the instance injector hasn't been assigned to the rootElement yet\n providers.getInstanceInjector = function() {\n return (instanceInjector) ? instanceInjector : (instanceInjector = ($rootElement.data('$injector') || angular.injector()));\n };\n\n broadcast = function broadcast(eventName, params) {\n if(events) {\n $rootScope.$broadcast(eventName, params);\n }\n if(debug) {\n $log.info(eventName, params);\n }\n };\n\n function reject(e) {\n var deferred = $q.defer();\n $log.error(e.message);\n deferred.reject(e);\n return deferred.promise;\n }\n\n return {\n _broadcast: broadcast,\n\n _$log: $log,\n\n /**\n * Returns the files cache used by the loaders to store the files currently loading\n * @returns {*}\n */\n _getFilesCache: function getFilesCache() {\n return filesCache;\n },\n\n /**\n * Let the service know that it should monitor angular.module because files are loading\n * @param watch boolean\n */\n toggleWatch: function(watch) {\n if(watch) {\n recordDeclarations.push(true);\n } else {\n recordDeclarations.pop();\n }\n },\n\n /**\n * Let you get a module config object\n * @param moduleName String the name of the module\n * @returns {*}\n */\n getModuleConfig: function(moduleName) {\n if(!angular.isString(moduleName)) {\n throw new Error('You need to give the name of the module to get');\n }\n if(!modules[moduleName]) {\n return null;\n }\n return angular.copy(modules[moduleName]);\n },\n\n /**\n * Let you define a module config object\n * @param moduleConfig Object the module config object\n * @returns {*}\n */\n setModuleConfig: function(moduleConfig) {\n if(!angular.isObject(moduleConfig)) {\n throw new Error('You need to give the module config object to set');\n }\n modules[moduleConfig.name] = moduleConfig;\n return moduleConfig;\n },\n\n /**\n * Returns the list of loaded modules\n * @returns {string[]}\n */\n getModules: () => regModules,\n\n /**\n * Let you check if a module has been loaded into Angular or not\n * @param modulesNames String/Object a module name, or a list of module names\n * @returns {boolean}\n */\n isLoaded: function(modulesNames) {\n var moduleLoaded = function(module) {\n var isLoaded = regModules.indexOf(module) > -1;\n if(!isLoaded) {\n isLoaded = !!moduleExists(module);\n }\n return isLoaded;\n };\n if(angular.isString(modulesNames)) {\n modulesNames = [modulesNames];\n }\n if(angular.isArray(modulesNames)) {\n var i, len;\n for(i = 0, len = modulesNames.length; i < len; i++) {\n if(!moduleLoaded(modulesNames[i])) {\n return false;\n }\n }\n return true;\n } else {\n throw new Error('You need to define the module(s) name(s)');\n }\n },\n\n /**\n * Given a module, return its name\n * @param module\n * @returns {String}\n */\n _getModuleName: getModuleName,\n\n /**\n * Returns a module if it exists\n * @param moduleName\n * @returns {module}\n */\n _getModule: function getModule(moduleName) {\n try {\n return ngModuleFct(moduleName);\n } catch(e) {\n // this error message really suxx\n if(/No module/.test(e) || (e.message.indexOf('$injector:nomod') > -1)) {\n e.message = 'The module \"' + stringify(moduleName) + '\" that you are trying to load does not exist. ' + e.message\n }\n throw e;\n }\n },\n\n /**\n * Check if a module exists and returns it if it does\n * @param moduleName\n * @returns {boolean}\n */\n moduleExists: moduleExists,\n\n /**\n * Load the dependencies, and might try to load new files depending on the config\n * @param moduleName (String or Array of Strings)\n * @param localParams\n * @returns {*}\n * @private\n */\n _loadDependencies: function _loadDependencies(moduleName, localParams) {\n var loadedModule,\n requires,\n diff,\n promisesList = [],\n self = this;\n\n moduleName = self._getModuleName(moduleName);\n\n if(moduleName === null) {\n return $q.when();\n } else {\n try {\n loadedModule = self._getModule(moduleName);\n } catch(e) {\n return reject(e);\n }\n // get unloaded requires\n requires = self.getRequires(loadedModule);\n }\n\n angular.forEach(requires, function(requireEntry) {\n // If no configuration is provided, try and find one from a previous load.\n // If there isn't one, bail and let the normal flow run\n if(angular.isString(requireEntry)) {\n var config = self.getModuleConfig(requireEntry);\n if(config === null) {\n moduleCache.push(requireEntry); // We don't know about this module, but something else might, so push it anyway.\n return;\n }\n requireEntry = config;\n }\n\n // Check if this dependency has been loaded previously\n if(self.moduleExists(requireEntry.name)) {\n // compare against the already loaded module to see if the new definition adds any new files\n diff = requireEntry.files.filter(function(n) {\n return self.getModuleConfig(requireEntry.name).files.indexOf(n) < 0;\n });\n\n // If the module was redefined, advise via the console\n if(diff.length !== 0) {\n self._$log.warn('Module \"', moduleName, '\" attempted to redefine configuration for dependency. \"', requireEntry.name, '\"\\n Additional Files Loaded:', diff);\n }\n\n // Push everything to the file loader, it will weed out the duplicates.\n if(angular.isDefined(self.filesLoader)) { // if a files loader is defined\n promisesList.push(self.filesLoader(requireEntry, localParams).then(function() {\n return self._loadDependencies(requireEntry)\n }));\n } else {\n return reject(new Error(`Error: New dependencies need to be loaded from external files (${requireEntry.files}), but no loader has been defined.`));\n }\n return;\n } else if(angular.isArray(requireEntry)) {\n requireEntry = {\n files: requireEntry\n };\n } else if(angular.isObject(requireEntry)) {\n if(requireEntry.hasOwnProperty('name') && requireEntry['name']) {\n // The dependency doesn't exist in the module cache and is a new configuration, so store and push it.\n self.setModuleConfig(requireEntry);\n moduleCache.push(requireEntry['name']);\n }\n }\n\n // Check if the dependency has any files that need to be loaded. If there are, push a new promise to the promise list.\n if(angular.isDefined(requireEntry.files) && requireEntry.files.length !== 0) {\n if(angular.isDefined(self.filesLoader)) { // if a files loader is defined\n promisesList.push(self.filesLoader(requireEntry, localParams).then(function() {\n return self._loadDependencies(requireEntry);\n }));\n } else {\n return reject(new Error(`Error: the module \"${requireEntry.name}\" is defined in external files (${requireEntry.files}), but no loader has been defined.`));\n }\n }\n });\n\n // Create a wrapper promise to watch the promise list and resolve it once everything is done.\n return $q.all(promisesList);\n },\n\n /**\n * Inject new modules into Angular\n * @param moduleName\n * @param localParams\n */\n inject: function(moduleName, localParams) {\n var self = this,\n deferred = $q.defer();\n if(angular.isDefined(moduleName) && moduleName !== null) {\n if(angular.isArray(moduleName)) {\n var promisesList = [];\n angular.forEach(moduleName, function(module) {\n promisesList.push(self.inject(module));\n });\n return $q.all(promisesList);\n } else {\n self._addToLoadList(self._getModuleName(moduleName), true);\n }\n }\n if(modulesToLoad.length > 0) {\n var res = modulesToLoad.slice(); // clean copy\n var loadNext = function loadNext(moduleName) {\n moduleCache.push(moduleName);\n self._loadDependencies(moduleName, localParams).then(function success() {\n try {\n justLoaded = [];\n _register(providers, moduleCache, localParams);\n } catch(e) {\n self._$log.error(e.message);\n deferred.reject(e);\n return;\n }\n\n if(modulesToLoad.length > 0) {\n loadNext(modulesToLoad.shift()); // load the next in list\n } else {\n deferred.resolve(res); // everything has been loaded, resolve\n }\n }, function error(err) {\n deferred.reject(err);\n });\n };\n\n // load the first in list\n loadNext(modulesToLoad.shift());\n } else {\n deferred.resolve();\n }\n return deferred.promise;\n },\n\n /**\n * Get the list of required modules/services/... for this module\n * @param module\n * @returns {Array}\n */\n getRequires: function getRequires(module) {\n var requires = [];\n angular.forEach(module.requires, function(requireModule) {\n if(regModules.indexOf(requireModule) === -1) {\n requires.push(requireModule);\n }\n });\n return requires;\n },\n\n /**\n * Invoke the new modules & component by their providers\n * @param providers\n * @param queue\n * @param moduleName\n * @param reconfig\n * @private\n */\n _invokeQueue: _invokeQueue,\n\n /**\n * Check if a module has been invoked and registers it if not\n * @param args\n * @param moduleName\n * @returns {boolean} is new\n */\n _registerInvokeList: _registerInvokeList,\n\n /**\n * Register a new module and loads it, executing the run/config blocks if needed\n * @param providers\n * @param registerModules\n * @param params\n * @private\n */\n _register: _register,\n\n /**\n * Add a module name to the list of modules that will be loaded in the next inject\n * @param name\n * @param force\n * @private\n */\n _addToLoadList: _addToLoadList\n };\n };\n\n // Let's get the list of loaded modules & components\n this._init(angular.element(window.document));\n });\n\n var bootstrapFct = angular.bootstrap;\n angular.bootstrap = function(element, modules, config) {\n // we use slice to make a clean copy\n angular.forEach(modules.slice(), function(module) {\n _addToLoadList(module, true);\n });\n return bootstrapFct(element, modules, config);\n };\n\n var _addToLoadList = function _addToLoadList(name, force) {\n if((recordDeclarations.length > 0 || force) && angular.isString(name) && modulesToLoad.indexOf(name) === -1) {\n modulesToLoad.push(name);\n }\n };\n\n var ngModuleFct = angular.module;\n angular.module = function(name, requires, configFn) {\n _addToLoadList(name);\n return ngModuleFct(name, requires, configFn);\n };\n\n})(angular, window);\n","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('oc.lazyLoad').directive('ocLazyLoad', function($ocLazyLoad, $compile, $animate, $parse) {\r\n return {\r\n restrict: 'A',\r\n terminal: true,\r\n priority: 1000,\r\n compile: function(element, attrs) {\r\n // we store the content and remove it before compilation\r\n var content = element[0].innerHTML;\r\n element.html('');\r\n\r\n return function($scope, $element, $attr) {\r\n var model = $parse($attr.ocLazyLoad);\r\n $scope.$watch(function() {\r\n return model($scope) || $attr.ocLazyLoad; // it can be a module name (string), an object, an array, or a scope reference to any of this\r\n }, function(moduleName) {\r\n if(angular.isDefined(moduleName)) {\r\n $ocLazyLoad.load(moduleName).then(function success() {\r\n $animate.enter($compile(content)($scope), $element);\r\n });\r\n }\r\n }, true);\r\n };\r\n }\r\n };\r\n });\r\n\r\n})(angular);\r\n","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('oc.lazyLoad').config(function($provide) {\r\n $provide.decorator('$ocLazyLoad', function ($delegate, $q, $window, $interval) {\r\n var uaCssChecked = false,\r\n useCssLoadPatch = false,\r\n anchor = $window.document.getElementsByTagName('head')[0] || $window.document.getElementsByTagName('body')[0];\r\n\r\n /**\r\n * Load a js/css file\r\n * @param type\r\n * @param path\r\n * @param params\r\n * @returns promise\r\n */\r\n $delegate.buildElement = function buildElement(type, path, params) {\r\n var deferred = $q.defer(),\r\n el,\r\n loaded,\r\n filesCache = $delegate._getFilesCache(),\r\n cacheBuster = function cacheBuster(url) {\r\n var dc = new Date().getTime();\r\n if(url.indexOf('?') >= 0) {\r\n if(url.substring(0, url.length - 1) === '&') {\r\n return url + '_dc=' + dc;\r\n }\r\n return url + '&_dc=' + dc;\r\n } else {\r\n return url + '?_dc=' + dc;\r\n }\r\n };\r\n\r\n // Store the promise early so the file load can be detected by other parallel lazy loads\r\n // (ie: multiple routes on one page) a 'true' value isn't sufficient\r\n // as it causes false positive load results.\r\n if(angular.isUndefined(filesCache.get(path))) {\r\n filesCache.put(path, deferred.promise);\r\n }\r\n\r\n // Switch in case more content types are added later\r\n switch(type) {\r\n case 'css':\r\n el = $window.document.createElement('link');\r\n el.type = 'text/css';\r\n el.rel = 'stylesheet';\r\n el.href = params.cache === false ? cacheBuster(path) : path;\r\n break;\r\n case 'js':\r\n el = $window.document.createElement('script');\r\n el.src = params.cache === false ? cacheBuster(path) : path;\r\n break;\r\n default:\r\n deferred.reject(new Error('Requested type \"' + type + '\" is not known. Could not inject \"' + path + '\"'));\r\n break;\r\n }\r\n el.onload = el['onreadystatechange'] = function(e) {\r\n if((el['readyState'] && !(/^c|loade/.test(el['readyState']))) || loaded) return;\r\n el.onload = el['onreadystatechange'] = null;\r\n loaded = 1;\r\n $delegate._broadcast('ocLazyLoad.fileLoaded', path);\r\n deferred.resolve();\r\n };\r\n el.onerror = function() {\r\n deferred.reject(new Error('Unable to load ' + path));\r\n };\r\n el.async = params.serie ? 0 : 1;\r\n\r\n var insertBeforeElem = anchor.lastChild;\r\n if(params.insertBefore) {\r\n var element = angular.element(params.insertBefore);\r\n if(element && element.length > 0) {\r\n insertBeforeElem = element[0];\r\n }\r\n }\r\n anchor.insertBefore(el, insertBeforeElem);\r\n\r\n /*\r\n The event load or readystatechange doesn't fire in:\r\n - iOS < 6 (default mobile browser)\r\n - Android < 4.4 (default mobile browser)\r\n - Safari < 6 (desktop browser)\r\n */\r\n if(type == 'css') {\r\n if(!uaCssChecked) {\r\n var ua = $window.navigator.userAgent.toLowerCase();\r\n\r\n // iOS < 6\r\n if(/iP(hone|od|ad)/.test($window.navigator.platform)) {\r\n var v = ($window.navigator.appVersion).match(/OS (\\d+)_(\\d+)_?(\\d+)?/);\r\n var iOSVersion = parseFloat([parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)].join('.'));\r\n useCssLoadPatch = iOSVersion < 6;\r\n } else if(ua.indexOf(\"android\") > -1) { // Android < 4.4\r\n var androidVersion = parseFloat(ua.slice(ua.indexOf(\"android\") + 8));\r\n useCssLoadPatch = androidVersion < 4.4;\r\n } else if(ua.indexOf('safari') > -1 && ua.indexOf('chrome') == -1 && ua.indexOf('phantomjs') == -1) {\r\n var safariVersion = parseFloat(ua.match(/version\\/([\\.\\d]+)/i)[1]);\r\n useCssLoadPatch = safariVersion < 6;\r\n }\r\n }\r\n\r\n if(useCssLoadPatch) {\r\n var tries = 1000; // * 20 = 20000 miliseconds\r\n var interval = $interval(function() {\r\n try {\r\n el.sheet.cssRules;\r\n $interval.cancel(interval);\r\n el.onload();\r\n } catch(e) {\r\n if(--tries <= 0) {\r\n el.onerror();\r\n }\r\n }\r\n }, 20);\r\n }\r\n }\r\n\r\n return deferred.promise;\r\n };\r\n\r\n return $delegate;\r\n })\r\n });\r\n\r\n})(angular);\r\n","(function(angular) {\n 'use strict';\n\n angular.module('oc.lazyLoad').config(function($provide) {\n $provide.decorator('$ocLazyLoad', function($delegate, $q) {\n /**\n * The function that loads new files\n * @param config\n * @param params\n * @returns {*}\n */\n $delegate.filesLoader = function filesLoader(config, originalParams = {}) {\n var cssFiles = [],\n templatesFiles = [],\n jsFiles = [],\n promises = [],\n cachePromise = null,\n filesCache = $delegate._getFilesCache();\n\n $delegate.toggleWatch(true); // start watching angular.module calls\n\n // we need a real copy because we might edit some parts of it\n var params = angular.copy(angular.extend({}, originalParams, config));\n\n var pushFile = function(path) {\n var file_type = null, m;\n if(angular.isObject(path)) {\n file_type = path.type;\n path = path.path;\n }\n cachePromise = filesCache.get(path);\n if(angular.isUndefined(cachePromise) || params.cache === false) {\n\n // always check for requirejs syntax just in case\n if((m = /^(css|less|html|htm|js)?(?=!)/.exec(path)) !== null) { // Detect file type using preceding type declaration (ala requireJS)\n file_type = m[1];\n path = path.substr(m[1].length + 1, path.length); // Strip the type from the path\n }\n\n if(!file_type) {\n if((m = /[.](css|less|html|htm|js)?((\\?|#).*)?$/.exec(path)) !== null) { // Detect file type via file extension\n file_type = m[1];\n } else if(!$delegate.jsLoader.hasOwnProperty('ocLazyLoadLoader') && $delegate.jsLoader.hasOwnProperty('load')) { // requirejs\n file_type = 'js';\n } else {\n $delegate._$log.error('File type could not be determined. ' + path);\n return;\n }\n }\n\n if((file_type === 'css' || file_type === 'less') && cssFiles.indexOf(path) === -1) {\n cssFiles.push(path);\n } else if((file_type === 'html' || file_type === 'htm') && templatesFiles.indexOf(path) === -1) {\n templatesFiles.push(path);\n } else if((file_type === 'js') || jsFiles.indexOf(path) === -1) {\n jsFiles.push(path);\n } else {\n $delegate._$log.error('File type is not valid. ' + path);\n }\n\n } else if(cachePromise) {\n promises.push(cachePromise);\n }\n };\n\n if(params.serie) {\n pushFile(params.files.shift());\n } else {\n angular.forEach(params.files, path => {\n pushFile(path);\n });\n }\n\n if(cssFiles.length > 0) {\n var cssDeferred = $q.defer();\n $delegate.cssLoader(cssFiles, function(err) {\n if(angular.isDefined(err) && $delegate.cssLoader.hasOwnProperty('ocLazyLoadLoader')) {\n $delegate._$log.error(err);\n cssDeferred.reject(err);\n } else {\n cssDeferred.resolve();\n }\n }, params);\n promises.push(cssDeferred.promise);\n }\n\n if(templatesFiles.length > 0) {\n var templatesDeferred = $q.defer();\n $delegate.templatesLoader(templatesFiles, function(err) {\n if(angular.isDefined(err) && $delegate.templatesLoader.hasOwnProperty('ocLazyLoadLoader')) {\n $delegate._$log.error(err);\n templatesDeferred.reject(err);\n } else {\n templatesDeferred.resolve();\n }\n }, params);\n promises.push(templatesDeferred.promise);\n }\n\n if(jsFiles.length > 0) {\n var jsDeferred = $q.defer();\n $delegate.jsLoader(jsFiles, function(err) {\n if(angular.isDefined(err) && $delegate.jsLoader.hasOwnProperty('ocLazyLoadLoader')) {\n $delegate._$log.error(err);\n jsDeferred.reject(err);\n } else {\n jsDeferred.resolve();\n }\n }, params);\n promises.push(jsDeferred.promise);\n }\n\n if(params.serie && params.files.length > 0) {\n return $q.all(promises).then(function success() {\n return $delegate.filesLoader(config, params);\n });\n } else {\n return $q.all(promises).finally(function(res) {\n $delegate.toggleWatch(false); // stop watching angular.module calls\n return res;\n });\n }\n };\n\n /**\n * Load a module or a list of modules into Angular\n * @param module Mixed the name of a predefined module config object, or a module config object, or an array of either\n * @param params Object optional parameters\n * @returns promise\n */\n $delegate.load = function(module, params = {}) {\n var self = this,\n config = null,\n deferredList = [],\n deferred = $q.defer(),\n errText;\n\n // If module is an array, break it down\n if(angular.isArray(module)) {\n // Resubmit each entry as a single module\n angular.forEach(module, function(m) {\n deferredList.push(self.load(m, params));\n });\n\n // Resolve the promise once everything has loaded\n $q.all(deferredList).then(function success(res) {\n deferred.resolve(res);\n }, function error(err) {\n deferred.reject(err);\n });\n\n return deferred.promise;\n }\n\n // Get or Set a configuration depending on what was passed in\n if(angular.isString(module)) {\n config = self.getModuleConfig(module);\n if(!config) {\n config = {\n files: [module]\n };\n }\n } else if(angular.isObject(module)) {\n // case {type: 'js', path: lazyLoadUrl + 'testModule.fakejs'}\n if(angular.isDefined(module.path) && angular.isDefined(module.type)) {\n config = {\n files: [module]\n };\n } else {\n config = self.setModuleConfig(module);\n }\n }\n\n if(config === null) {\n var moduleName = self._getModuleName(module);\n errText = 'Module \"' + (moduleName || 'unknown') + '\" is not configured, cannot load.';\n $delegate._$log.error(errText);\n deferred.reject(new Error(errText));\n return deferred.promise;\n } else {\n // deprecated\n if(angular.isDefined(config.template)) {\n if(angular.isUndefined(config.files)) {\n config.files = [];\n }\n if(angular.isString(config.template)) {\n config.files.push(config.template);\n } else if(angular.isArray(config.template)) {\n config.files.concat(config.template);\n }\n }\n }\n\n var localParams = {};\n angular.extend(localParams, params, config);\n\n // if someone used an external loader and called the load function with just the module name\n if(angular.isUndefined(config.files) && angular.isDefined(config.name) && $delegate.moduleExists(config.name)) {\n return $delegate.inject(config.name, localParams);\n }\n\n $delegate.filesLoader(config, localParams).then(function success() {\n $delegate.inject(null, localParams).then(function(res) {\n deferred.resolve(res);\n }, function(err) {\n deferred.reject(err);\n });\n }, function error(err) {\n deferred.reject(err);\n });\n\n return deferred.promise;\n };\n\n // return the patched service\n return $delegate;\n });\n });\n\n})(angular);\n","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('oc.lazyLoad').config(function($provide) {\r\n $provide.decorator('$ocLazyLoad', function ($delegate, $q) {\r\n /**\r\n * cssLoader function\r\n * @type Function\r\n * @param paths array list of css files to load\r\n * @param callback to call when everything is loaded. We use a callback and not a promise\r\n * @param params object config parameters\r\n * because the user can overwrite cssLoader and it will probably not use promises :(\r\n */\r\n $delegate.cssLoader = function(paths, callback, params) {\r\n var promises = [];\r\n angular.forEach(paths, function loading(path) {\r\n promises.push($delegate.buildElement('css', path, params));\r\n });\r\n $q.all(promises).then(function success() {\r\n callback();\r\n }, err => {\r\n callback(err);\r\n });\r\n };\r\n $delegate.cssLoader.ocLazyLoadLoader = true;\r\n\r\n return $delegate;\r\n })\r\n });\r\n\r\n})(angular);\r\n","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('oc.lazyLoad').config(function($provide) {\r\n $provide.decorator('$ocLazyLoad', function ($delegate, $q) {\r\n /**\r\n * jsLoader function\r\n * @type Function\r\n * @param paths array list of js files to load\r\n * @param callback to call when everything is loaded. We use a callback and not a promise\r\n * @param params object config parameters\r\n * because the user can overwrite jsLoader and it will probably not use promises :(\r\n */\r\n $delegate.jsLoader = function(paths, callback, params) {\r\n var promises = [];\r\n angular.forEach(paths, function loading(path) {\r\n promises.push($delegate.buildElement('js', path, params));\r\n });\r\n $q.all(promises).then(function success() {\r\n callback();\r\n }, function error(err) {\r\n callback(err);\r\n });\r\n };\r\n $delegate.jsLoader.ocLazyLoadLoader = true;\r\n\r\n return $delegate;\r\n })\r\n });\r\n\r\n})(angular);\r\n","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('oc.lazyLoad').config(function($provide) {\r\n $provide.decorator('$ocLazyLoad', function ($delegate, $templateCache, $q, $http) {\r\n /**\r\n * templatesLoader function\r\n * @type Function\r\n * @param paths array list of css files to load\r\n * @param callback to call when everything is loaded. We use a callback and not a promise\r\n * @param params object config parameters for $http\r\n * because the user can overwrite templatesLoader and it will probably not use promises :(\r\n */\r\n $delegate.templatesLoader = function(paths, callback, params) {\r\n var promises = [],\r\n filesCache = $delegate._getFilesCache();\r\n\r\n angular.forEach(paths, function(url) {\r\n var deferred = $q.defer();\r\n promises.push(deferred.promise);\r\n $http.get(url, params).success(function(data) {\r\n if(angular.isString(data) && data.length > 0) {\r\n angular.forEach(angular.element(data), function(node) {\r\n if(node.nodeName === 'SCRIPT' && node.type === 'text/ng-template') {\r\n $templateCache.put(node.id, node.innerHTML);\r\n }\r\n });\r\n }\r\n if(angular.isUndefined(filesCache.get(url))) {\r\n filesCache.put(url, true);\r\n }\r\n deferred.resolve();\r\n }).error(function(err) {\r\n deferred.reject(new Error('Unable to load template file \"' + url + '\": ' + err));\r\n });\r\n });\r\n return $q.all(promises).then(function success() {\r\n callback();\r\n }, function error(err) {\r\n callback(err);\r\n });\r\n };\r\n $delegate.templatesLoader.ocLazyLoadLoader = true;\r\n\r\n return $delegate;\r\n })\r\n });\r\n\r\n})(angular);\r\n","// Array.indexOf polyfill for IE8\r\nif(!Array.prototype.indexOf) {\r\n Array.prototype.indexOf = function(searchElement, fromIndex) {\r\n var k;\r\n\r\n // 1. Let O be the result of calling ToObject passing\r\n // the this value as the argument.\r\n if(this == null) {\r\n throw new TypeError('\"this\" is null or not defined');\r\n }\r\n\r\n var O = Object(this);\r\n\r\n // 2. Let lenValue be the result of calling the Get\r\n // internal method of O with the argument \"length\".\r\n // 3. Let len be ToUint32(lenValue).\r\n var len = O.length >>> 0;\r\n\r\n // 4. If len is 0, return -1.\r\n if(len === 0) {\r\n return -1;\r\n }\r\n\r\n // 5. If argument fromIndex was passed let n be\r\n // ToInteger(fromIndex); else let n be 0.\r\n var n = +fromIndex || 0;\r\n\r\n if(Math.abs(n) === Infinity) {\r\n n = 0;\r\n }\r\n\r\n // 6. If n >= len, return -1.\r\n if(n >= len) {\r\n return -1;\r\n }\r\n\r\n // 7. If n >= 0, then Let k be n.\r\n // 8. Else, n<0, Let k be len - abs(n).\r\n // If k is less than 0, then let k be 0.\r\n k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);\r\n\r\n // 9. Repeat, while k < len\r\n while(k < len) {\r\n // a. Let Pk be ToString(k).\r\n // This is implicit for LHS operands of the in operator\r\n // b. Let kPresent be the result of calling the\r\n // HasProperty internal method of O with argument Pk.\r\n // This step can be combined with c\r\n // c. If kPresent is true, then\r\n // i. Let elementK be the result of calling the Get\r\n // internal method of O with the argument ToString(k).\r\n // ii. Let same be the result of applying the\r\n // Strict Equality Comparison Algorithm to\r\n // searchElement and elementK.\r\n // iii. If same is true, return k.\r\n if(k in O && O[k] === searchElement) {\r\n return k;\r\n }\r\n k++;\r\n }\r\n return -1;\r\n };\r\n}\r\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/ocLazyLoad.min.js b/dist/ocLazyLoad.min.js index a9dcc32..78c7e49 100644 --- a/dist/ocLazyLoad.min.js +++ b/dist/ocLazyLoad.min.js @@ -5,5 +5,5 @@ * @license MIT * @author Olivier Combe */ -!function(e,n){"use strict";var r=["ng","oc.lazyLoad"],o={},t=[],i=[],a=[],s=e.noop,u={},c=[],d=e.module("oc.lazyLoad",["ng"]);d.provider("$ocLazyLoad",["$controllerProvider","$provide","$compileProvider","$filterProvider","$injector","$animateProvider",function(d,l,g,p,m,v){function L(n,o,t){if(o){var i,a,d,l=[];for(i=o.length-1;i>=0;i--)if(a=o[i],e.isString(a)||(a=j(a)),a&&-1===c.indexOf(a)){var f=-1===r.indexOf(a);if(d=h(a),f&&(r.push(a),L(n,d.requires,t)),d._runBlocks.length>0)for(u[a]=[];d._runBlocks.length>0;)u[a].push(d._runBlocks.shift());e.isDefined(u[a])&&(f||t.rerun)&&(l=l.concat(u[a])),$(n,d._invokeQueue,a,t.reconfig),$(n,d._configBlocks,a,t.reconfig),s(f?"ocLazyLoad.moduleLoaded":"ocLazyLoad.moduleReloaded",a),o.pop(),c.push(a)}var g=n.getInstanceInjector();e.forEach(l,function(e){g.invoke(e)})}}function y(n,r){function t(n){return e.isArray(n)?D(n.toString()):e.isObject(n)?D(z(n)):e.isDefined(n)&&null!==n?D(n.toString()):n}var i=n[2][0],a=n[1],u=!1;e.isUndefined(o[r])&&(o[r]={}),e.isUndefined(o[r][a])&&(o[r][a]={});var c=function(e,n){u=!0,o[r][a][e].push(n),s("ocLazyLoad.componentLoaded",[r,a,e])};if(e.isString(i))e.isUndefined(o[r][a][i])&&(o[r][a][i]=[]),-1===o[r][a][i].indexOf(t(n[2][1]))&&c(i,t(n[2][1]));else{if(!e.isObject(i))return!1;e.forEach(i,function(n){e.isString(n)&&(e.isUndefined(o[r][a][n])&&(o[r][a][n]=[]),-1===o[r][a][n].indexOf(t(i[1]))&&c(n,t(i[1])))})}return u}function $(n,r,o,i){if(r){var a,s,u,c;for(a=0,s=r.length;s>a;a++)if(u=r[a],e.isArray(u)){if(null!==n){if(!n.hasOwnProperty(u[0]))throw new Error("unsupported provider "+u[0]);c=n[u[0]]}var d=y(u,o);if("invoke"!==u[1])d&&e.isDefined(c)&&c[u[1]].apply(c,u[2]);else{var l=function(n){var r=t.indexOf(o+"-"+n);(-1===r||i)&&(-1===r&&t.push(o+"-"+n),e.isDefined(c)&&c[u[1]].apply(c,u[2]))};if(e.isFunction(u[2][0]))l(u[2][0]);else if(e.isArray(u[2][0]))for(var f=0,h=u[2][0].length;h>f;f++)e.isFunction(u[2][0][f])&&l(u[2][0][f])}}}}function j(n){var r=null;return e.isString(n)?r=n:e.isObject(n)&&n.hasOwnProperty("name")&&e.isString(n.name)&&(r=n.name),r}function E(n){if(!e.isString(n))return!1;try{return h(n)}catch(r){if(/No module/.test(r)||r.message.indexOf("$injector:nomod")>-1)return!1}}var _={},O={$controllerProvider:d,$compileProvider:g,$filterProvider:p,$provide:l,$injector:m,$animateProvider:v},w=!1,x=!1,b=[];b.push=function(e){-1===this.indexOf(e)&&Array.prototype.push.apply(this,arguments)},this.config=function(n){e.isDefined(n.modules)&&(e.isArray(n.modules)?e.forEach(n.modules,function(e){_[e.name]=e}):_[n.modules.name]=n.modules),e.isDefined(n.debug)&&(w=n.debug),e.isDefined(n.events)&&(x=n.events)},this._init=function(o){if(0===i.length){var t=[o],s=["ng:app","ng-app","x-ng-app","data-ng-app"],u=/\sng[:\-]app(:\s*([\w\d_]+);?)?\s/,c=function(e){return e&&t.push(e)};e.forEach(s,function(n){s[n]=!0,c(document.getElementById(n)),n=n.replace(":","\\:"),o[0].querySelectorAll&&(e.forEach(o[0].querySelectorAll("."+n),c),e.forEach(o[0].querySelectorAll("."+n+"\\:"),c),e.forEach(o[0].querySelectorAll("["+n+"]"),c))}),e.forEach(t,function(n){if(0===i.length){var r=" "+o.className+" ",t=u.exec(r);t?i.push((t[2]||"").replace(/\s+/g,",")):e.forEach(n.attributes,function(e){0===i.length&&s[e.name]&&i.push(e.value)})}})}0!==i.length||(n.jasmine||n.mocha)&&e.isDefined(e.mock)||console.error("No module found during bootstrap, unable to init ocLazyLoad. You should always use the ng-app directive or angular.boostrap when you use ocLazyLoad.");var d=function l(n){if(-1===r.indexOf(n)){r.push(n);var o=e.module(n);$(null,o._invokeQueue,n),$(null,o._configBlocks,n),e.forEach(o.requires,l)}};e.forEach(i,function(e){d(e)}),i=[],a.pop()};var z=function(n){var r=[];return JSON.stringify(n,function(n,o){if(e.isObject(o)&&null!==o){if(-1!==r.indexOf(o))return;r.push(o)}return o})},D=function(e){var n,r,o,t=0;if(0==e.length)return t;for(n=0,o=e.length;o>n;n++)r=e.charCodeAt(n),t=(t<<5)-t+r,t|=0;return t};this.$get=["$log","$rootElement","$rootScope","$cacheFactory","$q",function(n,o,t,u,d){function l(e){var r=d.defer();return n.error(e.message),r.reject(e),r.promise}var g,p=u("ocLazyLoad");return w||(n={},n.error=e.noop,n.warn=e.noop,n.info=e.noop),O.getInstanceInjector=function(){return g?g:g=o.data("$injector")||e.injector()},s=function(e,r){x&&t.$broadcast(e,r),w&&n.info(e,r)},{_broadcast:s,_$log:n,_getFilesCache:function(){return p},toggleWatch:function(e){e?a.push(!0):a.pop()},getModuleConfig:function(n){if(!e.isString(n))throw new Error("You need to give the name of the module to get");return _[n]?e.copy(_[n]):null},setModuleConfig:function(n){if(!e.isObject(n))throw new Error("You need to give the module config object to set");return _[n.name]=n,n},getModules:function(){return r},isLoaded:function(n){var o=function(e){var n=r.indexOf(e)>-1;return n||(n=!!E(e)),n};if(e.isString(n)&&(n=[n]),e.isArray(n)){var t,i;for(t=0,i=n.length;i>t;t++)if(!o(n[t]))return!1;return!0}throw new Error("You need to define the module(s) name(s)")},_getModuleName:j,_getModule:function(e){try{return h(e)}catch(n){throw(/No module/.test(n)||n.message.indexOf("$injector:nomod")>-1)&&(n.message='The module "'+z(e)+'" that you are trying to load does not exist. '+n.message),n}},moduleExists:E,_loadDependencies:function(n,r){var o,t,i,a=[],s=this;if(n=s._getModuleName(n),null===n)return d.when();try{o=s._getModule(n)}catch(u){return l(u)}return t=s.getRequires(o),e.forEach(t,function(o){if(e.isString(o)){var t=s.getModuleConfig(o);if(null===t)return void b.push(o);o=t}if(s.moduleExists(o.name))return i=o.files.filter(function(e){return s.getModuleConfig(o.name).files.indexOf(e)<0}),0!==i.length&&s._$log.warn('Module "',n,'" attempted to redefine configuration for dependency. "',o.name,'"\n Additional Files Loaded:',i),e.isDefined(s.filesLoader)?void a.push(s.filesLoader(o,r).then(function(){return s._loadDependencies(o)})):l(new Error("Error: New dependencies need to be loaded from external files ("+o.files+"), but no loader has been defined."));if(e.isArray(o)?o={files:o}:e.isObject(o)&&o.hasOwnProperty("name")&&o.name&&(s.setModuleConfig(o),b.push(o.name)),e.isDefined(o.files)&&0!==o.files.length){if(!e.isDefined(s.filesLoader))return l(new Error('Error: the module "'+o.name+'" is defined in external files ('+o.files+"), but no loader has been defined."));a.push(s.filesLoader(o,r).then(function(){return s._loadDependencies(o)}))}}),d.all(a)},inject:function(n,r){var o=this,t=d.defer();if(e.isDefined(n)&&null!==n){if(e.isArray(n)){var a=[];return e.forEach(n,function(e){a.push(o.inject(e))}),d.all(a)}o._addToLoadList(o._getModuleName(n),!0)}if(i.length>0){var s=i.slice(),u=function l(e){b.push(e),o._loadDependencies(e,r).then(function(){try{c=[],L(O,b,r)}catch(e){return o._$log.error(e.message),void t.reject(e)}i.length>0?l(i.shift()):t.resolve(s)},function(e){t.reject(e)})};u(i.shift())}else t.resolve();return t.promise},getRequires:function(n){var o=[];return e.forEach(n.requires,function(e){-1===r.indexOf(e)&&o.push(e)}),o},_invokeQueue:$,_registerInvokeList:y,_register:L,_addToLoadList:f}}],this._init(e.element(n.document))}]);var l=e.bootstrap;e.bootstrap=function(n,r,o){return e.forEach(r.slice(),function(e){f(e,!0)}),l(n,r,o)};var f=function(n,r){(a.length>0||r)&&e.isString(n)&&-1===i.indexOf(n)&&i.push(n)},h=e.module;e.module=function(e,n,r){return f(e),h(e,n,r)}}(angular,window),function(e){"use strict";e.module("oc.lazyLoad").directive("ocLazyLoad",["$ocLazyLoad","$compile","$animate","$parse",function(n,r,o,t){return{restrict:"A",terminal:!0,priority:1e3,compile:function(i){var a=i[0].innerHTML;return i.html(""),function(i,s,u){var c=t(u.ocLazyLoad);i.$watch(function(){return c(i)||u.ocLazyLoad},function(t){e.isDefined(t)&&n.load(t).then(function(){o.enter(r(a)(i),s)})},!0)}}}}])}(angular),function(e){"use strict";e.module("oc.lazyLoad").config(["$provide",function(n){n.decorator("$ocLazyLoad",["$delegate","$q","$window","$interval",function(n,r,o,t){var i=!1,a=!1,s=o.document.getElementsByTagName("head")[0]||o.document.getElementsByTagName("body")[0];return n.buildElement=function(u,c,d){var l,f,h=r.defer(),g=n._getFilesCache(),p=function(e){var n=(new Date).getTime();return e.indexOf("?")>=0?"&"===e.substring(0,e.length-1)?e+"_dc="+n:e+"&_dc="+n:e+"?_dc="+n};switch(e.isUndefined(g.get(c))&&g.put(c,h.promise),u){case"css":l=o.document.createElement("link"),l.type="text/css",l.rel="stylesheet",l.href=d.cache===!1?p(c):c;break;case"js":l=o.document.createElement("script"),l.src=d.cache===!1?p(c):c;break;default:h.reject(new Error('Requested type "'+u+'" is not known. Could not inject "'+c+'"'))}l.onload=l.onreadystatechange=function(){l.readyState&&!/^c|loade/.test(l.readyState)||f||(l.onload=l.onreadystatechange=null,f=1,n._broadcast("ocLazyLoad.fileLoaded",c),h.resolve())},l.onerror=function(){h.reject(new Error("Unable to load "+c))},l.async=d.serie?0:1;var m=s.lastChild;if(d.insertBefore){var v=e.element(d.insertBefore);v&&v.length>0&&(m=v[0])}if(s.insertBefore(l,m),"css"==u){if(!i){var L=o.navigator.userAgent.toLowerCase();if(/iP(hone|od|ad)/.test(o.navigator.platform)){var y=o.navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/),$=parseFloat([parseInt(y[1],10),parseInt(y[2],10),parseInt(y[3]||0,10)].join("."));a=6>$}else if(L.indexOf("android")>-1){var j=parseFloat(L.slice(L.indexOf("android")+8));a=4.4>j}else if(L.indexOf("safari")>-1&&-1==L.indexOf("chrome")&&-1==L.indexOf("phantomjs")){var E=parseFloat(L.match(/version\/([\.\d]+)/i)[1]);a=6>E}}if(a)var _=1e3,O=t(function(){try{l.sheet.cssRules,t.cancel(O),l.onload()}catch(e){--_<=0&&l.onerror()}},20)}return h.promise},n}])}])}(angular),function(e){"use strict";e.module("oc.lazyLoad").config(["$provide",function(n){n.decorator("$ocLazyLoad",["$delegate","$q",function(n,r){return n.filesLoader=function(o){var t=void 0===arguments[1]?{}:arguments[1],i=[],a=[],s=[],u=[],c=null,d=n._getFilesCache();n.toggleWatch(!0);var l=e.copy(e.extend({},t,o)),f=function(r){var o,t=null;if(e.isObject(r)&&(t=r.type,r=r.path),c=d.get(r),e.isUndefined(c)||l.cache===!1){if(null!==(o=/^(css|less|html|htm|js)?(?=!)/.exec(r))&&(t=o[1],r=r.substr(o[1].length+1,r.length)),!t)if(null!==(o=/[.](css|less|html|htm|js)?((\?|#).*)?$/.exec(r)))t=o[1];else{if(n.jsLoader.hasOwnProperty("ocLazyLoadLoader")||!n.jsLoader.hasOwnProperty("load"))return void n._$log.error("File type could not be determined. "+r);t="js"}"css"!==t&&"less"!==t||-1!==i.indexOf(r)?"html"!==t&&"htm"!==t||-1!==a.indexOf(r)?"js"===t||-1===s.indexOf(r)?s.push(r):n._$log.error("File type is not valid. "+r):a.push(r):i.push(r)}else c&&u.push(c)};if(l.serie?f(l.files.shift()):e.forEach(l.files,function(e){f(e)}),i.length>0){var h=r.defer();n.cssLoader(i,function(r){e.isDefined(r)&&n.cssLoader.hasOwnProperty("ocLazyLoadLoader")?(n._$log.error(r),h.reject(r)):h.resolve()},l),u.push(h.promise)}if(a.length>0){var g=r.defer();n.templatesLoader(a,function(r){e.isDefined(r)&&n.templatesLoader.hasOwnProperty("ocLazyLoadLoader")?(n._$log.error(r),g.reject(r)):g.resolve()},l),u.push(g.promise)}if(s.length>0){var p=r.defer();n.jsLoader(s,function(r){e.isDefined(r)&&n.jsLoader.hasOwnProperty("ocLazyLoadLoader")?(n._$log.error(r),p.reject(r)):p.resolve()},l),u.push(p.promise)}return l.serie&&l.files.length>0?r.all(u).then(function(){return n.filesLoader(o,l)}):r.all(u)["finally"](function(e){return n.toggleWatch(!1),e})},n.load=function(o){var t,i=void 0===arguments[1]?{}:arguments[1],a=this,s=null,u=[],c=r.defer();if(e.isArray(o))return e.forEach(o,function(e){u.push(a.load(e,i))}),r.all(u).then(function(e){c.resolve(e)},function(e){c.reject(e)}),c.promise;if(e.isString(o)?(s=a.getModuleConfig(o),s||(s={files:[o]})):e.isObject(o)&&(s=e.isDefined(o.path)&&e.isDefined(o.type)?{files:[o]}:a.setModuleConfig(o)),null===s){var d=a._getModuleName(o);return t='Module "'+(d||"unknown")+'" is not configured, cannot load.',n._$log.error(t),c.reject(new Error(t)),c.promise}e.isDefined(s.template)&&(e.isUndefined(s.files)&&(s.files=[]),e.isString(s.template)?s.files.push(s.template):e.isArray(s.template)&&s.files.concat(s.template));var l={};return e.extend(l,i,s),e.isUndefined(s.files)&&e.isDefined(s.name)&&n.moduleExists(s.name)?n.inject(s.name,l):(n.filesLoader(s,l).then(function(){n.inject(null,l).then(function(e){c.resolve(e)},function(e){c.reject(e)})},function(e){c.reject(e)}),c.promise)},n}])}])}(angular),function(e){"use strict";e.module("oc.lazyLoad").config(["$provide",function(n){n.decorator("$ocLazyLoad",["$delegate","$q",function(n,r){return n.cssLoader=function(o,t,i){var a=[];e.forEach(o,function(e){a.push(n.buildElement("css",e,i))}),r.all(a).then(function(){t()},function(e){t(e)})},n.cssLoader.ocLazyLoadLoader=!0,n}])}])}(angular),function(e){"use strict";e.module("oc.lazyLoad").config(["$provide",function(n){n.decorator("$ocLazyLoad",["$delegate","$q",function(n,r){return n.jsLoader=function(o,t,i){var a=[];e.forEach(o,function(e){a.push(n.buildElement("js",e,i))}),r.all(a).then(function(){t()},function(e){t(e)})},n.jsLoader.ocLazyLoadLoader=!0,n}])}])}(angular),function(e){"use strict";e.module("oc.lazyLoad").config(["$provide",function(n){n.decorator("$ocLazyLoad",["$delegate","$templateCache","$q","$http",function(n,r,o,t){return n.templatesLoader=function(i,a,s){var u=[],c=n._getFilesCache();return e.forEach(i,function(n){var i=o.defer();u.push(i.promise),t.get(n,s).success(function(o){e.isString(o)&&o.length>0&&e.forEach(e.element(o),function(e){"SCRIPT"===e.nodeName&&"text/ng-template"===e.type&&r.put(e.id,e.innerHTML)}),e.isUndefined(c.get(n))&&c.put(n,!0),i.resolve()}).error(function(e){i.reject(new Error('Unable to load template file "'+n+'": '+e))})}),o.all(u).then(function(){a()},function(e){a(e)})},n.templatesLoader.ocLazyLoadLoader=!0,n}])}])}(angular),Array.prototype.indexOf||(Array.prototype.indexOf=function(e,n){var r;if(null==this)throw new TypeError('"this" is null or not defined');var o=Object(this),t=o.length>>>0;if(0===t)return-1;var i=+n||0;if(1/0===Math.abs(i)&&(i=0),i>=t)return-1;for(r=Math.max(i>=0?i:t-Math.abs(i),0);t>r;){if(r in o&&o[r]===e)return r;r++}return-1}); +!function(e,n){"use strict";var r=["ng","oc.lazyLoad"],o={},t=[],i=[],a=[],s=e.noop,u={},c=[],l=e.module("oc.lazyLoad",["ng"]);l.provider("$ocLazyLoad",["$controllerProvider","$provide","$compileProvider","$filterProvider","$injector","$animateProvider",function(l,d,g,p,m,v){function L(n,o,t){if(o){var i,a,l,d=[];for(i=o.length-1;i>=0;i--)if(a=o[i],e.isString(a)||(a=j(a)),a&&-1===c.indexOf(a)){var f=-1===r.indexOf(a);if(l=h(a),f&&(r.push(a),L(n,l.requires,t)),l._runBlocks.length>0)for(u[a]=[];l._runBlocks.length>0;)u[a].push(l._runBlocks.shift());e.isDefined(u[a])&&(f||t.rerun)&&(d=d.concat(u[a])),$(n,l._invokeQueue,a,t.reconfig),$(n,l._configBlocks,a,t.reconfig),s(f?"ocLazyLoad.moduleLoaded":"ocLazyLoad.moduleReloaded",a),o.pop(),c.push(a)}var g=n.getInstanceInjector();e.forEach(d,function(e){g.invoke(e)})}}function y(n,r){function t(n){return e.isArray(n)?D(n.toString()):e.isObject(n)?D(z(n)):e.isDefined(n)&&null!==n?D(n.toString()):n}var i=n[2][0],a=n[1],u=!1;e.isUndefined(o[r])&&(o[r]={}),e.isUndefined(o[r][a])&&(o[r][a]={});var c=function(n,t){e.isUndefined(o[r][a][n])&&(o[r][a][n]=[]),-1===o[r][a][n].indexOf(t)&&(u=!0,o[r][a][n].push(t),s("ocLazyLoad.componentLoaded",[r,a,n]))};if(e.isString(i))c(i,t(n[2][1]));else{if(!e.isObject(i))return!1;e.forEach(i,function(n,r){e.isString(n)?c(n,t(i[1])):c(r,t(n))})}return u}function $(n,r,o,i){if(r){var a,s,u,c;for(a=0,s=r.length;s>a;a++)if(u=r[a],e.isArray(u)){if(null!==n){if(!n.hasOwnProperty(u[0]))throw new Error("unsupported provider "+u[0]);c=n[u[0]]}var l=y(u,o);if("invoke"!==u[1])l&&e.isDefined(c)&&c[u[1]].apply(c,u[2]);else{var d=function(n){var r=t.indexOf(o+"-"+n);(-1===r||i)&&(-1===r&&t.push(o+"-"+n),e.isDefined(c)&&c[u[1]].apply(c,u[2]))};if(e.isFunction(u[2][0]))d(u[2][0]);else if(e.isArray(u[2][0]))for(var f=0,h=u[2][0].length;h>f;f++)e.isFunction(u[2][0][f])&&d(u[2][0][f])}}}}function j(n){var r=null;return e.isString(n)?r=n:e.isObject(n)&&n.hasOwnProperty("name")&&e.isString(n.name)&&(r=n.name),r}function E(n){if(!e.isString(n))return!1;try{return h(n)}catch(r){if(/No module/.test(r)||r.message.indexOf("$injector:nomod")>-1)return!1}}var _={},O={$controllerProvider:l,$compileProvider:g,$filterProvider:p,$provide:d,$injector:m,$animateProvider:v},w=!1,b=!1,x=[];x.push=function(e){-1===this.indexOf(e)&&Array.prototype.push.apply(this,arguments)},this.config=function(n){e.isDefined(n.modules)&&(e.isArray(n.modules)?e.forEach(n.modules,function(e){_[e.name]=e}):_[n.modules.name]=n.modules),e.isDefined(n.debug)&&(w=n.debug),e.isDefined(n.events)&&(b=n.events)},this._init=function(o){if(0===i.length){var t=[o],s=["ng:app","ng-app","x-ng-app","data-ng-app"],u=/\sng[:\-]app(:\s*([\w\d_]+);?)?\s/,c=function(e){return e&&t.push(e)};e.forEach(s,function(n){s[n]=!0,c(document.getElementById(n)),n=n.replace(":","\\:"),o[0].querySelectorAll&&(e.forEach(o[0].querySelectorAll("."+n),c),e.forEach(o[0].querySelectorAll("."+n+"\\:"),c),e.forEach(o[0].querySelectorAll("["+n+"]"),c))}),e.forEach(t,function(n){if(0===i.length){var r=" "+o.className+" ",t=u.exec(r);t?i.push((t[2]||"").replace(/\s+/g,",")):e.forEach(n.attributes,function(e){0===i.length&&s[e.name]&&i.push(e.value)})}})}0!==i.length||(n.jasmine||n.mocha)&&e.isDefined(e.mock)||console.error("No module found during bootstrap, unable to init ocLazyLoad. You should always use the ng-app directive or angular.boostrap when you use ocLazyLoad.");var l=function d(n){if(-1===r.indexOf(n)){r.push(n);var o=e.module(n);$(null,o._invokeQueue,n),$(null,o._configBlocks,n),e.forEach(o.requires,d)}};e.forEach(i,function(e){l(e)}),i=[],a.pop()};var z=function(n){var r=[];return JSON.stringify(n,function(n,o){if(e.isObject(o)&&null!==o){if(-1!==r.indexOf(o))return;r.push(o)}return o})},D=function(e){var n,r,o,t=0;if(0==e.length)return t;for(n=0,o=e.length;o>n;n++)r=e.charCodeAt(n),t=(t<<5)-t+r,t|=0;return t};this.$get=["$log","$rootElement","$rootScope","$cacheFactory","$q",function(n,o,t,u,l){function d(e){var r=l.defer();return n.error(e.message),r.reject(e),r.promise}var g,p=u("ocLazyLoad");return w||(n={},n.error=e.noop,n.warn=e.noop,n.info=e.noop),O.getInstanceInjector=function(){return g?g:g=o.data("$injector")||e.injector()},s=function(e,r){b&&t.$broadcast(e,r),w&&n.info(e,r)},{_broadcast:s,_$log:n,_getFilesCache:function(){return p},toggleWatch:function(e){e?a.push(!0):a.pop()},getModuleConfig:function(n){if(!e.isString(n))throw new Error("You need to give the name of the module to get");return _[n]?e.copy(_[n]):null},setModuleConfig:function(n){if(!e.isObject(n))throw new Error("You need to give the module config object to set");return _[n.name]=n,n},getModules:function(){return r},isLoaded:function(n){var o=function(e){var n=r.indexOf(e)>-1;return n||(n=!!E(e)),n};if(e.isString(n)&&(n=[n]),e.isArray(n)){var t,i;for(t=0,i=n.length;i>t;t++)if(!o(n[t]))return!1;return!0}throw new Error("You need to define the module(s) name(s)")},_getModuleName:j,_getModule:function(e){try{return h(e)}catch(n){throw(/No module/.test(n)||n.message.indexOf("$injector:nomod")>-1)&&(n.message='The module "'+z(e)+'" that you are trying to load does not exist. '+n.message),n}},moduleExists:E,_loadDependencies:function(n,r){var o,t,i,a=[],s=this;if(n=s._getModuleName(n),null===n)return l.when();try{o=s._getModule(n)}catch(u){return d(u)}return t=s.getRequires(o),e.forEach(t,function(o){if(e.isString(o)){var t=s.getModuleConfig(o);if(null===t)return void x.push(o);o=t}if(s.moduleExists(o.name))return i=o.files.filter(function(e){return s.getModuleConfig(o.name).files.indexOf(e)<0}),0!==i.length&&s._$log.warn('Module "',n,'" attempted to redefine configuration for dependency. "',o.name,'"\n Additional Files Loaded:',i),e.isDefined(s.filesLoader)?void a.push(s.filesLoader(o,r).then(function(){return s._loadDependencies(o)})):d(new Error("Error: New dependencies need to be loaded from external files ("+o.files+"), but no loader has been defined."));if(e.isArray(o)?o={files:o}:e.isObject(o)&&o.hasOwnProperty("name")&&o.name&&(s.setModuleConfig(o),x.push(o.name)),e.isDefined(o.files)&&0!==o.files.length){if(!e.isDefined(s.filesLoader))return d(new Error('Error: the module "'+o.name+'" is defined in external files ('+o.files+"), but no loader has been defined."));a.push(s.filesLoader(o,r).then(function(){return s._loadDependencies(o)}))}}),l.all(a)},inject:function(n,r){var o=this,t=l.defer();if(e.isDefined(n)&&null!==n){if(e.isArray(n)){var a=[];return e.forEach(n,function(e){a.push(o.inject(e))}),l.all(a)}o._addToLoadList(o._getModuleName(n),!0)}if(i.length>0){var s=i.slice(),u=function d(e){x.push(e),o._loadDependencies(e,r).then(function(){try{c=[],L(O,x,r)}catch(e){return o._$log.error(e.message),void t.reject(e)}i.length>0?d(i.shift()):t.resolve(s)},function(e){t.reject(e)})};u(i.shift())}else t.resolve();return t.promise},getRequires:function(n){var o=[];return e.forEach(n.requires,function(e){-1===r.indexOf(e)&&o.push(e)}),o},_invokeQueue:$,_registerInvokeList:y,_register:L,_addToLoadList:f}}],this._init(e.element(n.document))}]);var d=e.bootstrap;e.bootstrap=function(n,r,o){return e.forEach(r.slice(),function(e){f(e,!0)}),d(n,r,o)};var f=function(n,r){(a.length>0||r)&&e.isString(n)&&-1===i.indexOf(n)&&i.push(n)},h=e.module;e.module=function(e,n,r){return f(e),h(e,n,r)}}(angular,window),function(e){"use strict";e.module("oc.lazyLoad").directive("ocLazyLoad",["$ocLazyLoad","$compile","$animate","$parse",function(n,r,o,t){return{restrict:"A",terminal:!0,priority:1e3,compile:function(i){var a=i[0].innerHTML;return i.html(""),function(i,s,u){var c=t(u.ocLazyLoad);i.$watch(function(){return c(i)||u.ocLazyLoad},function(t){e.isDefined(t)&&n.load(t).then(function(){o.enter(r(a)(i),s)})},!0)}}}}])}(angular),function(e){"use strict";e.module("oc.lazyLoad").config(["$provide",function(n){n.decorator("$ocLazyLoad",["$delegate","$q","$window","$interval",function(n,r,o,t){var i=!1,a=!1,s=o.document.getElementsByTagName("head")[0]||o.document.getElementsByTagName("body")[0];return n.buildElement=function(u,c,l){var d,f,h=r.defer(),g=n._getFilesCache(),p=function(e){var n=(new Date).getTime();return e.indexOf("?")>=0?"&"===e.substring(0,e.length-1)?e+"_dc="+n:e+"&_dc="+n:e+"?_dc="+n};switch(e.isUndefined(g.get(c))&&g.put(c,h.promise),u){case"css":d=o.document.createElement("link"),d.type="text/css",d.rel="stylesheet",d.href=l.cache===!1?p(c):c;break;case"js":d=o.document.createElement("script"),d.src=l.cache===!1?p(c):c;break;default:h.reject(new Error('Requested type "'+u+'" is not known. Could not inject "'+c+'"'))}d.onload=d.onreadystatechange=function(){d.readyState&&!/^c|loade/.test(d.readyState)||f||(d.onload=d.onreadystatechange=null,f=1,n._broadcast("ocLazyLoad.fileLoaded",c),h.resolve())},d.onerror=function(){h.reject(new Error("Unable to load "+c))},d.async=l.serie?0:1;var m=s.lastChild;if(l.insertBefore){var v=e.element(l.insertBefore);v&&v.length>0&&(m=v[0])}if(s.insertBefore(d,m),"css"==u){if(!i){var L=o.navigator.userAgent.toLowerCase();if(/iP(hone|od|ad)/.test(o.navigator.platform)){var y=o.navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/),$=parseFloat([parseInt(y[1],10),parseInt(y[2],10),parseInt(y[3]||0,10)].join("."));a=6>$}else if(L.indexOf("android")>-1){var j=parseFloat(L.slice(L.indexOf("android")+8));a=4.4>j}else if(L.indexOf("safari")>-1&&-1==L.indexOf("chrome")&&-1==L.indexOf("phantomjs")){var E=parseFloat(L.match(/version\/([\.\d]+)/i)[1]);a=6>E}}if(a)var _=1e3,O=t(function(){try{d.sheet.cssRules,t.cancel(O),d.onload()}catch(e){--_<=0&&d.onerror()}},20)}return h.promise},n}])}])}(angular),function(e){"use strict";e.module("oc.lazyLoad").config(["$provide",function(n){n.decorator("$ocLazyLoad",["$delegate","$q",function(n,r){return n.filesLoader=function(o){var t=void 0===arguments[1]?{}:arguments[1],i=[],a=[],s=[],u=[],c=null,l=n._getFilesCache();n.toggleWatch(!0);var d=e.copy(e.extend({},t,o)),f=function(r){var o,t=null;if(e.isObject(r)&&(t=r.type,r=r.path),c=l.get(r),e.isUndefined(c)||d.cache===!1){if(null!==(o=/^(css|less|html|htm|js)?(?=!)/.exec(r))&&(t=o[1],r=r.substr(o[1].length+1,r.length)),!t)if(null!==(o=/[.](css|less|html|htm|js)?((\?|#).*)?$/.exec(r)))t=o[1];else{if(n.jsLoader.hasOwnProperty("ocLazyLoadLoader")||!n.jsLoader.hasOwnProperty("load"))return void n._$log.error("File type could not be determined. "+r);t="js"}"css"!==t&&"less"!==t||-1!==i.indexOf(r)?"html"!==t&&"htm"!==t||-1!==a.indexOf(r)?"js"===t||-1===s.indexOf(r)?s.push(r):n._$log.error("File type is not valid. "+r):a.push(r):i.push(r)}else c&&u.push(c)};if(d.serie?f(d.files.shift()):e.forEach(d.files,function(e){f(e)}),i.length>0){var h=r.defer();n.cssLoader(i,function(r){e.isDefined(r)&&n.cssLoader.hasOwnProperty("ocLazyLoadLoader")?(n._$log.error(r),h.reject(r)):h.resolve()},d),u.push(h.promise)}if(a.length>0){var g=r.defer();n.templatesLoader(a,function(r){e.isDefined(r)&&n.templatesLoader.hasOwnProperty("ocLazyLoadLoader")?(n._$log.error(r),g.reject(r)):g.resolve()},d),u.push(g.promise)}if(s.length>0){var p=r.defer();n.jsLoader(s,function(r){e.isDefined(r)&&n.jsLoader.hasOwnProperty("ocLazyLoadLoader")?(n._$log.error(r),p.reject(r)):p.resolve()},d),u.push(p.promise)}return d.serie&&d.files.length>0?r.all(u).then(function(){return n.filesLoader(o,d)}):r.all(u)["finally"](function(e){return n.toggleWatch(!1),e})},n.load=function(o){var t,i=void 0===arguments[1]?{}:arguments[1],a=this,s=null,u=[],c=r.defer();if(e.isArray(o))return e.forEach(o,function(e){u.push(a.load(e,i))}),r.all(u).then(function(e){c.resolve(e)},function(e){c.reject(e)}),c.promise;if(e.isString(o)?(s=a.getModuleConfig(o),s||(s={files:[o]})):e.isObject(o)&&(s=e.isDefined(o.path)&&e.isDefined(o.type)?{files:[o]}:a.setModuleConfig(o)),null===s){var l=a._getModuleName(o);return t='Module "'+(l||"unknown")+'" is not configured, cannot load.',n._$log.error(t),c.reject(new Error(t)),c.promise}e.isDefined(s.template)&&(e.isUndefined(s.files)&&(s.files=[]),e.isString(s.template)?s.files.push(s.template):e.isArray(s.template)&&s.files.concat(s.template));var d={};return e.extend(d,i,s),e.isUndefined(s.files)&&e.isDefined(s.name)&&n.moduleExists(s.name)?n.inject(s.name,d):(n.filesLoader(s,d).then(function(){n.inject(null,d).then(function(e){c.resolve(e)},function(e){c.reject(e)})},function(e){c.reject(e)}),c.promise)},n}])}])}(angular),function(e){"use strict";e.module("oc.lazyLoad").config(["$provide",function(n){n.decorator("$ocLazyLoad",["$delegate","$q",function(n,r){return n.cssLoader=function(o,t,i){var a=[];e.forEach(o,function(e){a.push(n.buildElement("css",e,i))}),r.all(a).then(function(){t()},function(e){t(e)})},n.cssLoader.ocLazyLoadLoader=!0,n}])}])}(angular),function(e){"use strict";e.module("oc.lazyLoad").config(["$provide",function(n){n.decorator("$ocLazyLoad",["$delegate","$q",function(n,r){return n.jsLoader=function(o,t,i){var a=[];e.forEach(o,function(e){a.push(n.buildElement("js",e,i))}),r.all(a).then(function(){t()},function(e){t(e)})},n.jsLoader.ocLazyLoadLoader=!0,n}])}])}(angular),function(e){"use strict";e.module("oc.lazyLoad").config(["$provide",function(n){n.decorator("$ocLazyLoad",["$delegate","$templateCache","$q","$http",function(n,r,o,t){return n.templatesLoader=function(i,a,s){var u=[],c=n._getFilesCache();return e.forEach(i,function(n){var i=o.defer();u.push(i.promise),t.get(n,s).success(function(o){e.isString(o)&&o.length>0&&e.forEach(e.element(o),function(e){"SCRIPT"===e.nodeName&&"text/ng-template"===e.type&&r.put(e.id,e.innerHTML)}),e.isUndefined(c.get(n))&&c.put(n,!0),i.resolve()}).error(function(e){i.reject(new Error('Unable to load template file "'+n+'": '+e))})}),o.all(u).then(function(){a()},function(e){a(e)})},n.templatesLoader.ocLazyLoadLoader=!0,n}])}])}(angular),Array.prototype.indexOf||(Array.prototype.indexOf=function(e,n){var r;if(null==this)throw new TypeError('"this" is null or not defined');var o=Object(this),t=o.length>>>0;if(0===t)return-1;var i=+n||0;if(1/0===Math.abs(i)&&(i=0),i>=t)return-1;for(r=Math.max(i>=0?i:t-Math.abs(i),0);t>r;){if(r in o&&o[r]===e)return r;r++}return-1}); //# sourceMappingURL=ocLazyLoad.min.js.map \ No newline at end of file diff --git a/dist/ocLazyLoad.min.js.map b/dist/ocLazyLoad.min.js.map index 4caf7e0..12de2c1 100644 --- a/dist/ocLazyLoad.min.js.map +++ b/dist/ocLazyLoad.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["ocLazyLoad.js"],"names":["angular","window","regModules","regInvokes","regConfigs","modulesToLoad","recordDeclarations","broadcast","noop","runBlocks","justLoaded","ocLazyLoad","module","provider","$controllerProvider","$provide","$compileProvider","$filterProvider","$injector","$animateProvider","_register","providers","registerModules","params","k","moduleName","moduleFn","tempRunBlocks","length","isString","getModuleName","indexOf","newModule","ngModuleFct","push","requires","_runBlocks","shift","isDefined","rerun","concat","_invokeQueue","reconfig","_configBlocks","pop","instanceInjector","getInstanceInjector","forEach","fn","invoke","_registerInvokeList","args","signature","data","isArray","hashCode","toString","isObject","stringify","invokeList","type","newInvoke","isUndefined","onInvoke","invokeName","queue","i","len","hasOwnProperty","Error","isNew","apply","callInvoke","fct","invoked","isFunction","j","jlen","name","moduleExists","e","test","message","modules","debug","events","moduleCache","value","this","Array","prototype","arguments","config","moduleConfig","_init","element","elements","names","NG_APP_CLASS_REGEXP","append","elm","document","getElementById","replace","querySelectorAll","className","match","exec","attributes","attr","jasmine","mocha","mock","console","error","addReg","mainModule","obj","cache","JSON","key","str","chr","hash","charCodeAt","$get","$log","$rootElement","$rootScope","$cacheFactory","$q","reject","deferred","defer","promise","filesCache","warn","info","injector","eventName","$broadcast","_broadcast","_$log","_getFilesCache","toggleWatch","watch","getModuleConfig","copy","setModuleConfig","getModules","isLoaded","modulesNames","moduleLoaded","_getModuleName","_getModule","_loadDependencies","localParams","loadedModule","diff","promisesList","self","when","getRequires","requireEntry","files","filter","n","filesLoader","then","all","inject","_addToLoadList","res","slice","loadNext","resolve","err","requireModule","bootstrapFct","bootstrap","force","configFn","directive","$ocLazyLoad","$compile","$animate","$parse","restrict","terminal","priority","compile","content","innerHTML","html","$scope","$element","$attr","model","$watch","load","enter","decorator","$delegate","$window","$interval","uaCssChecked","useCssLoadPatch","anchor","getElementsByTagName","buildElement","path","el","loaded","cacheBuster","url","dc","Date","getTime","substring","get","put","createElement","rel","href","src","onload","onreadystatechange","readyState","onerror","async","serie","insertBeforeElem","lastChild","insertBefore","ua","navigator","userAgent","toLowerCase","platform","v","appVersion","iOSVersion","parseFloat","parseInt","join","androidVersion","safariVersion","tries","interval","sheet","cssRules","cancel","originalParams","undefined","cssFiles","templatesFiles","jsFiles","promises","cachePromise","extend","pushFile","m","file_type","substr","jsLoader","cssDeferred","cssLoader","templatesDeferred","templatesLoader","jsDeferred","errText","deferredList","template","paths","callback","ocLazyLoadLoader","$templateCache","$http","success","node","nodeName","id","searchElement","fromIndex","TypeError","O","Object","Infinity","Math","abs","max"],"mappings":"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","file":"ocLazyLoad.min.js","sourcesContent":["/**\n * oclazyload - Load modules on demand (lazy load) with angularJS\n * @version v1.0.0-alpha2\n * @link https://github.com/ocombe/ocLazyLoad\n * @license MIT\n * @author Olivier Combe \n */\n(function (angular, window) {\n \"use strict\";\n\n var regModules = [\"ng\", \"oc.lazyLoad\"],\n regInvokes = {},\n regConfigs = [],\n modulesToLoad = [],\n recordDeclarations = [],\n broadcast = angular.noop,\n runBlocks = {},\n justLoaded = [];\n\n var ocLazyLoad = angular.module(\"oc.lazyLoad\", [\"ng\"]);\n\n ocLazyLoad.provider(\"$ocLazyLoad\", [\"$controllerProvider\", \"$provide\", \"$compileProvider\", \"$filterProvider\", \"$injector\", \"$animateProvider\", function ($controllerProvider, $provide, $compileProvider, $filterProvider, $injector, $animateProvider) {\n var modules = {},\n providers = {\n $controllerProvider: $controllerProvider,\n $compileProvider: $compileProvider,\n $filterProvider: $filterProvider,\n $provide: $provide, // other things\n $injector: $injector,\n $animateProvider: $animateProvider\n },\n debug = false,\n events = false,\n moduleCache = [];\n\n moduleCache.push = function (value) {\n if (this.indexOf(value) === -1) {\n Array.prototype.push.apply(this, arguments);\n }\n };\n\n this.config = function (config) {\n // If we want to define modules configs\n if (angular.isDefined(config.modules)) {\n if (angular.isArray(config.modules)) {\n angular.forEach(config.modules, function (moduleConfig) {\n modules[moduleConfig.name] = moduleConfig;\n });\n } else {\n modules[config.modules.name] = config.modules;\n }\n }\n\n if (angular.isDefined(config.debug)) {\n debug = config.debug;\n }\n\n if (angular.isDefined(config.events)) {\n events = config.events;\n }\n };\n\n /**\r\n * Get the list of existing registered modules\r\n * @param element\r\n */\n this._init = function _init(element) {\n // this is probably useless now because we override angular.bootstrap\n if (modulesToLoad.length === 0) {\n var elements = [element],\n names = [\"ng:app\", \"ng-app\", \"x-ng-app\", \"data-ng-app\"],\n NG_APP_CLASS_REGEXP = /\\sng[:\\-]app(:\\s*([\\w\\d_]+);?)?\\s/,\n append = function append(elm) {\n return elm && elements.push(elm);\n };\n\n angular.forEach(names, function (name) {\n names[name] = true;\n append(document.getElementById(name));\n name = name.replace(\":\", \"\\\\:\");\n if (element[0].querySelectorAll) {\n angular.forEach(element[0].querySelectorAll(\".\" + name), append);\n angular.forEach(element[0].querySelectorAll(\".\" + name + \"\\\\:\"), append);\n angular.forEach(element[0].querySelectorAll(\"[\" + name + \"]\"), append);\n }\n });\n\n angular.forEach(elements, function (elm) {\n if (modulesToLoad.length === 0) {\n var className = \" \" + element.className + \" \";\n var match = NG_APP_CLASS_REGEXP.exec(className);\n if (match) {\n modulesToLoad.push((match[2] || \"\").replace(/\\s+/g, \",\"));\n } else {\n angular.forEach(elm.attributes, function (attr) {\n if (modulesToLoad.length === 0 && names[attr.name]) {\n modulesToLoad.push(attr.value);\n }\n });\n }\n }\n });\n }\n\n if (modulesToLoad.length === 0 && !((window.jasmine || window.mocha) && angular.isDefined(angular.mock))) {\n console.error(\"No module found during bootstrap, unable to init ocLazyLoad. You should always use the ng-app directive or angular.boostrap when you use ocLazyLoad.\");\n }\n\n var addReg = function addReg(moduleName) {\n if (regModules.indexOf(moduleName) === -1) {\n // register existing modules\n regModules.push(moduleName);\n var mainModule = angular.module(moduleName);\n\n // register existing components (directives, services, ...)\n _invokeQueue(null, mainModule._invokeQueue, moduleName);\n _invokeQueue(null, mainModule._configBlocks, moduleName); // angular 1.3+\n\n angular.forEach(mainModule.requires, addReg);\n }\n };\n\n angular.forEach(modulesToLoad, function (moduleName) {\n addReg(moduleName);\n });\n\n modulesToLoad = []; // reset for next bootstrap\n recordDeclarations.pop(); // wait for the next lazy load\n };\n\n /**\r\n * Like JSON.stringify but that doesn't throw on circular references\r\n * @param obj\r\n */\n var stringify = function stringify(obj) {\n var cache = [];\n return JSON.stringify(obj, function (key, value) {\n if (angular.isObject(value) && value !== null) {\n if (cache.indexOf(value) !== -1) {\n // Circular reference found, discard key\n return;\n }\n // Store value in our collection\n cache.push(value);\n }\n return value;\n });\n };\n\n var hashCode = function hashCode(str) {\n var hash = 0,\n i,\n chr,\n len;\n if (str.length == 0) {\n return hash;\n }\n for (i = 0, len = str.length; i < len; i++) {\n chr = str.charCodeAt(i);\n hash = (hash << 5) - hash + chr;\n hash |= 0; // Convert to 32bit integer\n }\n return hash;\n };\n\n function _register(providers, registerModules, params) {\n if (registerModules) {\n var k,\n moduleName,\n moduleFn,\n tempRunBlocks = [];\n for (k = registerModules.length - 1; k >= 0; k--) {\n moduleName = registerModules[k];\n if (!angular.isString(moduleName)) {\n moduleName = getModuleName(moduleName);\n }\n if (!moduleName || justLoaded.indexOf(moduleName) !== -1) {\n continue;\n }\n var newModule = regModules.indexOf(moduleName) === -1;\n moduleFn = ngModuleFct(moduleName);\n if (newModule) {\n // new module\n regModules.push(moduleName);\n _register(providers, moduleFn.requires, params);\n }\n if (moduleFn._runBlocks.length > 0) {\n // new run blocks detected! Replace the old ones (if existing)\n runBlocks[moduleName] = [];\n while (moduleFn._runBlocks.length > 0) {\n runBlocks[moduleName].push(moduleFn._runBlocks.shift());\n }\n }\n if (angular.isDefined(runBlocks[moduleName]) && (newModule || params.rerun)) {\n tempRunBlocks = tempRunBlocks.concat(runBlocks[moduleName]);\n }\n _invokeQueue(providers, moduleFn._invokeQueue, moduleName, params.reconfig);\n _invokeQueue(providers, moduleFn._configBlocks, moduleName, params.reconfig); // angular 1.3+\n broadcast(newModule ? \"ocLazyLoad.moduleLoaded\" : \"ocLazyLoad.moduleReloaded\", moduleName);\n registerModules.pop();\n justLoaded.push(moduleName);\n }\n // execute the run blocks at the end\n var instanceInjector = providers.getInstanceInjector();\n angular.forEach(tempRunBlocks, function (fn) {\n instanceInjector.invoke(fn);\n });\n }\n }\n\n function _registerInvokeList(args, moduleName) {\n var invokeList = args[2][0],\n type = args[1],\n newInvoke = false;\n if (angular.isUndefined(regInvokes[moduleName])) {\n regInvokes[moduleName] = {};\n }\n if (angular.isUndefined(regInvokes[moduleName][type])) {\n regInvokes[moduleName][type] = {};\n }\n var onInvoke = function onInvoke(invokeName, signature) {\n newInvoke = true;\n regInvokes[moduleName][type][invokeName].push(signature);\n broadcast(\"ocLazyLoad.componentLoaded\", [moduleName, type, invokeName]);\n };\n\n function signature(data) {\n if (angular.isArray(data)) {\n // arrays are objects, we need to test for it first\n return hashCode(data.toString());\n } else if (angular.isObject(data)) {\n // constants & values for example\n return hashCode(stringify(data));\n } else {\n if (angular.isDefined(data) && data !== null) {\n return hashCode(data.toString());\n } else {\n // null & undefined constants\n return data;\n }\n }\n }\n\n if (angular.isString(invokeList)) {\n if (angular.isUndefined(regInvokes[moduleName][type][invokeList])) {\n regInvokes[moduleName][type][invokeList] = [];\n }\n if (regInvokes[moduleName][type][invokeList].indexOf(signature(args[2][1])) === -1) {\n onInvoke(invokeList, signature(args[2][1]));\n }\n } else if (angular.isObject(invokeList)) {\n // decorators for example\n angular.forEach(invokeList, function (invoke) {\n if (angular.isString(invoke)) {\n if (angular.isUndefined(regInvokes[moduleName][type][invoke])) {\n regInvokes[moduleName][type][invoke] = [];\n }\n if (regInvokes[moduleName][type][invoke].indexOf(signature(invokeList[1])) === -1) {\n onInvoke(invoke, signature(invokeList[1]));\n }\n }\n });\n } else {\n return false;\n }\n return newInvoke;\n }\n\n function _invokeQueue(providers, queue, moduleName, reconfig) {\n if (!queue) {\n return;\n }\n\n var i, len, args, provider;\n for (i = 0, len = queue.length; i < len; i++) {\n args = queue[i];\n if (angular.isArray(args)) {\n if (providers !== null) {\n if (providers.hasOwnProperty(args[0])) {\n provider = providers[args[0]];\n } else {\n throw new Error(\"unsupported provider \" + args[0]);\n }\n }\n var isNew = _registerInvokeList(args, moduleName);\n if (args[1] !== \"invoke\") {\n if (isNew && angular.isDefined(provider)) {\n provider[args[1]].apply(provider, args[2]);\n }\n } else {\n // config block\n var callInvoke = function callInvoke(fct) {\n var invoked = regConfigs.indexOf(moduleName + \"-\" + fct);\n if (invoked === -1 || reconfig) {\n if (invoked === -1) {\n regConfigs.push(moduleName + \"-\" + fct);\n }\n if (angular.isDefined(provider)) {\n provider[args[1]].apply(provider, args[2]);\n }\n }\n };\n if (angular.isFunction(args[2][0])) {\n callInvoke(args[2][0]);\n } else if (angular.isArray(args[2][0])) {\n for (var j = 0, jlen = args[2][0].length; j < jlen; j++) {\n if (angular.isFunction(args[2][0][j])) {\n callInvoke(args[2][0][j]);\n }\n }\n }\n }\n }\n }\n }\n\n function getModuleName(module) {\n var moduleName = null;\n if (angular.isString(module)) {\n moduleName = module;\n } else if (angular.isObject(module) && module.hasOwnProperty(\"name\") && angular.isString(module.name)) {\n moduleName = module.name;\n }\n return moduleName;\n }\n\n function moduleExists(moduleName) {\n if (!angular.isString(moduleName)) {\n return false;\n }\n try {\n return ngModuleFct(moduleName);\n } catch (e) {\n if (/No module/.test(e) || e.message.indexOf(\"$injector:nomod\") > -1) {\n return false;\n }\n }\n }\n\n this.$get = [\"$log\", \"$rootElement\", \"$rootScope\", \"$cacheFactory\", \"$q\", function ($log, $rootElement, $rootScope, $cacheFactory, $q) {\n var instanceInjector,\n filesCache = $cacheFactory(\"ocLazyLoad\");\n\n if (!debug) {\n $log = {};\n $log.error = angular.noop;\n $log.warn = angular.noop;\n $log.info = angular.noop;\n }\n\n // Make this lazy because when $get() is called the instance injector hasn't been assigned to the rootElement yet\n providers.getInstanceInjector = function () {\n return instanceInjector ? instanceInjector : instanceInjector = $rootElement.data(\"$injector\") || angular.injector();\n };\n\n broadcast = function broadcast(eventName, params) {\n if (events) {\n $rootScope.$broadcast(eventName, params);\n }\n if (debug) {\n $log.info(eventName, params);\n }\n };\n\n function reject(e) {\n var deferred = $q.defer();\n $log.error(e.message);\n deferred.reject(e);\n return deferred.promise;\n }\n\n return {\n _broadcast: broadcast,\n\n _$log: $log,\n\n /**\r\n * Returns the files cache used by the loaders to store the files currently loading\r\n * @returns {*}\r\n */\n _getFilesCache: function getFilesCache() {\n return filesCache;\n },\n\n /**\r\n * Let the service know that it should monitor angular.module because files are loading\r\n * @param watch boolean\r\n */\n toggleWatch: function toggleWatch(watch) {\n if (watch) {\n recordDeclarations.push(true);\n } else {\n recordDeclarations.pop();\n }\n },\n\n /**\r\n * Let you get a module config object\r\n * @param moduleName String the name of the module\r\n * @returns {*}\r\n */\n getModuleConfig: function getModuleConfig(moduleName) {\n if (!angular.isString(moduleName)) {\n throw new Error(\"You need to give the name of the module to get\");\n }\n if (!modules[moduleName]) {\n return null;\n }\n return angular.copy(modules[moduleName]);\n },\n\n /**\r\n * Let you define a module config object\r\n * @param moduleConfig Object the module config object\r\n * @returns {*}\r\n */\n setModuleConfig: function setModuleConfig(moduleConfig) {\n if (!angular.isObject(moduleConfig)) {\n throw new Error(\"You need to give the module config object to set\");\n }\n modules[moduleConfig.name] = moduleConfig;\n return moduleConfig;\n },\n\n /**\r\n * Returns the list of loaded modules\r\n * @returns {string[]}\r\n */\n getModules: function () {\n return regModules;\n },\n\n /**\r\n * Let you check if a module has been loaded into Angular or not\r\n * @param modulesNames String/Object a module name, or a list of module names\r\n * @returns {boolean}\r\n */\n isLoaded: function isLoaded(modulesNames) {\n var moduleLoaded = function moduleLoaded(module) {\n var isLoaded = regModules.indexOf(module) > -1;\n if (!isLoaded) {\n isLoaded = !!moduleExists(module);\n }\n return isLoaded;\n };\n if (angular.isString(modulesNames)) {\n modulesNames = [modulesNames];\n }\n if (angular.isArray(modulesNames)) {\n var i, len;\n for (i = 0, len = modulesNames.length; i < len; i++) {\n if (!moduleLoaded(modulesNames[i])) {\n return false;\n }\n }\n return true;\n } else {\n throw new Error(\"You need to define the module(s) name(s)\");\n }\n },\n\n /**\r\n * Given a module, return its name\r\n * @param module\r\n * @returns {String}\r\n */\n _getModuleName: getModuleName,\n\n /**\r\n * Returns a module if it exists\r\n * @param moduleName\r\n * @returns {module}\r\n */\n _getModule: function getModule(moduleName) {\n try {\n return ngModuleFct(moduleName);\n } catch (e) {\n // this error message really suxx\n if (/No module/.test(e) || e.message.indexOf(\"$injector:nomod\") > -1) {\n e.message = \"The module \\\"\" + stringify(moduleName) + \"\\\" that you are trying to load does not exist. \" + e.message;\n }\n throw e;\n }\n },\n\n /**\r\n * Check if a module exists and returns it if it does\r\n * @param moduleName\r\n * @returns {boolean}\r\n */\n moduleExists: moduleExists,\n\n /**\r\n * Load the dependencies, and might try to load new files depending on the config\r\n * @param moduleName (String or Array of Strings)\r\n * @param localParams\r\n * @returns {*}\r\n * @private\r\n */\n _loadDependencies: function _loadDependencies(moduleName, localParams) {\n var loadedModule,\n requires,\n diff,\n promisesList = [],\n self = this;\n\n moduleName = self._getModuleName(moduleName);\n\n if (moduleName === null) {\n return $q.when();\n } else {\n try {\n loadedModule = self._getModule(moduleName);\n } catch (e) {\n return reject(e);\n }\n // get unloaded requires\n requires = self.getRequires(loadedModule);\n }\n\n angular.forEach(requires, function (requireEntry) {\n // If no configuration is provided, try and find one from a previous load.\n // If there isn't one, bail and let the normal flow run\n if (angular.isString(requireEntry)) {\n var config = self.getModuleConfig(requireEntry);\n if (config === null) {\n moduleCache.push(requireEntry); // We don't know about this module, but something else might, so push it anyway.\n return;\n }\n requireEntry = config;\n }\n\n // Check if this dependency has been loaded previously\n if (self.moduleExists(requireEntry.name)) {\n // compare against the already loaded module to see if the new definition adds any new files\n diff = requireEntry.files.filter(function (n) {\n return self.getModuleConfig(requireEntry.name).files.indexOf(n) < 0;\n });\n\n // If the module was redefined, advise via the console\n if (diff.length !== 0) {\n self._$log.warn(\"Module \\\"\", moduleName, \"\\\" attempted to redefine configuration for dependency. \\\"\", requireEntry.name, \"\\\"\\n Additional Files Loaded:\", diff);\n }\n\n // Push everything to the file loader, it will weed out the duplicates.\n if (angular.isDefined(self.filesLoader)) {\n // if a files loader is defined\n promisesList.push(self.filesLoader(requireEntry, localParams).then(function () {\n return self._loadDependencies(requireEntry);\n }));\n } else {\n return reject(new Error(\"Error: New dependencies need to be loaded from external files (\" + requireEntry.files + \"), but no loader has been defined.\"));\n }\n return;\n } else if (angular.isArray(requireEntry)) {\n requireEntry = {\n files: requireEntry\n };\n } else if (angular.isObject(requireEntry)) {\n if (requireEntry.hasOwnProperty(\"name\") && requireEntry.name) {\n // The dependency doesn't exist in the module cache and is a new configuration, so store and push it.\n self.setModuleConfig(requireEntry);\n moduleCache.push(requireEntry.name);\n }\n }\n\n // Check if the dependency has any files that need to be loaded. If there are, push a new promise to the promise list.\n if (angular.isDefined(requireEntry.files) && requireEntry.files.length !== 0) {\n if (angular.isDefined(self.filesLoader)) {\n // if a files loader is defined\n promisesList.push(self.filesLoader(requireEntry, localParams).then(function () {\n return self._loadDependencies(requireEntry);\n }));\n } else {\n return reject(new Error(\"Error: the module \\\"\" + requireEntry.name + \"\\\" is defined in external files (\" + requireEntry.files + \"), but no loader has been defined.\"));\n }\n }\n });\n\n // Create a wrapper promise to watch the promise list and resolve it once everything is done.\n return $q.all(promisesList);\n },\n\n /**\r\n * Inject new modules into Angular\r\n * @param moduleName\r\n * @param localParams\r\n */\n inject: function inject(moduleName, localParams) {\n var self = this,\n deferred = $q.defer();\n if (angular.isDefined(moduleName) && moduleName !== null) {\n if (angular.isArray(moduleName)) {\n var promisesList = [];\n angular.forEach(moduleName, function (module) {\n promisesList.push(self.inject(module));\n });\n return $q.all(promisesList);\n } else {\n self._addToLoadList(self._getModuleName(moduleName), true);\n }\n }\n if (modulesToLoad.length > 0) {\n var res = modulesToLoad.slice(); // clean copy\n var loadNext = function loadNext(moduleName) {\n moduleCache.push(moduleName);\n self._loadDependencies(moduleName, localParams).then(function success() {\n try {\n justLoaded = [];\n _register(providers, moduleCache, localParams);\n } catch (e) {\n self._$log.error(e.message);\n deferred.reject(e);\n return;\n }\n\n if (modulesToLoad.length > 0) {\n loadNext(modulesToLoad.shift()); // load the next in list\n } else {\n deferred.resolve(res); // everything has been loaded, resolve\n }\n }, function error(err) {\n deferred.reject(err);\n });\n };\n\n // load the first in list\n loadNext(modulesToLoad.shift());\n } else {\n deferred.resolve();\n }\n return deferred.promise;\n },\n\n /**\r\n * Get the list of required modules/services/... for this module\r\n * @param module\r\n * @returns {Array}\r\n */\n getRequires: function getRequires(module) {\n var requires = [];\n angular.forEach(module.requires, function (requireModule) {\n if (regModules.indexOf(requireModule) === -1) {\n requires.push(requireModule);\n }\n });\n return requires;\n },\n\n /**\r\n * Invoke the new modules & component by their providers\r\n * @param providers\r\n * @param queue\r\n * @param moduleName\r\n * @param reconfig\r\n * @private\r\n */\n _invokeQueue: _invokeQueue,\n\n /**\r\n * Check if a module has been invoked and registers it if not\r\n * @param args\r\n * @param moduleName\r\n * @returns {boolean} is new\r\n */\n _registerInvokeList: _registerInvokeList,\n\n /**\r\n * Register a new module and loads it, executing the run/config blocks if needed\r\n * @param providers\r\n * @param registerModules\r\n * @param params\r\n * @private\r\n */\n _register: _register,\n\n /**\r\n * Add a module name to the list of modules that will be loaded in the next inject\r\n * @param name\r\n * @param force\r\n * @private\r\n */\n _addToLoadList: _addToLoadList\n };\n }];\n\n // Let's get the list of loaded modules & components\n this._init(angular.element(window.document));\n }]);\n\n var bootstrapFct = angular.bootstrap;\n angular.bootstrap = function (element, modules, config) {\n // we use slice to make a clean copy\n angular.forEach(modules.slice(), function (module) {\n _addToLoadList(module, true);\n });\n return bootstrapFct(element, modules, config);\n };\n\n var _addToLoadList = function _addToLoadList(name, force) {\n if ((recordDeclarations.length > 0 || force) && angular.isString(name) && modulesToLoad.indexOf(name) === -1) {\n modulesToLoad.push(name);\n }\n };\n\n var ngModuleFct = angular.module;\n angular.module = function (name, requires, configFn) {\n _addToLoadList(name);\n return ngModuleFct(name, requires, configFn);\n };\n})(angular, window);\n(function (angular) {\n \"use strict\";\n\n angular.module(\"oc.lazyLoad\").directive(\"ocLazyLoad\", [\"$ocLazyLoad\", \"$compile\", \"$animate\", \"$parse\", function ($ocLazyLoad, $compile, $animate, $parse) {\n return {\n restrict: \"A\",\n terminal: true,\n priority: 1000,\n compile: function compile(element, attrs) {\n // we store the content and remove it before compilation\n var content = element[0].innerHTML;\n element.html(\"\");\n\n return function ($scope, $element, $attr) {\n var model = $parse($attr.ocLazyLoad);\n $scope.$watch(function () {\n return model($scope) || $attr.ocLazyLoad; // it can be a module name (string), an object, an array, or a scope reference to any of this\n }, function (moduleName) {\n if (angular.isDefined(moduleName)) {\n $ocLazyLoad.load(moduleName).then(function success() {\n $animate.enter($compile(content)($scope), $element);\n });\n }\n }, true);\n };\n }\n };\n }]);\n})(angular);\n(function (angular) {\n \"use strict\";\n\n angular.module(\"oc.lazyLoad\").config([\"$provide\", function ($provide) {\n $provide.decorator(\"$ocLazyLoad\", [\"$delegate\", \"$q\", \"$window\", \"$interval\", function ($delegate, $q, $window, $interval) {\n var uaCssChecked = false,\n useCssLoadPatch = false,\n anchor = $window.document.getElementsByTagName(\"head\")[0] || $window.document.getElementsByTagName(\"body\")[0];\n\n /**\r\n * Load a js/css file\r\n * @param type\r\n * @param path\r\n * @param params\r\n * @returns promise\r\n */\n $delegate.buildElement = function buildElement(type, path, params) {\n var deferred = $q.defer(),\n el,\n loaded,\n filesCache = $delegate._getFilesCache(),\n cacheBuster = function cacheBuster(url) {\n var dc = new Date().getTime();\n if (url.indexOf(\"?\") >= 0) {\n if (url.substring(0, url.length - 1) === \"&\") {\n return url + \"_dc=\" + dc;\n }\n return url + \"&_dc=\" + dc;\n } else {\n return url + \"?_dc=\" + dc;\n }\n };\n\n // Store the promise early so the file load can be detected by other parallel lazy loads\n // (ie: multiple routes on one page) a 'true' value isn't sufficient\n // as it causes false positive load results.\n if (angular.isUndefined(filesCache.get(path))) {\n filesCache.put(path, deferred.promise);\n }\n\n // Switch in case more content types are added later\n switch (type) {\n case \"css\":\n el = $window.document.createElement(\"link\");\n el.type = \"text/css\";\n el.rel = \"stylesheet\";\n el.href = params.cache === false ? cacheBuster(path) : path;\n break;\n case \"js\":\n el = $window.document.createElement(\"script\");\n el.src = params.cache === false ? cacheBuster(path) : path;\n break;\n default:\n deferred.reject(new Error(\"Requested type \\\"\" + type + \"\\\" is not known. Could not inject \\\"\" + path + \"\\\"\"));\n break;\n }\n el.onload = el.onreadystatechange = function (e) {\n if (el.readyState && !/^c|loade/.test(el.readyState) || loaded) return;\n el.onload = el.onreadystatechange = null;\n loaded = 1;\n $delegate._broadcast(\"ocLazyLoad.fileLoaded\", path);\n deferred.resolve();\n };\n el.onerror = function () {\n deferred.reject(new Error(\"Unable to load \" + path));\n };\n el.async = params.serie ? 0 : 1;\n\n var insertBeforeElem = anchor.lastChild;\n if (params.insertBefore) {\n var element = angular.element(params.insertBefore);\n if (element && element.length > 0) {\n insertBeforeElem = element[0];\n }\n }\n anchor.insertBefore(el, insertBeforeElem);\n\n /*\r\n The event load or readystatechange doesn't fire in:\r\n - iOS < 6 (default mobile browser)\r\n - Android < 4.4 (default mobile browser)\r\n - Safari < 6 (desktop browser)\r\n */\n if (type == \"css\") {\n if (!uaCssChecked) {\n var ua = $window.navigator.userAgent.toLowerCase();\n\n // iOS < 6\n if (/iP(hone|od|ad)/.test($window.navigator.platform)) {\n var v = $window.navigator.appVersion.match(/OS (\\d+)_(\\d+)_?(\\d+)?/);\n var iOSVersion = parseFloat([parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)].join(\".\"));\n useCssLoadPatch = iOSVersion < 6;\n } else if (ua.indexOf(\"android\") > -1) {\n // Android < 4.4\n var androidVersion = parseFloat(ua.slice(ua.indexOf(\"android\") + 8));\n useCssLoadPatch = androidVersion < 4.4;\n } else if (ua.indexOf(\"safari\") > -1 && ua.indexOf(\"chrome\") == -1 && ua.indexOf(\"phantomjs\") == -1) {\n var safariVersion = parseFloat(ua.match(/version\\/([\\.\\d]+)/i)[1]);\n useCssLoadPatch = safariVersion < 6;\n }\n }\n\n if (useCssLoadPatch) {\n var tries = 1000; // * 20 = 20000 miliseconds\n var interval = $interval(function () {\n try {\n el.sheet.cssRules;\n $interval.cancel(interval);\n el.onload();\n } catch (e) {\n if (--tries <= 0) {\n el.onerror();\n }\n }\n }, 20);\n }\n }\n\n return deferred.promise;\n };\n\n return $delegate;\n }]);\n }]);\n})(angular);\n(function (angular) {\n \"use strict\";\n\n angular.module(\"oc.lazyLoad\").config([\"$provide\", function ($provide) {\n $provide.decorator(\"$ocLazyLoad\", [\"$delegate\", \"$q\", function ($delegate, $q) {\n /**\n * The function that loads new files\n * @param config\n * @param params\n * @returns {*}\n */\n $delegate.filesLoader = function filesLoader(config) {\n var originalParams = arguments[1] === undefined ? {} : arguments[1];\n\n var cssFiles = [],\n templatesFiles = [],\n jsFiles = [],\n promises = [],\n cachePromise = null,\n filesCache = $delegate._getFilesCache();\n\n $delegate.toggleWatch(true); // start watching angular.module calls\n\n // we need a real copy because we might edit some parts of it\n var params = angular.copy(angular.extend({}, originalParams, config));\n\n var pushFile = function pushFile(path) {\n var file_type = null,\n m;\n if (angular.isObject(path)) {\n file_type = path.type;\n path = path.path;\n }\n cachePromise = filesCache.get(path);\n if (angular.isUndefined(cachePromise) || params.cache === false) {\n\n // always check for requirejs syntax just in case\n if ((m = /^(css|less|html|htm|js)?(?=!)/.exec(path)) !== null) {\n // Detect file type using preceding type declaration (ala requireJS)\n file_type = m[1];\n path = path.substr(m[1].length + 1, path.length); // Strip the type from the path\n }\n\n if (!file_type) {\n if ((m = /[.](css|less|html|htm|js)?((\\?|#).*)?$/.exec(path)) !== null) {\n // Detect file type via file extension\n file_type = m[1];\n } else if (!$delegate.jsLoader.hasOwnProperty(\"ocLazyLoadLoader\") && $delegate.jsLoader.hasOwnProperty(\"load\")) {\n // requirejs\n file_type = \"js\";\n } else {\n $delegate._$log.error(\"File type could not be determined. \" + path);\n return;\n }\n }\n\n if ((file_type === \"css\" || file_type === \"less\") && cssFiles.indexOf(path) === -1) {\n cssFiles.push(path);\n } else if ((file_type === \"html\" || file_type === \"htm\") && templatesFiles.indexOf(path) === -1) {\n templatesFiles.push(path);\n } else if (file_type === \"js\" || jsFiles.indexOf(path) === -1) {\n jsFiles.push(path);\n } else {\n $delegate._$log.error(\"File type is not valid. \" + path);\n }\n } else if (cachePromise) {\n promises.push(cachePromise);\n }\n };\n\n if (params.serie) {\n pushFile(params.files.shift());\n } else {\n angular.forEach(params.files, function (path) {\n pushFile(path);\n });\n }\n\n if (cssFiles.length > 0) {\n var cssDeferred = $q.defer();\n $delegate.cssLoader(cssFiles, function (err) {\n if (angular.isDefined(err) && $delegate.cssLoader.hasOwnProperty(\"ocLazyLoadLoader\")) {\n $delegate._$log.error(err);\n cssDeferred.reject(err);\n } else {\n cssDeferred.resolve();\n }\n }, params);\n promises.push(cssDeferred.promise);\n }\n\n if (templatesFiles.length > 0) {\n var templatesDeferred = $q.defer();\n $delegate.templatesLoader(templatesFiles, function (err) {\n if (angular.isDefined(err) && $delegate.templatesLoader.hasOwnProperty(\"ocLazyLoadLoader\")) {\n $delegate._$log.error(err);\n templatesDeferred.reject(err);\n } else {\n templatesDeferred.resolve();\n }\n }, params);\n promises.push(templatesDeferred.promise);\n }\n\n if (jsFiles.length > 0) {\n var jsDeferred = $q.defer();\n $delegate.jsLoader(jsFiles, function (err) {\n if (angular.isDefined(err) && $delegate.jsLoader.hasOwnProperty(\"ocLazyLoadLoader\")) {\n $delegate._$log.error(err);\n jsDeferred.reject(err);\n } else {\n jsDeferred.resolve();\n }\n }, params);\n promises.push(jsDeferred.promise);\n }\n\n if (params.serie && params.files.length > 0) {\n return $q.all(promises).then(function success() {\n return $delegate.filesLoader(config, params);\n });\n } else {\n return $q.all(promises)[\"finally\"](function (res) {\n $delegate.toggleWatch(false); // stop watching angular.module calls\n return res;\n });\n }\n };\n\n /**\n * Load a module or a list of modules into Angular\n * @param module Mixed the name of a predefined module config object, or a module config object, or an array of either\n * @param params Object optional parameters\n * @returns promise\n */\n $delegate.load = function (module) {\n var params = arguments[1] === undefined ? {} : arguments[1];\n\n var self = this,\n config = null,\n deferredList = [],\n deferred = $q.defer(),\n errText;\n\n // If module is an array, break it down\n if (angular.isArray(module)) {\n // Resubmit each entry as a single module\n angular.forEach(module, function (m) {\n deferredList.push(self.load(m, params));\n });\n\n // Resolve the promise once everything has loaded\n $q.all(deferredList).then(function success(res) {\n deferred.resolve(res);\n }, function error(err) {\n deferred.reject(err);\n });\n\n return deferred.promise;\n }\n\n // Get or Set a configuration depending on what was passed in\n if (angular.isString(module)) {\n config = self.getModuleConfig(module);\n if (!config) {\n config = {\n files: [module]\n };\n }\n } else if (angular.isObject(module)) {\n // case {type: 'js', path: lazyLoadUrl + 'testModule.fakejs'}\n if (angular.isDefined(module.path) && angular.isDefined(module.type)) {\n config = {\n files: [module]\n };\n } else {\n config = self.setModuleConfig(module);\n }\n }\n\n if (config === null) {\n var moduleName = self._getModuleName(module);\n errText = \"Module \\\"\" + (moduleName || \"unknown\") + \"\\\" is not configured, cannot load.\";\n $delegate._$log.error(errText);\n deferred.reject(new Error(errText));\n return deferred.promise;\n } else {\n // deprecated\n if (angular.isDefined(config.template)) {\n if (angular.isUndefined(config.files)) {\n config.files = [];\n }\n if (angular.isString(config.template)) {\n config.files.push(config.template);\n } else if (angular.isArray(config.template)) {\n config.files.concat(config.template);\n }\n }\n }\n\n var localParams = {};\n angular.extend(localParams, params, config);\n\n // if someone used an external loader and called the load function with just the module name\n if (angular.isUndefined(config.files) && angular.isDefined(config.name) && $delegate.moduleExists(config.name)) {\n return $delegate.inject(config.name, localParams);\n }\n\n $delegate.filesLoader(config, localParams).then(function success() {\n $delegate.inject(null, localParams).then(function (res) {\n deferred.resolve(res);\n }, function (err) {\n deferred.reject(err);\n });\n }, function error(err) {\n deferred.reject(err);\n });\n\n return deferred.promise;\n };\n\n // return the patched service\n return $delegate;\n }]);\n }]);\n})(angular);\n(function (angular) {\n \"use strict\";\n\n angular.module(\"oc.lazyLoad\").config([\"$provide\", function ($provide) {\n $provide.decorator(\"$ocLazyLoad\", [\"$delegate\", \"$q\", function ($delegate, $q) {\n /**\r\n * cssLoader function\r\n * @type Function\r\n * @param paths array list of css files to load\r\n * @param callback to call when everything is loaded. We use a callback and not a promise\r\n * @param params object config parameters\r\n * because the user can overwrite cssLoader and it will probably not use promises :(\r\n */\n $delegate.cssLoader = function (paths, callback, params) {\n var promises = [];\n angular.forEach(paths, function loading(path) {\n promises.push($delegate.buildElement(\"css\", path, params));\n });\n $q.all(promises).then(function success() {\n callback();\n }, function (err) {\n callback(err);\n });\n };\n $delegate.cssLoader.ocLazyLoadLoader = true;\n\n return $delegate;\n }]);\n }]);\n})(angular);\n(function (angular) {\n \"use strict\";\n\n angular.module(\"oc.lazyLoad\").config([\"$provide\", function ($provide) {\n $provide.decorator(\"$ocLazyLoad\", [\"$delegate\", \"$q\", function ($delegate, $q) {\n /**\r\n * jsLoader function\r\n * @type Function\r\n * @param paths array list of js files to load\r\n * @param callback to call when everything is loaded. We use a callback and not a promise\r\n * @param params object config parameters\r\n * because the user can overwrite jsLoader and it will probably not use promises :(\r\n */\n $delegate.jsLoader = function (paths, callback, params) {\n var promises = [];\n angular.forEach(paths, function loading(path) {\n promises.push($delegate.buildElement(\"js\", path, params));\n });\n $q.all(promises).then(function success() {\n callback();\n }, function error(err) {\n callback(err);\n });\n };\n $delegate.jsLoader.ocLazyLoadLoader = true;\n\n return $delegate;\n }]);\n }]);\n})(angular);\n(function (angular) {\n \"use strict\";\n\n angular.module(\"oc.lazyLoad\").config([\"$provide\", function ($provide) {\n $provide.decorator(\"$ocLazyLoad\", [\"$delegate\", \"$templateCache\", \"$q\", \"$http\", function ($delegate, $templateCache, $q, $http) {\n /**\r\n * templatesLoader function\r\n * @type Function\r\n * @param paths array list of css files to load\r\n * @param callback to call when everything is loaded. We use a callback and not a promise\r\n * @param params object config parameters for $http\r\n * because the user can overwrite templatesLoader and it will probably not use promises :(\r\n */\n $delegate.templatesLoader = function (paths, callback, params) {\n var promises = [],\n filesCache = $delegate._getFilesCache();\n\n angular.forEach(paths, function (url) {\n var deferred = $q.defer();\n promises.push(deferred.promise);\n $http.get(url, params).success(function (data) {\n if (angular.isString(data) && data.length > 0) {\n angular.forEach(angular.element(data), function (node) {\n if (node.nodeName === \"SCRIPT\" && node.type === \"text/ng-template\") {\n $templateCache.put(node.id, node.innerHTML);\n }\n });\n }\n if (angular.isUndefined(filesCache.get(url))) {\n filesCache.put(url, true);\n }\n deferred.resolve();\n }).error(function (err) {\n deferred.reject(new Error(\"Unable to load template file \\\"\" + url + \"\\\": \" + err));\n });\n });\n return $q.all(promises).then(function success() {\n callback();\n }, function error(err) {\n callback(err);\n });\n };\n $delegate.templatesLoader.ocLazyLoadLoader = true;\n\n return $delegate;\n }]);\n }]);\n})(angular);\n// Array.indexOf polyfill for IE8\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement, fromIndex) {\n var k;\n\n // 1. Let O be the result of calling ToObject passing\n // the this value as the argument.\n if (this == null) {\n throw new TypeError(\"\\\"this\\\" is null or not defined\");\n }\n\n var O = Object(this);\n\n // 2. Let lenValue be the result of calling the Get\n // internal method of O with the argument \"length\".\n // 3. Let len be ToUint32(lenValue).\n var len = O.length >>> 0;\n\n // 4. If len is 0, return -1.\n if (len === 0) {\n return -1;\n }\n\n // 5. If argument fromIndex was passed let n be\n // ToInteger(fromIndex); else let n be 0.\n var n = +fromIndex || 0;\n\n if (Math.abs(n) === Infinity) {\n n = 0;\n }\n\n // 6. If n >= len, return -1.\n if (n >= len) {\n return -1;\n }\n\n // 7. If n >= 0, then Let k be n.\n // 8. Else, n<0, Let k be len - abs(n).\n // If k is less than 0, then let k be 0.\n k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);\n\n // 9. Repeat, while k < len\n while (k < len) {\n // a. Let Pk be ToString(k).\n // This is implicit for LHS operands of the in operator\n // b. Let kPresent be the result of calling the\n // HasProperty internal method of O with argument Pk.\n // This step can be combined with c\n // c. If kPresent is true, then\n // i. Let elementK be the result of calling the Get\n // internal method of O with the argument ToString(k).\n // ii. Let same be the result of applying the\n // Strict Equality Comparison Algorithm to\n // searchElement and elementK.\n // iii. If same is true, return k.\n if (k in O && O[k] === searchElement) {\n return k;\n }\n k++;\n }\n return -1;\n };\n}\n//# sourceMappingURL=ocLazyLoad.js.map"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["ocLazyLoad.js"],"names":["angular","window","regModules","regInvokes","regConfigs","modulesToLoad","recordDeclarations","broadcast","noop","runBlocks","justLoaded","ocLazyLoad","module","provider","$controllerProvider","$provide","$compileProvider","$filterProvider","$injector","$animateProvider","_register","providers","registerModules","params","k","moduleName","moduleFn","tempRunBlocks","length","isString","getModuleName","indexOf","newModule","ngModuleFct","push","requires","_runBlocks","shift","isDefined","rerun","concat","_invokeQueue","reconfig","_configBlocks","pop","instanceInjector","getInstanceInjector","forEach","fn","invoke","_registerInvokeList","args","signature","data","isArray","hashCode","toString","isObject","stringify","invokeList","type","newInvoke","isUndefined","onInvoke","invokeName","key","queue","i","len","hasOwnProperty","Error","isNew","apply","callInvoke","fct","invoked","isFunction","j","jlen","name","moduleExists","e","test","message","modules","debug","events","moduleCache","value","this","Array","prototype","arguments","config","moduleConfig","_init","element","elements","names","NG_APP_CLASS_REGEXP","append","elm","document","getElementById","replace","querySelectorAll","className","match","exec","attributes","attr","jasmine","mocha","mock","console","error","addReg","mainModule","obj","cache","JSON","str","chr","hash","charCodeAt","$get","$log","$rootElement","$rootScope","$cacheFactory","$q","reject","deferred","defer","promise","filesCache","warn","info","injector","eventName","$broadcast","_broadcast","_$log","_getFilesCache","toggleWatch","watch","getModuleConfig","copy","setModuleConfig","getModules","isLoaded","modulesNames","moduleLoaded","_getModuleName","_getModule","_loadDependencies","localParams","loadedModule","diff","promisesList","self","when","getRequires","requireEntry","files","filter","n","filesLoader","then","all","inject","_addToLoadList","res","slice","loadNext","resolve","err","requireModule","bootstrapFct","bootstrap","force","configFn","directive","$ocLazyLoad","$compile","$animate","$parse","restrict","terminal","priority","compile","content","innerHTML","html","$scope","$element","$attr","model","$watch","load","enter","decorator","$delegate","$window","$interval","uaCssChecked","useCssLoadPatch","anchor","getElementsByTagName","buildElement","path","el","loaded","cacheBuster","url","dc","Date","getTime","substring","get","put","createElement","rel","href","src","onload","onreadystatechange","readyState","onerror","async","serie","insertBeforeElem","lastChild","insertBefore","ua","navigator","userAgent","toLowerCase","platform","v","appVersion","iOSVersion","parseFloat","parseInt","join","androidVersion","safariVersion","tries","interval","sheet","cssRules","cancel","originalParams","undefined","cssFiles","templatesFiles","jsFiles","promises","cachePromise","extend","pushFile","m","file_type","substr","jsLoader","cssDeferred","cssLoader","templatesDeferred","templatesLoader","jsDeferred","errText","deferredList","template","paths","callback","ocLazyLoadLoader","$templateCache","$http","success","node","nodeName","id","searchElement","fromIndex","TypeError","O","Object","Infinity","Math","abs","max"],"mappings":"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","file":"ocLazyLoad.min.js","sourcesContent":["/**\n * oclazyload - Load modules on demand (lazy load) with angularJS\n * @version v1.0.0-alpha2\n * @link https://github.com/ocombe/ocLazyLoad\n * @license MIT\n * @author Olivier Combe \n */\n(function (angular, window) {\n \"use strict\";\n\n var regModules = [\"ng\", \"oc.lazyLoad\"],\n regInvokes = {},\n regConfigs = [],\n modulesToLoad = [],\n recordDeclarations = [],\n broadcast = angular.noop,\n runBlocks = {},\n justLoaded = [];\n\n var ocLazyLoad = angular.module(\"oc.lazyLoad\", [\"ng\"]);\n\n ocLazyLoad.provider(\"$ocLazyLoad\", [\"$controllerProvider\", \"$provide\", \"$compileProvider\", \"$filterProvider\", \"$injector\", \"$animateProvider\", function ($controllerProvider, $provide, $compileProvider, $filterProvider, $injector, $animateProvider) {\n var modules = {},\n providers = {\n $controllerProvider: $controllerProvider,\n $compileProvider: $compileProvider,\n $filterProvider: $filterProvider,\n $provide: $provide, // other things\n $injector: $injector,\n $animateProvider: $animateProvider\n },\n debug = false,\n events = false,\n moduleCache = [];\n\n moduleCache.push = function (value) {\n if (this.indexOf(value) === -1) {\n Array.prototype.push.apply(this, arguments);\n }\n };\n\n this.config = function (config) {\n // If we want to define modules configs\n if (angular.isDefined(config.modules)) {\n if (angular.isArray(config.modules)) {\n angular.forEach(config.modules, function (moduleConfig) {\n modules[moduleConfig.name] = moduleConfig;\n });\n } else {\n modules[config.modules.name] = config.modules;\n }\n }\n\n if (angular.isDefined(config.debug)) {\n debug = config.debug;\n }\n\n if (angular.isDefined(config.events)) {\n events = config.events;\n }\n };\n\n /**\n * Get the list of existing registered modules\n * @param element\n */\n this._init = function _init(element) {\n // this is probably useless now because we override angular.bootstrap\n if (modulesToLoad.length === 0) {\n var elements = [element],\n names = [\"ng:app\", \"ng-app\", \"x-ng-app\", \"data-ng-app\"],\n NG_APP_CLASS_REGEXP = /\\sng[:\\-]app(:\\s*([\\w\\d_]+);?)?\\s/,\n append = function append(elm) {\n return elm && elements.push(elm);\n };\n\n angular.forEach(names, function (name) {\n names[name] = true;\n append(document.getElementById(name));\n name = name.replace(\":\", \"\\\\:\");\n if (element[0].querySelectorAll) {\n angular.forEach(element[0].querySelectorAll(\".\" + name), append);\n angular.forEach(element[0].querySelectorAll(\".\" + name + \"\\\\:\"), append);\n angular.forEach(element[0].querySelectorAll(\"[\" + name + \"]\"), append);\n }\n });\n\n angular.forEach(elements, function (elm) {\n if (modulesToLoad.length === 0) {\n var className = \" \" + element.className + \" \";\n var match = NG_APP_CLASS_REGEXP.exec(className);\n if (match) {\n modulesToLoad.push((match[2] || \"\").replace(/\\s+/g, \",\"));\n } else {\n angular.forEach(elm.attributes, function (attr) {\n if (modulesToLoad.length === 0 && names[attr.name]) {\n modulesToLoad.push(attr.value);\n }\n });\n }\n }\n });\n }\n\n if (modulesToLoad.length === 0 && !((window.jasmine || window.mocha) && angular.isDefined(angular.mock))) {\n console.error(\"No module found during bootstrap, unable to init ocLazyLoad. You should always use the ng-app directive or angular.boostrap when you use ocLazyLoad.\");\n }\n\n var addReg = function addReg(moduleName) {\n if (regModules.indexOf(moduleName) === -1) {\n // register existing modules\n regModules.push(moduleName);\n var mainModule = angular.module(moduleName);\n\n // register existing components (directives, services, ...)\n _invokeQueue(null, mainModule._invokeQueue, moduleName);\n _invokeQueue(null, mainModule._configBlocks, moduleName); // angular 1.3+\n\n angular.forEach(mainModule.requires, addReg);\n }\n };\n\n angular.forEach(modulesToLoad, function (moduleName) {\n addReg(moduleName);\n });\n\n modulesToLoad = []; // reset for next bootstrap\n recordDeclarations.pop(); // wait for the next lazy load\n };\n\n /**\n * Like JSON.stringify but that doesn't throw on circular references\n * @param obj\n */\n var stringify = function stringify(obj) {\n var cache = [];\n return JSON.stringify(obj, function (key, value) {\n if (angular.isObject(value) && value !== null) {\n if (cache.indexOf(value) !== -1) {\n // Circular reference found, discard key\n return;\n }\n // Store value in our collection\n cache.push(value);\n }\n return value;\n });\n };\n\n var hashCode = function hashCode(str) {\n var hash = 0,\n i,\n chr,\n len;\n if (str.length == 0) {\n return hash;\n }\n for (i = 0, len = str.length; i < len; i++) {\n chr = str.charCodeAt(i);\n hash = (hash << 5) - hash + chr;\n hash |= 0; // Convert to 32bit integer\n }\n return hash;\n };\n\n function _register(providers, registerModules, params) {\n if (registerModules) {\n var k,\n moduleName,\n moduleFn,\n tempRunBlocks = [];\n for (k = registerModules.length - 1; k >= 0; k--) {\n moduleName = registerModules[k];\n if (!angular.isString(moduleName)) {\n moduleName = getModuleName(moduleName);\n }\n if (!moduleName || justLoaded.indexOf(moduleName) !== -1) {\n continue;\n }\n var newModule = regModules.indexOf(moduleName) === -1;\n moduleFn = ngModuleFct(moduleName);\n if (newModule) {\n // new module\n regModules.push(moduleName);\n _register(providers, moduleFn.requires, params);\n }\n if (moduleFn._runBlocks.length > 0) {\n // new run blocks detected! Replace the old ones (if existing)\n runBlocks[moduleName] = [];\n while (moduleFn._runBlocks.length > 0) {\n runBlocks[moduleName].push(moduleFn._runBlocks.shift());\n }\n }\n if (angular.isDefined(runBlocks[moduleName]) && (newModule || params.rerun)) {\n tempRunBlocks = tempRunBlocks.concat(runBlocks[moduleName]);\n }\n _invokeQueue(providers, moduleFn._invokeQueue, moduleName, params.reconfig);\n _invokeQueue(providers, moduleFn._configBlocks, moduleName, params.reconfig); // angular 1.3+\n broadcast(newModule ? \"ocLazyLoad.moduleLoaded\" : \"ocLazyLoad.moduleReloaded\", moduleName);\n registerModules.pop();\n justLoaded.push(moduleName);\n }\n // execute the run blocks at the end\n var instanceInjector = providers.getInstanceInjector();\n angular.forEach(tempRunBlocks, function (fn) {\n instanceInjector.invoke(fn);\n });\n }\n }\n\n function _registerInvokeList(args, moduleName) {\n var invokeList = args[2][0],\n type = args[1],\n newInvoke = false;\n if (angular.isUndefined(regInvokes[moduleName])) {\n regInvokes[moduleName] = {};\n }\n if (angular.isUndefined(regInvokes[moduleName][type])) {\n regInvokes[moduleName][type] = {};\n }\n var onInvoke = function onInvoke(invokeName, signature) {\n if (angular.isUndefined(regInvokes[moduleName][type][invokeName])) {\n regInvokes[moduleName][type][invokeName] = [];\n }\n if (regInvokes[moduleName][type][invokeName].indexOf(signature) === -1) {\n newInvoke = true;\n regInvokes[moduleName][type][invokeName].push(signature);\n broadcast(\"ocLazyLoad.componentLoaded\", [moduleName, type, invokeName]);\n }\n };\n\n function signature(data) {\n if (angular.isArray(data)) {\n // arrays are objects, we need to test for it first\n return hashCode(data.toString());\n } else if (angular.isObject(data)) {\n // constants & values for example\n return hashCode(stringify(data));\n } else {\n if (angular.isDefined(data) && data !== null) {\n return hashCode(data.toString());\n } else {\n // null & undefined constants\n return data;\n }\n }\n }\n\n if (angular.isString(invokeList)) {\n onInvoke(invokeList, signature(args[2][1]));\n } else if (angular.isObject(invokeList)) {\n angular.forEach(invokeList, function (invoke, key) {\n if (angular.isString(invoke)) {\n // decorators for example\n onInvoke(invoke, signature(invokeList[1]));\n } else {\n // components registered as object lists {\"componentName\": function() {}}\n onInvoke(key, signature(invoke));\n }\n });\n } else {\n return false;\n }\n return newInvoke;\n }\n\n function _invokeQueue(providers, queue, moduleName, reconfig) {\n if (!queue) {\n return;\n }\n\n var i, len, args, provider;\n for (i = 0, len = queue.length; i < len; i++) {\n args = queue[i];\n if (angular.isArray(args)) {\n if (providers !== null) {\n if (providers.hasOwnProperty(args[0])) {\n provider = providers[args[0]];\n } else {\n throw new Error(\"unsupported provider \" + args[0]);\n }\n }\n var isNew = _registerInvokeList(args, moduleName);\n if (args[1] !== \"invoke\") {\n if (isNew && angular.isDefined(provider)) {\n provider[args[1]].apply(provider, args[2]);\n }\n } else {\n // config block\n var callInvoke = function callInvoke(fct) {\n var invoked = regConfigs.indexOf(moduleName + \"-\" + fct);\n if (invoked === -1 || reconfig) {\n if (invoked === -1) {\n regConfigs.push(moduleName + \"-\" + fct);\n }\n if (angular.isDefined(provider)) {\n provider[args[1]].apply(provider, args[2]);\n }\n }\n };\n if (angular.isFunction(args[2][0])) {\n callInvoke(args[2][0]);\n } else if (angular.isArray(args[2][0])) {\n for (var j = 0, jlen = args[2][0].length; j < jlen; j++) {\n if (angular.isFunction(args[2][0][j])) {\n callInvoke(args[2][0][j]);\n }\n }\n }\n }\n }\n }\n }\n\n function getModuleName(module) {\n var moduleName = null;\n if (angular.isString(module)) {\n moduleName = module;\n } else if (angular.isObject(module) && module.hasOwnProperty(\"name\") && angular.isString(module.name)) {\n moduleName = module.name;\n }\n return moduleName;\n }\n\n function moduleExists(moduleName) {\n if (!angular.isString(moduleName)) {\n return false;\n }\n try {\n return ngModuleFct(moduleName);\n } catch (e) {\n if (/No module/.test(e) || e.message.indexOf(\"$injector:nomod\") > -1) {\n return false;\n }\n }\n }\n\n this.$get = [\"$log\", \"$rootElement\", \"$rootScope\", \"$cacheFactory\", \"$q\", function ($log, $rootElement, $rootScope, $cacheFactory, $q) {\n var instanceInjector,\n filesCache = $cacheFactory(\"ocLazyLoad\");\n\n if (!debug) {\n $log = {};\n $log.error = angular.noop;\n $log.warn = angular.noop;\n $log.info = angular.noop;\n }\n\n // Make this lazy because when $get() is called the instance injector hasn't been assigned to the rootElement yet\n providers.getInstanceInjector = function () {\n return instanceInjector ? instanceInjector : instanceInjector = $rootElement.data(\"$injector\") || angular.injector();\n };\n\n broadcast = function broadcast(eventName, params) {\n if (events) {\n $rootScope.$broadcast(eventName, params);\n }\n if (debug) {\n $log.info(eventName, params);\n }\n };\n\n function reject(e) {\n var deferred = $q.defer();\n $log.error(e.message);\n deferred.reject(e);\n return deferred.promise;\n }\n\n return {\n _broadcast: broadcast,\n\n _$log: $log,\n\n /**\n * Returns the files cache used by the loaders to store the files currently loading\n * @returns {*}\n */\n _getFilesCache: function getFilesCache() {\n return filesCache;\n },\n\n /**\n * Let the service know that it should monitor angular.module because files are loading\n * @param watch boolean\n */\n toggleWatch: function toggleWatch(watch) {\n if (watch) {\n recordDeclarations.push(true);\n } else {\n recordDeclarations.pop();\n }\n },\n\n /**\n * Let you get a module config object\n * @param moduleName String the name of the module\n * @returns {*}\n */\n getModuleConfig: function getModuleConfig(moduleName) {\n if (!angular.isString(moduleName)) {\n throw new Error(\"You need to give the name of the module to get\");\n }\n if (!modules[moduleName]) {\n return null;\n }\n return angular.copy(modules[moduleName]);\n },\n\n /**\n * Let you define a module config object\n * @param moduleConfig Object the module config object\n * @returns {*}\n */\n setModuleConfig: function setModuleConfig(moduleConfig) {\n if (!angular.isObject(moduleConfig)) {\n throw new Error(\"You need to give the module config object to set\");\n }\n modules[moduleConfig.name] = moduleConfig;\n return moduleConfig;\n },\n\n /**\n * Returns the list of loaded modules\n * @returns {string[]}\n */\n getModules: function () {\n return regModules;\n },\n\n /**\n * Let you check if a module has been loaded into Angular or not\n * @param modulesNames String/Object a module name, or a list of module names\n * @returns {boolean}\n */\n isLoaded: function isLoaded(modulesNames) {\n var moduleLoaded = function moduleLoaded(module) {\n var isLoaded = regModules.indexOf(module) > -1;\n if (!isLoaded) {\n isLoaded = !!moduleExists(module);\n }\n return isLoaded;\n };\n if (angular.isString(modulesNames)) {\n modulesNames = [modulesNames];\n }\n if (angular.isArray(modulesNames)) {\n var i, len;\n for (i = 0, len = modulesNames.length; i < len; i++) {\n if (!moduleLoaded(modulesNames[i])) {\n return false;\n }\n }\n return true;\n } else {\n throw new Error(\"You need to define the module(s) name(s)\");\n }\n },\n\n /**\n * Given a module, return its name\n * @param module\n * @returns {String}\n */\n _getModuleName: getModuleName,\n\n /**\n * Returns a module if it exists\n * @param moduleName\n * @returns {module}\n */\n _getModule: function getModule(moduleName) {\n try {\n return ngModuleFct(moduleName);\n } catch (e) {\n // this error message really suxx\n if (/No module/.test(e) || e.message.indexOf(\"$injector:nomod\") > -1) {\n e.message = \"The module \\\"\" + stringify(moduleName) + \"\\\" that you are trying to load does not exist. \" + e.message;\n }\n throw e;\n }\n },\n\n /**\n * Check if a module exists and returns it if it does\n * @param moduleName\n * @returns {boolean}\n */\n moduleExists: moduleExists,\n\n /**\n * Load the dependencies, and might try to load new files depending on the config\n * @param moduleName (String or Array of Strings)\n * @param localParams\n * @returns {*}\n * @private\n */\n _loadDependencies: function _loadDependencies(moduleName, localParams) {\n var loadedModule,\n requires,\n diff,\n promisesList = [],\n self = this;\n\n moduleName = self._getModuleName(moduleName);\n\n if (moduleName === null) {\n return $q.when();\n } else {\n try {\n loadedModule = self._getModule(moduleName);\n } catch (e) {\n return reject(e);\n }\n // get unloaded requires\n requires = self.getRequires(loadedModule);\n }\n\n angular.forEach(requires, function (requireEntry) {\n // If no configuration is provided, try and find one from a previous load.\n // If there isn't one, bail and let the normal flow run\n if (angular.isString(requireEntry)) {\n var config = self.getModuleConfig(requireEntry);\n if (config === null) {\n moduleCache.push(requireEntry); // We don't know about this module, but something else might, so push it anyway.\n return;\n }\n requireEntry = config;\n }\n\n // Check if this dependency has been loaded previously\n if (self.moduleExists(requireEntry.name)) {\n // compare against the already loaded module to see if the new definition adds any new files\n diff = requireEntry.files.filter(function (n) {\n return self.getModuleConfig(requireEntry.name).files.indexOf(n) < 0;\n });\n\n // If the module was redefined, advise via the console\n if (diff.length !== 0) {\n self._$log.warn(\"Module \\\"\", moduleName, \"\\\" attempted to redefine configuration for dependency. \\\"\", requireEntry.name, \"\\\"\\n Additional Files Loaded:\", diff);\n }\n\n // Push everything to the file loader, it will weed out the duplicates.\n if (angular.isDefined(self.filesLoader)) {\n // if a files loader is defined\n promisesList.push(self.filesLoader(requireEntry, localParams).then(function () {\n return self._loadDependencies(requireEntry);\n }));\n } else {\n return reject(new Error(\"Error: New dependencies need to be loaded from external files (\" + requireEntry.files + \"), but no loader has been defined.\"));\n }\n return;\n } else if (angular.isArray(requireEntry)) {\n requireEntry = {\n files: requireEntry\n };\n } else if (angular.isObject(requireEntry)) {\n if (requireEntry.hasOwnProperty(\"name\") && requireEntry.name) {\n // The dependency doesn't exist in the module cache and is a new configuration, so store and push it.\n self.setModuleConfig(requireEntry);\n moduleCache.push(requireEntry.name);\n }\n }\n\n // Check if the dependency has any files that need to be loaded. If there are, push a new promise to the promise list.\n if (angular.isDefined(requireEntry.files) && requireEntry.files.length !== 0) {\n if (angular.isDefined(self.filesLoader)) {\n // if a files loader is defined\n promisesList.push(self.filesLoader(requireEntry, localParams).then(function () {\n return self._loadDependencies(requireEntry);\n }));\n } else {\n return reject(new Error(\"Error: the module \\\"\" + requireEntry.name + \"\\\" is defined in external files (\" + requireEntry.files + \"), but no loader has been defined.\"));\n }\n }\n });\n\n // Create a wrapper promise to watch the promise list and resolve it once everything is done.\n return $q.all(promisesList);\n },\n\n /**\n * Inject new modules into Angular\n * @param moduleName\n * @param localParams\n */\n inject: function inject(moduleName, localParams) {\n var self = this,\n deferred = $q.defer();\n if (angular.isDefined(moduleName) && moduleName !== null) {\n if (angular.isArray(moduleName)) {\n var promisesList = [];\n angular.forEach(moduleName, function (module) {\n promisesList.push(self.inject(module));\n });\n return $q.all(promisesList);\n } else {\n self._addToLoadList(self._getModuleName(moduleName), true);\n }\n }\n if (modulesToLoad.length > 0) {\n var res = modulesToLoad.slice(); // clean copy\n var loadNext = function loadNext(moduleName) {\n moduleCache.push(moduleName);\n self._loadDependencies(moduleName, localParams).then(function success() {\n try {\n justLoaded = [];\n _register(providers, moduleCache, localParams);\n } catch (e) {\n self._$log.error(e.message);\n deferred.reject(e);\n return;\n }\n\n if (modulesToLoad.length > 0) {\n loadNext(modulesToLoad.shift()); // load the next in list\n } else {\n deferred.resolve(res); // everything has been loaded, resolve\n }\n }, function error(err) {\n deferred.reject(err);\n });\n };\n\n // load the first in list\n loadNext(modulesToLoad.shift());\n } else {\n deferred.resolve();\n }\n return deferred.promise;\n },\n\n /**\n * Get the list of required modules/services/... for this module\n * @param module\n * @returns {Array}\n */\n getRequires: function getRequires(module) {\n var requires = [];\n angular.forEach(module.requires, function (requireModule) {\n if (regModules.indexOf(requireModule) === -1) {\n requires.push(requireModule);\n }\n });\n return requires;\n },\n\n /**\n * Invoke the new modules & component by their providers\n * @param providers\n * @param queue\n * @param moduleName\n * @param reconfig\n * @private\n */\n _invokeQueue: _invokeQueue,\n\n /**\n * Check if a module has been invoked and registers it if not\n * @param args\n * @param moduleName\n * @returns {boolean} is new\n */\n _registerInvokeList: _registerInvokeList,\n\n /**\n * Register a new module and loads it, executing the run/config blocks if needed\n * @param providers\n * @param registerModules\n * @param params\n * @private\n */\n _register: _register,\n\n /**\n * Add a module name to the list of modules that will be loaded in the next inject\n * @param name\n * @param force\n * @private\n */\n _addToLoadList: _addToLoadList\n };\n }];\n\n // Let's get the list of loaded modules & components\n this._init(angular.element(window.document));\n }]);\n\n var bootstrapFct = angular.bootstrap;\n angular.bootstrap = function (element, modules, config) {\n // we use slice to make a clean copy\n angular.forEach(modules.slice(), function (module) {\n _addToLoadList(module, true);\n });\n return bootstrapFct(element, modules, config);\n };\n\n var _addToLoadList = function _addToLoadList(name, force) {\n if ((recordDeclarations.length > 0 || force) && angular.isString(name) && modulesToLoad.indexOf(name) === -1) {\n modulesToLoad.push(name);\n }\n };\n\n var ngModuleFct = angular.module;\n angular.module = function (name, requires, configFn) {\n _addToLoadList(name);\n return ngModuleFct(name, requires, configFn);\n };\n})(angular, window);\n(function (angular) {\n \"use strict\";\n\n angular.module(\"oc.lazyLoad\").directive(\"ocLazyLoad\", [\"$ocLazyLoad\", \"$compile\", \"$animate\", \"$parse\", function ($ocLazyLoad, $compile, $animate, $parse) {\n return {\n restrict: \"A\",\n terminal: true,\n priority: 1000,\n compile: function compile(element, attrs) {\n // we store the content and remove it before compilation\n var content = element[0].innerHTML;\n element.html(\"\");\n\n return function ($scope, $element, $attr) {\n var model = $parse($attr.ocLazyLoad);\n $scope.$watch(function () {\n return model($scope) || $attr.ocLazyLoad; // it can be a module name (string), an object, an array, or a scope reference to any of this\n }, function (moduleName) {\n if (angular.isDefined(moduleName)) {\n $ocLazyLoad.load(moduleName).then(function success() {\n $animate.enter($compile(content)($scope), $element);\n });\n }\n }, true);\n };\n }\n };\n }]);\n})(angular);\n(function (angular) {\n \"use strict\";\n\n angular.module(\"oc.lazyLoad\").config([\"$provide\", function ($provide) {\n $provide.decorator(\"$ocLazyLoad\", [\"$delegate\", \"$q\", \"$window\", \"$interval\", function ($delegate, $q, $window, $interval) {\n var uaCssChecked = false,\n useCssLoadPatch = false,\n anchor = $window.document.getElementsByTagName(\"head\")[0] || $window.document.getElementsByTagName(\"body\")[0];\n\n /**\r\n * Load a js/css file\r\n * @param type\r\n * @param path\r\n * @param params\r\n * @returns promise\r\n */\n $delegate.buildElement = function buildElement(type, path, params) {\n var deferred = $q.defer(),\n el,\n loaded,\n filesCache = $delegate._getFilesCache(),\n cacheBuster = function cacheBuster(url) {\n var dc = new Date().getTime();\n if (url.indexOf(\"?\") >= 0) {\n if (url.substring(0, url.length - 1) === \"&\") {\n return url + \"_dc=\" + dc;\n }\n return url + \"&_dc=\" + dc;\n } else {\n return url + \"?_dc=\" + dc;\n }\n };\n\n // Store the promise early so the file load can be detected by other parallel lazy loads\n // (ie: multiple routes on one page) a 'true' value isn't sufficient\n // as it causes false positive load results.\n if (angular.isUndefined(filesCache.get(path))) {\n filesCache.put(path, deferred.promise);\n }\n\n // Switch in case more content types are added later\n switch (type) {\n case \"css\":\n el = $window.document.createElement(\"link\");\n el.type = \"text/css\";\n el.rel = \"stylesheet\";\n el.href = params.cache === false ? cacheBuster(path) : path;\n break;\n case \"js\":\n el = $window.document.createElement(\"script\");\n el.src = params.cache === false ? cacheBuster(path) : path;\n break;\n default:\n deferred.reject(new Error(\"Requested type \\\"\" + type + \"\\\" is not known. Could not inject \\\"\" + path + \"\\\"\"));\n break;\n }\n el.onload = el.onreadystatechange = function (e) {\n if (el.readyState && !/^c|loade/.test(el.readyState) || loaded) return;\n el.onload = el.onreadystatechange = null;\n loaded = 1;\n $delegate._broadcast(\"ocLazyLoad.fileLoaded\", path);\n deferred.resolve();\n };\n el.onerror = function () {\n deferred.reject(new Error(\"Unable to load \" + path));\n };\n el.async = params.serie ? 0 : 1;\n\n var insertBeforeElem = anchor.lastChild;\n if (params.insertBefore) {\n var element = angular.element(params.insertBefore);\n if (element && element.length > 0) {\n insertBeforeElem = element[0];\n }\n }\n anchor.insertBefore(el, insertBeforeElem);\n\n /*\r\n The event load or readystatechange doesn't fire in:\r\n - iOS < 6 (default mobile browser)\r\n - Android < 4.4 (default mobile browser)\r\n - Safari < 6 (desktop browser)\r\n */\n if (type == \"css\") {\n if (!uaCssChecked) {\n var ua = $window.navigator.userAgent.toLowerCase();\n\n // iOS < 6\n if (/iP(hone|od|ad)/.test($window.navigator.platform)) {\n var v = $window.navigator.appVersion.match(/OS (\\d+)_(\\d+)_?(\\d+)?/);\n var iOSVersion = parseFloat([parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)].join(\".\"));\n useCssLoadPatch = iOSVersion < 6;\n } else if (ua.indexOf(\"android\") > -1) {\n // Android < 4.4\n var androidVersion = parseFloat(ua.slice(ua.indexOf(\"android\") + 8));\n useCssLoadPatch = androidVersion < 4.4;\n } else if (ua.indexOf(\"safari\") > -1 && ua.indexOf(\"chrome\") == -1 && ua.indexOf(\"phantomjs\") == -1) {\n var safariVersion = parseFloat(ua.match(/version\\/([\\.\\d]+)/i)[1]);\n useCssLoadPatch = safariVersion < 6;\n }\n }\n\n if (useCssLoadPatch) {\n var tries = 1000; // * 20 = 20000 miliseconds\n var interval = $interval(function () {\n try {\n el.sheet.cssRules;\n $interval.cancel(interval);\n el.onload();\n } catch (e) {\n if (--tries <= 0) {\n el.onerror();\n }\n }\n }, 20);\n }\n }\n\n return deferred.promise;\n };\n\n return $delegate;\n }]);\n }]);\n})(angular);\n(function (angular) {\n \"use strict\";\n\n angular.module(\"oc.lazyLoad\").config([\"$provide\", function ($provide) {\n $provide.decorator(\"$ocLazyLoad\", [\"$delegate\", \"$q\", function ($delegate, $q) {\n /**\n * The function that loads new files\n * @param config\n * @param params\n * @returns {*}\n */\n $delegate.filesLoader = function filesLoader(config) {\n var originalParams = arguments[1] === undefined ? {} : arguments[1];\n\n var cssFiles = [],\n templatesFiles = [],\n jsFiles = [],\n promises = [],\n cachePromise = null,\n filesCache = $delegate._getFilesCache();\n\n $delegate.toggleWatch(true); // start watching angular.module calls\n\n // we need a real copy because we might edit some parts of it\n var params = angular.copy(angular.extend({}, originalParams, config));\n\n var pushFile = function pushFile(path) {\n var file_type = null,\n m;\n if (angular.isObject(path)) {\n file_type = path.type;\n path = path.path;\n }\n cachePromise = filesCache.get(path);\n if (angular.isUndefined(cachePromise) || params.cache === false) {\n\n // always check for requirejs syntax just in case\n if ((m = /^(css|less|html|htm|js)?(?=!)/.exec(path)) !== null) {\n // Detect file type using preceding type declaration (ala requireJS)\n file_type = m[1];\n path = path.substr(m[1].length + 1, path.length); // Strip the type from the path\n }\n\n if (!file_type) {\n if ((m = /[.](css|less|html|htm|js)?((\\?|#).*)?$/.exec(path)) !== null) {\n // Detect file type via file extension\n file_type = m[1];\n } else if (!$delegate.jsLoader.hasOwnProperty(\"ocLazyLoadLoader\") && $delegate.jsLoader.hasOwnProperty(\"load\")) {\n // requirejs\n file_type = \"js\";\n } else {\n $delegate._$log.error(\"File type could not be determined. \" + path);\n return;\n }\n }\n\n if ((file_type === \"css\" || file_type === \"less\") && cssFiles.indexOf(path) === -1) {\n cssFiles.push(path);\n } else if ((file_type === \"html\" || file_type === \"htm\") && templatesFiles.indexOf(path) === -1) {\n templatesFiles.push(path);\n } else if (file_type === \"js\" || jsFiles.indexOf(path) === -1) {\n jsFiles.push(path);\n } else {\n $delegate._$log.error(\"File type is not valid. \" + path);\n }\n } else if (cachePromise) {\n promises.push(cachePromise);\n }\n };\n\n if (params.serie) {\n pushFile(params.files.shift());\n } else {\n angular.forEach(params.files, function (path) {\n pushFile(path);\n });\n }\n\n if (cssFiles.length > 0) {\n var cssDeferred = $q.defer();\n $delegate.cssLoader(cssFiles, function (err) {\n if (angular.isDefined(err) && $delegate.cssLoader.hasOwnProperty(\"ocLazyLoadLoader\")) {\n $delegate._$log.error(err);\n cssDeferred.reject(err);\n } else {\n cssDeferred.resolve();\n }\n }, params);\n promises.push(cssDeferred.promise);\n }\n\n if (templatesFiles.length > 0) {\n var templatesDeferred = $q.defer();\n $delegate.templatesLoader(templatesFiles, function (err) {\n if (angular.isDefined(err) && $delegate.templatesLoader.hasOwnProperty(\"ocLazyLoadLoader\")) {\n $delegate._$log.error(err);\n templatesDeferred.reject(err);\n } else {\n templatesDeferred.resolve();\n }\n }, params);\n promises.push(templatesDeferred.promise);\n }\n\n if (jsFiles.length > 0) {\n var jsDeferred = $q.defer();\n $delegate.jsLoader(jsFiles, function (err) {\n if (angular.isDefined(err) && $delegate.jsLoader.hasOwnProperty(\"ocLazyLoadLoader\")) {\n $delegate._$log.error(err);\n jsDeferred.reject(err);\n } else {\n jsDeferred.resolve();\n }\n }, params);\n promises.push(jsDeferred.promise);\n }\n\n if (params.serie && params.files.length > 0) {\n return $q.all(promises).then(function success() {\n return $delegate.filesLoader(config, params);\n });\n } else {\n return $q.all(promises)[\"finally\"](function (res) {\n $delegate.toggleWatch(false); // stop watching angular.module calls\n return res;\n });\n }\n };\n\n /**\n * Load a module or a list of modules into Angular\n * @param module Mixed the name of a predefined module config object, or a module config object, or an array of either\n * @param params Object optional parameters\n * @returns promise\n */\n $delegate.load = function (module) {\n var params = arguments[1] === undefined ? {} : arguments[1];\n\n var self = this,\n config = null,\n deferredList = [],\n deferred = $q.defer(),\n errText;\n\n // If module is an array, break it down\n if (angular.isArray(module)) {\n // Resubmit each entry as a single module\n angular.forEach(module, function (m) {\n deferredList.push(self.load(m, params));\n });\n\n // Resolve the promise once everything has loaded\n $q.all(deferredList).then(function success(res) {\n deferred.resolve(res);\n }, function error(err) {\n deferred.reject(err);\n });\n\n return deferred.promise;\n }\n\n // Get or Set a configuration depending on what was passed in\n if (angular.isString(module)) {\n config = self.getModuleConfig(module);\n if (!config) {\n config = {\n files: [module]\n };\n }\n } else if (angular.isObject(module)) {\n // case {type: 'js', path: lazyLoadUrl + 'testModule.fakejs'}\n if (angular.isDefined(module.path) && angular.isDefined(module.type)) {\n config = {\n files: [module]\n };\n } else {\n config = self.setModuleConfig(module);\n }\n }\n\n if (config === null) {\n var moduleName = self._getModuleName(module);\n errText = \"Module \\\"\" + (moduleName || \"unknown\") + \"\\\" is not configured, cannot load.\";\n $delegate._$log.error(errText);\n deferred.reject(new Error(errText));\n return deferred.promise;\n } else {\n // deprecated\n if (angular.isDefined(config.template)) {\n if (angular.isUndefined(config.files)) {\n config.files = [];\n }\n if (angular.isString(config.template)) {\n config.files.push(config.template);\n } else if (angular.isArray(config.template)) {\n config.files.concat(config.template);\n }\n }\n }\n\n var localParams = {};\n angular.extend(localParams, params, config);\n\n // if someone used an external loader and called the load function with just the module name\n if (angular.isUndefined(config.files) && angular.isDefined(config.name) && $delegate.moduleExists(config.name)) {\n return $delegate.inject(config.name, localParams);\n }\n\n $delegate.filesLoader(config, localParams).then(function success() {\n $delegate.inject(null, localParams).then(function (res) {\n deferred.resolve(res);\n }, function (err) {\n deferred.reject(err);\n });\n }, function error(err) {\n deferred.reject(err);\n });\n\n return deferred.promise;\n };\n\n // return the patched service\n return $delegate;\n }]);\n }]);\n})(angular);\n(function (angular) {\n \"use strict\";\n\n angular.module(\"oc.lazyLoad\").config([\"$provide\", function ($provide) {\n $provide.decorator(\"$ocLazyLoad\", [\"$delegate\", \"$q\", function ($delegate, $q) {\n /**\r\n * cssLoader function\r\n * @type Function\r\n * @param paths array list of css files to load\r\n * @param callback to call when everything is loaded. We use a callback and not a promise\r\n * @param params object config parameters\r\n * because the user can overwrite cssLoader and it will probably not use promises :(\r\n */\n $delegate.cssLoader = function (paths, callback, params) {\n var promises = [];\n angular.forEach(paths, function loading(path) {\n promises.push($delegate.buildElement(\"css\", path, params));\n });\n $q.all(promises).then(function success() {\n callback();\n }, function (err) {\n callback(err);\n });\n };\n $delegate.cssLoader.ocLazyLoadLoader = true;\n\n return $delegate;\n }]);\n }]);\n})(angular);\n(function (angular) {\n \"use strict\";\n\n angular.module(\"oc.lazyLoad\").config([\"$provide\", function ($provide) {\n $provide.decorator(\"$ocLazyLoad\", [\"$delegate\", \"$q\", function ($delegate, $q) {\n /**\r\n * jsLoader function\r\n * @type Function\r\n * @param paths array list of js files to load\r\n * @param callback to call when everything is loaded. We use a callback and not a promise\r\n * @param params object config parameters\r\n * because the user can overwrite jsLoader and it will probably not use promises :(\r\n */\n $delegate.jsLoader = function (paths, callback, params) {\n var promises = [];\n angular.forEach(paths, function loading(path) {\n promises.push($delegate.buildElement(\"js\", path, params));\n });\n $q.all(promises).then(function success() {\n callback();\n }, function error(err) {\n callback(err);\n });\n };\n $delegate.jsLoader.ocLazyLoadLoader = true;\n\n return $delegate;\n }]);\n }]);\n})(angular);\n(function (angular) {\n \"use strict\";\n\n angular.module(\"oc.lazyLoad\").config([\"$provide\", function ($provide) {\n $provide.decorator(\"$ocLazyLoad\", [\"$delegate\", \"$templateCache\", \"$q\", \"$http\", function ($delegate, $templateCache, $q, $http) {\n /**\r\n * templatesLoader function\r\n * @type Function\r\n * @param paths array list of css files to load\r\n * @param callback to call when everything is loaded. We use a callback and not a promise\r\n * @param params object config parameters for $http\r\n * because the user can overwrite templatesLoader and it will probably not use promises :(\r\n */\n $delegate.templatesLoader = function (paths, callback, params) {\n var promises = [],\n filesCache = $delegate._getFilesCache();\n\n angular.forEach(paths, function (url) {\n var deferred = $q.defer();\n promises.push(deferred.promise);\n $http.get(url, params).success(function (data) {\n if (angular.isString(data) && data.length > 0) {\n angular.forEach(angular.element(data), function (node) {\n if (node.nodeName === \"SCRIPT\" && node.type === \"text/ng-template\") {\n $templateCache.put(node.id, node.innerHTML);\n }\n });\n }\n if (angular.isUndefined(filesCache.get(url))) {\n filesCache.put(url, true);\n }\n deferred.resolve();\n }).error(function (err) {\n deferred.reject(new Error(\"Unable to load template file \\\"\" + url + \"\\\": \" + err));\n });\n });\n return $q.all(promises).then(function success() {\n callback();\n }, function error(err) {\n callback(err);\n });\n };\n $delegate.templatesLoader.ocLazyLoadLoader = true;\n\n return $delegate;\n }]);\n }]);\n})(angular);\n// Array.indexOf polyfill for IE8\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement, fromIndex) {\n var k;\n\n // 1. Let O be the result of calling ToObject passing\n // the this value as the argument.\n if (this == null) {\n throw new TypeError(\"\\\"this\\\" is null or not defined\");\n }\n\n var O = Object(this);\n\n // 2. Let lenValue be the result of calling the Get\n // internal method of O with the argument \"length\".\n // 3. Let len be ToUint32(lenValue).\n var len = O.length >>> 0;\n\n // 4. If len is 0, return -1.\n if (len === 0) {\n return -1;\n }\n\n // 5. If argument fromIndex was passed let n be\n // ToInteger(fromIndex); else let n be 0.\n var n = +fromIndex || 0;\n\n if (Math.abs(n) === Infinity) {\n n = 0;\n }\n\n // 6. If n >= len, return -1.\n if (n >= len) {\n return -1;\n }\n\n // 7. If n >= 0, then Let k be n.\n // 8. Else, n<0, Let k be len - abs(n).\n // If k is less than 0, then let k be 0.\n k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);\n\n // 9. Repeat, while k < len\n while (k < len) {\n // a. Let Pk be ToString(k).\n // This is implicit for LHS operands of the in operator\n // b. Let kPresent be the result of calling the\n // HasProperty internal method of O with argument Pk.\n // This step can be combined with c\n // c. If kPresent is true, then\n // i. Let elementK be the result of calling the Get\n // internal method of O with the argument ToString(k).\n // ii. Let same be the result of applying the\n // Strict Equality Comparison Algorithm to\n // searchElement and elementK.\n // iii. If same is true, return k.\n if (k in O && O[k] === searchElement) {\n return k;\n }\n k++;\n }\n return -1;\n };\n}\n//# sourceMappingURL=ocLazyLoad.js.map"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/ocLazyLoad.require.js b/dist/ocLazyLoad.require.js index 30a18a9..eed2fc1 100644 --- a/dist/ocLazyLoad.require.js +++ b/dist/ocLazyLoad.require.js @@ -219,9 +219,14 @@ regInvokes[moduleName][type] = {}; } var onInvoke = function onInvoke(invokeName, signature) { - newInvoke = true; - regInvokes[moduleName][type][invokeName].push(signature); - broadcast("ocLazyLoad.componentLoaded", [moduleName, type, invokeName]); + if (angular.isUndefined(regInvokes[moduleName][type][invokeName])) { + regInvokes[moduleName][type][invokeName] = []; + } + if (regInvokes[moduleName][type][invokeName].indexOf(signature) === -1) { + newInvoke = true; + regInvokes[moduleName][type][invokeName].push(signature); + broadcast("ocLazyLoad.componentLoaded", [moduleName, type, invokeName]); + } }; function signature(data) { @@ -242,22 +247,15 @@ } if (angular.isString(invokeList)) { - if (angular.isUndefined(regInvokes[moduleName][type][invokeList])) { - regInvokes[moduleName][type][invokeList] = []; - } - if (regInvokes[moduleName][type][invokeList].indexOf(signature(args[2][1])) === -1) { - onInvoke(invokeList, signature(args[2][1])); - } + onInvoke(invokeList, signature(args[2][1])); } else if (angular.isObject(invokeList)) { - // decorators for example - angular.forEach(invokeList, function (invoke) { + angular.forEach(invokeList, function (invoke, key) { if (angular.isString(invoke)) { - if (angular.isUndefined(regInvokes[moduleName][type][invoke])) { - regInvokes[moduleName][type][invoke] = []; - } - if (regInvokes[moduleName][type][invoke].indexOf(signature(invokeList[1])) === -1) { - onInvoke(invoke, signature(invokeList[1])); - } + // decorators for example + onInvoke(invoke, signature(invokeList[1])); + } else { + // components registered as object lists {"componentName": function() {}} + onInvoke(key, signature(invoke)); } }); } else { diff --git a/dist/ocLazyLoad.require.js.map b/dist/ocLazyLoad.require.js.map index d17e3cc..8bb542a 100644 --- a/dist/ocLazyLoad.require.js.map +++ b/dist/ocLazyLoad.require.js.map @@ -1 +1 @@ -{"version":3,"sources":["ocLazyLoad.core.js","ocLazyLoad.directive.js","ocLazyLoad.loaders.common.js","ocLazyLoad.loaders.core.js","ocLazyLoad.loaders.cssLoader.js","ocLazyLoad.loaders.requireJSLoader.js","ocLazyLoad.loaders.templatesLoader.js","ocLazyLoad.polyfill.ie8.js"],"names":[],"mappings":"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","file":"ocLazyLoad.require.js","sourcesContent":["(function(angular, window) {\r\n 'use strict';\r\n\r\n var regModules = ['ng', 'oc.lazyLoad'],\r\n regInvokes = {},\r\n regConfigs = [],\r\n modulesToLoad = [],\r\n recordDeclarations = [],\r\n broadcast = angular.noop,\r\n runBlocks = {},\r\n justLoaded = [];\r\n\r\n var ocLazyLoad = angular.module('oc.lazyLoad', ['ng']);\r\n\r\n ocLazyLoad.provider('$ocLazyLoad', function($controllerProvider, $provide, $compileProvider, $filterProvider, $injector, $animateProvider) {\r\n var modules = {},\r\n providers = {\r\n $controllerProvider: $controllerProvider,\r\n $compileProvider: $compileProvider,\r\n $filterProvider: $filterProvider,\r\n $provide: $provide, // other things\r\n $injector: $injector,\r\n $animateProvider: $animateProvider\r\n },\r\n debug = false,\r\n events = false,\r\n moduleCache = [];\r\n\r\n moduleCache.push = function(value) {\r\n if(this.indexOf(value) === -1) {\r\n Array.prototype.push.apply(this, arguments);\r\n }\r\n };\r\n\r\n this.config = function(config) {\r\n // If we want to define modules configs\r\n if(angular.isDefined(config.modules)) {\r\n if(angular.isArray(config.modules)) {\r\n angular.forEach(config.modules, function(moduleConfig) {\r\n modules[moduleConfig.name] = moduleConfig;\r\n });\r\n } else {\r\n modules[config.modules.name] = config.modules;\r\n }\r\n }\r\n\r\n if(angular.isDefined(config.debug)) {\r\n debug = config.debug;\r\n }\r\n\r\n if(angular.isDefined(config.events)) {\r\n events = config.events;\r\n }\r\n };\r\n\r\n /**\r\n * Get the list of existing registered modules\r\n * @param element\r\n */\r\n this._init = function _init(element) {\r\n // this is probably useless now because we override angular.bootstrap\r\n if(modulesToLoad.length === 0) {\r\n var elements = [element],\r\n names = ['ng:app', 'ng-app', 'x-ng-app', 'data-ng-app'],\r\n NG_APP_CLASS_REGEXP = /\\sng[:\\-]app(:\\s*([\\w\\d_]+);?)?\\s/,\r\n append = function append(elm) {\r\n return (elm && elements.push(elm));\r\n };\r\n\r\n angular.forEach(names, function(name) {\r\n names[name] = true;\r\n append(document.getElementById(name));\r\n name = name.replace(':', '\\\\:');\r\n if(element[0].querySelectorAll) {\r\n angular.forEach(element[0].querySelectorAll('.' + name), append);\r\n angular.forEach(element[0].querySelectorAll('.' + name + '\\\\:'), append);\r\n angular.forEach(element[0].querySelectorAll('[' + name + ']'), append);\r\n }\r\n });\r\n\r\n angular.forEach(elements, function(elm) {\r\n if(modulesToLoad.length === 0) {\r\n var className = ' ' + element.className + ' ';\r\n var match = NG_APP_CLASS_REGEXP.exec(className);\r\n if(match) {\r\n modulesToLoad.push((match[2] || '').replace(/\\s+/g, ','));\r\n } else {\r\n angular.forEach(elm.attributes, function(attr) {\r\n if(modulesToLoad.length === 0 && names[attr.name]) {\r\n modulesToLoad.push(attr.value);\r\n }\r\n });\r\n }\r\n }\r\n });\r\n }\r\n\r\n if(modulesToLoad.length === 0 && !((window.jasmine || window.mocha) && angular.isDefined(angular.mock))) {\r\n console.error('No module found during bootstrap, unable to init ocLazyLoad. You should always use the ng-app directive or angular.boostrap when you use ocLazyLoad.');\r\n }\r\n\r\n var addReg = function addReg(moduleName) {\r\n if(regModules.indexOf(moduleName) === -1) {\r\n // register existing modules\r\n regModules.push(moduleName);\r\n var mainModule = angular.module(moduleName);\r\n\r\n // register existing components (directives, services, ...)\r\n _invokeQueue(null, mainModule._invokeQueue, moduleName);\r\n _invokeQueue(null, mainModule._configBlocks, moduleName); // angular 1.3+\r\n\r\n angular.forEach(mainModule.requires, addReg);\r\n }\r\n };\r\n\r\n angular.forEach(modulesToLoad, function(moduleName) {\r\n addReg(moduleName);\r\n });\r\n\r\n modulesToLoad = []; // reset for next bootstrap\r\n recordDeclarations.pop(); // wait for the next lazy load\r\n };\r\n\r\n /**\r\n * Like JSON.stringify but that doesn't throw on circular references\r\n * @param obj\r\n */\r\n var stringify = function stringify(obj) {\r\n var cache = [];\r\n return JSON.stringify(obj, function(key, value) {\r\n if(angular.isObject(value) && value !== null) {\r\n if(cache.indexOf(value) !== -1) {\r\n // Circular reference found, discard key\r\n return;\r\n }\r\n // Store value in our collection\r\n cache.push(value);\r\n }\r\n return value;\r\n });\r\n };\r\n\r\n var hashCode = function hashCode(str) {\r\n var hash = 0, i, chr, len;\r\n if(str.length == 0) {\r\n return hash;\r\n }\r\n for(i = 0, len = str.length; i < len; i++) {\r\n chr = str.charCodeAt(i);\r\n hash = ((hash << 5) - hash) + chr;\r\n hash |= 0; // Convert to 32bit integer\r\n }\r\n return hash;\r\n };\r\n\r\n function _register(providers, registerModules, params) {\r\n if(registerModules) {\r\n var k, moduleName, moduleFn, tempRunBlocks = [];\r\n for(k = registerModules.length - 1; k >= 0; k--) {\r\n moduleName = registerModules[k];\r\n if(!angular.isString(moduleName)) {\r\n moduleName = getModuleName(moduleName);\r\n }\r\n if(!moduleName || justLoaded.indexOf(moduleName) !== -1) {\r\n continue;\r\n }\r\n var newModule = regModules.indexOf(moduleName) === -1;\r\n moduleFn = ngModuleFct(moduleName);\r\n if(newModule) { // new module\r\n regModules.push(moduleName);\r\n _register(providers, moduleFn.requires, params);\r\n }\r\n if(moduleFn._runBlocks.length > 0) {\r\n // new run blocks detected! Replace the old ones (if existing)\r\n runBlocks[moduleName] = [];\r\n while(moduleFn._runBlocks.length > 0) {\r\n runBlocks[moduleName].push(moduleFn._runBlocks.shift());\r\n }\r\n }\r\n if(angular.isDefined(runBlocks[moduleName]) && (newModule || params.rerun)) {\r\n tempRunBlocks = tempRunBlocks.concat(runBlocks[moduleName]);\r\n }\r\n _invokeQueue(providers, moduleFn._invokeQueue, moduleName, params.reconfig);\r\n _invokeQueue(providers, moduleFn._configBlocks, moduleName, params.reconfig); // angular 1.3+\r\n broadcast(newModule ? 'ocLazyLoad.moduleLoaded' : 'ocLazyLoad.moduleReloaded', moduleName);\r\n registerModules.pop();\r\n justLoaded.push(moduleName);\r\n }\r\n // execute the run blocks at the end\r\n var instanceInjector = providers.getInstanceInjector();\r\n angular.forEach(tempRunBlocks, (fn) => {\r\n instanceInjector.invoke(fn);\r\n });\r\n }\r\n }\r\n\r\n function _registerInvokeList(args, moduleName) {\r\n var invokeList = args[2][0],\r\n type = args[1],\r\n newInvoke = false;\r\n if(angular.isUndefined(regInvokes[moduleName])) {\r\n regInvokes[moduleName] = {};\r\n }\r\n if(angular.isUndefined(regInvokes[moduleName][type])) {\r\n regInvokes[moduleName][type] = {};\r\n }\r\n var onInvoke = function(invokeName, signature) {\r\n newInvoke = true;\r\n regInvokes[moduleName][type][invokeName].push(signature);\r\n broadcast('ocLazyLoad.componentLoaded', [moduleName, type, invokeName]);\r\n };\r\n\r\n function signature(data) {\r\n if(angular.isArray(data)) { // arrays are objects, we need to test for it first\r\n return hashCode(data.toString());\r\n } else if(angular.isObject(data)) { // constants & values for example\r\n return hashCode(stringify(data));\r\n } else {\r\n if(angular.isDefined(data) && data !== null) {\r\n return hashCode(data.toString());\r\n } else { // null & undefined constants\r\n return data;\r\n }\r\n }\r\n }\r\n\r\n if(angular.isString(invokeList)) {\r\n if(angular.isUndefined(regInvokes[moduleName][type][invokeList])) {\r\n regInvokes[moduleName][type][invokeList] = [];\r\n }\r\n if(regInvokes[moduleName][type][invokeList].indexOf(signature(args[2][1])) === -1) {\r\n onInvoke(invokeList, signature(args[2][1]));\r\n }\r\n } else if(angular.isObject(invokeList)) { // decorators for example\r\n angular.forEach(invokeList, function(invoke) {\r\n if(angular.isString(invoke)) {\r\n if(angular.isUndefined(regInvokes[moduleName][type][invoke])) {\r\n regInvokes[moduleName][type][invoke] = [];\r\n }\r\n if(regInvokes[moduleName][type][invoke].indexOf(signature(invokeList[1])) === -1) {\r\n onInvoke(invoke, signature(invokeList[1]));\r\n }\r\n }\r\n });\r\n } else {\r\n return false;\r\n }\r\n return newInvoke;\r\n }\r\n\r\n function _invokeQueue(providers, queue, moduleName, reconfig) {\r\n if(!queue) {\r\n return;\r\n }\r\n\r\n var i, len, args, provider;\r\n for(i = 0, len = queue.length; i < len; i++) {\r\n args = queue[i];\r\n if(angular.isArray(args)) {\r\n if(providers !== null) {\r\n if(providers.hasOwnProperty(args[0])) {\r\n provider = providers[args[0]];\r\n } else {\r\n throw new Error('unsupported provider ' + args[0]);\r\n }\r\n }\r\n var isNew = _registerInvokeList(args, moduleName);\r\n if(args[1] !== 'invoke') {\r\n if(isNew && angular.isDefined(provider)) {\r\n provider[args[1]].apply(provider, args[2]);\r\n }\r\n } else { // config block\r\n var callInvoke = function(fct) {\r\n var invoked = regConfigs.indexOf(moduleName + '-' + fct);\r\n if(invoked === -1 || reconfig) {\r\n if(invoked === -1) {\r\n regConfigs.push(moduleName + '-' + fct);\r\n }\r\n if(angular.isDefined(provider)) {\r\n provider[args[1]].apply(provider, args[2]);\r\n }\r\n }\r\n };\r\n if(angular.isFunction(args[2][0])) {\r\n callInvoke(args[2][0]);\r\n } else if(angular.isArray(args[2][0])) {\r\n for(var j = 0, jlen = args[2][0].length; j < jlen; j++) {\r\n if(angular.isFunction(args[2][0][j])) {\r\n callInvoke(args[2][0][j]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n function getModuleName(module) {\r\n var moduleName = null;\r\n if(angular.isString(module)) {\r\n moduleName = module;\r\n } else if(angular.isObject(module) && module.hasOwnProperty('name') && angular.isString(module.name)) {\r\n moduleName = module.name;\r\n }\r\n return moduleName;\r\n }\r\n\r\n function moduleExists(moduleName) {\r\n if(!angular.isString(moduleName)) {\r\n return false;\r\n }\r\n try {\r\n return ngModuleFct(moduleName);\r\n } catch(e) {\r\n if(/No module/.test(e) || (e.message.indexOf('$injector:nomod') > -1)) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n this.$get = function($log, $rootElement, $rootScope, $cacheFactory, $q) {\r\n var instanceInjector,\r\n filesCache = $cacheFactory('ocLazyLoad');\r\n\r\n if(!debug) {\r\n $log = {};\r\n $log['error'] = angular.noop;\r\n $log['warn'] = angular.noop;\r\n $log['info'] = angular.noop;\r\n }\r\n\r\n // Make this lazy because when $get() is called the instance injector hasn't been assigned to the rootElement yet\r\n providers.getInstanceInjector = function() {\r\n return (instanceInjector) ? instanceInjector : (instanceInjector = ($rootElement.data('$injector') || angular.injector()));\r\n };\r\n\r\n broadcast = function broadcast(eventName, params) {\r\n if(events) {\r\n $rootScope.$broadcast(eventName, params);\r\n }\r\n if(debug) {\r\n $log.info(eventName, params);\r\n }\r\n };\r\n\r\n function reject(e) {\r\n var deferred = $q.defer();\r\n $log.error(e.message);\r\n deferred.reject(e);\r\n return deferred.promise;\r\n }\r\n\r\n return {\r\n _broadcast: broadcast,\r\n\r\n _$log: $log,\r\n\r\n /**\r\n * Returns the files cache used by the loaders to store the files currently loading\r\n * @returns {*}\r\n */\r\n _getFilesCache: function getFilesCache() {\r\n return filesCache;\r\n },\r\n\r\n /**\r\n * Let the service know that it should monitor angular.module because files are loading\r\n * @param watch boolean\r\n */\r\n toggleWatch: function(watch) {\r\n if(watch) {\r\n recordDeclarations.push(true);\r\n } else {\r\n recordDeclarations.pop();\r\n }\r\n },\r\n\r\n /**\r\n * Let you get a module config object\r\n * @param moduleName String the name of the module\r\n * @returns {*}\r\n */\r\n getModuleConfig: function(moduleName) {\r\n if(!angular.isString(moduleName)) {\r\n throw new Error('You need to give the name of the module to get');\r\n }\r\n if(!modules[moduleName]) {\r\n return null;\r\n }\r\n return angular.copy(modules[moduleName]);\r\n },\r\n\r\n /**\r\n * Let you define a module config object\r\n * @param moduleConfig Object the module config object\r\n * @returns {*}\r\n */\r\n setModuleConfig: function(moduleConfig) {\r\n if(!angular.isObject(moduleConfig)) {\r\n throw new Error('You need to give the module config object to set');\r\n }\r\n modules[moduleConfig.name] = moduleConfig;\r\n return moduleConfig;\r\n },\r\n\r\n /**\r\n * Returns the list of loaded modules\r\n * @returns {string[]}\r\n */\r\n getModules: () => regModules,\r\n\r\n /**\r\n * Let you check if a module has been loaded into Angular or not\r\n * @param modulesNames String/Object a module name, or a list of module names\r\n * @returns {boolean}\r\n */\r\n isLoaded: function(modulesNames) {\r\n var moduleLoaded = function(module) {\r\n var isLoaded = regModules.indexOf(module) > -1;\r\n if(!isLoaded) {\r\n isLoaded = !!moduleExists(module);\r\n }\r\n return isLoaded;\r\n };\r\n if(angular.isString(modulesNames)) {\r\n modulesNames = [modulesNames];\r\n }\r\n if(angular.isArray(modulesNames)) {\r\n var i, len;\r\n for(i = 0, len = modulesNames.length; i < len; i++) {\r\n if(!moduleLoaded(modulesNames[i])) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n } else {\r\n throw new Error('You need to define the module(s) name(s)');\r\n }\r\n },\r\n\r\n /**\r\n * Given a module, return its name\r\n * @param module\r\n * @returns {String}\r\n */\r\n _getModuleName: getModuleName,\r\n\r\n /**\r\n * Returns a module if it exists\r\n * @param moduleName\r\n * @returns {module}\r\n */\r\n _getModule: function getModule(moduleName) {\r\n try {\r\n return ngModuleFct(moduleName);\r\n } catch(e) {\r\n // this error message really suxx\r\n if(/No module/.test(e) || (e.message.indexOf('$injector:nomod') > -1)) {\r\n e.message = 'The module \"' + stringify(moduleName) + '\" that you are trying to load does not exist. ' + e.message\r\n }\r\n throw e;\r\n }\r\n },\r\n\r\n /**\r\n * Check if a module exists and returns it if it does\r\n * @param moduleName\r\n * @returns {boolean}\r\n */\r\n moduleExists: moduleExists,\r\n\r\n /**\r\n * Load the dependencies, and might try to load new files depending on the config\r\n * @param moduleName (String or Array of Strings)\r\n * @param localParams\r\n * @returns {*}\r\n * @private\r\n */\r\n _loadDependencies: function _loadDependencies(moduleName, localParams) {\r\n var loadedModule,\r\n requires,\r\n diff,\r\n promisesList = [],\r\n self = this;\r\n\r\n moduleName = self._getModuleName(moduleName);\r\n\r\n if(moduleName === null) {\r\n return $q.when();\r\n } else {\r\n try {\r\n loadedModule = self._getModule(moduleName);\r\n } catch(e) {\r\n return reject(e);\r\n }\r\n // get unloaded requires\r\n requires = self.getRequires(loadedModule);\r\n }\r\n\r\n angular.forEach(requires, function(requireEntry) {\r\n // If no configuration is provided, try and find one from a previous load.\r\n // If there isn't one, bail and let the normal flow run\r\n if(angular.isString(requireEntry)) {\r\n var config = self.getModuleConfig(requireEntry);\r\n if(config === null) {\r\n moduleCache.push(requireEntry); // We don't know about this module, but something else might, so push it anyway.\r\n return;\r\n }\r\n requireEntry = config;\r\n }\r\n\r\n // Check if this dependency has been loaded previously\r\n if(self.moduleExists(requireEntry.name)) {\r\n // compare against the already loaded module to see if the new definition adds any new files\r\n diff = requireEntry.files.filter(function(n) {\r\n return self.getModuleConfig(requireEntry.name).files.indexOf(n) < 0;\r\n });\r\n\r\n // If the module was redefined, advise via the console\r\n if(diff.length !== 0) {\r\n self._$log.warn('Module \"', moduleName, '\" attempted to redefine configuration for dependency. \"', requireEntry.name, '\"\\n Additional Files Loaded:', diff);\r\n }\r\n\r\n // Push everything to the file loader, it will weed out the duplicates.\r\n if(angular.isDefined(self.filesLoader)) { // if a files loader is defined\r\n promisesList.push(self.filesLoader(requireEntry, localParams).then(function() {\r\n return self._loadDependencies(requireEntry)\r\n }));\r\n } else {\r\n return reject(new Error(`Error: New dependencies need to be loaded from external files (${requireEntry.files}), but no loader has been defined.`));\r\n }\r\n return;\r\n } else if(angular.isArray(requireEntry)) {\r\n requireEntry = {\r\n files: requireEntry\r\n };\r\n } else if(angular.isObject(requireEntry)) {\r\n if(requireEntry.hasOwnProperty('name') && requireEntry['name']) {\r\n // The dependency doesn't exist in the module cache and is a new configuration, so store and push it.\r\n self.setModuleConfig(requireEntry);\r\n moduleCache.push(requireEntry['name']);\r\n }\r\n }\r\n\r\n // Check if the dependency has any files that need to be loaded. If there are, push a new promise to the promise list.\r\n if(angular.isDefined(requireEntry.files) && requireEntry.files.length !== 0) {\r\n if(angular.isDefined(self.filesLoader)) { // if a files loader is defined\r\n promisesList.push(self.filesLoader(requireEntry, localParams).then(function() {\r\n return self._loadDependencies(requireEntry);\r\n }));\r\n } else {\r\n return reject(new Error(`Error: the module \"${requireEntry.name}\" is defined in external files (${requireEntry.files}), but no loader has been defined.`));\r\n }\r\n }\r\n });\r\n\r\n // Create a wrapper promise to watch the promise list and resolve it once everything is done.\r\n return $q.all(promisesList);\r\n },\r\n\r\n /**\r\n * Inject new modules into Angular\r\n * @param moduleName\r\n * @param localParams\r\n */\r\n inject: function(moduleName, localParams) {\r\n var self = this,\r\n deferred = $q.defer();\r\n if(angular.isDefined(moduleName) && moduleName !== null) {\r\n if(angular.isArray(moduleName)) {\r\n var promisesList = [];\r\n angular.forEach(moduleName, function(module) {\r\n promisesList.push(self.inject(module));\r\n });\r\n return $q.all(promisesList);\r\n } else {\r\n self._addToLoadList(self._getModuleName(moduleName), true);\r\n }\r\n }\r\n if(modulesToLoad.length > 0) {\r\n var res = modulesToLoad.slice(); // clean copy\r\n var loadNext = function loadNext(moduleName) {\r\n moduleCache.push(moduleName);\r\n self._loadDependencies(moduleName, localParams).then(function success() {\r\n try {\r\n justLoaded = [];\r\n _register(providers, moduleCache, localParams);\r\n } catch(e) {\r\n self._$log.error(e.message);\r\n deferred.reject(e);\r\n return;\r\n }\r\n\r\n if(modulesToLoad.length > 0) {\r\n loadNext(modulesToLoad.shift()); // load the next in list\r\n } else {\r\n deferred.resolve(res); // everything has been loaded, resolve\r\n }\r\n }, function error(err) {\r\n deferred.reject(err);\r\n });\r\n };\r\n\r\n // load the first in list\r\n loadNext(modulesToLoad.shift());\r\n } else {\r\n deferred.resolve();\r\n }\r\n return deferred.promise;\r\n },\r\n\r\n /**\r\n * Get the list of required modules/services/... for this module\r\n * @param module\r\n * @returns {Array}\r\n */\r\n getRequires: function getRequires(module) {\r\n var requires = [];\r\n angular.forEach(module.requires, function(requireModule) {\r\n if(regModules.indexOf(requireModule) === -1) {\r\n requires.push(requireModule);\r\n }\r\n });\r\n return requires;\r\n },\r\n\r\n /**\r\n * Invoke the new modules & component by their providers\r\n * @param providers\r\n * @param queue\r\n * @param moduleName\r\n * @param reconfig\r\n * @private\r\n */\r\n _invokeQueue: _invokeQueue,\r\n\r\n /**\r\n * Check if a module has been invoked and registers it if not\r\n * @param args\r\n * @param moduleName\r\n * @returns {boolean} is new\r\n */\r\n _registerInvokeList: _registerInvokeList,\r\n\r\n /**\r\n * Register a new module and loads it, executing the run/config blocks if needed\r\n * @param providers\r\n * @param registerModules\r\n * @param params\r\n * @private\r\n */\r\n _register: _register,\r\n\r\n /**\r\n * Add a module name to the list of modules that will be loaded in the next inject\r\n * @param name\r\n * @param force\r\n * @private\r\n */\r\n _addToLoadList: _addToLoadList\r\n };\r\n };\r\n\r\n // Let's get the list of loaded modules & components\r\n this._init(angular.element(window.document));\r\n });\r\n\r\n var bootstrapFct = angular.bootstrap;\r\n angular.bootstrap = function(element, modules, config) {\r\n // we use slice to make a clean copy\r\n angular.forEach(modules.slice(), function(module) {\r\n _addToLoadList(module, true);\r\n });\r\n return bootstrapFct(element, modules, config);\r\n };\r\n\r\n var _addToLoadList = function _addToLoadList(name, force) {\r\n if((recordDeclarations.length > 0 || force) && angular.isString(name) && modulesToLoad.indexOf(name) === -1) {\r\n modulesToLoad.push(name);\r\n }\r\n };\r\n\r\n var ngModuleFct = angular.module;\r\n angular.module = function(name, requires, configFn) {\r\n _addToLoadList(name);\r\n return ngModuleFct(name, requires, configFn);\r\n };\r\n\r\n})(angular, window);\r\n","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('oc.lazyLoad').directive('ocLazyLoad', function($ocLazyLoad, $compile, $animate, $parse) {\r\n return {\r\n restrict: 'A',\r\n terminal: true,\r\n priority: 1000,\r\n compile: function(element, attrs) {\r\n // we store the content and remove it before compilation\r\n var content = element[0].innerHTML;\r\n element.html('');\r\n\r\n return function($scope, $element, $attr) {\r\n var model = $parse($attr.ocLazyLoad);\r\n $scope.$watch(function() {\r\n return model($scope) || $attr.ocLazyLoad; // it can be a module name (string), an object, an array, or a scope reference to any of this\r\n }, function(moduleName) {\r\n if(angular.isDefined(moduleName)) {\r\n $ocLazyLoad.load(moduleName).then(function success() {\r\n $animate.enter($compile(content)($scope), $element);\r\n });\r\n }\r\n }, true);\r\n };\r\n }\r\n };\r\n });\r\n\r\n})(angular);\r\n","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('oc.lazyLoad').config(function($provide) {\r\n $provide.decorator('$ocLazyLoad', function ($delegate, $q, $window, $interval) {\r\n var uaCssChecked = false,\r\n useCssLoadPatch = false,\r\n anchor = $window.document.getElementsByTagName('head')[0] || $window.document.getElementsByTagName('body')[0];\r\n\r\n /**\r\n * Load a js/css file\r\n * @param type\r\n * @param path\r\n * @param params\r\n * @returns promise\r\n */\r\n $delegate.buildElement = function buildElement(type, path, params) {\r\n var deferred = $q.defer(),\r\n el,\r\n loaded,\r\n filesCache = $delegate._getFilesCache(),\r\n cacheBuster = function cacheBuster(url) {\r\n var dc = new Date().getTime();\r\n if(url.indexOf('?') >= 0) {\r\n if(url.substring(0, url.length - 1) === '&') {\r\n return url + '_dc=' + dc;\r\n }\r\n return url + '&_dc=' + dc;\r\n } else {\r\n return url + '?_dc=' + dc;\r\n }\r\n };\r\n\r\n // Store the promise early so the file load can be detected by other parallel lazy loads\r\n // (ie: multiple routes on one page) a 'true' value isn't sufficient\r\n // as it causes false positive load results.\r\n if(angular.isUndefined(filesCache.get(path))) {\r\n filesCache.put(path, deferred.promise);\r\n }\r\n\r\n // Switch in case more content types are added later\r\n switch(type) {\r\n case 'css':\r\n el = $window.document.createElement('link');\r\n el.type = 'text/css';\r\n el.rel = 'stylesheet';\r\n el.href = params.cache === false ? cacheBuster(path) : path;\r\n break;\r\n case 'js':\r\n el = $window.document.createElement('script');\r\n el.src = params.cache === false ? cacheBuster(path) : path;\r\n break;\r\n default:\r\n deferred.reject(new Error('Requested type \"' + type + '\" is not known. Could not inject \"' + path + '\"'));\r\n break;\r\n }\r\n el.onload = el['onreadystatechange'] = function(e) {\r\n if((el['readyState'] && !(/^c|loade/.test(el['readyState']))) || loaded) return;\r\n el.onload = el['onreadystatechange'] = null;\r\n loaded = 1;\r\n $delegate._broadcast('ocLazyLoad.fileLoaded', path);\r\n deferred.resolve();\r\n };\r\n el.onerror = function() {\r\n deferred.reject(new Error('Unable to load ' + path));\r\n };\r\n el.async = params.serie ? 0 : 1;\r\n\r\n var insertBeforeElem = anchor.lastChild;\r\n if(params.insertBefore) {\r\n var element = angular.element(params.insertBefore);\r\n if(element && element.length > 0) {\r\n insertBeforeElem = element[0];\r\n }\r\n }\r\n anchor.insertBefore(el, insertBeforeElem);\r\n\r\n /*\r\n The event load or readystatechange doesn't fire in:\r\n - iOS < 6 (default mobile browser)\r\n - Android < 4.4 (default mobile browser)\r\n - Safari < 6 (desktop browser)\r\n */\r\n if(type == 'css') {\r\n if(!uaCssChecked) {\r\n var ua = $window.navigator.userAgent.toLowerCase();\r\n\r\n // iOS < 6\r\n if(/iP(hone|od|ad)/.test($window.navigator.platform)) {\r\n var v = ($window.navigator.appVersion).match(/OS (\\d+)_(\\d+)_?(\\d+)?/);\r\n var iOSVersion = parseFloat([parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)].join('.'));\r\n useCssLoadPatch = iOSVersion < 6;\r\n } else if(ua.indexOf(\"android\") > -1) { // Android < 4.4\r\n var androidVersion = parseFloat(ua.slice(ua.indexOf(\"android\") + 8));\r\n useCssLoadPatch = androidVersion < 4.4;\r\n } else if(ua.indexOf('safari') > -1 && ua.indexOf('chrome') == -1 && ua.indexOf('phantomjs') == -1) {\r\n var safariVersion = parseFloat(ua.match(/version\\/([\\.\\d]+)/i)[1]);\r\n useCssLoadPatch = safariVersion < 6;\r\n }\r\n }\r\n\r\n if(useCssLoadPatch) {\r\n var tries = 1000; // * 20 = 20000 miliseconds\r\n var interval = $interval(function() {\r\n try {\r\n el.sheet.cssRules;\r\n $interval.cancel(interval);\r\n el.onload();\r\n } catch(e) {\r\n if(--tries <= 0) {\r\n el.onerror();\r\n }\r\n }\r\n }, 20);\r\n }\r\n }\r\n\r\n return deferred.promise;\r\n };\r\n\r\n return $delegate;\r\n })\r\n });\r\n\r\n})(angular);\r\n","(function(angular) {\n 'use strict';\n\n angular.module('oc.lazyLoad').config(function($provide) {\n $provide.decorator('$ocLazyLoad', function($delegate, $q) {\n /**\n * The function that loads new files\n * @param config\n * @param params\n * @returns {*}\n */\n $delegate.filesLoader = function filesLoader(config, originalParams = {}) {\n var cssFiles = [],\n templatesFiles = [],\n jsFiles = [],\n promises = [],\n cachePromise = null,\n filesCache = $delegate._getFilesCache();\n\n $delegate.toggleWatch(true); // start watching angular.module calls\n\n // we need a real copy because we might edit some parts of it\n var params = angular.copy(angular.extend({}, originalParams, config));\n\n var pushFile = function(path) {\n var file_type = null, m;\n if(angular.isObject(path)) {\n file_type = path.type;\n path = path.path;\n }\n cachePromise = filesCache.get(path);\n if(angular.isUndefined(cachePromise) || params.cache === false) {\n\n // always check for requirejs syntax just in case\n if((m = /^(css|less|html|htm|js)?(?=!)/.exec(path)) !== null) { // Detect file type using preceding type declaration (ala requireJS)\n file_type = m[1];\n path = path.substr(m[1].length + 1, path.length); // Strip the type from the path\n }\n\n if(!file_type) {\n if((m = /[.](css|less|html|htm|js)?((\\?|#).*)?$/.exec(path)) !== null) { // Detect file type via file extension\n file_type = m[1];\n } else if(!$delegate.jsLoader.hasOwnProperty('ocLazyLoadLoader') && $delegate.jsLoader.hasOwnProperty('load')) { // requirejs\n file_type = 'js';\n } else {\n $delegate._$log.error('File type could not be determined. ' + path);\n return;\n }\n }\n\n if((file_type === 'css' || file_type === 'less') && cssFiles.indexOf(path) === -1) {\n cssFiles.push(path);\n } else if((file_type === 'html' || file_type === 'htm') && templatesFiles.indexOf(path) === -1) {\n templatesFiles.push(path);\n } else if((file_type === 'js') || jsFiles.indexOf(path) === -1) {\n jsFiles.push(path);\n } else {\n $delegate._$log.error('File type is not valid. ' + path);\n }\n\n } else if(cachePromise) {\n promises.push(cachePromise);\n }\n };\n\n if(params.serie) {\n pushFile(params.files.shift());\n } else {\n angular.forEach(params.files, path => {\n pushFile(path);\n });\n }\n\n if(cssFiles.length > 0) {\n var cssDeferred = $q.defer();\n $delegate.cssLoader(cssFiles, function(err) {\n if(angular.isDefined(err) && $delegate.cssLoader.hasOwnProperty('ocLazyLoadLoader')) {\n $delegate._$log.error(err);\n cssDeferred.reject(err);\n } else {\n cssDeferred.resolve();\n }\n }, params);\n promises.push(cssDeferred.promise);\n }\n\n if(templatesFiles.length > 0) {\n var templatesDeferred = $q.defer();\n $delegate.templatesLoader(templatesFiles, function(err) {\n if(angular.isDefined(err) && $delegate.templatesLoader.hasOwnProperty('ocLazyLoadLoader')) {\n $delegate._$log.error(err);\n templatesDeferred.reject(err);\n } else {\n templatesDeferred.resolve();\n }\n }, params);\n promises.push(templatesDeferred.promise);\n }\n\n if(jsFiles.length > 0) {\n var jsDeferred = $q.defer();\n $delegate.jsLoader(jsFiles, function(err) {\n if(angular.isDefined(err) && $delegate.jsLoader.hasOwnProperty('ocLazyLoadLoader')) {\n $delegate._$log.error(err);\n jsDeferred.reject(err);\n } else {\n jsDeferred.resolve();\n }\n }, params);\n promises.push(jsDeferred.promise);\n }\n\n if(params.serie && params.files.length > 0) {\n return $q.all(promises).then(function success() {\n return $delegate.filesLoader(config, params);\n });\n } else {\n return $q.all(promises).finally(function(res) {\n $delegate.toggleWatch(false); // stop watching angular.module calls\n return res;\n });\n }\n };\n\n /**\n * Load a module or a list of modules into Angular\n * @param module Mixed the name of a predefined module config object, or a module config object, or an array of either\n * @param params Object optional parameters\n * @returns promise\n */\n $delegate.load = function(module, params = {}) {\n var self = this,\n config = null,\n deferredList = [],\n deferred = $q.defer(),\n errText;\n\n // If module is an array, break it down\n if(angular.isArray(module)) {\n // Resubmit each entry as a single module\n angular.forEach(module, function(m) {\n deferredList.push(self.load(m, params));\n });\n\n // Resolve the promise once everything has loaded\n $q.all(deferredList).then(function success(res) {\n deferred.resolve(res);\n }, function error(err) {\n deferred.reject(err);\n });\n\n return deferred.promise;\n }\n\n // Get or Set a configuration depending on what was passed in\n if(angular.isString(module)) {\n config = self.getModuleConfig(module);\n if(!config) {\n config = {\n files: [module]\n };\n }\n } else if(angular.isObject(module)) {\n // case {type: 'js', path: lazyLoadUrl + 'testModule.fakejs'}\n if(angular.isDefined(module.path) && angular.isDefined(module.type)) {\n config = {\n files: [module]\n };\n } else {\n config = self.setModuleConfig(module);\n }\n }\n\n if(config === null) {\n var moduleName = self._getModuleName(module);\n errText = 'Module \"' + (moduleName || 'unknown') + '\" is not configured, cannot load.';\n $delegate._$log.error(errText);\n deferred.reject(new Error(errText));\n return deferred.promise;\n } else {\n // deprecated\n if(angular.isDefined(config.template)) {\n if(angular.isUndefined(config.files)) {\n config.files = [];\n }\n if(angular.isString(config.template)) {\n config.files.push(config.template);\n } else if(angular.isArray(config.template)) {\n config.files.concat(config.template);\n }\n }\n }\n\n var localParams = {};\n angular.extend(localParams, params, config);\n\n // if someone used an external loader and called the load function with just the module name\n if(angular.isUndefined(config.files) && angular.isDefined(config.name) && $delegate.moduleExists(config.name)) {\n return $delegate.inject(config.name, localParams);\n }\n\n $delegate.filesLoader(config, localParams).then(function success() {\n $delegate.inject(null, localParams).then(function(res) {\n deferred.resolve(res);\n }, function(err) {\n deferred.reject(err);\n });\n }, function error(err) {\n deferred.reject(err);\n });\n\n return deferred.promise;\n };\n\n // return the patched service\n return $delegate;\n });\n });\n\n})(angular);\n","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('oc.lazyLoad').config(function($provide) {\r\n $provide.decorator('$ocLazyLoad', function ($delegate, $q) {\r\n /**\r\n * cssLoader function\r\n * @type Function\r\n * @param paths array list of css files to load\r\n * @param callback to call when everything is loaded. We use a callback and not a promise\r\n * @param params object config parameters\r\n * because the user can overwrite cssLoader and it will probably not use promises :(\r\n */\r\n $delegate.cssLoader = function(paths, callback, params) {\r\n var promises = [];\r\n angular.forEach(paths, function loading(path) {\r\n promises.push($delegate.buildElement('css', path, params));\r\n });\r\n $q.all(promises).then(function success() {\r\n callback();\r\n }, err => {\r\n callback(err);\r\n });\r\n };\r\n $delegate.cssLoader.ocLazyLoadLoader = true;\r\n\r\n return $delegate;\r\n })\r\n });\r\n\r\n})(angular);\r\n","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('oc.lazyLoad').config(function($provide) {\r\n $provide.decorator('$ocLazyLoad', function ($delegate, $q) {\r\n /**\r\n * jsLoader function\r\n * @type Function\r\n * @param paths array list of js files to load\r\n * @param callback to call when everything is loaded. We use a callback and not a promise\r\n * @param params object config parameters\r\n * because the user can overwrite jsLoader and it will probably not use promises :(\r\n */\r\n $delegate.jsLoader = require;\r\n\r\n return $delegate;\r\n })\r\n });\r\n\r\n})(angular);\r\n","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('oc.lazyLoad').config(function($provide) {\r\n $provide.decorator('$ocLazyLoad', function ($delegate, $templateCache, $q, $http) {\r\n /**\r\n * templatesLoader function\r\n * @type Function\r\n * @param paths array list of css files to load\r\n * @param callback to call when everything is loaded. We use a callback and not a promise\r\n * @param params object config parameters for $http\r\n * because the user can overwrite templatesLoader and it will probably not use promises :(\r\n */\r\n $delegate.templatesLoader = function(paths, callback, params) {\r\n var promises = [],\r\n filesCache = $delegate._getFilesCache();\r\n\r\n angular.forEach(paths, function(url) {\r\n var deferred = $q.defer();\r\n promises.push(deferred.promise);\r\n $http.get(url, params).success(function(data) {\r\n if(angular.isString(data) && data.length > 0) {\r\n angular.forEach(angular.element(data), function(node) {\r\n if(node.nodeName === 'SCRIPT' && node.type === 'text/ng-template') {\r\n $templateCache.put(node.id, node.innerHTML);\r\n }\r\n });\r\n }\r\n if(angular.isUndefined(filesCache.get(url))) {\r\n filesCache.put(url, true);\r\n }\r\n deferred.resolve();\r\n }).error(function(err) {\r\n deferred.reject(new Error('Unable to load template file \"' + url + '\": ' + err));\r\n });\r\n });\r\n return $q.all(promises).then(function success() {\r\n callback();\r\n }, function error(err) {\r\n callback(err);\r\n });\r\n };\r\n $delegate.templatesLoader.ocLazyLoadLoader = true;\r\n\r\n return $delegate;\r\n })\r\n });\r\n\r\n})(angular);\r\n","// Array.indexOf polyfill for IE8\r\nif(!Array.prototype.indexOf) {\r\n Array.prototype.indexOf = function(searchElement, fromIndex) {\r\n var k;\r\n\r\n // 1. Let O be the result of calling ToObject passing\r\n // the this value as the argument.\r\n if(this == null) {\r\n throw new TypeError('\"this\" is null or not defined');\r\n }\r\n\r\n var O = Object(this);\r\n\r\n // 2. Let lenValue be the result of calling the Get\r\n // internal method of O with the argument \"length\".\r\n // 3. Let len be ToUint32(lenValue).\r\n var len = O.length >>> 0;\r\n\r\n // 4. If len is 0, return -1.\r\n if(len === 0) {\r\n return -1;\r\n }\r\n\r\n // 5. If argument fromIndex was passed let n be\r\n // ToInteger(fromIndex); else let n be 0.\r\n var n = +fromIndex || 0;\r\n\r\n if(Math.abs(n) === Infinity) {\r\n n = 0;\r\n }\r\n\r\n // 6. If n >= len, return -1.\r\n if(n >= len) {\r\n return -1;\r\n }\r\n\r\n // 7. If n >= 0, then Let k be n.\r\n // 8. Else, n<0, Let k be len - abs(n).\r\n // If k is less than 0, then let k be 0.\r\n k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);\r\n\r\n // 9. Repeat, while k < len\r\n while(k < len) {\r\n // a. Let Pk be ToString(k).\r\n // This is implicit for LHS operands of the in operator\r\n // b. Let kPresent be the result of calling the\r\n // HasProperty internal method of O with argument Pk.\r\n // This step can be combined with c\r\n // c. If kPresent is true, then\r\n // i. Let elementK be the result of calling the Get\r\n // internal method of O with the argument ToString(k).\r\n // ii. Let same be the result of applying the\r\n // Strict Equality Comparison Algorithm to\r\n // searchElement and elementK.\r\n // iii. If same is true, return k.\r\n if(k in O && O[k] === searchElement) {\r\n return k;\r\n }\r\n k++;\r\n }\r\n return -1;\r\n };\r\n}\r\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["ocLazyLoad.core.js","ocLazyLoad.directive.js","ocLazyLoad.loaders.common.js","ocLazyLoad.loaders.core.js","ocLazyLoad.loaders.cssLoader.js","ocLazyLoad.loaders.requireJSLoader.js","ocLazyLoad.loaders.templatesLoader.js","ocLazyLoad.polyfill.ie8.js"],"names":[],"mappings":"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","file":"ocLazyLoad.require.js","sourcesContent":["(function(angular, window) {\n 'use strict';\n\n var regModules = ['ng', 'oc.lazyLoad'],\n regInvokes = {},\n regConfigs = [],\n modulesToLoad = [],\n recordDeclarations = [],\n broadcast = angular.noop,\n runBlocks = {},\n justLoaded = [];\n\n var ocLazyLoad = angular.module('oc.lazyLoad', ['ng']);\n\n ocLazyLoad.provider('$ocLazyLoad', function($controllerProvider, $provide, $compileProvider, $filterProvider, $injector, $animateProvider) {\n var modules = {},\n providers = {\n $controllerProvider: $controllerProvider,\n $compileProvider: $compileProvider,\n $filterProvider: $filterProvider,\n $provide: $provide, // other things\n $injector: $injector,\n $animateProvider: $animateProvider\n },\n debug = false,\n events = false,\n moduleCache = [];\n\n moduleCache.push = function(value) {\n if(this.indexOf(value) === -1) {\n Array.prototype.push.apply(this, arguments);\n }\n };\n\n this.config = function(config) {\n // If we want to define modules configs\n if(angular.isDefined(config.modules)) {\n if(angular.isArray(config.modules)) {\n angular.forEach(config.modules, function(moduleConfig) {\n modules[moduleConfig.name] = moduleConfig;\n });\n } else {\n modules[config.modules.name] = config.modules;\n }\n }\n\n if(angular.isDefined(config.debug)) {\n debug = config.debug;\n }\n\n if(angular.isDefined(config.events)) {\n events = config.events;\n }\n };\n\n /**\n * Get the list of existing registered modules\n * @param element\n */\n this._init = function _init(element) {\n // this is probably useless now because we override angular.bootstrap\n if(modulesToLoad.length === 0) {\n var elements = [element],\n names = ['ng:app', 'ng-app', 'x-ng-app', 'data-ng-app'],\n NG_APP_CLASS_REGEXP = /\\sng[:\\-]app(:\\s*([\\w\\d_]+);?)?\\s/,\n append = function append(elm) {\n return (elm && elements.push(elm));\n };\n\n angular.forEach(names, function(name) {\n names[name] = true;\n append(document.getElementById(name));\n name = name.replace(':', '\\\\:');\n if(element[0].querySelectorAll) {\n angular.forEach(element[0].querySelectorAll('.' + name), append);\n angular.forEach(element[0].querySelectorAll('.' + name + '\\\\:'), append);\n angular.forEach(element[0].querySelectorAll('[' + name + ']'), append);\n }\n });\n\n angular.forEach(elements, function(elm) {\n if(modulesToLoad.length === 0) {\n var className = ' ' + element.className + ' ';\n var match = NG_APP_CLASS_REGEXP.exec(className);\n if(match) {\n modulesToLoad.push((match[2] || '').replace(/\\s+/g, ','));\n } else {\n angular.forEach(elm.attributes, function(attr) {\n if(modulesToLoad.length === 0 && names[attr.name]) {\n modulesToLoad.push(attr.value);\n }\n });\n }\n }\n });\n }\n\n if(modulesToLoad.length === 0 && !((window.jasmine || window.mocha) && angular.isDefined(angular.mock))) {\n console.error('No module found during bootstrap, unable to init ocLazyLoad. You should always use the ng-app directive or angular.boostrap when you use ocLazyLoad.');\n }\n\n var addReg = function addReg(moduleName) {\n if(regModules.indexOf(moduleName) === -1) {\n // register existing modules\n regModules.push(moduleName);\n var mainModule = angular.module(moduleName);\n\n // register existing components (directives, services, ...)\n _invokeQueue(null, mainModule._invokeQueue, moduleName);\n _invokeQueue(null, mainModule._configBlocks, moduleName); // angular 1.3+\n\n angular.forEach(mainModule.requires, addReg);\n }\n };\n\n angular.forEach(modulesToLoad, function(moduleName) {\n addReg(moduleName);\n });\n\n modulesToLoad = []; // reset for next bootstrap\n recordDeclarations.pop(); // wait for the next lazy load\n };\n\n /**\n * Like JSON.stringify but that doesn't throw on circular references\n * @param obj\n */\n var stringify = function stringify(obj) {\n var cache = [];\n return JSON.stringify(obj, function(key, value) {\n if(angular.isObject(value) && value !== null) {\n if(cache.indexOf(value) !== -1) {\n // Circular reference found, discard key\n return;\n }\n // Store value in our collection\n cache.push(value);\n }\n return value;\n });\n };\n\n var hashCode = function hashCode(str) {\n var hash = 0, i, chr, len;\n if(str.length == 0) {\n return hash;\n }\n for(i = 0, len = str.length; i < len; i++) {\n chr = str.charCodeAt(i);\n hash = ((hash << 5) - hash) + chr;\n hash |= 0; // Convert to 32bit integer\n }\n return hash;\n };\n\n function _register(providers, registerModules, params) {\n if(registerModules) {\n var k, moduleName, moduleFn, tempRunBlocks = [];\n for(k = registerModules.length - 1; k >= 0; k--) {\n moduleName = registerModules[k];\n if(!angular.isString(moduleName)) {\n moduleName = getModuleName(moduleName);\n }\n if(!moduleName || justLoaded.indexOf(moduleName) !== -1) {\n continue;\n }\n var newModule = regModules.indexOf(moduleName) === -1;\n moduleFn = ngModuleFct(moduleName);\n if(newModule) { // new module\n regModules.push(moduleName);\n _register(providers, moduleFn.requires, params);\n }\n if(moduleFn._runBlocks.length > 0) {\n // new run blocks detected! Replace the old ones (if existing)\n runBlocks[moduleName] = [];\n while(moduleFn._runBlocks.length > 0) {\n runBlocks[moduleName].push(moduleFn._runBlocks.shift());\n }\n }\n if(angular.isDefined(runBlocks[moduleName]) && (newModule || params.rerun)) {\n tempRunBlocks = tempRunBlocks.concat(runBlocks[moduleName]);\n }\n _invokeQueue(providers, moduleFn._invokeQueue, moduleName, params.reconfig);\n _invokeQueue(providers, moduleFn._configBlocks, moduleName, params.reconfig); // angular 1.3+\n broadcast(newModule ? 'ocLazyLoad.moduleLoaded' : 'ocLazyLoad.moduleReloaded', moduleName);\n registerModules.pop();\n justLoaded.push(moduleName);\n }\n // execute the run blocks at the end\n var instanceInjector = providers.getInstanceInjector();\n angular.forEach(tempRunBlocks, (fn) => {\n instanceInjector.invoke(fn);\n });\n }\n }\n\n function _registerInvokeList(args, moduleName) {\n var invokeList = args[2][0],\n type = args[1],\n newInvoke = false;\n if(angular.isUndefined(regInvokes[moduleName])) {\n regInvokes[moduleName] = {};\n }\n if(angular.isUndefined(regInvokes[moduleName][type])) {\n regInvokes[moduleName][type] = {};\n }\n var onInvoke = function(invokeName, signature) {\n if(angular.isUndefined(regInvokes[moduleName][type][invokeName])) {\n regInvokes[moduleName][type][invokeName] = [];\n }\n if(regInvokes[moduleName][type][invokeName].indexOf(signature) === -1) {\n newInvoke = true;\n regInvokes[moduleName][type][invokeName].push(signature);\n broadcast('ocLazyLoad.componentLoaded', [moduleName, type, invokeName]);\n }\n };\n\n function signature(data) {\n if(angular.isArray(data)) { // arrays are objects, we need to test for it first\n return hashCode(data.toString());\n } else if(angular.isObject(data)) { // constants & values for example\n return hashCode(stringify(data));\n } else {\n if(angular.isDefined(data) && data !== null) {\n return hashCode(data.toString());\n } else { // null & undefined constants\n return data;\n }\n }\n }\n\n if(angular.isString(invokeList)) {\n onInvoke(invokeList, signature(args[2][1]));\n } else if(angular.isObject(invokeList)) {\n angular.forEach(invokeList, function(invoke, key) {\n if(angular.isString(invoke)) { // decorators for example\n onInvoke(invoke, signature(invokeList[1]));\n } else { // components registered as object lists {\"componentName\": function() {}}\n onInvoke(key, signature(invoke));\n }\n });\n } else {\n return false;\n }\n return newInvoke;\n }\n\n function _invokeQueue(providers, queue, moduleName, reconfig) {\n if(!queue) {\n return;\n }\n\n var i, len, args, provider;\n for(i = 0, len = queue.length; i < len; i++) {\n args = queue[i];\n if(angular.isArray(args)) {\n if(providers !== null) {\n if(providers.hasOwnProperty(args[0])) {\n provider = providers[args[0]];\n } else {\n throw new Error('unsupported provider ' + args[0]);\n }\n }\n var isNew = _registerInvokeList(args, moduleName);\n if(args[1] !== 'invoke') {\n if(isNew && angular.isDefined(provider)) {\n provider[args[1]].apply(provider, args[2]);\n }\n } else { // config block\n var callInvoke = function(fct) {\n var invoked = regConfigs.indexOf(moduleName + '-' + fct);\n if(invoked === -1 || reconfig) {\n if(invoked === -1) {\n regConfigs.push(moduleName + '-' + fct);\n }\n if(angular.isDefined(provider)) {\n provider[args[1]].apply(provider, args[2]);\n }\n }\n };\n if(angular.isFunction(args[2][0])) {\n callInvoke(args[2][0]);\n } else if(angular.isArray(args[2][0])) {\n for(var j = 0, jlen = args[2][0].length; j < jlen; j++) {\n if(angular.isFunction(args[2][0][j])) {\n callInvoke(args[2][0][j]);\n }\n }\n }\n }\n }\n }\n }\n\n function getModuleName(module) {\n var moduleName = null;\n if(angular.isString(module)) {\n moduleName = module;\n } else if(angular.isObject(module) && module.hasOwnProperty('name') && angular.isString(module.name)) {\n moduleName = module.name;\n }\n return moduleName;\n }\n\n function moduleExists(moduleName) {\n if(!angular.isString(moduleName)) {\n return false;\n }\n try {\n return ngModuleFct(moduleName);\n } catch(e) {\n if(/No module/.test(e) || (e.message.indexOf('$injector:nomod') > -1)) {\n return false;\n }\n }\n }\n\n this.$get = function($log, $rootElement, $rootScope, $cacheFactory, $q) {\n var instanceInjector,\n filesCache = $cacheFactory('ocLazyLoad');\n\n if(!debug) {\n $log = {};\n $log['error'] = angular.noop;\n $log['warn'] = angular.noop;\n $log['info'] = angular.noop;\n }\n\n // Make this lazy because when $get() is called the instance injector hasn't been assigned to the rootElement yet\n providers.getInstanceInjector = function() {\n return (instanceInjector) ? instanceInjector : (instanceInjector = ($rootElement.data('$injector') || angular.injector()));\n };\n\n broadcast = function broadcast(eventName, params) {\n if(events) {\n $rootScope.$broadcast(eventName, params);\n }\n if(debug) {\n $log.info(eventName, params);\n }\n };\n\n function reject(e) {\n var deferred = $q.defer();\n $log.error(e.message);\n deferred.reject(e);\n return deferred.promise;\n }\n\n return {\n _broadcast: broadcast,\n\n _$log: $log,\n\n /**\n * Returns the files cache used by the loaders to store the files currently loading\n * @returns {*}\n */\n _getFilesCache: function getFilesCache() {\n return filesCache;\n },\n\n /**\n * Let the service know that it should monitor angular.module because files are loading\n * @param watch boolean\n */\n toggleWatch: function(watch) {\n if(watch) {\n recordDeclarations.push(true);\n } else {\n recordDeclarations.pop();\n }\n },\n\n /**\n * Let you get a module config object\n * @param moduleName String the name of the module\n * @returns {*}\n */\n getModuleConfig: function(moduleName) {\n if(!angular.isString(moduleName)) {\n throw new Error('You need to give the name of the module to get');\n }\n if(!modules[moduleName]) {\n return null;\n }\n return angular.copy(modules[moduleName]);\n },\n\n /**\n * Let you define a module config object\n * @param moduleConfig Object the module config object\n * @returns {*}\n */\n setModuleConfig: function(moduleConfig) {\n if(!angular.isObject(moduleConfig)) {\n throw new Error('You need to give the module config object to set');\n }\n modules[moduleConfig.name] = moduleConfig;\n return moduleConfig;\n },\n\n /**\n * Returns the list of loaded modules\n * @returns {string[]}\n */\n getModules: () => regModules,\n\n /**\n * Let you check if a module has been loaded into Angular or not\n * @param modulesNames String/Object a module name, or a list of module names\n * @returns {boolean}\n */\n isLoaded: function(modulesNames) {\n var moduleLoaded = function(module) {\n var isLoaded = regModules.indexOf(module) > -1;\n if(!isLoaded) {\n isLoaded = !!moduleExists(module);\n }\n return isLoaded;\n };\n if(angular.isString(modulesNames)) {\n modulesNames = [modulesNames];\n }\n if(angular.isArray(modulesNames)) {\n var i, len;\n for(i = 0, len = modulesNames.length; i < len; i++) {\n if(!moduleLoaded(modulesNames[i])) {\n return false;\n }\n }\n return true;\n } else {\n throw new Error('You need to define the module(s) name(s)');\n }\n },\n\n /**\n * Given a module, return its name\n * @param module\n * @returns {String}\n */\n _getModuleName: getModuleName,\n\n /**\n * Returns a module if it exists\n * @param moduleName\n * @returns {module}\n */\n _getModule: function getModule(moduleName) {\n try {\n return ngModuleFct(moduleName);\n } catch(e) {\n // this error message really suxx\n if(/No module/.test(e) || (e.message.indexOf('$injector:nomod') > -1)) {\n e.message = 'The module \"' + stringify(moduleName) + '\" that you are trying to load does not exist. ' + e.message\n }\n throw e;\n }\n },\n\n /**\n * Check if a module exists and returns it if it does\n * @param moduleName\n * @returns {boolean}\n */\n moduleExists: moduleExists,\n\n /**\n * Load the dependencies, and might try to load new files depending on the config\n * @param moduleName (String or Array of Strings)\n * @param localParams\n * @returns {*}\n * @private\n */\n _loadDependencies: function _loadDependencies(moduleName, localParams) {\n var loadedModule,\n requires,\n diff,\n promisesList = [],\n self = this;\n\n moduleName = self._getModuleName(moduleName);\n\n if(moduleName === null) {\n return $q.when();\n } else {\n try {\n loadedModule = self._getModule(moduleName);\n } catch(e) {\n return reject(e);\n }\n // get unloaded requires\n requires = self.getRequires(loadedModule);\n }\n\n angular.forEach(requires, function(requireEntry) {\n // If no configuration is provided, try and find one from a previous load.\n // If there isn't one, bail and let the normal flow run\n if(angular.isString(requireEntry)) {\n var config = self.getModuleConfig(requireEntry);\n if(config === null) {\n moduleCache.push(requireEntry); // We don't know about this module, but something else might, so push it anyway.\n return;\n }\n requireEntry = config;\n }\n\n // Check if this dependency has been loaded previously\n if(self.moduleExists(requireEntry.name)) {\n // compare against the already loaded module to see if the new definition adds any new files\n diff = requireEntry.files.filter(function(n) {\n return self.getModuleConfig(requireEntry.name).files.indexOf(n) < 0;\n });\n\n // If the module was redefined, advise via the console\n if(diff.length !== 0) {\n self._$log.warn('Module \"', moduleName, '\" attempted to redefine configuration for dependency. \"', requireEntry.name, '\"\\n Additional Files Loaded:', diff);\n }\n\n // Push everything to the file loader, it will weed out the duplicates.\n if(angular.isDefined(self.filesLoader)) { // if a files loader is defined\n promisesList.push(self.filesLoader(requireEntry, localParams).then(function() {\n return self._loadDependencies(requireEntry)\n }));\n } else {\n return reject(new Error(`Error: New dependencies need to be loaded from external files (${requireEntry.files}), but no loader has been defined.`));\n }\n return;\n } else if(angular.isArray(requireEntry)) {\n requireEntry = {\n files: requireEntry\n };\n } else if(angular.isObject(requireEntry)) {\n if(requireEntry.hasOwnProperty('name') && requireEntry['name']) {\n // The dependency doesn't exist in the module cache and is a new configuration, so store and push it.\n self.setModuleConfig(requireEntry);\n moduleCache.push(requireEntry['name']);\n }\n }\n\n // Check if the dependency has any files that need to be loaded. If there are, push a new promise to the promise list.\n if(angular.isDefined(requireEntry.files) && requireEntry.files.length !== 0) {\n if(angular.isDefined(self.filesLoader)) { // if a files loader is defined\n promisesList.push(self.filesLoader(requireEntry, localParams).then(function() {\n return self._loadDependencies(requireEntry);\n }));\n } else {\n return reject(new Error(`Error: the module \"${requireEntry.name}\" is defined in external files (${requireEntry.files}), but no loader has been defined.`));\n }\n }\n });\n\n // Create a wrapper promise to watch the promise list and resolve it once everything is done.\n return $q.all(promisesList);\n },\n\n /**\n * Inject new modules into Angular\n * @param moduleName\n * @param localParams\n */\n inject: function(moduleName, localParams) {\n var self = this,\n deferred = $q.defer();\n if(angular.isDefined(moduleName) && moduleName !== null) {\n if(angular.isArray(moduleName)) {\n var promisesList = [];\n angular.forEach(moduleName, function(module) {\n promisesList.push(self.inject(module));\n });\n return $q.all(promisesList);\n } else {\n self._addToLoadList(self._getModuleName(moduleName), true);\n }\n }\n if(modulesToLoad.length > 0) {\n var res = modulesToLoad.slice(); // clean copy\n var loadNext = function loadNext(moduleName) {\n moduleCache.push(moduleName);\n self._loadDependencies(moduleName, localParams).then(function success() {\n try {\n justLoaded = [];\n _register(providers, moduleCache, localParams);\n } catch(e) {\n self._$log.error(e.message);\n deferred.reject(e);\n return;\n }\n\n if(modulesToLoad.length > 0) {\n loadNext(modulesToLoad.shift()); // load the next in list\n } else {\n deferred.resolve(res); // everything has been loaded, resolve\n }\n }, function error(err) {\n deferred.reject(err);\n });\n };\n\n // load the first in list\n loadNext(modulesToLoad.shift());\n } else {\n deferred.resolve();\n }\n return deferred.promise;\n },\n\n /**\n * Get the list of required modules/services/... for this module\n * @param module\n * @returns {Array}\n */\n getRequires: function getRequires(module) {\n var requires = [];\n angular.forEach(module.requires, function(requireModule) {\n if(regModules.indexOf(requireModule) === -1) {\n requires.push(requireModule);\n }\n });\n return requires;\n },\n\n /**\n * Invoke the new modules & component by their providers\n * @param providers\n * @param queue\n * @param moduleName\n * @param reconfig\n * @private\n */\n _invokeQueue: _invokeQueue,\n\n /**\n * Check if a module has been invoked and registers it if not\n * @param args\n * @param moduleName\n * @returns {boolean} is new\n */\n _registerInvokeList: _registerInvokeList,\n\n /**\n * Register a new module and loads it, executing the run/config blocks if needed\n * @param providers\n * @param registerModules\n * @param params\n * @private\n */\n _register: _register,\n\n /**\n * Add a module name to the list of modules that will be loaded in the next inject\n * @param name\n * @param force\n * @private\n */\n _addToLoadList: _addToLoadList\n };\n };\n\n // Let's get the list of loaded modules & components\n this._init(angular.element(window.document));\n });\n\n var bootstrapFct = angular.bootstrap;\n angular.bootstrap = function(element, modules, config) {\n // we use slice to make a clean copy\n angular.forEach(modules.slice(), function(module) {\n _addToLoadList(module, true);\n });\n return bootstrapFct(element, modules, config);\n };\n\n var _addToLoadList = function _addToLoadList(name, force) {\n if((recordDeclarations.length > 0 || force) && angular.isString(name) && modulesToLoad.indexOf(name) === -1) {\n modulesToLoad.push(name);\n }\n };\n\n var ngModuleFct = angular.module;\n angular.module = function(name, requires, configFn) {\n _addToLoadList(name);\n return ngModuleFct(name, requires, configFn);\n };\n\n})(angular, window);\n","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('oc.lazyLoad').directive('ocLazyLoad', function($ocLazyLoad, $compile, $animate, $parse) {\r\n return {\r\n restrict: 'A',\r\n terminal: true,\r\n priority: 1000,\r\n compile: function(element, attrs) {\r\n // we store the content and remove it before compilation\r\n var content = element[0].innerHTML;\r\n element.html('');\r\n\r\n return function($scope, $element, $attr) {\r\n var model = $parse($attr.ocLazyLoad);\r\n $scope.$watch(function() {\r\n return model($scope) || $attr.ocLazyLoad; // it can be a module name (string), an object, an array, or a scope reference to any of this\r\n }, function(moduleName) {\r\n if(angular.isDefined(moduleName)) {\r\n $ocLazyLoad.load(moduleName).then(function success() {\r\n $animate.enter($compile(content)($scope), $element);\r\n });\r\n }\r\n }, true);\r\n };\r\n }\r\n };\r\n });\r\n\r\n})(angular);\r\n","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('oc.lazyLoad').config(function($provide) {\r\n $provide.decorator('$ocLazyLoad', function ($delegate, $q, $window, $interval) {\r\n var uaCssChecked = false,\r\n useCssLoadPatch = false,\r\n anchor = $window.document.getElementsByTagName('head')[0] || $window.document.getElementsByTagName('body')[0];\r\n\r\n /**\r\n * Load a js/css file\r\n * @param type\r\n * @param path\r\n * @param params\r\n * @returns promise\r\n */\r\n $delegate.buildElement = function buildElement(type, path, params) {\r\n var deferred = $q.defer(),\r\n el,\r\n loaded,\r\n filesCache = $delegate._getFilesCache(),\r\n cacheBuster = function cacheBuster(url) {\r\n var dc = new Date().getTime();\r\n if(url.indexOf('?') >= 0) {\r\n if(url.substring(0, url.length - 1) === '&') {\r\n return url + '_dc=' + dc;\r\n }\r\n return url + '&_dc=' + dc;\r\n } else {\r\n return url + '?_dc=' + dc;\r\n }\r\n };\r\n\r\n // Store the promise early so the file load can be detected by other parallel lazy loads\r\n // (ie: multiple routes on one page) a 'true' value isn't sufficient\r\n // as it causes false positive load results.\r\n if(angular.isUndefined(filesCache.get(path))) {\r\n filesCache.put(path, deferred.promise);\r\n }\r\n\r\n // Switch in case more content types are added later\r\n switch(type) {\r\n case 'css':\r\n el = $window.document.createElement('link');\r\n el.type = 'text/css';\r\n el.rel = 'stylesheet';\r\n el.href = params.cache === false ? cacheBuster(path) : path;\r\n break;\r\n case 'js':\r\n el = $window.document.createElement('script');\r\n el.src = params.cache === false ? cacheBuster(path) : path;\r\n break;\r\n default:\r\n deferred.reject(new Error('Requested type \"' + type + '\" is not known. Could not inject \"' + path + '\"'));\r\n break;\r\n }\r\n el.onload = el['onreadystatechange'] = function(e) {\r\n if((el['readyState'] && !(/^c|loade/.test(el['readyState']))) || loaded) return;\r\n el.onload = el['onreadystatechange'] = null;\r\n loaded = 1;\r\n $delegate._broadcast('ocLazyLoad.fileLoaded', path);\r\n deferred.resolve();\r\n };\r\n el.onerror = function() {\r\n deferred.reject(new Error('Unable to load ' + path));\r\n };\r\n el.async = params.serie ? 0 : 1;\r\n\r\n var insertBeforeElem = anchor.lastChild;\r\n if(params.insertBefore) {\r\n var element = angular.element(params.insertBefore);\r\n if(element && element.length > 0) {\r\n insertBeforeElem = element[0];\r\n }\r\n }\r\n anchor.insertBefore(el, insertBeforeElem);\r\n\r\n /*\r\n The event load or readystatechange doesn't fire in:\r\n - iOS < 6 (default mobile browser)\r\n - Android < 4.4 (default mobile browser)\r\n - Safari < 6 (desktop browser)\r\n */\r\n if(type == 'css') {\r\n if(!uaCssChecked) {\r\n var ua = $window.navigator.userAgent.toLowerCase();\r\n\r\n // iOS < 6\r\n if(/iP(hone|od|ad)/.test($window.navigator.platform)) {\r\n var v = ($window.navigator.appVersion).match(/OS (\\d+)_(\\d+)_?(\\d+)?/);\r\n var iOSVersion = parseFloat([parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)].join('.'));\r\n useCssLoadPatch = iOSVersion < 6;\r\n } else if(ua.indexOf(\"android\") > -1) { // Android < 4.4\r\n var androidVersion = parseFloat(ua.slice(ua.indexOf(\"android\") + 8));\r\n useCssLoadPatch = androidVersion < 4.4;\r\n } else if(ua.indexOf('safari') > -1 && ua.indexOf('chrome') == -1 && ua.indexOf('phantomjs') == -1) {\r\n var safariVersion = parseFloat(ua.match(/version\\/([\\.\\d]+)/i)[1]);\r\n useCssLoadPatch = safariVersion < 6;\r\n }\r\n }\r\n\r\n if(useCssLoadPatch) {\r\n var tries = 1000; // * 20 = 20000 miliseconds\r\n var interval = $interval(function() {\r\n try {\r\n el.sheet.cssRules;\r\n $interval.cancel(interval);\r\n el.onload();\r\n } catch(e) {\r\n if(--tries <= 0) {\r\n el.onerror();\r\n }\r\n }\r\n }, 20);\r\n }\r\n }\r\n\r\n return deferred.promise;\r\n };\r\n\r\n return $delegate;\r\n })\r\n });\r\n\r\n})(angular);\r\n","(function(angular) {\n 'use strict';\n\n angular.module('oc.lazyLoad').config(function($provide) {\n $provide.decorator('$ocLazyLoad', function($delegate, $q) {\n /**\n * The function that loads new files\n * @param config\n * @param params\n * @returns {*}\n */\n $delegate.filesLoader = function filesLoader(config, originalParams = {}) {\n var cssFiles = [],\n templatesFiles = [],\n jsFiles = [],\n promises = [],\n cachePromise = null,\n filesCache = $delegate._getFilesCache();\n\n $delegate.toggleWatch(true); // start watching angular.module calls\n\n // we need a real copy because we might edit some parts of it\n var params = angular.copy(angular.extend({}, originalParams, config));\n\n var pushFile = function(path) {\n var file_type = null, m;\n if(angular.isObject(path)) {\n file_type = path.type;\n path = path.path;\n }\n cachePromise = filesCache.get(path);\n if(angular.isUndefined(cachePromise) || params.cache === false) {\n\n // always check for requirejs syntax just in case\n if((m = /^(css|less|html|htm|js)?(?=!)/.exec(path)) !== null) { // Detect file type using preceding type declaration (ala requireJS)\n file_type = m[1];\n path = path.substr(m[1].length + 1, path.length); // Strip the type from the path\n }\n\n if(!file_type) {\n if((m = /[.](css|less|html|htm|js)?((\\?|#).*)?$/.exec(path)) !== null) { // Detect file type via file extension\n file_type = m[1];\n } else if(!$delegate.jsLoader.hasOwnProperty('ocLazyLoadLoader') && $delegate.jsLoader.hasOwnProperty('load')) { // requirejs\n file_type = 'js';\n } else {\n $delegate._$log.error('File type could not be determined. ' + path);\n return;\n }\n }\n\n if((file_type === 'css' || file_type === 'less') && cssFiles.indexOf(path) === -1) {\n cssFiles.push(path);\n } else if((file_type === 'html' || file_type === 'htm') && templatesFiles.indexOf(path) === -1) {\n templatesFiles.push(path);\n } else if((file_type === 'js') || jsFiles.indexOf(path) === -1) {\n jsFiles.push(path);\n } else {\n $delegate._$log.error('File type is not valid. ' + path);\n }\n\n } else if(cachePromise) {\n promises.push(cachePromise);\n }\n };\n\n if(params.serie) {\n pushFile(params.files.shift());\n } else {\n angular.forEach(params.files, path => {\n pushFile(path);\n });\n }\n\n if(cssFiles.length > 0) {\n var cssDeferred = $q.defer();\n $delegate.cssLoader(cssFiles, function(err) {\n if(angular.isDefined(err) && $delegate.cssLoader.hasOwnProperty('ocLazyLoadLoader')) {\n $delegate._$log.error(err);\n cssDeferred.reject(err);\n } else {\n cssDeferred.resolve();\n }\n }, params);\n promises.push(cssDeferred.promise);\n }\n\n if(templatesFiles.length > 0) {\n var templatesDeferred = $q.defer();\n $delegate.templatesLoader(templatesFiles, function(err) {\n if(angular.isDefined(err) && $delegate.templatesLoader.hasOwnProperty('ocLazyLoadLoader')) {\n $delegate._$log.error(err);\n templatesDeferred.reject(err);\n } else {\n templatesDeferred.resolve();\n }\n }, params);\n promises.push(templatesDeferred.promise);\n }\n\n if(jsFiles.length > 0) {\n var jsDeferred = $q.defer();\n $delegate.jsLoader(jsFiles, function(err) {\n if(angular.isDefined(err) && $delegate.jsLoader.hasOwnProperty('ocLazyLoadLoader')) {\n $delegate._$log.error(err);\n jsDeferred.reject(err);\n } else {\n jsDeferred.resolve();\n }\n }, params);\n promises.push(jsDeferred.promise);\n }\n\n if(params.serie && params.files.length > 0) {\n return $q.all(promises).then(function success() {\n return $delegate.filesLoader(config, params);\n });\n } else {\n return $q.all(promises).finally(function(res) {\n $delegate.toggleWatch(false); // stop watching angular.module calls\n return res;\n });\n }\n };\n\n /**\n * Load a module or a list of modules into Angular\n * @param module Mixed the name of a predefined module config object, or a module config object, or an array of either\n * @param params Object optional parameters\n * @returns promise\n */\n $delegate.load = function(module, params = {}) {\n var self = this,\n config = null,\n deferredList = [],\n deferred = $q.defer(),\n errText;\n\n // If module is an array, break it down\n if(angular.isArray(module)) {\n // Resubmit each entry as a single module\n angular.forEach(module, function(m) {\n deferredList.push(self.load(m, params));\n });\n\n // Resolve the promise once everything has loaded\n $q.all(deferredList).then(function success(res) {\n deferred.resolve(res);\n }, function error(err) {\n deferred.reject(err);\n });\n\n return deferred.promise;\n }\n\n // Get or Set a configuration depending on what was passed in\n if(angular.isString(module)) {\n config = self.getModuleConfig(module);\n if(!config) {\n config = {\n files: [module]\n };\n }\n } else if(angular.isObject(module)) {\n // case {type: 'js', path: lazyLoadUrl + 'testModule.fakejs'}\n if(angular.isDefined(module.path) && angular.isDefined(module.type)) {\n config = {\n files: [module]\n };\n } else {\n config = self.setModuleConfig(module);\n }\n }\n\n if(config === null) {\n var moduleName = self._getModuleName(module);\n errText = 'Module \"' + (moduleName || 'unknown') + '\" is not configured, cannot load.';\n $delegate._$log.error(errText);\n deferred.reject(new Error(errText));\n return deferred.promise;\n } else {\n // deprecated\n if(angular.isDefined(config.template)) {\n if(angular.isUndefined(config.files)) {\n config.files = [];\n }\n if(angular.isString(config.template)) {\n config.files.push(config.template);\n } else if(angular.isArray(config.template)) {\n config.files.concat(config.template);\n }\n }\n }\n\n var localParams = {};\n angular.extend(localParams, params, config);\n\n // if someone used an external loader and called the load function with just the module name\n if(angular.isUndefined(config.files) && angular.isDefined(config.name) && $delegate.moduleExists(config.name)) {\n return $delegate.inject(config.name, localParams);\n }\n\n $delegate.filesLoader(config, localParams).then(function success() {\n $delegate.inject(null, localParams).then(function(res) {\n deferred.resolve(res);\n }, function(err) {\n deferred.reject(err);\n });\n }, function error(err) {\n deferred.reject(err);\n });\n\n return deferred.promise;\n };\n\n // return the patched service\n return $delegate;\n });\n });\n\n})(angular);\n","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('oc.lazyLoad').config(function($provide) {\r\n $provide.decorator('$ocLazyLoad', function ($delegate, $q) {\r\n /**\r\n * cssLoader function\r\n * @type Function\r\n * @param paths array list of css files to load\r\n * @param callback to call when everything is loaded. We use a callback and not a promise\r\n * @param params object config parameters\r\n * because the user can overwrite cssLoader and it will probably not use promises :(\r\n */\r\n $delegate.cssLoader = function(paths, callback, params) {\r\n var promises = [];\r\n angular.forEach(paths, function loading(path) {\r\n promises.push($delegate.buildElement('css', path, params));\r\n });\r\n $q.all(promises).then(function success() {\r\n callback();\r\n }, err => {\r\n callback(err);\r\n });\r\n };\r\n $delegate.cssLoader.ocLazyLoadLoader = true;\r\n\r\n return $delegate;\r\n })\r\n });\r\n\r\n})(angular);\r\n","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('oc.lazyLoad').config(function($provide) {\r\n $provide.decorator('$ocLazyLoad', function ($delegate, $q) {\r\n /**\r\n * jsLoader function\r\n * @type Function\r\n * @param paths array list of js files to load\r\n * @param callback to call when everything is loaded. We use a callback and not a promise\r\n * @param params object config parameters\r\n * because the user can overwrite jsLoader and it will probably not use promises :(\r\n */\r\n $delegate.jsLoader = require;\r\n\r\n return $delegate;\r\n })\r\n });\r\n\r\n})(angular);\r\n","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('oc.lazyLoad').config(function($provide) {\r\n $provide.decorator('$ocLazyLoad', function ($delegate, $templateCache, $q, $http) {\r\n /**\r\n * templatesLoader function\r\n * @type Function\r\n * @param paths array list of css files to load\r\n * @param callback to call when everything is loaded. We use a callback and not a promise\r\n * @param params object config parameters for $http\r\n * because the user can overwrite templatesLoader and it will probably not use promises :(\r\n */\r\n $delegate.templatesLoader = function(paths, callback, params) {\r\n var promises = [],\r\n filesCache = $delegate._getFilesCache();\r\n\r\n angular.forEach(paths, function(url) {\r\n var deferred = $q.defer();\r\n promises.push(deferred.promise);\r\n $http.get(url, params).success(function(data) {\r\n if(angular.isString(data) && data.length > 0) {\r\n angular.forEach(angular.element(data), function(node) {\r\n if(node.nodeName === 'SCRIPT' && node.type === 'text/ng-template') {\r\n $templateCache.put(node.id, node.innerHTML);\r\n }\r\n });\r\n }\r\n if(angular.isUndefined(filesCache.get(url))) {\r\n filesCache.put(url, true);\r\n }\r\n deferred.resolve();\r\n }).error(function(err) {\r\n deferred.reject(new Error('Unable to load template file \"' + url + '\": ' + err));\r\n });\r\n });\r\n return $q.all(promises).then(function success() {\r\n callback();\r\n }, function error(err) {\r\n callback(err);\r\n });\r\n };\r\n $delegate.templatesLoader.ocLazyLoadLoader = true;\r\n\r\n return $delegate;\r\n })\r\n });\r\n\r\n})(angular);\r\n","// Array.indexOf polyfill for IE8\r\nif(!Array.prototype.indexOf) {\r\n Array.prototype.indexOf = function(searchElement, fromIndex) {\r\n var k;\r\n\r\n // 1. Let O be the result of calling ToObject passing\r\n // the this value as the argument.\r\n if(this == null) {\r\n throw new TypeError('\"this\" is null or not defined');\r\n }\r\n\r\n var O = Object(this);\r\n\r\n // 2. Let lenValue be the result of calling the Get\r\n // internal method of O with the argument \"length\".\r\n // 3. Let len be ToUint32(lenValue).\r\n var len = O.length >>> 0;\r\n\r\n // 4. If len is 0, return -1.\r\n if(len === 0) {\r\n return -1;\r\n }\r\n\r\n // 5. If argument fromIndex was passed let n be\r\n // ToInteger(fromIndex); else let n be 0.\r\n var n = +fromIndex || 0;\r\n\r\n if(Math.abs(n) === Infinity) {\r\n n = 0;\r\n }\r\n\r\n // 6. If n >= len, return -1.\r\n if(n >= len) {\r\n return -1;\r\n }\r\n\r\n // 7. If n >= 0, then Let k be n.\r\n // 8. Else, n<0, Let k be len - abs(n).\r\n // If k is less than 0, then let k be 0.\r\n k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);\r\n\r\n // 9. Repeat, while k < len\r\n while(k < len) {\r\n // a. Let Pk be ToString(k).\r\n // This is implicit for LHS operands of the in operator\r\n // b. Let kPresent be the result of calling the\r\n // HasProperty internal method of O with argument Pk.\r\n // This step can be combined with c\r\n // c. If kPresent is true, then\r\n // i. Let elementK be the result of calling the Get\r\n // internal method of O with the argument ToString(k).\r\n // ii. Let same be the result of applying the\r\n // Strict Equality Comparison Algorithm to\r\n // searchElement and elementK.\r\n // iii. If same is true, return k.\r\n if(k in O && O[k] === searchElement) {\r\n return k;\r\n }\r\n k++;\r\n }\r\n return -1;\r\n };\r\n}\r\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/ocLazyLoad.require.min.js b/dist/ocLazyLoad.require.min.js index b2fbc64..c7a5fb0 100644 --- a/dist/ocLazyLoad.require.min.js +++ b/dist/ocLazyLoad.require.min.js @@ -5,5 +5,5 @@ * @license MIT * @author Olivier Combe */ -!function(e,n){"use strict";var r=["ng","oc.lazyLoad"],o={},t=[],i=[],a=[],s=e.noop,u={},c=[],d=e.module("oc.lazyLoad",["ng"]);d.provider("$ocLazyLoad",["$controllerProvider","$provide","$compileProvider","$filterProvider","$injector","$animateProvider",function(d,l,g,p,m,v){function y(n,o,t){if(o){var i,a,d,l=[];for(i=o.length-1;i>=0;i--)if(a=o[i],e.isString(a)||(a=j(a)),a&&-1===c.indexOf(a)){var f=-1===r.indexOf(a);if(d=h(a),f&&(r.push(a),y(n,d.requires,t)),d._runBlocks.length>0)for(u[a]=[];d._runBlocks.length>0;)u[a].push(d._runBlocks.shift());e.isDefined(u[a])&&(f||t.rerun)&&(l=l.concat(u[a])),$(n,d._invokeQueue,a,t.reconfig),$(n,d._configBlocks,a,t.reconfig),s(f?"ocLazyLoad.moduleLoaded":"ocLazyLoad.moduleReloaded",a),o.pop(),c.push(a)}var g=n.getInstanceInjector();e.forEach(l,function(e){g.invoke(e)})}}function L(n,r){function t(n){return e.isArray(n)?D(n.toString()):e.isObject(n)?D(z(n)):e.isDefined(n)&&null!==n?D(n.toString()):n}var i=n[2][0],a=n[1],u=!1;e.isUndefined(o[r])&&(o[r]={}),e.isUndefined(o[r][a])&&(o[r][a]={});var c=function(e,n){u=!0,o[r][a][e].push(n),s("ocLazyLoad.componentLoaded",[r,a,e])};if(e.isString(i))e.isUndefined(o[r][a][i])&&(o[r][a][i]=[]),-1===o[r][a][i].indexOf(t(n[2][1]))&&c(i,t(n[2][1]));else{if(!e.isObject(i))return!1;e.forEach(i,function(n){e.isString(n)&&(e.isUndefined(o[r][a][n])&&(o[r][a][n]=[]),-1===o[r][a][n].indexOf(t(i[1]))&&c(n,t(i[1])))})}return u}function $(n,r,o,i){if(r){var a,s,u,c;for(a=0,s=r.length;s>a;a++)if(u=r[a],e.isArray(u)){if(null!==n){if(!n.hasOwnProperty(u[0]))throw new Error("unsupported provider "+u[0]);c=n[u[0]]}var d=L(u,o);if("invoke"!==u[1])d&&e.isDefined(c)&&c[u[1]].apply(c,u[2]);else{var l=function(n){var r=t.indexOf(o+"-"+n);(-1===r||i)&&(-1===r&&t.push(o+"-"+n),e.isDefined(c)&&c[u[1]].apply(c,u[2]))};if(e.isFunction(u[2][0]))l(u[2][0]);else if(e.isArray(u[2][0]))for(var f=0,h=u[2][0].length;h>f;f++)e.isFunction(u[2][0][f])&&l(u[2][0][f])}}}}function j(n){var r=null;return e.isString(n)?r=n:e.isObject(n)&&n.hasOwnProperty("name")&&e.isString(n.name)&&(r=n.name),r}function _(n){if(!e.isString(n))return!1;try{return h(n)}catch(r){if(/No module/.test(r)||r.message.indexOf("$injector:nomod")>-1)return!1}}var E={},O={$controllerProvider:d,$compileProvider:g,$filterProvider:p,$provide:l,$injector:m,$animateProvider:v},w=!1,x=!1,b=[];b.push=function(e){-1===this.indexOf(e)&&Array.prototype.push.apply(this,arguments)},this.config=function(n){e.isDefined(n.modules)&&(e.isArray(n.modules)?e.forEach(n.modules,function(e){E[e.name]=e}):E[n.modules.name]=n.modules),e.isDefined(n.debug)&&(w=n.debug),e.isDefined(n.events)&&(x=n.events)},this._init=function(o){if(0===i.length){var t=[o],s=["ng:app","ng-app","x-ng-app","data-ng-app"],u=/\sng[:\-]app(:\s*([\w\d_]+);?)?\s/,c=function(e){return e&&t.push(e)};e.forEach(s,function(n){s[n]=!0,c(document.getElementById(n)),n=n.replace(":","\\:"),o[0].querySelectorAll&&(e.forEach(o[0].querySelectorAll("."+n),c),e.forEach(o[0].querySelectorAll("."+n+"\\:"),c),e.forEach(o[0].querySelectorAll("["+n+"]"),c))}),e.forEach(t,function(n){if(0===i.length){var r=" "+o.className+" ",t=u.exec(r);t?i.push((t[2]||"").replace(/\s+/g,",")):e.forEach(n.attributes,function(e){0===i.length&&s[e.name]&&i.push(e.value)})}})}0!==i.length||(n.jasmine||n.mocha)&&e.isDefined(e.mock)||console.error("No module found during bootstrap, unable to init ocLazyLoad. You should always use the ng-app directive or angular.boostrap when you use ocLazyLoad.");var d=function l(n){if(-1===r.indexOf(n)){r.push(n);var o=e.module(n);$(null,o._invokeQueue,n),$(null,o._configBlocks,n),e.forEach(o.requires,l)}};e.forEach(i,function(e){d(e)}),i=[],a.pop()};var z=function(n){var r=[];return JSON.stringify(n,function(n,o){if(e.isObject(o)&&null!==o){if(-1!==r.indexOf(o))return;r.push(o)}return o})},D=function(e){var n,r,o,t=0;if(0==e.length)return t;for(n=0,o=e.length;o>n;n++)r=e.charCodeAt(n),t=(t<<5)-t+r,t|=0;return t};this.$get=["$log","$rootElement","$rootScope","$cacheFactory","$q",function(n,o,t,u,d){function l(e){var r=d.defer();return n.error(e.message),r.reject(e),r.promise}var g,p=u("ocLazyLoad");return w||(n={},n.error=e.noop,n.warn=e.noop,n.info=e.noop),O.getInstanceInjector=function(){return g?g:g=o.data("$injector")||e.injector()},s=function(e,r){x&&t.$broadcast(e,r),w&&n.info(e,r)},{_broadcast:s,_$log:n,_getFilesCache:function(){return p},toggleWatch:function(e){e?a.push(!0):a.pop()},getModuleConfig:function(n){if(!e.isString(n))throw new Error("You need to give the name of the module to get");return E[n]?e.copy(E[n]):null},setModuleConfig:function(n){if(!e.isObject(n))throw new Error("You need to give the module config object to set");return E[n.name]=n,n},getModules:function(){return r},isLoaded:function(n){var o=function(e){var n=r.indexOf(e)>-1;return n||(n=!!_(e)),n};if(e.isString(n)&&(n=[n]),e.isArray(n)){var t,i;for(t=0,i=n.length;i>t;t++)if(!o(n[t]))return!1;return!0}throw new Error("You need to define the module(s) name(s)")},_getModuleName:j,_getModule:function(e){try{return h(e)}catch(n){throw(/No module/.test(n)||n.message.indexOf("$injector:nomod")>-1)&&(n.message='The module "'+z(e)+'" that you are trying to load does not exist. '+n.message),n}},moduleExists:_,_loadDependencies:function(n,r){var o,t,i,a=[],s=this;if(n=s._getModuleName(n),null===n)return d.when();try{o=s._getModule(n)}catch(u){return l(u)}return t=s.getRequires(o),e.forEach(t,function(o){if(e.isString(o)){var t=s.getModuleConfig(o);if(null===t)return void b.push(o);o=t}if(s.moduleExists(o.name))return i=o.files.filter(function(e){return s.getModuleConfig(o.name).files.indexOf(e)<0}),0!==i.length&&s._$log.warn('Module "',n,'" attempted to redefine configuration for dependency. "',o.name,'"\n Additional Files Loaded:',i),e.isDefined(s.filesLoader)?void a.push(s.filesLoader(o,r).then(function(){return s._loadDependencies(o)})):l(new Error("Error: New dependencies need to be loaded from external files ("+o.files+"), but no loader has been defined."));if(e.isArray(o)?o={files:o}:e.isObject(o)&&o.hasOwnProperty("name")&&o.name&&(s.setModuleConfig(o),b.push(o.name)),e.isDefined(o.files)&&0!==o.files.length){if(!e.isDefined(s.filesLoader))return l(new Error('Error: the module "'+o.name+'" is defined in external files ('+o.files+"), but no loader has been defined."));a.push(s.filesLoader(o,r).then(function(){return s._loadDependencies(o)}))}}),d.all(a)},inject:function(n,r){var o=this,t=d.defer();if(e.isDefined(n)&&null!==n){if(e.isArray(n)){var a=[];return e.forEach(n,function(e){a.push(o.inject(e))}),d.all(a)}o._addToLoadList(o._getModuleName(n),!0)}if(i.length>0){var s=i.slice(),u=function l(e){b.push(e),o._loadDependencies(e,r).then(function(){try{c=[],y(O,b,r)}catch(e){return o._$log.error(e.message),void t.reject(e)}i.length>0?l(i.shift()):t.resolve(s)},function(e){t.reject(e)})};u(i.shift())}else t.resolve();return t.promise},getRequires:function(n){var o=[];return e.forEach(n.requires,function(e){-1===r.indexOf(e)&&o.push(e)}),o},_invokeQueue:$,_registerInvokeList:L,_register:y,_addToLoadList:f}}],this._init(e.element(n.document))}]);var l=e.bootstrap;e.bootstrap=function(n,r,o){return e.forEach(r.slice(),function(e){f(e,!0)}),l(n,r,o)};var f=function(n,r){(a.length>0||r)&&e.isString(n)&&-1===i.indexOf(n)&&i.push(n)},h=e.module;e.module=function(e,n,r){return f(e),h(e,n,r)}}(angular,window),function(e){"use strict";e.module("oc.lazyLoad").directive("ocLazyLoad",["$ocLazyLoad","$compile","$animate","$parse",function(n,r,o,t){return{restrict:"A",terminal:!0,priority:1e3,compile:function(i){var a=i[0].innerHTML;return i.html(""),function(i,s,u){var c=t(u.ocLazyLoad);i.$watch(function(){return c(i)||u.ocLazyLoad},function(t){e.isDefined(t)&&n.load(t).then(function(){o.enter(r(a)(i),s)})},!0)}}}}])}(angular),function(e){"use strict";e.module("oc.lazyLoad").config(["$provide",function(n){n.decorator("$ocLazyLoad",["$delegate","$q","$window","$interval",function(n,r,o,t){var i=!1,a=!1,s=o.document.getElementsByTagName("head")[0]||o.document.getElementsByTagName("body")[0];return n.buildElement=function(u,c,d){var l,f,h=r.defer(),g=n._getFilesCache(),p=function(e){var n=(new Date).getTime();return e.indexOf("?")>=0?"&"===e.substring(0,e.length-1)?e+"_dc="+n:e+"&_dc="+n:e+"?_dc="+n};switch(e.isUndefined(g.get(c))&&g.put(c,h.promise),u){case"css":l=o.document.createElement("link"),l.type="text/css",l.rel="stylesheet",l.href=d.cache===!1?p(c):c;break;case"js":l=o.document.createElement("script"),l.src=d.cache===!1?p(c):c;break;default:h.reject(new Error('Requested type "'+u+'" is not known. Could not inject "'+c+'"'))}l.onload=l.onreadystatechange=function(){l.readyState&&!/^c|loade/.test(l.readyState)||f||(l.onload=l.onreadystatechange=null,f=1,n._broadcast("ocLazyLoad.fileLoaded",c),h.resolve())},l.onerror=function(){h.reject(new Error("Unable to load "+c))},l.async=d.serie?0:1;var m=s.lastChild;if(d.insertBefore){var v=e.element(d.insertBefore);v&&v.length>0&&(m=v[0])}if(s.insertBefore(l,m),"css"==u){if(!i){var y=o.navigator.userAgent.toLowerCase();if(/iP(hone|od|ad)/.test(o.navigator.platform)){var L=o.navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/),$=parseFloat([parseInt(L[1],10),parseInt(L[2],10),parseInt(L[3]||0,10)].join("."));a=6>$}else if(y.indexOf("android")>-1){var j=parseFloat(y.slice(y.indexOf("android")+8));a=4.4>j}else if(y.indexOf("safari")>-1&&-1==y.indexOf("chrome")&&-1==y.indexOf("phantomjs")){var _=parseFloat(y.match(/version\/([\.\d]+)/i)[1]);a=6>_}}if(a)var E=1e3,O=t(function(){try{l.sheet.cssRules,t.cancel(O),l.onload()}catch(e){--E<=0&&l.onerror()}},20)}return h.promise},n}])}])}(angular),function(e){"use strict";e.module("oc.lazyLoad").config(["$provide",function(n){n.decorator("$ocLazyLoad",["$delegate","$q",function(n,r){return n.filesLoader=function(o){var t=void 0===arguments[1]?{}:arguments[1],i=[],a=[],s=[],u=[],c=null,d=n._getFilesCache();n.toggleWatch(!0);var l=e.copy(e.extend({},t,o)),f=function(r){var o,t=null;if(e.isObject(r)&&(t=r.type,r=r.path),c=d.get(r),e.isUndefined(c)||l.cache===!1){if(null!==(o=/^(css|less|html|htm|js)?(?=!)/.exec(r))&&(t=o[1],r=r.substr(o[1].length+1,r.length)),!t)if(null!==(o=/[.](css|less|html|htm|js)?((\?|#).*)?$/.exec(r)))t=o[1];else{if(n.jsLoader.hasOwnProperty("ocLazyLoadLoader")||!n.jsLoader.hasOwnProperty("load"))return void n._$log.error("File type could not be determined. "+r);t="js"}"css"!==t&&"less"!==t||-1!==i.indexOf(r)?"html"!==t&&"htm"!==t||-1!==a.indexOf(r)?"js"===t||-1===s.indexOf(r)?s.push(r):n._$log.error("File type is not valid. "+r):a.push(r):i.push(r)}else c&&u.push(c)};if(l.serie?f(l.files.shift()):e.forEach(l.files,function(e){f(e)}),i.length>0){var h=r.defer();n.cssLoader(i,function(r){e.isDefined(r)&&n.cssLoader.hasOwnProperty("ocLazyLoadLoader")?(n._$log.error(r),h.reject(r)):h.resolve()},l),u.push(h.promise)}if(a.length>0){var g=r.defer();n.templatesLoader(a,function(r){e.isDefined(r)&&n.templatesLoader.hasOwnProperty("ocLazyLoadLoader")?(n._$log.error(r),g.reject(r)):g.resolve()},l),u.push(g.promise)}if(s.length>0){var p=r.defer();n.jsLoader(s,function(r){e.isDefined(r)&&n.jsLoader.hasOwnProperty("ocLazyLoadLoader")?(n._$log.error(r),p.reject(r)):p.resolve()},l),u.push(p.promise)}return l.serie&&l.files.length>0?r.all(u).then(function(){return n.filesLoader(o,l)}):r.all(u)["finally"](function(e){return n.toggleWatch(!1),e})},n.load=function(o){var t,i=void 0===arguments[1]?{}:arguments[1],a=this,s=null,u=[],c=r.defer();if(e.isArray(o))return e.forEach(o,function(e){u.push(a.load(e,i))}),r.all(u).then(function(e){c.resolve(e)},function(e){c.reject(e)}),c.promise;if(e.isString(o)?(s=a.getModuleConfig(o),s||(s={files:[o]})):e.isObject(o)&&(s=e.isDefined(o.path)&&e.isDefined(o.type)?{files:[o]}:a.setModuleConfig(o)),null===s){var d=a._getModuleName(o);return t='Module "'+(d||"unknown")+'" is not configured, cannot load.',n._$log.error(t),c.reject(new Error(t)),c.promise}e.isDefined(s.template)&&(e.isUndefined(s.files)&&(s.files=[]),e.isString(s.template)?s.files.push(s.template):e.isArray(s.template)&&s.files.concat(s.template));var l={};return e.extend(l,i,s),e.isUndefined(s.files)&&e.isDefined(s.name)&&n.moduleExists(s.name)?n.inject(s.name,l):(n.filesLoader(s,l).then(function(){n.inject(null,l).then(function(e){c.resolve(e)},function(e){c.reject(e)})},function(e){c.reject(e)}),c.promise)},n}])}])}(angular),function(e){"use strict";e.module("oc.lazyLoad").config(["$provide",function(n){n.decorator("$ocLazyLoad",["$delegate","$q",function(n,r){return n.cssLoader=function(o,t,i){var a=[];e.forEach(o,function(e){a.push(n.buildElement("css",e,i))}),r.all(a).then(function(){t()},function(e){t(e)})},n.cssLoader.ocLazyLoadLoader=!0,n}])}])}(angular),function(e){"use strict";e.module("oc.lazyLoad").config(["$provide",function(e){e.decorator("$ocLazyLoad",["$delegate","$q",function(e){return e.jsLoader=require,e}])}])}(angular),function(e){"use strict";e.module("oc.lazyLoad").config(["$provide",function(n){n.decorator("$ocLazyLoad",["$delegate","$templateCache","$q","$http",function(n,r,o,t){return n.templatesLoader=function(i,a,s){var u=[],c=n._getFilesCache();return e.forEach(i,function(n){var i=o.defer();u.push(i.promise),t.get(n,s).success(function(o){e.isString(o)&&o.length>0&&e.forEach(e.element(o),function(e){"SCRIPT"===e.nodeName&&"text/ng-template"===e.type&&r.put(e.id,e.innerHTML)}),e.isUndefined(c.get(n))&&c.put(n,!0),i.resolve()}).error(function(e){i.reject(new Error('Unable to load template file "'+n+'": '+e))})}),o.all(u).then(function(){a()},function(e){a(e)})},n.templatesLoader.ocLazyLoadLoader=!0,n}])}])}(angular),Array.prototype.indexOf||(Array.prototype.indexOf=function(e,n){var r;if(null==this)throw new TypeError('"this" is null or not defined');var o=Object(this),t=o.length>>>0;if(0===t)return-1;var i=+n||0;if(1/0===Math.abs(i)&&(i=0),i>=t)return-1;for(r=Math.max(i>=0?i:t-Math.abs(i),0);t>r;){if(r in o&&o[r]===e)return r;r++}return-1}); +!function(e,n){"use strict";var r=["ng","oc.lazyLoad"],o={},t=[],i=[],a=[],s=e.noop,u={},c=[],l=e.module("oc.lazyLoad",["ng"]);l.provider("$ocLazyLoad",["$controllerProvider","$provide","$compileProvider","$filterProvider","$injector","$animateProvider",function(l,d,g,p,m,v){function y(n,o,t){if(o){var i,a,l,d=[];for(i=o.length-1;i>=0;i--)if(a=o[i],e.isString(a)||(a=j(a)),a&&-1===c.indexOf(a)){var f=-1===r.indexOf(a);if(l=h(a),f&&(r.push(a),y(n,l.requires,t)),l._runBlocks.length>0)for(u[a]=[];l._runBlocks.length>0;)u[a].push(l._runBlocks.shift());e.isDefined(u[a])&&(f||t.rerun)&&(d=d.concat(u[a])),$(n,l._invokeQueue,a,t.reconfig),$(n,l._configBlocks,a,t.reconfig),s(f?"ocLazyLoad.moduleLoaded":"ocLazyLoad.moduleReloaded",a),o.pop(),c.push(a)}var g=n.getInstanceInjector();e.forEach(d,function(e){g.invoke(e)})}}function L(n,r){function t(n){return e.isArray(n)?D(n.toString()):e.isObject(n)?D(z(n)):e.isDefined(n)&&null!==n?D(n.toString()):n}var i=n[2][0],a=n[1],u=!1;e.isUndefined(o[r])&&(o[r]={}),e.isUndefined(o[r][a])&&(o[r][a]={});var c=function(n,t){e.isUndefined(o[r][a][n])&&(o[r][a][n]=[]),-1===o[r][a][n].indexOf(t)&&(u=!0,o[r][a][n].push(t),s("ocLazyLoad.componentLoaded",[r,a,n]))};if(e.isString(i))c(i,t(n[2][1]));else{if(!e.isObject(i))return!1;e.forEach(i,function(n,r){e.isString(n)?c(n,t(i[1])):c(r,t(n))})}return u}function $(n,r,o,i){if(r){var a,s,u,c;for(a=0,s=r.length;s>a;a++)if(u=r[a],e.isArray(u)){if(null!==n){if(!n.hasOwnProperty(u[0]))throw new Error("unsupported provider "+u[0]);c=n[u[0]]}var l=L(u,o);if("invoke"!==u[1])l&&e.isDefined(c)&&c[u[1]].apply(c,u[2]);else{var d=function(n){var r=t.indexOf(o+"-"+n);(-1===r||i)&&(-1===r&&t.push(o+"-"+n),e.isDefined(c)&&c[u[1]].apply(c,u[2]))};if(e.isFunction(u[2][0]))d(u[2][0]);else if(e.isArray(u[2][0]))for(var f=0,h=u[2][0].length;h>f;f++)e.isFunction(u[2][0][f])&&d(u[2][0][f])}}}}function j(n){var r=null;return e.isString(n)?r=n:e.isObject(n)&&n.hasOwnProperty("name")&&e.isString(n.name)&&(r=n.name),r}function _(n){if(!e.isString(n))return!1;try{return h(n)}catch(r){if(/No module/.test(r)||r.message.indexOf("$injector:nomod")>-1)return!1}}var E={},O={$controllerProvider:l,$compileProvider:g,$filterProvider:p,$provide:d,$injector:m,$animateProvider:v},w=!1,x=!1,b=[];b.push=function(e){-1===this.indexOf(e)&&Array.prototype.push.apply(this,arguments)},this.config=function(n){e.isDefined(n.modules)&&(e.isArray(n.modules)?e.forEach(n.modules,function(e){E[e.name]=e}):E[n.modules.name]=n.modules),e.isDefined(n.debug)&&(w=n.debug),e.isDefined(n.events)&&(x=n.events)},this._init=function(o){if(0===i.length){var t=[o],s=["ng:app","ng-app","x-ng-app","data-ng-app"],u=/\sng[:\-]app(:\s*([\w\d_]+);?)?\s/,c=function(e){return e&&t.push(e)};e.forEach(s,function(n){s[n]=!0,c(document.getElementById(n)),n=n.replace(":","\\:"),o[0].querySelectorAll&&(e.forEach(o[0].querySelectorAll("."+n),c),e.forEach(o[0].querySelectorAll("."+n+"\\:"),c),e.forEach(o[0].querySelectorAll("["+n+"]"),c))}),e.forEach(t,function(n){if(0===i.length){var r=" "+o.className+" ",t=u.exec(r);t?i.push((t[2]||"").replace(/\s+/g,",")):e.forEach(n.attributes,function(e){0===i.length&&s[e.name]&&i.push(e.value)})}})}0!==i.length||(n.jasmine||n.mocha)&&e.isDefined(e.mock)||console.error("No module found during bootstrap, unable to init ocLazyLoad. You should always use the ng-app directive or angular.boostrap when you use ocLazyLoad.");var l=function d(n){if(-1===r.indexOf(n)){r.push(n);var o=e.module(n);$(null,o._invokeQueue,n),$(null,o._configBlocks,n),e.forEach(o.requires,d)}};e.forEach(i,function(e){l(e)}),i=[],a.pop()};var z=function(n){var r=[];return JSON.stringify(n,function(n,o){if(e.isObject(o)&&null!==o){if(-1!==r.indexOf(o))return;r.push(o)}return o})},D=function(e){var n,r,o,t=0;if(0==e.length)return t;for(n=0,o=e.length;o>n;n++)r=e.charCodeAt(n),t=(t<<5)-t+r,t|=0;return t};this.$get=["$log","$rootElement","$rootScope","$cacheFactory","$q",function(n,o,t,u,l){function d(e){var r=l.defer();return n.error(e.message),r.reject(e),r.promise}var g,p=u("ocLazyLoad");return w||(n={},n.error=e.noop,n.warn=e.noop,n.info=e.noop),O.getInstanceInjector=function(){return g?g:g=o.data("$injector")||e.injector()},s=function(e,r){x&&t.$broadcast(e,r),w&&n.info(e,r)},{_broadcast:s,_$log:n,_getFilesCache:function(){return p},toggleWatch:function(e){e?a.push(!0):a.pop()},getModuleConfig:function(n){if(!e.isString(n))throw new Error("You need to give the name of the module to get");return E[n]?e.copy(E[n]):null},setModuleConfig:function(n){if(!e.isObject(n))throw new Error("You need to give the module config object to set");return E[n.name]=n,n},getModules:function(){return r},isLoaded:function(n){var o=function(e){var n=r.indexOf(e)>-1;return n||(n=!!_(e)),n};if(e.isString(n)&&(n=[n]),e.isArray(n)){var t,i;for(t=0,i=n.length;i>t;t++)if(!o(n[t]))return!1;return!0}throw new Error("You need to define the module(s) name(s)")},_getModuleName:j,_getModule:function(e){try{return h(e)}catch(n){throw(/No module/.test(n)||n.message.indexOf("$injector:nomod")>-1)&&(n.message='The module "'+z(e)+'" that you are trying to load does not exist. '+n.message),n}},moduleExists:_,_loadDependencies:function(n,r){var o,t,i,a=[],s=this;if(n=s._getModuleName(n),null===n)return l.when();try{o=s._getModule(n)}catch(u){return d(u)}return t=s.getRequires(o),e.forEach(t,function(o){if(e.isString(o)){var t=s.getModuleConfig(o);if(null===t)return void b.push(o);o=t}if(s.moduleExists(o.name))return i=o.files.filter(function(e){return s.getModuleConfig(o.name).files.indexOf(e)<0}),0!==i.length&&s._$log.warn('Module "',n,'" attempted to redefine configuration for dependency. "',o.name,'"\n Additional Files Loaded:',i),e.isDefined(s.filesLoader)?void a.push(s.filesLoader(o,r).then(function(){return s._loadDependencies(o)})):d(new Error("Error: New dependencies need to be loaded from external files ("+o.files+"), but no loader has been defined."));if(e.isArray(o)?o={files:o}:e.isObject(o)&&o.hasOwnProperty("name")&&o.name&&(s.setModuleConfig(o),b.push(o.name)),e.isDefined(o.files)&&0!==o.files.length){if(!e.isDefined(s.filesLoader))return d(new Error('Error: the module "'+o.name+'" is defined in external files ('+o.files+"), but no loader has been defined."));a.push(s.filesLoader(o,r).then(function(){return s._loadDependencies(o)}))}}),l.all(a)},inject:function(n,r){var o=this,t=l.defer();if(e.isDefined(n)&&null!==n){if(e.isArray(n)){var a=[];return e.forEach(n,function(e){a.push(o.inject(e))}),l.all(a)}o._addToLoadList(o._getModuleName(n),!0)}if(i.length>0){var s=i.slice(),u=function d(e){b.push(e),o._loadDependencies(e,r).then(function(){try{c=[],y(O,b,r)}catch(e){return o._$log.error(e.message),void t.reject(e)}i.length>0?d(i.shift()):t.resolve(s)},function(e){t.reject(e)})};u(i.shift())}else t.resolve();return t.promise},getRequires:function(n){var o=[];return e.forEach(n.requires,function(e){-1===r.indexOf(e)&&o.push(e)}),o},_invokeQueue:$,_registerInvokeList:L,_register:y,_addToLoadList:f}}],this._init(e.element(n.document))}]);var d=e.bootstrap;e.bootstrap=function(n,r,o){return e.forEach(r.slice(),function(e){f(e,!0)}),d(n,r,o)};var f=function(n,r){(a.length>0||r)&&e.isString(n)&&-1===i.indexOf(n)&&i.push(n)},h=e.module;e.module=function(e,n,r){return f(e),h(e,n,r)}}(angular,window),function(e){"use strict";e.module("oc.lazyLoad").directive("ocLazyLoad",["$ocLazyLoad","$compile","$animate","$parse",function(n,r,o,t){return{restrict:"A",terminal:!0,priority:1e3,compile:function(i){var a=i[0].innerHTML;return i.html(""),function(i,s,u){var c=t(u.ocLazyLoad);i.$watch(function(){return c(i)||u.ocLazyLoad},function(t){e.isDefined(t)&&n.load(t).then(function(){o.enter(r(a)(i),s)})},!0)}}}}])}(angular),function(e){"use strict";e.module("oc.lazyLoad").config(["$provide",function(n){n.decorator("$ocLazyLoad",["$delegate","$q","$window","$interval",function(n,r,o,t){var i=!1,a=!1,s=o.document.getElementsByTagName("head")[0]||o.document.getElementsByTagName("body")[0];return n.buildElement=function(u,c,l){var d,f,h=r.defer(),g=n._getFilesCache(),p=function(e){var n=(new Date).getTime();return e.indexOf("?")>=0?"&"===e.substring(0,e.length-1)?e+"_dc="+n:e+"&_dc="+n:e+"?_dc="+n};switch(e.isUndefined(g.get(c))&&g.put(c,h.promise),u){case"css":d=o.document.createElement("link"),d.type="text/css",d.rel="stylesheet",d.href=l.cache===!1?p(c):c;break;case"js":d=o.document.createElement("script"),d.src=l.cache===!1?p(c):c;break;default:h.reject(new Error('Requested type "'+u+'" is not known. Could not inject "'+c+'"'))}d.onload=d.onreadystatechange=function(){d.readyState&&!/^c|loade/.test(d.readyState)||f||(d.onload=d.onreadystatechange=null,f=1,n._broadcast("ocLazyLoad.fileLoaded",c),h.resolve())},d.onerror=function(){h.reject(new Error("Unable to load "+c))},d.async=l.serie?0:1;var m=s.lastChild;if(l.insertBefore){var v=e.element(l.insertBefore);v&&v.length>0&&(m=v[0])}if(s.insertBefore(d,m),"css"==u){if(!i){var y=o.navigator.userAgent.toLowerCase();if(/iP(hone|od|ad)/.test(o.navigator.platform)){var L=o.navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/),$=parseFloat([parseInt(L[1],10),parseInt(L[2],10),parseInt(L[3]||0,10)].join("."));a=6>$}else if(y.indexOf("android")>-1){var j=parseFloat(y.slice(y.indexOf("android")+8));a=4.4>j}else if(y.indexOf("safari")>-1&&-1==y.indexOf("chrome")&&-1==y.indexOf("phantomjs")){var _=parseFloat(y.match(/version\/([\.\d]+)/i)[1]);a=6>_}}if(a)var E=1e3,O=t(function(){try{d.sheet.cssRules,t.cancel(O),d.onload()}catch(e){--E<=0&&d.onerror()}},20)}return h.promise},n}])}])}(angular),function(e){"use strict";e.module("oc.lazyLoad").config(["$provide",function(n){n.decorator("$ocLazyLoad",["$delegate","$q",function(n,r){return n.filesLoader=function(o){var t=void 0===arguments[1]?{}:arguments[1],i=[],a=[],s=[],u=[],c=null,l=n._getFilesCache();n.toggleWatch(!0);var d=e.copy(e.extend({},t,o)),f=function(r){var o,t=null;if(e.isObject(r)&&(t=r.type,r=r.path),c=l.get(r),e.isUndefined(c)||d.cache===!1){if(null!==(o=/^(css|less|html|htm|js)?(?=!)/.exec(r))&&(t=o[1],r=r.substr(o[1].length+1,r.length)),!t)if(null!==(o=/[.](css|less|html|htm|js)?((\?|#).*)?$/.exec(r)))t=o[1];else{if(n.jsLoader.hasOwnProperty("ocLazyLoadLoader")||!n.jsLoader.hasOwnProperty("load"))return void n._$log.error("File type could not be determined. "+r);t="js"}"css"!==t&&"less"!==t||-1!==i.indexOf(r)?"html"!==t&&"htm"!==t||-1!==a.indexOf(r)?"js"===t||-1===s.indexOf(r)?s.push(r):n._$log.error("File type is not valid. "+r):a.push(r):i.push(r)}else c&&u.push(c)};if(d.serie?f(d.files.shift()):e.forEach(d.files,function(e){f(e)}),i.length>0){var h=r.defer();n.cssLoader(i,function(r){e.isDefined(r)&&n.cssLoader.hasOwnProperty("ocLazyLoadLoader")?(n._$log.error(r),h.reject(r)):h.resolve()},d),u.push(h.promise)}if(a.length>0){var g=r.defer();n.templatesLoader(a,function(r){e.isDefined(r)&&n.templatesLoader.hasOwnProperty("ocLazyLoadLoader")?(n._$log.error(r),g.reject(r)):g.resolve()},d),u.push(g.promise)}if(s.length>0){var p=r.defer();n.jsLoader(s,function(r){e.isDefined(r)&&n.jsLoader.hasOwnProperty("ocLazyLoadLoader")?(n._$log.error(r),p.reject(r)):p.resolve()},d),u.push(p.promise)}return d.serie&&d.files.length>0?r.all(u).then(function(){return n.filesLoader(o,d)}):r.all(u)["finally"](function(e){return n.toggleWatch(!1),e})},n.load=function(o){var t,i=void 0===arguments[1]?{}:arguments[1],a=this,s=null,u=[],c=r.defer();if(e.isArray(o))return e.forEach(o,function(e){u.push(a.load(e,i))}),r.all(u).then(function(e){c.resolve(e)},function(e){c.reject(e)}),c.promise;if(e.isString(o)?(s=a.getModuleConfig(o),s||(s={files:[o]})):e.isObject(o)&&(s=e.isDefined(o.path)&&e.isDefined(o.type)?{files:[o]}:a.setModuleConfig(o)),null===s){var l=a._getModuleName(o);return t='Module "'+(l||"unknown")+'" is not configured, cannot load.',n._$log.error(t),c.reject(new Error(t)),c.promise}e.isDefined(s.template)&&(e.isUndefined(s.files)&&(s.files=[]),e.isString(s.template)?s.files.push(s.template):e.isArray(s.template)&&s.files.concat(s.template));var d={};return e.extend(d,i,s),e.isUndefined(s.files)&&e.isDefined(s.name)&&n.moduleExists(s.name)?n.inject(s.name,d):(n.filesLoader(s,d).then(function(){n.inject(null,d).then(function(e){c.resolve(e)},function(e){c.reject(e)})},function(e){c.reject(e)}),c.promise)},n}])}])}(angular),function(e){"use strict";e.module("oc.lazyLoad").config(["$provide",function(n){n.decorator("$ocLazyLoad",["$delegate","$q",function(n,r){return n.cssLoader=function(o,t,i){var a=[];e.forEach(o,function(e){a.push(n.buildElement("css",e,i))}),r.all(a).then(function(){t()},function(e){t(e)})},n.cssLoader.ocLazyLoadLoader=!0,n}])}])}(angular),function(e){"use strict";e.module("oc.lazyLoad").config(["$provide",function(e){e.decorator("$ocLazyLoad",["$delegate","$q",function(e){return e.jsLoader=require,e}])}])}(angular),function(e){"use strict";e.module("oc.lazyLoad").config(["$provide",function(n){n.decorator("$ocLazyLoad",["$delegate","$templateCache","$q","$http",function(n,r,o,t){return n.templatesLoader=function(i,a,s){var u=[],c=n._getFilesCache();return e.forEach(i,function(n){var i=o.defer();u.push(i.promise),t.get(n,s).success(function(o){e.isString(o)&&o.length>0&&e.forEach(e.element(o),function(e){"SCRIPT"===e.nodeName&&"text/ng-template"===e.type&&r.put(e.id,e.innerHTML)}),e.isUndefined(c.get(n))&&c.put(n,!0),i.resolve()}).error(function(e){i.reject(new Error('Unable to load template file "'+n+'": '+e))})}),o.all(u).then(function(){a()},function(e){a(e)})},n.templatesLoader.ocLazyLoadLoader=!0,n}])}])}(angular),Array.prototype.indexOf||(Array.prototype.indexOf=function(e,n){var r;if(null==this)throw new TypeError('"this" is null or not defined');var o=Object(this),t=o.length>>>0;if(0===t)return-1;var i=+n||0;if(1/0===Math.abs(i)&&(i=0),i>=t)return-1;for(r=Math.max(i>=0?i:t-Math.abs(i),0);t>r;){if(r in o&&o[r]===e)return r;r++}return-1}); //# sourceMappingURL=ocLazyLoad.require.min.js.map \ No newline at end of file diff --git a/dist/ocLazyLoad.require.min.js.map b/dist/ocLazyLoad.require.min.js.map index e90c6fd..2843fe3 100644 --- a/dist/ocLazyLoad.require.min.js.map +++ b/dist/ocLazyLoad.require.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["ocLazyLoad.require.js"],"names":["angular","window","regModules","regInvokes","regConfigs","modulesToLoad","recordDeclarations","broadcast","noop","runBlocks","justLoaded","ocLazyLoad","module","provider","$controllerProvider","$provide","$compileProvider","$filterProvider","$injector","$animateProvider","_register","providers","registerModules","params","k","moduleName","moduleFn","tempRunBlocks","length","isString","getModuleName","indexOf","newModule","ngModuleFct","push","requires","_runBlocks","shift","isDefined","rerun","concat","_invokeQueue","reconfig","_configBlocks","pop","instanceInjector","getInstanceInjector","forEach","fn","invoke","_registerInvokeList","args","signature","data","isArray","hashCode","toString","isObject","stringify","invokeList","type","newInvoke","isUndefined","onInvoke","invokeName","queue","i","len","hasOwnProperty","Error","isNew","apply","callInvoke","fct","invoked","isFunction","j","jlen","name","moduleExists","e","test","message","modules","debug","events","moduleCache","value","this","Array","prototype","arguments","config","moduleConfig","_init","element","elements","names","NG_APP_CLASS_REGEXP","append","elm","document","getElementById","replace","querySelectorAll","className","match","exec","attributes","attr","jasmine","mocha","mock","console","error","addReg","mainModule","obj","cache","JSON","key","str","chr","hash","charCodeAt","$get","$log","$rootElement","$rootScope","$cacheFactory","$q","reject","deferred","defer","promise","filesCache","warn","info","injector","eventName","$broadcast","_broadcast","_$log","_getFilesCache","toggleWatch","watch","getModuleConfig","copy","setModuleConfig","getModules","isLoaded","modulesNames","moduleLoaded","_getModuleName","_getModule","_loadDependencies","localParams","loadedModule","diff","promisesList","self","when","getRequires","requireEntry","files","filter","n","filesLoader","then","all","inject","_addToLoadList","res","slice","loadNext","resolve","err","requireModule","bootstrapFct","bootstrap","force","configFn","directive","$ocLazyLoad","$compile","$animate","$parse","restrict","terminal","priority","compile","content","innerHTML","html","$scope","$element","$attr","model","$watch","load","enter","decorator","$delegate","$window","$interval","uaCssChecked","useCssLoadPatch","anchor","getElementsByTagName","buildElement","path","el","loaded","cacheBuster","url","dc","Date","getTime","substring","get","put","createElement","rel","href","src","onload","onreadystatechange","readyState","onerror","async","serie","insertBeforeElem","lastChild","insertBefore","ua","navigator","userAgent","toLowerCase","platform","v","appVersion","iOSVersion","parseFloat","parseInt","join","androidVersion","safariVersion","tries","interval","sheet","cssRules","cancel","originalParams","undefined","cssFiles","templatesFiles","jsFiles","promises","cachePromise","extend","pushFile","m","file_type","substr","jsLoader","cssDeferred","cssLoader","templatesDeferred","templatesLoader","jsDeferred","errText","deferredList","template","paths","callback","ocLazyLoadLoader","require","$templateCache","$http","success","node","nodeName","id","searchElement","fromIndex","TypeError","O","Object","Infinity","Math","abs","max"],"mappings":"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","file":"ocLazyLoad.require.min.js","sourcesContent":["/**\n * oclazyload - Load modules on demand (lazy load) with angularJS\n * @version v1.0.0-alpha2\n * @link https://github.com/ocombe/ocLazyLoad\n * @license MIT\n * @author Olivier Combe \n */\n(function (angular, window) {\n \"use strict\";\n\n var regModules = [\"ng\", \"oc.lazyLoad\"],\n regInvokes = {},\n regConfigs = [],\n modulesToLoad = [],\n recordDeclarations = [],\n broadcast = angular.noop,\n runBlocks = {},\n justLoaded = [];\n\n var ocLazyLoad = angular.module(\"oc.lazyLoad\", [\"ng\"]);\n\n ocLazyLoad.provider(\"$ocLazyLoad\", [\"$controllerProvider\", \"$provide\", \"$compileProvider\", \"$filterProvider\", \"$injector\", \"$animateProvider\", function ($controllerProvider, $provide, $compileProvider, $filterProvider, $injector, $animateProvider) {\n var modules = {},\n providers = {\n $controllerProvider: $controllerProvider,\n $compileProvider: $compileProvider,\n $filterProvider: $filterProvider,\n $provide: $provide, // other things\n $injector: $injector,\n $animateProvider: $animateProvider\n },\n debug = false,\n events = false,\n moduleCache = [];\n\n moduleCache.push = function (value) {\n if (this.indexOf(value) === -1) {\n Array.prototype.push.apply(this, arguments);\n }\n };\n\n this.config = function (config) {\n // If we want to define modules configs\n if (angular.isDefined(config.modules)) {\n if (angular.isArray(config.modules)) {\n angular.forEach(config.modules, function (moduleConfig) {\n modules[moduleConfig.name] = moduleConfig;\n });\n } else {\n modules[config.modules.name] = config.modules;\n }\n }\n\n if (angular.isDefined(config.debug)) {\n debug = config.debug;\n }\n\n if (angular.isDefined(config.events)) {\n events = config.events;\n }\n };\n\n /**\r\n * Get the list of existing registered modules\r\n * @param element\r\n */\n this._init = function _init(element) {\n // this is probably useless now because we override angular.bootstrap\n if (modulesToLoad.length === 0) {\n var elements = [element],\n names = [\"ng:app\", \"ng-app\", \"x-ng-app\", \"data-ng-app\"],\n NG_APP_CLASS_REGEXP = /\\sng[:\\-]app(:\\s*([\\w\\d_]+);?)?\\s/,\n append = function append(elm) {\n return elm && elements.push(elm);\n };\n\n angular.forEach(names, function (name) {\n names[name] = true;\n append(document.getElementById(name));\n name = name.replace(\":\", \"\\\\:\");\n if (element[0].querySelectorAll) {\n angular.forEach(element[0].querySelectorAll(\".\" + name), append);\n angular.forEach(element[0].querySelectorAll(\".\" + name + \"\\\\:\"), append);\n angular.forEach(element[0].querySelectorAll(\"[\" + name + \"]\"), append);\n }\n });\n\n angular.forEach(elements, function (elm) {\n if (modulesToLoad.length === 0) {\n var className = \" \" + element.className + \" \";\n var match = NG_APP_CLASS_REGEXP.exec(className);\n if (match) {\n modulesToLoad.push((match[2] || \"\").replace(/\\s+/g, \",\"));\n } else {\n angular.forEach(elm.attributes, function (attr) {\n if (modulesToLoad.length === 0 && names[attr.name]) {\n modulesToLoad.push(attr.value);\n }\n });\n }\n }\n });\n }\n\n if (modulesToLoad.length === 0 && !((window.jasmine || window.mocha) && angular.isDefined(angular.mock))) {\n console.error(\"No module found during bootstrap, unable to init ocLazyLoad. You should always use the ng-app directive or angular.boostrap when you use ocLazyLoad.\");\n }\n\n var addReg = function addReg(moduleName) {\n if (regModules.indexOf(moduleName) === -1) {\n // register existing modules\n regModules.push(moduleName);\n var mainModule = angular.module(moduleName);\n\n // register existing components (directives, services, ...)\n _invokeQueue(null, mainModule._invokeQueue, moduleName);\n _invokeQueue(null, mainModule._configBlocks, moduleName); // angular 1.3+\n\n angular.forEach(mainModule.requires, addReg);\n }\n };\n\n angular.forEach(modulesToLoad, function (moduleName) {\n addReg(moduleName);\n });\n\n modulesToLoad = []; // reset for next bootstrap\n recordDeclarations.pop(); // wait for the next lazy load\n };\n\n /**\r\n * Like JSON.stringify but that doesn't throw on circular references\r\n * @param obj\r\n */\n var stringify = function stringify(obj) {\n var cache = [];\n return JSON.stringify(obj, function (key, value) {\n if (angular.isObject(value) && value !== null) {\n if (cache.indexOf(value) !== -1) {\n // Circular reference found, discard key\n return;\n }\n // Store value in our collection\n cache.push(value);\n }\n return value;\n });\n };\n\n var hashCode = function hashCode(str) {\n var hash = 0,\n i,\n chr,\n len;\n if (str.length == 0) {\n return hash;\n }\n for (i = 0, len = str.length; i < len; i++) {\n chr = str.charCodeAt(i);\n hash = (hash << 5) - hash + chr;\n hash |= 0; // Convert to 32bit integer\n }\n return hash;\n };\n\n function _register(providers, registerModules, params) {\n if (registerModules) {\n var k,\n moduleName,\n moduleFn,\n tempRunBlocks = [];\n for (k = registerModules.length - 1; k >= 0; k--) {\n moduleName = registerModules[k];\n if (!angular.isString(moduleName)) {\n moduleName = getModuleName(moduleName);\n }\n if (!moduleName || justLoaded.indexOf(moduleName) !== -1) {\n continue;\n }\n var newModule = regModules.indexOf(moduleName) === -1;\n moduleFn = ngModuleFct(moduleName);\n if (newModule) {\n // new module\n regModules.push(moduleName);\n _register(providers, moduleFn.requires, params);\n }\n if (moduleFn._runBlocks.length > 0) {\n // new run blocks detected! Replace the old ones (if existing)\n runBlocks[moduleName] = [];\n while (moduleFn._runBlocks.length > 0) {\n runBlocks[moduleName].push(moduleFn._runBlocks.shift());\n }\n }\n if (angular.isDefined(runBlocks[moduleName]) && (newModule || params.rerun)) {\n tempRunBlocks = tempRunBlocks.concat(runBlocks[moduleName]);\n }\n _invokeQueue(providers, moduleFn._invokeQueue, moduleName, params.reconfig);\n _invokeQueue(providers, moduleFn._configBlocks, moduleName, params.reconfig); // angular 1.3+\n broadcast(newModule ? \"ocLazyLoad.moduleLoaded\" : \"ocLazyLoad.moduleReloaded\", moduleName);\n registerModules.pop();\n justLoaded.push(moduleName);\n }\n // execute the run blocks at the end\n var instanceInjector = providers.getInstanceInjector();\n angular.forEach(tempRunBlocks, function (fn) {\n instanceInjector.invoke(fn);\n });\n }\n }\n\n function _registerInvokeList(args, moduleName) {\n var invokeList = args[2][0],\n type = args[1],\n newInvoke = false;\n if (angular.isUndefined(regInvokes[moduleName])) {\n regInvokes[moduleName] = {};\n }\n if (angular.isUndefined(regInvokes[moduleName][type])) {\n regInvokes[moduleName][type] = {};\n }\n var onInvoke = function onInvoke(invokeName, signature) {\n newInvoke = true;\n regInvokes[moduleName][type][invokeName].push(signature);\n broadcast(\"ocLazyLoad.componentLoaded\", [moduleName, type, invokeName]);\n };\n\n function signature(data) {\n if (angular.isArray(data)) {\n // arrays are objects, we need to test for it first\n return hashCode(data.toString());\n } else if (angular.isObject(data)) {\n // constants & values for example\n return hashCode(stringify(data));\n } else {\n if (angular.isDefined(data) && data !== null) {\n return hashCode(data.toString());\n } else {\n // null & undefined constants\n return data;\n }\n }\n }\n\n if (angular.isString(invokeList)) {\n if (angular.isUndefined(regInvokes[moduleName][type][invokeList])) {\n regInvokes[moduleName][type][invokeList] = [];\n }\n if (regInvokes[moduleName][type][invokeList].indexOf(signature(args[2][1])) === -1) {\n onInvoke(invokeList, signature(args[2][1]));\n }\n } else if (angular.isObject(invokeList)) {\n // decorators for example\n angular.forEach(invokeList, function (invoke) {\n if (angular.isString(invoke)) {\n if (angular.isUndefined(regInvokes[moduleName][type][invoke])) {\n regInvokes[moduleName][type][invoke] = [];\n }\n if (regInvokes[moduleName][type][invoke].indexOf(signature(invokeList[1])) === -1) {\n onInvoke(invoke, signature(invokeList[1]));\n }\n }\n });\n } else {\n return false;\n }\n return newInvoke;\n }\n\n function _invokeQueue(providers, queue, moduleName, reconfig) {\n if (!queue) {\n return;\n }\n\n var i, len, args, provider;\n for (i = 0, len = queue.length; i < len; i++) {\n args = queue[i];\n if (angular.isArray(args)) {\n if (providers !== null) {\n if (providers.hasOwnProperty(args[0])) {\n provider = providers[args[0]];\n } else {\n throw new Error(\"unsupported provider \" + args[0]);\n }\n }\n var isNew = _registerInvokeList(args, moduleName);\n if (args[1] !== \"invoke\") {\n if (isNew && angular.isDefined(provider)) {\n provider[args[1]].apply(provider, args[2]);\n }\n } else {\n // config block\n var callInvoke = function callInvoke(fct) {\n var invoked = regConfigs.indexOf(moduleName + \"-\" + fct);\n if (invoked === -1 || reconfig) {\n if (invoked === -1) {\n regConfigs.push(moduleName + \"-\" + fct);\n }\n if (angular.isDefined(provider)) {\n provider[args[1]].apply(provider, args[2]);\n }\n }\n };\n if (angular.isFunction(args[2][0])) {\n callInvoke(args[2][0]);\n } else if (angular.isArray(args[2][0])) {\n for (var j = 0, jlen = args[2][0].length; j < jlen; j++) {\n if (angular.isFunction(args[2][0][j])) {\n callInvoke(args[2][0][j]);\n }\n }\n }\n }\n }\n }\n }\n\n function getModuleName(module) {\n var moduleName = null;\n if (angular.isString(module)) {\n moduleName = module;\n } else if (angular.isObject(module) && module.hasOwnProperty(\"name\") && angular.isString(module.name)) {\n moduleName = module.name;\n }\n return moduleName;\n }\n\n function moduleExists(moduleName) {\n if (!angular.isString(moduleName)) {\n return false;\n }\n try {\n return ngModuleFct(moduleName);\n } catch (e) {\n if (/No module/.test(e) || e.message.indexOf(\"$injector:nomod\") > -1) {\n return false;\n }\n }\n }\n\n this.$get = [\"$log\", \"$rootElement\", \"$rootScope\", \"$cacheFactory\", \"$q\", function ($log, $rootElement, $rootScope, $cacheFactory, $q) {\n var instanceInjector,\n filesCache = $cacheFactory(\"ocLazyLoad\");\n\n if (!debug) {\n $log = {};\n $log.error = angular.noop;\n $log.warn = angular.noop;\n $log.info = angular.noop;\n }\n\n // Make this lazy because when $get() is called the instance injector hasn't been assigned to the rootElement yet\n providers.getInstanceInjector = function () {\n return instanceInjector ? instanceInjector : instanceInjector = $rootElement.data(\"$injector\") || angular.injector();\n };\n\n broadcast = function broadcast(eventName, params) {\n if (events) {\n $rootScope.$broadcast(eventName, params);\n }\n if (debug) {\n $log.info(eventName, params);\n }\n };\n\n function reject(e) {\n var deferred = $q.defer();\n $log.error(e.message);\n deferred.reject(e);\n return deferred.promise;\n }\n\n return {\n _broadcast: broadcast,\n\n _$log: $log,\n\n /**\r\n * Returns the files cache used by the loaders to store the files currently loading\r\n * @returns {*}\r\n */\n _getFilesCache: function getFilesCache() {\n return filesCache;\n },\n\n /**\r\n * Let the service know that it should monitor angular.module because files are loading\r\n * @param watch boolean\r\n */\n toggleWatch: function toggleWatch(watch) {\n if (watch) {\n recordDeclarations.push(true);\n } else {\n recordDeclarations.pop();\n }\n },\n\n /**\r\n * Let you get a module config object\r\n * @param moduleName String the name of the module\r\n * @returns {*}\r\n */\n getModuleConfig: function getModuleConfig(moduleName) {\n if (!angular.isString(moduleName)) {\n throw new Error(\"You need to give the name of the module to get\");\n }\n if (!modules[moduleName]) {\n return null;\n }\n return angular.copy(modules[moduleName]);\n },\n\n /**\r\n * Let you define a module config object\r\n * @param moduleConfig Object the module config object\r\n * @returns {*}\r\n */\n setModuleConfig: function setModuleConfig(moduleConfig) {\n if (!angular.isObject(moduleConfig)) {\n throw new Error(\"You need to give the module config object to set\");\n }\n modules[moduleConfig.name] = moduleConfig;\n return moduleConfig;\n },\n\n /**\r\n * Returns the list of loaded modules\r\n * @returns {string[]}\r\n */\n getModules: function () {\n return regModules;\n },\n\n /**\r\n * Let you check if a module has been loaded into Angular or not\r\n * @param modulesNames String/Object a module name, or a list of module names\r\n * @returns {boolean}\r\n */\n isLoaded: function isLoaded(modulesNames) {\n var moduleLoaded = function moduleLoaded(module) {\n var isLoaded = regModules.indexOf(module) > -1;\n if (!isLoaded) {\n isLoaded = !!moduleExists(module);\n }\n return isLoaded;\n };\n if (angular.isString(modulesNames)) {\n modulesNames = [modulesNames];\n }\n if (angular.isArray(modulesNames)) {\n var i, len;\n for (i = 0, len = modulesNames.length; i < len; i++) {\n if (!moduleLoaded(modulesNames[i])) {\n return false;\n }\n }\n return true;\n } else {\n throw new Error(\"You need to define the module(s) name(s)\");\n }\n },\n\n /**\r\n * Given a module, return its name\r\n * @param module\r\n * @returns {String}\r\n */\n _getModuleName: getModuleName,\n\n /**\r\n * Returns a module if it exists\r\n * @param moduleName\r\n * @returns {module}\r\n */\n _getModule: function getModule(moduleName) {\n try {\n return ngModuleFct(moduleName);\n } catch (e) {\n // this error message really suxx\n if (/No module/.test(e) || e.message.indexOf(\"$injector:nomod\") > -1) {\n e.message = \"The module \\\"\" + stringify(moduleName) + \"\\\" that you are trying to load does not exist. \" + e.message;\n }\n throw e;\n }\n },\n\n /**\r\n * Check if a module exists and returns it if it does\r\n * @param moduleName\r\n * @returns {boolean}\r\n */\n moduleExists: moduleExists,\n\n /**\r\n * Load the dependencies, and might try to load new files depending on the config\r\n * @param moduleName (String or Array of Strings)\r\n * @param localParams\r\n * @returns {*}\r\n * @private\r\n */\n _loadDependencies: function _loadDependencies(moduleName, localParams) {\n var loadedModule,\n requires,\n diff,\n promisesList = [],\n self = this;\n\n moduleName = self._getModuleName(moduleName);\n\n if (moduleName === null) {\n return $q.when();\n } else {\n try {\n loadedModule = self._getModule(moduleName);\n } catch (e) {\n return reject(e);\n }\n // get unloaded requires\n requires = self.getRequires(loadedModule);\n }\n\n angular.forEach(requires, function (requireEntry) {\n // If no configuration is provided, try and find one from a previous load.\n // If there isn't one, bail and let the normal flow run\n if (angular.isString(requireEntry)) {\n var config = self.getModuleConfig(requireEntry);\n if (config === null) {\n moduleCache.push(requireEntry); // We don't know about this module, but something else might, so push it anyway.\n return;\n }\n requireEntry = config;\n }\n\n // Check if this dependency has been loaded previously\n if (self.moduleExists(requireEntry.name)) {\n // compare against the already loaded module to see if the new definition adds any new files\n diff = requireEntry.files.filter(function (n) {\n return self.getModuleConfig(requireEntry.name).files.indexOf(n) < 0;\n });\n\n // If the module was redefined, advise via the console\n if (diff.length !== 0) {\n self._$log.warn(\"Module \\\"\", moduleName, \"\\\" attempted to redefine configuration for dependency. \\\"\", requireEntry.name, \"\\\"\\n Additional Files Loaded:\", diff);\n }\n\n // Push everything to the file loader, it will weed out the duplicates.\n if (angular.isDefined(self.filesLoader)) {\n // if a files loader is defined\n promisesList.push(self.filesLoader(requireEntry, localParams).then(function () {\n return self._loadDependencies(requireEntry);\n }));\n } else {\n return reject(new Error(\"Error: New dependencies need to be loaded from external files (\" + requireEntry.files + \"), but no loader has been defined.\"));\n }\n return;\n } else if (angular.isArray(requireEntry)) {\n requireEntry = {\n files: requireEntry\n };\n } else if (angular.isObject(requireEntry)) {\n if (requireEntry.hasOwnProperty(\"name\") && requireEntry.name) {\n // The dependency doesn't exist in the module cache and is a new configuration, so store and push it.\n self.setModuleConfig(requireEntry);\n moduleCache.push(requireEntry.name);\n }\n }\n\n // Check if the dependency has any files that need to be loaded. If there are, push a new promise to the promise list.\n if (angular.isDefined(requireEntry.files) && requireEntry.files.length !== 0) {\n if (angular.isDefined(self.filesLoader)) {\n // if a files loader is defined\n promisesList.push(self.filesLoader(requireEntry, localParams).then(function () {\n return self._loadDependencies(requireEntry);\n }));\n } else {\n return reject(new Error(\"Error: the module \\\"\" + requireEntry.name + \"\\\" is defined in external files (\" + requireEntry.files + \"), but no loader has been defined.\"));\n }\n }\n });\n\n // Create a wrapper promise to watch the promise list and resolve it once everything is done.\n return $q.all(promisesList);\n },\n\n /**\r\n * Inject new modules into Angular\r\n * @param moduleName\r\n * @param localParams\r\n */\n inject: function inject(moduleName, localParams) {\n var self = this,\n deferred = $q.defer();\n if (angular.isDefined(moduleName) && moduleName !== null) {\n if (angular.isArray(moduleName)) {\n var promisesList = [];\n angular.forEach(moduleName, function (module) {\n promisesList.push(self.inject(module));\n });\n return $q.all(promisesList);\n } else {\n self._addToLoadList(self._getModuleName(moduleName), true);\n }\n }\n if (modulesToLoad.length > 0) {\n var res = modulesToLoad.slice(); // clean copy\n var loadNext = function loadNext(moduleName) {\n moduleCache.push(moduleName);\n self._loadDependencies(moduleName, localParams).then(function success() {\n try {\n justLoaded = [];\n _register(providers, moduleCache, localParams);\n } catch (e) {\n self._$log.error(e.message);\n deferred.reject(e);\n return;\n }\n\n if (modulesToLoad.length > 0) {\n loadNext(modulesToLoad.shift()); // load the next in list\n } else {\n deferred.resolve(res); // everything has been loaded, resolve\n }\n }, function error(err) {\n deferred.reject(err);\n });\n };\n\n // load the first in list\n loadNext(modulesToLoad.shift());\n } else {\n deferred.resolve();\n }\n return deferred.promise;\n },\n\n /**\r\n * Get the list of required modules/services/... for this module\r\n * @param module\r\n * @returns {Array}\r\n */\n getRequires: function getRequires(module) {\n var requires = [];\n angular.forEach(module.requires, function (requireModule) {\n if (regModules.indexOf(requireModule) === -1) {\n requires.push(requireModule);\n }\n });\n return requires;\n },\n\n /**\r\n * Invoke the new modules & component by their providers\r\n * @param providers\r\n * @param queue\r\n * @param moduleName\r\n * @param reconfig\r\n * @private\r\n */\n _invokeQueue: _invokeQueue,\n\n /**\r\n * Check if a module has been invoked and registers it if not\r\n * @param args\r\n * @param moduleName\r\n * @returns {boolean} is new\r\n */\n _registerInvokeList: _registerInvokeList,\n\n /**\r\n * Register a new module and loads it, executing the run/config blocks if needed\r\n * @param providers\r\n * @param registerModules\r\n * @param params\r\n * @private\r\n */\n _register: _register,\n\n /**\r\n * Add a module name to the list of modules that will be loaded in the next inject\r\n * @param name\r\n * @param force\r\n * @private\r\n */\n _addToLoadList: _addToLoadList\n };\n }];\n\n // Let's get the list of loaded modules & components\n this._init(angular.element(window.document));\n }]);\n\n var bootstrapFct = angular.bootstrap;\n angular.bootstrap = function (element, modules, config) {\n // we use slice to make a clean copy\n angular.forEach(modules.slice(), function (module) {\n _addToLoadList(module, true);\n });\n return bootstrapFct(element, modules, config);\n };\n\n var _addToLoadList = function _addToLoadList(name, force) {\n if ((recordDeclarations.length > 0 || force) && angular.isString(name) && modulesToLoad.indexOf(name) === -1) {\n modulesToLoad.push(name);\n }\n };\n\n var ngModuleFct = angular.module;\n angular.module = function (name, requires, configFn) {\n _addToLoadList(name);\n return ngModuleFct(name, requires, configFn);\n };\n})(angular, window);\n(function (angular) {\n \"use strict\";\n\n angular.module(\"oc.lazyLoad\").directive(\"ocLazyLoad\", [\"$ocLazyLoad\", \"$compile\", \"$animate\", \"$parse\", function ($ocLazyLoad, $compile, $animate, $parse) {\n return {\n restrict: \"A\",\n terminal: true,\n priority: 1000,\n compile: function compile(element, attrs) {\n // we store the content and remove it before compilation\n var content = element[0].innerHTML;\n element.html(\"\");\n\n return function ($scope, $element, $attr) {\n var model = $parse($attr.ocLazyLoad);\n $scope.$watch(function () {\n return model($scope) || $attr.ocLazyLoad; // it can be a module name (string), an object, an array, or a scope reference to any of this\n }, function (moduleName) {\n if (angular.isDefined(moduleName)) {\n $ocLazyLoad.load(moduleName).then(function success() {\n $animate.enter($compile(content)($scope), $element);\n });\n }\n }, true);\n };\n }\n };\n }]);\n})(angular);\n(function (angular) {\n \"use strict\";\n\n angular.module(\"oc.lazyLoad\").config([\"$provide\", function ($provide) {\n $provide.decorator(\"$ocLazyLoad\", [\"$delegate\", \"$q\", \"$window\", \"$interval\", function ($delegate, $q, $window, $interval) {\n var uaCssChecked = false,\n useCssLoadPatch = false,\n anchor = $window.document.getElementsByTagName(\"head\")[0] || $window.document.getElementsByTagName(\"body\")[0];\n\n /**\r\n * Load a js/css file\r\n * @param type\r\n * @param path\r\n * @param params\r\n * @returns promise\r\n */\n $delegate.buildElement = function buildElement(type, path, params) {\n var deferred = $q.defer(),\n el,\n loaded,\n filesCache = $delegate._getFilesCache(),\n cacheBuster = function cacheBuster(url) {\n var dc = new Date().getTime();\n if (url.indexOf(\"?\") >= 0) {\n if (url.substring(0, url.length - 1) === \"&\") {\n return url + \"_dc=\" + dc;\n }\n return url + \"&_dc=\" + dc;\n } else {\n return url + \"?_dc=\" + dc;\n }\n };\n\n // Store the promise early so the file load can be detected by other parallel lazy loads\n // (ie: multiple routes on one page) a 'true' value isn't sufficient\n // as it causes false positive load results.\n if (angular.isUndefined(filesCache.get(path))) {\n filesCache.put(path, deferred.promise);\n }\n\n // Switch in case more content types are added later\n switch (type) {\n case \"css\":\n el = $window.document.createElement(\"link\");\n el.type = \"text/css\";\n el.rel = \"stylesheet\";\n el.href = params.cache === false ? cacheBuster(path) : path;\n break;\n case \"js\":\n el = $window.document.createElement(\"script\");\n el.src = params.cache === false ? cacheBuster(path) : path;\n break;\n default:\n deferred.reject(new Error(\"Requested type \\\"\" + type + \"\\\" is not known. Could not inject \\\"\" + path + \"\\\"\"));\n break;\n }\n el.onload = el.onreadystatechange = function (e) {\n if (el.readyState && !/^c|loade/.test(el.readyState) || loaded) return;\n el.onload = el.onreadystatechange = null;\n loaded = 1;\n $delegate._broadcast(\"ocLazyLoad.fileLoaded\", path);\n deferred.resolve();\n };\n el.onerror = function () {\n deferred.reject(new Error(\"Unable to load \" + path));\n };\n el.async = params.serie ? 0 : 1;\n\n var insertBeforeElem = anchor.lastChild;\n if (params.insertBefore) {\n var element = angular.element(params.insertBefore);\n if (element && element.length > 0) {\n insertBeforeElem = element[0];\n }\n }\n anchor.insertBefore(el, insertBeforeElem);\n\n /*\r\n The event load or readystatechange doesn't fire in:\r\n - iOS < 6 (default mobile browser)\r\n - Android < 4.4 (default mobile browser)\r\n - Safari < 6 (desktop browser)\r\n */\n if (type == \"css\") {\n if (!uaCssChecked) {\n var ua = $window.navigator.userAgent.toLowerCase();\n\n // iOS < 6\n if (/iP(hone|od|ad)/.test($window.navigator.platform)) {\n var v = $window.navigator.appVersion.match(/OS (\\d+)_(\\d+)_?(\\d+)?/);\n var iOSVersion = parseFloat([parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)].join(\".\"));\n useCssLoadPatch = iOSVersion < 6;\n } else if (ua.indexOf(\"android\") > -1) {\n // Android < 4.4\n var androidVersion = parseFloat(ua.slice(ua.indexOf(\"android\") + 8));\n useCssLoadPatch = androidVersion < 4.4;\n } else if (ua.indexOf(\"safari\") > -1 && ua.indexOf(\"chrome\") == -1 && ua.indexOf(\"phantomjs\") == -1) {\n var safariVersion = parseFloat(ua.match(/version\\/([\\.\\d]+)/i)[1]);\n useCssLoadPatch = safariVersion < 6;\n }\n }\n\n if (useCssLoadPatch) {\n var tries = 1000; // * 20 = 20000 miliseconds\n var interval = $interval(function () {\n try {\n el.sheet.cssRules;\n $interval.cancel(interval);\n el.onload();\n } catch (e) {\n if (--tries <= 0) {\n el.onerror();\n }\n }\n }, 20);\n }\n }\n\n return deferred.promise;\n };\n\n return $delegate;\n }]);\n }]);\n})(angular);\n(function (angular) {\n \"use strict\";\n\n angular.module(\"oc.lazyLoad\").config([\"$provide\", function ($provide) {\n $provide.decorator(\"$ocLazyLoad\", [\"$delegate\", \"$q\", function ($delegate, $q) {\n /**\n * The function that loads new files\n * @param config\n * @param params\n * @returns {*}\n */\n $delegate.filesLoader = function filesLoader(config) {\n var originalParams = arguments[1] === undefined ? {} : arguments[1];\n\n var cssFiles = [],\n templatesFiles = [],\n jsFiles = [],\n promises = [],\n cachePromise = null,\n filesCache = $delegate._getFilesCache();\n\n $delegate.toggleWatch(true); // start watching angular.module calls\n\n // we need a real copy because we might edit some parts of it\n var params = angular.copy(angular.extend({}, originalParams, config));\n\n var pushFile = function pushFile(path) {\n var file_type = null,\n m;\n if (angular.isObject(path)) {\n file_type = path.type;\n path = path.path;\n }\n cachePromise = filesCache.get(path);\n if (angular.isUndefined(cachePromise) || params.cache === false) {\n\n // always check for requirejs syntax just in case\n if ((m = /^(css|less|html|htm|js)?(?=!)/.exec(path)) !== null) {\n // Detect file type using preceding type declaration (ala requireJS)\n file_type = m[1];\n path = path.substr(m[1].length + 1, path.length); // Strip the type from the path\n }\n\n if (!file_type) {\n if ((m = /[.](css|less|html|htm|js)?((\\?|#).*)?$/.exec(path)) !== null) {\n // Detect file type via file extension\n file_type = m[1];\n } else if (!$delegate.jsLoader.hasOwnProperty(\"ocLazyLoadLoader\") && $delegate.jsLoader.hasOwnProperty(\"load\")) {\n // requirejs\n file_type = \"js\";\n } else {\n $delegate._$log.error(\"File type could not be determined. \" + path);\n return;\n }\n }\n\n if ((file_type === \"css\" || file_type === \"less\") && cssFiles.indexOf(path) === -1) {\n cssFiles.push(path);\n } else if ((file_type === \"html\" || file_type === \"htm\") && templatesFiles.indexOf(path) === -1) {\n templatesFiles.push(path);\n } else if (file_type === \"js\" || jsFiles.indexOf(path) === -1) {\n jsFiles.push(path);\n } else {\n $delegate._$log.error(\"File type is not valid. \" + path);\n }\n } else if (cachePromise) {\n promises.push(cachePromise);\n }\n };\n\n if (params.serie) {\n pushFile(params.files.shift());\n } else {\n angular.forEach(params.files, function (path) {\n pushFile(path);\n });\n }\n\n if (cssFiles.length > 0) {\n var cssDeferred = $q.defer();\n $delegate.cssLoader(cssFiles, function (err) {\n if (angular.isDefined(err) && $delegate.cssLoader.hasOwnProperty(\"ocLazyLoadLoader\")) {\n $delegate._$log.error(err);\n cssDeferred.reject(err);\n } else {\n cssDeferred.resolve();\n }\n }, params);\n promises.push(cssDeferred.promise);\n }\n\n if (templatesFiles.length > 0) {\n var templatesDeferred = $q.defer();\n $delegate.templatesLoader(templatesFiles, function (err) {\n if (angular.isDefined(err) && $delegate.templatesLoader.hasOwnProperty(\"ocLazyLoadLoader\")) {\n $delegate._$log.error(err);\n templatesDeferred.reject(err);\n } else {\n templatesDeferred.resolve();\n }\n }, params);\n promises.push(templatesDeferred.promise);\n }\n\n if (jsFiles.length > 0) {\n var jsDeferred = $q.defer();\n $delegate.jsLoader(jsFiles, function (err) {\n if (angular.isDefined(err) && $delegate.jsLoader.hasOwnProperty(\"ocLazyLoadLoader\")) {\n $delegate._$log.error(err);\n jsDeferred.reject(err);\n } else {\n jsDeferred.resolve();\n }\n }, params);\n promises.push(jsDeferred.promise);\n }\n\n if (params.serie && params.files.length > 0) {\n return $q.all(promises).then(function success() {\n return $delegate.filesLoader(config, params);\n });\n } else {\n return $q.all(promises)[\"finally\"](function (res) {\n $delegate.toggleWatch(false); // stop watching angular.module calls\n return res;\n });\n }\n };\n\n /**\n * Load a module or a list of modules into Angular\n * @param module Mixed the name of a predefined module config object, or a module config object, or an array of either\n * @param params Object optional parameters\n * @returns promise\n */\n $delegate.load = function (module) {\n var params = arguments[1] === undefined ? {} : arguments[1];\n\n var self = this,\n config = null,\n deferredList = [],\n deferred = $q.defer(),\n errText;\n\n // If module is an array, break it down\n if (angular.isArray(module)) {\n // Resubmit each entry as a single module\n angular.forEach(module, function (m) {\n deferredList.push(self.load(m, params));\n });\n\n // Resolve the promise once everything has loaded\n $q.all(deferredList).then(function success(res) {\n deferred.resolve(res);\n }, function error(err) {\n deferred.reject(err);\n });\n\n return deferred.promise;\n }\n\n // Get or Set a configuration depending on what was passed in\n if (angular.isString(module)) {\n config = self.getModuleConfig(module);\n if (!config) {\n config = {\n files: [module]\n };\n }\n } else if (angular.isObject(module)) {\n // case {type: 'js', path: lazyLoadUrl + 'testModule.fakejs'}\n if (angular.isDefined(module.path) && angular.isDefined(module.type)) {\n config = {\n files: [module]\n };\n } else {\n config = self.setModuleConfig(module);\n }\n }\n\n if (config === null) {\n var moduleName = self._getModuleName(module);\n errText = \"Module \\\"\" + (moduleName || \"unknown\") + \"\\\" is not configured, cannot load.\";\n $delegate._$log.error(errText);\n deferred.reject(new Error(errText));\n return deferred.promise;\n } else {\n // deprecated\n if (angular.isDefined(config.template)) {\n if (angular.isUndefined(config.files)) {\n config.files = [];\n }\n if (angular.isString(config.template)) {\n config.files.push(config.template);\n } else if (angular.isArray(config.template)) {\n config.files.concat(config.template);\n }\n }\n }\n\n var localParams = {};\n angular.extend(localParams, params, config);\n\n // if someone used an external loader and called the load function with just the module name\n if (angular.isUndefined(config.files) && angular.isDefined(config.name) && $delegate.moduleExists(config.name)) {\n return $delegate.inject(config.name, localParams);\n }\n\n $delegate.filesLoader(config, localParams).then(function success() {\n $delegate.inject(null, localParams).then(function (res) {\n deferred.resolve(res);\n }, function (err) {\n deferred.reject(err);\n });\n }, function error(err) {\n deferred.reject(err);\n });\n\n return deferred.promise;\n };\n\n // return the patched service\n return $delegate;\n }]);\n }]);\n})(angular);\n(function (angular) {\n \"use strict\";\n\n angular.module(\"oc.lazyLoad\").config([\"$provide\", function ($provide) {\n $provide.decorator(\"$ocLazyLoad\", [\"$delegate\", \"$q\", function ($delegate, $q) {\n /**\r\n * cssLoader function\r\n * @type Function\r\n * @param paths array list of css files to load\r\n * @param callback to call when everything is loaded. We use a callback and not a promise\r\n * @param params object config parameters\r\n * because the user can overwrite cssLoader and it will probably not use promises :(\r\n */\n $delegate.cssLoader = function (paths, callback, params) {\n var promises = [];\n angular.forEach(paths, function loading(path) {\n promises.push($delegate.buildElement(\"css\", path, params));\n });\n $q.all(promises).then(function success() {\n callback();\n }, function (err) {\n callback(err);\n });\n };\n $delegate.cssLoader.ocLazyLoadLoader = true;\n\n return $delegate;\n }]);\n }]);\n})(angular);\n(function (angular) {\n \"use strict\";\n\n angular.module(\"oc.lazyLoad\").config([\"$provide\", function ($provide) {\n $provide.decorator(\"$ocLazyLoad\", [\"$delegate\", \"$q\", function ($delegate, $q) {\n /**\r\n * jsLoader function\r\n * @type Function\r\n * @param paths array list of js files to load\r\n * @param callback to call when everything is loaded. We use a callback and not a promise\r\n * @param params object config parameters\r\n * because the user can overwrite jsLoader and it will probably not use promises :(\r\n */\n $delegate.jsLoader = require;\n\n return $delegate;\n }]);\n }]);\n})(angular);\n(function (angular) {\n \"use strict\";\n\n angular.module(\"oc.lazyLoad\").config([\"$provide\", function ($provide) {\n $provide.decorator(\"$ocLazyLoad\", [\"$delegate\", \"$templateCache\", \"$q\", \"$http\", function ($delegate, $templateCache, $q, $http) {\n /**\r\n * templatesLoader function\r\n * @type Function\r\n * @param paths array list of css files to load\r\n * @param callback to call when everything is loaded. We use a callback and not a promise\r\n * @param params object config parameters for $http\r\n * because the user can overwrite templatesLoader and it will probably not use promises :(\r\n */\n $delegate.templatesLoader = function (paths, callback, params) {\n var promises = [],\n filesCache = $delegate._getFilesCache();\n\n angular.forEach(paths, function (url) {\n var deferred = $q.defer();\n promises.push(deferred.promise);\n $http.get(url, params).success(function (data) {\n if (angular.isString(data) && data.length > 0) {\n angular.forEach(angular.element(data), function (node) {\n if (node.nodeName === \"SCRIPT\" && node.type === \"text/ng-template\") {\n $templateCache.put(node.id, node.innerHTML);\n }\n });\n }\n if (angular.isUndefined(filesCache.get(url))) {\n filesCache.put(url, true);\n }\n deferred.resolve();\n }).error(function (err) {\n deferred.reject(new Error(\"Unable to load template file \\\"\" + url + \"\\\": \" + err));\n });\n });\n return $q.all(promises).then(function success() {\n callback();\n }, function error(err) {\n callback(err);\n });\n };\n $delegate.templatesLoader.ocLazyLoadLoader = true;\n\n return $delegate;\n }]);\n }]);\n})(angular);\n// Array.indexOf polyfill for IE8\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement, fromIndex) {\n var k;\n\n // 1. Let O be the result of calling ToObject passing\n // the this value as the argument.\n if (this == null) {\n throw new TypeError(\"\\\"this\\\" is null or not defined\");\n }\n\n var O = Object(this);\n\n // 2. Let lenValue be the result of calling the Get\n // internal method of O with the argument \"length\".\n // 3. Let len be ToUint32(lenValue).\n var len = O.length >>> 0;\n\n // 4. If len is 0, return -1.\n if (len === 0) {\n return -1;\n }\n\n // 5. If argument fromIndex was passed let n be\n // ToInteger(fromIndex); else let n be 0.\n var n = +fromIndex || 0;\n\n if (Math.abs(n) === Infinity) {\n n = 0;\n }\n\n // 6. If n >= len, return -1.\n if (n >= len) {\n return -1;\n }\n\n // 7. If n >= 0, then Let k be n.\n // 8. Else, n<0, Let k be len - abs(n).\n // If k is less than 0, then let k be 0.\n k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);\n\n // 9. Repeat, while k < len\n while (k < len) {\n // a. Let Pk be ToString(k).\n // This is implicit for LHS operands of the in operator\n // b. Let kPresent be the result of calling the\n // HasProperty internal method of O with argument Pk.\n // This step can be combined with c\n // c. If kPresent is true, then\n // i. Let elementK be the result of calling the Get\n // internal method of O with the argument ToString(k).\n // ii. Let same be the result of applying the\n // Strict Equality Comparison Algorithm to\n // searchElement and elementK.\n // iii. If same is true, return k.\n if (k in O && O[k] === searchElement) {\n return k;\n }\n k++;\n }\n return -1;\n };\n}\n//# sourceMappingURL=ocLazyLoad.require.js.map"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["ocLazyLoad.require.js"],"names":["angular","window","regModules","regInvokes","regConfigs","modulesToLoad","recordDeclarations","broadcast","noop","runBlocks","justLoaded","ocLazyLoad","module","provider","$controllerProvider","$provide","$compileProvider","$filterProvider","$injector","$animateProvider","_register","providers","registerModules","params","k","moduleName","moduleFn","tempRunBlocks","length","isString","getModuleName","indexOf","newModule","ngModuleFct","push","requires","_runBlocks","shift","isDefined","rerun","concat","_invokeQueue","reconfig","_configBlocks","pop","instanceInjector","getInstanceInjector","forEach","fn","invoke","_registerInvokeList","args","signature","data","isArray","hashCode","toString","isObject","stringify","invokeList","type","newInvoke","isUndefined","onInvoke","invokeName","key","queue","i","len","hasOwnProperty","Error","isNew","apply","callInvoke","fct","invoked","isFunction","j","jlen","name","moduleExists","e","test","message","modules","debug","events","moduleCache","value","this","Array","prototype","arguments","config","moduleConfig","_init","element","elements","names","NG_APP_CLASS_REGEXP","append","elm","document","getElementById","replace","querySelectorAll","className","match","exec","attributes","attr","jasmine","mocha","mock","console","error","addReg","mainModule","obj","cache","JSON","str","chr","hash","charCodeAt","$get","$log","$rootElement","$rootScope","$cacheFactory","$q","reject","deferred","defer","promise","filesCache","warn","info","injector","eventName","$broadcast","_broadcast","_$log","_getFilesCache","toggleWatch","watch","getModuleConfig","copy","setModuleConfig","getModules","isLoaded","modulesNames","moduleLoaded","_getModuleName","_getModule","_loadDependencies","localParams","loadedModule","diff","promisesList","self","when","getRequires","requireEntry","files","filter","n","filesLoader","then","all","inject","_addToLoadList","res","slice","loadNext","resolve","err","requireModule","bootstrapFct","bootstrap","force","configFn","directive","$ocLazyLoad","$compile","$animate","$parse","restrict","terminal","priority","compile","content","innerHTML","html","$scope","$element","$attr","model","$watch","load","enter","decorator","$delegate","$window","$interval","uaCssChecked","useCssLoadPatch","anchor","getElementsByTagName","buildElement","path","el","loaded","cacheBuster","url","dc","Date","getTime","substring","get","put","createElement","rel","href","src","onload","onreadystatechange","readyState","onerror","async","serie","insertBeforeElem","lastChild","insertBefore","ua","navigator","userAgent","toLowerCase","platform","v","appVersion","iOSVersion","parseFloat","parseInt","join","androidVersion","safariVersion","tries","interval","sheet","cssRules","cancel","originalParams","undefined","cssFiles","templatesFiles","jsFiles","promises","cachePromise","extend","pushFile","m","file_type","substr","jsLoader","cssDeferred","cssLoader","templatesDeferred","templatesLoader","jsDeferred","errText","deferredList","template","paths","callback","ocLazyLoadLoader","require","$templateCache","$http","success","node","nodeName","id","searchElement","fromIndex","TypeError","O","Object","Infinity","Math","abs","max"],"mappings":"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","file":"ocLazyLoad.require.min.js","sourcesContent":["/**\n * oclazyload - Load modules on demand (lazy load) with angularJS\n * @version v1.0.0-alpha2\n * @link https://github.com/ocombe/ocLazyLoad\n * @license MIT\n * @author Olivier Combe \n */\n(function (angular, window) {\n \"use strict\";\n\n var regModules = [\"ng\", \"oc.lazyLoad\"],\n regInvokes = {},\n regConfigs = [],\n modulesToLoad = [],\n recordDeclarations = [],\n broadcast = angular.noop,\n runBlocks = {},\n justLoaded = [];\n\n var ocLazyLoad = angular.module(\"oc.lazyLoad\", [\"ng\"]);\n\n ocLazyLoad.provider(\"$ocLazyLoad\", [\"$controllerProvider\", \"$provide\", \"$compileProvider\", \"$filterProvider\", \"$injector\", \"$animateProvider\", function ($controllerProvider, $provide, $compileProvider, $filterProvider, $injector, $animateProvider) {\n var modules = {},\n providers = {\n $controllerProvider: $controllerProvider,\n $compileProvider: $compileProvider,\n $filterProvider: $filterProvider,\n $provide: $provide, // other things\n $injector: $injector,\n $animateProvider: $animateProvider\n },\n debug = false,\n events = false,\n moduleCache = [];\n\n moduleCache.push = function (value) {\n if (this.indexOf(value) === -1) {\n Array.prototype.push.apply(this, arguments);\n }\n };\n\n this.config = function (config) {\n // If we want to define modules configs\n if (angular.isDefined(config.modules)) {\n if (angular.isArray(config.modules)) {\n angular.forEach(config.modules, function (moduleConfig) {\n modules[moduleConfig.name] = moduleConfig;\n });\n } else {\n modules[config.modules.name] = config.modules;\n }\n }\n\n if (angular.isDefined(config.debug)) {\n debug = config.debug;\n }\n\n if (angular.isDefined(config.events)) {\n events = config.events;\n }\n };\n\n /**\n * Get the list of existing registered modules\n * @param element\n */\n this._init = function _init(element) {\n // this is probably useless now because we override angular.bootstrap\n if (modulesToLoad.length === 0) {\n var elements = [element],\n names = [\"ng:app\", \"ng-app\", \"x-ng-app\", \"data-ng-app\"],\n NG_APP_CLASS_REGEXP = /\\sng[:\\-]app(:\\s*([\\w\\d_]+);?)?\\s/,\n append = function append(elm) {\n return elm && elements.push(elm);\n };\n\n angular.forEach(names, function (name) {\n names[name] = true;\n append(document.getElementById(name));\n name = name.replace(\":\", \"\\\\:\");\n if (element[0].querySelectorAll) {\n angular.forEach(element[0].querySelectorAll(\".\" + name), append);\n angular.forEach(element[0].querySelectorAll(\".\" + name + \"\\\\:\"), append);\n angular.forEach(element[0].querySelectorAll(\"[\" + name + \"]\"), append);\n }\n });\n\n angular.forEach(elements, function (elm) {\n if (modulesToLoad.length === 0) {\n var className = \" \" + element.className + \" \";\n var match = NG_APP_CLASS_REGEXP.exec(className);\n if (match) {\n modulesToLoad.push((match[2] || \"\").replace(/\\s+/g, \",\"));\n } else {\n angular.forEach(elm.attributes, function (attr) {\n if (modulesToLoad.length === 0 && names[attr.name]) {\n modulesToLoad.push(attr.value);\n }\n });\n }\n }\n });\n }\n\n if (modulesToLoad.length === 0 && !((window.jasmine || window.mocha) && angular.isDefined(angular.mock))) {\n console.error(\"No module found during bootstrap, unable to init ocLazyLoad. You should always use the ng-app directive or angular.boostrap when you use ocLazyLoad.\");\n }\n\n var addReg = function addReg(moduleName) {\n if (regModules.indexOf(moduleName) === -1) {\n // register existing modules\n regModules.push(moduleName);\n var mainModule = angular.module(moduleName);\n\n // register existing components (directives, services, ...)\n _invokeQueue(null, mainModule._invokeQueue, moduleName);\n _invokeQueue(null, mainModule._configBlocks, moduleName); // angular 1.3+\n\n angular.forEach(mainModule.requires, addReg);\n }\n };\n\n angular.forEach(modulesToLoad, function (moduleName) {\n addReg(moduleName);\n });\n\n modulesToLoad = []; // reset for next bootstrap\n recordDeclarations.pop(); // wait for the next lazy load\n };\n\n /**\n * Like JSON.stringify but that doesn't throw on circular references\n * @param obj\n */\n var stringify = function stringify(obj) {\n var cache = [];\n return JSON.stringify(obj, function (key, value) {\n if (angular.isObject(value) && value !== null) {\n if (cache.indexOf(value) !== -1) {\n // Circular reference found, discard key\n return;\n }\n // Store value in our collection\n cache.push(value);\n }\n return value;\n });\n };\n\n var hashCode = function hashCode(str) {\n var hash = 0,\n i,\n chr,\n len;\n if (str.length == 0) {\n return hash;\n }\n for (i = 0, len = str.length; i < len; i++) {\n chr = str.charCodeAt(i);\n hash = (hash << 5) - hash + chr;\n hash |= 0; // Convert to 32bit integer\n }\n return hash;\n };\n\n function _register(providers, registerModules, params) {\n if (registerModules) {\n var k,\n moduleName,\n moduleFn,\n tempRunBlocks = [];\n for (k = registerModules.length - 1; k >= 0; k--) {\n moduleName = registerModules[k];\n if (!angular.isString(moduleName)) {\n moduleName = getModuleName(moduleName);\n }\n if (!moduleName || justLoaded.indexOf(moduleName) !== -1) {\n continue;\n }\n var newModule = regModules.indexOf(moduleName) === -1;\n moduleFn = ngModuleFct(moduleName);\n if (newModule) {\n // new module\n regModules.push(moduleName);\n _register(providers, moduleFn.requires, params);\n }\n if (moduleFn._runBlocks.length > 0) {\n // new run blocks detected! Replace the old ones (if existing)\n runBlocks[moduleName] = [];\n while (moduleFn._runBlocks.length > 0) {\n runBlocks[moduleName].push(moduleFn._runBlocks.shift());\n }\n }\n if (angular.isDefined(runBlocks[moduleName]) && (newModule || params.rerun)) {\n tempRunBlocks = tempRunBlocks.concat(runBlocks[moduleName]);\n }\n _invokeQueue(providers, moduleFn._invokeQueue, moduleName, params.reconfig);\n _invokeQueue(providers, moduleFn._configBlocks, moduleName, params.reconfig); // angular 1.3+\n broadcast(newModule ? \"ocLazyLoad.moduleLoaded\" : \"ocLazyLoad.moduleReloaded\", moduleName);\n registerModules.pop();\n justLoaded.push(moduleName);\n }\n // execute the run blocks at the end\n var instanceInjector = providers.getInstanceInjector();\n angular.forEach(tempRunBlocks, function (fn) {\n instanceInjector.invoke(fn);\n });\n }\n }\n\n function _registerInvokeList(args, moduleName) {\n var invokeList = args[2][0],\n type = args[1],\n newInvoke = false;\n if (angular.isUndefined(regInvokes[moduleName])) {\n regInvokes[moduleName] = {};\n }\n if (angular.isUndefined(regInvokes[moduleName][type])) {\n regInvokes[moduleName][type] = {};\n }\n var onInvoke = function onInvoke(invokeName, signature) {\n if (angular.isUndefined(regInvokes[moduleName][type][invokeName])) {\n regInvokes[moduleName][type][invokeName] = [];\n }\n if (regInvokes[moduleName][type][invokeName].indexOf(signature) === -1) {\n newInvoke = true;\n regInvokes[moduleName][type][invokeName].push(signature);\n broadcast(\"ocLazyLoad.componentLoaded\", [moduleName, type, invokeName]);\n }\n };\n\n function signature(data) {\n if (angular.isArray(data)) {\n // arrays are objects, we need to test for it first\n return hashCode(data.toString());\n } else if (angular.isObject(data)) {\n // constants & values for example\n return hashCode(stringify(data));\n } else {\n if (angular.isDefined(data) && data !== null) {\n return hashCode(data.toString());\n } else {\n // null & undefined constants\n return data;\n }\n }\n }\n\n if (angular.isString(invokeList)) {\n onInvoke(invokeList, signature(args[2][1]));\n } else if (angular.isObject(invokeList)) {\n angular.forEach(invokeList, function (invoke, key) {\n if (angular.isString(invoke)) {\n // decorators for example\n onInvoke(invoke, signature(invokeList[1]));\n } else {\n // components registered as object lists {\"componentName\": function() {}}\n onInvoke(key, signature(invoke));\n }\n });\n } else {\n return false;\n }\n return newInvoke;\n }\n\n function _invokeQueue(providers, queue, moduleName, reconfig) {\n if (!queue) {\n return;\n }\n\n var i, len, args, provider;\n for (i = 0, len = queue.length; i < len; i++) {\n args = queue[i];\n if (angular.isArray(args)) {\n if (providers !== null) {\n if (providers.hasOwnProperty(args[0])) {\n provider = providers[args[0]];\n } else {\n throw new Error(\"unsupported provider \" + args[0]);\n }\n }\n var isNew = _registerInvokeList(args, moduleName);\n if (args[1] !== \"invoke\") {\n if (isNew && angular.isDefined(provider)) {\n provider[args[1]].apply(provider, args[2]);\n }\n } else {\n // config block\n var callInvoke = function callInvoke(fct) {\n var invoked = regConfigs.indexOf(moduleName + \"-\" + fct);\n if (invoked === -1 || reconfig) {\n if (invoked === -1) {\n regConfigs.push(moduleName + \"-\" + fct);\n }\n if (angular.isDefined(provider)) {\n provider[args[1]].apply(provider, args[2]);\n }\n }\n };\n if (angular.isFunction(args[2][0])) {\n callInvoke(args[2][0]);\n } else if (angular.isArray(args[2][0])) {\n for (var j = 0, jlen = args[2][0].length; j < jlen; j++) {\n if (angular.isFunction(args[2][0][j])) {\n callInvoke(args[2][0][j]);\n }\n }\n }\n }\n }\n }\n }\n\n function getModuleName(module) {\n var moduleName = null;\n if (angular.isString(module)) {\n moduleName = module;\n } else if (angular.isObject(module) && module.hasOwnProperty(\"name\") && angular.isString(module.name)) {\n moduleName = module.name;\n }\n return moduleName;\n }\n\n function moduleExists(moduleName) {\n if (!angular.isString(moduleName)) {\n return false;\n }\n try {\n return ngModuleFct(moduleName);\n } catch (e) {\n if (/No module/.test(e) || e.message.indexOf(\"$injector:nomod\") > -1) {\n return false;\n }\n }\n }\n\n this.$get = [\"$log\", \"$rootElement\", \"$rootScope\", \"$cacheFactory\", \"$q\", function ($log, $rootElement, $rootScope, $cacheFactory, $q) {\n var instanceInjector,\n filesCache = $cacheFactory(\"ocLazyLoad\");\n\n if (!debug) {\n $log = {};\n $log.error = angular.noop;\n $log.warn = angular.noop;\n $log.info = angular.noop;\n }\n\n // Make this lazy because when $get() is called the instance injector hasn't been assigned to the rootElement yet\n providers.getInstanceInjector = function () {\n return instanceInjector ? instanceInjector : instanceInjector = $rootElement.data(\"$injector\") || angular.injector();\n };\n\n broadcast = function broadcast(eventName, params) {\n if (events) {\n $rootScope.$broadcast(eventName, params);\n }\n if (debug) {\n $log.info(eventName, params);\n }\n };\n\n function reject(e) {\n var deferred = $q.defer();\n $log.error(e.message);\n deferred.reject(e);\n return deferred.promise;\n }\n\n return {\n _broadcast: broadcast,\n\n _$log: $log,\n\n /**\n * Returns the files cache used by the loaders to store the files currently loading\n * @returns {*}\n */\n _getFilesCache: function getFilesCache() {\n return filesCache;\n },\n\n /**\n * Let the service know that it should monitor angular.module because files are loading\n * @param watch boolean\n */\n toggleWatch: function toggleWatch(watch) {\n if (watch) {\n recordDeclarations.push(true);\n } else {\n recordDeclarations.pop();\n }\n },\n\n /**\n * Let you get a module config object\n * @param moduleName String the name of the module\n * @returns {*}\n */\n getModuleConfig: function getModuleConfig(moduleName) {\n if (!angular.isString(moduleName)) {\n throw new Error(\"You need to give the name of the module to get\");\n }\n if (!modules[moduleName]) {\n return null;\n }\n return angular.copy(modules[moduleName]);\n },\n\n /**\n * Let you define a module config object\n * @param moduleConfig Object the module config object\n * @returns {*}\n */\n setModuleConfig: function setModuleConfig(moduleConfig) {\n if (!angular.isObject(moduleConfig)) {\n throw new Error(\"You need to give the module config object to set\");\n }\n modules[moduleConfig.name] = moduleConfig;\n return moduleConfig;\n },\n\n /**\n * Returns the list of loaded modules\n * @returns {string[]}\n */\n getModules: function () {\n return regModules;\n },\n\n /**\n * Let you check if a module has been loaded into Angular or not\n * @param modulesNames String/Object a module name, or a list of module names\n * @returns {boolean}\n */\n isLoaded: function isLoaded(modulesNames) {\n var moduleLoaded = function moduleLoaded(module) {\n var isLoaded = regModules.indexOf(module) > -1;\n if (!isLoaded) {\n isLoaded = !!moduleExists(module);\n }\n return isLoaded;\n };\n if (angular.isString(modulesNames)) {\n modulesNames = [modulesNames];\n }\n if (angular.isArray(modulesNames)) {\n var i, len;\n for (i = 0, len = modulesNames.length; i < len; i++) {\n if (!moduleLoaded(modulesNames[i])) {\n return false;\n }\n }\n return true;\n } else {\n throw new Error(\"You need to define the module(s) name(s)\");\n }\n },\n\n /**\n * Given a module, return its name\n * @param module\n * @returns {String}\n */\n _getModuleName: getModuleName,\n\n /**\n * Returns a module if it exists\n * @param moduleName\n * @returns {module}\n */\n _getModule: function getModule(moduleName) {\n try {\n return ngModuleFct(moduleName);\n } catch (e) {\n // this error message really suxx\n if (/No module/.test(e) || e.message.indexOf(\"$injector:nomod\") > -1) {\n e.message = \"The module \\\"\" + stringify(moduleName) + \"\\\" that you are trying to load does not exist. \" + e.message;\n }\n throw e;\n }\n },\n\n /**\n * Check if a module exists and returns it if it does\n * @param moduleName\n * @returns {boolean}\n */\n moduleExists: moduleExists,\n\n /**\n * Load the dependencies, and might try to load new files depending on the config\n * @param moduleName (String or Array of Strings)\n * @param localParams\n * @returns {*}\n * @private\n */\n _loadDependencies: function _loadDependencies(moduleName, localParams) {\n var loadedModule,\n requires,\n diff,\n promisesList = [],\n self = this;\n\n moduleName = self._getModuleName(moduleName);\n\n if (moduleName === null) {\n return $q.when();\n } else {\n try {\n loadedModule = self._getModule(moduleName);\n } catch (e) {\n return reject(e);\n }\n // get unloaded requires\n requires = self.getRequires(loadedModule);\n }\n\n angular.forEach(requires, function (requireEntry) {\n // If no configuration is provided, try and find one from a previous load.\n // If there isn't one, bail and let the normal flow run\n if (angular.isString(requireEntry)) {\n var config = self.getModuleConfig(requireEntry);\n if (config === null) {\n moduleCache.push(requireEntry); // We don't know about this module, but something else might, so push it anyway.\n return;\n }\n requireEntry = config;\n }\n\n // Check if this dependency has been loaded previously\n if (self.moduleExists(requireEntry.name)) {\n // compare against the already loaded module to see if the new definition adds any new files\n diff = requireEntry.files.filter(function (n) {\n return self.getModuleConfig(requireEntry.name).files.indexOf(n) < 0;\n });\n\n // If the module was redefined, advise via the console\n if (diff.length !== 0) {\n self._$log.warn(\"Module \\\"\", moduleName, \"\\\" attempted to redefine configuration for dependency. \\\"\", requireEntry.name, \"\\\"\\n Additional Files Loaded:\", diff);\n }\n\n // Push everything to the file loader, it will weed out the duplicates.\n if (angular.isDefined(self.filesLoader)) {\n // if a files loader is defined\n promisesList.push(self.filesLoader(requireEntry, localParams).then(function () {\n return self._loadDependencies(requireEntry);\n }));\n } else {\n return reject(new Error(\"Error: New dependencies need to be loaded from external files (\" + requireEntry.files + \"), but no loader has been defined.\"));\n }\n return;\n } else if (angular.isArray(requireEntry)) {\n requireEntry = {\n files: requireEntry\n };\n } else if (angular.isObject(requireEntry)) {\n if (requireEntry.hasOwnProperty(\"name\") && requireEntry.name) {\n // The dependency doesn't exist in the module cache and is a new configuration, so store and push it.\n self.setModuleConfig(requireEntry);\n moduleCache.push(requireEntry.name);\n }\n }\n\n // Check if the dependency has any files that need to be loaded. If there are, push a new promise to the promise list.\n if (angular.isDefined(requireEntry.files) && requireEntry.files.length !== 0) {\n if (angular.isDefined(self.filesLoader)) {\n // if a files loader is defined\n promisesList.push(self.filesLoader(requireEntry, localParams).then(function () {\n return self._loadDependencies(requireEntry);\n }));\n } else {\n return reject(new Error(\"Error: the module \\\"\" + requireEntry.name + \"\\\" is defined in external files (\" + requireEntry.files + \"), but no loader has been defined.\"));\n }\n }\n });\n\n // Create a wrapper promise to watch the promise list and resolve it once everything is done.\n return $q.all(promisesList);\n },\n\n /**\n * Inject new modules into Angular\n * @param moduleName\n * @param localParams\n */\n inject: function inject(moduleName, localParams) {\n var self = this,\n deferred = $q.defer();\n if (angular.isDefined(moduleName) && moduleName !== null) {\n if (angular.isArray(moduleName)) {\n var promisesList = [];\n angular.forEach(moduleName, function (module) {\n promisesList.push(self.inject(module));\n });\n return $q.all(promisesList);\n } else {\n self._addToLoadList(self._getModuleName(moduleName), true);\n }\n }\n if (modulesToLoad.length > 0) {\n var res = modulesToLoad.slice(); // clean copy\n var loadNext = function loadNext(moduleName) {\n moduleCache.push(moduleName);\n self._loadDependencies(moduleName, localParams).then(function success() {\n try {\n justLoaded = [];\n _register(providers, moduleCache, localParams);\n } catch (e) {\n self._$log.error(e.message);\n deferred.reject(e);\n return;\n }\n\n if (modulesToLoad.length > 0) {\n loadNext(modulesToLoad.shift()); // load the next in list\n } else {\n deferred.resolve(res); // everything has been loaded, resolve\n }\n }, function error(err) {\n deferred.reject(err);\n });\n };\n\n // load the first in list\n loadNext(modulesToLoad.shift());\n } else {\n deferred.resolve();\n }\n return deferred.promise;\n },\n\n /**\n * Get the list of required modules/services/... for this module\n * @param module\n * @returns {Array}\n */\n getRequires: function getRequires(module) {\n var requires = [];\n angular.forEach(module.requires, function (requireModule) {\n if (regModules.indexOf(requireModule) === -1) {\n requires.push(requireModule);\n }\n });\n return requires;\n },\n\n /**\n * Invoke the new modules & component by their providers\n * @param providers\n * @param queue\n * @param moduleName\n * @param reconfig\n * @private\n */\n _invokeQueue: _invokeQueue,\n\n /**\n * Check if a module has been invoked and registers it if not\n * @param args\n * @param moduleName\n * @returns {boolean} is new\n */\n _registerInvokeList: _registerInvokeList,\n\n /**\n * Register a new module and loads it, executing the run/config blocks if needed\n * @param providers\n * @param registerModules\n * @param params\n * @private\n */\n _register: _register,\n\n /**\n * Add a module name to the list of modules that will be loaded in the next inject\n * @param name\n * @param force\n * @private\n */\n _addToLoadList: _addToLoadList\n };\n }];\n\n // Let's get the list of loaded modules & components\n this._init(angular.element(window.document));\n }]);\n\n var bootstrapFct = angular.bootstrap;\n angular.bootstrap = function (element, modules, config) {\n // we use slice to make a clean copy\n angular.forEach(modules.slice(), function (module) {\n _addToLoadList(module, true);\n });\n return bootstrapFct(element, modules, config);\n };\n\n var _addToLoadList = function _addToLoadList(name, force) {\n if ((recordDeclarations.length > 0 || force) && angular.isString(name) && modulesToLoad.indexOf(name) === -1) {\n modulesToLoad.push(name);\n }\n };\n\n var ngModuleFct = angular.module;\n angular.module = function (name, requires, configFn) {\n _addToLoadList(name);\n return ngModuleFct(name, requires, configFn);\n };\n})(angular, window);\n(function (angular) {\n \"use strict\";\n\n angular.module(\"oc.lazyLoad\").directive(\"ocLazyLoad\", [\"$ocLazyLoad\", \"$compile\", \"$animate\", \"$parse\", function ($ocLazyLoad, $compile, $animate, $parse) {\n return {\n restrict: \"A\",\n terminal: true,\n priority: 1000,\n compile: function compile(element, attrs) {\n // we store the content and remove it before compilation\n var content = element[0].innerHTML;\n element.html(\"\");\n\n return function ($scope, $element, $attr) {\n var model = $parse($attr.ocLazyLoad);\n $scope.$watch(function () {\n return model($scope) || $attr.ocLazyLoad; // it can be a module name (string), an object, an array, or a scope reference to any of this\n }, function (moduleName) {\n if (angular.isDefined(moduleName)) {\n $ocLazyLoad.load(moduleName).then(function success() {\n $animate.enter($compile(content)($scope), $element);\n });\n }\n }, true);\n };\n }\n };\n }]);\n})(angular);\n(function (angular) {\n \"use strict\";\n\n angular.module(\"oc.lazyLoad\").config([\"$provide\", function ($provide) {\n $provide.decorator(\"$ocLazyLoad\", [\"$delegate\", \"$q\", \"$window\", \"$interval\", function ($delegate, $q, $window, $interval) {\n var uaCssChecked = false,\n useCssLoadPatch = false,\n anchor = $window.document.getElementsByTagName(\"head\")[0] || $window.document.getElementsByTagName(\"body\")[0];\n\n /**\r\n * Load a js/css file\r\n * @param type\r\n * @param path\r\n * @param params\r\n * @returns promise\r\n */\n $delegate.buildElement = function buildElement(type, path, params) {\n var deferred = $q.defer(),\n el,\n loaded,\n filesCache = $delegate._getFilesCache(),\n cacheBuster = function cacheBuster(url) {\n var dc = new Date().getTime();\n if (url.indexOf(\"?\") >= 0) {\n if (url.substring(0, url.length - 1) === \"&\") {\n return url + \"_dc=\" + dc;\n }\n return url + \"&_dc=\" + dc;\n } else {\n return url + \"?_dc=\" + dc;\n }\n };\n\n // Store the promise early so the file load can be detected by other parallel lazy loads\n // (ie: multiple routes on one page) a 'true' value isn't sufficient\n // as it causes false positive load results.\n if (angular.isUndefined(filesCache.get(path))) {\n filesCache.put(path, deferred.promise);\n }\n\n // Switch in case more content types are added later\n switch (type) {\n case \"css\":\n el = $window.document.createElement(\"link\");\n el.type = \"text/css\";\n el.rel = \"stylesheet\";\n el.href = params.cache === false ? cacheBuster(path) : path;\n break;\n case \"js\":\n el = $window.document.createElement(\"script\");\n el.src = params.cache === false ? cacheBuster(path) : path;\n break;\n default:\n deferred.reject(new Error(\"Requested type \\\"\" + type + \"\\\" is not known. Could not inject \\\"\" + path + \"\\\"\"));\n break;\n }\n el.onload = el.onreadystatechange = function (e) {\n if (el.readyState && !/^c|loade/.test(el.readyState) || loaded) return;\n el.onload = el.onreadystatechange = null;\n loaded = 1;\n $delegate._broadcast(\"ocLazyLoad.fileLoaded\", path);\n deferred.resolve();\n };\n el.onerror = function () {\n deferred.reject(new Error(\"Unable to load \" + path));\n };\n el.async = params.serie ? 0 : 1;\n\n var insertBeforeElem = anchor.lastChild;\n if (params.insertBefore) {\n var element = angular.element(params.insertBefore);\n if (element && element.length > 0) {\n insertBeforeElem = element[0];\n }\n }\n anchor.insertBefore(el, insertBeforeElem);\n\n /*\r\n The event load or readystatechange doesn't fire in:\r\n - iOS < 6 (default mobile browser)\r\n - Android < 4.4 (default mobile browser)\r\n - Safari < 6 (desktop browser)\r\n */\n if (type == \"css\") {\n if (!uaCssChecked) {\n var ua = $window.navigator.userAgent.toLowerCase();\n\n // iOS < 6\n if (/iP(hone|od|ad)/.test($window.navigator.platform)) {\n var v = $window.navigator.appVersion.match(/OS (\\d+)_(\\d+)_?(\\d+)?/);\n var iOSVersion = parseFloat([parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)].join(\".\"));\n useCssLoadPatch = iOSVersion < 6;\n } else if (ua.indexOf(\"android\") > -1) {\n // Android < 4.4\n var androidVersion = parseFloat(ua.slice(ua.indexOf(\"android\") + 8));\n useCssLoadPatch = androidVersion < 4.4;\n } else if (ua.indexOf(\"safari\") > -1 && ua.indexOf(\"chrome\") == -1 && ua.indexOf(\"phantomjs\") == -1) {\n var safariVersion = parseFloat(ua.match(/version\\/([\\.\\d]+)/i)[1]);\n useCssLoadPatch = safariVersion < 6;\n }\n }\n\n if (useCssLoadPatch) {\n var tries = 1000; // * 20 = 20000 miliseconds\n var interval = $interval(function () {\n try {\n el.sheet.cssRules;\n $interval.cancel(interval);\n el.onload();\n } catch (e) {\n if (--tries <= 0) {\n el.onerror();\n }\n }\n }, 20);\n }\n }\n\n return deferred.promise;\n };\n\n return $delegate;\n }]);\n }]);\n})(angular);\n(function (angular) {\n \"use strict\";\n\n angular.module(\"oc.lazyLoad\").config([\"$provide\", function ($provide) {\n $provide.decorator(\"$ocLazyLoad\", [\"$delegate\", \"$q\", function ($delegate, $q) {\n /**\n * The function that loads new files\n * @param config\n * @param params\n * @returns {*}\n */\n $delegate.filesLoader = function filesLoader(config) {\n var originalParams = arguments[1] === undefined ? {} : arguments[1];\n\n var cssFiles = [],\n templatesFiles = [],\n jsFiles = [],\n promises = [],\n cachePromise = null,\n filesCache = $delegate._getFilesCache();\n\n $delegate.toggleWatch(true); // start watching angular.module calls\n\n // we need a real copy because we might edit some parts of it\n var params = angular.copy(angular.extend({}, originalParams, config));\n\n var pushFile = function pushFile(path) {\n var file_type = null,\n m;\n if (angular.isObject(path)) {\n file_type = path.type;\n path = path.path;\n }\n cachePromise = filesCache.get(path);\n if (angular.isUndefined(cachePromise) || params.cache === false) {\n\n // always check for requirejs syntax just in case\n if ((m = /^(css|less|html|htm|js)?(?=!)/.exec(path)) !== null) {\n // Detect file type using preceding type declaration (ala requireJS)\n file_type = m[1];\n path = path.substr(m[1].length + 1, path.length); // Strip the type from the path\n }\n\n if (!file_type) {\n if ((m = /[.](css|less|html|htm|js)?((\\?|#).*)?$/.exec(path)) !== null) {\n // Detect file type via file extension\n file_type = m[1];\n } else if (!$delegate.jsLoader.hasOwnProperty(\"ocLazyLoadLoader\") && $delegate.jsLoader.hasOwnProperty(\"load\")) {\n // requirejs\n file_type = \"js\";\n } else {\n $delegate._$log.error(\"File type could not be determined. \" + path);\n return;\n }\n }\n\n if ((file_type === \"css\" || file_type === \"less\") && cssFiles.indexOf(path) === -1) {\n cssFiles.push(path);\n } else if ((file_type === \"html\" || file_type === \"htm\") && templatesFiles.indexOf(path) === -1) {\n templatesFiles.push(path);\n } else if (file_type === \"js\" || jsFiles.indexOf(path) === -1) {\n jsFiles.push(path);\n } else {\n $delegate._$log.error(\"File type is not valid. \" + path);\n }\n } else if (cachePromise) {\n promises.push(cachePromise);\n }\n };\n\n if (params.serie) {\n pushFile(params.files.shift());\n } else {\n angular.forEach(params.files, function (path) {\n pushFile(path);\n });\n }\n\n if (cssFiles.length > 0) {\n var cssDeferred = $q.defer();\n $delegate.cssLoader(cssFiles, function (err) {\n if (angular.isDefined(err) && $delegate.cssLoader.hasOwnProperty(\"ocLazyLoadLoader\")) {\n $delegate._$log.error(err);\n cssDeferred.reject(err);\n } else {\n cssDeferred.resolve();\n }\n }, params);\n promises.push(cssDeferred.promise);\n }\n\n if (templatesFiles.length > 0) {\n var templatesDeferred = $q.defer();\n $delegate.templatesLoader(templatesFiles, function (err) {\n if (angular.isDefined(err) && $delegate.templatesLoader.hasOwnProperty(\"ocLazyLoadLoader\")) {\n $delegate._$log.error(err);\n templatesDeferred.reject(err);\n } else {\n templatesDeferred.resolve();\n }\n }, params);\n promises.push(templatesDeferred.promise);\n }\n\n if (jsFiles.length > 0) {\n var jsDeferred = $q.defer();\n $delegate.jsLoader(jsFiles, function (err) {\n if (angular.isDefined(err) && $delegate.jsLoader.hasOwnProperty(\"ocLazyLoadLoader\")) {\n $delegate._$log.error(err);\n jsDeferred.reject(err);\n } else {\n jsDeferred.resolve();\n }\n }, params);\n promises.push(jsDeferred.promise);\n }\n\n if (params.serie && params.files.length > 0) {\n return $q.all(promises).then(function success() {\n return $delegate.filesLoader(config, params);\n });\n } else {\n return $q.all(promises)[\"finally\"](function (res) {\n $delegate.toggleWatch(false); // stop watching angular.module calls\n return res;\n });\n }\n };\n\n /**\n * Load a module or a list of modules into Angular\n * @param module Mixed the name of a predefined module config object, or a module config object, or an array of either\n * @param params Object optional parameters\n * @returns promise\n */\n $delegate.load = function (module) {\n var params = arguments[1] === undefined ? {} : arguments[1];\n\n var self = this,\n config = null,\n deferredList = [],\n deferred = $q.defer(),\n errText;\n\n // If module is an array, break it down\n if (angular.isArray(module)) {\n // Resubmit each entry as a single module\n angular.forEach(module, function (m) {\n deferredList.push(self.load(m, params));\n });\n\n // Resolve the promise once everything has loaded\n $q.all(deferredList).then(function success(res) {\n deferred.resolve(res);\n }, function error(err) {\n deferred.reject(err);\n });\n\n return deferred.promise;\n }\n\n // Get or Set a configuration depending on what was passed in\n if (angular.isString(module)) {\n config = self.getModuleConfig(module);\n if (!config) {\n config = {\n files: [module]\n };\n }\n } else if (angular.isObject(module)) {\n // case {type: 'js', path: lazyLoadUrl + 'testModule.fakejs'}\n if (angular.isDefined(module.path) && angular.isDefined(module.type)) {\n config = {\n files: [module]\n };\n } else {\n config = self.setModuleConfig(module);\n }\n }\n\n if (config === null) {\n var moduleName = self._getModuleName(module);\n errText = \"Module \\\"\" + (moduleName || \"unknown\") + \"\\\" is not configured, cannot load.\";\n $delegate._$log.error(errText);\n deferred.reject(new Error(errText));\n return deferred.promise;\n } else {\n // deprecated\n if (angular.isDefined(config.template)) {\n if (angular.isUndefined(config.files)) {\n config.files = [];\n }\n if (angular.isString(config.template)) {\n config.files.push(config.template);\n } else if (angular.isArray(config.template)) {\n config.files.concat(config.template);\n }\n }\n }\n\n var localParams = {};\n angular.extend(localParams, params, config);\n\n // if someone used an external loader and called the load function with just the module name\n if (angular.isUndefined(config.files) && angular.isDefined(config.name) && $delegate.moduleExists(config.name)) {\n return $delegate.inject(config.name, localParams);\n }\n\n $delegate.filesLoader(config, localParams).then(function success() {\n $delegate.inject(null, localParams).then(function (res) {\n deferred.resolve(res);\n }, function (err) {\n deferred.reject(err);\n });\n }, function error(err) {\n deferred.reject(err);\n });\n\n return deferred.promise;\n };\n\n // return the patched service\n return $delegate;\n }]);\n }]);\n})(angular);\n(function (angular) {\n \"use strict\";\n\n angular.module(\"oc.lazyLoad\").config([\"$provide\", function ($provide) {\n $provide.decorator(\"$ocLazyLoad\", [\"$delegate\", \"$q\", function ($delegate, $q) {\n /**\r\n * cssLoader function\r\n * @type Function\r\n * @param paths array list of css files to load\r\n * @param callback to call when everything is loaded. We use a callback and not a promise\r\n * @param params object config parameters\r\n * because the user can overwrite cssLoader and it will probably not use promises :(\r\n */\n $delegate.cssLoader = function (paths, callback, params) {\n var promises = [];\n angular.forEach(paths, function loading(path) {\n promises.push($delegate.buildElement(\"css\", path, params));\n });\n $q.all(promises).then(function success() {\n callback();\n }, function (err) {\n callback(err);\n });\n };\n $delegate.cssLoader.ocLazyLoadLoader = true;\n\n return $delegate;\n }]);\n }]);\n})(angular);\n(function (angular) {\n \"use strict\";\n\n angular.module(\"oc.lazyLoad\").config([\"$provide\", function ($provide) {\n $provide.decorator(\"$ocLazyLoad\", [\"$delegate\", \"$q\", function ($delegate, $q) {\n /**\r\n * jsLoader function\r\n * @type Function\r\n * @param paths array list of js files to load\r\n * @param callback to call when everything is loaded. We use a callback and not a promise\r\n * @param params object config parameters\r\n * because the user can overwrite jsLoader and it will probably not use promises :(\r\n */\n $delegate.jsLoader = require;\n\n return $delegate;\n }]);\n }]);\n})(angular);\n(function (angular) {\n \"use strict\";\n\n angular.module(\"oc.lazyLoad\").config([\"$provide\", function ($provide) {\n $provide.decorator(\"$ocLazyLoad\", [\"$delegate\", \"$templateCache\", \"$q\", \"$http\", function ($delegate, $templateCache, $q, $http) {\n /**\r\n * templatesLoader function\r\n * @type Function\r\n * @param paths array list of css files to load\r\n * @param callback to call when everything is loaded. We use a callback and not a promise\r\n * @param params object config parameters for $http\r\n * because the user can overwrite templatesLoader and it will probably not use promises :(\r\n */\n $delegate.templatesLoader = function (paths, callback, params) {\n var promises = [],\n filesCache = $delegate._getFilesCache();\n\n angular.forEach(paths, function (url) {\n var deferred = $q.defer();\n promises.push(deferred.promise);\n $http.get(url, params).success(function (data) {\n if (angular.isString(data) && data.length > 0) {\n angular.forEach(angular.element(data), function (node) {\n if (node.nodeName === \"SCRIPT\" && node.type === \"text/ng-template\") {\n $templateCache.put(node.id, node.innerHTML);\n }\n });\n }\n if (angular.isUndefined(filesCache.get(url))) {\n filesCache.put(url, true);\n }\n deferred.resolve();\n }).error(function (err) {\n deferred.reject(new Error(\"Unable to load template file \\\"\" + url + \"\\\": \" + err));\n });\n });\n return $q.all(promises).then(function success() {\n callback();\n }, function error(err) {\n callback(err);\n });\n };\n $delegate.templatesLoader.ocLazyLoadLoader = true;\n\n return $delegate;\n }]);\n }]);\n})(angular);\n// Array.indexOf polyfill for IE8\nif (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement, fromIndex) {\n var k;\n\n // 1. Let O be the result of calling ToObject passing\n // the this value as the argument.\n if (this == null) {\n throw new TypeError(\"\\\"this\\\" is null or not defined\");\n }\n\n var O = Object(this);\n\n // 2. Let lenValue be the result of calling the Get\n // internal method of O with the argument \"length\".\n // 3. Let len be ToUint32(lenValue).\n var len = O.length >>> 0;\n\n // 4. If len is 0, return -1.\n if (len === 0) {\n return -1;\n }\n\n // 5. If argument fromIndex was passed let n be\n // ToInteger(fromIndex); else let n be 0.\n var n = +fromIndex || 0;\n\n if (Math.abs(n) === Infinity) {\n n = 0;\n }\n\n // 6. If n >= len, return -1.\n if (n >= len) {\n return -1;\n }\n\n // 7. If n >= 0, then Let k be n.\n // 8. Else, n<0, Let k be len - abs(n).\n // If k is less than 0, then let k be 0.\n k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);\n\n // 9. Repeat, while k < len\n while (k < len) {\n // a. Let Pk be ToString(k).\n // This is implicit for LHS operands of the in operator\n // b. Let kPresent be the result of calling the\n // HasProperty internal method of O with argument Pk.\n // This step can be combined with c\n // c. If kPresent is true, then\n // i. Let elementK be the result of calling the Get\n // internal method of O with the argument ToString(k).\n // ii. Let same be the result of applying the\n // Strict Equality Comparison Algorithm to\n // searchElement and elementK.\n // iii. If same is true, return k.\n if (k in O && O[k] === searchElement) {\n return k;\n }\n k++;\n }\n return -1;\n };\n}\n//# sourceMappingURL=ocLazyLoad.require.js.map"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/src/ocLazyLoad.core.js b/src/ocLazyLoad.core.js index 65bfc93..a2e9516 100644 --- a/src/ocLazyLoad.core.js +++ b/src/ocLazyLoad.core.js @@ -205,9 +205,14 @@ regInvokes[moduleName][type] = {}; } var onInvoke = function(invokeName, signature) { - newInvoke = true; - regInvokes[moduleName][type][invokeName].push(signature); - broadcast('ocLazyLoad.componentLoaded', [moduleName, type, invokeName]); + if(angular.isUndefined(regInvokes[moduleName][type][invokeName])) { + regInvokes[moduleName][type][invokeName] = []; + } + if(regInvokes[moduleName][type][invokeName].indexOf(signature) === -1) { + newInvoke = true; + regInvokes[moduleName][type][invokeName].push(signature); + broadcast('ocLazyLoad.componentLoaded', [moduleName, type, invokeName]); + } }; function signature(data) { @@ -225,21 +230,13 @@ } if(angular.isString(invokeList)) { - if(angular.isUndefined(regInvokes[moduleName][type][invokeList])) { - regInvokes[moduleName][type][invokeList] = []; - } - if(regInvokes[moduleName][type][invokeList].indexOf(signature(args[2][1])) === -1) { - onInvoke(invokeList, signature(args[2][1])); - } - } else if(angular.isObject(invokeList)) { // decorators for example - angular.forEach(invokeList, function(invoke) { - if(angular.isString(invoke)) { - if(angular.isUndefined(regInvokes[moduleName][type][invoke])) { - regInvokes[moduleName][type][invoke] = []; - } - if(regInvokes[moduleName][type][invoke].indexOf(signature(invokeList[1])) === -1) { - onInvoke(invoke, signature(invokeList[1])); - } + onInvoke(invokeList, signature(args[2][1])); + } else if(angular.isObject(invokeList)) { + angular.forEach(invokeList, function(invoke, key) { + if(angular.isString(invoke)) { // decorators for example + onInvoke(invoke, signature(invokeList[1])); + } else { // components registered as object lists {"componentName": function() {}} + onInvoke(key, signature(invoke)); } }); } else { diff --git a/tests/unit/lazyLoad/testModule5.js b/tests/unit/lazyLoad/testModule5.js new file mode 100644 index 0000000..77facee --- /dev/null +++ b/tests/unit/lazyLoad/testModule5.js @@ -0,0 +1,5 @@ +var testModule = angular.module('testModule5', []); + +testModule.controller({ + "testModule5Ctrl": angular.noop +}); diff --git a/tests/unit/specs/ocLazyLoad.spec.js b/tests/unit/specs/ocLazyLoad.spec.js index 5757573..cc9b1ca 100644 --- a/tests/unit/specs/ocLazyLoad.spec.js +++ b/tests/unit/specs/ocLazyLoad.spec.js @@ -118,19 +118,28 @@ describe('Module: oc.lazyLoad', function() { expect(angular.module('testModule')).toBeDefined(); // execute controller - $controller('TestCtrl', {$scope: $rootScope.$new()}); + expect(function() { + $controller('TestCtrl', {$scope: $rootScope.$new()}); + }).not.toThrow(); // instantiate service - $injector.get('testService'); + expect(function() { + $injector.get('testService'); + }).not.toThrow(); // execute filter - $filter('testFilter'); + expect(function() { + $filter('testFilter'); + }).not.toThrow(); // Compile a piece of HTML containing the directive element = $compile("")($rootScope.$new()); // Test the template loading - var $templateCache = $injector.get('$templateCache'); + var $templateCache; + expect(function() { + $templateCache = $injector.get('$templateCache'); + }).not.toThrow(); expect($templateCache.get('/partials/test.html')).toEqual('Test partial content'); // Test the css loading @@ -359,5 +368,26 @@ describe('Module: oc.lazyLoad', function() { throw err; }); }); + + it('should be able to load a component defined as an object', function(done) { + var interval = triggerDigests(); + + $ocLazyLoad.load(lazyLoadUrl + 'testModule5.js').then(function success(res) { + expect(function() { + angular.module('testModule5'); + }).not.toThrow(); + + // execute controller + expect(function() { + $controller('testModule5Ctrl', {$scope: $rootScope.$new()}); + }).not.toThrow(); + + window.clearInterval(interval); + done(); + }, function error(err) { + window.clearInterval(interval); + throw err; + }); + }); }); });