angular-ui-bootstrap-rails 0.7.0.1 → 0.9.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 +4 -4
- data/README.md +1 -1
- data/lib/angular-ui-bootstrap-rails/version.rb +1 -1
- data/vendor/assets/javascripts/angular-ui-bootstrap-tpls.js +407 -427
- data/vendor/assets/javascripts/angular-ui-bootstrap.js +346 -349
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 71cc98184944e7fc4f8a6fe12a0ba804143cc6db
|
4
|
+
data.tar.gz: 5f2d107fc3794afe40cd6bf8b7f372000e278a02
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 98c1f71c0274ccd7fbd4599fa12c7d9277955dcc2a1e46a1bfce2851518b2225815f71ba10486c371ad5fd9978d4fec77c6c2e10caddec1929bd0d61bb3bab0b
|
7
|
+
data.tar.gz: ffa6e5b5787d79f6281d53b5c42b4c09df0c195423f56a9a66c11ba17f0ccaeb0386d1d0355e9e92cb27bdbb52997a2fa56bcefede9cc8631228693570c0846a
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# angular-ui-bootstrap-rails
|
2
2
|
|
3
|
-
angular-ui-bootstrap-rails wraps the [Angular.js UI Bootstrap
|
3
|
+
angular-ui-bootstrap-rails wraps the [Angular.js UI Bootstrap](http://angular-ui.github.com/bootstrap) library for use in Rails 3.1 and above. Assets will minify automatically during production.
|
4
4
|
|
5
5
|
## Usage
|
6
6
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
angular.module("ui.bootstrap", ["ui.bootstrap.tpls", "ui.bootstrap.transition","ui.bootstrap.collapse","ui.bootstrap.accordion","ui.bootstrap.alert","ui.bootstrap.bindHtml","ui.bootstrap.buttons","ui.bootstrap.carousel","ui.bootstrap.position","ui.bootstrap.datepicker","ui.bootstrap.dropdownToggle","ui.bootstrap.modal","ui.bootstrap.pagination","ui.bootstrap.tooltip","ui.bootstrap.popover","ui.bootstrap.progressbar","ui.bootstrap.rating","ui.bootstrap.tabs","ui.bootstrap.timepicker","ui.bootstrap.typeahead"]);
|
2
|
-
angular.module("ui.bootstrap.tpls", ["template/accordion/accordion-group.html","template/accordion/accordion.html","template/alert/alert.html","template/carousel/carousel.html","template/carousel/slide.html","template/datepicker/datepicker.html","template/datepicker/popup.html","template/modal/backdrop.html","template/modal/window.html","template/pagination/pager.html","template/pagination/pagination.html","template/tooltip/tooltip-html-unsafe-popup.html","template/tooltip/tooltip-popup.html","template/popover/popover.html","template/progressbar/bar.html","template/progressbar/progress.html","template/
|
2
|
+
angular.module("ui.bootstrap.tpls", ["template/accordion/accordion-group.html","template/accordion/accordion.html","template/alert/alert.html","template/carousel/carousel.html","template/carousel/slide.html","template/datepicker/datepicker.html","template/datepicker/popup.html","template/modal/backdrop.html","template/modal/window.html","template/pagination/pager.html","template/pagination/pagination.html","template/tooltip/tooltip-html-unsafe-popup.html","template/tooltip/tooltip-popup.html","template/popover/popover.html","template/progressbar/bar.html","template/progressbar/progress.html","template/progressbar/progressbar.html","template/rating/rating.html","template/tabs/tab.html","template/tabs/tabset.html","template/timepicker/timepicker.html","template/typeahead/typeahead-match.html","template/typeahead/typeahead-popup.html"]);
|
3
3
|
angular.module('ui.bootstrap.transition', [])
|
4
4
|
|
5
5
|
/**
|
@@ -83,88 +83,81 @@ angular.module('ui.bootstrap.transition', [])
|
|
83
83
|
return $transition;
|
84
84
|
}]);
|
85
85
|
|
86
|
-
angular.module('ui.bootstrap.collapse',['ui.bootstrap.transition'])
|
87
|
-
|
88
|
-
// The collapsible directive indicates a block of html that will expand and collapse
|
89
|
-
.directive('collapse', ['$transition', function($transition) {
|
90
|
-
// CSS transitions don't work with height: auto, so we have to manually change the height to a
|
91
|
-
// specific value and then once the animation completes, we can reset the height to auto.
|
92
|
-
// Unfortunately if you do this while the CSS transitions are specified (i.e. in the CSS class
|
93
|
-
// "collapse") then you trigger a change to height 0 in between.
|
94
|
-
// The fix is to remove the "collapse" CSS class while changing the height back to auto - phew!
|
95
|
-
var fixUpHeight = function(scope, element, height) {
|
96
|
-
// We remove the collapse CSS class to prevent a transition when we change to height: auto
|
97
|
-
element.removeClass('collapse');
|
98
|
-
element.css({ height: height });
|
99
|
-
// It appears that reading offsetWidth makes the browser realise that we have changed the
|
100
|
-
// height already :-/
|
101
|
-
var x = element[0].offsetWidth;
|
102
|
-
element.addClass('collapse');
|
103
|
-
};
|
86
|
+
angular.module('ui.bootstrap.collapse', ['ui.bootstrap.transition'])
|
104
87
|
|
105
|
-
|
106
|
-
link: function(scope, element, attrs) {
|
88
|
+
.directive('collapse', ['$transition', function ($transition, $timeout) {
|
107
89
|
|
108
|
-
|
109
|
-
|
90
|
+
return {
|
91
|
+
link: function (scope, element, attrs) {
|
110
92
|
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
93
|
+
var initialAnimSkip = true;
|
94
|
+
var currentTransition;
|
95
|
+
|
96
|
+
function doTransition(change) {
|
97
|
+
var newTransition = $transition(element, change);
|
98
|
+
if (currentTransition) {
|
99
|
+
currentTransition.cancel();
|
100
|
+
}
|
101
|
+
currentTransition = newTransition;
|
102
|
+
newTransition.then(newTransitionDone, newTransitionDone);
|
103
|
+
return newTransition;
|
104
|
+
|
105
|
+
function newTransitionDone() {
|
106
|
+
// Make sure it's this transition, otherwise, leave it alone.
|
107
|
+
if (currentTransition === newTransition) {
|
108
|
+
currentTransition = undefined;
|
109
|
+
}
|
110
|
+
}
|
116
111
|
}
|
117
|
-
});
|
118
|
-
|
119
112
|
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
113
|
+
function expand() {
|
114
|
+
if (initialAnimSkip) {
|
115
|
+
initialAnimSkip = false;
|
116
|
+
expandDone();
|
117
|
+
} else {
|
118
|
+
element.removeClass('collapse').addClass('collapsing');
|
119
|
+
doTransition({ height: element[0].scrollHeight + 'px' }).then(expandDone);
|
120
|
+
}
|
121
|
+
}
|
122
|
+
|
123
|
+
function expandDone() {
|
124
|
+
element.removeClass('collapsing');
|
125
|
+
element.addClass('collapse in');
|
126
|
+
element.css({height: 'auto'});
|
124
127
|
}
|
125
|
-
currentTransition = $transition(element,change);
|
126
|
-
currentTransition.then(
|
127
|
-
function() { currentTransition = undefined; },
|
128
|
-
function() { currentTransition = undefined; }
|
129
|
-
);
|
130
|
-
return currentTransition;
|
131
|
-
};
|
132
128
|
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
129
|
+
function collapse() {
|
130
|
+
if (initialAnimSkip) {
|
131
|
+
initialAnimSkip = false;
|
132
|
+
collapseDone();
|
133
|
+
element.css({height: 0});
|
134
|
+
} else {
|
135
|
+
// CSS transitions don't work with height: auto, so we have to manually change the height to a specific value
|
136
|
+
element.css({ height: element[0].scrollHeight + 'px' });
|
137
|
+
//trigger reflow so a browser relaizes that height was updated from auto to a specific value
|
138
|
+
var x = element[0].offsetWidth;
|
139
|
+
|
140
|
+
element.removeClass('collapse in').addClass('collapsing');
|
141
|
+
|
142
|
+
doTransition({ height: 0 }).then(collapseDone);
|
139
143
|
}
|
140
|
-
} else {
|
141
|
-
doTransition({ height : element[0].scrollHeight + 'px' })
|
142
|
-
.then(function() {
|
143
|
-
// This check ensures that we don't accidentally update the height if the user has closed
|
144
|
-
// the group while the animation was still running
|
145
|
-
if ( !isCollapsed ) {
|
146
|
-
fixUpHeight(scope, element, 'auto');
|
147
|
-
element.addClass('in');
|
148
|
-
}
|
149
|
-
});
|
150
144
|
}
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
isCollapsed = true;
|
156
|
-
element.removeClass('in');
|
157
|
-
if (initialAnimSkip) {
|
158
|
-
initialAnimSkip = false;
|
159
|
-
fixUpHeight(scope, element, 0);
|
160
|
-
} else {
|
161
|
-
fixUpHeight(scope, element, element[0].scrollHeight + 'px');
|
162
|
-
doTransition({'height':'0'});
|
145
|
+
|
146
|
+
function collapseDone() {
|
147
|
+
element.removeClass('collapsing');
|
148
|
+
element.addClass('collapse');
|
163
149
|
}
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
150
|
+
|
151
|
+
scope.$watch(attrs.collapse, function (shouldCollapse) {
|
152
|
+
if (shouldCollapse) {
|
153
|
+
collapse();
|
154
|
+
} else {
|
155
|
+
expand();
|
156
|
+
}
|
157
|
+
});
|
158
|
+
}
|
159
|
+
};
|
160
|
+
}]);
|
168
161
|
|
169
162
|
angular.module('ui.bootstrap.accordion', ['ui.bootstrap.collapse'])
|
170
163
|
|
@@ -177,9 +170,6 @@ angular.module('ui.bootstrap.accordion', ['ui.bootstrap.collapse'])
|
|
177
170
|
// This array keeps track of the accordion groups
|
178
171
|
this.groups = [];
|
179
172
|
|
180
|
-
// Keep reference to user's scope to properly assign `is-open`
|
181
|
-
this.scope = $scope;
|
182
|
-
|
183
173
|
// Ensure that all the groups in this accordion are closed, unless close-others explicitly says not to
|
184
174
|
this.closeOthers = function(openGroup) {
|
185
175
|
var closeOthers = angular.isDefined($attrs.closeOthers) ? $scope.$eval($attrs.closeOthers) : accordionConfig.closeOthers;
|
@@ -225,7 +215,7 @@ angular.module('ui.bootstrap.accordion', ['ui.bootstrap.collapse'])
|
|
225
215
|
})
|
226
216
|
|
227
217
|
// The accordion-group directive indicates a block of html that will expand and collapse in an accordion
|
228
|
-
.directive('accordionGroup', ['$parse',
|
218
|
+
.directive('accordionGroup', ['$parse', function($parse) {
|
229
219
|
return {
|
230
220
|
require:'^accordion', // We need this directive to be inside an accordion
|
231
221
|
restrict:'EA',
|
@@ -233,11 +223,11 @@ angular.module('ui.bootstrap.accordion', ['ui.bootstrap.collapse'])
|
|
233
223
|
replace: true, // The element containing the directive will be replaced with the template
|
234
224
|
templateUrl:'template/accordion/accordion-group.html',
|
235
225
|
scope:{ heading:'@' }, // Create an isolated scope and interpolate the heading attribute onto this scope
|
236
|
-
controller:
|
226
|
+
controller: function() {
|
237
227
|
this.setHeading = function(element) {
|
238
228
|
this.heading = element;
|
239
229
|
};
|
240
|
-
}
|
230
|
+
},
|
241
231
|
link: function(scope, element, attrs, accordionCtrl) {
|
242
232
|
var getIsOpen, setIsOpen;
|
243
233
|
|
@@ -249,7 +239,7 @@ angular.module('ui.bootstrap.accordion', ['ui.bootstrap.collapse'])
|
|
249
239
|
getIsOpen = $parse(attrs.isOpen);
|
250
240
|
setIsOpen = getIsOpen.assign;
|
251
241
|
|
252
|
-
|
242
|
+
scope.$parent.$watch(getIsOpen, function(value) {
|
253
243
|
scope.isOpen = !!value;
|
254
244
|
});
|
255
245
|
}
|
@@ -259,7 +249,7 @@ angular.module('ui.bootstrap.accordion', ['ui.bootstrap.collapse'])
|
|
259
249
|
accordionCtrl.closeOthers(scope);
|
260
250
|
}
|
261
251
|
if ( setIsOpen ) {
|
262
|
-
setIsOpen(
|
252
|
+
setIsOpen(scope.$parent, value);
|
263
253
|
}
|
264
254
|
});
|
265
255
|
}
|
@@ -308,18 +298,22 @@ angular.module('ui.bootstrap.accordion', ['ui.bootstrap.collapse'])
|
|
308
298
|
};
|
309
299
|
});
|
310
300
|
|
311
|
-
angular.module("ui.bootstrap.alert", [])
|
301
|
+
angular.module("ui.bootstrap.alert", [])
|
302
|
+
|
303
|
+
.controller('AlertController', ['$scope', '$attrs', function ($scope, $attrs) {
|
304
|
+
$scope.closeable = 'close' in $attrs;
|
305
|
+
}])
|
306
|
+
|
307
|
+
.directive('alert', function () {
|
312
308
|
return {
|
313
309
|
restrict:'EA',
|
310
|
+
controller:'AlertController',
|
314
311
|
templateUrl:'template/alert/alert.html',
|
315
312
|
transclude:true,
|
316
313
|
replace:true,
|
317
314
|
scope: {
|
318
315
|
type: '=',
|
319
316
|
close: '&'
|
320
|
-
},
|
321
|
-
link: function(scope, iElement, iAttrs) {
|
322
|
-
scope.closeable = "close" in iAttrs;
|
323
317
|
}
|
324
318
|
};
|
325
319
|
});
|
@@ -341,22 +335,26 @@ angular.module('ui.bootstrap.buttons', [])
|
|
341
335
|
toggleEvent: 'click'
|
342
336
|
})
|
343
337
|
|
344
|
-
.
|
345
|
-
|
346
|
-
|
338
|
+
.controller('ButtonsController', ['buttonConfig', function(buttonConfig) {
|
339
|
+
this.activeClass = buttonConfig.activeClass || 'active';
|
340
|
+
this.toggleEvent = buttonConfig.toggleEvent || 'click';
|
341
|
+
}])
|
347
342
|
|
343
|
+
.directive('btnRadio', function () {
|
348
344
|
return {
|
349
|
-
require: 'ngModel',
|
350
|
-
|
345
|
+
require: ['btnRadio', 'ngModel'],
|
346
|
+
controller: 'ButtonsController',
|
347
|
+
link: function (scope, element, attrs, ctrls) {
|
348
|
+
var buttonsCtrl = ctrls[0], ngModelCtrl = ctrls[1];
|
351
349
|
|
352
350
|
//model -> UI
|
353
351
|
ngModelCtrl.$render = function () {
|
354
|
-
element.toggleClass(activeClass, angular.equals(ngModelCtrl.$modelValue, scope.$eval(attrs.btnRadio)));
|
352
|
+
element.toggleClass(buttonsCtrl.activeClass, angular.equals(ngModelCtrl.$modelValue, scope.$eval(attrs.btnRadio)));
|
355
353
|
};
|
356
354
|
|
357
355
|
//ui->model
|
358
|
-
element.bind(toggleEvent, function () {
|
359
|
-
if (!element.hasClass(activeClass)) {
|
356
|
+
element.bind(buttonsCtrl.toggleEvent, function () {
|
357
|
+
if (!element.hasClass(buttonsCtrl.activeClass)) {
|
360
358
|
scope.$apply(function () {
|
361
359
|
ngModelCtrl.$setViewValue(scope.$eval(attrs.btnRadio));
|
362
360
|
ngModelCtrl.$render();
|
@@ -365,41 +363,43 @@ angular.module('ui.bootstrap.buttons', [])
|
|
365
363
|
});
|
366
364
|
}
|
367
365
|
};
|
368
|
-
}
|
369
|
-
|
370
|
-
.directive('btnCheckbox', ['buttonConfig', function (buttonConfig) {
|
371
|
-
var activeClass = buttonConfig.activeClass || 'active';
|
372
|
-
var toggleEvent = buttonConfig.toggleEvent || 'click';
|
366
|
+
})
|
373
367
|
|
368
|
+
.directive('btnCheckbox', function () {
|
374
369
|
return {
|
375
|
-
require: 'ngModel',
|
376
|
-
|
370
|
+
require: ['btnCheckbox', 'ngModel'],
|
371
|
+
controller: 'ButtonsController',
|
372
|
+
link: function (scope, element, attrs, ctrls) {
|
373
|
+
var buttonsCtrl = ctrls[0], ngModelCtrl = ctrls[1];
|
377
374
|
|
378
375
|
function getTrueValue() {
|
379
|
-
|
380
|
-
return angular.isDefined(trueValue) ? trueValue : true;
|
376
|
+
return getCheckboxValue(attrs.btnCheckboxTrue, true);
|
381
377
|
}
|
382
378
|
|
383
379
|
function getFalseValue() {
|
384
|
-
|
385
|
-
|
380
|
+
return getCheckboxValue(attrs.btnCheckboxFalse, false);
|
381
|
+
}
|
382
|
+
|
383
|
+
function getCheckboxValue(attributeValue, defaultValue) {
|
384
|
+
var val = scope.$eval(attributeValue);
|
385
|
+
return angular.isDefined(val) ? val : defaultValue;
|
386
386
|
}
|
387
387
|
|
388
388
|
//model -> UI
|
389
389
|
ngModelCtrl.$render = function () {
|
390
|
-
element.toggleClass(activeClass, angular.equals(ngModelCtrl.$modelValue, getTrueValue()));
|
390
|
+
element.toggleClass(buttonsCtrl.activeClass, angular.equals(ngModelCtrl.$modelValue, getTrueValue()));
|
391
391
|
};
|
392
392
|
|
393
393
|
//ui->model
|
394
|
-
element.bind(toggleEvent, function () {
|
394
|
+
element.bind(buttonsCtrl.toggleEvent, function () {
|
395
395
|
scope.$apply(function () {
|
396
|
-
ngModelCtrl.$setViewValue(element.hasClass(activeClass) ? getFalseValue() : getTrueValue());
|
396
|
+
ngModelCtrl.$setViewValue(element.hasClass(buttonsCtrl.activeClass) ? getFalseValue() : getTrueValue());
|
397
397
|
ngModelCtrl.$render();
|
398
398
|
});
|
399
399
|
});
|
400
400
|
}
|
401
401
|
};
|
402
|
-
}
|
402
|
+
});
|
403
403
|
|
404
404
|
/**
|
405
405
|
* @ngdoc overview
|
@@ -417,6 +417,7 @@ angular.module('ui.bootstrap.carousel', ['ui.bootstrap.transition'])
|
|
417
417
|
currentTimeout, isPlaying;
|
418
418
|
self.currentSlide = null;
|
419
419
|
|
420
|
+
var destroyed = false;
|
420
421
|
/* direction: "prev" or "next" */
|
421
422
|
self.select = function(nextSlide, direction) {
|
422
423
|
var nextIndex = slides.indexOf(nextSlide);
|
@@ -434,6 +435,8 @@ angular.module('ui.bootstrap.carousel', ['ui.bootstrap.transition'])
|
|
434
435
|
}
|
435
436
|
}
|
436
437
|
function goNext() {
|
438
|
+
// Scope has been destroyed, stop here.
|
439
|
+
if (destroyed) { return; }
|
437
440
|
//If we have a slide to transition from and we have a transition type and we're allowed, go
|
438
441
|
if (self.currentSlide && angular.isString(direction) && !$scope.noTransition && nextSlide.$element) {
|
439
442
|
//We shouldn't do class manip in here, but it's the same weird thing bootstrap does. need to fix sometime
|
@@ -469,6 +472,9 @@ angular.module('ui.bootstrap.carousel', ['ui.bootstrap.transition'])
|
|
469
472
|
$scope.$currentTransition = null;
|
470
473
|
}
|
471
474
|
};
|
475
|
+
$scope.$on('$destroy', function () {
|
476
|
+
destroyed = true;
|
477
|
+
});
|
472
478
|
|
473
479
|
/* Allow outside people to call indexOf on slides array */
|
474
480
|
self.indexOfSlide = function(slide) {
|
@@ -506,23 +512,32 @@ angular.module('ui.bootstrap.carousel', ['ui.bootstrap.transition'])
|
|
506
512
|
};
|
507
513
|
|
508
514
|
$scope.$watch('interval', restartTimer);
|
515
|
+
$scope.$on('$destroy', resetTimer);
|
516
|
+
|
509
517
|
function restartTimer() {
|
518
|
+
resetTimer();
|
519
|
+
var interval = +$scope.interval;
|
520
|
+
if (!isNaN(interval) && interval>=0) {
|
521
|
+
currentTimeout = $timeout(timerFn, interval);
|
522
|
+
}
|
523
|
+
}
|
524
|
+
|
525
|
+
function resetTimer() {
|
510
526
|
if (currentTimeout) {
|
511
527
|
$timeout.cancel(currentTimeout);
|
528
|
+
currentTimeout = null;
|
512
529
|
}
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
var interval = +$scope.interval;
|
522
|
-
if (!isNaN(interval) && interval>=0) {
|
523
|
-
currentTimeout = $timeout(go, interval);
|
530
|
+
}
|
531
|
+
|
532
|
+
function timerFn() {
|
533
|
+
if (isPlaying) {
|
534
|
+
$scope.next();
|
535
|
+
restartTimer();
|
536
|
+
} else {
|
537
|
+
$scope.pause();
|
524
538
|
}
|
525
539
|
}
|
540
|
+
|
526
541
|
$scope.play = function() {
|
527
542
|
if (!isPlaying) {
|
528
543
|
isPlaying = true;
|
@@ -532,9 +547,7 @@ angular.module('ui.bootstrap.carousel', ['ui.bootstrap.transition'])
|
|
532
547
|
$scope.pause = function() {
|
533
548
|
if (!$scope.noPause) {
|
534
549
|
isPlaying = false;
|
535
|
-
|
536
|
-
$timeout.cancel(currentTimeout);
|
537
|
-
}
|
550
|
+
resetTimer();
|
538
551
|
}
|
539
552
|
};
|
540
553
|
|
@@ -566,6 +579,7 @@ angular.module('ui.bootstrap.carousel', ['ui.bootstrap.transition'])
|
|
566
579
|
currentIndex--;
|
567
580
|
}
|
568
581
|
};
|
582
|
+
|
569
583
|
}])
|
570
584
|
|
571
585
|
/**
|
@@ -1033,7 +1047,7 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.position'])
|
|
1033
1047
|
|
1034
1048
|
scope.select = function( date ) {
|
1035
1049
|
if ( mode === 0 ) {
|
1036
|
-
var dt = new Date( ngModel.$modelValue );
|
1050
|
+
var dt = ngModel.$modelValue ? new Date( ngModel.$modelValue ) : new Date(0, 0, 0, 0, 0, 0, 0);
|
1037
1051
|
dt.setFullYear( date.getFullYear(), date.getMonth(), date.getDate() );
|
1038
1052
|
ngModel.$setViewValue( dt );
|
1039
1053
|
refill( true );
|
@@ -1074,7 +1088,8 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.position'])
|
|
1074
1088
|
clearText: 'Clear',
|
1075
1089
|
closeText: 'Done',
|
1076
1090
|
closeOnDateSelection: true,
|
1077
|
-
appendToBody: false
|
1091
|
+
appendToBody: false,
|
1092
|
+
showButtonBar: true
|
1078
1093
|
})
|
1079
1094
|
|
1080
1095
|
.directive('datepickerPopup', ['$compile', '$parse', '$document', '$position', 'dateFilter', 'datepickerPopupConfig', 'datepickerConfig',
|
@@ -1083,19 +1098,20 @@ function ($compile, $parse, $document, $position, dateFilter, datepickerPopupCon
|
|
1083
1098
|
restrict: 'EA',
|
1084
1099
|
require: 'ngModel',
|
1085
1100
|
link: function(originalScope, element, attrs, ngModel) {
|
1086
|
-
var
|
1101
|
+
var scope = originalScope.$new(), // create a child scope so we are not polluting original one
|
1102
|
+
dateFormat,
|
1103
|
+
closeOnDateSelection = angular.isDefined(attrs.closeOnDateSelection) ? originalScope.$eval(attrs.closeOnDateSelection) : datepickerPopupConfig.closeOnDateSelection,
|
1104
|
+
appendToBody = angular.isDefined(attrs.datepickerAppendToBody) ? originalScope.$eval(attrs.datepickerAppendToBody) : datepickerPopupConfig.appendToBody;
|
1105
|
+
|
1087
1106
|
attrs.$observe('datepickerPopup', function(value) {
|
1088
1107
|
dateFormat = value || datepickerPopupConfig.dateFormat;
|
1089
1108
|
ngModel.$render();
|
1090
1109
|
});
|
1091
1110
|
|
1092
|
-
|
1093
|
-
var appendToBody = angular.isDefined(attrs.datepickerAppendToBody) ? originalScope.$eval(attrs.datepickerAppendToBody) : datepickerPopupConfig.appendToBody;
|
1094
|
-
|
1095
|
-
// create a child scope for the datepicker directive so we are not polluting original scope
|
1096
|
-
var scope = originalScope.$new();
|
1111
|
+
scope.showButtonBar = angular.isDefined(attrs.showButtonBar) ? originalScope.$eval(attrs.showButtonBar) : datepickerPopupConfig.showButtonBar;
|
1097
1112
|
|
1098
1113
|
originalScope.$on('$destroy', function() {
|
1114
|
+
$popup.remove();
|
1099
1115
|
scope.$destroy();
|
1100
1116
|
});
|
1101
1117
|
|
@@ -1181,7 +1197,10 @@ function ($compile, $parse, $document, $position, dateFilter, datepickerPopupCon
|
|
1181
1197
|
ngModel.$parsers.unshift(parseDate);
|
1182
1198
|
|
1183
1199
|
// Inner change
|
1184
|
-
scope.dateSelection = function() {
|
1200
|
+
scope.dateSelection = function(dt) {
|
1201
|
+
if (angular.isDefined(dt)) {
|
1202
|
+
scope.date = dt;
|
1203
|
+
}
|
1185
1204
|
ngModel.$setViewValue(scope.date);
|
1186
1205
|
ngModel.$render();
|
1187
1206
|
|
@@ -1192,7 +1211,7 @@ function ($compile, $parse, $document, $position, dateFilter, datepickerPopupCon
|
|
1192
1211
|
|
1193
1212
|
element.bind('input change keyup', function() {
|
1194
1213
|
scope.$apply(function() {
|
1195
|
-
|
1214
|
+
scope.date = ngModel.$modelValue;
|
1196
1215
|
});
|
1197
1216
|
});
|
1198
1217
|
|
@@ -1200,14 +1219,8 @@ function ($compile, $parse, $document, $position, dateFilter, datepickerPopupCon
|
|
1200
1219
|
ngModel.$render = function() {
|
1201
1220
|
var date = ngModel.$viewValue ? dateFilter(ngModel.$viewValue, dateFormat) : '';
|
1202
1221
|
element.val(date);
|
1203
|
-
|
1204
|
-
updateCalendar();
|
1205
|
-
};
|
1206
|
-
|
1207
|
-
function updateCalendar() {
|
1208
1222
|
scope.date = ngModel.$modelValue;
|
1209
|
-
|
1210
|
-
}
|
1223
|
+
};
|
1211
1224
|
|
1212
1225
|
function addWatchableAttribute(attribute, scopeProperty, datepickerAttribute) {
|
1213
1226
|
if (attribute) {
|
@@ -1257,13 +1270,11 @@ function ($compile, $parse, $document, $position, dateFilter, datepickerPopupCon
|
|
1257
1270
|
}
|
1258
1271
|
});
|
1259
1272
|
|
1260
|
-
var $setModelValue = $parse(attrs.ngModel).assign;
|
1261
|
-
|
1262
1273
|
scope.today = function() {
|
1263
|
-
|
1274
|
+
scope.dateSelection(new Date());
|
1264
1275
|
};
|
1265
1276
|
scope.clear = function() {
|
1266
|
-
|
1277
|
+
scope.dateSelection(null);
|
1267
1278
|
};
|
1268
1279
|
|
1269
1280
|
var $popup = $compile(popupEl)(scope);
|
@@ -1408,7 +1419,10 @@ angular.module('ui.bootstrap.modal', [])
|
|
1408
1419
|
restrict: 'EA',
|
1409
1420
|
replace: true,
|
1410
1421
|
templateUrl: 'template/modal/backdrop.html',
|
1411
|
-
link: function (scope
|
1422
|
+
link: function (scope) {
|
1423
|
+
|
1424
|
+
scope.animate = false;
|
1425
|
+
|
1412
1426
|
//trigger CSS transitions
|
1413
1427
|
$timeout(function () {
|
1414
1428
|
scope.animate = true;
|
@@ -1429,9 +1443,11 @@ angular.module('ui.bootstrap.modal', [])
|
|
1429
1443
|
link: function (scope, element, attrs) {
|
1430
1444
|
scope.windowClass = attrs.windowClass || '';
|
1431
1445
|
|
1432
|
-
//trigger CSS transitions
|
1433
1446
|
$timeout(function () {
|
1447
|
+
// trigger CSS transitions
|
1434
1448
|
scope.animate = true;
|
1449
|
+
// focus a freshly-opened modal
|
1450
|
+
element[0].focus();
|
1435
1451
|
});
|
1436
1452
|
|
1437
1453
|
scope.close = function (evt) {
|
@@ -1449,9 +1465,10 @@ angular.module('ui.bootstrap.modal', [])
|
|
1449
1465
|
.factory('$modalStack', ['$document', '$compile', '$rootScope', '$$stackedMap',
|
1450
1466
|
function ($document, $compile, $rootScope, $$stackedMap) {
|
1451
1467
|
|
1468
|
+
var OPENED_MODAL_CLASS = 'modal-open';
|
1469
|
+
|
1452
1470
|
var backdropjqLiteEl, backdropDomEl;
|
1453
1471
|
var backdropScope = $rootScope.$new(true);
|
1454
|
-
var body = $document.find('body').eq(0);
|
1455
1472
|
var openedWindows = $$stackedMap.createNew();
|
1456
1473
|
var $modalStack = {};
|
1457
1474
|
|
@@ -1466,16 +1483,13 @@ angular.module('ui.bootstrap.modal', [])
|
|
1466
1483
|
return topBackdropIndex;
|
1467
1484
|
}
|
1468
1485
|
|
1469
|
-
$rootScope.$watch(openedWindows.length, function(noOfModals){
|
1470
|
-
body.toggleClass('modal-open', openedWindows.length() > 0);
|
1471
|
-
});
|
1472
|
-
|
1473
1486
|
$rootScope.$watch(backdropIndex, function(newBackdropIndex){
|
1474
1487
|
backdropScope.index = newBackdropIndex;
|
1475
1488
|
});
|
1476
1489
|
|
1477
1490
|
function removeModalWindow(modalInstance) {
|
1478
1491
|
|
1492
|
+
var body = $document.find('body').eq(0);
|
1479
1493
|
var modalWindow = openedWindows.get(modalInstance).value;
|
1480
1494
|
|
1481
1495
|
//clean up the stack
|
@@ -1483,6 +1497,7 @@ angular.module('ui.bootstrap.modal', [])
|
|
1483
1497
|
|
1484
1498
|
//remove window DOM element
|
1485
1499
|
modalWindow.modalDomEl.remove();
|
1500
|
+
body.toggleClass(OPENED_MODAL_CLASS, openedWindows.length() > 0);
|
1486
1501
|
|
1487
1502
|
//remove backdrop if no longer needed
|
1488
1503
|
if (backdropDomEl && backdropIndex() == -1) {
|
@@ -1516,6 +1531,14 @@ angular.module('ui.bootstrap.modal', [])
|
|
1516
1531
|
keyboard: modal.keyboard
|
1517
1532
|
});
|
1518
1533
|
|
1534
|
+
var body = $document.find('body').eq(0);
|
1535
|
+
|
1536
|
+
if (backdropIndex() >= 0 && !backdropDomEl) {
|
1537
|
+
backdropjqLiteEl = angular.element('<div modal-backdrop></div>');
|
1538
|
+
backdropDomEl = $compile(backdropjqLiteEl)(backdropScope);
|
1539
|
+
body.append(backdropDomEl);
|
1540
|
+
}
|
1541
|
+
|
1519
1542
|
var angularDomEl = angular.element('<div modal-window></div>');
|
1520
1543
|
angularDomEl.attr('window-class', modal.windowClass);
|
1521
1544
|
angularDomEl.attr('index', openedWindows.length() - 1);
|
@@ -1524,12 +1547,7 @@ angular.module('ui.bootstrap.modal', [])
|
|
1524
1547
|
var modalDomEl = $compile(angularDomEl)(modal.scope);
|
1525
1548
|
openedWindows.top().value.modalDomEl = modalDomEl;
|
1526
1549
|
body.append(modalDomEl);
|
1527
|
-
|
1528
|
-
if (backdropIndex() >= 0 && !backdropDomEl) {
|
1529
|
-
backdropjqLiteEl = angular.element('<div modal-backdrop></div>');
|
1530
|
-
backdropDomEl = $compile(backdropjqLiteEl)(backdropScope);
|
1531
|
-
body.append(backdropDomEl);
|
1532
|
-
}
|
1550
|
+
body.addClass(OPENED_MODAL_CLASS);
|
1533
1551
|
};
|
1534
1552
|
|
1535
1553
|
$modalStack.close = function (modalInstance, result) {
|
@@ -2003,14 +2021,14 @@ angular.module( 'ui.bootstrap.tooltip', [ 'ui.bootstrap.position', 'ui.bootstrap
|
|
2003
2021
|
var startSym = $interpolate.startSymbol();
|
2004
2022
|
var endSym = $interpolate.endSymbol();
|
2005
2023
|
var template =
|
2006
|
-
'<'+ directiveName +'-popup '+
|
2024
|
+
'<div '+ directiveName +'-popup '+
|
2007
2025
|
'title="'+startSym+'tt_title'+endSym+'" '+
|
2008
2026
|
'content="'+startSym+'tt_content'+endSym+'" '+
|
2009
2027
|
'placement="'+startSym+'tt_placement'+endSym+'" '+
|
2010
|
-
'animation="tt_animation
|
2028
|
+
'animation="tt_animation" '+
|
2011
2029
|
'is-open="tt_isOpen"'+
|
2012
2030
|
'>'+
|
2013
|
-
'</
|
2031
|
+
'</div>';
|
2014
2032
|
|
2015
2033
|
return {
|
2016
2034
|
restrict: 'EA',
|
@@ -2019,12 +2037,60 @@ angular.module( 'ui.bootstrap.tooltip', [ 'ui.bootstrap.position', 'ui.bootstrap
|
|
2019
2037
|
var tooltip = $compile( template )( scope );
|
2020
2038
|
var transitionTimeout;
|
2021
2039
|
var popupTimeout;
|
2022
|
-
var $body;
|
2023
2040
|
var appendToBody = angular.isDefined( options.appendToBody ) ? options.appendToBody : false;
|
2024
2041
|
var triggers = getTriggers( undefined );
|
2025
2042
|
var hasRegisteredTriggers = false;
|
2026
2043
|
var hasEnableExp = angular.isDefined(attrs[prefix+'Enable']);
|
2027
2044
|
|
2045
|
+
var positionTooltip = function (){
|
2046
|
+
var position,
|
2047
|
+
ttWidth,
|
2048
|
+
ttHeight,
|
2049
|
+
ttPosition;
|
2050
|
+
// Get the position of the directive element.
|
2051
|
+
position = appendToBody ? $position.offset( element ) : $position.position( element );
|
2052
|
+
|
2053
|
+
// Get the height and width of the tooltip so we can center it.
|
2054
|
+
ttWidth = tooltip.prop( 'offsetWidth' );
|
2055
|
+
ttHeight = tooltip.prop( 'offsetHeight' );
|
2056
|
+
|
2057
|
+
// Calculate the tooltip's top and left coordinates to center it with
|
2058
|
+
// this directive.
|
2059
|
+
switch ( scope.tt_placement ) {
|
2060
|
+
case 'right':
|
2061
|
+
ttPosition = {
|
2062
|
+
top: position.top + position.height / 2 - ttHeight / 2,
|
2063
|
+
left: position.left + position.width
|
2064
|
+
};
|
2065
|
+
break;
|
2066
|
+
case 'bottom':
|
2067
|
+
ttPosition = {
|
2068
|
+
top: position.top + position.height,
|
2069
|
+
left: position.left + position.width / 2 - ttWidth / 2
|
2070
|
+
};
|
2071
|
+
break;
|
2072
|
+
case 'left':
|
2073
|
+
ttPosition = {
|
2074
|
+
top: position.top + position.height / 2 - ttHeight / 2,
|
2075
|
+
left: position.left - ttWidth
|
2076
|
+
};
|
2077
|
+
break;
|
2078
|
+
default:
|
2079
|
+
ttPosition = {
|
2080
|
+
top: position.top - ttHeight,
|
2081
|
+
left: position.left + position.width / 2 - ttWidth / 2
|
2082
|
+
};
|
2083
|
+
break;
|
2084
|
+
}
|
2085
|
+
|
2086
|
+
ttPosition.top += 'px';
|
2087
|
+
ttPosition.left += 'px';
|
2088
|
+
|
2089
|
+
// Now set the calculated positioning.
|
2090
|
+
tooltip.css( ttPosition );
|
2091
|
+
|
2092
|
+
};
|
2093
|
+
|
2028
2094
|
// By default, the tooltip is not open.
|
2029
2095
|
// TODO add ability to start tooltip opened
|
2030
2096
|
scope.tt_isOpen = false;
|
@@ -2044,8 +2110,9 @@ angular.module( 'ui.bootstrap.tooltip', [ 'ui.bootstrap.position', 'ui.bootstrap
|
|
2044
2110
|
}
|
2045
2111
|
if ( scope.tt_popupDelay ) {
|
2046
2112
|
popupTimeout = $timeout( show, scope.tt_popupDelay );
|
2113
|
+
popupTimeout.then(function(reposition){reposition();});
|
2047
2114
|
} else {
|
2048
|
-
scope.$apply( show );
|
2115
|
+
scope.$apply( show )();
|
2049
2116
|
}
|
2050
2117
|
}
|
2051
2118
|
|
@@ -2057,14 +2124,11 @@ angular.module( 'ui.bootstrap.tooltip', [ 'ui.bootstrap.position', 'ui.bootstrap
|
|
2057
2124
|
|
2058
2125
|
// Show the tooltip popup element.
|
2059
2126
|
function show() {
|
2060
|
-
|
2061
|
-
ttWidth,
|
2062
|
-
ttHeight,
|
2063
|
-
ttPosition;
|
2127
|
+
|
2064
2128
|
|
2065
2129
|
// Don't show empty tooltips.
|
2066
2130
|
if ( ! scope.tt_content ) {
|
2067
|
-
return;
|
2131
|
+
return angular.noop;
|
2068
2132
|
}
|
2069
2133
|
|
2070
2134
|
// If there is a pending remove transition, we must cancel it, lest the
|
@@ -2079,56 +2143,19 @@ angular.module( 'ui.bootstrap.tooltip', [ 'ui.bootstrap.position', 'ui.bootstrap
|
|
2079
2143
|
// Now we add it to the DOM because need some info about it. But it's not
|
2080
2144
|
// visible yet anyway.
|
2081
2145
|
if ( appendToBody ) {
|
2082
|
-
$
|
2083
|
-
$body.append( tooltip );
|
2146
|
+
$document.find( 'body' ).append( tooltip );
|
2084
2147
|
} else {
|
2085
2148
|
element.after( tooltip );
|
2086
2149
|
}
|
2087
2150
|
|
2088
|
-
|
2089
|
-
position = appendToBody ? $position.offset( element ) : $position.position( element );
|
2090
|
-
|
2091
|
-
// Get the height and width of the tooltip so we can center it.
|
2092
|
-
ttWidth = tooltip.prop( 'offsetWidth' );
|
2093
|
-
ttHeight = tooltip.prop( 'offsetHeight' );
|
2094
|
-
|
2095
|
-
// Calculate the tooltip's top and left coordinates to center it with
|
2096
|
-
// this directive.
|
2097
|
-
switch ( scope.tt_placement ) {
|
2098
|
-
case 'right':
|
2099
|
-
ttPosition = {
|
2100
|
-
top: position.top + position.height / 2 - ttHeight / 2,
|
2101
|
-
left: position.left + position.width
|
2102
|
-
};
|
2103
|
-
break;
|
2104
|
-
case 'bottom':
|
2105
|
-
ttPosition = {
|
2106
|
-
top: position.top + position.height,
|
2107
|
-
left: position.left + position.width / 2 - ttWidth / 2
|
2108
|
-
};
|
2109
|
-
break;
|
2110
|
-
case 'left':
|
2111
|
-
ttPosition = {
|
2112
|
-
top: position.top + position.height / 2 - ttHeight / 2,
|
2113
|
-
left: position.left - ttWidth
|
2114
|
-
};
|
2115
|
-
break;
|
2116
|
-
default:
|
2117
|
-
ttPosition = {
|
2118
|
-
top: position.top - ttHeight,
|
2119
|
-
left: position.left + position.width / 2 - ttWidth / 2
|
2120
|
-
};
|
2121
|
-
break;
|
2122
|
-
}
|
2123
|
-
|
2124
|
-
ttPosition.top += 'px';
|
2125
|
-
ttPosition.left += 'px';
|
2151
|
+
positionTooltip();
|
2126
2152
|
|
2127
|
-
// Now set the calculated positioning.
|
2128
|
-
tooltip.css( ttPosition );
|
2129
|
-
|
2130
2153
|
// And show the tooltip.
|
2131
2154
|
scope.tt_isOpen = true;
|
2155
|
+
|
2156
|
+
// Return positioning function as promise callback for correct
|
2157
|
+
// positioning after draw.
|
2158
|
+
return positionTooltip;
|
2132
2159
|
}
|
2133
2160
|
|
2134
2161
|
// Hide the tooltip popup element.
|
@@ -2142,8 +2169,10 @@ angular.module( 'ui.bootstrap.tooltip', [ 'ui.bootstrap.position', 'ui.bootstrap
|
|
2142
2169
|
// And now we remove it from the DOM. However, if we have animation, we
|
2143
2170
|
// need to wait for it to expire beforehand.
|
2144
2171
|
// FIXME: this is a placeholder for a port of the transitions library.
|
2145
|
-
if (
|
2146
|
-
transitionTimeout = $timeout(
|
2172
|
+
if ( scope.tt_animation ) {
|
2173
|
+
transitionTimeout = $timeout(function () {
|
2174
|
+
tooltip.remove();
|
2175
|
+
}, 500);
|
2147
2176
|
} else {
|
2148
2177
|
tooltip.remove();
|
2149
2178
|
}
|
@@ -2153,12 +2182,10 @@ angular.module( 'ui.bootstrap.tooltip', [ 'ui.bootstrap.position', 'ui.bootstrap
|
|
2153
2182
|
* Observe the relevant attributes.
|
2154
2183
|
*/
|
2155
2184
|
attrs.$observe( type, function ( val ) {
|
2156
|
-
|
2157
|
-
|
2158
|
-
|
2159
|
-
|
2160
|
-
hide();
|
2161
|
-
}
|
2185
|
+
scope.tt_content = val;
|
2186
|
+
|
2187
|
+
if (!val && scope.tt_isOpen ) {
|
2188
|
+
hide();
|
2162
2189
|
}
|
2163
2190
|
});
|
2164
2191
|
|
@@ -2170,21 +2197,20 @@ angular.module( 'ui.bootstrap.tooltip', [ 'ui.bootstrap.position', 'ui.bootstrap
|
|
2170
2197
|
scope.tt_placement = angular.isDefined( val ) ? val : options.placement;
|
2171
2198
|
});
|
2172
2199
|
|
2173
|
-
attrs.$observe( prefix+'Animation', function ( val ) {
|
2174
|
-
scope.tt_animation = angular.isDefined( val ) ? $parse( val ) : function(){ return options.animation; };
|
2175
|
-
});
|
2176
|
-
|
2177
2200
|
attrs.$observe( prefix+'PopupDelay', function ( val ) {
|
2178
2201
|
var delay = parseInt( val, 10 );
|
2179
2202
|
scope.tt_popupDelay = ! isNaN(delay) ? delay : options.popupDelay;
|
2180
2203
|
});
|
2181
2204
|
|
2182
|
-
|
2183
|
-
|
2205
|
+
var unregisterTriggers = function() {
|
2184
2206
|
if (hasRegisteredTriggers) {
|
2185
2207
|
element.unbind( triggers.show, showTooltipBind );
|
2186
2208
|
element.unbind( triggers.hide, hideTooltipBind );
|
2187
2209
|
}
|
2210
|
+
};
|
2211
|
+
|
2212
|
+
attrs.$observe( prefix+'Trigger', function ( val ) {
|
2213
|
+
unregisterTriggers();
|
2188
2214
|
|
2189
2215
|
triggers = getTriggers( val );
|
2190
2216
|
|
@@ -2198,6 +2224,9 @@ angular.module( 'ui.bootstrap.tooltip', [ 'ui.bootstrap.position', 'ui.bootstrap
|
|
2198
2224
|
hasRegisteredTriggers = true;
|
2199
2225
|
});
|
2200
2226
|
|
2227
|
+
var animation = scope.$eval(attrs[prefix + 'Animation']);
|
2228
|
+
scope.tt_animation = angular.isDefined(animation) ? !!animation : options.animation;
|
2229
|
+
|
2201
2230
|
attrs.$observe( prefix+'AppendToBody', function ( val ) {
|
2202
2231
|
appendToBody = angular.isDefined( val ) ? $parse( val )( scope ) : appendToBody;
|
2203
2232
|
});
|
@@ -2215,11 +2244,12 @@ angular.module( 'ui.bootstrap.tooltip', [ 'ui.bootstrap.position', 'ui.bootstrap
|
|
2215
2244
|
|
2216
2245
|
// Make sure tooltip is destroyed and removed.
|
2217
2246
|
scope.$on('$destroy', function onDestroyTooltip() {
|
2218
|
-
|
2219
|
-
|
2220
|
-
|
2221
|
-
|
2222
|
-
|
2247
|
+
$timeout.cancel( transitionTimeout );
|
2248
|
+
$timeout.cancel( popupTimeout );
|
2249
|
+
unregisterTriggers();
|
2250
|
+
tooltip.remove();
|
2251
|
+
tooltip.unbind();
|
2252
|
+
tooltip = null;
|
2223
2253
|
});
|
2224
2254
|
}
|
2225
2255
|
};
|
@@ -2229,7 +2259,7 @@ angular.module( 'ui.bootstrap.tooltip', [ 'ui.bootstrap.position', 'ui.bootstrap
|
|
2229
2259
|
|
2230
2260
|
.directive( 'tooltipPopup', function () {
|
2231
2261
|
return {
|
2232
|
-
restrict: '
|
2262
|
+
restrict: 'EA',
|
2233
2263
|
replace: true,
|
2234
2264
|
scope: { content: '@', placement: '@', animation: '&', isOpen: '&' },
|
2235
2265
|
templateUrl: 'template/tooltip/tooltip-popup.html'
|
@@ -2242,7 +2272,7 @@ angular.module( 'ui.bootstrap.tooltip', [ 'ui.bootstrap.position', 'ui.bootstrap
|
|
2242
2272
|
|
2243
2273
|
.directive( 'tooltipHtmlUnsafePopup', function () {
|
2244
2274
|
return {
|
2245
|
-
restrict: '
|
2275
|
+
restrict: 'EA',
|
2246
2276
|
replace: true,
|
2247
2277
|
scope: { content: '@', placement: '@', animation: '&', isOpen: '&' },
|
2248
2278
|
templateUrl: 'template/tooltip/tooltip-html-unsafe-popup.html'
|
@@ -2276,108 +2306,102 @@ angular.module('ui.bootstrap.progressbar', ['ui.bootstrap.transition'])
|
|
2276
2306
|
|
2277
2307
|
.constant('progressConfig', {
|
2278
2308
|
animate: true,
|
2279
|
-
|
2280
|
-
stackedTypes: ['success', 'info', 'warning', 'danger']
|
2309
|
+
max: 100
|
2281
2310
|
})
|
2282
2311
|
|
2283
|
-
.controller('
|
2312
|
+
.controller('ProgressController', ['$scope', '$attrs', 'progressConfig', '$transition', function($scope, $attrs, progressConfig, $transition) {
|
2313
|
+
var self = this,
|
2314
|
+
bars = [],
|
2315
|
+
max = angular.isDefined($attrs.max) ? $scope.$parent.$eval($attrs.max) : progressConfig.max,
|
2316
|
+
animate = angular.isDefined($attrs.animate) ? $scope.$parent.$eval($attrs.animate) : progressConfig.animate;
|
2284
2317
|
|
2285
|
-
|
2286
|
-
|
2287
|
-
|
2288
|
-
|
2318
|
+
this.addBar = function(bar, element) {
|
2319
|
+
var oldValue = 0, index = bar.$parent.$index;
|
2320
|
+
if ( angular.isDefined(index) && bars[index] ) {
|
2321
|
+
oldValue = bars[index].value;
|
2322
|
+
}
|
2323
|
+
bars.push(bar);
|
2289
2324
|
|
2290
|
-
|
2291
|
-
this.makeBar = function(newBar, oldBar, index) {
|
2292
|
-
var newValue = (angular.isObject(newBar)) ? newBar.value : (newBar || 0);
|
2293
|
-
var oldValue = (angular.isObject(oldBar)) ? oldBar.value : (oldBar || 0);
|
2294
|
-
var type = (angular.isObject(newBar) && angular.isDefined(newBar.type)) ? newBar.type : (autoType) ? getStackedType(index || 0) : null;
|
2325
|
+
this.update(element, bar.value, oldValue);
|
2295
2326
|
|
2296
|
-
|
2297
|
-
|
2298
|
-
|
2299
|
-
|
2300
|
-
|
2301
|
-
|
2327
|
+
bar.$watch('value', function(value, oldValue) {
|
2328
|
+
if (value !== oldValue) {
|
2329
|
+
self.update(element, value, oldValue);
|
2330
|
+
}
|
2331
|
+
});
|
2332
|
+
|
2333
|
+
bar.$on('$destroy', function() {
|
2334
|
+
self.removeBar(bar);
|
2335
|
+
});
|
2302
2336
|
};
|
2303
2337
|
|
2304
|
-
|
2305
|
-
|
2306
|
-
|
2338
|
+
// Update bar element width
|
2339
|
+
this.update = function(element, newValue, oldValue) {
|
2340
|
+
var percent = this.getPercentage(newValue);
|
2307
2341
|
|
2308
|
-
|
2309
|
-
|
2310
|
-
|
2342
|
+
if (animate) {
|
2343
|
+
element.css('width', this.getPercentage(oldValue) + '%');
|
2344
|
+
$transition(element, {width: percent + '%'});
|
2345
|
+
} else {
|
2346
|
+
element.css({'transition': 'none', 'width': percent + '%'});
|
2347
|
+
}
|
2311
2348
|
};
|
2312
2349
|
|
2313
|
-
this.
|
2314
|
-
|
2315
|
-
|
2350
|
+
this.removeBar = function(bar) {
|
2351
|
+
bars.splice(bars.indexOf(bar), 1);
|
2352
|
+
};
|
2353
|
+
|
2354
|
+
this.getPercentage = function(value) {
|
2355
|
+
return Math.round(100 * value / max);
|
2316
2356
|
};
|
2317
|
-
this.clearBars();
|
2318
2357
|
}])
|
2319
2358
|
|
2320
2359
|
.directive('progress', function() {
|
2321
2360
|
return {
|
2322
2361
|
restrict: 'EA',
|
2323
2362
|
replace: true,
|
2324
|
-
|
2363
|
+
transclude: true,
|
2364
|
+
controller: 'ProgressController',
|
2365
|
+
require: 'progress',
|
2366
|
+
scope: {},
|
2367
|
+
template: '<div class="progress" ng-transclude></div>'
|
2368
|
+
//templateUrl: 'template/progressbar/progress.html' // Works in AngularJS 1.2
|
2369
|
+
};
|
2370
|
+
})
|
2371
|
+
|
2372
|
+
.directive('bar', function() {
|
2373
|
+
return {
|
2374
|
+
restrict: 'EA',
|
2375
|
+
replace: true,
|
2376
|
+
transclude: true,
|
2377
|
+
require: '^progress',
|
2325
2378
|
scope: {
|
2326
|
-
value: '=
|
2327
|
-
|
2328
|
-
onEmpty: '&'
|
2379
|
+
value: '=',
|
2380
|
+
type: '@'
|
2329
2381
|
},
|
2330
|
-
templateUrl: 'template/progressbar/
|
2331
|
-
link: function(scope, element, attrs,
|
2332
|
-
scope
|
2333
|
-
controller.clearBars();
|
2334
|
-
|
2335
|
-
if (angular.isArray(newValue)) {
|
2336
|
-
// Stacked progress bar
|
2337
|
-
for (var i=0, n=newValue.length; i < n; i++) {
|
2338
|
-
controller.addBar(controller.makeBar(newValue[i], oldValue[i], i));
|
2339
|
-
}
|
2340
|
-
} else {
|
2341
|
-
// Simple bar
|
2342
|
-
controller.addBar(controller.makeBar(newValue, oldValue));
|
2343
|
-
}
|
2344
|
-
}, true);
|
2345
|
-
|
2346
|
-
// Total percent listeners
|
2347
|
-
scope.$watch('totalPercent', function(value) {
|
2348
|
-
if (value >= 100) {
|
2349
|
-
scope.onFull();
|
2350
|
-
} else if (value <= 0) {
|
2351
|
-
scope.onEmpty();
|
2352
|
-
}
|
2353
|
-
}, true);
|
2382
|
+
templateUrl: 'template/progressbar/bar.html',
|
2383
|
+
link: function(scope, element, attrs, progressCtrl) {
|
2384
|
+
progressCtrl.addBar(scope, element);
|
2354
2385
|
}
|
2355
2386
|
};
|
2356
2387
|
})
|
2357
2388
|
|
2358
|
-
.directive('progressbar',
|
2389
|
+
.directive('progressbar', function() {
|
2359
2390
|
return {
|
2360
2391
|
restrict: 'EA',
|
2361
2392
|
replace: true,
|
2393
|
+
transclude: true,
|
2394
|
+
controller: 'ProgressController',
|
2362
2395
|
scope: {
|
2363
|
-
|
2364
|
-
|
2365
|
-
type: '=',
|
2366
|
-
animate: '='
|
2396
|
+
value: '=',
|
2397
|
+
type: '@'
|
2367
2398
|
},
|
2368
|
-
templateUrl: 'template/progressbar/
|
2369
|
-
link: function(scope, element) {
|
2370
|
-
scope
|
2371
|
-
if (scope.animate) {
|
2372
|
-
element.css('width', scope.old + '%');
|
2373
|
-
$transition(element, {width: value + '%'});
|
2374
|
-
} else {
|
2375
|
-
element.css('width', value + '%');
|
2376
|
-
}
|
2377
|
-
});
|
2399
|
+
templateUrl: 'template/progressbar/progressbar.html',
|
2400
|
+
link: function(scope, element, attrs, progressCtrl) {
|
2401
|
+
progressCtrl.addBar(scope, angular.element(element.children()[0]));
|
2378
2402
|
}
|
2379
2403
|
};
|
2380
|
-
}
|
2404
|
+
});
|
2381
2405
|
angular.module('ui.bootstrap.rating', [])
|
2382
2406
|
|
2383
2407
|
.constant('ratingConfig', {
|
@@ -2463,12 +2487,6 @@ angular.module('ui.bootstrap.rating', [])
|
|
2463
2487
|
|
2464
2488
|
angular.module('ui.bootstrap.tabs', [])
|
2465
2489
|
|
2466
|
-
.directive('tabs', function() {
|
2467
|
-
return function() {
|
2468
|
-
throw new Error("The `tabs` directive is deprecated, please migrate to `tabset`. Instructions can be found at http://github.com/angular-ui/bootstrap/tree/master/CHANGELOG.md");
|
2469
|
-
};
|
2470
|
-
})
|
2471
|
-
|
2472
2490
|
.controller('TabsetController', ['$scope', function TabsetCtrl($scope) {
|
2473
2491
|
var ctrl = this,
|
2474
2492
|
tabs = ctrl.tabs = $scope.tabs = [];
|
@@ -2509,8 +2527,6 @@ angular.module('ui.bootstrap.tabs', [])
|
|
2509
2527
|
*
|
2510
2528
|
* @param {boolean=} vertical Whether or not to use vertical styling for the tabs.
|
2511
2529
|
* @param {boolean=} justified Whether or not to use justified styling for the tabs.
|
2512
|
-
* @param {string=} direction What direction the tabs should be rendered. Available:
|
2513
|
-
* 'right', 'left', 'below'.
|
2514
2530
|
*
|
2515
2531
|
* @example
|
2516
2532
|
<example module="ui.bootstrap">
|
@@ -2536,20 +2552,13 @@ angular.module('ui.bootstrap.tabs', [])
|
|
2536
2552
|
restrict: 'EA',
|
2537
2553
|
transclude: true,
|
2538
2554
|
replace: true,
|
2539
|
-
require: '^tabset',
|
2540
2555
|
scope: {},
|
2541
2556
|
controller: 'TabsetController',
|
2542
2557
|
templateUrl: 'template/tabs/tabset.html',
|
2543
|
-
|
2544
|
-
|
2545
|
-
|
2546
|
-
|
2547
|
-
scope.type = angular.isDefined(attrs.type) ? scope.$parent.$eval(attrs.type) : 'tabs';
|
2548
|
-
scope.direction = angular.isDefined(attrs.direction) ? scope.$parent.$eval(attrs.direction) : 'top';
|
2549
|
-
scope.tabsAbove = (scope.direction != 'below');
|
2550
|
-
tabsetCtrl.$scope = scope;
|
2551
|
-
tabsetCtrl.$transcludeFn = transclude;
|
2552
|
-
};
|
2558
|
+
link: function(scope, element, attrs) {
|
2559
|
+
scope.vertical = angular.isDefined(attrs.vertical) ? scope.$parent.$eval(attrs.vertical) : false;
|
2560
|
+
scope.justified = angular.isDefined(attrs.justified) ? scope.$parent.$eval(attrs.justified) : false;
|
2561
|
+
scope.type = angular.isDefined(attrs.type) ? scope.$parent.$eval(attrs.type) : 'tabs';
|
2553
2562
|
}
|
2554
2563
|
};
|
2555
2564
|
})
|
@@ -2754,24 +2763,7 @@ angular.module('ui.bootstrap.tabs', [])
|
|
2754
2763
|
}
|
2755
2764
|
})
|
2756
2765
|
|
2757
|
-
|
2758
|
-
return {
|
2759
|
-
restrict: 'A',
|
2760
|
-
require: '^tabset',
|
2761
|
-
templateUrl: 'template/tabs/tabset-titles.html',
|
2762
|
-
replace: true,
|
2763
|
-
link: function(scope, elm, attrs, tabsetCtrl) {
|
2764
|
-
if (!scope.$eval(attrs.tabsetTitles)) {
|
2765
|
-
elm.remove();
|
2766
|
-
} else {
|
2767
|
-
//now that tabs location has been decided, transclude the tab titles in
|
2768
|
-
tabsetCtrl.$transcludeFn(tabsetCtrl.$scope.$parent, function(node) {
|
2769
|
-
elm.append(node);
|
2770
|
-
});
|
2771
|
-
}
|
2772
|
-
}
|
2773
|
-
};
|
2774
|
-
});
|
2766
|
+
;
|
2775
2767
|
|
2776
2768
|
angular.module('ui.bootstrap.timepicker', [])
|
2777
2769
|
|
@@ -2779,12 +2771,12 @@ angular.module('ui.bootstrap.timepicker', [])
|
|
2779
2771
|
hourStep: 1,
|
2780
2772
|
minuteStep: 1,
|
2781
2773
|
showMeridian: true,
|
2782
|
-
meridians:
|
2774
|
+
meridians: null,
|
2783
2775
|
readonlyInput: false,
|
2784
2776
|
mousewheel: true
|
2785
2777
|
})
|
2786
2778
|
|
2787
|
-
.directive('timepicker', ['$parse', '$log', 'timepickerConfig', function ($parse, $log, timepickerConfig) {
|
2779
|
+
.directive('timepicker', ['$parse', '$log', 'timepickerConfig', '$locale', function ($parse, $log, timepickerConfig, $locale) {
|
2788
2780
|
return {
|
2789
2781
|
restrict: 'EA',
|
2790
2782
|
require:'?^ngModel',
|
@@ -2796,7 +2788,8 @@ angular.module('ui.bootstrap.timepicker', [])
|
|
2796
2788
|
return; // do nothing if no ng-model
|
2797
2789
|
}
|
2798
2790
|
|
2799
|
-
var selected = new Date(),
|
2791
|
+
var selected = new Date(),
|
2792
|
+
meridians = angular.isDefined(attrs.meridians) ? scope.$parent.$eval(attrs.meridians) : timepickerConfig.meridians || $locale.DATETIME_FORMATS.AMPMS;
|
2800
2793
|
|
2801
2794
|
var hourStep = timepickerConfig.hourStep;
|
2802
2795
|
if (attrs.hourStep) {
|
@@ -3065,6 +3058,8 @@ angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position', 'ui.bootstrap
|
|
3065
3058
|
|
3066
3059
|
var inputFormatter = attrs.typeaheadInputFormatter ? $parse(attrs.typeaheadInputFormatter) : undefined;
|
3067
3060
|
|
3061
|
+
var appendToBody = attrs.typeaheadAppendToBody ? $parse(attrs.typeaheadAppendToBody) : false;
|
3062
|
+
|
3068
3063
|
//INTERNAL VARIABLES
|
3069
3064
|
|
3070
3065
|
//model setter executed upon match selection
|
@@ -3076,7 +3071,7 @@ angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position', 'ui.bootstrap
|
|
3076
3071
|
var hasFocus;
|
3077
3072
|
|
3078
3073
|
//pop-up element used to display matches
|
3079
|
-
var popUpEl = angular.element('<typeahead-popup></
|
3074
|
+
var popUpEl = angular.element('<div typeahead-popup></div>');
|
3080
3075
|
popUpEl.attr({
|
3081
3076
|
matches: 'matches',
|
3082
3077
|
active: 'activeIdx',
|
@@ -3128,7 +3123,7 @@ angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position', 'ui.bootstrap
|
|
3128
3123
|
//position pop-up with matches - we need to re-calculate its position each time we are opening a window
|
3129
3124
|
//with matches as a pop-up might be absolute-positioned and position of an input might have changed on a page
|
3130
3125
|
//due to other elements being rendered
|
3131
|
-
scope.position = $position.position(element);
|
3126
|
+
scope.position = appendToBody ? $position.offset(element) : $position.position(element);
|
3132
3127
|
scope.position.top = scope.position.top + element.prop('offsetHeight');
|
3133
3128
|
|
3134
3129
|
} else {
|
@@ -3236,9 +3231,6 @@ angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position', 'ui.bootstrap
|
|
3236
3231
|
|
3237
3232
|
//typeahead is open and an "interesting" key was pressed
|
3238
3233
|
if (scope.matches.length === 0 || HOT_KEYS.indexOf(evt.which) === -1) {
|
3239
|
-
if (evt.which === 13) {
|
3240
|
-
evt.preventDefault();
|
3241
|
-
}
|
3242
3234
|
return;
|
3243
3235
|
}
|
3244
3236
|
|
@@ -3283,7 +3275,12 @@ angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position', 'ui.bootstrap
|
|
3283
3275
|
$document.unbind('click', dismissClickHandler);
|
3284
3276
|
});
|
3285
3277
|
|
3286
|
-
|
3278
|
+
var $popup = $compile(popUpEl)(scope);
|
3279
|
+
if ( appendToBody ) {
|
3280
|
+
$document.find('body').append($popup);
|
3281
|
+
} else {
|
3282
|
+
element.after($popup);
|
3283
|
+
}
|
3287
3284
|
}
|
3288
3285
|
};
|
3289
3286
|
|
@@ -3291,7 +3288,7 @@ angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position', 'ui.bootstrap
|
|
3291
3288
|
|
3292
3289
|
.directive('typeaheadPopup', function () {
|
3293
3290
|
return {
|
3294
|
-
restrict:'
|
3291
|
+
restrict:'EA',
|
3295
3292
|
scope:{
|
3296
3293
|
matches:'=',
|
3297
3294
|
query:'=',
|
@@ -3326,7 +3323,7 @@ angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position', 'ui.bootstrap
|
|
3326
3323
|
|
3327
3324
|
.directive('typeaheadMatch', ['$http', '$templateCache', '$compile', '$parse', function ($http, $templateCache, $compile, $parse) {
|
3328
3325
|
return {
|
3329
|
-
restrict:'
|
3326
|
+
restrict:'EA',
|
3330
3327
|
scope:{
|
3331
3328
|
index:'=',
|
3332
3329
|
match:'=',
|
@@ -3356,7 +3353,7 @@ angular.module("template/accordion/accordion-group.html", []).run(["$templateCac
|
|
3356
3353
|
"<div class=\"panel panel-default\">\n" +
|
3357
3354
|
" <div class=\"panel-heading\">\n" +
|
3358
3355
|
" <h4 class=\"panel-title\">\n" +
|
3359
|
-
" <a
|
3356
|
+
" <a class=\"accordion-toggle\" ng-click=\"isOpen = !isOpen\" accordion-transclude=\"heading\">{{heading}}</a>\n" +
|
3360
3357
|
" </h4>\n" +
|
3361
3358
|
" </div>\n" +
|
3362
3359
|
" <div class=\"panel-collapse\" collapse=\"!isOpen\">\n" +
|
@@ -3406,50 +3403,41 @@ angular.module("template/carousel/slide.html", []).run(["$templateCache", functi
|
|
3406
3403
|
|
3407
3404
|
angular.module("template/datepicker/datepicker.html", []).run(["$templateCache", function($templateCache) {
|
3408
3405
|
$templateCache.put("template/datepicker/datepicker.html",
|
3409
|
-
"<table
|
3410
|
-
"
|
3411
|
-
" <thead class=\"text-center\">\n" +
|
3406
|
+
"<table>\n" +
|
3407
|
+
" <thead>\n" +
|
3412
3408
|
" <tr>\n" +
|
3413
|
-
" <th
|
3414
|
-
"
|
3415
|
-
"
|
3416
|
-
" </button>\n" +
|
3417
|
-
" </th>\n" +
|
3418
|
-
" <th colspan=\"{{rows[0].length - 2 + showWeekNumbers}}\"><button type=\"button\" class=\"btn btn-md btn-link btn-block\" ng-click=\"toggleMode()\"><strong>{{title}}</strong></button></th>\n" +
|
3419
|
-
" <th style=\"overflow: hidden; min-width: 26px\">\n" +
|
3420
|
-
" <button type=\"button\" class=\"btn btn-xs btn-link\" ng-click=\"move(1)\"> \n" +
|
3421
|
-
" <span class=\"glyphicon glyphicon-chevron-right\"> </span> \n" +
|
3422
|
-
" </button>\n" +
|
3423
|
-
" </th>\n" +
|
3409
|
+
" <th><button type=\"button\" class=\"btn btn-default btn-sm pull-left\" ng-click=\"move(-1)\"><i class=\"glyphicon glyphicon-chevron-left\"></i></button></th>\n" +
|
3410
|
+
" <th colspan=\"{{rows[0].length - 2 + showWeekNumbers}}\"><button type=\"button\" class=\"btn btn-default btn-sm btn-block\" ng-click=\"toggleMode()\"><strong>{{title}}</strong></button></th>\n" +
|
3411
|
+
" <th><button type=\"button\" class=\"btn btn-default btn-sm pull-right\" ng-click=\"move(1)\"><i class=\"glyphicon glyphicon-chevron-right\"></i></button></th>\n" +
|
3424
3412
|
" </tr>\n" +
|
3425
|
-
" <tr ng-show=\"labels.length > 0\">\n" +
|
3426
|
-
" <th
|
3427
|
-
" <th
|
3413
|
+
" <tr ng-show=\"labels.length > 0\" class=\"h6\">\n" +
|
3414
|
+
" <th ng-show=\"showWeekNumbers\" class=\"text-center\">#</th>\n" +
|
3415
|
+
" <th ng-repeat=\"label in labels\" class=\"text-center\">{{label}}</th>\n" +
|
3428
3416
|
" </tr>\n" +
|
3429
3417
|
" </thead>\n" +
|
3430
3418
|
" <tbody>\n" +
|
3431
3419
|
" <tr ng-repeat=\"row in rows\">\n" +
|
3432
|
-
" <td ng-show=\"showWeekNumbers\" class=\"text-center\"
|
3433
|
-
" <td ng-repeat=\"dt in row\" class=\"text-center\"
|
3434
|
-
" <button type=\"button\" style=\"width:
|
3420
|
+
" <td ng-show=\"showWeekNumbers\" class=\"text-center\"><em>{{ getWeekNumber(row) }}</em></td>\n" +
|
3421
|
+
" <td ng-repeat=\"dt in row\" class=\"text-center\">\n" +
|
3422
|
+
" <button type=\"button\" style=\"width:100%;\" class=\"btn btn-default btn-sm\" ng-class=\"{'btn-info': dt.selected}\" ng-click=\"select(dt.date)\" ng-disabled=\"dt.disabled\"><span ng-class=\"{'text-muted': dt.secondary}\">{{dt.label}}</span></button>\n" +
|
3435
3423
|
" </td>\n" +
|
3436
3424
|
" </tr>\n" +
|
3437
3425
|
" </tbody>\n" +
|
3438
|
-
"</table
|
3426
|
+
"</table>\n" +
|
3427
|
+
"");
|
3439
3428
|
}]);
|
3440
3429
|
|
3441
3430
|
angular.module("template/datepicker/popup.html", []).run(["$templateCache", function($templateCache) {
|
3442
3431
|
$templateCache.put("template/datepicker/popup.html",
|
3443
3432
|
"<ul class=\"dropdown-menu\" ng-style=\"{display: (isOpen && 'block') || 'none', top: position.top+'px', left: position.left+'px'}\">\n" +
|
3444
3433
|
" <li ng-transclude></li>\n" +
|
3445
|
-
" <li
|
3446
|
-
" <li style=\"padding: 9px;\">\n" +
|
3434
|
+
" <li ng-show=\"showButtonBar\" style=\"padding:10px 9px 2px\">\n" +
|
3447
3435
|
" <span class=\"btn-group\">\n" +
|
3448
|
-
" <button class=\"btn btn-
|
3449
|
-
" <button class=\"btn btn-
|
3450
|
-
" <button class=\"btn btn-
|
3436
|
+
" <button type=\"button\" class=\"btn btn-sm btn-info\" ng-click=\"today()\">{{currentText}}</button>\n" +
|
3437
|
+
" <button type=\"button\" class=\"btn btn-sm btn-default\" ng-click=\"showWeeks = ! showWeeks\" ng-class=\"{active: showWeeks}\">{{toggleWeeksText}}</button>\n" +
|
3438
|
+
" <button type=\"button\" class=\"btn btn-sm btn-danger\" ng-click=\"clear()\">{{clearText}}</button>\n" +
|
3451
3439
|
" </span>\n" +
|
3452
|
-
" <button class=\"btn btn-
|
3440
|
+
" <button type=\"button\" class=\"btn btn-sm btn-success pull-right\" ng-click=\"isOpen = false\">{{closeText}}</button>\n" +
|
3453
3441
|
" </li>\n" +
|
3454
3442
|
"</ul>\n" +
|
3455
3443
|
"");
|
@@ -3462,7 +3450,7 @@ angular.module("template/modal/backdrop.html", []).run(["$templateCache", functi
|
|
3462
3450
|
|
3463
3451
|
angular.module("template/modal/window.html", []).run(["$templateCache", function($templateCache) {
|
3464
3452
|
$templateCache.put("template/modal/window.html",
|
3465
|
-
"<div class=\"modal fade {{ windowClass }}\" ng-class=\"{in: animate}\" ng-style=\"{'z-index': 1050 + index*10, display: 'block'}\" ng-click=\"close($event)\">\n" +
|
3453
|
+
"<div tabindex=\"-1\" class=\"modal fade {{ windowClass }}\" ng-class=\"{in: animate}\" ng-style=\"{'z-index': 1050 + index*10, display: 'block'}\" ng-click=\"close($event)\">\n" +
|
3466
3454
|
" <div class=\"modal-dialog\"><div class=\"modal-content\" ng-transclude></div></div>\n" +
|
3467
3455
|
"</div>");
|
3468
3456
|
}]);
|
@@ -3470,7 +3458,7 @@ angular.module("template/modal/window.html", []).run(["$templateCache", function
|
|
3470
3458
|
angular.module("template/pagination/pager.html", []).run(["$templateCache", function($templateCache) {
|
3471
3459
|
$templateCache.put("template/pagination/pager.html",
|
3472
3460
|
"<ul class=\"pager\">\n" +
|
3473
|
-
"
|
3461
|
+
" <li ng-repeat=\"page in pages\" ng-class=\"{disabled: page.disabled, previous: page.previous, next: page.next}\"><a ng-click=\"selectPage(page.number)\">{{page.text}}</a></li>\n" +
|
3474
3462
|
"</ul>");
|
3475
3463
|
}]);
|
3476
3464
|
|
@@ -3478,8 +3466,7 @@ angular.module("template/pagination/pagination.html", []).run(["$templateCache",
|
|
3478
3466
|
$templateCache.put("template/pagination/pagination.html",
|
3479
3467
|
"<ul class=\"pagination\">\n" +
|
3480
3468
|
" <li ng-repeat=\"page in pages\" ng-class=\"{active: page.active, disabled: page.disabled}\"><a ng-click=\"selectPage(page.number)\">{{page.text}}</a></li>\n" +
|
3481
|
-
"</ul
|
3482
|
-
"");
|
3469
|
+
"</ul>");
|
3483
3470
|
}]);
|
3484
3471
|
|
3485
3472
|
angular.module("template/tooltip/tooltip-html-unsafe-popup.html", []).run(["$templateCache", function($templateCache) {
|
@@ -3515,12 +3502,17 @@ angular.module("template/popover/popover.html", []).run(["$templateCache", funct
|
|
3515
3502
|
|
3516
3503
|
angular.module("template/progressbar/bar.html", []).run(["$templateCache", function($templateCache) {
|
3517
3504
|
$templateCache.put("template/progressbar/bar.html",
|
3518
|
-
"<div class=\"bar\" ng-class
|
3505
|
+
"<div class=\"progress-bar\" ng-class=\"type && 'progress-bar-' + type\" ng-transclude></div>");
|
3519
3506
|
}]);
|
3520
3507
|
|
3521
3508
|
angular.module("template/progressbar/progress.html", []).run(["$templateCache", function($templateCache) {
|
3522
3509
|
$templateCache.put("template/progressbar/progress.html",
|
3523
|
-
"<div class=\"progress\"
|
3510
|
+
"<div class=\"progress\" ng-transclude></div>");
|
3511
|
+
}]);
|
3512
|
+
|
3513
|
+
angular.module("template/progressbar/progressbar.html", []).run(["$templateCache", function($templateCache) {
|
3514
|
+
$templateCache.put("template/progressbar/progressbar.html",
|
3515
|
+
"<div class=\"progress\"><div class=\"progress-bar\" ng-class=\"type && 'progress-bar-' + type\" ng-transclude></div></div>");
|
3524
3516
|
}]);
|
3525
3517
|
|
3526
3518
|
angular.module("template/rating/rating.html", []).run(["$templateCache", function($templateCache) {
|
@@ -3540,7 +3532,7 @@ angular.module("template/tabs/tab.html", []).run(["$templateCache", function($te
|
|
3540
3532
|
|
3541
3533
|
angular.module("template/tabs/tabset-titles.html", []).run(["$templateCache", function($templateCache) {
|
3542
3534
|
$templateCache.put("template/tabs/tabset-titles.html",
|
3543
|
-
"<ul class=\"nav {{type && 'nav-' + type}}\" ng-class=\"{'nav-stacked': vertical
|
3535
|
+
"<ul class=\"nav {{type && 'nav-' + type}}\" ng-class=\"{'nav-stacked': vertical}\">\n" +
|
3544
3536
|
"</ul>\n" +
|
3545
3537
|
"");
|
3546
3538
|
}]);
|
@@ -3548,8 +3540,8 @@ angular.module("template/tabs/tabset-titles.html", []).run(["$templateCache", fu
|
|
3548
3540
|
angular.module("template/tabs/tabset.html", []).run(["$templateCache", function($templateCache) {
|
3549
3541
|
$templateCache.put("template/tabs/tabset.html",
|
3550
3542
|
"\n" +
|
3551
|
-
"<div class=\"tabbable\"
|
3552
|
-
" <
|
3543
|
+
"<div class=\"tabbable\">\n" +
|
3544
|
+
" <ul class=\"nav {{type && 'nav-' + type}}\" ng-class=\"{'nav-stacked': vertical, 'nav-justified': justified}\" ng-transclude></ul>\n" +
|
3553
3545
|
" <div class=\"tab-content\">\n" +
|
3554
3546
|
" <div class=\"tab-pane\" \n" +
|
3555
3547
|
" ng-repeat=\"tab in tabs\" \n" +
|
@@ -3557,51 +3549,39 @@ angular.module("template/tabs/tabset.html", []).run(["$templateCache", function(
|
|
3557
3549
|
" tab-content-transclude=\"tab\">\n" +
|
3558
3550
|
" </div>\n" +
|
3559
3551
|
" </div>\n" +
|
3560
|
-
" <div tabset-titles=\"!tabsAbove\"></div>\n" +
|
3561
3552
|
"</div>\n" +
|
3562
3553
|
"");
|
3563
3554
|
}]);
|
3564
3555
|
|
3565
3556
|
angular.module("template/timepicker/timepicker.html", []).run(["$templateCache", function($templateCache) {
|
3566
3557
|
$templateCache.put("template/timepicker/timepicker.html",
|
3567
|
-
"<
|
3568
|
-
"
|
3569
|
-
"
|
3570
|
-
"
|
3571
|
-
"
|
3572
|
-
"
|
3573
|
-
"
|
3574
|
-
"
|
3575
|
-
"
|
3576
|
-
"
|
3577
|
-
"\n" +
|
3578
|
-
"
|
3579
|
-
"
|
3580
|
-
"
|
3581
|
-
"
|
3582
|
-
"
|
3583
|
-
"
|
3584
|
-
"
|
3585
|
-
"
|
3586
|
-
"
|
3587
|
-
"
|
3588
|
-
"
|
3589
|
-
"
|
3590
|
-
"
|
3591
|
-
"
|
3592
|
-
"
|
3593
|
-
"
|
3594
|
-
"\n" +
|
3595
|
-
" <div class=\"row\">\n" +
|
3596
|
-
" <div class=\"col-xs-4 text-center\">\n" +
|
3597
|
-
" <a ng-click=\"decrementHours()\" class=\"btn btn-link\"><i class=\"glyphicon glyphicon-chevron-down\"></i></a>\n" +
|
3598
|
-
" </div>\n" +
|
3599
|
-
" <div class=\"col-xs-6 text-center\">\n" +
|
3600
|
-
" <a ng-click=\"decrementMinutes()\" class=\"btn btn-link\"><i class=\"glyphicon glyphicon-chevron-down\"></i></a>\n" +
|
3601
|
-
" </div>\n" +
|
3602
|
-
" <div class=\"col-xs-2\"> </div>\n" +
|
3603
|
-
" </div>\n" +
|
3604
|
-
"</span>");
|
3558
|
+
"<table>\n" +
|
3559
|
+
" <tbody>\n" +
|
3560
|
+
" <tr class=\"text-center\">\n" +
|
3561
|
+
" <td><a ng-click=\"incrementHours()\" class=\"btn btn-link\"><span class=\"glyphicon glyphicon-chevron-up\"></span></a></td>\n" +
|
3562
|
+
" <td> </td>\n" +
|
3563
|
+
" <td><a ng-click=\"incrementMinutes()\" class=\"btn btn-link\"><span class=\"glyphicon glyphicon-chevron-up\"></span></a></td>\n" +
|
3564
|
+
" <td ng-show=\"showMeridian\"></td>\n" +
|
3565
|
+
" </tr>\n" +
|
3566
|
+
" <tr>\n" +
|
3567
|
+
" <td style=\"width:50px;\" class=\"form-group\" ng-class=\"{'has-error': invalidHours}\">\n" +
|
3568
|
+
" <input type=\"text\" ng-model=\"hours\" ng-change=\"updateHours()\" class=\"form-control text-center\" ng-mousewheel=\"incrementHours()\" ng-readonly=\"readonlyInput\" maxlength=\"2\">\n" +
|
3569
|
+
" </td>\n" +
|
3570
|
+
" <td>:</td>\n" +
|
3571
|
+
" <td style=\"width:50px;\" class=\"form-group\" ng-class=\"{'has-error': invalidMinutes}\">\n" +
|
3572
|
+
" <input type=\"text\" ng-model=\"minutes\" ng-change=\"updateMinutes()\" class=\"form-control text-center\" ng-readonly=\"readonlyInput\" maxlength=\"2\">\n" +
|
3573
|
+
" </td>\n" +
|
3574
|
+
" <td ng-show=\"showMeridian\"><button class=\"btn btn-default text-center\" ng-click=\"toggleMeridian()\">{{meridian}}</button></td>\n" +
|
3575
|
+
" </tr>\n" +
|
3576
|
+
" <tr class=\"text-center\">\n" +
|
3577
|
+
" <td><a ng-click=\"decrementHours()\" class=\"btn btn-link\"><span class=\"glyphicon glyphicon-chevron-down\"></span></a></td>\n" +
|
3578
|
+
" <td> </td>\n" +
|
3579
|
+
" <td><a ng-click=\"decrementMinutes()\" class=\"btn btn-link\"><span class=\"glyphicon glyphicon-chevron-down\"></span></a></td>\n" +
|
3580
|
+
" <td ng-show=\"showMeridian\"></td>\n" +
|
3581
|
+
" </tr>\n" +
|
3582
|
+
" </tbody>\n" +
|
3583
|
+
"</table>\n" +
|
3584
|
+
"");
|
3605
3585
|
}]);
|
3606
3586
|
|
3607
3587
|
angular.module("template/typeahead/typeahead-match.html", []).run(["$templateCache", function($templateCache) {
|
@@ -3613,7 +3593,7 @@ angular.module("template/typeahead/typeahead-popup.html", []).run(["$templateCac
|
|
3613
3593
|
$templateCache.put("template/typeahead/typeahead-popup.html",
|
3614
3594
|
"<ul class=\"dropdown-menu\" ng-style=\"{display: isOpen()&&'block' || 'none', top: position.top+'px', left: position.left+'px'}\">\n" +
|
3615
3595
|
" <li ng-repeat=\"match in matches\" ng-class=\"{active: isActive($index) }\" ng-mouseenter=\"selectActive($index)\" ng-click=\"selectMatch($index)\">\n" +
|
3616
|
-
" <typeahead-match index=\"$index\" match=\"match\" query=\"query\" template-url=\"templateUrl\"></
|
3596
|
+
" <div typeahead-match index=\"$index\" match=\"match\" query=\"query\" template-url=\"templateUrl\"></div>\n" +
|
3617
3597
|
" </li>\n" +
|
3618
3598
|
"</ul>");
|
3619
3599
|
}]);
|