Implemented URL query parsing for initial token /opa/?token=abcde
[src/app-framework-demo.git] / afb-client / bower_components / foundation-apps / js / angular / components / accordion / accordion.js
1 (function() {
2   'use strict';
3
4   angular.module('foundation.accordion', [])
5     .controller('ZfAccordionController', zfAccordionController)
6     .directive('zfAccordion', zfAccordion)
7     .directive('zfAccordionItem', zfAccordionItem)
8   ;
9
10   zfAccordionController.$inject = ['$scope'];
11
12   function zfAccordionController($scope) {
13     var controller = this;
14     var sections = controller.sections = $scope.sections = [];
15     var multiOpen = controller.multiOpen = $scope.multiOpen = $scope.multiOpen || false;
16     var collapsible = controller.collapsible = $scope.collapsible = $scope.multiOpen || $scope.collapsible || true; //multi open infers a collapsible true
17     var autoOpen = controller.autoOpen = $scope.autoOpen = $scope.autoOpen || true; //auto open opens first tab on render
18
19     controller.select = function(selectSection) {
20       sections.forEach(function(section) {
21         //if multi open is allowed, toggle a tab
22         if(controller.multiOpen) {
23           if(section.scope === selectSection) {
24             section.scope.active = !section.scope.active;
25           }
26         } else {
27           //non  multi open will close all tabs and open one
28           if(section.scope === selectSection) {
29             //if collapsible is allowed, a tab will toggle
30             section.scope.active = collapsible ? !section.scope.active : true;
31           } else {
32             section.scope.active = false;
33           }
34         }
35
36       });
37     };
38
39     controller.addSection = function addsection(sectionScope) {
40       sections.push({ scope: sectionScope });
41
42       if(sections.length === 1 && autoOpen === true) {
43         sections[0].active = true;
44         sections[0].scope.active = true;
45       }
46     };
47
48     controller.closeAll = function() {
49       sections.forEach(function(section) {
50         section.scope.active = false;
51       });
52     };
53   }
54
55   function zfAccordion() {
56     var directive = {
57       restrict: 'EA',
58       transclude: 'true',
59       replace: true,
60       templateUrl: 'components/accordion/accordion.html',
61       controller: 'ZfAccordionController',
62       scope: {
63         multiOpen: '@?',
64         collapsible: '@?',
65         autoOpen: '@?'
66       },
67       link: link
68     };
69
70     return directive;
71
72     function link(scope, element, attrs, controller) {
73       scope.multiOpen = controller.multiOpen = scope.multiOpen === "true" ? true : false;
74       scope.collapsible = controller.collapsible = scope.collapsible === "true" ? true : false;
75       scope.autoOpen = controller.autoOpen = scope.autoOpen === "true" ? true : false;
76     }
77   }
78
79   //accordion item
80   function zfAccordionItem() {
81     var directive = {
82         restrict: 'EA',
83         templateUrl: 'components/accordion/accordion-item.html',
84         transclude: true,
85         scope: {
86           title: '@'
87         },
88         require: '^zfAccordion',
89         replace: true,
90         controller: function() {},
91         link: link
92     };
93
94     return directive;
95
96     function link(scope, element, attrs, controller, transclude) {
97       scope.active = false;
98       controller.addSection(scope);
99
100       scope.activate = function() {
101         controller.select(scope);
102       };
103
104     }
105   }
106
107 })();