rails-angularstrap 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +89 -0
  3. data/Rakefile +2 -0
  4. data/lib/rails/angularstrap.rb +8 -0
  5. data/lib/rails/angularstrap/version.rb +5 -0
  6. data/vendor/assets/javascripts/angular-strap/LICENSE.md +21 -0
  7. data/vendor/assets/javascripts/angular-strap/README.md +112 -0
  8. data/vendor/assets/javascripts/angular-strap/angular-strap.nuspec +23 -0
  9. data/vendor/assets/javascripts/angular-strap/bower.json +53 -0
  10. data/vendor/assets/javascripts/angular-strap/dist/angular-strap.js +5014 -0
  11. data/vendor/assets/javascripts/angular-strap/dist/angular-strap.min.js +11 -0
  12. data/vendor/assets/javascripts/angular-strap/dist/angular-strap.min.js.map +1 -0
  13. data/vendor/assets/javascripts/angular-strap/dist/angular-strap.tpl.js +89 -0
  14. data/vendor/assets/javascripts/angular-strap/dist/angular-strap.tpl.min.js +8 -0
  15. data/vendor/assets/javascripts/angular-strap/dist/modules/affix.js +249 -0
  16. data/vendor/assets/javascripts/angular-strap/dist/modules/affix.min.js +9 -0
  17. data/vendor/assets/javascripts/angular-strap/dist/modules/affix.min.js.map +1 -0
  18. data/vendor/assets/javascripts/angular-strap/dist/modules/alert.js +120 -0
  19. data/vendor/assets/javascripts/angular-strap/dist/modules/alert.min.js +9 -0
  20. data/vendor/assets/javascripts/angular-strap/dist/modules/alert.min.js.map +1 -0
  21. data/vendor/assets/javascripts/angular-strap/dist/modules/alert.tpl.js +14 -0
  22. data/vendor/assets/javascripts/angular-strap/dist/modules/alert.tpl.min.js +8 -0
  23. data/vendor/assets/javascripts/angular-strap/dist/modules/aside.js +96 -0
  24. data/vendor/assets/javascripts/angular-strap/dist/modules/aside.min.js +9 -0
  25. data/vendor/assets/javascripts/angular-strap/dist/modules/aside.min.js.map +1 -0
  26. data/vendor/assets/javascripts/angular-strap/dist/modules/aside.tpl.js +14 -0
  27. data/vendor/assets/javascripts/angular-strap/dist/modules/aside.tpl.min.js +8 -0
  28. data/vendor/assets/javascripts/angular-strap/dist/modules/button.js +177 -0
  29. data/vendor/assets/javascripts/angular-strap/dist/modules/button.min.js +9 -0
  30. data/vendor/assets/javascripts/angular-strap/dist/modules/button.min.js.map +1 -0
  31. data/vendor/assets/javascripts/angular-strap/dist/modules/collapse.js +273 -0
  32. data/vendor/assets/javascripts/angular-strap/dist/modules/collapse.min.js +9 -0
  33. data/vendor/assets/javascripts/angular-strap/dist/modules/collapse.min.js.map +1 -0
  34. data/vendor/assets/javascripts/angular-strap/dist/modules/date-formatter.js +61 -0
  35. data/vendor/assets/javascripts/angular-strap/dist/modules/date-formatter.min.js +9 -0
  36. data/vendor/assets/javascripts/angular-strap/dist/modules/date-formatter.min.js.map +1 -0
  37. data/vendor/assets/javascripts/angular-strap/dist/modules/date-parser.js +273 -0
  38. data/vendor/assets/javascripts/angular-strap/dist/modules/date-parser.min.js +9 -0
  39. data/vendor/assets/javascripts/angular-strap/dist/modules/date-parser.min.js.map +1 -0
  40. data/vendor/assets/javascripts/angular-strap/dist/modules/datepicker.js +640 -0
  41. data/vendor/assets/javascripts/angular-strap/dist/modules/datepicker.min.js +9 -0
  42. data/vendor/assets/javascripts/angular-strap/dist/modules/datepicker.min.js.map +1 -0
  43. data/vendor/assets/javascripts/angular-strap/dist/modules/datepicker.tpl.js +14 -0
  44. data/vendor/assets/javascripts/angular-strap/dist/modules/datepicker.tpl.min.js +8 -0
  45. data/vendor/assets/javascripts/angular-strap/dist/modules/debounce.js +62 -0
  46. data/vendor/assets/javascripts/angular-strap/dist/modules/debounce.min.js +9 -0
  47. data/vendor/assets/javascripts/angular-strap/dist/modules/debounce.min.js.map +1 -0
  48. data/vendor/assets/javascripts/angular-strap/dist/modules/dimensions.js +156 -0
  49. data/vendor/assets/javascripts/angular-strap/dist/modules/dimensions.min.js +9 -0
  50. data/vendor/assets/javascripts/angular-strap/dist/modules/dimensions.min.js.map +1 -0
  51. data/vendor/assets/javascripts/angular-strap/dist/modules/dropdown.js +149 -0
  52. data/vendor/assets/javascripts/angular-strap/dist/modules/dropdown.min.js +9 -0
  53. data/vendor/assets/javascripts/angular-strap/dist/modules/dropdown.min.js.map +1 -0
  54. data/vendor/assets/javascripts/angular-strap/dist/modules/dropdown.tpl.js +14 -0
  55. data/vendor/assets/javascripts/angular-strap/dist/modules/dropdown.tpl.min.js +8 -0
  56. data/vendor/assets/javascripts/angular-strap/dist/modules/modal.js +349 -0
  57. data/vendor/assets/javascripts/angular-strap/dist/modules/modal.min.js +9 -0
  58. data/vendor/assets/javascripts/angular-strap/dist/modules/modal.min.js.map +1 -0
  59. data/vendor/assets/javascripts/angular-strap/dist/modules/modal.tpl.js +14 -0
  60. data/vendor/assets/javascripts/angular-strap/dist/modules/modal.tpl.min.js +8 -0
  61. data/vendor/assets/javascripts/angular-strap/dist/modules/navbar.js +72 -0
  62. data/vendor/assets/javascripts/angular-strap/dist/modules/navbar.min.js +9 -0
  63. data/vendor/assets/javascripts/angular-strap/dist/modules/navbar.min.js.map +1 -0
  64. data/vendor/assets/javascripts/angular-strap/dist/modules/parse-options.js +76 -0
  65. data/vendor/assets/javascripts/angular-strap/dist/modules/parse-options.min.js +9 -0
  66. data/vendor/assets/javascripts/angular-strap/dist/modules/parse-options.min.js.map +1 -0
  67. data/vendor/assets/javascripts/angular-strap/dist/modules/popover.js +112 -0
  68. data/vendor/assets/javascripts/angular-strap/dist/modules/popover.min.js +9 -0
  69. data/vendor/assets/javascripts/angular-strap/dist/modules/popover.min.js.map +1 -0
  70. data/vendor/assets/javascripts/angular-strap/dist/modules/popover.tpl.js +14 -0
  71. data/vendor/assets/javascripts/angular-strap/dist/modules/popover.tpl.min.js +8 -0
  72. data/vendor/assets/javascripts/angular-strap/dist/modules/raf.js +61 -0
  73. data/vendor/assets/javascripts/angular-strap/dist/modules/raf.min.js +9 -0
  74. data/vendor/assets/javascripts/angular-strap/dist/modules/raf.min.js.map +1 -0
  75. data/vendor/assets/javascripts/angular-strap/dist/modules/scrollspy.js +261 -0
  76. data/vendor/assets/javascripts/angular-strap/dist/modules/scrollspy.min.js +9 -0
  77. data/vendor/assets/javascripts/angular-strap/dist/modules/scrollspy.min.js.map +1 -0
  78. data/vendor/assets/javascripts/angular-strap/dist/modules/select.js +325 -0
  79. data/vendor/assets/javascripts/angular-strap/dist/modules/select.min.js +9 -0
  80. data/vendor/assets/javascripts/angular-strap/dist/modules/select.min.js.map +1 -0
  81. data/vendor/assets/javascripts/angular-strap/dist/modules/select.tpl.js +14 -0
  82. data/vendor/assets/javascripts/angular-strap/dist/modules/select.tpl.min.js +8 -0
  83. data/vendor/assets/javascripts/angular-strap/dist/modules/tab.js +186 -0
  84. data/vendor/assets/javascripts/angular-strap/dist/modules/tab.min.js +9 -0
  85. data/vendor/assets/javascripts/angular-strap/dist/modules/tab.min.js.map +1 -0
  86. data/vendor/assets/javascripts/angular-strap/dist/modules/tab.tpl.js +14 -0
  87. data/vendor/assets/javascripts/angular-strap/dist/modules/tab.tpl.min.js +8 -0
  88. data/vendor/assets/javascripts/angular-strap/dist/modules/timepicker.js +485 -0
  89. data/vendor/assets/javascripts/angular-strap/dist/modules/timepicker.min.js +9 -0
  90. data/vendor/assets/javascripts/angular-strap/dist/modules/timepicker.min.js.map +1 -0
  91. data/vendor/assets/javascripts/angular-strap/dist/modules/timepicker.tpl.js +14 -0
  92. data/vendor/assets/javascripts/angular-strap/dist/modules/timepicker.tpl.min.js +8 -0
  93. data/vendor/assets/javascripts/angular-strap/dist/modules/tooltip.js +690 -0
  94. data/vendor/assets/javascripts/angular-strap/dist/modules/tooltip.min.js +9 -0
  95. data/vendor/assets/javascripts/angular-strap/dist/modules/tooltip.min.js.map +1 -0
  96. data/vendor/assets/javascripts/angular-strap/dist/modules/tooltip.tpl.js +14 -0
  97. data/vendor/assets/javascripts/angular-strap/dist/modules/tooltip.tpl.min.js +8 -0
  98. data/vendor/assets/javascripts/angular-strap/dist/modules/typeahead.js +266 -0
  99. data/vendor/assets/javascripts/angular-strap/dist/modules/typeahead.min.js +9 -0
  100. data/vendor/assets/javascripts/angular-strap/dist/modules/typeahead.min.js.map +1 -0
  101. data/vendor/assets/javascripts/angular-strap/dist/modules/typeahead.tpl.js +14 -0
  102. data/vendor/assets/javascripts/angular-strap/dist/modules/typeahead.tpl.min.js +8 -0
  103. data/vendor/assets/javascripts/angular-strap/gulpfile.js +489 -0
  104. data/vendor/assets/javascripts/angular-strap/package.json +73 -0
  105. data/vendor/assets/javascripts/angular-strap/src/affix/affix.js +258 -0
  106. data/vendor/assets/javascripts/angular-strap/src/alert/alert.js +113 -0
  107. data/vendor/assets/javascripts/angular-strap/src/alert/alert.tpl.html +4 -0
  108. data/vendor/assets/javascripts/angular-strap/src/aside/aside.js +89 -0
  109. data/vendor/assets/javascripts/angular-strap/src/aside/aside.tpl.html +14 -0
  110. data/vendor/assets/javascripts/angular-strap/src/button/button.js +174 -0
  111. data/vendor/assets/javascripts/angular-strap/src/collapse/collapse.js +266 -0
  112. data/vendor/assets/javascripts/angular-strap/src/datepicker/datepicker.js +633 -0
  113. data/vendor/assets/javascripts/angular-strap/src/datepicker/datepicker.tpl.html +33 -0
  114. data/vendor/assets/javascripts/angular-strap/src/dropdown/dropdown.js +143 -0
  115. data/vendor/assets/javascripts/angular-strap/src/dropdown/dropdown.tpl.html +6 -0
  116. data/vendor/assets/javascripts/angular-strap/src/helpers/date-formatter.js +54 -0
  117. data/vendor/assets/javascripts/angular-strap/src/helpers/date-parser.js +266 -0
  118. data/vendor/assets/javascripts/angular-strap/src/helpers/debounce.js +55 -0
  119. data/vendor/assets/javascripts/angular-strap/src/helpers/dimensions.js +212 -0
  120. data/vendor/assets/javascripts/angular-strap/src/helpers/parse-options.js +69 -0
  121. data/vendor/assets/javascripts/angular-strap/src/helpers/raf.js +54 -0
  122. data/vendor/assets/javascripts/angular-strap/src/modal/modal.js +348 -0
  123. data/vendor/assets/javascripts/angular-strap/src/modal/modal.tpl.html +14 -0
  124. data/vendor/assets/javascripts/angular-strap/src/module.js +19 -0
  125. data/vendor/assets/javascripts/angular-strap/src/navbar/navbar.js +65 -0
  126. data/vendor/assets/javascripts/angular-strap/src/popover/popover.js +111 -0
  127. data/vendor/assets/javascripts/angular-strap/src/popover/popover.tpl.html +5 -0
  128. data/vendor/assets/javascripts/angular-strap/src/scrollspy/scrollspy.js +254 -0
  129. data/vendor/assets/javascripts/angular-strap/src/select/select.js +321 -0
  130. data/vendor/assets/javascripts/angular-strap/src/select/select.tpl.html +14 -0
  131. data/vendor/assets/javascripts/angular-strap/src/tab/tab.js +183 -0
  132. data/vendor/assets/javascripts/angular-strap/src/tab/tab.tpl.html +7 -0
  133. data/vendor/assets/javascripts/angular-strap/src/timepicker/timepicker.js +493 -0
  134. data/vendor/assets/javascripts/angular-strap/src/timepicker/timepicker.tpl.html +62 -0
  135. data/vendor/assets/javascripts/angular-strap/src/tooltip/tooltip.js +806 -0
  136. data/vendor/assets/javascripts/angular-strap/src/tooltip/tooltip.tpl.html +4 -0
  137. data/vendor/assets/javascripts/angular-strap/src/typeahead/typeahead.js +262 -0
  138. data/vendor/assets/javascripts/angular-strap/src/typeahead/typeahead.tpl.html +5 -0
  139. data/vendor/assets/javascripts/angular/README.md +64 -0
  140. data/vendor/assets/javascripts/angular/angular-csp.css +13 -0
  141. data/vendor/assets/javascripts/angular/angular.js +26181 -0
  142. data/vendor/assets/javascripts/angular/angular.min.js +250 -0
  143. data/vendor/assets/javascripts/angular/angular.min.js.gzip +0 -0
  144. data/vendor/assets/javascripts/angular/angular.min.js.map +8 -0
  145. data/vendor/assets/javascripts/angular/bower.json +8 -0
  146. data/vendor/assets/javascripts/angular/index.js +2 -0
  147. data/vendor/assets/javascripts/angular/package.json +25 -0
  148. metadata +237 -0
@@ -0,0 +1,9 @@
1
+ /**
2
+ * angular-strap
3
+ * @version v2.1.6 - 2015-01-11
4
+ * @link http://mgcrea.github.io/angular-strap
5
+ * @author Olivier Louvignes (olivier@mg-crea.com)
6
+ * @license MIT License, http://www.opensource.org/licenses/MIT
7
+ */
8
+ "use strict";angular.module("mgcrea.ngStrap.alert",["mgcrea.ngStrap.modal"]).provider("$alert",function(){var t=this.defaults={animation:"am-fade",prefixClass:"alert",prefixEvent:"alert",placement:null,template:"alert/alert.tpl.html",container:!1,element:null,backdrop:!1,keyboard:!0,show:!0,duration:!1,type:!1,dismissable:!0};this.$get=["$modal","$timeout",function(e,n){function a(a){var r={},i=angular.extend({},t,a);r=e(i),r.$scope.dismissable=!!i.dismissable,i.type&&(r.$scope.type=i.type);var o=r.show;return i.duration&&(r.show=function(){o(),n(function(){r.hide()},1e3*i.duration)}),r}return a}]}).directive("bsAlert",["$window","$sce","$alert",function(t,e,n){t.requestAnimationFrame||t.setTimeout;return{restrict:"EAC",scope:!0,link:function(t,a,r){var i={scope:t,element:a,show:!1};angular.forEach(["template","placement","keyboard","html","container","animation","duration","dismissable"],function(t){angular.isDefined(r[t])&&(i[t]=r[t])}),angular.forEach(["title","content","type"],function(n){r[n]&&r.$observe(n,function(a){t[n]=e.trustAsHtml(a)})}),r.bsAlert&&t.$watch(r.bsAlert,function(e){angular.isObject(e)?angular.extend(t,e):t.content=e},!0);var o=n(i);a.on(r.trigger||"click",o.toggle),t.$on("$destroy",function(){o&&o.destroy(),i=null,o=null})}}}]);
9
+ //# sourceMappingURL=alert.min.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["alert/alert.js"],"names":[],"mappings":"qBAaM,OAAA,wBAAa,kCAEb,SAAU,cAEV,GAAS,KAAA,UACT,UAAU,UACV,YAAU,QACV,YAAM,uBAEN,SAAU,uBACV,WAAM,EACN,QAAA,6BAGF,MAAK,EAEH,UAAS,uBAEH,QAGJ,MAAI,SAAU,WAAe,SAAI,EAAU,WAE3C,GAAgB,YAKd,EAAO,QAAO,UAAe,EAAA,UAK/B,EAAG,OAAQ,cAAU,EAAA,YACnB,EAAO,SACL,OAAA,KAAA,EAAA,yDAOJ,sEAiBI,WAAS,UAAS,OAAO,SAAe,SAAA,EAAc,EAAA,yDAKrD,uCAKH,IAAa,MAAK,EAAS,QAAK,EAAS,MAAU,WACjD,SAAa,WAAK,YAAY,WAAA,OAAA,YAAA,YAAA,WAAA,eAAA,SAAA,0CAKlC,QAAK,SAAW,QAAM,UAAY,QAAS,SAAS,GAClD,EAAG,IAAQ,EAAA,SAAS,EAAW,SAAA,GAC7B,EAAA,GAAQ,EAAO,YAAO,qEAOtB,QAAQ,OAAO,EAAA,uBAOjB,GAAI,EAAa,gFAQtB,EAAA","file":"alert.min.js","sourcesContent":["'use strict';\n\n// @BUG: following snippet won't compile correctly\n// @TODO: submit issue to core\n// '<span ng-if=\"title\"><strong ng-bind=\"title\"></strong>&nbsp;</span><span ng-bind-html=\"content\"></span>' +\n\nangular.module('mgcrea.ngStrap.alert', ['mgcrea.ngStrap.modal'])\n\n .provider('$alert', function() {\n\n var defaults = this.defaults = {\n animation: 'am-fade',\n prefixClass: 'alert',\n prefixEvent: 'alert',\n placement: null,\n template: 'alert/alert.tpl.html',\n container: false,\n element: null,\n backdrop: false,\n keyboard: true,\n show: true,\n // Specific options\n duration: false,\n type: false,\n dismissable: true\n };\n\n this.$get = function($modal, $timeout) {\n\n function AlertFactory(config) {\n\n var $alert = {};\n\n // Common vars\n var options = angular.extend({}, defaults, config);\n\n $alert = $modal(options);\n\n // Support scope as string options [/*title, content, */ type, dismissable]\n $alert.$scope.dismissable = !!options.dismissable;\n if(options.type) {\n $alert.$scope.type = options.type;\n }\n\n // Support auto-close duration\n var show = $alert.show;\n if(options.duration) {\n $alert.show = function() {\n show();\n $timeout(function() {\n $alert.hide();\n }, options.duration * 1000);\n };\n }\n\n return $alert;\n\n }\n\n return AlertFactory;\n\n };\n\n })\n\n .directive('bsAlert', function($window, $sce, $alert) {\n\n var requestAnimationFrame = $window.requestAnimationFrame || $window.setTimeout;\n\n return {\n restrict: 'EAC',\n scope: true,\n link: function postLink(scope, element, attr, transclusion) {\n\n // Directive options\n var options = {scope: scope, element: element, show: false};\n angular.forEach(['template', 'placement', 'keyboard', 'html', 'container', 'animation', 'duration', 'dismissable'], function(key) {\n if(angular.isDefined(attr[key])) options[key] = attr[key];\n });\n\n // Support scope as data-attrs\n angular.forEach(['title', 'content', 'type'], function(key) {\n attr[key] && attr.$observe(key, function(newValue, oldValue) {\n scope[key] = $sce.trustAsHtml(newValue);\n });\n });\n\n // Support scope as an object\n attr.bsAlert && scope.$watch(attr.bsAlert, function(newValue, oldValue) {\n if(angular.isObject(newValue)) {\n angular.extend(scope, newValue);\n } else {\n scope.content = newValue;\n }\n }, true);\n\n // Initialize alert\n var alert = $alert(options);\n\n // Trigger\n element.on(attr.trigger || 'click', alert.toggle);\n\n // Garbage collection\n scope.$on('$destroy', function() {\n if (alert) alert.destroy();\n options = null;\n alert = null;\n });\n\n }\n };\n\n });\n"],"sourceRoot":"/source/"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * angular-strap
3
+ * @version v2.1.6 - 2015-01-11
4
+ * @link http://mgcrea.github.io/angular-strap
5
+ * @author Olivier Louvignes (olivier@mg-crea.com)
6
+ * @license MIT License, http://www.opensource.org/licenses/MIT
7
+ */
8
+ 'use strict';
9
+
10
+ angular.module('mgcrea.ngStrap.alert').run(['$templateCache', function($templateCache) {
11
+
12
+ $templateCache.put('alert/alert.tpl.html', '<div class="alert" ng-class="[type ? \'alert-\' + type : null]"><button type="button" class="close" ng-if="dismissable" ng-click="$hide()">&times;</button> <strong ng-bind="title"></strong>&nbsp;<span ng-bind-html="content"></span></div>');
13
+
14
+ }]);
@@ -0,0 +1,8 @@
1
+ /**
2
+ * angular-strap
3
+ * @version v2.1.6 - 2015-01-11
4
+ * @link http://mgcrea.github.io/angular-strap
5
+ * @author Olivier Louvignes (olivier@mg-crea.com)
6
+ * @license MIT License, http://www.opensource.org/licenses/MIT
7
+ */
8
+ "use strict";angular.module("mgcrea.ngStrap.alert").run(["$templateCache",function(t){t.put("alert/alert.tpl.html",'<div class="alert" ng-class="[type ? \'alert-\' + type : null]"><button type="button" class="close" ng-if="dismissable" ng-click="$hide()">&times;</button> <strong ng-bind="title"></strong>&nbsp;<span ng-bind-html="content"></span></div>')}]);
@@ -0,0 +1,96 @@
1
+ /**
2
+ * angular-strap
3
+ * @version v2.1.6 - 2015-01-11
4
+ * @link http://mgcrea.github.io/angular-strap
5
+ * @author Olivier Louvignes (olivier@mg-crea.com)
6
+ * @license MIT License, http://www.opensource.org/licenses/MIT
7
+ */
8
+ 'use strict';
9
+
10
+ angular.module('mgcrea.ngStrap.aside', ['mgcrea.ngStrap.modal'])
11
+
12
+ .provider('$aside', function() {
13
+
14
+ var defaults = this.defaults = {
15
+ animation: 'am-fade-and-slide-right',
16
+ prefixClass: 'aside',
17
+ prefixEvent: 'aside',
18
+ placement: 'right',
19
+ template: 'aside/aside.tpl.html',
20
+ contentTemplate: false,
21
+ container: false,
22
+ element: null,
23
+ backdrop: true,
24
+ keyboard: true,
25
+ html: false,
26
+ show: true
27
+ };
28
+
29
+ this.$get = ["$modal", function($modal) {
30
+
31
+ function AsideFactory(config) {
32
+
33
+ var $aside = {};
34
+
35
+ // Common vars
36
+ var options = angular.extend({}, defaults, config);
37
+
38
+ $aside = $modal(options);
39
+
40
+ return $aside;
41
+
42
+ }
43
+
44
+ return AsideFactory;
45
+
46
+ }];
47
+
48
+ })
49
+
50
+ .directive('bsAside', ["$window", "$sce", "$aside", function($window, $sce, $aside) {
51
+
52
+ var requestAnimationFrame = $window.requestAnimationFrame || $window.setTimeout;
53
+
54
+ return {
55
+ restrict: 'EAC',
56
+ scope: true,
57
+ link: function postLink(scope, element, attr, transclusion) {
58
+ // Directive options
59
+ var options = {scope: scope, element: element, show: false};
60
+ angular.forEach(['template', 'contentTemplate', 'placement', 'backdrop', 'keyboard', 'html', 'container', 'animation'], function(key) {
61
+ if(angular.isDefined(attr[key])) options[key] = attr[key];
62
+ });
63
+
64
+ // Support scope as data-attrs
65
+ angular.forEach(['title', 'content'], function(key) {
66
+ attr[key] && attr.$observe(key, function(newValue, oldValue) {
67
+ scope[key] = $sce.trustAsHtml(newValue);
68
+ });
69
+ });
70
+
71
+ // Support scope as an object
72
+ attr.bsAside && scope.$watch(attr.bsAside, function(newValue, oldValue) {
73
+ if(angular.isObject(newValue)) {
74
+ angular.extend(scope, newValue);
75
+ } else {
76
+ scope.content = newValue;
77
+ }
78
+ }, true);
79
+
80
+ // Initialize aside
81
+ var aside = $aside(options);
82
+
83
+ // Trigger
84
+ element.on(attr.trigger || 'click', aside.toggle);
85
+
86
+ // Garbage collection
87
+ scope.$on('$destroy', function() {
88
+ if (aside) aside.destroy();
89
+ options = null;
90
+ aside = null;
91
+ });
92
+
93
+ }
94
+ };
95
+
96
+ }]);
@@ -0,0 +1,9 @@
1
+ /**
2
+ * angular-strap
3
+ * @version v2.1.6 - 2015-01-11
4
+ * @link http://mgcrea.github.io/angular-strap
5
+ * @author Olivier Louvignes (olivier@mg-crea.com)
6
+ * @license MIT License, http://www.opensource.org/licenses/MIT
7
+ */
8
+ "use strict";angular.module("mgcrea.ngStrap.aside",["mgcrea.ngStrap.modal"]).provider("$aside",function(){var e=this.defaults={animation:"am-fade-and-slide-right",prefixClass:"aside",prefixEvent:"aside",placement:"right",template:"aside/aside.tpl.html",contentTemplate:!1,container:!1,element:null,backdrop:!0,keyboard:!0,html:!1,show:!0};this.$get=["$modal",function(t){function n(n){var a={},i=angular.extend({},e,n);return a=t(i)}return n}]}).directive("bsAside",["$window","$sce","$aside",function(e,t,n){e.requestAnimationFrame||e.setTimeout;return{restrict:"EAC",scope:!0,link:function(e,a,i){var r={scope:e,element:a,show:!1};angular.forEach(["template","contentTemplate","placement","backdrop","keyboard","html","container","animation"],function(e){angular.isDefined(i[e])&&(r[e]=i[e])}),angular.forEach(["title","content"],function(n){i[n]&&i.$observe(n,function(a){e[n]=t.trustAsHtml(a)})}),i.bsAside&&e.$watch(i.bsAside,function(t){angular.isObject(t)?angular.extend(e,t):e.content=t},!0);var o=n(r);a.on(i.trigger||"click",o.toggle),e.$on("$destroy",function(){o&&o.destroy(),r=null,o=null})}}}]);
9
+ //# sourceMappingURL=aside.min.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["aside/aside.js"],"names":[],"mappings":"qBASM,OAAA,wBAAa,kCAEb,SAAU,cAEV,GAAW,KAAA,UACX,UAAS,0BACT,YAAU,QACV,YAAU,QACV,UAAM,QACN,SAAM,uDAGR,QAAK,iBAEH,UAAS,gBAEH,QAGJ,MAAI,SAAU,SAAQ,WAEtB,GAAgB,GAEhB,GAAA,oEAiBI,WAAS,UAAS,OAAO,SAAe,SAAA,EAAc,EAAA,GAEpC,EAAO,uBAAwB,EAAA,kEAOnD,IAAa,MAAK,EAAS,QAAK,EAAS,MAAU,WACjD,SAAa,WAAK,kBAAY,YAAA,WAAA,WAAA,OAAA,YAAA,aAAA,SAAA,0CAKlC,QAAK,SAAW,QAAM,WAAY,SAAS,GACzC,EAAG,IAAQ,EAAA,SAAS,EAAW,SAAA,GAC7B,EAAA,GAAQ,EAAO,YAAO,qEAOtB,QAAQ,OAAO,EAAA,uBAOjB,GAAI,EAAa,gFAQtB,EAAA","file":"aside.min.js","sourcesContent":["'use strict';\n\nangular.module('mgcrea.ngStrap.aside', ['mgcrea.ngStrap.modal'])\n\n .provider('$aside', function() {\n\n var defaults = this.defaults = {\n animation: 'am-fade-and-slide-right',\n prefixClass: 'aside',\n prefixEvent: 'aside',\n placement: 'right',\n template: 'aside/aside.tpl.html',\n contentTemplate: false,\n container: false,\n element: null,\n backdrop: true,\n keyboard: true,\n html: false,\n show: true\n };\n\n this.$get = function($modal) {\n\n function AsideFactory(config) {\n\n var $aside = {};\n\n // Common vars\n var options = angular.extend({}, defaults, config);\n\n $aside = $modal(options);\n\n return $aside;\n\n }\n\n return AsideFactory;\n\n };\n\n })\n\n .directive('bsAside', function($window, $sce, $aside) {\n\n var requestAnimationFrame = $window.requestAnimationFrame || $window.setTimeout;\n\n return {\n restrict: 'EAC',\n scope: true,\n link: function postLink(scope, element, attr, transclusion) {\n // Directive options\n var options = {scope: scope, element: element, show: false};\n angular.forEach(['template', 'contentTemplate', 'placement', 'backdrop', 'keyboard', 'html', 'container', 'animation'], function(key) {\n if(angular.isDefined(attr[key])) options[key] = attr[key];\n });\n\n // Support scope as data-attrs\n angular.forEach(['title', 'content'], function(key) {\n attr[key] && attr.$observe(key, function(newValue, oldValue) {\n scope[key] = $sce.trustAsHtml(newValue);\n });\n });\n\n // Support scope as an object\n attr.bsAside && scope.$watch(attr.bsAside, function(newValue, oldValue) {\n if(angular.isObject(newValue)) {\n angular.extend(scope, newValue);\n } else {\n scope.content = newValue;\n }\n }, true);\n\n // Initialize aside\n var aside = $aside(options);\n\n // Trigger\n element.on(attr.trigger || 'click', aside.toggle);\n\n // Garbage collection\n scope.$on('$destroy', function() {\n if (aside) aside.destroy();\n options = null;\n aside = null;\n });\n\n }\n };\n\n });\n"],"sourceRoot":"/source/"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * angular-strap
3
+ * @version v2.1.6 - 2015-01-11
4
+ * @link http://mgcrea.github.io/angular-strap
5
+ * @author Olivier Louvignes (olivier@mg-crea.com)
6
+ * @license MIT License, http://www.opensource.org/licenses/MIT
7
+ */
8
+ 'use strict';
9
+
10
+ angular.module('mgcrea.ngStrap.aside').run(['$templateCache', function($templateCache) {
11
+
12
+ $templateCache.put('aside/aside.tpl.html', '<div class="aside" tabindex="-1" role="dialog"><div class="aside-dialog"><div class="aside-content"><div class="aside-header" ng-show="title"><button type="button" class="close" ng-click="$hide()">&times;</button><h4 class="aside-title" ng-bind="title"></h4></div><div class="aside-body" ng-bind="content"></div><div class="aside-footer"><button type="button" class="btn btn-default" ng-click="$hide()">Close</button></div></div></div></div>');
13
+
14
+ }]);
@@ -0,0 +1,8 @@
1
+ /**
2
+ * angular-strap
3
+ * @version v2.1.6 - 2015-01-11
4
+ * @link http://mgcrea.github.io/angular-strap
5
+ * @author Olivier Louvignes (olivier@mg-crea.com)
6
+ * @license MIT License, http://www.opensource.org/licenses/MIT
7
+ */
8
+ "use strict";angular.module("mgcrea.ngStrap.aside").run(["$templateCache",function(t){t.put("aside/aside.tpl.html",'<div class="aside" tabindex="-1" role="dialog"><div class="aside-dialog"><div class="aside-content"><div class="aside-header" ng-show="title"><button type="button" class="close" ng-click="$hide()">&times;</button><h4 class="aside-title" ng-bind="title"></h4></div><div class="aside-body" ng-bind="content"></div><div class="aside-footer"><button type="button" class="btn btn-default" ng-click="$hide()">Close</button></div></div></div></div>')}]);
@@ -0,0 +1,177 @@
1
+ /**
2
+ * angular-strap
3
+ * @version v2.1.6 - 2015-01-11
4
+ * @link http://mgcrea.github.io/angular-strap
5
+ * @author Olivier Louvignes (olivier@mg-crea.com)
6
+ * @license MIT License, http://www.opensource.org/licenses/MIT
7
+ */
8
+ 'use strict';
9
+
10
+ angular.module('mgcrea.ngStrap.button', [])
11
+
12
+ .provider('$button', function() {
13
+
14
+ var defaults = this.defaults = {
15
+ activeClass:'active',
16
+ toggleEvent:'click'
17
+ };
18
+
19
+ this.$get = function() {
20
+ return {defaults: defaults};
21
+ };
22
+
23
+ })
24
+
25
+ .directive('bsCheckboxGroup', function() {
26
+
27
+ return {
28
+ restrict: 'A',
29
+ require: 'ngModel',
30
+ compile: function postLink(element, attr) {
31
+ element.attr('data-toggle', 'buttons');
32
+ element.removeAttr('ng-model');
33
+ var children = element[0].querySelectorAll('input[type="checkbox"]');
34
+ angular.forEach(children, function(child) {
35
+ var childEl = angular.element(child);
36
+ childEl.attr('bs-checkbox', '');
37
+ childEl.attr('ng-model', attr.ngModel + '.' + childEl.attr('value'));
38
+ });
39
+ }
40
+
41
+ };
42
+
43
+ })
44
+
45
+ .directive('bsCheckbox', ["$button", "$$rAF", function($button, $$rAF) {
46
+
47
+ var defaults = $button.defaults;
48
+ var constantValueRegExp = /^(true|false|\d+)$/;
49
+
50
+ return {
51
+ restrict: 'A',
52
+ require: 'ngModel',
53
+ link: function postLink(scope, element, attr, controller) {
54
+
55
+ var options = defaults;
56
+
57
+ // Support label > input[type="checkbox"]
58
+ var isInput = element[0].nodeName === 'INPUT';
59
+ var activeElement = isInput ? element.parent() : element;
60
+
61
+ var trueValue = angular.isDefined(attr.trueValue) ? attr.trueValue : true;
62
+ if(constantValueRegExp.test(attr.trueValue)) {
63
+ trueValue = scope.$eval(attr.trueValue);
64
+ }
65
+ var falseValue = angular.isDefined(attr.falseValue) ? attr.falseValue : false;
66
+ if(constantValueRegExp.test(attr.falseValue)) {
67
+ falseValue = scope.$eval(attr.falseValue);
68
+ }
69
+
70
+ // Parse exotic values
71
+ var hasExoticValues = typeof trueValue !== 'boolean' || typeof falseValue !== 'boolean';
72
+ if(hasExoticValues) {
73
+ controller.$parsers.push(function(viewValue) {
74
+ // console.warn('$parser', element.attr('ng-model'), 'viewValue', viewValue);
75
+ return viewValue ? trueValue : falseValue;
76
+ });
77
+ // modelValue -> $formatters -> viewValue
78
+ controller.$formatters.push(function(modelValue) {
79
+ // console.warn('$formatter("%s"): modelValue=%o (%o)', element.attr('ng-model'), modelValue, typeof modelValue);
80
+ return angular.equals(modelValue, trueValue);
81
+ });
82
+ // Fix rendering for exotic values
83
+ scope.$watch(attr.ngModel, function(newValue, oldValue) {
84
+ controller.$render();
85
+ });
86
+ }
87
+
88
+ // model -> view
89
+ controller.$render = function () {
90
+ // console.warn('$render', element.attr('ng-model'), 'controller.$modelValue', typeof controller.$modelValue, controller.$modelValue, 'controller.$viewValue', typeof controller.$viewValue, controller.$viewValue);
91
+ var isActive = angular.equals(controller.$modelValue, trueValue);
92
+ $$rAF(function() {
93
+ if(isInput) element[0].checked = isActive;
94
+ activeElement.toggleClass(options.activeClass, isActive);
95
+ });
96
+ };
97
+
98
+ // view -> model
99
+ element.bind(options.toggleEvent, function() {
100
+ scope.$apply(function () {
101
+ // console.warn('!click', element.attr('ng-model'), 'controller.$viewValue', typeof controller.$viewValue, controller.$viewValue, 'controller.$modelValue', typeof controller.$modelValue, controller.$modelValue);
102
+ if(!isInput) {
103
+ controller.$setViewValue(!activeElement.hasClass('active'));
104
+ }
105
+ if(!hasExoticValues) {
106
+ controller.$render();
107
+ }
108
+ });
109
+ });
110
+
111
+ }
112
+
113
+ };
114
+
115
+ }])
116
+
117
+ .directive('bsRadioGroup', function() {
118
+
119
+ return {
120
+ restrict: 'A',
121
+ require: 'ngModel',
122
+ compile: function postLink(element, attr) {
123
+ element.attr('data-toggle', 'buttons');
124
+ element.removeAttr('ng-model');
125
+ var children = element[0].querySelectorAll('input[type="radio"]');
126
+ angular.forEach(children, function(child) {
127
+ angular.element(child).attr('bs-radio', '');
128
+ angular.element(child).attr('ng-model', attr.ngModel);
129
+ });
130
+ }
131
+
132
+ };
133
+
134
+ })
135
+
136
+ .directive('bsRadio', ["$button", "$$rAF", function($button, $$rAF) {
137
+
138
+ var defaults = $button.defaults;
139
+ var constantValueRegExp = /^(true|false|\d+)$/;
140
+
141
+ return {
142
+ restrict: 'A',
143
+ require: 'ngModel',
144
+ link: function postLink(scope, element, attr, controller) {
145
+
146
+ var options = defaults;
147
+
148
+ // Support `label > input[type="radio"]` markup
149
+ var isInput = element[0].nodeName === 'INPUT';
150
+ var activeElement = isInput ? element.parent() : element;
151
+
152
+ var value = constantValueRegExp.test(attr.value) ? scope.$eval(attr.value) : attr.value;
153
+
154
+ // model -> view
155
+ controller.$render = function () {
156
+ // console.warn('$render', element.attr('value'), 'controller.$modelValue', typeof controller.$modelValue, controller.$modelValue, 'controller.$viewValue', typeof controller.$viewValue, controller.$viewValue);
157
+ var isActive = angular.equals(controller.$modelValue, value);
158
+ $$rAF(function() {
159
+ if(isInput) element[0].checked = isActive;
160
+ activeElement.toggleClass(options.activeClass, isActive);
161
+ });
162
+ };
163
+
164
+ // view -> model
165
+ element.bind(options.toggleEvent, function() {
166
+ scope.$apply(function () {
167
+ // console.warn('!click', element.attr('value'), 'controller.$viewValue', typeof controller.$viewValue, controller.$viewValue, 'controller.$modelValue', typeof controller.$modelValue, controller.$modelValue);
168
+ controller.$setViewValue(value);
169
+ controller.$render();
170
+ });
171
+ });
172
+
173
+ }
174
+
175
+ };
176
+
177
+ }]);
@@ -0,0 +1,9 @@
1
+ /**
2
+ * angular-strap
3
+ * @version v2.1.6 - 2015-01-11
4
+ * @link http://mgcrea.github.io/angular-strap
5
+ * @author Olivier Louvignes (olivier@mg-crea.com)
6
+ * @license MIT License, http://www.opensource.org/licenses/MIT
7
+ */
8
+ "use strict";angular.module("mgcrea.ngStrap.button",[]).provider("$button",function(){var e=this.defaults={activeClass:"active",toggleEvent:"click"};this.$get=function(){return{defaults:e}}}).directive("bsCheckboxGroup",function(){return{restrict:"A",require:"ngModel",compile:function(e,t){e.attr("data-toggle","buttons"),e.removeAttr("ng-model");var a=e[0].querySelectorAll('input[type="checkbox"]');angular.forEach(a,function(e){var a=angular.element(e);a.attr("bs-checkbox",""),a.attr("ng-model",t.ngModel+"."+a.attr("value"))})}}}).directive("bsCheckbox",["$button","$$rAF",function(e,t){var a=e.defaults,n=/^(true|false|\d+)$/;return{restrict:"A",require:"ngModel",link:function(e,r,u,l){var o=a,i="INPUT"===r[0].nodeName,c=i?r.parent():r,s=angular.isDefined(u.trueValue)?u.trueValue:!0;n.test(u.trueValue)&&(s=e.$eval(u.trueValue));var d=angular.isDefined(u.falseValue)?u.falseValue:!1;n.test(u.falseValue)&&(d=e.$eval(u.falseValue));var f="boolean"!=typeof s||"boolean"!=typeof d;f&&(l.$parsers.push(function(e){return e?s:d}),l.$formatters.push(function(e){return angular.equals(e,s)}),e.$watch(u.ngModel,function(){l.$render()})),l.$render=function(){var e=angular.equals(l.$modelValue,s);t(function(){i&&(r[0].checked=e),c.toggleClass(o.activeClass,e)})},r.bind(o.toggleEvent,function(){e.$apply(function(){i||l.$setViewValue(!c.hasClass("active")),f||l.$render()})})}}}]).directive("bsRadioGroup",function(){return{restrict:"A",require:"ngModel",compile:function(e,t){e.attr("data-toggle","buttons"),e.removeAttr("ng-model");var a=e[0].querySelectorAll('input[type="radio"]');angular.forEach(a,function(e){angular.element(e).attr("bs-radio",""),angular.element(e).attr("ng-model",t.ngModel)})}}}).directive("bsRadio",["$button","$$rAF",function(e,t){var a=e.defaults,n=/^(true|false|\d+)$/;return{restrict:"A",require:"ngModel",link:function(e,r,u,l){var o=a,i="INPUT"===r[0].nodeName,c=i?r.parent():r,s=n.test(u.value)?e.$eval(u.value):u.value;l.$render=function(){var e=angular.equals(l.$modelValue,s);t(function(){i&&(r[0].checked=e),c.toggleClass(o.activeClass,e)})},r.bind(o.toggleEvent,function(){e.$apply(function(){l.$setViewValue(s),l.$render()})})}}}]);
9
+ //# sourceMappingURL=button.min.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["button/button.js"],"names":[],"mappings":"iEAWS,UAAO,+FAQZ,OAAO,SAAA,gBAKH,kBAAmB,2BAGb,YACJ,kBACA,SAAa,EAAiB,mQAelC,cAAS,UAAA,QAAA,SAAA,EAAA,oBAGP,EAAc,qCAGV,YACA,iCAGJ,GAAG,GAAA,EAGC,EAA+B,UAA/B,EAAa,GAAQ,SACtB,EAAA,EAAyB,EAAK,SAAa,+FAM9C,IAAG,GAAA,QAAiB,UAAA,EAAA,YAAA,EAAA,YAAA,CAClB,GAAoB,KAAK,EAAA,0CAKzB,GAAqC,iBAAd,IAA0B,iBAAA,SAEvC,SAAQ,KAAO,SAAA,4GAWzB,EAAI,uEAQN,GAAQ,WACN,IAAa,EAAA,GAAY,QAAA,uCAMrB,KAAA,EAAW,YAAA,2GAkBjB,eAAmB,2BAGjB,YACA,+QAeJ,WAAS,UAAA,QAAA,SAAA,EAAA,oBAGP,EAAc,qCAGV,YACA,mEAOF,EAAe,EAAQ,EAAO,SAAW,EAEvC,EAAG,EAAoB,KAAU,EAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,gEAMrC,GAAQ,WACN,IAAa,EAAA,GAAY,QAAA","file":"button.min.js","sourcesContent":["'use strict';\n\nangular.module('mgcrea.ngStrap.button', [])\n\n .provider('$button', function() {\n\n var defaults = this.defaults = {\n activeClass:'active',\n toggleEvent:'click'\n };\n\n this.$get = function() {\n return {defaults: defaults};\n };\n\n })\n\n .directive('bsCheckboxGroup', function() {\n\n return {\n restrict: 'A',\n require: 'ngModel',\n compile: function postLink(element, attr) {\n element.attr('data-toggle', 'buttons');\n element.removeAttr('ng-model');\n var children = element[0].querySelectorAll('input[type=\"checkbox\"]');\n angular.forEach(children, function(child) {\n var childEl = angular.element(child);\n childEl.attr('bs-checkbox', '');\n childEl.attr('ng-model', attr.ngModel + '.' + childEl.attr('value'));\n });\n }\n\n };\n\n })\n\n .directive('bsCheckbox', function($button, $$rAF) {\n\n var defaults = $button.defaults;\n var constantValueRegExp = /^(true|false|\\d+)$/;\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function postLink(scope, element, attr, controller) {\n\n var options = defaults;\n\n // Support label > input[type=\"checkbox\"]\n var isInput = element[0].nodeName === 'INPUT';\n var activeElement = isInput ? element.parent() : element;\n\n var trueValue = angular.isDefined(attr.trueValue) ? attr.trueValue : true;\n if(constantValueRegExp.test(attr.trueValue)) {\n trueValue = scope.$eval(attr.trueValue);\n }\n var falseValue = angular.isDefined(attr.falseValue) ? attr.falseValue : false;\n if(constantValueRegExp.test(attr.falseValue)) {\n falseValue = scope.$eval(attr.falseValue);\n }\n\n // Parse exotic values\n var hasExoticValues = typeof trueValue !== 'boolean' || typeof falseValue !== 'boolean';\n if(hasExoticValues) {\n controller.$parsers.push(function(viewValue) {\n // console.warn('$parser', element.attr('ng-model'), 'viewValue', viewValue);\n return viewValue ? trueValue : falseValue;\n });\n // modelValue -> $formatters -> viewValue\n controller.$formatters.push(function(modelValue) {\n // console.warn('$formatter(\"%s\"): modelValue=%o (%o)', element.attr('ng-model'), modelValue, typeof modelValue);\n return angular.equals(modelValue, trueValue);\n });\n // Fix rendering for exotic values\n scope.$watch(attr.ngModel, function(newValue, oldValue) {\n controller.$render();\n });\n }\n\n // model -> view\n controller.$render = function () {\n // console.warn('$render', element.attr('ng-model'), 'controller.$modelValue', typeof controller.$modelValue, controller.$modelValue, 'controller.$viewValue', typeof controller.$viewValue, controller.$viewValue);\n var isActive = angular.equals(controller.$modelValue, trueValue);\n $$rAF(function() {\n if(isInput) element[0].checked = isActive;\n activeElement.toggleClass(options.activeClass, isActive);\n });\n };\n\n // view -> model\n element.bind(options.toggleEvent, function() {\n scope.$apply(function () {\n // console.warn('!click', element.attr('ng-model'), 'controller.$viewValue', typeof controller.$viewValue, controller.$viewValue, 'controller.$modelValue', typeof controller.$modelValue, controller.$modelValue);\n if(!isInput) {\n controller.$setViewValue(!activeElement.hasClass('active'));\n }\n if(!hasExoticValues) {\n controller.$render();\n }\n });\n });\n\n }\n\n };\n\n })\n\n .directive('bsRadioGroup', function() {\n\n return {\n restrict: 'A',\n require: 'ngModel',\n compile: function postLink(element, attr) {\n element.attr('data-toggle', 'buttons');\n element.removeAttr('ng-model');\n var children = element[0].querySelectorAll('input[type=\"radio\"]');\n angular.forEach(children, function(child) {\n angular.element(child).attr('bs-radio', '');\n angular.element(child).attr('ng-model', attr.ngModel);\n });\n }\n\n };\n\n })\n\n .directive('bsRadio', function($button, $$rAF) {\n\n var defaults = $button.defaults;\n var constantValueRegExp = /^(true|false|\\d+)$/;\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function postLink(scope, element, attr, controller) {\n\n var options = defaults;\n\n // Support `label > input[type=\"radio\"]` markup\n var isInput = element[0].nodeName === 'INPUT';\n var activeElement = isInput ? element.parent() : element;\n\n var value = constantValueRegExp.test(attr.value) ? scope.$eval(attr.value) : attr.value;\n\n // model -> view\n controller.$render = function () {\n // console.warn('$render', element.attr('value'), 'controller.$modelValue', typeof controller.$modelValue, controller.$modelValue, 'controller.$viewValue', typeof controller.$viewValue, controller.$viewValue);\n var isActive = angular.equals(controller.$modelValue, value);\n $$rAF(function() {\n if(isInput) element[0].checked = isActive;\n activeElement.toggleClass(options.activeClass, isActive);\n });\n };\n\n // view -> model\n element.bind(options.toggleEvent, function() {\n scope.$apply(function () {\n // console.warn('!click', element.attr('value'), 'controller.$viewValue', typeof controller.$viewValue, controller.$viewValue, 'controller.$modelValue', typeof controller.$modelValue, controller.$modelValue);\n controller.$setViewValue(value);\n controller.$render();\n });\n });\n\n }\n\n };\n\n });\n"],"sourceRoot":"/source/"}
@@ -0,0 +1,273 @@
1
+ /**
2
+ * angular-strap
3
+ * @version v2.1.6 - 2015-01-11
4
+ * @link http://mgcrea.github.io/angular-strap
5
+ * @author Olivier Louvignes (olivier@mg-crea.com)
6
+ * @license MIT License, http://www.opensource.org/licenses/MIT
7
+ */
8
+ 'use strict';
9
+
10
+ angular.module('mgcrea.ngStrap.collapse', [])
11
+
12
+ .provider('$collapse', function() {
13
+
14
+ var defaults = this.defaults = {
15
+ animation: 'am-collapse',
16
+ disallowToggle: false,
17
+ activeClass: 'in',
18
+ startCollapsed: false,
19
+ allowMultiple: false
20
+ };
21
+
22
+ var controller = this.controller = function($scope, $element, $attrs) {
23
+ var self = this;
24
+
25
+ // Attributes options
26
+ self.$options = angular.copy(defaults);
27
+ angular.forEach(['animation', 'disallowToggle', 'activeClass', 'startCollapsed', 'allowMultiple'], function (key) {
28
+ if(angular.isDefined($attrs[key])) self.$options[key] = $attrs[key];
29
+ });
30
+
31
+ self.$toggles = [];
32
+ self.$targets = [];
33
+
34
+ self.$viewChangeListeners = [];
35
+
36
+ self.$registerToggle = function(element) {
37
+ self.$toggles.push(element);
38
+ };
39
+ self.$registerTarget = function(element) {
40
+ self.$targets.push(element);
41
+ };
42
+
43
+ self.$unregisterToggle = function(element) {
44
+ var index = self.$toggles.indexOf(element);
45
+ // remove toggle from $toggles array
46
+ self.$toggles.splice(index, 1);
47
+ };
48
+ self.$unregisterTarget = function(element) {
49
+ var index = self.$targets.indexOf(element);
50
+
51
+ // remove element from $targets array
52
+ self.$targets.splice(index, 1);
53
+
54
+ if (self.$options.allowMultiple) {
55
+ // remove target index from $active array values
56
+ deactivateItem(element);
57
+ }
58
+
59
+ // fix active item indexes
60
+ fixActiveItemIndexes(index);
61
+
62
+ self.$viewChangeListeners.forEach(function(fn) {
63
+ fn();
64
+ });
65
+ };
66
+
67
+ // use array to store all the currently open panels
68
+ self.$targets.$active = !self.$options.startCollapsed ? [0] : [];
69
+ self.$setActive = $scope.$setActive = function(value) {
70
+ if(angular.isArray(value)) {
71
+ self.$targets.$active = angular.copy(value);
72
+ }
73
+ else if(!self.$options.disallowToggle) {
74
+ // toogle element active status
75
+ isActive(value) ? deactivateItem(value) : activateItem(value);
76
+ } else {
77
+ activateItem(value);
78
+ }
79
+
80
+ self.$viewChangeListeners.forEach(function(fn) {
81
+ fn();
82
+ });
83
+ };
84
+
85
+ self.$activeIndexes = function() {
86
+ return self.$options.allowMultiple ? self.$targets.$active :
87
+ self.$targets.$active.length === 1 ? self.$targets.$active[0] : -1;
88
+ };
89
+
90
+ function fixActiveItemIndexes(index) {
91
+ // item with index was removed, so we
92
+ // need to adjust other items index values
93
+ var activeIndexes = self.$targets.$active;
94
+ for(var i = 0; i < activeIndexes.length; i++) {
95
+ if (index < activeIndexes[i]) {
96
+ activeIndexes[i] = activeIndexes[i] - 1;
97
+ }
98
+
99
+ // the last item is active, so we need to
100
+ // adjust its index
101
+ if (activeIndexes[i] === self.$targets.length) {
102
+ activeIndexes[i] = self.$targets.length - 1;
103
+ }
104
+ }
105
+ }
106
+
107
+ function isActive(value) {
108
+ var activeItems = self.$targets.$active;
109
+ return activeItems.indexOf(value) === -1 ? false : true;
110
+ }
111
+
112
+ function deactivateItem(value) {
113
+ var index = self.$targets.$active.indexOf(value);
114
+ if (index !== -1) {
115
+ self.$targets.$active.splice(index, 1);
116
+ }
117
+ }
118
+
119
+ function activateItem(value) {
120
+ if (!self.$options.allowMultiple) {
121
+ // remove current selected item
122
+ self.$targets.$active.splice(0, 1);
123
+ }
124
+
125
+ if (self.$targets.$active.indexOf(value) === -1) {
126
+ self.$targets.$active.push(value);
127
+ }
128
+ }
129
+
130
+ };
131
+
132
+ this.$get = function() {
133
+ var $collapse = {};
134
+ $collapse.defaults = defaults;
135
+ $collapse.controller = controller;
136
+ return $collapse;
137
+ };
138
+
139
+ })
140
+
141
+ .directive('bsCollapse', ["$window", "$animate", "$collapse", function($window, $animate, $collapse) {
142
+
143
+ var defaults = $collapse.defaults;
144
+
145
+ return {
146
+ require: ['?ngModel', 'bsCollapse'],
147
+ controller: ['$scope', '$element', '$attrs', $collapse.controller],
148
+ link: function postLink(scope, element, attrs, controllers) {
149
+
150
+ var ngModelCtrl = controllers[0];
151
+ var bsCollapseCtrl = controllers[1];
152
+
153
+ if(ngModelCtrl) {
154
+
155
+ // Update the modelValue following
156
+ bsCollapseCtrl.$viewChangeListeners.push(function() {
157
+ ngModelCtrl.$setViewValue(bsCollapseCtrl.$activeIndexes());
158
+ });
159
+
160
+ // modelValue -> $formatters -> viewValue
161
+ ngModelCtrl.$formatters.push(function(modelValue) {
162
+ // console.warn('$formatter("%s"): modelValue=%o (%o)', element.attr('ng-model'), modelValue, typeof modelValue);
163
+ if (angular.isArray(modelValue)) {
164
+ // model value is an array, so just replace
165
+ // the active items directly
166
+ bsCollapseCtrl.$setActive(modelValue);
167
+ }
168
+ else {
169
+ var activeIndexes = bsCollapseCtrl.$activeIndexes();
170
+
171
+ if (angular.isArray(activeIndexes)) {
172
+ // we have an array of selected indexes
173
+ if (activeIndexes.indexOf(modelValue * 1) === -1) {
174
+ // item with modelValue index is not active
175
+ bsCollapseCtrl.$setActive(modelValue * 1);
176
+ }
177
+ }
178
+ else if (activeIndexes !== modelValue * 1) {
179
+ bsCollapseCtrl.$setActive(modelValue * 1);
180
+ }
181
+ }
182
+ return modelValue;
183
+ });
184
+
185
+ }
186
+
187
+ }
188
+ };
189
+
190
+ }])
191
+
192
+ .directive('bsCollapseToggle', function() {
193
+
194
+ return {
195
+ require: ['^?ngModel', '^bsCollapse'],
196
+ link: function postLink(scope, element, attrs, controllers) {
197
+
198
+ var ngModelCtrl = controllers[0];
199
+ var bsCollapseCtrl = controllers[1];
200
+
201
+ // Add base attr
202
+ element.attr('data-toggle', 'collapse');
203
+
204
+ // Push pane to parent bsCollapse controller
205
+ bsCollapseCtrl.$registerToggle(element);
206
+
207
+ // remove toggle from collapse controller when toggle is destroyed
208
+ scope.$on('$destroy', function() {
209
+ bsCollapseCtrl.$unregisterToggle(element);
210
+ });
211
+
212
+ element.on('click', function() {
213
+ var index = attrs.bsCollapseToggle || bsCollapseCtrl.$toggles.indexOf(element);
214
+ bsCollapseCtrl.$setActive(index * 1);
215
+ scope.$apply();
216
+ });
217
+
218
+ }
219
+ };
220
+
221
+ })
222
+
223
+ .directive('bsCollapseTarget', ["$animate", function($animate) {
224
+
225
+ return {
226
+ require: ['^?ngModel', '^bsCollapse'],
227
+ // scope: true,
228
+ link: function postLink(scope, element, attrs, controllers) {
229
+
230
+ var ngModelCtrl = controllers[0];
231
+ var bsCollapseCtrl = controllers[1];
232
+
233
+ // Add base class
234
+ element.addClass('collapse');
235
+
236
+ // Add animation class
237
+ if(bsCollapseCtrl.$options.animation) {
238
+ element.addClass(bsCollapseCtrl.$options.animation);
239
+ }
240
+
241
+ // Push pane to parent bsCollapse controller
242
+ bsCollapseCtrl.$registerTarget(element);
243
+
244
+ // remove pane target from collapse controller when target is destroyed
245
+ scope.$on('$destroy', function() {
246
+ bsCollapseCtrl.$unregisterTarget(element);
247
+ });
248
+
249
+ function render() {
250
+ var index = bsCollapseCtrl.$targets.indexOf(element);
251
+ var active = bsCollapseCtrl.$activeIndexes();
252
+ var action = 'removeClass';
253
+ if (angular.isArray(active)) {
254
+ if (active.indexOf(index) !== -1) {
255
+ action = 'addClass';
256
+ }
257
+ }
258
+ else if (index === active) {
259
+ action = 'addClass';
260
+ }
261
+
262
+ $animate[action](element, bsCollapseCtrl.$options.activeClass);
263
+ }
264
+
265
+ bsCollapseCtrl.$viewChangeListeners.push(function() {
266
+ render();
267
+ });
268
+ render();
269
+
270
+ }
271
+ };
272
+
273
+ }]);