X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?p=src%2Fapp-framework-demo.git;a=blobdiff_plain;f=afb-client%2Fbower_components%2Ffoundation-apps%2Fjs%2Fangular%2Fservices%2Ffoundation.dynamicRouting.js;fp=afb-client%2Fbower_components%2Ffoundation-apps%2Fjs%2Fangular%2Fservices%2Ffoundation.dynamicRouting.js;h=27e376729f8071b250676e3d70211e5e2d6cf503;hp=0000000000000000000000000000000000000000;hb=5b1e6cc132f44262a873fa8296a2a3e1017b0278;hpb=f7d2f9ac4168ee5064580c666d508667a73cefc0 diff --git a/afb-client/bower_components/foundation-apps/js/angular/services/foundation.dynamicRouting.js b/afb-client/bower_components/foundation-apps/js/angular/services/foundation.dynamicRouting.js new file mode 100644 index 0000000..27e3767 --- /dev/null +++ b/afb-client/bower_components/foundation-apps/js/angular/services/foundation.dynamicRouting.js @@ -0,0 +1,156 @@ +(function() { + 'use strict'; + + angular.module('foundation.dynamicRouting', ['ui.router']) + .provider('$FoundationState', FoundationState) + .controller('DefaultController', DefaultController) + .config(DynamicRoutingConfig) + .run(DynamicRoutingRun) + ; + + FoundationState.$inject = ['$stateProvider']; + + function FoundationState($stateProvider) { + var complexViews = {}; + + this.registerDynamicRoutes = function(routes) { + var dynamicRoutes = routes || foundationRoutes; + + angular.forEach(dynamicRoutes, function(page) { + if (page.hasComposed) { + if (!angular.isDefined(complexViews[page.parent])) { + complexViews[page.parent] = { children: {} }; + } + + if (page.controller) { + page.controller = getController(page); + } + + complexViews[page.parent].children[page.name] = page; + + } else if (page.composed) { + if(!angular.isDefined(complexViews[page.name])) { + complexViews[page.name] = { children: {} }; + } + + if (page.controller) { + page.controller = getController(page); + } + + angular.extend(complexViews[page.name], page); + } else { + var state = { + url: page.url, + templateUrl: page.path, + abstract: page.abstract || false, + parent: page.parent || '', + controller: getController(page), + data: getData(page), + animation: buildAnimations(page), + }; + + $stateProvider.state(page.name, state); + } + }); + + angular.forEach(complexViews, function(page) { + var state = { + url: page.url, + parent: page.parent || '', + abstract: page.abstract || false, + data: getData(page), + animation: buildAnimations(page), + views: { + '': buildState(page.path, page) + } + }; + + angular.forEach(page.children, function(sub) { + state.views[sub.name + '@' + page.name] = buildState(sub.path, page); + }); + + $stateProvider.state(page.name, state); + }); + }; + + this.$get = angular.noop; + + function getData(page) { + var data = { vars: {} }; + if (page.data) { + if (typeof page.data.vars === "object") { + data.vars = page.data.vars; + } + delete page.data.vars; + angular.extend(data, page.data); + } + delete page.data; + angular.extend(data.vars, page); + return data; + } + + function buildState(path, state) { + return { + templateUrl: path, + controller: getController(state), + }; + } + + function getController(state) { + var ctrl = state.controller || 'DefaultController'; + + if (!/\w\s+as\s+\w/.test(ctrl)) { + ctrl += ' as PageCtrl'; + } + + return ctrl; + } + + function buildAnimations(state) { + var animations = {}; + + if (state.animationIn) { + animations.enter = state.animationIn; + } + + if (state.animationOut) { + animations.leave = state.animationOut; + } + + return animations; + } + } + + DefaultController.$inject = ['$scope', '$stateParams', '$state']; + + function DefaultController($scope, $stateParams, $state) { + var params = {}; + angular.forEach($stateParams, function(value, key) { + params[key] = value; + }); + + $scope.params = params; + $scope.current = $state.current.name; + + if($state.current.views) { + $scope.vars = $state.current.data.vars; + $scope.composed = $state.current.data.vars.children; + } else { + $scope.vars = $state.current.data.vars; + } + } + + DynamicRoutingConfig.$inject = ['$FoundationStateProvider']; + + function DynamicRoutingConfig(FoundationStateProvider) { + FoundationStateProvider.registerDynamicRoutes(foundationRoutes); + } + + DynamicRoutingRun.$inject = ['$rootScope', '$state', '$stateParams']; + + function DynamicRoutingRun($rootScope, $state, $stateParams) { + $rootScope.$state = $state; + $rootScope.$stateParams = $stateParams; + } + +})();