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,73 @@
1
+ {
2
+ "name": "angular-strap",
3
+ "description": "AngularStrap - AngularJS directives for Bootstrap",
4
+ "version": "2.2.0",
5
+ "keywords": [
6
+ "angular",
7
+ "bootstrap"
8
+ ],
9
+ "main": "dist/angular-strap.js",
10
+ "homepage": "http://mgcrea.github.io/angular-strap",
11
+ "bugs": "https://github.com/mgcrea/angular-strap/issues",
12
+ "author": {
13
+ "name": "Olivier Louvignes",
14
+ "email": "olivier@mg-crea.com",
15
+ "url": "https://github.com/mgcrea"
16
+ },
17
+ "contributors": [
18
+ {
19
+ "name": "Vitor Fernandes",
20
+ "url": "https://github.com/vmlf01"
21
+ }
22
+ ],
23
+ "repository": {
24
+ "type": "git",
25
+ "url": "https://github.com/mgcrea/angular-strap.git"
26
+ },
27
+ "licenses": [
28
+ {
29
+ "type": "MIT",
30
+ "url": "https://github.com/mgcrea/angular-strap/blob/master/LICENSE.md"
31
+ }
32
+ ],
33
+ "dependencies": {},
34
+ "devDependencies": {
35
+ "chalk": "^0.5.1",
36
+ "gulp": "^3.8.11",
37
+ "gulp-autoprefixer": "2.1.0",
38
+ "gulp-changed": "^1.1.1",
39
+ "gulp-clean": "^0.3.1",
40
+ "gulp-cleancss": "^0.2.2",
41
+ "gulp-concat-util": "^0.5.1",
42
+ "gulp-connect": "^2.2.0",
43
+ "gulp-htmlmin": "^1.1.0",
44
+ "gulp-jshint": "^1.9.2",
45
+ "gulp-less": "^3.0.0",
46
+ "gulp-ng-annotate": "^0.5.2",
47
+ "gulp-nginclude": "^0.4.5",
48
+ "gulp-ngmin": "^0.3.0",
49
+ "gulp-ngtemplate": "^0.2.3",
50
+ "gulp-open": "^0.3.2",
51
+ "gulp-rename": "^1.2.0",
52
+ "gulp-sourcemaps": "^1.3.0",
53
+ "gulp-uglify": "^1.1.0",
54
+ "gulp-usemin": "^0.3.11",
55
+ "gulp-util": "^3.0.3",
56
+ "gulp-watch": "^4.1.1",
57
+ "jshint-stylish": "^1.0.0",
58
+ "karma": "^0.12.31",
59
+ "karma-chrome-launcher": "^0.1.7",
60
+ "karma-coverage": "^0.2.7",
61
+ "karma-jasmine": "^0.3.5",
62
+ "karma-phantomjs-launcher": "^0.1.4",
63
+ "karma-sauce-launcher": "^0.2.10",
64
+ "merge-stream": "^0.1.7",
65
+ "run-sequence": "^1.0.2"
66
+ },
67
+ "engines": {
68
+ "node": "^0.10"
69
+ },
70
+ "scripts": {
71
+ "test": "gulp jshint karma:unit"
72
+ }
73
+ }
@@ -0,0 +1,258 @@
1
+ 'use strict';
2
+
3
+ angular.module('mgcrea.ngStrap.affix', ['mgcrea.ngStrap.helpers.dimensions', 'mgcrea.ngStrap.helpers.debounce'])
4
+
5
+ .provider('$affix', function() {
6
+
7
+ var defaults = this.defaults = {
8
+ offsetTop: 'auto',
9
+ inlineStyles: true
10
+ };
11
+
12
+ this.$get = function($window, debounce, dimensions) {
13
+
14
+ var bodyEl = angular.element($window.document.body);
15
+ var windowEl = angular.element($window);
16
+
17
+ function AffixFactory(element, config) {
18
+
19
+ var $affix = {};
20
+
21
+ // Common vars
22
+ var options = angular.extend({}, defaults, config);
23
+ var targetEl = options.target;
24
+
25
+ // Initial private vars
26
+ var reset = 'affix affix-top affix-bottom',
27
+ setWidth = false,
28
+ initialAffixTop = 0,
29
+ initialOffsetTop = 0,
30
+ offsetTop = 0,
31
+ offsetBottom = 0,
32
+ affixed = null,
33
+ unpin = null;
34
+
35
+ var parent = element.parent();
36
+ // Options: custom parent
37
+ if (options.offsetParent) {
38
+ if (options.offsetParent.match(/^\d+$/)) {
39
+ for (var i = 0; i < (options.offsetParent * 1) - 1; i++) {
40
+ parent = parent.parent();
41
+ }
42
+ }
43
+ else {
44
+ parent = angular.element(options.offsetParent);
45
+ }
46
+ }
47
+
48
+ $affix.init = function() {
49
+
50
+ this.$parseOffsets();
51
+ initialOffsetTop = dimensions.offset(element[0]).top + initialAffixTop;
52
+ setWidth = !element[0].style.width;
53
+
54
+ // Bind events
55
+ targetEl.on('scroll', this.checkPosition);
56
+ targetEl.on('click', this.checkPositionWithEventLoop);
57
+ windowEl.on('resize', this.$debouncedOnResize);
58
+
59
+ // Both of these checkPosition() calls are necessary for the case where
60
+ // the user hits refresh after scrolling to the bottom of the page.
61
+ this.checkPosition();
62
+ this.checkPositionWithEventLoop();
63
+
64
+ };
65
+
66
+ $affix.destroy = function() {
67
+
68
+ // Unbind events
69
+ targetEl.off('scroll', this.checkPosition);
70
+ targetEl.off('click', this.checkPositionWithEventLoop);
71
+ windowEl.off('resize', this.$debouncedOnResize);
72
+
73
+ };
74
+
75
+ $affix.checkPositionWithEventLoop = function() {
76
+
77
+ // IE 9 throws an error if we use 'this' instead of '$affix'
78
+ // in this setTimeout call
79
+ setTimeout($affix.checkPosition, 1);
80
+
81
+ };
82
+
83
+ $affix.checkPosition = function() {
84
+ // if (!this.$element.is(':visible')) return
85
+
86
+ var scrollTop = getScrollTop();
87
+ var position = dimensions.offset(element[0]);
88
+ var elementHeight = dimensions.height(element[0]);
89
+
90
+ // Get required affix class according to position
91
+ var affix = getRequiredAffixClass(unpin, position, elementHeight);
92
+
93
+ // Did affix status changed this last check?
94
+ if(affixed === affix) return;
95
+ affixed = affix;
96
+
97
+ // Add proper affix class
98
+ element.removeClass(reset).addClass('affix' + ((affix !== 'middle') ? '-' + affix : ''));
99
+
100
+ if(affix === 'top') {
101
+ unpin = null;
102
+ if(setWidth) {
103
+ element.css('width', '');
104
+ }
105
+ if (options.inlineStyles) {
106
+ element.css('position', (options.offsetParent) ? '' : 'relative');
107
+ element.css('top', '');
108
+ }
109
+ } else if(affix === 'bottom') {
110
+ if (options.offsetUnpin) {
111
+ unpin = -(options.offsetUnpin * 1);
112
+ }
113
+ else {
114
+ // Calculate unpin threshold when affixed to bottom.
115
+ // Hopefully the browser scrolls pixel by pixel.
116
+ unpin = position.top - scrollTop;
117
+ }
118
+ if(setWidth) {
119
+ element.css('width', '');
120
+ }
121
+ if (options.inlineStyles) {
122
+ element.css('position', (options.offsetParent) ? '' : 'relative');
123
+ element.css('top', (options.offsetParent) ? '' : ((bodyEl[0].offsetHeight - offsetBottom - elementHeight - initialOffsetTop) + 'px'));
124
+ }
125
+ } else { // affix === 'middle'
126
+ unpin = null;
127
+ if(setWidth) {
128
+ element.css('width', element[0].offsetWidth + 'px');
129
+ }
130
+ if (options.inlineStyles) {
131
+ element.css('position', 'fixed');
132
+ element.css('top', initialAffixTop + 'px');
133
+ }
134
+ }
135
+
136
+ };
137
+
138
+ $affix.$onResize = function() {
139
+ $affix.$parseOffsets();
140
+ $affix.checkPosition();
141
+ };
142
+ $affix.$debouncedOnResize = debounce($affix.$onResize, 50);
143
+
144
+ $affix.$parseOffsets = function() {
145
+ var initialPosition = element.css('position');
146
+ // Reset position to calculate correct offsetTop
147
+ if (options.inlineStyles){
148
+ element.css('position', (options.offsetParent) ? '' : 'relative');
149
+ }
150
+
151
+ if(options.offsetTop) {
152
+ if(options.offsetTop === 'auto') {
153
+ options.offsetTop = '+0';
154
+ }
155
+ if(options.offsetTop.match(/^[-+]\d+$/)) {
156
+ initialAffixTop = - options.offsetTop * 1;
157
+ if(options.offsetParent) {
158
+ offsetTop = dimensions.offset(parent[0]).top + (options.offsetTop * 1);
159
+ }
160
+ else {
161
+ offsetTop = dimensions.offset(element[0]).top - dimensions.css(element[0], 'marginTop', true) + (options.offsetTop * 1);
162
+ }
163
+ }
164
+ else {
165
+ offsetTop = options.offsetTop * 1;
166
+ }
167
+ }
168
+
169
+ if(options.offsetBottom) {
170
+ if(options.offsetParent && options.offsetBottom.match(/^[-+]\d+$/)) {
171
+ // add 1 pixel due to rounding problems...
172
+ offsetBottom = getScrollHeight() - (dimensions.offset(parent[0]).top + dimensions.height(parent[0])) + (options.offsetBottom * 1) + 1;
173
+ }
174
+ else {
175
+ offsetBottom = options.offsetBottom * 1;
176
+ }
177
+ }
178
+
179
+ // Bring back the element's position after calculations
180
+ if (options.inlineStyles){
181
+ element.css('position', initialPosition);
182
+ }
183
+ };
184
+
185
+ // Private methods
186
+
187
+ function getRequiredAffixClass(unpin, position, elementHeight) {
188
+
189
+ var scrollTop = getScrollTop();
190
+ var scrollHeight = getScrollHeight();
191
+
192
+ if(scrollTop <= offsetTop) {
193
+ return 'top';
194
+ } else if(unpin !== null && (scrollTop + unpin <= position.top)) {
195
+ return 'middle';
196
+ } else if(offsetBottom !== null && (position.top + elementHeight + initialAffixTop >= scrollHeight - offsetBottom)) {
197
+ return 'bottom';
198
+ } else {
199
+ return 'middle';
200
+ }
201
+
202
+ }
203
+
204
+ function getScrollTop() {
205
+ return targetEl[0] === $window ? $window.pageYOffset : targetEl[0].scrollTop;
206
+ }
207
+
208
+ function getScrollHeight() {
209
+ return targetEl[0] === $window ? $window.document.body.scrollHeight : targetEl[0].scrollHeight;
210
+ }
211
+
212
+ $affix.init();
213
+ return $affix;
214
+
215
+ }
216
+
217
+ return AffixFactory;
218
+
219
+ };
220
+
221
+ })
222
+
223
+ .directive('bsAffix', function($affix, $window) {
224
+
225
+ return {
226
+ restrict: 'EAC',
227
+ require: '^?bsAffixTarget',
228
+ link: function postLink(scope, element, attr, affixTarget) {
229
+
230
+ var options = {scope: scope, target: affixTarget ? affixTarget.$element : angular.element($window)};
231
+ angular.forEach(['offsetTop', 'offsetBottom', 'offsetParent', 'offsetUnpin', 'inlineStyles'], function(key) {
232
+ if(angular.isDefined(attr[key])) {
233
+ var option = attr[key];
234
+ if (/true/i.test(option)) option = true;
235
+ if (/false/i.test(option)) option = false;
236
+ options[key] = option;
237
+ }
238
+ });
239
+
240
+ var affix = $affix(element, options);
241
+ scope.$on('$destroy', function() {
242
+ affix && affix.destroy();
243
+ options = null;
244
+ affix = null;
245
+ });
246
+
247
+ }
248
+ };
249
+
250
+ })
251
+
252
+ .directive('bsAffixTarget', function() {
253
+ return {
254
+ controller: function($element) {
255
+ this.$element = $element;
256
+ }
257
+ };
258
+ });
@@ -0,0 +1,113 @@
1
+ 'use strict';
2
+
3
+ // @BUG: following snippet won't compile correctly
4
+ // @TODO: submit issue to core
5
+ // '<span ng-if="title"><strong ng-bind="title"></strong>&nbsp;</span><span ng-bind-html="content"></span>' +
6
+
7
+ angular.module('mgcrea.ngStrap.alert', ['mgcrea.ngStrap.modal'])
8
+
9
+ .provider('$alert', function() {
10
+
11
+ var defaults = this.defaults = {
12
+ animation: 'am-fade',
13
+ prefixClass: 'alert',
14
+ prefixEvent: 'alert',
15
+ placement: null,
16
+ template: 'alert/alert.tpl.html',
17
+ container: false,
18
+ element: null,
19
+ backdrop: false,
20
+ keyboard: true,
21
+ show: true,
22
+ // Specific options
23
+ duration: false,
24
+ type: false,
25
+ dismissable: true
26
+ };
27
+
28
+ this.$get = function($modal, $timeout) {
29
+
30
+ function AlertFactory(config) {
31
+
32
+ var $alert = {};
33
+
34
+ // Common vars
35
+ var options = angular.extend({}, defaults, config);
36
+
37
+ $alert = $modal(options);
38
+
39
+ // Support scope as string options [/*title, content, */ type, dismissable]
40
+ $alert.$scope.dismissable = !!options.dismissable;
41
+ if(options.type) {
42
+ $alert.$scope.type = options.type;
43
+ }
44
+
45
+ // Support auto-close duration
46
+ var show = $alert.show;
47
+ if(options.duration) {
48
+ $alert.show = function() {
49
+ show();
50
+ $timeout(function() {
51
+ $alert.hide();
52
+ }, options.duration * 1000);
53
+ };
54
+ }
55
+
56
+ return $alert;
57
+
58
+ }
59
+
60
+ return AlertFactory;
61
+
62
+ };
63
+
64
+ })
65
+
66
+ .directive('bsAlert', function($window, $sce, $alert) {
67
+
68
+ var requestAnimationFrame = $window.requestAnimationFrame || $window.setTimeout;
69
+
70
+ return {
71
+ restrict: 'EAC',
72
+ scope: true,
73
+ link: function postLink(scope, element, attr, transclusion) {
74
+
75
+ // Directive options
76
+ var options = {scope: scope, element: element, show: false};
77
+ angular.forEach(['template', 'placement', 'keyboard', 'html', 'container', 'animation', 'duration', 'dismissable'], function(key) {
78
+ if(angular.isDefined(attr[key])) options[key] = attr[key];
79
+ });
80
+
81
+ // Support scope as data-attrs
82
+ angular.forEach(['title', 'content', 'type'], function(key) {
83
+ attr[key] && attr.$observe(key, function(newValue, oldValue) {
84
+ scope[key] = $sce.trustAsHtml(newValue);
85
+ });
86
+ });
87
+
88
+ // Support scope as an object
89
+ attr.bsAlert && scope.$watch(attr.bsAlert, function(newValue, oldValue) {
90
+ if(angular.isObject(newValue)) {
91
+ angular.extend(scope, newValue);
92
+ } else {
93
+ scope.content = newValue;
94
+ }
95
+ }, true);
96
+
97
+ // Initialize alert
98
+ var alert = $alert(options);
99
+
100
+ // Trigger
101
+ element.on(attr.trigger || 'click', alert.toggle);
102
+
103
+ // Garbage collection
104
+ scope.$on('$destroy', function() {
105
+ if (alert) alert.destroy();
106
+ options = null;
107
+ alert = null;
108
+ });
109
+
110
+ }
111
+ };
112
+
113
+ });
@@ -0,0 +1,4 @@
1
+ <div class="alert" ng-class="[type ? 'alert-' + type : null]">
2
+ <button type="button" class="close" ng-if="dismissable" ng-click="$hide()">&times;</button>
3
+ <strong ng-bind="title"></strong>&nbsp;<span ng-bind-html="content"></span>
4
+ </div>