import _ from 'lodash'; import angular from 'angular'; import 'angular-new-router'; import 'oclazyload'; function AppController ( ) { } AppController.$routeConfig = []; const templates = {}; const routes = [ { component: 'home', path: '/', canActivate: function ( ) { return new Promise(function ( resolve, reject ) { require([ './home/home.js', './home/home.html' ], function ( js, html ) { templates.home = html; resolve(); }); }); } } ]; const controllers = _(routes) .indexBy(function ( route ) { return _.capitalize(route.component) + 'Controller'; }) .mapValues(function ( route ) { function controller ( $router, $ocLazyLoad ) { this.$router = $router; this.$ocLazyLoad = $ocLazyLoad; } controller.prototype.canActivate = function ( ) { return route.canActivate ? route.canActivate() : true; }; AppController.$routeConfig.push(_.defaults(_.pick(route, 'component', 'path'), { path: '/' + route.component })); controller.$inject = [ '$router', '$ocLazyLoad' ].concat(route.inject || []); return controller; }) .value(); export default function ( ) { let getComponentTemplate; const module = angular.module('Zaaksysteem', [ 'ngNewRouter', 'oc.lazyLoad' ]) .controller('AppController', AppController) .config([ '$componentLoaderProvider', '$locationProvider', function ( $componentLoaderProvider, $locationProvider ) { $locationProvider.html5Mode(true); $componentLoaderProvider.setTemplateMapping(function ( name ) { return getComponentTemplate(name); }); }]) .run([ '$templateCache', '$ocLazyLoad', function ( $templateCache, $ocLazyLoad ) { getComponentTemplate = function ( name ) { var tplName = `./${name}/${name}.html`; $templateCache.put(tplName, templates[name]); $ocLazyLoad.load({ name: 'Zaaksysteem.' + name }); return tplName; }; }]); _.each(controllers, function ( controller, name ) { module.controller(name, controller); }); return module; }