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.
- checksums.yaml +7 -0
- data/README.md +89 -0
- data/Rakefile +2 -0
- data/lib/rails/angularstrap.rb +8 -0
- data/lib/rails/angularstrap/version.rb +5 -0
- data/vendor/assets/javascripts/angular-strap/LICENSE.md +21 -0
- data/vendor/assets/javascripts/angular-strap/README.md +112 -0
- data/vendor/assets/javascripts/angular-strap/angular-strap.nuspec +23 -0
- data/vendor/assets/javascripts/angular-strap/bower.json +53 -0
- data/vendor/assets/javascripts/angular-strap/dist/angular-strap.js +5014 -0
- data/vendor/assets/javascripts/angular-strap/dist/angular-strap.min.js +11 -0
- data/vendor/assets/javascripts/angular-strap/dist/angular-strap.min.js.map +1 -0
- data/vendor/assets/javascripts/angular-strap/dist/angular-strap.tpl.js +89 -0
- data/vendor/assets/javascripts/angular-strap/dist/angular-strap.tpl.min.js +8 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/affix.js +249 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/affix.min.js +9 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/affix.min.js.map +1 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/alert.js +120 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/alert.min.js +9 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/alert.min.js.map +1 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/alert.tpl.js +14 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/alert.tpl.min.js +8 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/aside.js +96 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/aside.min.js +9 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/aside.min.js.map +1 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/aside.tpl.js +14 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/aside.tpl.min.js +8 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/button.js +177 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/button.min.js +9 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/button.min.js.map +1 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/collapse.js +273 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/collapse.min.js +9 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/collapse.min.js.map +1 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/date-formatter.js +61 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/date-formatter.min.js +9 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/date-formatter.min.js.map +1 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/date-parser.js +273 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/date-parser.min.js +9 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/date-parser.min.js.map +1 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/datepicker.js +640 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/datepicker.min.js +9 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/datepicker.min.js.map +1 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/datepicker.tpl.js +14 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/datepicker.tpl.min.js +8 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/debounce.js +62 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/debounce.min.js +9 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/debounce.min.js.map +1 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/dimensions.js +156 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/dimensions.min.js +9 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/dimensions.min.js.map +1 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/dropdown.js +149 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/dropdown.min.js +9 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/dropdown.min.js.map +1 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/dropdown.tpl.js +14 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/dropdown.tpl.min.js +8 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/modal.js +349 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/modal.min.js +9 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/modal.min.js.map +1 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/modal.tpl.js +14 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/modal.tpl.min.js +8 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/navbar.js +72 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/navbar.min.js +9 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/navbar.min.js.map +1 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/parse-options.js +76 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/parse-options.min.js +9 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/parse-options.min.js.map +1 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/popover.js +112 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/popover.min.js +9 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/popover.min.js.map +1 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/popover.tpl.js +14 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/popover.tpl.min.js +8 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/raf.js +61 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/raf.min.js +9 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/raf.min.js.map +1 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/scrollspy.js +261 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/scrollspy.min.js +9 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/scrollspy.min.js.map +1 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/select.js +325 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/select.min.js +9 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/select.min.js.map +1 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/select.tpl.js +14 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/select.tpl.min.js +8 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/tab.js +186 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/tab.min.js +9 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/tab.min.js.map +1 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/tab.tpl.js +14 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/tab.tpl.min.js +8 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/timepicker.js +485 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/timepicker.min.js +9 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/timepicker.min.js.map +1 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/timepicker.tpl.js +14 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/timepicker.tpl.min.js +8 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/tooltip.js +690 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/tooltip.min.js +9 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/tooltip.min.js.map +1 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/tooltip.tpl.js +14 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/tooltip.tpl.min.js +8 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/typeahead.js +266 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/typeahead.min.js +9 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/typeahead.min.js.map +1 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/typeahead.tpl.js +14 -0
- data/vendor/assets/javascripts/angular-strap/dist/modules/typeahead.tpl.min.js +8 -0
- data/vendor/assets/javascripts/angular-strap/gulpfile.js +489 -0
- data/vendor/assets/javascripts/angular-strap/package.json +73 -0
- data/vendor/assets/javascripts/angular-strap/src/affix/affix.js +258 -0
- data/vendor/assets/javascripts/angular-strap/src/alert/alert.js +113 -0
- data/vendor/assets/javascripts/angular-strap/src/alert/alert.tpl.html +4 -0
- data/vendor/assets/javascripts/angular-strap/src/aside/aside.js +89 -0
- data/vendor/assets/javascripts/angular-strap/src/aside/aside.tpl.html +14 -0
- data/vendor/assets/javascripts/angular-strap/src/button/button.js +174 -0
- data/vendor/assets/javascripts/angular-strap/src/collapse/collapse.js +266 -0
- data/vendor/assets/javascripts/angular-strap/src/datepicker/datepicker.js +633 -0
- data/vendor/assets/javascripts/angular-strap/src/datepicker/datepicker.tpl.html +33 -0
- data/vendor/assets/javascripts/angular-strap/src/dropdown/dropdown.js +143 -0
- data/vendor/assets/javascripts/angular-strap/src/dropdown/dropdown.tpl.html +6 -0
- data/vendor/assets/javascripts/angular-strap/src/helpers/date-formatter.js +54 -0
- data/vendor/assets/javascripts/angular-strap/src/helpers/date-parser.js +266 -0
- data/vendor/assets/javascripts/angular-strap/src/helpers/debounce.js +55 -0
- data/vendor/assets/javascripts/angular-strap/src/helpers/dimensions.js +212 -0
- data/vendor/assets/javascripts/angular-strap/src/helpers/parse-options.js +69 -0
- data/vendor/assets/javascripts/angular-strap/src/helpers/raf.js +54 -0
- data/vendor/assets/javascripts/angular-strap/src/modal/modal.js +348 -0
- data/vendor/assets/javascripts/angular-strap/src/modal/modal.tpl.html +14 -0
- data/vendor/assets/javascripts/angular-strap/src/module.js +19 -0
- data/vendor/assets/javascripts/angular-strap/src/navbar/navbar.js +65 -0
- data/vendor/assets/javascripts/angular-strap/src/popover/popover.js +111 -0
- data/vendor/assets/javascripts/angular-strap/src/popover/popover.tpl.html +5 -0
- data/vendor/assets/javascripts/angular-strap/src/scrollspy/scrollspy.js +254 -0
- data/vendor/assets/javascripts/angular-strap/src/select/select.js +321 -0
- data/vendor/assets/javascripts/angular-strap/src/select/select.tpl.html +14 -0
- data/vendor/assets/javascripts/angular-strap/src/tab/tab.js +183 -0
- data/vendor/assets/javascripts/angular-strap/src/tab/tab.tpl.html +7 -0
- data/vendor/assets/javascripts/angular-strap/src/timepicker/timepicker.js +493 -0
- data/vendor/assets/javascripts/angular-strap/src/timepicker/timepicker.tpl.html +62 -0
- data/vendor/assets/javascripts/angular-strap/src/tooltip/tooltip.js +806 -0
- data/vendor/assets/javascripts/angular-strap/src/tooltip/tooltip.tpl.html +4 -0
- data/vendor/assets/javascripts/angular-strap/src/typeahead/typeahead.js +262 -0
- data/vendor/assets/javascripts/angular-strap/src/typeahead/typeahead.tpl.html +5 -0
- data/vendor/assets/javascripts/angular/README.md +64 -0
- data/vendor/assets/javascripts/angular/angular-csp.css +13 -0
- data/vendor/assets/javascripts/angular/angular.js +26181 -0
- data/vendor/assets/javascripts/angular/angular.min.js +250 -0
- data/vendor/assets/javascripts/angular/angular.min.js.gzip +0 -0
- data/vendor/assets/javascripts/angular/angular.min.js.map +8 -0
- data/vendor/assets/javascripts/angular/bower.json +8 -0
- data/vendor/assets/javascripts/angular/index.js +2 -0
- data/vendor/assets/javascripts/angular/package.json +25 -0
- 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> </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
|
+
});
|