|
1 | 1 | 'use strict'; |
2 | | -(function(){ |
3 | | - angular.module('uiAccordion',[]); |
4 | | - angular.module('uiAccordion') |
5 | | - .directive('ngAccordion',function ($q,$log) { |
6 | | - return { |
7 | | - restrict: 'EA', |
8 | | - controller: function () { |
9 | | - var groups = []; |
10 | | - this.addGroup = function(group) { |
11 | | - groups.push(group); |
12 | | - } |
13 | | - this.getGroups=function(){ |
14 | | - return groups; |
15 | | - } |
16 | | - this.toggleState=function(group){ |
17 | | - for(var a=0;a<groups.length;a++){ |
18 | | - if(group==groups[a]){ |
19 | | - if(!group.open){ |
20 | | - group.beforeOpen().then(function(){ |
21 | | - group.body.show(); |
22 | | - group.open=!group.open; |
23 | | - },function(error){ |
24 | | - $log.error(error); |
25 | | - }) |
26 | | - }else{ |
27 | | - group.beforeHide().then(function(){ |
28 | | - group.open=false; |
29 | | - group.body.hide(); |
30 | | - },function(error){ |
31 | | - $log.error(error); |
32 | | - }) |
33 | | - } |
34 | | - }else{ |
35 | | - (function(group){ |
36 | | - group.beforeHide().then(function(){ |
37 | | - group.open=false; |
38 | | - group.body.hide(); |
39 | | - },function(error){ |
40 | | - $log.error(error); |
41 | | - }) |
42 | | - })(groups[a]); |
43 | | - } |
44 | | - } |
45 | | - } |
46 | | - } |
47 | | - }; |
48 | | - }) |
49 | | - .directive('ngAccordionGroup', function($q) { |
50 | | - function defaultOptions(){ |
51 | | - return { |
52 | | - beforeOpen:function(){ |
53 | | - var def=$q.defer(); |
54 | | - def.resolve(); |
55 | | - return def.promise; |
56 | | - }, |
57 | | - beforeHide:function(){ |
58 | | - var def=$q.defer(); |
59 | | - def.resolve(); |
60 | | - return def.promise; |
61 | | - }, |
62 | | - open:false |
63 | | - } |
| 2 | +angular.module('uiAccordion',[]); |
| 3 | +function fetchFromObject(obj, prop) { |
| 4 | + |
| 5 | + if(typeof obj === 'undefined' || typeof prop === 'undefined') { |
| 6 | + return ; |
64 | 7 | } |
65 | | - return { |
66 | | - require:['^ngAccordion','ngAccordionGroup'], |
67 | | - restrict:'EA', |
68 | | - controller:function(){ |
69 | | - var headerEl; |
70 | | - var bodyEl; |
71 | | - var headerDef=$q.defer(); |
72 | | - var bodyDef=$q.defer(); |
73 | | - this.setHeaderElement=function(element){ |
74 | | - headerDef.resolve(element); |
75 | | - } |
76 | | - this.getHeaderElement=function(){ |
77 | | - return headerDef.promise; |
78 | | - } |
79 | | - this.setBodyElement=function(element){ |
80 | | - bodyDef.resolve(element); |
81 | | - } |
82 | | - this.getBodyElement=function(){ |
83 | | - return bodyDef.promise; |
84 | | - } |
85 | | - }, |
86 | | - link: function(scope, element, attrs, controllers) { |
87 | | - var controller=controllers[1]; |
88 | | - var accordionCtrl=controllers[0]; |
89 | 8 |
|
90 | | - var accordion=angular.extend(defaultOptions(),scope.$eval(attrs.options)) |
91 | | - $q.all([controller.getHeaderElement(),controller.getBodyElement()]).then(function(results){ |
92 | | - accordion.header=results[0]; |
93 | | - accordion.body=results[1]; |
94 | | - accordion.body.hide(); |
95 | | - accordion.header.on('click',function(){ |
96 | | - accordionCtrl.toggleState(accordion); |
97 | | - }); |
98 | | - accordionCtrl.addGroup(accordion); |
99 | | - }) |
| 9 | + var _index = prop.indexOf('.') |
| 10 | + if(_index > -1) { |
| 11 | + return fetchFromObject(obj[prop.substring(0, _index)], prop.substr(_index + 1)); |
| 12 | + } |
100 | 13 |
|
101 | | - } |
102 | | - }; |
103 | | - }) |
104 | | - .directive('ngAccordionHeading', function() { |
105 | | - return { |
106 | | - require:'^ngAccordionGroup', |
107 | | - restrict: 'EA', |
108 | | - link: function(scope, element, attrs, accordionCtrl) { |
109 | | - accordionCtrl.setHeaderElement(element); |
110 | | - } |
111 | | - }; |
112 | | - }) |
113 | | - .directive('ngAccordionBody', function() { |
114 | | - return { |
115 | | - require:'^ngAccordionGroup', |
116 | | - restrict: 'EA', |
117 | | - link: function(scope, element, attrs, accordionCtrl) { |
118 | | - accordionCtrl.setBodyElement(element); |
119 | | - } |
120 | | - }; |
121 | | - }) |
122 | | -})() |
| 14 | + return obj[prop]; |
| 15 | +} |
123 | 16 |
|
0 commit comments