• R/O
  • HTTP
  • SSH
  • HTTPS

zephyr: Commit

This repository is for zephyr, which is implemented for a GUI of Eos.


Commit MetaInfo

Revision878d6ee413e58a8f7dcfb77c1bbc9c3e7a3afc55 (tree)
Time2017-02-20 18:11:08
Author平田健悟 <hiratakengo@hira...>
Commiter平田健悟

Log Message

Merge branch 'master' of git.osdn.net:/gitroot/eos/zephyr

Change Summary

Incremental Difference

--- a/.gitignore
+++ b/.gitignore
@@ -10,9 +10,24 @@ front-end/typings/
1010
1111 cli/npm-debug.log*
1212
13+<<<<<<< HEAD
1314 user-specific-files/OptionControlFile/
1415 user-specific-files/meta/
1516 user-specific-files/workspace/
1617 user-specific-files/workspace.debug
1718 user-specific-files/db/
1819 user-specific-files/tmp/
20+=======
21+user-specific-files/OptionControlFile/*
22+user-specific-files/OptionControlFile/.*
23+user-specific-files/meta/*
24+user-specific-files/meta/.*
25+user-specific-files/workspace/*
26+user-specific-files/workspace/.*
27+user-specific-files/workspace.debug/*
28+user-specific-files/workspace.debug/.*
29+user-specific-files/db/*
30+user-specific-files/db/.*
31+user-specific-files/tmp/*
32+user-specific-files/tmp/.*
33+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
--- a/front-end/app/index.html
+++ b/front-end/app/index.html
@@ -12,3 +12,4 @@
1212 <script src="./bundle.js"></script>
1313 </body>
1414 </html>
15+<!--AAAAAAAAAAAAAAAAAA-->
--- a/front-end/app/scripts/App.ts
+++ b/front-end/app/scripts/App.ts
@@ -4,6 +4,10 @@ namespace app {
44 var appName = 'zephyr';
55 export var zephyr = angular.module(appName, ['ui.router', 'ngResource', 'ui.bootstrap']);
66
7+<<<<<<< HEAD
8+=======
9+
10+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
711 zephyr.config(($stateProvider, $urlRouterProvider, $locationProvider) => {
812
913 $urlRouterProvider.otherwise('/execution');
@@ -34,12 +38,16 @@ namespace app {
3438 })
3539 });
3640
41+<<<<<<< HEAD
3742 // services
43+=======
44+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3845 zephyr.service('APIEndPoint', services.APIEndPoint);
3946 zephyr.service('MyModal', services.MyModal);
4047 zephyr.service('WebSocket', services.WebSocket);
4148 zephyr.service('Console', services.Console);
4249
50+<<<<<<< HEAD
4351 // filters
4452 zephyr.filter('Tag', filters.Tag);
4553
@@ -53,6 +61,13 @@ namespace app {
5361 /// Upload
5462 zephyr.controller('uploadController', controllers.Upload);
5563
64+=======
65+
66+ zephyr.filter('Tag', filters.Tag);
67+ zephyr.controller('selectCommandController', controllers.SelectCommand);
68+ zephyr.controller('previewController', controllers.Preview);
69+
70+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
5671
5772 zephyr.controller('executionController', controllers.Execution);
5873 zephyr.controller('workspaceController', controllers.Workspace);
@@ -62,7 +77,10 @@ namespace app {
6277 zephyr.controller('optionController', directives.OptionController);
6378 zephyr.controller('directoryController', directives.DirectoryController);
6479 zephyr.controller('HeaderMenuController', directives.HeaderMenuController);
80+<<<<<<< HEAD
6581 zephyr.controller('uploadController', directives.UploadController);
82+=======
83+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
6684
6785 zephyr.directive('headerMenu', directives.HeaderMenu.Factory());
6886 zephyr.directive('command', directives.Command.Factory());
--- a/front-end/app/scripts/controllers/Preview.ts
+++ b/front-end/app/scripts/controllers/Preview.ts
@@ -1,5 +1,9 @@
11 namespace app.controllers {
2+<<<<<<< HEAD
23 export class Preview {
4+=======
5+ export class Preview{
6+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
37
48 public static $inject = ['$scope', 'APIEndPoint','$uibModalInstance'];
59 private tags: string[];
@@ -14,12 +18,20 @@ namespace app.controllers {
1418 this.APIEndPoint
1519 .getCommands()
1620 .$promise.then((result) => {
21+<<<<<<< HEAD
1722 controller.commands = result.info;
23+=======
24+ controller.commands = result.info;
25+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
1826 });
1927 this.currentTag = 'all';
2028 */
2129
30+<<<<<<< HEAD
2231 }
32+=======
33+ }
34+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
2335
2436 }
2537 }
--- a/front-end/app/scripts/controllers/Workspace.ts
+++ b/front-end/app/scripts/controllers/Workspace.ts
@@ -18,26 +18,41 @@ namespace app.controllers {
1818 parentId: '',
1919 fileType: '',
2020 createdAt: '',
21+<<<<<<< HEAD
2122 updatedAt:'',
23+=======
24+ updatedAt:'',
25+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
2226 path: '/'
2327 };
2428 directoryList.push(o);
2529
30+<<<<<<< HEAD
2631 }
2732
33+=======
34+ }
35+
36+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
2837 public addDirectory(info: declares.IDirectoryInfo, directoryList: declares.IDirectoryInfo[]) {
2938 directoryList.push(info);
3039 }
3140
41+<<<<<<< HEAD
3242 public upload(){
3343 //this.MyModal.preview();
3444 this.MyModal.upload();
3545 }
3646
47+=======
48+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3749 private debug() {
3850 this.MyModal.preview();
3951 }
4052
53+<<<<<<< HEAD
4154
55+=======
56+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4257 }
4358 }
--- a/front-end/app/scripts/directives/Option.ts
+++ b/front-end/app/scripts/directives/Option.ts
@@ -1,4 +1,5 @@
11 namespace app.directives {
2+<<<<<<< HEAD
23 export class Option implements ng.IDirective {
34
45 public restrict: string;
@@ -63,4 +64,70 @@ namespace app.directives {
6364 });
6465 }
6566 }
67+=======
68+ export class Option implements ng.IDirective {
69+
70+ public restrict: string;
71+ public replace: boolean;
72+ public templateUrl: string;
73+ public bindToController: Object;
74+ public controller: string;
75+ public controllerAs: string;
76+ public scope: boolean;
77+
78+ /**
79+ * constructor
80+ *
81+ * @param
82+ */
83+ constructor() {
84+ this.restrict = 'E';
85+ this.replace = true;
86+ this.controller = 'optionController';
87+ this.bindToController = {
88+ info: '=',
89+ files: '='
90+ };
91+ this.scope = true;
92+ this.templateUrl = 'templates/option.html';
93+ this.controllerAs = 'ctrl';
94+ }
95+
96+ /**
97+ * instance生成
98+ * @returns {function(): HeaderMenu}
99+ * @constructor
100+ */
101+ public static Factory(): ng.IDirectiveFactory {
102+ var directive = () => {
103+ return new Option();
104+ };
105+ directive.$inject = [];
106+ return directive;
107+ }
108+ }
109+
110+ export class OptionController {
111+
112+ public static $inject = [];
113+
114+ private info: declares.IOption;
115+
116+ constructor() {
117+ var controller = this;
118+
119+ // データバインディングしているarg.inputに
120+ // OptionControlFileに記された初期値(arg.initialValue)を代入
121+ angular.forEach(controller.info.arg, (arg) => {
122+ if(arg.initialValue) {
123+ if(arg.formType === 'number') {
124+ arg.input = parseInt(arg.initialValue);
125+ } else {
126+ arg.input = arg.initialValue;
127+ }
128+ }
129+ });
130+ }
131+ }
132+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
66133 }
--- a/front-end/app/scripts/entry.ts
+++ b/front-end/app/scripts/entry.ts
@@ -1,4 +1,8 @@
1+<<<<<<< HEAD
12 ///<reference path="./reference.ts" />
3+=======
4+/// <reference path="./reference.ts" />
5+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
26 import 'angular';
37 import 'angular-ui-router';
48 import 'angular-resource';
@@ -18,8 +22,11 @@ import './directives/Option.ts';
1822 import './directives/Command.ts';
1923 import './directives/HeaderMenu.ts';
2024 import './directives/Directory.ts';
25+<<<<<<< HEAD
2126 import './directives/Upload.ts';
2227
28+=======
29+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
2330
2431 // controllers
2532 import './controllers/Execution.ts';
@@ -27,6 +34,9 @@ import './controllers/Workspace.ts';
2734 import './controllers/History.ts';
2835 import './controllers/SelectCommand.ts';
2936 import './controllers/Preview.ts';
37+<<<<<<< HEAD
3038 import './controllers/Upload.ts';
39+=======
40+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3141
3242 import './App.ts';
--- a/front-end/app/scripts/reference.ts
+++ b/front-end/app/scripts/reference.ts
@@ -12,13 +12,19 @@
1212 /// <reference path="./directives/HeaderMenu.ts" />
1313 /// <reference path="./directives/Option.ts" />
1414 /// <reference path="./directives/Directory.ts" />
15+<<<<<<< HEAD
1516 /// <reference path="./directives/Upload.ts" />
17+=======
18+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
1619
1720 /// <reference path="./controllers/Execution.ts" />
1821 /// <reference path="./controllers/Workspace.ts" />
1922 /// <reference path="./controllers/History.ts" />
2023 /// <reference path="./controllers/SelectCommand.ts" />
24+<<<<<<< HEAD
2125 /// <reference path="./controllers/Upload.ts" />
26+=======
27+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
2228 /// <reference path="./controllers/Preview.ts" />
2329
2430 /// <reference path="./filters/Tag.ts" />
--- a/front-end/app/scripts/services/APIEndPoint.ts
+++ b/front-end/app/scripts/services/APIEndPoint.ts
@@ -33,7 +33,11 @@ namespace app.services {
3333 }
3434
3535 public getFiles(fileId: string): ng.resource.IResource<declares.IResponse> {
36+<<<<<<< HEAD
3637 var endPoint = '/api/v1/workspace';
38+=======
39+ var endPoint = '/api/v1/workspace';
40+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3741
3842 if(fileId) {
3943 endPoint += '/' + fileId;
@@ -62,7 +66,11 @@ namespace app.services {
6266 var fd = new FormData()
6367 fd.append('data', data);
6468 return this.$http.post(endPoint,
69+<<<<<<< HEAD
6570 fd,
71+=======
72+ fd,
73+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
6674 {
6775 headers: {'Content-Type': undefined },
6876 transformRequest: angular.identity
@@ -73,12 +81,15 @@ namespace app.services {
7381 var endPoint = '/api/v1/debug';
7482 return this.$http.get(endPoint);
7583 }
84+<<<<<<< HEAD
7685
7786 public upload(): ng.IHttpPromise<string> {
7887 var endPoint = '/api/v1/upload';
7988 return this.$http.get(endPoint);
8089 }
8190
91+=======
92+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
8293 public help(command:string): ng.IHttpPromise<string> {
8394 var endPoint = '/api/v1/help/' + command;
8495 return this.$http.get(endPoint);
--- a/front-end/app/scripts/services/MyModal.ts
+++ b/front-end/app/scripts/services/MyModal.ts
@@ -5,7 +5,11 @@ namespace app.services {
55 private modalOption: ng.ui.bootstrap.IModalSettings;
66 public static $inject = ['$uibModal'];
77
8+<<<<<<< HEAD
89 constructor($uibModal: ng.ui.bootstrap.IModalService) {
10+=======
11+ constructor($uibModal: ng.ui.bootstrap.IModalService) {
12+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
913 this.$uibModal = $uibModal;
1014 this.modalOption = {
1115 backdrop: true,
@@ -43,6 +47,7 @@ namespace app.services {
4347 return this.$uibModal.open(this.modalOption);
4448 }
4549
50+<<<<<<< HEAD
4651 public upload(): ng.ui.bootstrap.IModalServiceInstance {
4752 this.modalOption.templateUrl = 'templates/upload.html';
4853 this.modalOption.controller = 'uploadController';
@@ -51,5 +56,7 @@ namespace app.services {
5156 return this.$uibModal.open(this.modalOption);
5257 }
5358
59+=======
60+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
5461 }
5562 }
--- a/front-end/app/templates/command.html
+++ b/front-end/app/templates/command.html
@@ -19,11 +19,19 @@
1919 Execute
2020 </button>
2121 <button type="button" class="btn btn-default">
22+<<<<<<< HEAD
2223 Stop
2324 </button>
2425 <button type="button" class="btn btn-default"
2526 ng-click="ctrl.help()">
2627 Help
28+=======
29+ Stop
30+ </button>
31+ <button type="button" class="btn btn-default"
32+ ng-click="ctrl.help()">
33+ Help
34+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
2735 </button>
2836 <button type="button" class="btn btn-default" ng-click="ctrl.debug()">
2937 debug
--- a/front-end/app/templates/preview.html
+++ b/front-end/app/templates/preview.html
@@ -1,3 +1,7 @@
1+<<<<<<< HEAD
12 <div class="modal-header">
23 <h3>Preview</h3>
34 </div>
5+=======
6+preview
7+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
--- a/front-end/app/templates/workspace.html
+++ b/front-end/app/templates/workspace.html
@@ -2,7 +2,10 @@
22 <div class="container">
33 <div class="row">
44 <button type="button" class="btn btn-info" ng-click="c.debug()">Debug</button>
5+<<<<<<< HEAD
56 <button type="button" class="btn btn-info" ng-click="c.upload()">Upload</button>
7+=======
8+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
69 <directory index="i" info="info" list="c.directoryList" add="c.addDirectory" ng-repeat="(i, info) in c.directoryList"></directory>
710 </div>
811 <!-- <button type="button" class="btn btn-default" ng-click="c.test()">WORKSPACE</button> -->
--- a/front-end/dist/bundle.js
+++ b/front-end/dist/bundle.js
@@ -63,8 +63,11 @@
6363 __webpack_require__(20);
6464 __webpack_require__(21);
6565 __webpack_require__(22);
66+<<<<<<< HEAD
6667 __webpack_require__(23);
6768 __webpack_require__(24);
69+=======
70+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
6871
6972
7073 /***/ },
@@ -29104,7 +29107,11 @@
2910429107
2910529108 /**
2910629109 * State-based routing for AngularJS
29110+<<<<<<< HEAD
2910729111 * @version v0.2.18
29112+=======
29113+ * @version v0.2.15
29114+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
2910829115 * @link http://angular-ui.github.com/
2910929116 * @license MIT License, http://www.opensource.org/licenses/MIT
2911029117 */
@@ -29126,8 +29133,12 @@
2912629133 isArray = angular.isArray,
2912729134 forEach = angular.forEach,
2912829135 extend = angular.extend,
29136+<<<<<<< HEAD
2912929137 copy = angular.copy,
2913029138 toJson = angular.toJson;
29139+=======
29140+ copy = angular.copy;
29141+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
2913129142
2913229143 function inherit(parent, extra) {
2913329144 return extend(new (extend(function() {}, { prototype: parent }))(), extra);
@@ -29214,7 +29225,11 @@
2921429225 var parents = ancestors($current, $to), parentParams, inherited = {}, inheritList = [];
2921529226
2921629227 for (var i in parents) {
29228+<<<<<<< HEAD
2921729229 if (!parents[i] || !parents[i].params) continue;
29230+=======
29231+ if (!parents[i].params) continue;
29232+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
2921829233 parentParams = objectKeys(parents[i].params);
2921929234 if (!parentParams.length) continue;
2922029235
@@ -29627,7 +29642,11 @@
2962729642 * propagated immediately. Once the `$resolve` promise has been rejected, no
2962829643 * further invocables will be called.
2962929644 *
29645+<<<<<<< HEAD
2963029646 * Cyclic dependencies between invocables are not permitted and will cause `$resolve`
29647+=======
29648+ * Cyclic dependencies between invocables are not permitted and will caues `$resolve`
29649+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
2963129650 * to throw an error. As a special case, an injectable can depend on a parameter
2963229651 * with the same name as the injectable, which will be fulfilled from the `parent`
2963329652 * injectable of the same name. This allows inherited values to be decorated.
@@ -29851,13 +29870,22 @@
2985129870 // The regular expression is somewhat complicated due to the need to allow curly braces
2985229871 // inside the regular expression. The placeholder regexp breaks down as follows:
2985329872 // ([:*])([\w\[\]]+) - classic placeholder ($1 / $2) (search version has - for snake-case)
29873+<<<<<<< HEAD
2985429874 // \{([\w\[\]]+)(?:\:\s*( ... ))?\} - curly brace placeholder ($3) with optional regexp/type ... ($4) (search version has - for snake-case
29875+=======
29876+ // \{([\w\[\]]+)(?:\:( ... ))?\} - curly brace placeholder ($3) with optional regexp/type ... ($4) (search version has - for snake-case
29877+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
2985529878 // (?: ... | ... | ... )+ - the regexp consists of any number of atoms, an atom being either
2985629879 // [^{}\\]+ - anything other than curly braces or backslash
2985729880 // \\. - a backslash escape
2985829881 // \{(?:[^{}\\]+|\\.)*\} - a matched set of curly braces containing other atoms
29882+<<<<<<< HEAD
2985929883 var placeholder = /([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,
2986029884 searchPlaceholder = /([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,
29885+=======
29886+ var placeholder = /([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,
29887+ searchPlaceholder = /([:]?)([\w\[\]-]+)|\{([\w\[\]-]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,
29888+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
2986129889 compiled = '^', last = 0, m,
2986229890 segments = this.segments = [],
2986329891 parentParams = parentMatcher ? parentMatcher.params : {},
@@ -29867,7 +29895,11 @@
2986729895 function addParameter(id, type, config, location) {
2986829896 paramNames.push(id);
2986929897 if (parentParams[id]) return parentParams[id];
29898+<<<<<<< HEAD
2987029899 if (!/^\w+([-.]+\w+)*(?:\[\])?$/.test(id)) throw new Error("Invalid parameter name '" + id + "' in pattern '" + pattern + "'");
29900+=======
29901+ if (!/^\w+(-+\w+)*(?:\[\])?$/.test(id)) throw new Error("Invalid parameter name '" + id + "' in pattern '" + pattern + "'");
29902+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
2987129903 if (params[id]) throw new Error("Duplicate parameter name '" + id + "' in pattern '" + pattern + "'");
2987229904 params[id] = new $$UMFP.Param(id, type, config, location);
2987329905 return params[id];
@@ -29878,10 +29910,14 @@
2987829910 if (!pattern) return result;
2987929911 switch(squash) {
2988029912 case false: surroundPattern = ['(', ')' + (optional ? "?" : "")]; break;
29913+<<<<<<< HEAD
2988129914 case true:
2988229915 result = result.replace(/\/$/, '');
2988329916 surroundPattern = ['(?:\/(', ')|\/)?'];
2988429917 break;
29918+=======
29919+ case true: surroundPattern = ['?(', ')?']; break;
29920+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
2988529921 default: surroundPattern = ['(' + squash + "|", ')?']; break;
2988629922 }
2988729923 return result + surroundPattern[0] + pattern + surroundPattern[1];
@@ -29897,11 +29933,15 @@
2989729933 cfg = config.params[id];
2989829934 segment = pattern.substring(last, m.index);
2989929935 regexp = isSearch ? m[4] : m[4] || (m[1] == '*' ? '.*' : null);
29936+<<<<<<< HEAD
2990029937
2990129938 if (regexp) {
2990229939 type = $$UMFP.type(regexp) || inherit($$UMFP.type("string"), { pattern: new RegExp(regexp, config.caseInsensitive ? 'i' : undefined) });
2990329940 }
2990429941
29942+=======
29943+ type = $$UMFP.type(regexp || "string") || inherit($$UMFP.type("string"), { pattern: new RegExp(regexp, config.caseInsensitive ? 'i' : undefined) });
29944+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
2990529945 return {
2990629946 id: id, regexp: regexp, segment: segment, type: type, cfg: cfg
2990729947 };
@@ -30031,6 +30071,7 @@
3003130071 return map(allReversed, unquoteDashes).reverse();
3003230072 }
3003330073
30074+<<<<<<< HEAD
3003430075 var param, paramVal;
3003530076 for (i = 0; i < nPath; i++) {
3003630077 paramName = paramNames[i];
@@ -30042,11 +30083,23 @@
3004230083 }
3004330084 if (paramVal && param.array === true) paramVal = decodePathArray(paramVal);
3004430085 if (isDefined(paramVal)) paramVal = param.type.decode(paramVal);
30086+=======
30087+ for (i = 0; i < nPath; i++) {
30088+ paramName = paramNames[i];
30089+ var param = this.params[paramName];
30090+ var paramVal = m[i+1];
30091+ // if the param value matches a pre-replace pair, replace the value before decoding.
30092+ for (j = 0; j < param.replace; j++) {
30093+ if (param.replace[j].from === paramVal) paramVal = param.replace[j].to;
30094+ }
30095+ if (paramVal && param.array === true) paramVal = decodePathArray(paramVal);
30096+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3004530097 values[paramName] = param.value(paramVal);
3004630098 }
3004730099 for (/**/; i < nTotal; i++) {
3004830100 paramName = paramNames[i];
3004930101 values[paramName] = this.params[paramName].value(searchParams[paramName]);
30102+<<<<<<< HEAD
3005030103 param = this.params[paramName];
3005130104 paramVal = searchParams[paramName];
3005230105 for (j = 0; j < param.replace.length; j++) {
@@ -30054,6 +30107,8 @@
3005430107 }
3005530108 if (isDefined(paramVal)) paramVal = param.type.decode(paramVal);
3005630109 values[paramName] = param.value(paramVal);
30110+=======
30111+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3005730112 }
3005830113
3005930114 return values;
@@ -30077,7 +30132,11 @@
3007730132
3007830133 /**
3007930134 * @ngdoc function
30135+<<<<<<< HEAD
3008030136 * @name ui.router.util.type:UrlMatcher#validates
30137+=======
30138+ * @name ui.router.util.type:UrlMatcher#validate
30139+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3008130140 * @methodOf ui.router.util.type:UrlMatcher
3008230141 *
3008330142 * @description
@@ -30130,8 +30189,11 @@
3013030189
3013130190 if (isPathParam) {
3013230191 var nextSegment = segments[i + 1];
30192+<<<<<<< HEAD
3013330193 var isFinalPathParam = i + 1 === nPath;
3013430194
30195+=======
30196+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3013530197 if (squash === false) {
3013630198 if (encoded != null) {
3013730199 if (isArray(encoded)) {
@@ -30147,12 +30209,18 @@
3014730209 } else if (isString(squash)) {
3014830210 result += squash + nextSegment;
3014930211 }
30212+<<<<<<< HEAD
3015030213
3015130214 if (isFinalPathParam && param.squash === true && result.slice(-1) === '/') result = result.slice(0, -1);
3015230215 } else {
3015330216 if (encoded == null || (isDefaultValue && squash !== false)) continue;
3015430217 if (!isArray(encoded)) encoded = [ encoded ];
3015530218 if (encoded.length === 0) continue;
30219+=======
30220+ } else {
30221+ if (encoded == null || (isDefaultValue && squash !== false)) continue;
30222+ if (!isArray(encoded)) encoded = [ encoded ];
30223+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3015630224 encoded = map(encoded, encodeURIComponent).join('&' + name + '=');
3015730225 result += (search ? '&' : '?') + (name + '=' + encoded);
3015830226 search = true;
@@ -30317,7 +30385,10 @@
3031730385 // Wraps type (.is/.encode/.decode) functions to operate on each value of an array
3031830386 function arrayHandler(callback, allTruthyMode) {
3031930387 return function handleArray(val) {
30388+<<<<<<< HEAD
3032030389 if (isArray(val) && val.length === 0) return val;
30390+=======
30391+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3032130392 val = arrayWrap(val);
3032230393 var result = map(val, callback);
3032330394 if (allTruthyMode === true)
@@ -30366,6 +30437,7 @@
3036630437
3036730438 var isCaseInsensitive = false, isStrictMode = true, defaultSquashPolicy = false;
3036830439
30440+<<<<<<< HEAD
3036930441 // Use tildes to pre-encode slashes.
3037030442 // If the slashes are simply URLEncoded, the browser can choose to pre-decode them,
3037130443 // and bidirectional encoding/decoding fails.
@@ -30375,6 +30447,13 @@
3037530447
3037630448 var $types = {}, enqueue = true, typeQueue = [], injector, defaultTypes = {
3037730449 "string": {
30450+=======
30451+ function valToString(val) { return val != null ? val.toString().replace(/\//g, "%2F") : val; }
30452+ function valFromString(val) { return val != null ? val.toString().replace(/%2F/g, "/") : val; }
30453+
30454+ var $types = {}, enqueue = true, typeQueue = [], injector, defaultTypes = {
30455+ string: {
30456+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3037830457 encode: valToString,
3037930458 decode: valFromString,
3038030459 // TODO: in 1.0, make string .is() return false if value is undefined/null by default.
@@ -30382,19 +30461,31 @@
3038230461 is: function(val) { return val == null || !isDefined(val) || typeof val === "string"; },
3038330462 pattern: /[^/]*/
3038430463 },
30464+<<<<<<< HEAD
3038530465 "int": {
30466+=======
30467+ int: {
30468+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3038630469 encode: valToString,
3038730470 decode: function(val) { return parseInt(val, 10); },
3038830471 is: function(val) { return isDefined(val) && this.decode(val.toString()) === val; },
3038930472 pattern: /\d+/
3039030473 },
30474+<<<<<<< HEAD
3039130475 "bool": {
30476+=======
30477+ bool: {
30478+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3039230479 encode: function(val) { return val ? 1 : 0; },
3039330480 decode: function(val) { return parseInt(val, 10) !== 0; },
3039430481 is: function(val) { return val === true || val === false; },
3039530482 pattern: /0|1/
3039630483 },
30484+<<<<<<< HEAD
3039730485 "date": {
30486+=======
30487+ date: {
30488+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3039830489 encode: function (val) {
3039930490 if (!this.is(val))
3040030491 return undefined;
@@ -30413,14 +30504,22 @@
3041330504 pattern: /[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,
3041430505 capture: /([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/
3041530506 },
30507+<<<<<<< HEAD
3041630508 "json": {
30509+=======
30510+ json: {
30511+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3041730512 encode: angular.toJson,
3041830513 decode: angular.fromJson,
3041930514 is: angular.isObject,
3042030515 equals: angular.equals,
3042130516 pattern: /[^/]*/
3042230517 },
30518+<<<<<<< HEAD
3042330519 "any": { // does not encode/decode
30520+=======
30521+ any: { // does not encode/decode
30522+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3042430523 encode: angular.identity,
3042530524 decode: angular.identity,
3042630525 equals: angular.equals,
@@ -30714,12 +30813,16 @@
3071430813 if (config.type && urlType) throw new Error("Param '"+id+"' has two type configurations.");
3071530814 if (urlType) return urlType;
3071630815 if (!config.type) return (location === "config" ? $types.any : $types.string);
30816+<<<<<<< HEAD
3071730817
3071830818 if (angular.isString(config.type))
3071930819 return $types[config.type];
3072030820 if (config.type instanceof Type)
3072130821 return config.type;
3072230822 return new Type(config.type);
30823+=======
30824+ return config.type instanceof Type ? config.type : new Type(config.type);
30825+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3072330826 }
3072430827
3072530828 // array config: param name (param[]) overrides default settings. explicit config overrides param name.
@@ -30914,7 +31017,11 @@
3091431017 * });
3091531018 * </pre>
3091631019 *
31020+<<<<<<< HEAD
3091731021 * @param {function} rule Handler function that takes `$injector` and `$location`
31022+=======
31023+ * @param {object} rule Handler function that takes `$injector` and `$location`
31024+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3091831025 * services as arguments. You can use them to return a valid path as a string.
3091931026 *
3092031027 * @return {object} `$urlRouterProvider` - `$urlRouterProvider` instance
@@ -30950,7 +31057,11 @@
3095031057 * });
3095131058 * </pre>
3095231059 *
31060+<<<<<<< HEAD
3095331061 * @param {string|function} rule The url path you want to redirect to or a function
31062+=======
31063+ * @param {string|object} rule The url path you want to redirect to or a function
31064+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3095431065 * rule that returns the url path. The function version is passed two params:
3095531066 * `$injector` and `$location` services, and must return a url string.
3095631067 *
@@ -30979,9 +31090,13 @@
3097931090 * @methodOf ui.router.router.$urlRouterProvider
3098031091 *
3098131092 * @description
31093+<<<<<<< HEAD
3098231094 * Registers a handler for a given url matching.
3098331095 *
3098431096 * If the handler is a string, it is
31097+=======
31098+ * Registers a handler for a given url matching. if handle is a string, it is
31099+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3098531100 * treated as a redirect, and is interpolated according to the syntax of match
3098631101 * (i.e. like `String.replace()` for `RegExp`, or like a `UrlMatcher` pattern otherwise).
3098731102 *
@@ -31010,7 +31125,11 @@
3101031125 * </pre>
3101131126 *
3101231127 * @param {string|object} what The incoming path that you want to redirect.
31128+<<<<<<< HEAD
3101331129 * @param {string|function} handler The path you want to redirect your user to.
31130+=======
31131+ * @param {string|object} handler The path you want to redirect your user to.
31132+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3101431133 */
3101531134 this.when = function (what, handler) {
3101631135 var redirect, handlerIsString = isString(handler);
@@ -31121,8 +31240,13 @@
3112131240 *
3112231241 */
3112331242 this.$get = $get;
31243+<<<<<<< HEAD
3112431244 $get.$inject = ['$location', '$rootScope', '$injector', '$browser', '$sniffer'];
3112531245 function $get( $location, $rootScope, $injector, $browser, $sniffer) {
31246+=======
31247+ $get.$inject = ['$location', '$rootScope', '$injector', '$browser'];
31248+ function $get( $location, $rootScope, $injector, $browser) {
31249+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3112631250
3112731251 var baseHref = $browser.baseHref(), location = $location.url(), lastPushedUrl;
3112831252
@@ -31255,8 +31379,11 @@
3125531379 if (angular.isObject(isHtml5)) {
3125631380 isHtml5 = isHtml5.enabled;
3125731381 }
31382+<<<<<<< HEAD
3125831383
3125931384 isHtml5 = isHtml5 && $sniffer.history;
31385+=======
31386+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3126031387
3126131388 var url = urlMatcher.format(params);
3126231389 options = options || {};
@@ -31330,7 +31457,11 @@
3133031457 // inherit 'data' from parent and override by own values (if any)
3133131458 data: function(state) {
3133231459 if (state.parent && state.parent.data) {
31460+<<<<<<< HEAD
3133331461 state.data = state.self.data = inherit(state.parent.data, state.data);
31462+=======
31463+ state.data = state.self.data = extend({}, state.parent.data, state.data);
31464+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3133431465 }
3133531466 return state.data;
3133631467 },
@@ -31364,8 +31495,12 @@
3136431495
3136531496 // Derive parameters for this state and ensure they're a super-set of parent's parameters
3136631497 params: function(state) {
31498+<<<<<<< HEAD
3136731499 var ownParams = pick(state.ownParams, state.ownParams.$$keys());
3136831500 return state.parent && state.parent.params ? extend(state.parent.params.$$new(), ownParams) : new $$UMFP.ParamSet();
31501+=======
31502+ return state.parent && state.parent.params ? extend(state.parent.params.$$new(), state.ownParams) : new $$UMFP.ParamSet();
31503+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3136931504 },
3137031505
3137131506 // If there is no explicit multi-view configuration, make one up so we don't have
@@ -31462,7 +31597,11 @@
3146231597
3146331598 var name = state.name;
3146431599 if (!isString(name) || name.indexOf('@') >= 0) throw new Error("State must have a valid name");
31600+<<<<<<< HEAD
3146531601 if (states.hasOwnProperty(name)) throw new Error("State '" + name + "' is already defined");
31602+=======
31603+ if (states.hasOwnProperty(name)) throw new Error("State '" + name + "'' is already defined");
31604+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3146631605
3146731606 // Get parent name
3146831607 var parentName = (name.indexOf('.') !== -1) ? name.substring(0, name.lastIndexOf('.'))
@@ -31830,7 +31969,11 @@
3183031969 *
3183131970 * Callback function for when a state is entered. Good way
3183231971 * to trigger an action or dispatch an event, such as opening a dialog.
31972+<<<<<<< HEAD
3183331973 * If minifying your scripts, make sure to explicitly annotate this function,
31974+=======
31975+ * If minifying your scripts, make sure to explictly annotate this function,
31976+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3183431977 * because it won't be automatically annotated by your build tools.
3183531978 *
3183631979 * <pre>onEnter: function(MyService, $stateParams) {
@@ -31842,7 +31985,11 @@
3184231985 *
3184331986 * Callback function for when a state is exited. Good way to
3184431987 * trigger an action or dispatch an event, such as opening a dialog.
31988+<<<<<<< HEAD
3184531989 * If minifying your scripts, make sure to explicitly annotate this function,
31990+=======
31991+ * If minifying your scripts, make sure to explictly annotate this function,
31992+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3184631993 * because it won't be automatically annotated by your build tools.
3184731994 *
3184831995 * <pre>onExit: function(MyService, $stateParams) {
@@ -32173,8 +32320,12 @@
3217332320 *
3217432321 * @param {object=} params A map of the parameters that will be sent to the state,
3217532322 * will populate $stateParams. Any parameters that are not specified will be inherited from currently
32323+<<<<<<< HEAD
3217632324 * defined parameters. Only parameters specified in the state definition can be overridden, new
3217732325 * parameters will be ignored. This allows, for example, going to a sibling state that shares parameters
32326+=======
32327+ * defined parameters. This allows, for example, going to a sibling state that shares parameters
32328+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3217832329 * specified in a parent state. Parameter inheritance only works between common ancestor states, I.e.
3217932330 * transitioning to a sibling will get you the parameters for all parents, transitioning to a child
3218032331 * will get you all current parameters, etc.
@@ -32186,10 +32337,16 @@
3218632337 * - **`relative`** - {object=$state.$current}, When transitioning with relative path (e.g '^'),
3218732338 * defines which state to be relative from.
3218832339 * - **`notify`** - {boolean=true}, If `true` will broadcast $stateChangeStart and $stateChangeSuccess events.
32340+<<<<<<< HEAD
3218932341 * - **`reload`** (v0.2.5) - {boolean=false|string|object}, If `true` will force transition even if no state or params
3219032342 * have changed. It will reload the resolves and views of the current state and parent states.
3219132343 * If `reload` is a string (or state object), the state object is fetched (by name, or object reference); and \
3219232344 * the transition reloads the resolves and views for that matched state, and all its children states.
32345+=======
32346+ * - **`reload`** (v0.2.5) - {boolean=false}, If `true` will force transition even if the state or params
32347+ * have not changed, aka a reload of the same state. It differs from reloadOnSearch because you'd
32348+ * use this when you want to force a reload when *everything* is the same, including search params.
32349+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3219332350 *
3219432351 * @returns {promise} A promise representing the state of the new transition.
3219532352 *
@@ -32327,7 +32484,10 @@
3232732484 if (hash) toParams['#'] = hash;
3232832485 $state.params = toParams;
3232932486 copy($state.params, $stateParams);
32487+<<<<<<< HEAD
3233032488 copy(filterByKeys(to.params.$$keys(), $stateParams), to.locals.globals.$stateParams);
32489+=======
32490+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3233132491 if (options.location && to.navigable && to.navigable.url) {
3233232492 $urlRouter.push(to.navigable.url, toParams, {
3233332493 $$avoidResync: true, replace: options.location === 'replace'
@@ -32340,10 +32500,14 @@
3234032500
3234132501 // Filter parameters before we pass them to event handlers etc.
3234232502 toParams = filterByKeys(to.params.$$keys(), toParams || {});
32503+<<<<<<< HEAD
3234332504
3234432505 // Re-add the saved hash before we start returning things or broadcasting $stateChangeStart
3234532506 if (hash) toParams['#'] = hash;
3234632507
32508+=======
32509+
32510+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3234732511 // Broadcast start event and cancel the transition if requested
3234832512 if (options.notify) {
3234932513 /**
@@ -32373,10 +32537,16 @@
3237332537 * })
3237432538 * </pre>
3237532539 */
32540+<<<<<<< HEAD
3237632541 if ($rootScope.$broadcast('$stateChangeStart', to.self, toParams, from.self, fromParams, options).defaultPrevented) {
3237732542 $rootScope.$broadcast('$stateChangeCancel', to.self, toParams, from.self, fromParams);
3237832543 //Don't update and resync url if there's been a new transition started. see issue #2238, #600
3237932544 if ($state.transition == null) $urlRouter.update();
32545+=======
32546+ if ($rootScope.$broadcast('$stateChangeStart', to.self, toParams, from.self, fromParams).defaultPrevented) {
32547+ $rootScope.$broadcast('$stateChangeCancel', to.self, toParams, from.self, fromParams);
32548+ $urlRouter.update();
32549+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3238032550 return TransitionPrevented;
3238132551 }
3238232552 }
@@ -32422,6 +32592,12 @@
3242232592 }
3242332593 }
3242432594
32595+<<<<<<< HEAD
32596+=======
32597+ // Re-add the saved hash before we start returning things
32598+ if (hash) toParams['#'] = hash;
32599+
32600+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3242532601 // Run it again, to catch any transitions in callbacks
3242632602 if ($state.transition !== transition) return TransitionSuperseded;
3242732603
@@ -32755,7 +32931,11 @@
3275532931 }
3275632932
3275732933 angular.module('ui.router.state')
32934+<<<<<<< HEAD
3275832935 .factory('$stateParams', function () { return {}; })
32936+=======
32937+ .value('$stateParams', {})
32938+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3275932939 .provider('$state', $StateProvider);
3276032940
3276132941
@@ -32796,6 +32976,35 @@
3279632976 if (options.view) {
3279732977 result = $templateFactory.fromConfig(options.view, options.params, options.locals);
3279832978 }
32979+<<<<<<< HEAD
32980+=======
32981+ if (result && options.notify) {
32982+ /**
32983+ * @ngdoc event
32984+ * @name ui.router.state.$state#$viewContentLoading
32985+ * @eventOf ui.router.state.$view
32986+ * @eventType broadcast on root scope
32987+ * @description
32988+ *
32989+ * Fired once the view **begins loading**, *before* the DOM is rendered.
32990+ *
32991+ * @param {Object} event Event object.
32992+ * @param {Object} viewConfig The view config properties (template, controller, etc).
32993+ *
32994+ * @example
32995+ *
32996+ * <pre>
32997+ * $scope.$on('$viewContentLoading',
32998+ * function(event, viewConfig){
32999+ * // Access to all the view config properties.
33000+ * // and one special property 'targetView'
33001+ * // viewConfig.targetView
33002+ * });
33003+ * </pre>
33004+ */
33005+ $rootScope.$broadcast('$viewContentLoading', options);
33006+ }
33007+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3279933008 return result;
3280033009 }
3280133010 };
@@ -32857,8 +33066,11 @@
3285733066
3285833067 angular.module('ui.router.state').provider('$uiViewScroll', $ViewScrollProvider);
3285933068
33069+<<<<<<< HEAD
3286033070 var ngMajorVer = angular.version.major;
3286133071 var ngMinorVer = angular.version.minor;
33072+=======
33073+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3286233074 /**
3286333075 * @ngdoc directive
3286433076 * @name ui.router.state.directive:ui-view
@@ -32883,9 +33095,12 @@
3288333095 * service, {@link ui.router.state.$uiViewScroll}. This custom service let's you
3288433096 * scroll ui-view elements into view when they are populated during a state activation.
3288533097 *
33098+<<<<<<< HEAD
3288633099 * @param {string=} noanimation If truthy, the non-animated renderer will be selected (no animations
3288733100 * will be applied to the ui-view)
3288833101 *
33102+=======
33103+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3288933104 * *Note: To revert back to old [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll)
3289033105 * functionality, call `$uiViewScrollProvider.useAnchorScroll()`.*
3289133106 *
@@ -32997,6 +33212,7 @@
3299733212 // Returns a set of DOM manipulation functions based on which Angular version
3299833213 // it should use
3299933214 function getRenderer(attrs, scope) {
33215+<<<<<<< HEAD
3300033216 var statics = {
3300133217 enter: function (element, target, cb) { target.after(element); cb(); },
3300233218 leave: function (element, cb) { element.remove(); cb(); }
@@ -33030,11 +33246,32 @@
3303033246 } else {
3303133247 $animate.leave(element, cb);
3303233248 }
33249+=======
33250+ var statics = function() {
33251+ return {
33252+ enter: function (element, target, cb) { target.after(element); cb(); },
33253+ leave: function (element, cb) { element.remove(); cb(); }
33254+ };
33255+ };
33256+
33257+ if ($animate) {
33258+ return {
33259+ enter: function(element, target, cb) {
33260+ var promise = $animate.enter(element, null, target, cb);
33261+ if (promise && promise.then) promise.then(cb);
33262+ },
33263+ leave: function(element, cb) {
33264+ var promise = $animate.leave(element, cb);
33265+ if (promise && promise.then) promise.then(cb);
33266+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3303333267 }
3303433268 };
3303533269 }
3303633270
33271+<<<<<<< HEAD
3303733272 // ng 1.1.5
33273+=======
33274+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3303833275 if ($animator) {
3303933276 var animate = $animator && $animator(scope, attrs);
3304033277
@@ -33044,7 +33281,11 @@
3304433281 };
3304533282 }
3304633283
33284+<<<<<<< HEAD
3304733285 return statics;
33286+=======
33287+ return statics();
33288+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3304833289 }
3304933290
3305033291 var directive = {
@@ -33062,10 +33303,17 @@
3306233303 scope.$on('$stateChangeSuccess', function() {
3306333304 updateView(false);
3306433305 });
33306+<<<<<<< HEAD
33307+=======
33308+ scope.$on('$viewContentLoading', function() {
33309+ updateView(false);
33310+ });
33311+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3306533312
3306633313 updateView(true);
3306733314
3306833315 function cleanupLastView() {
33316+<<<<<<< HEAD
3306933317 var _previousEl = previousEl;
3307033318 var _currentScope = currentScope;
3307133319
@@ -33081,15 +33329,29 @@
3308133329 if (_currentScope) {
3308233330 _currentScope.$destroy();
3308333331 }
33332+=======
33333+ if (previousEl) {
33334+ previousEl.remove();
33335+ previousEl = null;
33336+ }
33337+
33338+ if (currentScope) {
33339+ currentScope.$destroy();
33340+ currentScope = null;
33341+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3308433342 }
3308533343
3308633344 if (currentEl) {
3308733345 renderer.leave(currentEl, function() {
33346+<<<<<<< HEAD
3308833347 cleanOld();
33348+=======
33349+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3308933350 previousEl = null;
3309033351 });
3309133352
3309233353 previousEl = currentEl;
33354+<<<<<<< HEAD
3309333355 } else {
3309433356 cleanOld();
3309533357 previousEl = null;
@@ -33097,6 +33359,10 @@
3309733359
3309833360 currentEl = null;
3309933361 currentScope = null;
33362+=======
33363+ currentEl = null;
33364+ }
33365+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3310033366 }
3310133367
3310233368 function updateView(firstTime) {
@@ -33104,6 +33370,7 @@
3310433370 name = getUiViewName(scope, attrs, $element, $interpolate),
3310533371 previousLocals = name && $state.$current && $state.$current.locals[name];
3310633372
33373+<<<<<<< HEAD
3310733374 if (!firstTime && previousLocals === latestLocals || scope._willBeDestroyed) return; // nothing to do
3310833375 newScope = scope.$new();
3310933376 latestLocals = $state.$current.locals[name];
@@ -33122,6 +33389,12 @@
3312233389 */
3312333390 newScope.$emit('$viewContentLoading', name);
3312433391
33392+=======
33393+ if (!firstTime && previousLocals === latestLocals) return; // nothing to do
33394+ newScope = scope.$new();
33395+ latestLocals = $state.$current.locals[name];
33396+
33397+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3312533398 var clone = $transclude(newScope, function(clone) {
3312633399 renderer.enter(clone, $element, function onUiViewEnter() {
3312733400 if(currentScope) {
@@ -33142,6 +33415,7 @@
3314233415 * @name ui.router.state.directive:ui-view#$viewContentLoaded
3314333416 * @eventOf ui.router.state.directive:ui-view
3314433417 * @eventType emits on ui-view directive scope
33418+<<<<<<< HEAD
3314533419 * @description
3314633420 * Fired once the view is **loaded**, *after* the DOM is rendered.
3314733421 *
@@ -33149,6 +33423,14 @@
3314933423 * @param {string} viewName Name of the view.
3315033424 */
3315133425 currentScope.$emit('$viewContentLoaded', name);
33426+=======
33427+ * @description *
33428+ * Fired once the view is **loaded**, *after* the DOM is rendered.
33429+ *
33430+ * @param {Object} event Event object.
33431+ */
33432+ currentScope.$emit('$viewContentLoaded');
33433+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3315233434 currentScope.$eval(onloadExp);
3315333435 }
3315433436 };
@@ -33225,6 +33507,7 @@
3322533507 }
3322633508 }
3322733509
33510+<<<<<<< HEAD
3322833511 function getTypeInfo(el) {
3322933512 // SVGAElement does not use the href attribute, but rather the 'xlinkHref' attribute.
3323033513 var isSvg = Object.prototype.toString.call(el.prop('href')) === '[object SVGAnimatedString]';
@@ -33262,6 +33545,8 @@
3326233545 return { relative: stateContext(el) || $state.$current, inherit: true };
3326333546 }
3326433547
33548+=======
33549+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3326533550 /**
3326633551 * @ngdoc directive
3326733552 * @name ui.router.state.directive:ui-sref
@@ -33272,6 +33557,7 @@
3327233557 * @restrict A
3327333558 *
3327433559 * @description
33560+<<<<<<< HEAD
3327533561 * A directive that binds a link (`<a>` tag) to a state. If the state has an associated
3327633562 * URL, the directive will automatically generate & update the `href` attribute via
3327733563 * the {@link ui.router.state.$state#methods_href $state.href()} method. Clicking
@@ -33283,6 +33569,19 @@
3328333569 * You can also use relative state paths within ui-sref, just like the relative
3328433570 * paths passed to `$state.go()`. You just need to be aware that the path is relative
3328533571 * to the state that the link lives in, in other words the state that loaded the
33572+=======
33573+ * A directive that binds a link (`<a>` tag) to a state. If the state has an associated
33574+ * URL, the directive will automatically generate & update the `href` attribute via
33575+ * the {@link ui.router.state.$state#methods_href $state.href()} method. Clicking
33576+ * the link will trigger a state transition with optional parameters.
33577+ *
33578+ * Also middle-clicking, right-clicking, and ctrl-clicking on the link will be
33579+ * handled natively by the browser.
33580+ *
33581+ * You can also use relative state paths within ui-sref, just like the relative
33582+ * paths passed to `$state.go()`. You just need to be aware that the path is relative
33583+ * to the state that the link lives in, in other words the state that loaded the
33584+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3328633585 * template containing the link.
3328733586 *
3328833587 * You can specify options to pass to {@link ui.router.state.$state#go $state.go()}
@@ -33290,22 +33589,38 @@
3329033589 * and `reload`.
3329133590 *
3329233591 * @example
33592+<<<<<<< HEAD
3329333593 * Here's an example of how you'd use ui-sref and how it would compile. If you have the
3329433594 * following template:
3329533595 * <pre>
3329633596 * <a ui-sref="home">Home</a> | <a ui-sref="about">About</a> | <a ui-sref="{page: 2}">Next page</a>
3329733597 *
33598+=======
33599+ * Here's an example of how you'd use ui-sref and how it would compile. If you have the
33600+ * following template:
33601+ * <pre>
33602+ * <a ui-sref="home">Home</a> | <a ui-sref="about">About</a> | <a ui-sref="{page: 2}">Next page</a>
33603+ *
33604+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3329833605 * <ul>
3329933606 * <li ng-repeat="contact in contacts">
3330033607 * <a ui-sref="contacts.detail({ id: contact.id })">{{ contact.name }}</a>
3330133608 * </li>
3330233609 * </ul>
3330333610 * </pre>
33611+<<<<<<< HEAD
3330433612 *
3330533613 * Then the compiled html would be (assuming Html5Mode is off and current state is contacts):
3330633614 * <pre>
3330733615 * <a href="#/home" ui-sref="home">Home</a> | <a href="#/about" ui-sref="about">About</a> | <a href="#/contacts?page=2" ui-sref="{page: 2}">Next page</a>
3330833616 *
33617+=======
33618+ *
33619+ * Then the compiled html would be (assuming Html5Mode is off and current state is contacts):
33620+ * <pre>
33621+ * <a href="#/home" ui-sref="home">Home</a> | <a href="#/about" ui-sref="about">About</a> | <a href="#/contacts?page=2" ui-sref="{page: 2}">Next page</a>
33622+ *
33623+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3330933624 * <ul>
3331033625 * <li ng-repeat="contact in contacts">
3331133626 * <a href="#/contacts/1" ui-sref="contacts.detail({ id: contact.id })">Joe</a>
@@ -33326,10 +33641,16 @@
3332633641 */
3332733642 $StateRefDirective.$inject = ['$state', '$timeout'];
3332833643 function $StateRefDirective($state, $timeout) {
33644+<<<<<<< HEAD
33645+=======
33646+ var allowedOptions = ['location', 'inherit', 'reload', 'absolute'];
33647+
33648+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3332933649 return {
3333033650 restrict: 'A',
3333133651 require: ['?^uiSrefActive', '?^uiSrefActiveEq'],
3333233652 link: function(scope, element, attrs, uiSrefActive) {
33653+<<<<<<< HEAD
3333333654 var ref = parseStateRef(attrs.uiSref, $state.current.name);
3333433655 var def = { state: ref.state, href: null, params: null };
3333533656 var type = getTypeInfo(element);
@@ -33398,11 +33719,78 @@
3339833719
3339933720 if (!type.clickable) return;
3340033721 element.bind("click", clickHook(element, $state, $timeout, type, function() { return def; }));
33722+=======
33723+ var ref = parseStateRef(attrs.uiSref, $state.current.name);
33724+ var params = null, url = null, base = stateContext(element) || $state.$current;
33725+ // SVGAElement does not use the href attribute, but rather the 'xlinkHref' attribute.
33726+ var hrefKind = Object.prototype.toString.call(element.prop('href')) === '[object SVGAnimatedString]' ?
33727+ 'xlink:href' : 'href';
33728+ var newHref = null, isAnchor = element.prop("tagName").toUpperCase() === "A";
33729+ var isForm = element[0].nodeName === "FORM";
33730+ var attr = isForm ? "action" : hrefKind, nav = true;
33731+
33732+ var options = { relative: base, inherit: true };
33733+ var optionsOverride = scope.$eval(attrs.uiSrefOpts) || {};
33734+
33735+ angular.forEach(allowedOptions, function(option) {
33736+ if (option in optionsOverride) {
33737+ options[option] = optionsOverride[option];
33738+ }
33739+ });
33740+
33741+ var update = function(newVal) {
33742+ if (newVal) params = angular.copy(newVal);
33743+ if (!nav) return;
33744+
33745+ newHref = $state.href(ref.state, params, options);
33746+
33747+ var activeDirective = uiSrefActive[1] || uiSrefActive[0];
33748+ if (activeDirective) {
33749+ activeDirective.$$addStateInfo(ref.state, params);
33750+ }
33751+ if (newHref === null) {
33752+ nav = false;
33753+ return false;
33754+ }
33755+ attrs.$set(attr, newHref);
33756+ };
33757+
33758+ if (ref.paramExpr) {
33759+ scope.$watch(ref.paramExpr, function(newVal, oldVal) {
33760+ if (newVal !== params) update(newVal);
33761+ }, true);
33762+ params = angular.copy(scope.$eval(ref.paramExpr));
33763+ }
33764+ update();
33765+
33766+ if (isForm) return;
33767+
33768+ element.bind("click", function(e) {
33769+ var button = e.which || e.button;
33770+ if ( !(button > 1 || e.ctrlKey || e.metaKey || e.shiftKey || element.attr('target')) ) {
33771+ // HACK: This is to allow ng-clicks to be processed before the transition is initiated:
33772+ var transition = $timeout(function() {
33773+ $state.go(ref.state, params, options);
33774+ });
33775+ e.preventDefault();
33776+
33777+ // if the state has no URL, ignore one preventDefault from the <a> directive.
33778+ var ignorePreventDefaultCount = isAnchor && !newHref ? 1: 0;
33779+ e.preventDefault = function() {
33780+ if (ignorePreventDefaultCount-- <= 0)
33781+ $timeout.cancel(transition);
33782+ };
33783+ }
33784+ });
33785+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3340133786 }
3340233787 };
3340333788 }
3340433789
33790+<<<<<<< HEAD
3340533791
33792+=======
33793+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3340633794 /**
3340733795 * @ngdoc directive
3340833796 * @name ui.router.state.directive:ui-sref-active
@@ -33460,6 +33848,7 @@
3346033848 * </li>
3346133849 * </ul>
3346233850 * </pre>
33851+<<<<<<< HEAD
3346333852 *
3346433853 * It is also possible to pass ui-sref-active an expression that evaluates
3346533854 * to an object hash, whose keys represent active class names and whose
@@ -33478,6 +33867,8 @@
3347833867 * When the current state is "admin.roles" the "active" class will be applied
3347933868 * to both the <div> and <a> elements. It is important to note that the state
3348033869 * names/globs passed to ui-sref-active shadow the state provided by ui-sref.
33870+=======
33871+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3348133872 */
3348233873
3348333874 /**
@@ -33499,12 +33890,18 @@
3349933890 function $StateRefActiveDirective($state, $stateParams, $interpolate) {
3350033891 return {
3350133892 restrict: "A",
33893+<<<<<<< HEAD
3350233894 controller: ['$scope', '$element', '$attrs', '$timeout', function ($scope, $element, $attrs, $timeout) {
3350333895 var states = [], activeClasses = {}, activeEqClass, uiSrefActive;
33896+=======
33897+ controller: ['$scope', '$element', '$attrs', function ($scope, $element, $attrs) {
33898+ var states = [], activeClass;
33899+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3350433900
3350533901 // There probably isn't much point in $observing this
3350633902 // uiSrefActive and uiSrefActiveEq share the same directive object with some
3350733903 // slight difference in logic routing
33904+<<<<<<< HEAD
3350833905 activeEqClass = $interpolate($attrs.uiSrefActiveEq || '', false)($scope);
3350933906
3351033907 try {
@@ -33591,6 +33988,49 @@
3359133988 function exactMatch(state, params) { return $state.is(state.name, params); }
3359233989
3359333990 update();
33991+=======
33992+ activeClass = $interpolate($attrs.uiSrefActiveEq || $attrs.uiSrefActive || '', false)($scope);
33993+
33994+ // Allow uiSref to communicate with uiSrefActive[Equals]
33995+ this.$$addStateInfo = function (newState, newParams) {
33996+ var state = $state.get(newState, stateContext($element));
33997+
33998+ states.push({
33999+ state: state || { name: newState },
34000+ params: newParams
34001+ });
34002+
34003+ update();
34004+ };
34005+
34006+ $scope.$on('$stateChangeSuccess', update);
34007+
34008+ // Update route state
34009+ function update() {
34010+ if (anyMatch()) {
34011+ $element.addClass(activeClass);
34012+ } else {
34013+ $element.removeClass(activeClass);
34014+ }
34015+ }
34016+
34017+ function anyMatch() {
34018+ for (var i = 0; i < states.length; i++) {
34019+ if (isMatch(states[i].state, states[i].params)) {
34020+ return true;
34021+ }
34022+ }
34023+ return false;
34024+ }
34025+
34026+ function isMatch(state, params) {
34027+ if (typeof $attrs.uiSrefActiveEq !== 'undefined') {
34028+ return $state.is(state.name, params);
34029+ } else {
34030+ return $state.includes(state.name, params);
34031+ }
34032+ }
34033+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3359434034 }]
3359534035 };
3359634036 }
@@ -33598,8 +34038,12 @@
3359834038 angular.module('ui.router.state')
3359934039 .directive('uiSref', $StateRefDirective)
3360034040 .directive('uiSrefActive', $StateRefActiveDirective)
34041+<<<<<<< HEAD
3360134042 .directive('uiSrefActiveEq', $StateRefActiveDirective)
3360234043 .directive('uiState', $StateRefDynamicDirective);
34044+=======
34045+ .directive('uiSrefActiveEq', $StateRefActiveDirective);
34046+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3360334047
3360434048 /**
3360534049 * @ngdoc filter
@@ -33612,8 +34056,13 @@
3361234056 */
3361334057 $IsStateFilter.$inject = ['$state'];
3361434058 function $IsStateFilter($state) {
34059+<<<<<<< HEAD
3361534060 var isFilter = function (state, params) {
3361634061 return $state.is(state, params);
34062+=======
34063+ var isFilter = function (state) {
34064+ return $state.is(state);
34065+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3361734066 };
3361834067 isFilter.$stateful = true;
3361934068 return isFilter;
@@ -33630,8 +34079,13 @@
3363034079 */
3363134080 $IncludedByStateFilter.$inject = ['$state'];
3363234081 function $IncludedByStateFilter($state) {
34082+<<<<<<< HEAD
3363334083 var includesFilter = function (state, params, options) {
3363434084 return $state.includes(state, params, options);
34085+=======
34086+ var includesFilter = function (state) {
34087+ return $state.includes(state);
34088+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3363534089 };
3363634090 includesFilter.$stateful = true;
3363734091 return includesFilter;
@@ -33655,11 +34109,19 @@
3365534109 /***/ function(module, exports) {
3365634110
3365734111 /**
34112+<<<<<<< HEAD
3365834113 * @license AngularJS v1.6.2
3365934114 * (c) 2010-2017 Google, Inc. http://angularjs.org
3366034115 * License: MIT
3366134116 */
3366234117 (function(window, angular) {'use strict';
34118+=======
34119+ * @license AngularJS v1.4.8
34120+ * (c) 2010-2015 Google, Inc. http://angularjs.org
34121+ * License: MIT
34122+ */
34123+ (function(window, angular, undefined) {'use strict';
34124+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3366334125
3366434126 var $resourceMinErr = angular.$$minErr('$resource');
3366534127
@@ -33717,6 +34179,7 @@
3371734179 *
3371834180 * <div doc-module-components="ngResource"></div>
3371934181 *
34182+<<<<<<< HEAD
3372034183 * See {@link ngResource.$resourceProvider} and {@link ngResource.$resource} for usage.
3372134184 */
3372234185
@@ -33732,15 +34195,21 @@
3373234195 * ## Dependencies
3373334196 * Requires the {@link ngResource } module to be installed.
3373434197 *
34198+=======
34199+ * See {@link ngResource.$resource `$resource`} for usage.
34200+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3373534201 */
3373634202
3373734203 /**
3373834204 * @ngdoc service
3373934205 * @name $resource
3374034206 * @requires $http
34207+<<<<<<< HEAD
3374134208 * @requires ng.$log
3374234209 * @requires $q
3374334210 * @requires ng.$timeout
34211+=======
34212+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3374434213 *
3374534214 * @description
3374634215 * A factory which creates a resource object that lets you interact with
@@ -33775,9 +34244,14 @@
3377534244 * can escape it with `/\.`.
3377634245 *
3377734246 * @param {Object=} paramDefaults Default values for `url` parameters. These can be overridden in
34247+<<<<<<< HEAD
3377834248 * `actions` methods. If a parameter value is a function, it will be called every time
3377934249 * a param value needs to be obtained for a request (unless the param was overridden). The function
3378034250 * will be passed the current data value as an argument.
34251+=======
34252+ * `actions` methods. If any of the parameter value is a function, it will be executed every time
34253+ * when a param value needs to be obtained for a request (unless the param was overridden).
34254+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3378134255 *
3378234256 * Each key value in the parameter object is first bound to url template if present and then any
3378334257 * excess keys are appended to the url search query after the `?`.
@@ -33785,6 +34259,7 @@
3378534259 * Given a template `/path/:verb` and parameter `{verb:'greet', salutation:'Hello'}` results in
3378634260 * URL `/path/greet?salutation=Hello`.
3378734261 *
34262+<<<<<<< HEAD
3378834263 * If the parameter value is prefixed with `@`, then the value for that parameter will be
3378934264 * extracted from the corresponding property on the `data` object (provided when calling a
3379034265 * "non-GET" action method).
@@ -33799,6 +34274,16 @@
3379934274 * extended.
3380034275 *
3380134276 * The declaration should be created in the format of {@link ng.$http#usage $http.config}:
34277+=======
34278+ * If the parameter value is prefixed with `@` then the value for that parameter will be extracted
34279+ * from the corresponding property on the `data` object (provided when calling an action method). For
34280+ * example, if the `defaultParam` object is `{someParam: '@someProp'}` then the value of `someParam`
34281+ * will be `data.someProp`.
34282+ *
34283+ * @param {Object.<Object>=} actions Hash with declaration of custom actions that should extend
34284+ * the default set of resource actions. The declaration should be created in the format of {@link
34285+ * ng.$http#usage $http.config}:
34286+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3380234287 *
3380334288 * {action1: {method:?, params:?, isArray:?, headers:?, ...},
3380434289 * action2: {method:?, params:?, isArray:?, headers:?, ...},
@@ -33811,9 +34296,14 @@
3381134296 * - **`method`** – {string} – Case insensitive HTTP method (e.g. `GET`, `POST`, `PUT`,
3381234297 * `DELETE`, `JSONP`, etc).
3381334298 * - **`params`** – {Object=} – Optional set of pre-bound parameters for this action. If any of
34299+<<<<<<< HEAD
3381434300 * the parameter value is a function, it will be called every time when a param value needs to
3381534301 * be obtained for a request (unless the param was overridden). The function will be passed the
3381634302 * current data value as an argument.
34303+=======
34304+ * the parameter value is a function, it will be executed every time when a param value needs to
34305+ * be obtained for a request (unless the param was overridden).
34306+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3381734307 * - **`url`** – {string} – action specific `url` override. The url templating is supported just
3381834308 * like for the resource-level urls.
3381934309 * - **`isArray`** – {boolean=} – If true then the returned object for this action is an array,
@@ -33823,6 +34313,7 @@
3382334313 * transform function or an array of such functions. The transform function takes the http
3382434314 * request body and headers and returns its transformed (typically serialized) version.
3382534315 * By default, transformRequest will contain one function that checks if the request data is
34316+<<<<<<< HEAD
3382634317 * an object and serializes it using `angular.toJson`. To prevent this behavior, set
3382734318 * `transformRequest` to an empty array: `transformRequest: []`
3382834319 * - **`transformResponse`** –
@@ -33833,10 +34324,22 @@
3383334324 * By default, transformResponse will contain one function that checks if the response looks
3383434325 * like a JSON string and deserializes it using `angular.fromJson`. To prevent this behavior,
3383534326 * set `transformResponse` to an empty array: `transformResponse: []`
34327+=======
34328+ * an object and serializes to using `angular.toJson`. To prevent this behavior, set
34329+ * `transformRequest` to an empty array: `transformRequest: []`
34330+ * - **`transformResponse`** –
34331+ * `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –
34332+ * transform function or an array of such functions. The transform function takes the http
34333+ * response body and headers and returns its transformed (typically deserialized) version.
34334+ * By default, transformResponse will contain one function that checks if the response looks like
34335+ * a JSON string and deserializes it using `angular.fromJson`. To prevent this behavior, set
34336+ * `transformResponse` to an empty array: `transformResponse: []`
34337+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3383634338 * - **`cache`** – `{boolean|Cache}` – If true, a default $http cache will be used to cache the
3383734339 * GET request, otherwise if a cache instance built with
3383834340 * {@link ng.$cacheFactory $cacheFactory}, this cache will be used for
3383934341 * caching.
34342+<<<<<<< HEAD
3384034343 * - **`timeout`** – `{number}` – timeout in milliseconds.<br />
3384134344 * **Note:** In contrast to {@link ng.$http#usage $http.config}, {@link ng.$q promises} are
3384234345 * **not** supported in $resource, because the same value would be used for multiple requests.
@@ -33845,6 +34348,10 @@
3384534348 * will be cancelled (if not already completed) by calling `$cancelRequest()` on the call's
3384634349 * return value. Calling `$cancelRequest()` for a non-cancellable or an already
3384734350 * completed/cancelled request will have no effect.<br />
34351+=======
34352+ * - **`timeout`** – `{number|Promise}` – timeout in milliseconds, or {@link ng.$q promise} that
34353+ * should abort the request when resolved.
34354+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3384834355 * - **`withCredentials`** - `{boolean}` - whether to set the `withCredentials` flag on the
3384934356 * XHR object. See
3385034357 * [requests with credentials](https://developer.mozilla.org/en/http_access_control#section_5)
@@ -33856,6 +34363,7 @@
3385634363 * with `http response` object. See {@link ng.$http $http interceptors}.
3385734364 *
3385834365 * @param {Object} options Hash with custom settings that should extend the
34366+<<<<<<< HEAD
3385934367 * default `$resourceProvider` behavior. The supported options are:
3386034368 *
3386134369 * - **`stripTrailingSlashes`** – {boolean} – If true then the trailing
@@ -33863,6 +34371,14 @@
3386334371 * - **`cancellable`** – {boolean} – If true, the request made by a "non-instance" call will be
3386434372 * cancelled (if not already completed) by calling `$cancelRequest()` on the call's return value.
3386534373 * This can be overwritten per action. (Defaults to false.)
34374+=======
34375+ * default `$resourceProvider` behavior. The only supported option is
34376+ *
34377+ * Where:
34378+ *
34379+ * - **`stripTrailingSlashes`** – {boolean} – If true then the trailing
34380+ * slashes from any calculated URL will be stripped. (Defaults to true.)
34381+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3386634382 *
3386734383 * @returns {Object} A resource "class" object with methods for the default set of resource actions
3386834384 * optionally extended with custom `actions`. The default set contains these actions:
@@ -33903,14 +34419,24 @@
3390334419 * - non-GET instance actions: `instance.$action([parameters], [success], [error])`
3390434420 *
3390534421 *
34422+<<<<<<< HEAD
3390634423 * Success callback is called with (value (Object|Array), responseHeaders (Function),
3390734424 * status (number), statusText (string)) arguments, where the value is the populated resource
3390834425 * instance or collection object. The error callback is called with (httpResponse) argument.
34426+=======
34427+ * Success callback is called with (value, responseHeaders) arguments, where the value is
34428+ * the populated resource instance or collection object. The error callback is called
34429+ * with (httpResponse) argument.
34430+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3390934431 *
3391034432 * Class actions return empty instance (with additional properties below).
3391134433 * Instance actions return promise of the action.
3391234434 *
34435+<<<<<<< HEAD
3391334436 * The Resource instances and collections have these additional properties:
34437+=======
34438+ * The Resource instances and collection have these additional properties:
34439+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3391434440 *
3391534441 * - `$promise`: the {@link ng.$q promise} of the original server interaction that created this
3391634442 * instance or collection.
@@ -33920,7 +34446,11 @@
3392034446 * {@link ngRoute.$routeProvider resolve section of $routeProvider.when()} to defer view
3392134447 * rendering until the resource(s) are loaded.
3392234448 *
34449+<<<<<<< HEAD
3392334450 * On failure, the promise is rejected with the {@link ng.$http http response} object, without
34451+=======
34452+ * On failure, the promise is resolved with the {@link ng.$http http response} object, without
34453+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3392434454 * the `resource` property.
3392534455 *
3392634456 * If an interceptor object was provided, the promise will instead be resolved with the value
@@ -33930,6 +34460,7 @@
3393034460 * rejection), `false` before that. Knowing if the Resource has been resolved is useful in
3393134461 * data-binding.
3393234462 *
34463+<<<<<<< HEAD
3393334464 * The Resource instances and collections have these additional methods:
3393434465 *
3393534466 * - `$cancelRequest`: If there is a cancellable, pending request related to the instance or
@@ -33943,6 +34474,8 @@
3394334474 * `angular.toJson`) automatically use this method when serializing a Resource instance
3394434475 * (see [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#toJSON()_behavior)).
3394534476 *
34477+=======
34478+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3394634479 * @example
3394734480 *
3394834481 * # Credit card resource
@@ -33987,11 +34520,14 @@
3398734520 *
3398834521 * Calling these methods invoke `$http` on the `url` template with the given `method`, `params` and
3398934522 * `headers`.
34523+<<<<<<< HEAD
3399034524 *
3399134525 * @example
3399234526 *
3399334527 * # User resource
3399434528 *
34529+=======
34530+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3399534531 * When the data is returned from the server then the object is an instance of the resource type and
3399634532 * all of the non-GET methods are available with `$` prefix. This allows you to easily support CRUD
3399734533 * operations (create, read, update, delete) on server-side data.
@@ -34010,10 +34546,17 @@
3401034546 *
3401134547 ```js
3401234548 var User = $resource('/user/:userId', {userId:'@id'});
34549+<<<<<<< HEAD
3401334550 User.get({userId:123}, function(user, getResponseHeaders){
3401434551 user.abc = true;
3401534552 user.$save(function(user, putResponseHeaders) {
3401634553 //user => saved user object
34554+=======
34555+ User.get({userId:123}, function(u, getResponseHeaders){
34556+ u.abc = true;
34557+ u.$save(function(u, putResponseHeaders) {
34558+ //u => saved user object
34559+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3401734560 //putResponseHeaders => $http header getter
3401834561 });
3401934562 });
@@ -34028,11 +34571,16 @@
3402834571 $scope.user = user;
3402934572 });
3403034573 ```
34574+<<<<<<< HEAD
3403134575 *
3403234576 * @example
3403334577 *
3403434578 * # Creating a custom 'PUT' request
3403534579 *
34580+=======
34581+
34582+ * # Creating a custom 'PUT' request
34583+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3403634584 * In this example we create a custom method on our resource to make a PUT request
3403734585 * ```js
3403834586 * var app = angular.module('app', ['ngResource', 'ngRoute']);
@@ -34060,6 +34608,7 @@
3406034608 * // This will PUT /notes/ID with the note object in the request payload
3406134609 * }]);
3406234610 * ```
34611+<<<<<<< HEAD
3406334612 *
3406434613 * @example
3406534614 *
@@ -34160,13 +34709,24 @@
3416034709 * ```
3416134710 *
3416234711 */
34712+=======
34713+ */
34714+ angular.module('ngResource', ['ng']).
34715+ provider('$resource', function() {
34716+ var PROTOCOL_AND_DOMAIN_REGEX = /^https?:\/\/[^\/]*/;
34717+ var provider = this;
34718+
34719+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3416334720 this.defaults = {
3416434721 // Strip slashes by default
3416534722 stripTrailingSlashes: true,
3416634723
34724+<<<<<<< HEAD
3416734725 // Make non-instance requests cancellable (via `$cancelRequest()`)
3416834726 cancellable: false,
3416934727
34728+=======
34729+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3417034730 // Default actions configuration
3417134731 actions: {
3417234732 'get': {method: 'GET'},
@@ -34177,6 +34737,7 @@
3417734737 }
3417834738 };
3417934739
34740+<<<<<<< HEAD
3418034741 this.$get = ['$http', '$log', '$q', '$timeout', function($http, $log, $q, $timeout) {
3418134742
3418234743 var noop = angular.noop,
@@ -34189,6 +34750,54 @@
3418934750 isNumber = angular.isNumber,
3419034751 encodeUriQuery = angular.$$encodeUriQuery,
3419134752 encodeUriSegment = angular.$$encodeUriSegment;
34753+=======
34754+ this.$get = ['$http', '$q', function($http, $q) {
34755+
34756+ var noop = angular.noop,
34757+ forEach = angular.forEach,
34758+ extend = angular.extend,
34759+ copy = angular.copy,
34760+ isFunction = angular.isFunction;
34761+
34762+ /**
34763+ * We need our custom method because encodeURIComponent is too aggressive and doesn't follow
34764+ * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set
34765+ * (pchar) allowed in path segments:
34766+ * segment = *pchar
34767+ * pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
34768+ * pct-encoded = "%" HEXDIG HEXDIG
34769+ * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
34770+ * sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
34771+ * / "*" / "+" / "," / ";" / "="
34772+ */
34773+ function encodeUriSegment(val) {
34774+ return encodeUriQuery(val, true).
34775+ replace(/%26/gi, '&').
34776+ replace(/%3D/gi, '=').
34777+ replace(/%2B/gi, '+');
34778+ }
34779+
34780+
34781+ /**
34782+ * This method is intended for encoding *key* or *value* parts of query component. We need a
34783+ * custom method because encodeURIComponent is too aggressive and encodes stuff that doesn't
34784+ * have to be encoded per http://tools.ietf.org/html/rfc3986:
34785+ * query = *( pchar / "/" / "?" )
34786+ * pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
34787+ * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
34788+ * pct-encoded = "%" HEXDIG HEXDIG
34789+ * sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
34790+ * / "*" / "+" / "," / ";" / "="
34791+ */
34792+ function encodeUriQuery(val, pctEncodeSpaces) {
34793+ return encodeURIComponent(val).
34794+ replace(/%40/gi, '@').
34795+ replace(/%3A/gi, ':').
34796+ replace(/%24/g, '$').
34797+ replace(/%2C/gi, ',').
34798+ replace(/%20/g, (pctEncodeSpaces ? '%20' : '+'));
34799+ }
34800+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3419234801
3419334802 function Route(template, defaults) {
3419434803 this.template = template;
@@ -34202,6 +34811,7 @@
3420234811 url = actionUrl || self.template,
3420334812 val,
3420434813 encodedVal,
34814+<<<<<<< HEAD
3420534815 protocolAndIpv6 = '';
3420634816
3420734817 var urlParams = self.urlParams = Object.create(null);
@@ -34219,10 +34829,28 @@
3421934829 url = url.replace(/\\:/g, ':');
3422034830 url = url.replace(PROTOCOL_AND_IPV6_REGEX, function(match) {
3422134831 protocolAndIpv6 = match;
34832+=======
34833+ protocolAndDomain = '';
34834+
34835+ var urlParams = self.urlParams = {};
34836+ forEach(url.split(/\W/), function(param) {
34837+ if (param === 'hasOwnProperty') {
34838+ throw $resourceMinErr('badname', "hasOwnProperty is not a valid parameter name.");
34839+ }
34840+ if (!(new RegExp("^\\d+$").test(param)) && param &&
34841+ (new RegExp("(^|[^\\\\]):" + param + "(\\W|$)").test(url))) {
34842+ urlParams[param] = true;
34843+ }
34844+ });
34845+ url = url.replace(/\\:/g, ':');
34846+ url = url.replace(PROTOCOL_AND_DOMAIN_REGEX, function(match) {
34847+ protocolAndDomain = match;
34848+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3422234849 return '';
3422334850 });
3422434851
3422534852 params = params || {};
34853+<<<<<<< HEAD
3422634854 forEach(self.urlParams, function(paramInfo, urlParam) {
3422734855 val = params.hasOwnProperty(urlParam) ? params[urlParam] : self.defaults[urlParam];
3422834856 if (isDefined(val) && val !== null) {
@@ -34238,6 +34866,19 @@
3423834866 url = url.replace(new RegExp('(/?):' + urlParam + '(\\W|$)', 'g'), function(match,
3423934867 leadingSlashes, tail) {
3424034868 if (tail.charAt(0) === '/') {
34869+=======
34870+ forEach(self.urlParams, function(_, urlParam) {
34871+ val = params.hasOwnProperty(urlParam) ? params[urlParam] : self.defaults[urlParam];
34872+ if (angular.isDefined(val) && val !== null) {
34873+ encodedVal = encodeUriSegment(val);
34874+ url = url.replace(new RegExp(":" + urlParam + "(\\W|$)", "g"), function(match, p1) {
34875+ return encodedVal + p1;
34876+ });
34877+ } else {
34878+ url = url.replace(new RegExp("(\/?):" + urlParam + "(\\W|$)", "g"), function(match,
34879+ leadingSlashes, tail) {
34880+ if (tail.charAt(0) == '/') {
34881+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3424134882 return tail;
3424234883 } else {
3424334884 return leadingSlashes + tail;
@@ -34251,12 +34892,20 @@
3425134892 url = url.replace(/\/+$/, '') || '/';
3425234893 }
3425334894
34895+<<<<<<< HEAD
3425434896 // Collapse `/.` if found in the last URL path segment before the query.
3425534897 // E.g. `http://url.com/id/.format?q=x` becomes `http://url.com/id.format?q=x`.
3425634898 url = url.replace(/\/\.(?=\w+($|\?))/, '.');
3425734899 // Replace escaped `/\.` with `/.`.
3425834900 // (If `\.` comes from a param value, it will be encoded as `%5C.`.)
3425934901 config.url = protocolAndIpv6 + url.replace(/\/(\\|%5C)\./, '/.');
34902+=======
34903+ // then replace collapse `/.` if found in the last URL path segment before the query
34904+ // E.g. `http://url.com/id./format?q=x` becomes `http://url.com/id.format?q=x`
34905+ url = url.replace(/\/\.(?=\w+($|\?))/, '.');
34906+ // replace escaped `/\.` with `/.`
34907+ config.url = protocolAndDomain + url.replace(/\/\\\./, '/.');
34908+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3426034909
3426134910
3426234911 // set params - delegate param encoding to $http
@@ -34279,8 +34928,13 @@
3427934928 var ids = {};
3428034929 actionParams = extend({}, paramDefaults, actionParams);
3428134930 forEach(actionParams, function(value, key) {
34931+<<<<<<< HEAD
3428234932 if (isFunction(value)) { value = value(data); }
3428334933 ids[key] = value && value.charAt && value.charAt(0) === '@' ?
34934+=======
34935+ if (isFunction(value)) { value = value(); }
34936+ ids[key] = value && value.charAt && value.charAt(0) == '@' ?
34937+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3428434938 lookupDottedPath(data, value.substr(1)) : value;
3428534939 });
3428634940 return ids;
@@ -34298,12 +34952,16 @@
3429834952 var data = extend({}, this);
3429934953 delete data.$promise;
3430034954 delete data.$resolved;
34955+<<<<<<< HEAD
3430134956 delete data.$cancelRequest;
34957+=======
34958+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3430234959 return data;
3430334960 };
3430434961
3430534962 forEach(actions, function(action, name) {
3430634963 var hasBody = /^(POST|PUT|PATCH)$/i.test(action.method);
34964+<<<<<<< HEAD
3430734965 var numericTimeout = action.timeout;
3430834966 var cancellable = isDefined(action.cancellable) ?
3430934967 action.cancellable : route.defaults.cancellable;
@@ -34317,15 +34975,25 @@
3431734975 delete action.timeout;
3431834976 numericTimeout = null;
3431934977 }
34978+=======
34979+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3432034980
3432134981 Resource[name] = function(a1, a2, a3, a4) {
3432234982 var params = {}, data, success, error;
3432334983
34984+<<<<<<< HEAD
34985+=======
34986+ /* jshint -W086 */ /* (purposefully fall through case statements) */
34987+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3432434988 switch (arguments.length) {
3432534989 case 4:
3432634990 error = a4;
3432734991 success = a3;
34992+<<<<<<< HEAD
3432834993 // falls through
34994+=======
34995+ //fallthrough
34996+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3432934997 case 3:
3433034998 case 2:
3433134999 if (isFunction(a2)) {
@@ -34337,14 +35005,21 @@
3433735005
3433835006 success = a2;
3433935007 error = a3;
35008+<<<<<<< HEAD
3434035009 // falls through
35010+=======
35011+ //fallthrough
35012+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3434135013 } else {
3434235014 params = a1;
3434335015 data = a2;
3434435016 success = a3;
3434535017 break;
3434635018 }
35019+<<<<<<< HEAD
3434735020 // falls through
35021+=======
35022+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3434835023 case 1:
3434935024 if (isFunction(a1)) success = a1;
3435035025 else if (hasBody) data = a1;
@@ -34353,9 +35028,16 @@
3435335028 case 0: break;
3435435029 default:
3435535030 throw $resourceMinErr('badargs',
35031+<<<<<<< HEAD
3435635032 'Expected up to 4 arguments [params, data, success, error], got {0} arguments',
3435735033 arguments.length);
3435835034 }
35035+=======
35036+ "Expected up to 4 arguments [params, data, success, error], got {0} arguments",
35037+ arguments.length);
35038+ }
35039+ /* jshint +W086 */ /* (purposefully fall through case statements) */
35040+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3435935041
3436035042 var isInstanceCall = this instanceof Resource;
3436135043 var value = isInstanceCall ? data : (action.isArray ? [] : new Resource(data));
@@ -34364,10 +35046,13 @@
3436435046 defaultResponseInterceptor;
3436535047 var responseErrorInterceptor = action.interceptor && action.interceptor.responseError ||
3436635048 undefined;
35049+<<<<<<< HEAD
3436735050 var hasError = !!error;
3436835051 var hasResponseErrorInterceptor = !!responseErrorInterceptor;
3436935052 var timeoutDeferred;
3437035053 var numericTimeoutPromise;
35054+=======
35055+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3437135056
3437235057 forEach(action, function(value, key) {
3437335058 switch (key) {
@@ -34377,11 +35062,18 @@
3437735062 case 'params':
3437835063 case 'isArray':
3437935064 case 'interceptor':
35065+<<<<<<< HEAD
3438035066 case 'cancellable':
35067+=======
35068+ break;
35069+ case 'timeout':
35070+ httpConfig[key] = value;
35071+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3438135072 break;
3438235073 }
3438335074 });
3438435075
35076+<<<<<<< HEAD
3438535077 if (!isInstanceCall && cancellable) {
3438635078 timeoutDeferred = $q.defer();
3438735079 httpConfig.timeout = timeoutDeferred.promise;
@@ -34391,12 +35083,15 @@
3439135083 }
3439235084 }
3439335085
35086+=======
35087+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3439435088 if (hasBody) httpConfig.data = data;
3439535089 route.setUrlParams(httpConfig,
3439635090 extend({}, extractParams(data, action.params || {}), params),
3439735091 action.url);
3439835092
3439935093 var promise = $http(httpConfig).then(function(response) {
35094+<<<<<<< HEAD
3440035095 var data = response.data;
3440135096
3440235097 if (data) {
@@ -34411,6 +35106,25 @@
3441135106 value.length = 0;
3441235107 forEach(data, function(item) {
3441335108 if (typeof item === 'object') {
35109+=======
35110+ var data = response.data,
35111+ promise = value.$promise;
35112+
35113+ if (data) {
35114+ // Need to convert action.isArray to boolean in case it is undefined
35115+ // jshint -W018
35116+ if (angular.isArray(data) !== (!!action.isArray)) {
35117+ throw $resourceMinErr('badcfg',
35118+ 'Error in resource configuration for action `{0}`. Expected response to ' +
35119+ 'contain an {1} but got an {2} (Request: {3} {4})', name, action.isArray ? 'array' : 'object',
35120+ angular.isArray(data) ? 'array' : 'object', httpConfig.method, httpConfig.url);
35121+ }
35122+ // jshint +W018
35123+ if (action.isArray) {
35124+ value.length = 0;
35125+ forEach(data, function(item) {
35126+ if (typeof item === "object") {
35127+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3441435128 value.push(new Resource(item));
3441535129 } else {
3441635130 // Valid JSON values may be string literals, and these should not be converted
@@ -34420,6 +35134,7 @@
3442035134 }
3442135135 });
3442235136 } else {
35137+<<<<<<< HEAD
3442335138 var promise = value.$promise; // Save the promise
3442435139 shallowClearAndCopy(data, value);
3442535140 value.$promise = promise; // Restore the promise
@@ -34437,11 +35152,30 @@
3443735152 $timeout.cancel(numericTimeoutPromise);
3443835153 timeoutDeferred = numericTimeoutPromise = httpConfig.timeout = null;
3443935154 }
35155+=======
35156+ shallowClearAndCopy(data, value);
35157+ value.$promise = promise;
35158+ }
35159+ }
35160+
35161+ value.$resolved = true;
35162+
35163+ response.resource = value;
35164+
35165+ return response;
35166+ }, function(response) {
35167+ value.$resolved = true;
35168+
35169+ (error || noop)(response);
35170+
35171+ return $q.reject(response);
35172+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3444035173 });
3444135174
3444235175 promise = promise.then(
3444335176 function(response) {
3444435177 var value = responseInterceptor(response);
35178+<<<<<<< HEAD
3444535179 (success || noop)(value, response.headers, response.status, response.statusText);
3444635180 return value;
3444735181 },
@@ -34458,6 +35192,12 @@
3445835192 $q.reject(response);
3445935193 } :
3446035194 undefined);
35195+=======
35196+ (success || noop)(value, response.headers);
35197+ return value;
35198+ },
35199+ responseErrorInterceptor);
35200+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3446135201
3446235202 if (!isInstanceCall) {
3446335203 // we are creating instance / collection
@@ -34465,18 +35205,24 @@
3446535205 // - return the instance / collection
3446635206 value.$promise = promise;
3446735207 value.$resolved = false;
35208+<<<<<<< HEAD
3446835209 if (cancellable) value.$cancelRequest = cancelRequest;
35210+=======
35211+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3446935212
3447035213 return value;
3447135214 }
3447235215
3447335216 // instance call
3447435217 return promise;
35218+<<<<<<< HEAD
3447535219
3447635220 function cancelRequest(value) {
3447735221 promise.catch(noop);
3447835222 timeoutDeferred.resolve(value);
3447935223 }
35224+=======
35225+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3448035226 };
3448135227
3448235228
@@ -34490,8 +35236,12 @@
3449035236 });
3449135237
3449235238 Resource.bind = function(additionalParamDefaults) {
35239+<<<<<<< HEAD
3449335240 var extendedParamDefaults = extend({}, paramDefaults, additionalParamDefaults);
3449435241 return resourceFactory(url, extendedParamDefaults, actions, options);
35242+=======
35243+ return resourceFactory(url, extend({}, paramDefaults, additionalParamDefaults), actions);
35244+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3449535245 };
3449635246
3449735247 return Resource;
@@ -34522,6 +35272,7 @@
3452235272 * angular-ui-bootstrap
3452335273 * http://angular-ui.github.io/bootstrap/
3452435274
35275+<<<<<<< HEAD
3452535276 * Version: 1.3.3 - 2016-05-22
3452635277 * License: MIT
3452735278 */angular.module("ui.bootstrap", ["ui.bootstrap.tpls", "ui.bootstrap.collapse","ui.bootstrap.accordion","ui.bootstrap.alert","ui.bootstrap.buttons","ui.bootstrap.carousel","ui.bootstrap.dateparser","ui.bootstrap.isClass","ui.bootstrap.datepicker","ui.bootstrap.position","ui.bootstrap.datepickerPopup","ui.bootstrap.debounce","ui.bootstrap.dropdown","ui.bootstrap.stackedMap","ui.bootstrap.modal","ui.bootstrap.paging","ui.bootstrap.pager","ui.bootstrap.pagination","ui.bootstrap.tooltip","ui.bootstrap.popover","ui.bootstrap.progressbar","ui.bootstrap.rating","ui.bootstrap.tabs","ui.bootstrap.timepicker","ui.bootstrap.typeahead"]);
@@ -34542,10 +35293,27 @@
3454235293 .addClass('collapse')
3454335294 .attr('aria-expanded', true)
3454435295 .attr('aria-hidden', false)
35296+=======
35297+ * Version: 1.0.0 - 2016-01-08
35298+ * License: MIT
35299+ */
35300+ angular.module("ui.bootstrap", ["ui.bootstrap.tpls", "ui.bootstrap.collapse","ui.bootstrap.accordion","ui.bootstrap.alert","ui.bootstrap.buttons","ui.bootstrap.carousel","ui.bootstrap.dateparser","ui.bootstrap.isClass","ui.bootstrap.position","ui.bootstrap.datepicker","ui.bootstrap.debounce","ui.bootstrap.dropdown","ui.bootstrap.stackedMap","ui.bootstrap.modal","ui.bootstrap.paging","ui.bootstrap.pager","ui.bootstrap.pagination","ui.bootstrap.tooltip","ui.bootstrap.popover","ui.bootstrap.progressbar","ui.bootstrap.rating","ui.bootstrap.tabs","ui.bootstrap.timepicker","ui.bootstrap.typeahead"]);
35301+ angular.module("ui.bootstrap.tpls", ["uib/template/accordion/accordion-group.html","uib/template/accordion/accordion.html","uib/template/alert/alert.html","uib/template/carousel/carousel.html","uib/template/carousel/slide.html","uib/template/datepicker/datepicker.html","uib/template/datepicker/day.html","uib/template/datepicker/month.html","uib/template/datepicker/popup.html","uib/template/datepicker/year.html","uib/template/modal/backdrop.html","uib/template/modal/window.html","uib/template/pager/pager.html","uib/template/pagination/pagination.html","uib/template/tooltip/tooltip-html-popup.html","uib/template/tooltip/tooltip-popup.html","uib/template/tooltip/tooltip-template-popup.html","uib/template/popover/popover-html.html","uib/template/popover/popover-template.html","uib/template/popover/popover.html","uib/template/progressbar/bar.html","uib/template/progressbar/progress.html","uib/template/progressbar/progressbar.html","uib/template/rating/rating.html","uib/template/tabs/tab.html","uib/template/tabs/tabset.html","uib/template/timepicker/timepicker.html","uib/template/typeahead/typeahead-match.html","uib/template/typeahead/typeahead-popup.html"]);
35302+ angular.module('ui.bootstrap.collapse', [])
35303+
35304+ .directive('uibCollapse', ['$animate', '$injector', function($animate, $injector) {
35305+ var $animateCss = $injector.has('$animateCss') ? $injector.get('$animateCss') : null;
35306+ return {
35307+ link: function(scope, element, attrs) {
35308+ if (!scope.$eval(attrs.uibCollapse)) {
35309+ element.addClass('in')
35310+ .addClass('collapse')
35311+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3454535312 .css({height: 'auto'});
3454635313 }
3454735314
3454835315 function expand() {
35316+<<<<<<< HEAD
3454935317 if (element.hasClass('collapse') && element.hasClass('in')) {
3455035318 return;
3455135319 }
@@ -34569,13 +35337,34 @@
3456935337 }).then(expandDone);
3457035338 }
3457135339 });
35340+=======
35341+ element.removeClass('collapse')
35342+ .addClass('collapsing')
35343+ .attr('aria-expanded', true)
35344+ .attr('aria-hidden', false);
35345+
35346+ if ($animateCss) {
35347+ $animateCss(element, {
35348+ addClass: 'in',
35349+ easing: 'ease',
35350+ to: { height: element[0].scrollHeight + 'px' }
35351+ }).start()['finally'](expandDone);
35352+ } else {
35353+ $animate.addClass(element, 'in', {
35354+ to: { height: element[0].scrollHeight + 'px' }
35355+ }).then(expandDone);
35356+ }
35357+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3457235358 }
3457335359
3457435360 function expandDone() {
3457535361 element.removeClass('collapsing')
3457635362 .addClass('collapse')
3457735363 .css({height: 'auto'});
35364+<<<<<<< HEAD
3457835365 expandedExpr(scope);
35366+=======
35367+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3457935368 }
3458035369
3458135370 function collapse() {
@@ -34583,6 +35372,7 @@
3458335372 return collapseDone();
3458435373 }
3458535374
35375+<<<<<<< HEAD
3458635376 $q.resolve(collapsingExpr(scope))
3458735377 .then(function() {
3458835378 element
@@ -34608,13 +35398,40 @@
3460835398 }).then(collapseDone);
3460935399 }
3461035400 });
35401+=======
35402+ element
35403+ // IMPORTANT: The height must be set before adding "collapsing" class.
35404+ // Otherwise, the browser attempts to animate from height 0 (in
35405+ // collapsing class) to the given height here.
35406+ .css({height: element[0].scrollHeight + 'px'})
35407+ // initially all panel collapse have the collapse class, this removal
35408+ // prevents the animation from jumping to collapsed state
35409+ .removeClass('collapse')
35410+ .addClass('collapsing')
35411+ .attr('aria-expanded', false)
35412+ .attr('aria-hidden', true);
35413+
35414+ if ($animateCss) {
35415+ $animateCss(element, {
35416+ removeClass: 'in',
35417+ to: {height: '0'}
35418+ }).start()['finally'](collapseDone);
35419+ } else {
35420+ $animate.removeClass(element, 'in', {
35421+ to: {height: '0'}
35422+ }).then(collapseDone);
35423+ }
35424+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3461135425 }
3461235426
3461335427 function collapseDone() {
3461435428 element.css({height: '0'}); // Required so that collapse works when animation is disabled
3461535429 element.removeClass('collapsing')
3461635430 .addClass('collapse');
35431+<<<<<<< HEAD
3461735432 collapsedExpr(scope);
35433+=======
35434+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3461835435 }
3461935436
3462035437 scope.$watch(attrs.uibCollapse, function(shouldCollapse) {
@@ -34694,7 +35511,10 @@
3469435511 },
3469535512 scope: {
3469635513 heading: '@', // Interpolate the heading attribute onto this scope
35514+<<<<<<< HEAD
3469735515 panelClass: '@?', // Ditto with panelClass
35516+=======
35517+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3469835518 isOpen: '=?',
3469935519 isDisabled: '=?'
3470035520 },
@@ -34722,10 +35542,13 @@
3472235542 }
3472335543 }
3472435544 };
35545+<<<<<<< HEAD
3472535546
3472635547 var id = 'accordiongroup-' + scope.$id + '-' + Math.floor(Math.random() * 10000);
3472735548 scope.headingId = id + '-tab';
3472835549 scope.panelId = id + '-panel';
35550+=======
35551+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3472935552 }
3473035553 };
3473135554 })
@@ -34754,13 +35577,19 @@
3475435577 link: function(scope, element, attrs, controller) {
3475535578 scope.$watch(function() { return controller[attrs.uibAccordionTransclude]; }, function(heading) {
3475635579 if (heading) {
35580+<<<<<<< HEAD
3475735581 var elem = angular.element(element[0].querySelector(getHeaderSelectors()));
3475835582 elem.html('');
3475935583 elem.append(heading);
35584+=======
35585+ element.find('span').html('');
35586+ element.find('span').append(heading);
35587+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3476035588 }
3476135589 });
3476235590 }
3476335591 };
35592+<<<<<<< HEAD
3476435593
3476535594 function getHeaderSelectors() {
3476635595 return 'uib-accordion-header,' +
@@ -34771,6 +35600,8 @@
3477135600 '[data-uib-accordion-header],' +
3477235601 '[x-uib-accordion-header]';
3477335602 }
35603+=======
35604+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3477435605 });
3477535606
3477635607 angular.module('ui.bootstrap.alert', [])
@@ -34850,7 +35681,11 @@
3485035681
3485135682 if (attrs.uibUncheckable) {
3485235683 scope.$watch(uncheckableExpr, function(uncheckable) {
35684+<<<<<<< HEAD
3485335685 attrs.$set('uncheckable', uncheckable ? '' : undefined);
35686+=======
35687+ attrs.$set('uncheckable', uncheckable ? '' : null);
35688+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3485435689 });
3485535690 }
3485635691 }
@@ -34905,12 +35740,19 @@
3490535740 var self = this,
3490635741 slides = self.slides = $scope.slides = [],
3490735742 SLIDE_DIRECTION = 'uib-slideDirection',
35743+<<<<<<< HEAD
3490835744 currentIndex = $scope.active,
3490935745 currentInterval, isPlaying, bufferedTransitions = [];
35746+=======
35747+ currentIndex = -1,
35748+ currentInterval, isPlaying, bufferedTransitions = [];
35749+ self.currentSlide = null;
35750+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3491035751
3491135752 var destroyed = false;
3491235753
3491335754 self.addSlide = function(slide, element) {
35755+<<<<<<< HEAD
3491435756 slides.push({
3491535757 slide: slide,
3491635758 element: element
@@ -34920,10 +35762,17 @@
3492035762 });
3492135763 //if this is the first slide or the slide is set to active, select it
3492235764 if (slide.index === $scope.active || slides.length === 1 && !angular.isNumber($scope.active)) {
35765+=======
35766+ slide.$element = element;
35767+ slides.push(slide);
35768+ //if this is the first slide or the slide is set to active, select it
35769+ if (slides.length === 1 || slide.active) {
35770+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3492335771 if ($scope.$currentTransition) {
3492435772 $scope.$currentTransition = null;
3492535773 }
3492635774
35775+<<<<<<< HEAD
3492735776 currentIndex = slide.index;
3492835777 $scope.active = slide.index;
3492935778 setActive(currentIndex);
@@ -34931,15 +35780,30 @@
3493135780 if (slides.length === 1) {
3493235781 $scope.play();
3493335782 }
35783+=======
35784+ self.select(slides[slides.length - 1]);
35785+ if (slides.length === 1) {
35786+ $scope.play();
35787+ }
35788+ } else {
35789+ slide.active = false;
35790+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3493435791 }
3493535792 };
3493635793
3493735794 self.getCurrentIndex = function() {
35795+<<<<<<< HEAD
3493835796 for (var i = 0; i < slides.length; i++) {
3493935797 if (slides[i].slide.index === currentIndex) {
3494035798 return i;
3494135799 }
3494235800 }
35801+=======
35802+ if (self.currentSlide && angular.isDefined(self.currentSlide.index)) {
35803+ return +self.currentSlide.index;
35804+ }
35805+ return currentIndex;
35806+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3494335807 };
3494435808
3494535809 self.next = $scope.next = function() {
@@ -34950,7 +35814,11 @@
3495035814 return;
3495135815 }
3495235816
35817+<<<<<<< HEAD
3495335818 return self.select(slides[newIndex], 'next');
35819+=======
35820+ return self.select(getSlideByIndex(newIndex), 'next');
35821+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3495435822 };
3495535823
3495635824 self.prev = $scope.prev = function() {
@@ -34961,6 +35829,7 @@
3496135829 return;
3496235830 }
3496335831
35832+<<<<<<< HEAD
3496435833 return self.select(slides[newIndex], 'prev');
3496535834 };
3496635835
@@ -34995,28 +35864,74 @@
3499535864 if (slides.length === 0) {
3499635865 currentIndex = null;
3499735866 $scope.active = null;
35867+=======
35868+ return self.select(getSlideByIndex(newIndex), 'prev');
35869+ };
35870+
35871+ self.removeSlide = function(slide) {
35872+ if (angular.isDefined(slide.index)) {
35873+ slides.sort(function(a, b) {
35874+ return +a.index > +b.index;
35875+ });
35876+ }
35877+
35878+ var bufferedIndex = bufferedTransitions.indexOf(slide);
35879+ if (bufferedIndex !== -1) {
35880+ bufferedTransitions.splice(bufferedIndex, 1);
35881+ }
35882+ //get the index of the slide inside the carousel
35883+ var index = slides.indexOf(slide);
35884+ slides.splice(index, 1);
35885+ $timeout(function() {
35886+ if (slides.length > 0 && slide.active) {
35887+ if (index >= slides.length) {
35888+ self.select(slides[index - 1]);
35889+ } else {
35890+ self.select(slides[index]);
35891+ }
35892+ } else if (currentIndex > index) {
35893+ currentIndex--;
35894+ }
35895+ });
35896+
35897+ //clean the currentSlide when no more slide
35898+ if (slides.length === 0) {
35899+ self.currentSlide = null;
35900+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3499835901 clearBufferedTransitions();
3499935902 }
3500035903 };
3500135904
3500235905 /* direction: "prev" or "next" */
3500335906 self.select = $scope.select = function(nextSlide, direction) {
35907+<<<<<<< HEAD
3500435908 var nextIndex = findSlideIndex(nextSlide.slide);
35909+=======
35910+ var nextIndex = $scope.indexOfSlide(nextSlide);
35911+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3500535912 //Decide direction if it's not given
3500635913 if (direction === undefined) {
3500735914 direction = nextIndex > self.getCurrentIndex() ? 'next' : 'prev';
3500835915 }
3500935916 //Prevent this user-triggered transition from occurring if there is already one in progress
35917+<<<<<<< HEAD
3501035918 if (nextSlide.slide.index !== currentIndex &&
3501135919 !$scope.$currentTransition) {
3501235920 goNext(nextSlide.slide, nextIndex, direction);
3501335921 } else if (nextSlide && nextSlide.slide.index !== currentIndex && $scope.$currentTransition) {
3501435922 bufferedTransitions.push(slides[nextIndex]);
35923+=======
35924+ if (nextSlide && nextSlide !== self.currentSlide && !$scope.$currentTransition) {
35925+ goNext(nextSlide, nextIndex, direction);
35926+ } else if (nextSlide && nextSlide !== self.currentSlide && $scope.$currentTransition) {
35927+ bufferedTransitions.push(nextSlide);
35928+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3501535929 }
3501635930 };
3501735931
3501835932 /* Allow outside people to call indexOf on slides array */
3501935933 $scope.indexOfSlide = function(slide) {
35934+<<<<<<< HEAD
3502035935 return +slide.slide.index;
3502135936 };
3502235937
@@ -35030,6 +35945,13 @@
3503035945
3503135946 $scope.isNextDisabled = function() {
3503235947 return $scope.active === slides.length - 1 && $scope.noWrap();
35948+=======
35949+ return angular.isDefined(slide.index) ? +slide.index : slides.indexOf(slide);
35950+ };
35951+
35952+ $scope.isActive = function(slide) {
35953+ return self.currentSlide === slide;
35954+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3503335955 };
3503435956
3503535957 $scope.pause = function() {
@@ -35059,6 +35981,7 @@
3505935981
3506035982 $scope.$watchCollection('slides', resetTransition);
3506135983
35984+<<<<<<< HEAD
3506235985 $scope.$watch('active', function(index) {
3506335986 if (angular.isNumber(index) && currentIndex !== index) {
3506435987 for (var i = 0; i < slides.length; i++) {
@@ -35077,6 +36000,8 @@
3507736000 }
3507836001 });
3507936002
36003+=======
36004+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3508036005 function clearBufferedTransitions() {
3508136006 while (bufferedTransitions.length) {
3508236007 bufferedTransitions.shift();
@@ -35084,6 +36009,12 @@
3508436009 }
3508536010
3508636011 function getSlideByIndex(index) {
36012+<<<<<<< HEAD
36013+=======
36014+ if (angular.isUndefined(slides[index].index)) {
36015+ return slides[index];
36016+ }
36017+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3508736018 for (var i = 0, l = slides.length; i < l; ++i) {
3508836019 if (slides[i].index === index) {
3508936020 return slides[i];
@@ -35091,6 +36022,7 @@
3509136022 }
3509236023 }
3509336024
36025+<<<<<<< HEAD
3509436026 function setActive(index) {
3509536027 for (var i = 0; i < slides.length; i++) {
3509636028 slides[i].slide.active = i === index;
@@ -35115,12 +36047,33 @@
3511536047
3511636048 $scope.$currentTransition = true;
3511736049 $animate.on('addClass', slides[index].element, function(element, phase) {
36050+=======
36051+ function goNext(slide, index, direction) {
36052+ if (destroyed) { return; }
36053+
36054+ angular.extend(slide, {direction: direction, active: true});
36055+ angular.extend(self.currentSlide || {}, {direction: direction, active: false});
36056+ if ($animate.enabled($element) && !$scope.$currentTransition &&
36057+ slide.$element && self.slides.length > 1) {
36058+ slide.$element.data(SLIDE_DIRECTION, slide.direction);
36059+ if (self.currentSlide && self.currentSlide.$element) {
36060+ self.currentSlide.$element.data(SLIDE_DIRECTION, slide.direction);
36061+ }
36062+
36063+ $scope.$currentTransition = true;
36064+ $animate.on('addClass', slide.$element, function(element, phase) {
36065+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3511836066 if (phase === 'close') {
3511936067 $scope.$currentTransition = null;
3512036068 $animate.off('addClass', element);
3512136069 if (bufferedTransitions.length) {
36070+<<<<<<< HEAD
3512236071 var nextSlide = bufferedTransitions.pop().slide;
3512336072 var nextIndex = nextSlide.index;
36073+=======
36074+ var nextSlide = bufferedTransitions.pop();
36075+ var nextIndex = $scope.indexOfSlide(nextSlide);
36076+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3512436077 var nextDirection = nextIndex > self.getCurrentIndex() ? 'next' : 'prev';
3512536078 clearBufferedTransitions();
3512636079
@@ -35130,14 +36083,20 @@
3513036083 });
3513136084 }
3513236085
36086+<<<<<<< HEAD
3513336087 $scope.active = slide.index;
3513436088 currentIndex = slide.index;
3513536089 setActive(index);
36090+=======
36091+ self.currentSlide = slide;
36092+ currentIndex = index;
36093+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3513636094
3513736095 //every time you change slides, reset the timer
3513836096 restartTimer();
3513936097 }
3514036098
36099+<<<<<<< HEAD
3514136100 function findSlideIndex(slide) {
3514236101 for (var i = 0; i < slides.length; i++) {
3514336102 if (slides[i].slide === slide) {
@@ -35146,6 +36105,8 @@
3514636105 }
3514736106 }
3514836107
36108+=======
36109+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3514936110 function resetTimer() {
3515036111 if (currentInterval) {
3515136112 $interval.cancel(currentInterval);
@@ -35188,7 +36149,10 @@
3518836149 return attrs.templateUrl || 'uib/template/carousel/carousel.html';
3518936150 },
3519036151 scope: {
36152+<<<<<<< HEAD
3519136153 active: '=',
36154+=======
36155+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3519236156 interval: '=',
3519336157 noTransition: '=',
3519436158 noPause: '=',
@@ -35206,6 +36170,10 @@
3520636170 return attrs.templateUrl || 'uib/template/carousel/slide.html';
3520736171 },
3520836172 scope: {
36173+<<<<<<< HEAD
36174+=======
36175+ active: '=?',
36176+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3520936177 actual: '=?',
3521036178 index: '=?'
3521136179 },
@@ -35215,6 +36183,15 @@
3521536183 scope.$on('$destroy', function() {
3521636184 carouselCtrl.removeSlide(scope);
3521736185 });
36186+<<<<<<< HEAD
36187+=======
36188+
36189+ scope.$watch('active', function(active) {
36190+ if (active) {
36191+ carouselCtrl.select(scope);
36192+ }
36193+ });
36194+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3521836195 }
3521936196 };
3522036197 })
@@ -35272,7 +36249,11 @@
3527236249
3527336250 angular.module('ui.bootstrap.dateparser', [])
3527436251
36252+<<<<<<< HEAD
3527536253 .service('uibDateParser', ['$log', '$locale', 'dateFilter', 'orderByFilter', function($log, $locale, dateFilter, orderByFilter) {
36254+=======
36255+ .service('uibDateParser', ['$log', '$locale', 'orderByFilter', function($log, $locale, orderByFilter) {
36256+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3527636257 // Pulled from https://github.com/mbostock/d3/blob/master/src/format/requote.js
3527736258 var SPECIAL_CHARACTERS_REGEXP = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;
3527836259
@@ -35283,42 +36264,58 @@
3528336264 localeId = $locale.id;
3528436265
3528536266 this.parsers = {};
36267+<<<<<<< HEAD
3528636268 this.formatters = {};
36269+=======
36270+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3528736271
3528836272 formatCodeToRegex = [
3528936273 {
3529036274 key: 'yyyy',
3529136275 regex: '\\d{4}',
36276+<<<<<<< HEAD
3529236277 apply: function(value) { this.year = +value; },
3529336278 formatter: function(date) {
3529436279 var _date = new Date();
3529536280 _date.setFullYear(Math.abs(date.getFullYear()));
3529636281 return dateFilter(_date, 'yyyy');
3529736282 }
36283+=======
36284+ apply: function(value) { this.year = +value; }
36285+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3529836286 },
3529936287 {
3530036288 key: 'yy',
3530136289 regex: '\\d{2}',
36290+<<<<<<< HEAD
3530236291 apply: function(value) { value = +value; this.year = value < 69 ? value + 2000 : value + 1900; },
3530336292 formatter: function(date) {
3530436293 var _date = new Date();
3530536294 _date.setFullYear(Math.abs(date.getFullYear()));
3530636295 return dateFilter(_date, 'yy');
3530736296 }
36297+=======
36298+ apply: function(value) { this.year = +value + 2000; }
36299+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3530836300 },
3530936301 {
3531036302 key: 'y',
3531136303 regex: '\\d{1,4}',
36304+<<<<<<< HEAD
3531236305 apply: function(value) { this.year = +value; },
3531336306 formatter: function(date) {
3531436307 var _date = new Date();
3531536308 _date.setFullYear(Math.abs(date.getFullYear()));
3531636309 return dateFilter(_date, 'y');
3531736310 }
36311+=======
36312+ apply: function(value) { this.year = +value; }
36313+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3531836314 },
3531936315 {
3532036316 key: 'M!',
3532136317 regex: '0?[1-9]|1[0-2]',
36318+<<<<<<< HEAD
3532236319 apply: function(value) { this.month = value - 1; },
3532336320 formatter: function(date) {
3532436321 var value = date.getMonth();
@@ -35328,34 +36325,54 @@
3532836325
3532936326 return dateFilter(date, 'M');
3533036327 }
36328+=======
36329+ apply: function(value) { this.month = value - 1; }
36330+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3533136331 },
3533236332 {
3533336333 key: 'MMMM',
3533436334 regex: $locale.DATETIME_FORMATS.MONTH.join('|'),
36335+<<<<<<< HEAD
3533536336 apply: function(value) { this.month = $locale.DATETIME_FORMATS.MONTH.indexOf(value); },
3533636337 formatter: function(date) { return dateFilter(date, 'MMMM'); }
36338+=======
36339+ apply: function(value) { this.month = $locale.DATETIME_FORMATS.MONTH.indexOf(value); }
36340+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3533736341 },
3533836342 {
3533936343 key: 'MMM',
3534036344 regex: $locale.DATETIME_FORMATS.SHORTMONTH.join('|'),
36345+<<<<<<< HEAD
3534136346 apply: function(value) { this.month = $locale.DATETIME_FORMATS.SHORTMONTH.indexOf(value); },
3534236347 formatter: function(date) { return dateFilter(date, 'MMM'); }
36348+=======
36349+ apply: function(value) { this.month = $locale.DATETIME_FORMATS.SHORTMONTH.indexOf(value); }
36350+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3534336351 },
3534436352 {
3534536353 key: 'MM',
3534636354 regex: '0[1-9]|1[0-2]',
36355+<<<<<<< HEAD
3534736356 apply: function(value) { this.month = value - 1; },
3534836357 formatter: function(date) { return dateFilter(date, 'MM'); }
36358+=======
36359+ apply: function(value) { this.month = value - 1; }
36360+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3534936361 },
3535036362 {
3535136363 key: 'M',
3535236364 regex: '[1-9]|1[0-2]',
36365+<<<<<<< HEAD
3535336366 apply: function(value) { this.month = value - 1; },
3535436367 formatter: function(date) { return dateFilter(date, 'M'); }
36368+=======
36369+ apply: function(value) { this.month = value - 1; }
36370+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3535536371 },
3535636372 {
3535736373 key: 'd!',
3535836374 regex: '[0-2]?[0-9]{1}|3[0-1]{1}',
36375+<<<<<<< HEAD
3535936376 apply: function(value) { this.date = +value; },
3536036377 formatter: function(date) {
3536136378 var value = date.getDate();
@@ -35365,16 +36382,24 @@
3536536382
3536636383 return dateFilter(date, 'd');
3536736384 }
36385+=======
36386+ apply: function(value) { this.date = +value; }
36387+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3536836388 },
3536936389 {
3537036390 key: 'dd',
3537136391 regex: '[0-2][0-9]{1}|3[0-1]{1}',
36392+<<<<<<< HEAD
3537236393 apply: function(value) { this.date = +value; },
3537336394 formatter: function(date) { return dateFilter(date, 'dd'); }
36395+=======
36396+ apply: function(value) { this.date = +value; }
36397+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3537436398 },
3537536399 {
3537636400 key: 'd',
3537736401 regex: '[1-2]?[0-9]{1}|3[0-1]{1}',
36402+<<<<<<< HEAD
3537836403 apply: function(value) { this.date = +value; },
3537936404 formatter: function(date) { return dateFilter(date, 'd'); }
3538036405 },
@@ -35387,60 +36412,107 @@
3538736412 key: 'EEE',
3538836413 regex: $locale.DATETIME_FORMATS.SHORTDAY.join('|'),
3538936414 formatter: function(date) { return dateFilter(date, 'EEE'); }
36415+=======
36416+ apply: function(value) { this.date = +value; }
36417+ },
36418+ {
36419+ key: 'EEEE',
36420+ regex: $locale.DATETIME_FORMATS.DAY.join('|')
36421+ },
36422+ {
36423+ key: 'EEE',
36424+ regex: $locale.DATETIME_FORMATS.SHORTDAY.join('|')
36425+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3539036426 },
3539136427 {
3539236428 key: 'HH',
3539336429 regex: '(?:0|1)[0-9]|2[0-3]',
36430+<<<<<<< HEAD
3539436431 apply: function(value) { this.hours = +value; },
3539536432 formatter: function(date) { return dateFilter(date, 'HH'); }
36433+=======
36434+ apply: function(value) { this.hours = +value; }
36435+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3539636436 },
3539736437 {
3539836438 key: 'hh',
3539936439 regex: '0[0-9]|1[0-2]',
36440+<<<<<<< HEAD
3540036441 apply: function(value) { this.hours = +value; },
3540136442 formatter: function(date) { return dateFilter(date, 'hh'); }
36443+=======
36444+ apply: function(value) { this.hours = +value; }
36445+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3540236446 },
3540336447 {
3540436448 key: 'H',
3540536449 regex: '1?[0-9]|2[0-3]',
36450+<<<<<<< HEAD
3540636451 apply: function(value) { this.hours = +value; },
3540736452 formatter: function(date) { return dateFilter(date, 'H'); }
36453+=======
36454+ apply: function(value) { this.hours = +value; }
36455+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3540836456 },
3540936457 {
3541036458 key: 'h',
3541136459 regex: '[0-9]|1[0-2]',
36460+<<<<<<< HEAD
3541236461 apply: function(value) { this.hours = +value; },
3541336462 formatter: function(date) { return dateFilter(date, 'h'); }
36463+=======
36464+ apply: function(value) { this.hours = +value; }
36465+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3541436466 },
3541536467 {
3541636468 key: 'mm',
3541736469 regex: '[0-5][0-9]',
36470+<<<<<<< HEAD
3541836471 apply: function(value) { this.minutes = +value; },
3541936472 formatter: function(date) { return dateFilter(date, 'mm'); }
36473+=======
36474+ apply: function(value) { this.minutes = +value; }
36475+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3542036476 },
3542136477 {
3542236478 key: 'm',
3542336479 regex: '[0-9]|[1-5][0-9]',
36480+<<<<<<< HEAD
3542436481 apply: function(value) { this.minutes = +value; },
3542536482 formatter: function(date) { return dateFilter(date, 'm'); }
36483+=======
36484+ apply: function(value) { this.minutes = +value; }
36485+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3542636486 },
3542736487 {
3542836488 key: 'sss',
3542936489 regex: '[0-9][0-9][0-9]',
36490+<<<<<<< HEAD
3543036491 apply: function(value) { this.milliseconds = +value; },
3543136492 formatter: function(date) { return dateFilter(date, 'sss'); }
36493+=======
36494+ apply: function(value) { this.milliseconds = +value; }
36495+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3543236496 },
3543336497 {
3543436498 key: 'ss',
3543536499 regex: '[0-5][0-9]',
36500+<<<<<<< HEAD
3543636501 apply: function(value) { this.seconds = +value; },
3543736502 formatter: function(date) { return dateFilter(date, 'ss'); }
36503+=======
36504+ apply: function(value) { this.seconds = +value; }
36505+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3543836506 },
3543936507 {
3544036508 key: 's',
3544136509 regex: '[0-9]|[1-5][0-9]',
36510+<<<<<<< HEAD
3544236511 apply: function(value) { this.seconds = +value; },
3544336512 formatter: function(date) { return dateFilter(date, 's'); }
36513+=======
36514+ apply: function(value) { this.seconds = +value; }
36515+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3544436516 },
3544536517 {
3544636518 key: 'a',
@@ -35453,8 +36525,12 @@
3545336525 if (value === 'PM') {
3545436526 this.hours += 12;
3545536527 }
36528+<<<<<<< HEAD
3545636529 },
3545736530 formatter: function(date) { return dateFilter(date, 'a'); }
36531+=======
36532+ }
36533+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3545836534 },
3545936535 {
3546036536 key: 'Z',
@@ -35466,13 +36542,17 @@
3546636542 minutes = matches[3];
3546736543 this.hours += toInt(sign + hours);
3546836544 this.minutes += toInt(sign + minutes);
36545+<<<<<<< HEAD
3546936546 },
3547036547 formatter: function(date) {
3547136548 return dateFilter(date, 'Z');
36549+=======
36550+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3547236551 }
3547336552 },
3547436553 {
3547536554 key: 'ww',
36555+<<<<<<< HEAD
3547636556 regex: '[0-4][0-9]|5[0-3]',
3547736557 formatter: function(date) { return dateFilter(date, 'ww'); }
3547836558 },
@@ -35500,13 +36580,40 @@
3550036580 key: 'G',
3550136581 regex: $locale.DATETIME_FORMATS.ERAS.join('|'),
3550236582 formatter: function(date) { return dateFilter(date, 'G'); }
36583+=======
36584+ regex: '[0-4][0-9]|5[0-3]'
36585+ },
36586+ {
36587+ key: 'w',
36588+ regex: '[0-9]|[1-4][0-9]|5[0-3]'
36589+ },
36590+ {
36591+ key: 'GGGG',
36592+ regex: $locale.DATETIME_FORMATS.ERANAMES.join('|').replace(/\s/g, '\\s')
36593+ },
36594+ {
36595+ key: 'GGG',
36596+ regex: $locale.DATETIME_FORMATS.ERAS.join('|')
36597+ },
36598+ {
36599+ key: 'GG',
36600+ regex: $locale.DATETIME_FORMATS.ERAS.join('|')
36601+ },
36602+ {
36603+ key: 'G',
36604+ regex: $locale.DATETIME_FORMATS.ERAS.join('|')
36605+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3550336606 }
3550436607 ];
3550536608 };
3550636609
3550736610 this.init();
3550836611
36612+<<<<<<< HEAD
3550936613 function createParser(format, func) {
36614+=======
36615+ function createParser(format) {
36616+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3551036617 var map = [], regex = format.split('');
3551136618
3551236619 // check for literal values
@@ -35554,8 +36661,12 @@
3555436661
3555536662 map.push({
3555636663 index: index,
36664+<<<<<<< HEAD
3555736665 key: data.key,
3555836666 apply: data[func],
36667+=======
36668+ apply: data.apply,
36669+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3555936670 matcher: data.regex
3556036671 });
3556136672 }
@@ -35567,6 +36678,7 @@
3556736678 };
3556836679 }
3556936680
36681+<<<<<<< HEAD
3557036682 this.filter = function(date, format) {
3557136683 if (!angular.isDate(date) || isNaN(date) || !format) {
3557236684 return '';
@@ -35604,6 +36716,8 @@
3560436716 }, '');
3560536717 };
3560636718
36719+=======
36720+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3560736721 this.parse = function(input, format, baseDate) {
3560836722 if (!angular.isString(input) || !format) {
3560936723 return input;
@@ -35617,7 +36731,11 @@
3561736731 }
3561836732
3561936733 if (!this.parsers[format]) {
36734+<<<<<<< HEAD
3562036735 this.parsers[format] = createParser(format, 'apply');
36736+=======
36737+ this.parsers[format] = createParser(format);
36738+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3562136739 }
3562236740
3562336741 var parser = this.parsers[format],
@@ -35705,7 +36823,11 @@
3570536823 this.timezoneToOffset = timezoneToOffset;
3570636824 this.addDateMinutes = addDateMinutes;
3570736825 this.convertTimezoneToLocal = convertTimezoneToLocal;
36826+<<<<<<< HEAD
3570836827
36828+=======
36829+
36830+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3570936831 function toTimezone(date, timezone) {
3571036832 return date && timezone ? convertTimezoneToLocal(date, timezone) : date;
3571136833 }
@@ -35714,9 +36836,14 @@
3571436836 return date && timezone ? convertTimezoneToLocal(date, timezone, true) : date;
3571536837 }
3571636838
36839+<<<<<<< HEAD
3571736840 //https://github.com/angular/angular.js/blob/622c42169699ec07fc6daaa19fe6d224e5d2f70e/src/Angular.js#L1207
3571836841 function timezoneToOffset(timezone, fallback) {
3571936842 timezone = timezone.replace(/:/g, '');
36843+=======
36844+ //https://github.com/angular/angular.js/blob/4daafd3dbe6a80d578f5a31df1bb99c77559543e/src/Angular.js#L1207
36845+ function timezoneToOffset(timezone, fallback) {
36846+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3572036847 var requestedTimezoneOffset = Date.parse('Jan 01, 1970 00:00:00 ' + timezone) / 60000;
3572136848 return isNaN(requestedTimezoneOffset) ? fallback : requestedTimezoneOffset;
3572236849 }
@@ -35729,9 +36856,14 @@
3572936856
3573036857 function convertTimezoneToLocal(date, timezone, reverse) {
3573136858 reverse = reverse ? -1 : 1;
36859+<<<<<<< HEAD
3573236860 var dateTimezoneOffset = date.getTimezoneOffset();
3573336861 var timezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset);
3573436862 return addDateMinutes(date, reverse * (timezoneOffset - dateTimezoneOffset));
36863+=======
36864+ var timezoneOffset = timezoneToOffset(timezone, date.getTimezoneOffset());
36865+ return addDateMinutes(date, reverse * (timezoneOffset - date.getTimezoneOffset()));
36866+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3573536867 }
3573636868 }]);
3573736869
@@ -35750,7 +36882,11 @@
3575036882
3575136883 return {
3575236884 restrict: 'A',
36885+<<<<<<< HEAD
3575336886 compile: function(tElement, tAttrs) {
36887+=======
36888+ compile: function (tElement, tAttrs) {
36889+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3575436890 var linkedScopes = [];
3575536891 var instances = [];
3575636892 var expToData = {};
@@ -35769,7 +36905,11 @@
3576936905 element: element
3577036906 });
3577136907
36908+<<<<<<< HEAD
3577236909 exps.forEach(function(exp, k) {
36910+=======
36911+ exps.forEach(function (exp, k) {
36912+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3577336913 addForExp(exp, scope);
3577436914 });
3577536915
@@ -35782,9 +36922,15 @@
3578236922 var compareWithExp = matches[2];
3578336923 var data = expToData[exp];
3578436924 if (!data) {
36925+<<<<<<< HEAD
3578536926 var watchFn = function(compareWithVal) {
3578636927 var newActivated = null;
3578736928 instances.some(function(instance) {
36929+=======
36930+ var watchFn = function (compareWithVal) {
36931+ var newActivated = null;
36932+ instances.some(function (instance) {
36933+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3578836934 var thisVal = instance.scope.$eval(onExp);
3578936935 if (thisVal === compareWithVal) {
3579036936 newActivated = instance;
@@ -35819,19 +36965,29 @@
3581936965 instances.splice(index, 1);
3582036966 if (linkedScopes.length) {
3582136967 var newWatchScope = linkedScopes[0];
36968+<<<<<<< HEAD
3582236969 angular.forEach(expToData, function(data) {
36970+=======
36971+ angular.forEach(expToData, function (data) {
36972+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3582336973 if (data.scope === removedScope) {
3582436974 data.watcher = newWatchScope.$watch(data.compareWithExp, data.watchFn);
3582536975 data.scope = newWatchScope;
3582636976 }
3582736977 });
36978+<<<<<<< HEAD
3582836979 } else {
36980+=======
36981+ }
36982+ else {
36983+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3582936984 expToData = {};
3583036985 }
3583136986 }
3583236987 }
3583336988 };
3583436989 }]);
36990+<<<<<<< HEAD
3583536991 angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootstrap.isClass'])
3583636992
3583736993 .value('$datepickerSuppressError', false)
@@ -36125,355 +37281,7 @@
3612537281 setMode(self.modes[self.modes.indexOf($scope.datepickerMode) + direction]);
3612637282
3612737283 $scope.$emit('uib:datepicker.mode');
36128- };
36129-
36130- // Key event mapper
36131- $scope.keys = { 13: 'enter', 32: 'space', 33: 'pageup', 34: 'pagedown', 35: 'end', 36: 'home', 37: 'left', 38: 'up', 39: 'right', 40: 'down' };
36132-
36133- var focusElement = function() {
36134- self.element[0].focus();
36135- };
36136-
36137- // Listen for focus requests from popup directive
36138- $scope.$on('uib:datepicker.focus', focusElement);
36139-
36140- $scope.keydown = function(evt) {
36141- var key = $scope.keys[evt.which];
36142-
36143- if (!key || evt.shiftKey || evt.altKey || $scope.disabled) {
36144- return;
36145- }
36146-
36147- evt.preventDefault();
36148- if (!self.shortcutPropagation) {
36149- evt.stopPropagation();
36150- }
36151-
36152- if (key === 'enter' || key === 'space') {
36153- if (self.isDisabled(self.activeDate)) {
36154- return; // do nothing
36155- }
36156- $scope.select(self.activeDate);
36157- } else if (evt.ctrlKey && (key === 'up' || key === 'down')) {
36158- $scope.toggleMode(key === 'up' ? 1 : -1);
36159- } else {
36160- self.handleKeyDown(key, evt);
36161- self.refreshView();
36162- }
36163- };
36164-
36165- $scope.$on('$destroy', function() {
36166- //Clear all watch listeners on destroy
36167- while (watchListeners.length) {
36168- watchListeners.shift()();
36169- }
36170- });
36171-
36172- function setMode(mode) {
36173- $scope.datepickerMode = mode;
36174- $scope.datepickerOptions.datepickerMode = mode;
36175- }
36176- }])
36177-
36178- .controller('UibDaypickerController', ['$scope', '$element', 'dateFilter', function(scope, $element, dateFilter) {
36179- var DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
36180-
36181- this.step = { months: 1 };
36182- this.element = $element;
36183- function getDaysInMonth(year, month) {
36184- return month === 1 && year % 4 === 0 &&
36185- (year % 100 !== 0 || year % 400 === 0) ? 29 : DAYS_IN_MONTH[month];
36186- }
36187-
36188- this.init = function(ctrl) {
36189- angular.extend(ctrl, this);
36190- scope.showWeeks = ctrl.showWeeks;
36191- ctrl.refreshView();
36192- };
36193-
36194- this.getDates = function(startDate, n) {
36195- var dates = new Array(n), current = new Date(startDate), i = 0, date;
36196- while (i < n) {
36197- date = new Date(current);
36198- dates[i++] = date;
36199- current.setDate(current.getDate() + 1);
36200- }
36201- return dates;
36202- };
36203-
36204- this._refreshView = function() {
36205- var year = this.activeDate.getFullYear(),
36206- month = this.activeDate.getMonth(),
36207- firstDayOfMonth = new Date(this.activeDate);
36208-
36209- firstDayOfMonth.setFullYear(year, month, 1);
36210-
36211- var difference = this.startingDay - firstDayOfMonth.getDay(),
36212- numDisplayedFromPreviousMonth = difference > 0 ?
36213- 7 - difference : - difference,
36214- firstDate = new Date(firstDayOfMonth);
36215-
36216- if (numDisplayedFromPreviousMonth > 0) {
36217- firstDate.setDate(-numDisplayedFromPreviousMonth + 1);
36218- }
36219-
36220- // 42 is the number of days on a six-week calendar
36221- var days = this.getDates(firstDate, 42);
36222- for (var i = 0; i < 42; i ++) {
36223- days[i] = angular.extend(this.createDateObject(days[i], this.formatDay), {
36224- secondary: days[i].getMonth() !== month,
36225- uid: scope.uniqueId + '-' + i
36226- });
36227- }
36228-
36229- scope.labels = new Array(7);
36230- for (var j = 0; j < 7; j++) {
36231- scope.labels[j] = {
36232- abbr: dateFilter(days[j].date, this.formatDayHeader),
36233- full: dateFilter(days[j].date, 'EEEE')
36234- };
36235- }
36236-
36237- scope.title = dateFilter(this.activeDate, this.formatDayTitle);
36238- scope.rows = this.split(days, 7);
36239-
36240- if (scope.showWeeks) {
36241- scope.weekNumbers = [];
36242- var thursdayIndex = (4 + 7 - this.startingDay) % 7,
36243- numWeeks = scope.rows.length;
36244- for (var curWeek = 0; curWeek < numWeeks; curWeek++) {
36245- scope.weekNumbers.push(
36246- getISO8601WeekNumber(scope.rows[curWeek][thursdayIndex].date));
36247- }
36248- }
36249- };
36250-
36251- this.compare = function(date1, date2) {
36252- var _date1 = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate());
36253- var _date2 = new Date(date2.getFullYear(), date2.getMonth(), date2.getDate());
36254- _date1.setFullYear(date1.getFullYear());
36255- _date2.setFullYear(date2.getFullYear());
36256- return _date1 - _date2;
36257- };
36258-
36259- function getISO8601WeekNumber(date) {
36260- var checkDate = new Date(date);
36261- checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); // Thursday
36262- var time = checkDate.getTime();
36263- checkDate.setMonth(0); // Compare with Jan 1
36264- checkDate.setDate(1);
36265- return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
36266- }
36267-
36268- this.handleKeyDown = function(key, evt) {
36269- var date = this.activeDate.getDate();
36270-
36271- if (key === 'left') {
36272- date = date - 1;
36273- } else if (key === 'up') {
36274- date = date - 7;
36275- } else if (key === 'right') {
36276- date = date + 1;
36277- } else if (key === 'down') {
36278- date = date + 7;
36279- } else if (key === 'pageup' || key === 'pagedown') {
36280- var month = this.activeDate.getMonth() + (key === 'pageup' ? - 1 : 1);
36281- this.activeDate.setMonth(month, 1);
36282- date = Math.min(getDaysInMonth(this.activeDate.getFullYear(), this.activeDate.getMonth()), date);
36283- } else if (key === 'home') {
36284- date = 1;
36285- } else if (key === 'end') {
36286- date = getDaysInMonth(this.activeDate.getFullYear(), this.activeDate.getMonth());
36287- }
36288- this.activeDate.setDate(date);
36289- };
36290- }])
36291-
36292- .controller('UibMonthpickerController', ['$scope', '$element', 'dateFilter', function(scope, $element, dateFilter) {
36293- this.step = { years: 1 };
36294- this.element = $element;
36295-
36296- this.init = function(ctrl) {
36297- angular.extend(ctrl, this);
36298- ctrl.refreshView();
36299- };
36300-
36301- this._refreshView = function() {
36302- var months = new Array(12),
36303- year = this.activeDate.getFullYear(),
36304- date;
36305-
36306- for (var i = 0; i < 12; i++) {
36307- date = new Date(this.activeDate);
36308- date.setFullYear(year, i, 1);
36309- months[i] = angular.extend(this.createDateObject(date, this.formatMonth), {
36310- uid: scope.uniqueId + '-' + i
36311- });
36312- }
36313-
36314- scope.title = dateFilter(this.activeDate, this.formatMonthTitle);
36315- scope.rows = this.split(months, 3);
36316- };
36317-
36318- this.compare = function(date1, date2) {
36319- var _date1 = new Date(date1.getFullYear(), date1.getMonth());
36320- var _date2 = new Date(date2.getFullYear(), date2.getMonth());
36321- _date1.setFullYear(date1.getFullYear());
36322- _date2.setFullYear(date2.getFullYear());
36323- return _date1 - _date2;
36324- };
36325-
36326- this.handleKeyDown = function(key, evt) {
36327- var date = this.activeDate.getMonth();
36328-
36329- if (key === 'left') {
36330- date = date - 1;
36331- } else if (key === 'up') {
36332- date = date - 3;
36333- } else if (key === 'right') {
36334- date = date + 1;
36335- } else if (key === 'down') {
36336- date = date + 3;
36337- } else if (key === 'pageup' || key === 'pagedown') {
36338- var year = this.activeDate.getFullYear() + (key === 'pageup' ? - 1 : 1);
36339- this.activeDate.setFullYear(year);
36340- } else if (key === 'home') {
36341- date = 0;
36342- } else if (key === 'end') {
36343- date = 11;
36344- }
36345- this.activeDate.setMonth(date);
36346- };
36347- }])
36348-
36349- .controller('UibYearpickerController', ['$scope', '$element', 'dateFilter', function(scope, $element, dateFilter) {
36350- var columns, range;
36351- this.element = $element;
36352-
36353- function getStartingYear(year) {
36354- return parseInt((year - 1) / range, 10) * range + 1;
36355- }
36356-
36357- this.yearpickerInit = function() {
36358- columns = this.yearColumns;
36359- range = this.yearRows * columns;
36360- this.step = { years: range };
36361- };
36362-
36363- this._refreshView = function() {
36364- var years = new Array(range), date;
36365-
36366- for (var i = 0, start = getStartingYear(this.activeDate.getFullYear()); i < range; i++) {
36367- date = new Date(this.activeDate);
36368- date.setFullYear(start + i, 0, 1);
36369- years[i] = angular.extend(this.createDateObject(date, this.formatYear), {
36370- uid: scope.uniqueId + '-' + i
36371- });
36372- }
36373-
36374- scope.title = [years[0].label, years[range - 1].label].join(' - ');
36375- scope.rows = this.split(years, columns);
36376- scope.columns = columns;
36377- };
36378-
36379- this.compare = function(date1, date2) {
36380- return date1.getFullYear() - date2.getFullYear();
36381- };
36382-
36383- this.handleKeyDown = function(key, evt) {
36384- var date = this.activeDate.getFullYear();
36385-
36386- if (key === 'left') {
36387- date = date - 1;
36388- } else if (key === 'up') {
36389- date = date - columns;
36390- } else if (key === 'right') {
36391- date = date + 1;
36392- } else if (key === 'down') {
36393- date = date + columns;
36394- } else if (key === 'pageup' || key === 'pagedown') {
36395- date += (key === 'pageup' ? - 1 : 1) * range;
36396- } else if (key === 'home') {
36397- date = getStartingYear(this.activeDate.getFullYear());
36398- } else if (key === 'end') {
36399- date = getStartingYear(this.activeDate.getFullYear()) + range - 1;
36400- }
36401- this.activeDate.setFullYear(date);
36402- };
36403- }])
36404-
36405- .directive('uibDatepicker', function() {
36406- return {
36407- replace: true,
36408- templateUrl: function(element, attrs) {
36409- return attrs.templateUrl || 'uib/template/datepicker/datepicker.html';
36410- },
36411- scope: {
36412- datepickerOptions: '=?'
36413- },
36414- require: ['uibDatepicker', '^ngModel'],
36415- controller: 'UibDatepickerController',
36416- controllerAs: 'datepicker',
36417- link: function(scope, element, attrs, ctrls) {
36418- var datepickerCtrl = ctrls[0], ngModelCtrl = ctrls[1];
36419-
36420- datepickerCtrl.init(ngModelCtrl);
36421- }
36422- };
36423- })
36424-
36425- .directive('uibDaypicker', function() {
36426- return {
36427- replace: true,
36428- templateUrl: function(element, attrs) {
36429- return attrs.templateUrl || 'uib/template/datepicker/day.html';
36430- },
36431- require: ['^uibDatepicker', 'uibDaypicker'],
36432- controller: 'UibDaypickerController',
36433- link: function(scope, element, attrs, ctrls) {
36434- var datepickerCtrl = ctrls[0],
36435- daypickerCtrl = ctrls[1];
36436-
36437- daypickerCtrl.init(datepickerCtrl);
36438- }
36439- };
36440- })
36441-
36442- .directive('uibMonthpicker', function() {
36443- return {
36444- replace: true,
36445- templateUrl: function(element, attrs) {
36446- return attrs.templateUrl || 'uib/template/datepicker/month.html';
36447- },
36448- require: ['^uibDatepicker', 'uibMonthpicker'],
36449- controller: 'UibMonthpickerController',
36450- link: function(scope, element, attrs, ctrls) {
36451- var datepickerCtrl = ctrls[0],
36452- monthpickerCtrl = ctrls[1];
36453-
36454- monthpickerCtrl.init(datepickerCtrl);
36455- }
36456- };
36457- })
36458-
36459- .directive('uibYearpicker', function() {
36460- return {
36461- replace: true,
36462- templateUrl: function(element, attrs) {
36463- return attrs.templateUrl || 'uib/template/datepicker/year.html';
36464- },
36465- require: ['^uibDatepicker', 'uibYearpicker'],
36466- controller: 'UibYearpickerController',
36467- link: function(scope, element, attrs, ctrls) {
36468- var ctrl = ctrls[0];
36469- angular.extend(ctrl, ctrls[1]);
36470- ctrl.yearpickerInit();
36471-
36472- ctrl.refreshView();
36473- }
36474- };
36475- });
36476-
37284+=======
3647737285 angular.module('ui.bootstrap.position', [])
3647837286
3647937287 /**
@@ -36488,11 +37296,6 @@
3648837296 * Do not access this variable directly, use scrollbarWidth() instead.
3648937297 */
3649037298 var SCROLLBAR_WIDTH;
36491- /**
36492- * scrollbar on body and html element in IE and Edge overlay
36493- * content and should be considered 0 width.
36494- */
36495- var BODY_SCROLLBAR_WIDTH;
3649637299 var OVERFLOW_REGEX = {
3649737300 normal: /(auto|scroll)/,
3649837301 hidden: /(auto|scroll|hidden)/
@@ -36503,7 +37306,6 @@
3650337306 secondary: /^(top|bottom|left|right|center)$/,
3650437307 vertical: /^(top|bottom)$/
3650537308 };
36506- var BODY_REGEX = /(HTML|BODY)/;
3650737309
3650837310 return {
3650937311
@@ -36515,7 +37317,7 @@
3651537317 * @returns {element} A HTML element.
3651637318 */
3651737319 getRawNode: function(elem) {
36518- return elem.nodeName ? elem : elem[0] || elem;
37320+ return elem[0] || elem;
3651937321 },
3652037322
3652137323 /**
@@ -36557,25 +37359,12 @@
3655737359 /**
3655837360 * Provides the scrollbar width, concept from TWBS measureScrollbar()
3655937361 * function in https://github.com/twbs/bootstrap/blob/master/js/modal.js
36560- * In IE and Edge, scollbar on body and html element overlay and should
36561- * return a width of 0.
3656237362 *
3656337363 * @returns {number} The width of the browser scollbar.
3656437364 */
36565- scrollbarWidth: function(isBody) {
36566- if (isBody) {
36567- if (angular.isUndefined(BODY_SCROLLBAR_WIDTH)) {
36568- var bodyElem = $document.find('body');
36569- bodyElem.addClass('uib-position-body-scrollbar-measure');
36570- BODY_SCROLLBAR_WIDTH = $window.innerWidth - bodyElem[0].clientWidth;
36571- BODY_SCROLLBAR_WIDTH = isFinite(BODY_SCROLLBAR_WIDTH) ? BODY_SCROLLBAR_WIDTH : 0;
36572- bodyElem.removeClass('uib-position-body-scrollbar-measure');
36573- }
36574- return BODY_SCROLLBAR_WIDTH;
36575- }
36576-
37365+ scrollbarWidth: function() {
3657737366 if (angular.isUndefined(SCROLLBAR_WIDTH)) {
36578- var scrollElem = angular.element('<div class="uib-position-scrollbar-measure"></div>');
37367+ var scrollElem = angular.element('<div style="position: absolute; top: -9999px; width: 50px; height: 50px; overflow: scroll;"></div>');
3657937368 $document.find('body').append(scrollElem);
3658037369 SCROLLBAR_WIDTH = scrollElem[0].offsetWidth - scrollElem[0].clientWidth;
3658137370 SCROLLBAR_WIDTH = isFinite(SCROLLBAR_WIDTH) ? SCROLLBAR_WIDTH : 0;
@@ -36586,57 +37375,6 @@
3658637375 },
3658737376
3658837377 /**
36589- * Provides the padding required on an element to replace the scrollbar.
36590- *
36591- * @returns {object} An object with the following properties:
36592- * <ul>
36593- * <li>**scrollbarWidth**: the width of the scrollbar</li>
36594- * <li>**widthOverflow**: whether the the width is overflowing</li>
36595- * <li>**right**: the amount of right padding on the element needed to replace the scrollbar</li>
36596- * <li>**rightOriginal**: the amount of right padding currently on the element</li>
36597- * <li>**heightOverflow**: whether the the height is overflowing</li>
36598- * <li>**bottom**: the amount of bottom padding on the element needed to replace the scrollbar</li>
36599- * <li>**bottomOriginal**: the amount of bottom padding currently on the element</li>
36600- * </ul>
36601- */
36602- scrollbarPadding: function(elem) {
36603- elem = this.getRawNode(elem);
36604-
36605- var elemStyle = $window.getComputedStyle(elem);
36606- var paddingRight = this.parseStyle(elemStyle.paddingRight);
36607- var paddingBottom = this.parseStyle(elemStyle.paddingBottom);
36608- var scrollParent = this.scrollParent(elem, false, true);
36609- var scrollbarWidth = this.scrollbarWidth(scrollParent, BODY_REGEX.test(scrollParent.tagName));
36610-
36611- return {
36612- scrollbarWidth: scrollbarWidth,
36613- widthOverflow: scrollParent.scrollWidth > scrollParent.clientWidth,
36614- right: paddingRight + scrollbarWidth,
36615- originalRight: paddingRight,
36616- heightOverflow: scrollParent.scrollHeight > scrollParent.clientHeight,
36617- bottom: paddingBottom + scrollbarWidth,
36618- originalBottom: paddingBottom
36619- };
36620- },
36621-
36622- /**
36623- * Checks to see if the element is scrollable.
36624- *
36625- * @param {element} elem - The element to check.
36626- * @param {boolean=} [includeHidden=false] - Should scroll style of 'hidden' be considered,
36627- * default is false.
36628- *
36629- * @returns {boolean} Whether the element is scrollable.
36630- */
36631- isScrollable: function(elem, includeHidden) {
36632- elem = this.getRawNode(elem);
36633-
36634- var overflowRegex = includeHidden ? OVERFLOW_REGEX.hidden : OVERFLOW_REGEX.normal;
36635- var elemStyle = $window.getComputedStyle(elem);
36636- return overflowRegex.test(elemStyle.overflow + elemStyle.overflowY + elemStyle.overflowX);
36637- },
36638-
36639- /**
3664037378 * Provides the closest scrollable ancestor.
3664137379 * A port of the jQuery UI scrollParent method:
3664237380 * https://github.com/jquery/jquery-ui/blob/master/ui/scroll-parent.js
@@ -36644,20 +37382,15 @@
3664437382 * @param {element} elem - The element to find the scroll parent of.
3664537383 * @param {boolean=} [includeHidden=false] - Should scroll style of 'hidden' be considered,
3664637384 * default is false.
36647- * @param {boolean=} [includeSelf=false] - Should the element being passed be
36648- * included in the scrollable llokup.
3664937385 *
3665037386 * @returns {element} A HTML element.
3665137387 */
36652- scrollParent: function(elem, includeHidden, includeSelf) {
37388+ scrollParent: function(elem, includeHidden) {
3665337389 elem = this.getRawNode(elem);
3665437390
3665537391 var overflowRegex = includeHidden ? OVERFLOW_REGEX.hidden : OVERFLOW_REGEX.normal;
3665637392 var documentEl = $document[0].documentElement;
3665737393 var elemStyle = $window.getComputedStyle(elem);
36658- if (includeSelf && overflowRegex.test(elemStyle.overflow + elemStyle.overflowY + elemStyle.overflowX)) {
36659- return elem;
36660- }
3666137394 var excludeStatic = elemStyle.position === 'absolute';
3666237395 var scrollParent = elem.parentElement || documentEl;
3666337396
@@ -36921,7 +37654,1188 @@
3692137654 var targetElemPos = {top: 0, left: 0, placement: ''};
3692237655
3692337656 if (placement[2]) {
36924- var viewportOffset = this.viewportOffset(hostElem, appendToBody);
37657+ var viewportOffset = this.viewportOffset(hostElem);
37658+
37659+ var targetElemStyle = $window.getComputedStyle(targetElem);
37660+ var adjustedSize = {
37661+ width: targetWidth + Math.round(Math.abs(this.parseStyle(targetElemStyle.marginLeft) + this.parseStyle(targetElemStyle.marginRight))),
37662+ height: targetHeight + Math.round(Math.abs(this.parseStyle(targetElemStyle.marginTop) + this.parseStyle(targetElemStyle.marginBottom)))
37663+ };
37664+
37665+ placement[0] = placement[0] === 'top' && adjustedSize.height > viewportOffset.top && adjustedSize.height <= viewportOffset.bottom ? 'bottom' :
37666+ placement[0] === 'bottom' && adjustedSize.height > viewportOffset.bottom && adjustedSize.height <= viewportOffset.top ? 'top' :
37667+ placement[0] === 'left' && adjustedSize.width > viewportOffset.left && adjustedSize.width <= viewportOffset.right ? 'right' :
37668+ placement[0] === 'right' && adjustedSize.width > viewportOffset.right && adjustedSize.width <= viewportOffset.left ? 'left' :
37669+ placement[0];
37670+
37671+ placement[1] = placement[1] === 'top' && adjustedSize.height - hostElemPos.height > viewportOffset.bottom && adjustedSize.height - hostElemPos.height <= viewportOffset.top ? 'bottom' :
37672+ placement[1] === 'bottom' && adjustedSize.height - hostElemPos.height > viewportOffset.top && adjustedSize.height - hostElemPos.height <= viewportOffset.bottom ? 'top' :
37673+ placement[1] === 'left' && adjustedSize.width - hostElemPos.width > viewportOffset.right && adjustedSize.width - hostElemPos.width <= viewportOffset.left ? 'right' :
37674+ placement[1] === 'right' && adjustedSize.width - hostElemPos.width > viewportOffset.left && adjustedSize.width - hostElemPos.width <= viewportOffset.right ? 'left' :
37675+ placement[1];
37676+
37677+ if (placement[1] === 'center') {
37678+ if (PLACEMENT_REGEX.vertical.test(placement[0])) {
37679+ var xOverflow = hostElemPos.width / 2 - targetWidth / 2;
37680+ if (viewportOffset.left + xOverflow < 0 && adjustedSize.width - hostElemPos.width <= viewportOffset.right) {
37681+ placement[1] = 'left';
37682+ } else if (viewportOffset.right + xOverflow < 0 && adjustedSize.width - hostElemPos.width <= viewportOffset.left) {
37683+ placement[1] = 'right';
37684+ }
37685+ } else {
37686+ var yOverflow = hostElemPos.height / 2 - adjustedSize.height / 2;
37687+ if (viewportOffset.top + yOverflow < 0 && adjustedSize.height - hostElemPos.height <= viewportOffset.bottom) {
37688+ placement[1] = 'top';
37689+ } else if (viewportOffset.bottom + yOverflow < 0 && adjustedSize.height - hostElemPos.height <= viewportOffset.top) {
37690+ placement[1] = 'bottom';
37691+ }
37692+ }
37693+ }
37694+ }
37695+
37696+ switch (placement[0]) {
37697+ case 'top':
37698+ targetElemPos.top = hostElemPos.top - targetHeight;
37699+ break;
37700+ case 'bottom':
37701+ targetElemPos.top = hostElemPos.top + hostElemPos.height;
37702+ break;
37703+ case 'left':
37704+ targetElemPos.left = hostElemPos.left - targetWidth;
37705+ break;
37706+ case 'right':
37707+ targetElemPos.left = hostElemPos.left + hostElemPos.width;
37708+ break;
37709+ }
37710+
37711+ switch (placement[1]) {
37712+ case 'top':
37713+ targetElemPos.top = hostElemPos.top;
37714+ break;
37715+ case 'bottom':
37716+ targetElemPos.top = hostElemPos.top + hostElemPos.height - targetHeight;
37717+ break;
37718+ case 'left':
37719+ targetElemPos.left = hostElemPos.left;
37720+ break;
37721+ case 'right':
37722+ targetElemPos.left = hostElemPos.left + hostElemPos.width - targetWidth;
37723+ break;
37724+ case 'center':
37725+ if (PLACEMENT_REGEX.vertical.test(placement[0])) {
37726+ targetElemPos.left = hostElemPos.left + hostElemPos.width / 2 - targetWidth / 2;
37727+ } else {
37728+ targetElemPos.top = hostElemPos.top + hostElemPos.height / 2 - targetHeight / 2;
37729+ }
37730+ break;
37731+ }
37732+
37733+ targetElemPos.top = Math.round(targetElemPos.top);
37734+ targetElemPos.left = Math.round(targetElemPos.left);
37735+ targetElemPos.placement = placement[1] === 'center' ? placement[0] : placement[0] + '-' + placement[1];
37736+
37737+ return targetElemPos;
37738+ },
37739+
37740+ /**
37741+ * Provides a way for positioning tooltip & dropdown
37742+ * arrows when using placement options beyond the standard
37743+ * left, right, top, or bottom.
37744+ *
37745+ * @param {element} elem - The tooltip/dropdown element.
37746+ * @param {string} placement - The placement for the elem.
37747+ */
37748+ positionArrow: function(elem, placement) {
37749+ elem = this.getRawNode(elem);
37750+
37751+ var isTooltip = true;
37752+
37753+ var innerElem = elem.querySelector('.tooltip-inner');
37754+ if (!innerElem) {
37755+ isTooltip = false;
37756+ innerElem = elem.querySelector('.popover-inner');
37757+ }
37758+ if (!innerElem) {
37759+ return;
37760+ }
37761+
37762+ var arrowElem = isTooltip ? elem.querySelector('.tooltip-arrow') : elem.querySelector('.arrow');
37763+ if (!arrowElem) {
37764+ return;
37765+ }
37766+
37767+ placement = this.parsePlacement(placement);
37768+ if (placement[1] === 'center') {
37769+ // no adjustment necessary - just reset styles
37770+ angular.element(arrowElem).css({top: '', bottom: '', right: '', left: '', margin: ''});
37771+ return;
37772+ }
37773+
37774+ var borderProp = 'border-' + placement[0] + '-width';
37775+ var borderWidth = $window.getComputedStyle(arrowElem)[borderProp];
37776+
37777+ var borderRadiusProp = 'border-';
37778+ if (PLACEMENT_REGEX.vertical.test(placement[0])) {
37779+ borderRadiusProp += placement[0] + '-' + placement[1];
37780+ } else {
37781+ borderRadiusProp += placement[1] + '-' + placement[0];
37782+ }
37783+ borderRadiusProp += '-radius';
37784+ var borderRadius = $window.getComputedStyle(isTooltip ? innerElem : elem)[borderRadiusProp];
37785+
37786+ var arrowCss = {
37787+ top: 'auto',
37788+ bottom: 'auto',
37789+ left: 'auto',
37790+ right: 'auto',
37791+ margin: 0
37792+ };
37793+
37794+ switch (placement[0]) {
37795+ case 'top':
37796+ arrowCss.bottom = isTooltip ? '0' : '-' + borderWidth;
37797+ break;
37798+ case 'bottom':
37799+ arrowCss.top = isTooltip ? '0' : '-' + borderWidth;
37800+ break;
37801+ case 'left':
37802+ arrowCss.right = isTooltip ? '0' : '-' + borderWidth;
37803+ break;
37804+ case 'right':
37805+ arrowCss.left = isTooltip ? '0' : '-' + borderWidth;
37806+ break;
37807+ }
37808+
37809+ arrowCss[placement[1]] = borderRadius;
37810+
37811+ angular.element(arrowElem).css(arrowCss);
37812+ }
37813+ };
37814+ }]);
37815+
37816+ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootstrap.isClass', 'ui.bootstrap.position'])
37817+
37818+ .value('$datepickerSuppressError', false)
37819+
37820+ .constant('uibDatepickerConfig', {
37821+ formatDay: 'dd',
37822+ formatMonth: 'MMMM',
37823+ formatYear: 'yyyy',
37824+ formatDayHeader: 'EEE',
37825+ formatDayTitle: 'MMMM yyyy',
37826+ formatMonthTitle: 'yyyy',
37827+ datepickerMode: 'day',
37828+ minMode: 'day',
37829+ maxMode: 'year',
37830+ showWeeks: true,
37831+ startingDay: 0,
37832+ yearRows: 4,
37833+ yearColumns: 5,
37834+ minDate: null,
37835+ maxDate: null,
37836+ shortcutPropagation: false,
37837+ ngModelOptions: {}
37838+ })
37839+
37840+ .controller('UibDatepickerController', ['$scope', '$attrs', '$parse', '$interpolate', '$log', 'dateFilter', 'uibDatepickerConfig', '$datepickerSuppressError', 'uibDateParser',
37841+ function($scope, $attrs, $parse, $interpolate, $log, dateFilter, datepickerConfig, $datepickerSuppressError, dateParser) {
37842+ var self = this,
37843+ ngModelCtrl = { $setViewValue: angular.noop }, // nullModelCtrl;
37844+ ngModelOptions = {};
37845+
37846+ // Modes chain
37847+ this.modes = ['day', 'month', 'year'];
37848+
37849+ // Interpolated configuration attributes
37850+ angular.forEach(['formatDay', 'formatMonth', 'formatYear', 'formatDayHeader', 'formatDayTitle', 'formatMonthTitle'], function(key) {
37851+ self[key] = angular.isDefined($attrs[key]) ? $interpolate($attrs[key])($scope.$parent) : datepickerConfig[key];
37852+ });
37853+
37854+ // Evaled configuration attributes
37855+ angular.forEach(['showWeeks', 'startingDay', 'yearRows', 'yearColumns', 'shortcutPropagation'], function(key) {
37856+ self[key] = angular.isDefined($attrs[key]) ? $scope.$parent.$eval($attrs[key]) : datepickerConfig[key];
37857+ });
37858+
37859+ // Watchable date attributes
37860+ angular.forEach(['minDate', 'maxDate'], function(key) {
37861+ if ($attrs[key]) {
37862+ $scope.$parent.$watch($attrs[key], function(value) {
37863+ self[key] = value ? angular.isDate(value) ? dateParser.fromTimezone(new Date(value), ngModelOptions.timezone) : new Date(dateFilter(value, 'medium')) : null;
37864+ self.refreshView();
37865+ });
37866+ } else {
37867+ self[key] = datepickerConfig[key] ? dateParser.fromTimezone(new Date(datepickerConfig[key]), ngModelOptions.timezone) : null;
37868+ }
37869+ });
37870+
37871+ angular.forEach(['minMode', 'maxMode'], function(key) {
37872+ if ($attrs[key]) {
37873+ $scope.$parent.$watch($attrs[key], function(value) {
37874+ self[key] = $scope[key] = angular.isDefined(value) ? value : $attrs[key];
37875+ if (key === 'minMode' && self.modes.indexOf($scope.datepickerMode) < self.modes.indexOf(self[key]) ||
37876+ key === 'maxMode' && self.modes.indexOf($scope.datepickerMode) > self.modes.indexOf(self[key])) {
37877+ $scope.datepickerMode = self[key];
37878+ }
37879+ });
37880+ } else {
37881+ self[key] = $scope[key] = datepickerConfig[key] || null;
37882+ }
37883+ });
37884+
37885+ $scope.datepickerMode = $scope.datepickerMode || datepickerConfig.datepickerMode;
37886+ $scope.uniqueId = 'datepicker-' + $scope.$id + '-' + Math.floor(Math.random() * 10000);
37887+
37888+ if (angular.isDefined($attrs.initDate)) {
37889+ this.activeDate = dateParser.fromTimezone($scope.$parent.$eval($attrs.initDate), ngModelOptions.timezone) || new Date();
37890+ $scope.$parent.$watch($attrs.initDate, function(initDate) {
37891+ if (initDate && (ngModelCtrl.$isEmpty(ngModelCtrl.$modelValue) || ngModelCtrl.$invalid)) {
37892+ self.activeDate = dateParser.fromTimezone(initDate, ngModelOptions.timezone);
37893+ self.refreshView();
37894+ }
37895+ });
37896+ } else {
37897+ this.activeDate = new Date();
37898+ }
37899+
37900+ $scope.disabled = angular.isDefined($attrs.disabled) || false;
37901+ if (angular.isDefined($attrs.ngDisabled)) {
37902+ $scope.$parent.$watch($attrs.ngDisabled, function(disabled) {
37903+ $scope.disabled = disabled;
37904+ self.refreshView();
37905+ });
37906+ }
37907+
37908+ $scope.isActive = function(dateObject) {
37909+ if (self.compare(dateObject.date, self.activeDate) === 0) {
37910+ $scope.activeDateId = dateObject.uid;
37911+ return true;
37912+ }
37913+ return false;
37914+ };
37915+
37916+ this.init = function(ngModelCtrl_) {
37917+ ngModelCtrl = ngModelCtrl_;
37918+ ngModelOptions = ngModelCtrl_.$options || datepickerConfig.ngModelOptions;
37919+
37920+ if (ngModelCtrl.$modelValue) {
37921+ this.activeDate = ngModelCtrl.$modelValue;
37922+ }
37923+
37924+ ngModelCtrl.$render = function() {
37925+ self.render();
37926+ };
37927+ };
37928+
37929+ this.render = function() {
37930+ if (ngModelCtrl.$viewValue) {
37931+ var date = new Date(ngModelCtrl.$viewValue),
37932+ isValid = !isNaN(date);
37933+
37934+ if (isValid) {
37935+ this.activeDate = dateParser.fromTimezone(date, ngModelOptions.timezone);
37936+ } else if (!$datepickerSuppressError) {
37937+ $log.error('Datepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.');
37938+ }
37939+ }
37940+ this.refreshView();
37941+ };
37942+
37943+ this.refreshView = function() {
37944+ if (this.element) {
37945+ $scope.selectedDt = null;
37946+ this._refreshView();
37947+ if ($scope.activeDt) {
37948+ $scope.activeDateId = $scope.activeDt.uid;
37949+ }
37950+
37951+ var date = ngModelCtrl.$viewValue ? new Date(ngModelCtrl.$viewValue) : null;
37952+ date = dateParser.fromTimezone(date, ngModelOptions.timezone);
37953+ ngModelCtrl.$setValidity('dateDisabled', !date ||
37954+ this.element && !this.isDisabled(date));
37955+ }
37956+ };
37957+
37958+ this.createDateObject = function(date, format) {
37959+ var model = ngModelCtrl.$viewValue ? new Date(ngModelCtrl.$viewValue) : null;
37960+ model = dateParser.fromTimezone(model, ngModelOptions.timezone);
37961+ var dt = {
37962+ date: date,
37963+ label: dateFilter(date, format),
37964+ selected: model && this.compare(date, model) === 0,
37965+ disabled: this.isDisabled(date),
37966+ current: this.compare(date, new Date()) === 0,
37967+ customClass: this.customClass(date) || null
37968+ };
37969+
37970+ if (model && this.compare(date, model) === 0) {
37971+ $scope.selectedDt = dt;
37972+ }
37973+
37974+ if (self.activeDate && this.compare(dt.date, self.activeDate) === 0) {
37975+ $scope.activeDt = dt;
37976+ }
37977+
37978+ return dt;
37979+ };
37980+
37981+ this.isDisabled = function(date) {
37982+ return $scope.disabled ||
37983+ this.minDate && this.compare(date, this.minDate) < 0 ||
37984+ this.maxDate && this.compare(date, this.maxDate) > 0 ||
37985+ $attrs.dateDisabled && $scope.dateDisabled({date: date, mode: $scope.datepickerMode});
37986+ };
37987+
37988+ this.customClass = function(date) {
37989+ return $scope.customClass({date: date, mode: $scope.datepickerMode});
37990+ };
37991+
37992+ // Split array into smaller arrays
37993+ this.split = function(arr, size) {
37994+ var arrays = [];
37995+ while (arr.length > 0) {
37996+ arrays.push(arr.splice(0, size));
37997+ }
37998+ return arrays;
37999+ };
38000+
38001+ $scope.select = function(date) {
38002+ if ($scope.datepickerMode === self.minMode) {
38003+ var dt = ngModelCtrl.$viewValue ? dateParser.fromTimezone(new Date(ngModelCtrl.$viewValue), ngModelOptions.timezone) : new Date(0, 0, 0, 0, 0, 0, 0);
38004+ dt.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());
38005+ dt = dateParser.toTimezone(dt, ngModelOptions.timezone);
38006+ ngModelCtrl.$setViewValue(dt);
38007+ ngModelCtrl.$render();
38008+ } else {
38009+ self.activeDate = date;
38010+ $scope.datepickerMode = self.modes[self.modes.indexOf($scope.datepickerMode) - 1];
38011+ }
38012+ };
38013+
38014+ $scope.move = function(direction) {
38015+ var year = self.activeDate.getFullYear() + direction * (self.step.years || 0),
38016+ month = self.activeDate.getMonth() + direction * (self.step.months || 0);
38017+ self.activeDate.setFullYear(year, month, 1);
38018+ self.refreshView();
38019+ };
38020+
38021+ $scope.toggleMode = function(direction) {
38022+ direction = direction || 1;
38023+
38024+ if ($scope.datepickerMode === self.maxMode && direction === 1 ||
38025+ $scope.datepickerMode === self.minMode && direction === -1) {
38026+ return;
38027+ }
38028+
38029+ $scope.datepickerMode = self.modes[self.modes.indexOf($scope.datepickerMode) + direction];
38030+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
38031+ };
38032+
38033+ // Key event mapper
38034+ $scope.keys = { 13: 'enter', 32: 'space', 33: 'pageup', 34: 'pagedown', 35: 'end', 36: 'home', 37: 'left', 38: 'up', 39: 'right', 40: 'down' };
38035+
38036+ var focusElement = function() {
38037+ self.element[0].focus();
38038+ };
38039+
38040+ // Listen for focus requests from popup directive
38041+ $scope.$on('uib:datepicker.focus', focusElement);
38042+
38043+ $scope.keydown = function(evt) {
38044+ var key = $scope.keys[evt.which];
38045+
38046+ if (!key || evt.shiftKey || evt.altKey || $scope.disabled) {
38047+ return;
38048+ }
38049+
38050+ evt.preventDefault();
38051+ if (!self.shortcutPropagation) {
38052+ evt.stopPropagation();
38053+ }
38054+
38055+ if (key === 'enter' || key === 'space') {
38056+ if (self.isDisabled(self.activeDate)) {
38057+ return; // do nothing
38058+ }
38059+ $scope.select(self.activeDate);
38060+ } else if (evt.ctrlKey && (key === 'up' || key === 'down')) {
38061+ $scope.toggleMode(key === 'up' ? 1 : -1);
38062+ } else {
38063+ self.handleKeyDown(key, evt);
38064+ self.refreshView();
38065+ }
38066+ };
38067+<<<<<<< HEAD
38068+
38069+ $scope.$on('$destroy', function() {
38070+ //Clear all watch listeners on destroy
38071+ while (watchListeners.length) {
38072+ watchListeners.shift()();
38073+ }
38074+ });
38075+
38076+ function setMode(mode) {
38077+ $scope.datepickerMode = mode;
38078+ $scope.datepickerOptions.datepickerMode = mode;
38079+ }
38080+=======
38081+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
38082+ }])
38083+
38084+ .controller('UibDaypickerController', ['$scope', '$element', 'dateFilter', function(scope, $element, dateFilter) {
38085+ var DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
38086+
38087+ this.step = { months: 1 };
38088+ this.element = $element;
38089+ function getDaysInMonth(year, month) {
38090+ return month === 1 && year % 4 === 0 &&
38091+ (year % 100 !== 0 || year % 400 === 0) ? 29 : DAYS_IN_MONTH[month];
38092+ }
38093+
38094+ this.init = function(ctrl) {
38095+ angular.extend(ctrl, this);
38096+ scope.showWeeks = ctrl.showWeeks;
38097+ ctrl.refreshView();
38098+ };
38099+
38100+ this.getDates = function(startDate, n) {
38101+ var dates = new Array(n), current = new Date(startDate), i = 0, date;
38102+ while (i < n) {
38103+ date = new Date(current);
38104+ dates[i++] = date;
38105+ current.setDate(current.getDate() + 1);
38106+ }
38107+ return dates;
38108+ };
38109+
38110+ this._refreshView = function() {
38111+ var year = this.activeDate.getFullYear(),
38112+ month = this.activeDate.getMonth(),
38113+ firstDayOfMonth = new Date(this.activeDate);
38114+
38115+ firstDayOfMonth.setFullYear(year, month, 1);
38116+
38117+ var difference = this.startingDay - firstDayOfMonth.getDay(),
38118+ numDisplayedFromPreviousMonth = difference > 0 ?
38119+ 7 - difference : - difference,
38120+ firstDate = new Date(firstDayOfMonth);
38121+
38122+ if (numDisplayedFromPreviousMonth > 0) {
38123+ firstDate.setDate(-numDisplayedFromPreviousMonth + 1);
38124+ }
38125+
38126+ // 42 is the number of days on a six-week calendar
38127+ var days = this.getDates(firstDate, 42);
38128+ for (var i = 0; i < 42; i ++) {
38129+ days[i] = angular.extend(this.createDateObject(days[i], this.formatDay), {
38130+ secondary: days[i].getMonth() !== month,
38131+ uid: scope.uniqueId + '-' + i
38132+ });
38133+ }
38134+
38135+ scope.labels = new Array(7);
38136+ for (var j = 0; j < 7; j++) {
38137+ scope.labels[j] = {
38138+ abbr: dateFilter(days[j].date, this.formatDayHeader),
38139+ full: dateFilter(days[j].date, 'EEEE')
38140+ };
38141+ }
38142+
38143+ scope.title = dateFilter(this.activeDate, this.formatDayTitle);
38144+ scope.rows = this.split(days, 7);
38145+
38146+ if (scope.showWeeks) {
38147+ scope.weekNumbers = [];
38148+ var thursdayIndex = (4 + 7 - this.startingDay) % 7,
38149+ numWeeks = scope.rows.length;
38150+ for (var curWeek = 0; curWeek < numWeeks; curWeek++) {
38151+ scope.weekNumbers.push(
38152+ getISO8601WeekNumber(scope.rows[curWeek][thursdayIndex].date));
38153+ }
38154+ }
38155+ };
38156+
38157+ this.compare = function(date1, date2) {
38158+ var _date1 = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate());
38159+ var _date2 = new Date(date2.getFullYear(), date2.getMonth(), date2.getDate());
38160+ _date1.setFullYear(date1.getFullYear());
38161+ _date2.setFullYear(date2.getFullYear());
38162+ return _date1 - _date2;
38163+ };
38164+
38165+ function getISO8601WeekNumber(date) {
38166+ var checkDate = new Date(date);
38167+ checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); // Thursday
38168+ var time = checkDate.getTime();
38169+ checkDate.setMonth(0); // Compare with Jan 1
38170+ checkDate.setDate(1);
38171+ return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
38172+ }
38173+
38174+ this.handleKeyDown = function(key, evt) {
38175+ var date = this.activeDate.getDate();
38176+
38177+ if (key === 'left') {
38178+ date = date - 1;
38179+ } else if (key === 'up') {
38180+ date = date - 7;
38181+ } else if (key === 'right') {
38182+ date = date + 1;
38183+ } else if (key === 'down') {
38184+ date = date + 7;
38185+ } else if (key === 'pageup' || key === 'pagedown') {
38186+ var month = this.activeDate.getMonth() + (key === 'pageup' ? - 1 : 1);
38187+ this.activeDate.setMonth(month, 1);
38188+ date = Math.min(getDaysInMonth(this.activeDate.getFullYear(), this.activeDate.getMonth()), date);
38189+ } else if (key === 'home') {
38190+ date = 1;
38191+ } else if (key === 'end') {
38192+ date = getDaysInMonth(this.activeDate.getFullYear(), this.activeDate.getMonth());
38193+ }
38194+ this.activeDate.setDate(date);
38195+ };
38196+ }])
38197+
38198+ .controller('UibMonthpickerController', ['$scope', '$element', 'dateFilter', function(scope, $element, dateFilter) {
38199+ this.step = { years: 1 };
38200+ this.element = $element;
38201+
38202+ this.init = function(ctrl) {
38203+ angular.extend(ctrl, this);
38204+ ctrl.refreshView();
38205+ };
38206+
38207+ this._refreshView = function() {
38208+ var months = new Array(12),
38209+ year = this.activeDate.getFullYear(),
38210+ date;
38211+
38212+ for (var i = 0; i < 12; i++) {
38213+ date = new Date(this.activeDate);
38214+ date.setFullYear(year, i, 1);
38215+ months[i] = angular.extend(this.createDateObject(date, this.formatMonth), {
38216+ uid: scope.uniqueId + '-' + i
38217+ });
38218+ }
38219+
38220+ scope.title = dateFilter(this.activeDate, this.formatMonthTitle);
38221+ scope.rows = this.split(months, 3);
38222+ };
38223+
38224+ this.compare = function(date1, date2) {
38225+ var _date1 = new Date(date1.getFullYear(), date1.getMonth());
38226+ var _date2 = new Date(date2.getFullYear(), date2.getMonth());
38227+ _date1.setFullYear(date1.getFullYear());
38228+ _date2.setFullYear(date2.getFullYear());
38229+ return _date1 - _date2;
38230+ };
38231+
38232+ this.handleKeyDown = function(key, evt) {
38233+ var date = this.activeDate.getMonth();
38234+
38235+ if (key === 'left') {
38236+ date = date - 1;
38237+ } else if (key === 'up') {
38238+ date = date - 3;
38239+ } else if (key === 'right') {
38240+ date = date + 1;
38241+ } else if (key === 'down') {
38242+ date = date + 3;
38243+ } else if (key === 'pageup' || key === 'pagedown') {
38244+ var year = this.activeDate.getFullYear() + (key === 'pageup' ? - 1 : 1);
38245+ this.activeDate.setFullYear(year);
38246+ } else if (key === 'home') {
38247+ date = 0;
38248+ } else if (key === 'end') {
38249+ date = 11;
38250+ }
38251+ this.activeDate.setMonth(date);
38252+ };
38253+ }])
38254+
38255+ .controller('UibYearpickerController', ['$scope', '$element', 'dateFilter', function(scope, $element, dateFilter) {
38256+ var columns, range;
38257+ this.element = $element;
38258+
38259+ function getStartingYear(year) {
38260+ return parseInt((year - 1) / range, 10) * range + 1;
38261+ }
38262+
38263+ this.yearpickerInit = function() {
38264+ columns = this.yearColumns;
38265+ range = this.yearRows * columns;
38266+ this.step = { years: range };
38267+ };
38268+
38269+ this._refreshView = function() {
38270+ var years = new Array(range), date;
38271+
38272+ for (var i = 0, start = getStartingYear(this.activeDate.getFullYear()); i < range; i++) {
38273+ date = new Date(this.activeDate);
38274+ date.setFullYear(start + i, 0, 1);
38275+ years[i] = angular.extend(this.createDateObject(date, this.formatYear), {
38276+ uid: scope.uniqueId + '-' + i
38277+ });
38278+ }
38279+
38280+ scope.title = [years[0].label, years[range - 1].label].join(' - ');
38281+ scope.rows = this.split(years, columns);
38282+ scope.columns = columns;
38283+ };
38284+
38285+ this.compare = function(date1, date2) {
38286+ return date1.getFullYear() - date2.getFullYear();
38287+ };
38288+
38289+ this.handleKeyDown = function(key, evt) {
38290+ var date = this.activeDate.getFullYear();
38291+
38292+ if (key === 'left') {
38293+ date = date - 1;
38294+ } else if (key === 'up') {
38295+ date = date - columns;
38296+ } else if (key === 'right') {
38297+ date = date + 1;
38298+ } else if (key === 'down') {
38299+ date = date + columns;
38300+ } else if (key === 'pageup' || key === 'pagedown') {
38301+ date += (key === 'pageup' ? - 1 : 1) * range;
38302+ } else if (key === 'home') {
38303+ date = getStartingYear(this.activeDate.getFullYear());
38304+ } else if (key === 'end') {
38305+ date = getStartingYear(this.activeDate.getFullYear()) + range - 1;
38306+ }
38307+ this.activeDate.setFullYear(date);
38308+ };
38309+ }])
38310+
38311+ .directive('uibDatepicker', function() {
38312+ return {
38313+ replace: true,
38314+ templateUrl: function(element, attrs) {
38315+ return attrs.templateUrl || 'uib/template/datepicker/datepicker.html';
38316+ },
38317+ scope: {
38318+<<<<<<< HEAD
38319+ datepickerOptions: '=?'
38320+=======
38321+ datepickerMode: '=?',
38322+ dateDisabled: '&',
38323+ customClass: '&',
38324+ shortcutPropagation: '&?'
38325+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
38326+ },
38327+ require: ['uibDatepicker', '^ngModel'],
38328+ controller: 'UibDatepickerController',
38329+ controllerAs: 'datepicker',
38330+ link: function(scope, element, attrs, ctrls) {
38331+ var datepickerCtrl = ctrls[0], ngModelCtrl = ctrls[1];
38332+
38333+ datepickerCtrl.init(ngModelCtrl);
38334+ }
38335+ };
38336+ })
38337+
38338+ .directive('uibDaypicker', function() {
38339+ return {
38340+ replace: true,
38341+ templateUrl: function(element, attrs) {
38342+ return attrs.templateUrl || 'uib/template/datepicker/day.html';
38343+ },
38344+ require: ['^uibDatepicker', 'uibDaypicker'],
38345+ controller: 'UibDaypickerController',
38346+ link: function(scope, element, attrs, ctrls) {
38347+ var datepickerCtrl = ctrls[0],
38348+ daypickerCtrl = ctrls[1];
38349+
38350+ daypickerCtrl.init(datepickerCtrl);
38351+ }
38352+ };
38353+ })
38354+
38355+ .directive('uibMonthpicker', function() {
38356+ return {
38357+ replace: true,
38358+ templateUrl: function(element, attrs) {
38359+ return attrs.templateUrl || 'uib/template/datepicker/month.html';
38360+ },
38361+ require: ['^uibDatepicker', 'uibMonthpicker'],
38362+ controller: 'UibMonthpickerController',
38363+ link: function(scope, element, attrs, ctrls) {
38364+ var datepickerCtrl = ctrls[0],
38365+ monthpickerCtrl = ctrls[1];
38366+
38367+ monthpickerCtrl.init(datepickerCtrl);
38368+ }
38369+ };
38370+ })
38371+
38372+ .directive('uibYearpicker', function() {
38373+ return {
38374+ replace: true,
38375+ templateUrl: function(element, attrs) {
38376+ return attrs.templateUrl || 'uib/template/datepicker/year.html';
38377+ },
38378+ require: ['^uibDatepicker', 'uibYearpicker'],
38379+ controller: 'UibYearpickerController',
38380+ link: function(scope, element, attrs, ctrls) {
38381+ var ctrl = ctrls[0];
38382+ angular.extend(ctrl, ctrls[1]);
38383+ ctrl.yearpickerInit();
38384+
38385+ ctrl.refreshView();
38386+ }
38387+ };
38388+<<<<<<< HEAD
38389+ });
38390+
38391+ angular.module('ui.bootstrap.position', [])
38392+
38393+ /**
38394+ * A set of utility methods for working with the DOM.
38395+ * It is meant to be used where we need to absolute-position elements in
38396+ * relation to another element (this is the case for tooltips, popovers,
38397+ * typeahead suggestions etc.).
38398+ */
38399+ .factory('$uibPosition', ['$document', '$window', function($document, $window) {
38400+ /**
38401+ * Used by scrollbarWidth() function to cache scrollbar's width.
38402+ * Do not access this variable directly, use scrollbarWidth() instead.
38403+ */
38404+ var SCROLLBAR_WIDTH;
38405+ /**
38406+ * scrollbar on body and html element in IE and Edge overlay
38407+ * content and should be considered 0 width.
38408+ */
38409+ var BODY_SCROLLBAR_WIDTH;
38410+ var OVERFLOW_REGEX = {
38411+ normal: /(auto|scroll)/,
38412+ hidden: /(auto|scroll|hidden)/
38413+ };
38414+ var PLACEMENT_REGEX = {
38415+ auto: /\s?auto?\s?/i,
38416+ primary: /^(top|bottom|left|right)$/,
38417+ secondary: /^(top|bottom|left|right|center)$/,
38418+ vertical: /^(top|bottom)$/
38419+ };
38420+ var BODY_REGEX = /(HTML|BODY)/;
38421+
38422+ return {
38423+
38424+ /**
38425+ * Provides a raw DOM element from a jQuery/jQLite element.
38426+ *
38427+ * @param {element} elem - The element to convert.
38428+ *
38429+ * @returns {element} A HTML element.
38430+ */
38431+ getRawNode: function(elem) {
38432+ return elem.nodeName ? elem : elem[0] || elem;
38433+ },
38434+
38435+ /**
38436+ * Provides a parsed number for a style property. Strips
38437+ * units and casts invalid numbers to 0.
38438+ *
38439+ * @param {string} value - The style value to parse.
38440+ *
38441+ * @returns {number} A valid number.
38442+ */
38443+ parseStyle: function(value) {
38444+ value = parseFloat(value);
38445+ return isFinite(value) ? value : 0;
38446+ },
38447+
38448+ /**
38449+ * Provides the closest positioned ancestor.
38450+ *
38451+ * @param {element} element - The element to get the offest parent for.
38452+ *
38453+ * @returns {element} The closest positioned ancestor.
38454+ */
38455+ offsetParent: function(elem) {
38456+ elem = this.getRawNode(elem);
38457+
38458+ var offsetParent = elem.offsetParent || $document[0].documentElement;
38459+
38460+ function isStaticPositioned(el) {
38461+ return ($window.getComputedStyle(el).position || 'static') === 'static';
38462+ }
38463+
38464+ while (offsetParent && offsetParent !== $document[0].documentElement && isStaticPositioned(offsetParent)) {
38465+ offsetParent = offsetParent.offsetParent;
38466+ }
38467+
38468+ return offsetParent || $document[0].documentElement;
38469+ },
38470+
38471+ /**
38472+ * Provides the scrollbar width, concept from TWBS measureScrollbar()
38473+ * function in https://github.com/twbs/bootstrap/blob/master/js/modal.js
38474+ * In IE and Edge, scollbar on body and html element overlay and should
38475+ * return a width of 0.
38476+ *
38477+ * @returns {number} The width of the browser scollbar.
38478+ */
38479+ scrollbarWidth: function(isBody) {
38480+ if (isBody) {
38481+ if (angular.isUndefined(BODY_SCROLLBAR_WIDTH)) {
38482+ var bodyElem = $document.find('body');
38483+ bodyElem.addClass('uib-position-body-scrollbar-measure');
38484+ BODY_SCROLLBAR_WIDTH = $window.innerWidth - bodyElem[0].clientWidth;
38485+ BODY_SCROLLBAR_WIDTH = isFinite(BODY_SCROLLBAR_WIDTH) ? BODY_SCROLLBAR_WIDTH : 0;
38486+ bodyElem.removeClass('uib-position-body-scrollbar-measure');
38487+ }
38488+ return BODY_SCROLLBAR_WIDTH;
38489+ }
38490+
38491+ if (angular.isUndefined(SCROLLBAR_WIDTH)) {
38492+ var scrollElem = angular.element('<div class="uib-position-scrollbar-measure"></div>');
38493+ $document.find('body').append(scrollElem);
38494+ SCROLLBAR_WIDTH = scrollElem[0].offsetWidth - scrollElem[0].clientWidth;
38495+ SCROLLBAR_WIDTH = isFinite(SCROLLBAR_WIDTH) ? SCROLLBAR_WIDTH : 0;
38496+ scrollElem.remove();
38497+ }
38498+
38499+ return SCROLLBAR_WIDTH;
38500+ },
38501+
38502+ /**
38503+ * Provides the padding required on an element to replace the scrollbar.
38504+ *
38505+ * @returns {object} An object with the following properties:
38506+ * <ul>
38507+ * <li>**scrollbarWidth**: the width of the scrollbar</li>
38508+ * <li>**widthOverflow**: whether the the width is overflowing</li>
38509+ * <li>**right**: the amount of right padding on the element needed to replace the scrollbar</li>
38510+ * <li>**rightOriginal**: the amount of right padding currently on the element</li>
38511+ * <li>**heightOverflow**: whether the the height is overflowing</li>
38512+ * <li>**bottom**: the amount of bottom padding on the element needed to replace the scrollbar</li>
38513+ * <li>**bottomOriginal**: the amount of bottom padding currently on the element</li>
38514+ * </ul>
38515+ */
38516+ scrollbarPadding: function(elem) {
38517+ elem = this.getRawNode(elem);
38518+
38519+ var elemStyle = $window.getComputedStyle(elem);
38520+ var paddingRight = this.parseStyle(elemStyle.paddingRight);
38521+ var paddingBottom = this.parseStyle(elemStyle.paddingBottom);
38522+ var scrollParent = this.scrollParent(elem, false, true);
38523+ var scrollbarWidth = this.scrollbarWidth(scrollParent, BODY_REGEX.test(scrollParent.tagName));
38524+
38525+ return {
38526+ scrollbarWidth: scrollbarWidth,
38527+ widthOverflow: scrollParent.scrollWidth > scrollParent.clientWidth,
38528+ right: paddingRight + scrollbarWidth,
38529+ originalRight: paddingRight,
38530+ heightOverflow: scrollParent.scrollHeight > scrollParent.clientHeight,
38531+ bottom: paddingBottom + scrollbarWidth,
38532+ originalBottom: paddingBottom
38533+ };
38534+ },
38535+
38536+ /**
38537+ * Checks to see if the element is scrollable.
38538+ *
38539+ * @param {element} elem - The element to check.
38540+ * @param {boolean=} [includeHidden=false] - Should scroll style of 'hidden' be considered,
38541+ * default is false.
38542+ *
38543+ * @returns {boolean} Whether the element is scrollable.
38544+ */
38545+ isScrollable: function(elem, includeHidden) {
38546+ elem = this.getRawNode(elem);
38547+
38548+ var overflowRegex = includeHidden ? OVERFLOW_REGEX.hidden : OVERFLOW_REGEX.normal;
38549+ var elemStyle = $window.getComputedStyle(elem);
38550+ return overflowRegex.test(elemStyle.overflow + elemStyle.overflowY + elemStyle.overflowX);
38551+ },
38552+
38553+ /**
38554+ * Provides the closest scrollable ancestor.
38555+ * A port of the jQuery UI scrollParent method:
38556+ * https://github.com/jquery/jquery-ui/blob/master/ui/scroll-parent.js
38557+ *
38558+ * @param {element} elem - The element to find the scroll parent of.
38559+ * @param {boolean=} [includeHidden=false] - Should scroll style of 'hidden' be considered,
38560+ * default is false.
38561+ * @param {boolean=} [includeSelf=false] - Should the element being passed be
38562+ * included in the scrollable llokup.
38563+ *
38564+ * @returns {element} A HTML element.
38565+ */
38566+ scrollParent: function(elem, includeHidden, includeSelf) {
38567+ elem = this.getRawNode(elem);
38568+
38569+ var overflowRegex = includeHidden ? OVERFLOW_REGEX.hidden : OVERFLOW_REGEX.normal;
38570+ var documentEl = $document[0].documentElement;
38571+ var elemStyle = $window.getComputedStyle(elem);
38572+ if (includeSelf && overflowRegex.test(elemStyle.overflow + elemStyle.overflowY + elemStyle.overflowX)) {
38573+ return elem;
38574+ }
38575+ var excludeStatic = elemStyle.position === 'absolute';
38576+ var scrollParent = elem.parentElement || documentEl;
38577+
38578+ if (scrollParent === documentEl || elemStyle.position === 'fixed') {
38579+ return documentEl;
38580+ }
38581+
38582+ while (scrollParent.parentElement && scrollParent !== documentEl) {
38583+ var spStyle = $window.getComputedStyle(scrollParent);
38584+ if (excludeStatic && spStyle.position !== 'static') {
38585+ excludeStatic = false;
38586+ }
38587+
38588+ if (!excludeStatic && overflowRegex.test(spStyle.overflow + spStyle.overflowY + spStyle.overflowX)) {
38589+ break;
38590+ }
38591+ scrollParent = scrollParent.parentElement;
38592+ }
38593+
38594+ return scrollParent;
38595+ },
38596+
38597+ /**
38598+ * Provides read-only equivalent of jQuery's position function:
38599+ * http://api.jquery.com/position/ - distance to closest positioned
38600+ * ancestor. Does not account for margins by default like jQuery position.
38601+ *
38602+ * @param {element} elem - The element to caclulate the position on.
38603+ * @param {boolean=} [includeMargins=false] - Should margins be accounted
38604+ * for, default is false.
38605+ *
38606+ * @returns {object} An object with the following properties:
38607+ * <ul>
38608+ * <li>**width**: the width of the element</li>
38609+ * <li>**height**: the height of the element</li>
38610+ * <li>**top**: distance to top edge of offset parent</li>
38611+ * <li>**left**: distance to left edge of offset parent</li>
38612+ * </ul>
38613+ */
38614+ position: function(elem, includeMagins) {
38615+ elem = this.getRawNode(elem);
38616+
38617+ var elemOffset = this.offset(elem);
38618+ if (includeMagins) {
38619+ var elemStyle = $window.getComputedStyle(elem);
38620+ elemOffset.top -= this.parseStyle(elemStyle.marginTop);
38621+ elemOffset.left -= this.parseStyle(elemStyle.marginLeft);
38622+ }
38623+ var parent = this.offsetParent(elem);
38624+ var parentOffset = {top: 0, left: 0};
38625+
38626+ if (parent !== $document[0].documentElement) {
38627+ parentOffset = this.offset(parent);
38628+ parentOffset.top += parent.clientTop - parent.scrollTop;
38629+ parentOffset.left += parent.clientLeft - parent.scrollLeft;
38630+ }
38631+
38632+ return {
38633+ width: Math.round(angular.isNumber(elemOffset.width) ? elemOffset.width : elem.offsetWidth),
38634+ height: Math.round(angular.isNumber(elemOffset.height) ? elemOffset.height : elem.offsetHeight),
38635+ top: Math.round(elemOffset.top - parentOffset.top),
38636+ left: Math.round(elemOffset.left - parentOffset.left)
38637+ };
38638+ },
38639+
38640+ /**
38641+ * Provides read-only equivalent of jQuery's offset function:
38642+ * http://api.jquery.com/offset/ - distance to viewport. Does
38643+ * not account for borders, margins, or padding on the body
38644+ * element.
38645+ *
38646+ * @param {element} elem - The element to calculate the offset on.
38647+ *
38648+ * @returns {object} An object with the following properties:
38649+ * <ul>
38650+ * <li>**width**: the width of the element</li>
38651+ * <li>**height**: the height of the element</li>
38652+ * <li>**top**: distance to top edge of viewport</li>
38653+ * <li>**right**: distance to bottom edge of viewport</li>
38654+ * </ul>
38655+ */
38656+ offset: function(elem) {
38657+ elem = this.getRawNode(elem);
38658+
38659+ var elemBCR = elem.getBoundingClientRect();
38660+ return {
38661+ width: Math.round(angular.isNumber(elemBCR.width) ? elemBCR.width : elem.offsetWidth),
38662+ height: Math.round(angular.isNumber(elemBCR.height) ? elemBCR.height : elem.offsetHeight),
38663+ top: Math.round(elemBCR.top + ($window.pageYOffset || $document[0].documentElement.scrollTop)),
38664+ left: Math.round(elemBCR.left + ($window.pageXOffset || $document[0].documentElement.scrollLeft))
38665+ };
38666+ },
38667+
38668+ /**
38669+ * Provides offset distance to the closest scrollable ancestor
38670+ * or viewport. Accounts for border and scrollbar width.
38671+ *
38672+ * Right and bottom dimensions represent the distance to the
38673+ * respective edge of the viewport element. If the element
38674+ * edge extends beyond the viewport, a negative value will be
38675+ * reported.
38676+ *
38677+ * @param {element} elem - The element to get the viewport offset for.
38678+ * @param {boolean=} [useDocument=false] - Should the viewport be the document element instead
38679+ * of the first scrollable element, default is false.
38680+ * @param {boolean=} [includePadding=true] - Should the padding on the offset parent element
38681+ * be accounted for, default is true.
38682+ *
38683+ * @returns {object} An object with the following properties:
38684+ * <ul>
38685+ * <li>**top**: distance to the top content edge of viewport element</li>
38686+ * <li>**bottom**: distance to the bottom content edge of viewport element</li>
38687+ * <li>**left**: distance to the left content edge of viewport element</li>
38688+ * <li>**right**: distance to the right content edge of viewport element</li>
38689+ * </ul>
38690+ */
38691+ viewportOffset: function(elem, useDocument, includePadding) {
38692+ elem = this.getRawNode(elem);
38693+ includePadding = includePadding !== false ? true : false;
38694+
38695+ var elemBCR = elem.getBoundingClientRect();
38696+ var offsetBCR = {top: 0, left: 0, bottom: 0, right: 0};
38697+
38698+ var offsetParent = useDocument ? $document[0].documentElement : this.scrollParent(elem);
38699+ var offsetParentBCR = offsetParent.getBoundingClientRect();
38700+
38701+ offsetBCR.top = offsetParentBCR.top + offsetParent.clientTop;
38702+ offsetBCR.left = offsetParentBCR.left + offsetParent.clientLeft;
38703+ if (offsetParent === $document[0].documentElement) {
38704+ offsetBCR.top += $window.pageYOffset;
38705+ offsetBCR.left += $window.pageXOffset;
38706+ }
38707+ offsetBCR.bottom = offsetBCR.top + offsetParent.clientHeight;
38708+ offsetBCR.right = offsetBCR.left + offsetParent.clientWidth;
38709+
38710+ if (includePadding) {
38711+ var offsetParentStyle = $window.getComputedStyle(offsetParent);
38712+ offsetBCR.top += this.parseStyle(offsetParentStyle.paddingTop);
38713+ offsetBCR.bottom -= this.parseStyle(offsetParentStyle.paddingBottom);
38714+ offsetBCR.left += this.parseStyle(offsetParentStyle.paddingLeft);
38715+ offsetBCR.right -= this.parseStyle(offsetParentStyle.paddingRight);
38716+ }
38717+
38718+ return {
38719+ top: Math.round(elemBCR.top - offsetBCR.top),
38720+ bottom: Math.round(offsetBCR.bottom - elemBCR.bottom),
38721+ left: Math.round(elemBCR.left - offsetBCR.left),
38722+ right: Math.round(offsetBCR.right - elemBCR.right)
38723+ };
38724+ },
38725+
38726+ /**
38727+ * Provides an array of placement values parsed from a placement string.
38728+ * Along with the 'auto' indicator, supported placement strings are:
38729+ * <ul>
38730+ * <li>top: element on top, horizontally centered on host element.</li>
38731+ * <li>top-left: element on top, left edge aligned with host element left edge.</li>
38732+ * <li>top-right: element on top, lerightft edge aligned with host element right edge.</li>
38733+ * <li>bottom: element on bottom, horizontally centered on host element.</li>
38734+ * <li>bottom-left: element on bottom, left edge aligned with host element left edge.</li>
38735+ * <li>bottom-right: element on bottom, right edge aligned with host element right edge.</li>
38736+ * <li>left: element on left, vertically centered on host element.</li>
38737+ * <li>left-top: element on left, top edge aligned with host element top edge.</li>
38738+ * <li>left-bottom: element on left, bottom edge aligned with host element bottom edge.</li>
38739+ * <li>right: element on right, vertically centered on host element.</li>
38740+ * <li>right-top: element on right, top edge aligned with host element top edge.</li>
38741+ * <li>right-bottom: element on right, bottom edge aligned with host element bottom edge.</li>
38742+ * </ul>
38743+ * A placement string with an 'auto' indicator is expected to be
38744+ * space separated from the placement, i.e: 'auto bottom-left' If
38745+ * the primary and secondary placement values do not match 'top,
38746+ * bottom, left, right' then 'top' will be the primary placement and
38747+ * 'center' will be the secondary placement. If 'auto' is passed, true
38748+ * will be returned as the 3rd value of the array.
38749+ *
38750+ * @param {string} placement - The placement string to parse.
38751+ *
38752+ * @returns {array} An array with the following values
38753+ * <ul>
38754+ * <li>**[0]**: The primary placement.</li>
38755+ * <li>**[1]**: The secondary placement.</li>
38756+ * <li>**[2]**: If auto is passed: true, else undefined.</li>
38757+ * </ul>
38758+ */
38759+ parsePlacement: function(placement) {
38760+ var autoPlace = PLACEMENT_REGEX.auto.test(placement);
38761+ if (autoPlace) {
38762+ placement = placement.replace(PLACEMENT_REGEX.auto, '');
38763+ }
38764+
38765+ placement = placement.split('-');
38766+
38767+ placement[0] = placement[0] || 'top';
38768+ if (!PLACEMENT_REGEX.primary.test(placement[0])) {
38769+ placement[0] = 'top';
38770+ }
38771+
38772+ placement[1] = placement[1] || 'center';
38773+ if (!PLACEMENT_REGEX.secondary.test(placement[1])) {
38774+ placement[1] = 'center';
38775+ }
38776+
38777+ if (autoPlace) {
38778+ placement[2] = true;
38779+ } else {
38780+ placement[2] = false;
38781+ }
38782+
38783+ return placement;
38784+ },
38785+
38786+ /**
38787+ * Provides coordinates for an element to be positioned relative to
38788+ * another element. Passing 'auto' as part of the placement parameter
38789+ * will enable smart placement - where the element fits. i.e:
38790+ * 'auto left-top' will check to see if there is enough space to the left
38791+ * of the hostElem to fit the targetElem, if not place right (same for secondary
38792+ * top placement). Available space is calculated using the viewportOffset
38793+ * function.
38794+ *
38795+ * @param {element} hostElem - The element to position against.
38796+ * @param {element} targetElem - The element to position.
38797+ * @param {string=} [placement=top] - The placement for the targetElem,
38798+ * default is 'top'. 'center' is assumed as secondary placement for
38799+ * 'top', 'left', 'right', and 'bottom' placements. Available placements are:
38800+ * <ul>
38801+ * <li>top</li>
38802+ * <li>top-right</li>
38803+ * <li>top-left</li>
38804+ * <li>bottom</li>
38805+ * <li>bottom-left</li>
38806+ * <li>bottom-right</li>
38807+ * <li>left</li>
38808+ * <li>left-top</li>
38809+ * <li>left-bottom</li>
38810+ * <li>right</li>
38811+ * <li>right-top</li>
38812+ * <li>right-bottom</li>
38813+ * </ul>
38814+ * @param {boolean=} [appendToBody=false] - Should the top and left values returned
38815+ * be calculated from the body element, default is false.
38816+ *
38817+ * @returns {object} An object with the following properties:
38818+ * <ul>
38819+ * <li>**top**: Value for targetElem top.</li>
38820+ * <li>**left**: Value for targetElem left.</li>
38821+ * <li>**placement**: The resolved placement.</li>
38822+ * </ul>
38823+ */
38824+ positionElements: function(hostElem, targetElem, placement, appendToBody) {
38825+ hostElem = this.getRawNode(hostElem);
38826+ targetElem = this.getRawNode(targetElem);
38827+
38828+ // need to read from prop to support tests.
38829+ var targetWidth = angular.isDefined(targetElem.offsetWidth) ? targetElem.offsetWidth : targetElem.prop('offsetWidth');
38830+ var targetHeight = angular.isDefined(targetElem.offsetHeight) ? targetElem.offsetHeight : targetElem.prop('offsetHeight');
38831+
38832+ placement = this.parsePlacement(placement);
38833+
38834+ var hostElemPos = appendToBody ? this.offset(hostElem) : this.position(hostElem);
38835+ var targetElemPos = {top: 0, left: 0, placement: ''};
38836+
38837+ if (placement[2]) {
38838+ var viewportOffset = this.viewportOffset(hostElem, appendToBody);
3692538839
3692638840 var targetElemStyle = $window.getComputedStyle(targetElem);
3692738841 var adjustedSize = {
@@ -37504,17 +39418,434 @@
3750439418 $timeout(positionPopup, 0, false);
3750539419 });
3750639420 }])
39421+=======
39422+ })
39423+
39424+ .constant('uibDatepickerPopupConfig', {
39425+ datepickerPopup: 'yyyy-MM-dd',
39426+ datepickerPopupTemplateUrl: 'uib/template/datepicker/popup.html',
39427+ datepickerTemplateUrl: 'uib/template/datepicker/datepicker.html',
39428+ html5Types: {
39429+ date: 'yyyy-MM-dd',
39430+ 'datetime-local': 'yyyy-MM-ddTHH:mm:ss.sss',
39431+ 'month': 'yyyy-MM'
39432+ },
39433+ currentText: 'Today',
39434+ clearText: 'Clear',
39435+ closeText: 'Done',
39436+ closeOnDateSelection: true,
39437+ appendToBody: false,
39438+ showButtonBar: true,
39439+ onOpenFocus: true,
39440+ altInputFormats: []
39441+ })
39442+
39443+ .controller('UibDatepickerPopupController', ['$scope', '$element', '$attrs', '$compile', '$parse', '$document', '$rootScope', '$uibPosition', 'dateFilter', 'uibDateParser', 'uibDatepickerPopupConfig', '$timeout', 'uibDatepickerConfig',
39444+ function(scope, element, attrs, $compile, $parse, $document, $rootScope, $position, dateFilter, dateParser, datepickerPopupConfig, $timeout, datepickerConfig) {
39445+ var self = this;
39446+ var cache = {},
39447+ isHtml5DateInput = false;
39448+ var dateFormat, closeOnDateSelection, appendToBody, onOpenFocus,
39449+ datepickerPopupTemplateUrl, datepickerTemplateUrl, popupEl, datepickerEl,
39450+ ngModel, ngModelOptions, $popup, altInputFormats;
39451+
39452+ scope.watchData = {};
39453+
39454+ this.init = function(_ngModel_) {
39455+ ngModel = _ngModel_;
39456+ ngModelOptions = _ngModel_.$options || datepickerConfig.ngModelOptions;
39457+ closeOnDateSelection = angular.isDefined(attrs.closeOnDateSelection) ? scope.$parent.$eval(attrs.closeOnDateSelection) : datepickerPopupConfig.closeOnDateSelection;
39458+ appendToBody = angular.isDefined(attrs.datepickerAppendToBody) ? scope.$parent.$eval(attrs.datepickerAppendToBody) : datepickerPopupConfig.appendToBody;
39459+ onOpenFocus = angular.isDefined(attrs.onOpenFocus) ? scope.$parent.$eval(attrs.onOpenFocus) : datepickerPopupConfig.onOpenFocus;
39460+ datepickerPopupTemplateUrl = angular.isDefined(attrs.datepickerPopupTemplateUrl) ? attrs.datepickerPopupTemplateUrl : datepickerPopupConfig.datepickerPopupTemplateUrl;
39461+ datepickerTemplateUrl = angular.isDefined(attrs.datepickerTemplateUrl) ? attrs.datepickerTemplateUrl : datepickerPopupConfig.datepickerTemplateUrl;
39462+ altInputFormats = angular.isDefined(attrs.altInputFormats) ? scope.$parent.$eval(attrs.altInputFormats) : datepickerPopupConfig.altInputFormats;
39463+
39464+ scope.showButtonBar = angular.isDefined(attrs.showButtonBar) ? scope.$parent.$eval(attrs.showButtonBar) : datepickerPopupConfig.showButtonBar;
39465+
39466+ if (datepickerPopupConfig.html5Types[attrs.type]) {
39467+ dateFormat = datepickerPopupConfig.html5Types[attrs.type];
39468+ isHtml5DateInput = true;
39469+ } else {
39470+ dateFormat = attrs.uibDatepickerPopup || datepickerPopupConfig.datepickerPopup;
39471+ attrs.$observe('uibDatepickerPopup', function(value, oldValue) {
39472+ var newDateFormat = value || datepickerPopupConfig.datepickerPopup;
39473+ // Invalidate the $modelValue to ensure that formatters re-run
39474+ // FIXME: Refactor when PR is merged: https://github.com/angular/angular.js/pull/10764
39475+ if (newDateFormat !== dateFormat) {
39476+ dateFormat = newDateFormat;
39477+ ngModel.$modelValue = null;
39478+
39479+ if (!dateFormat) {
39480+ throw new Error('uibDatepickerPopup must have a date format specified.');
39481+ }
39482+ }
39483+ });
39484+ }
39485+
39486+ if (!dateFormat) {
39487+ throw new Error('uibDatepickerPopup must have a date format specified.');
39488+ }
39489+
39490+ if (isHtml5DateInput && attrs.uibDatepickerPopup) {
39491+ throw new Error('HTML5 date input types do not support custom formats.');
39492+ }
39493+
39494+ // popup element used to display calendar
39495+ popupEl = angular.element('<div uib-datepicker-popup-wrap><div uib-datepicker></div></div>');
39496+ scope.ngModelOptions = angular.copy(ngModelOptions);
39497+ scope.ngModelOptions.timezone = null;
39498+ popupEl.attr({
39499+ 'ng-model': 'date',
39500+ 'ng-model-options': 'ngModelOptions',
39501+ 'ng-change': 'dateSelection(date)',
39502+ 'template-url': datepickerPopupTemplateUrl
39503+ });
39504+
39505+ // datepicker element
39506+ datepickerEl = angular.element(popupEl.children()[0]);
39507+ datepickerEl.attr('template-url', datepickerTemplateUrl);
39508+
39509+ if (isHtml5DateInput) {
39510+ if (attrs.type === 'month') {
39511+ datepickerEl.attr('datepicker-mode', '"month"');
39512+ datepickerEl.attr('min-mode', 'month');
39513+ }
39514+ }
39515+
39516+ if (attrs.datepickerOptions) {
39517+ var options = scope.$parent.$eval(attrs.datepickerOptions);
39518+ if (options && options.initDate) {
39519+ scope.initDate = dateParser.fromTimezone(options.initDate, ngModelOptions.timezone);
39520+ datepickerEl.attr('init-date', 'initDate');
39521+ delete options.initDate;
39522+ }
39523+ angular.forEach(options, function(value, option) {
39524+ datepickerEl.attr(cameltoDash(option), value);
39525+ });
39526+ }
39527+
39528+ angular.forEach(['minMode', 'maxMode'], function(key) {
39529+ if (attrs[key]) {
39530+ scope.$parent.$watch(function() { return attrs[key]; }, function(value) {
39531+ scope.watchData[key] = value;
39532+ });
39533+ datepickerEl.attr(cameltoDash(key), 'watchData.' + key);
39534+ }
39535+ });
39536+
39537+ angular.forEach(['datepickerMode', 'shortcutPropagation'], function(key) {
39538+ if (attrs[key]) {
39539+ var getAttribute = $parse(attrs[key]);
39540+ var propConfig = {
39541+ get: function() {
39542+ return getAttribute(scope.$parent);
39543+ }
39544+ };
39545+
39546+ datepickerEl.attr(cameltoDash(key), 'watchData.' + key);
39547+
39548+ // Propagate changes from datepicker to outside
39549+ if (key === 'datepickerMode') {
39550+ var setAttribute = getAttribute.assign;
39551+ propConfig.set = function(v) {
39552+ setAttribute(scope.$parent, v);
39553+ };
39554+ }
39555+
39556+ Object.defineProperty(scope.watchData, key, propConfig);
39557+ }
39558+ });
39559+
39560+ angular.forEach(['minDate', 'maxDate', 'initDate'], function(key) {
39561+ if (attrs[key]) {
39562+ var getAttribute = $parse(attrs[key]);
39563+
39564+ scope.$parent.$watch(getAttribute, function(value) {
39565+ if (key === 'minDate' || key === 'maxDate') {
39566+ cache[key] = angular.isDate(value) ? dateParser.fromTimezone(new Date(value), ngModelOptions.timezone) : new Date(dateFilter(value, 'medium'));
39567+ }
39568+
39569+ scope.watchData[key] = cache[key] || dateParser.fromTimezone(new Date(value), ngModelOptions.timezone);
39570+ });
39571+
39572+ datepickerEl.attr(cameltoDash(key), 'watchData.' + key);
39573+ }
39574+ });
39575+
39576+ if (attrs.dateDisabled) {
39577+ datepickerEl.attr('date-disabled', 'dateDisabled({ date: date, mode: mode })');
39578+ }
39579+
39580+ angular.forEach(['formatDay', 'formatMonth', 'formatYear', 'formatDayHeader', 'formatDayTitle', 'formatMonthTitle', 'showWeeks', 'startingDay', 'yearRows', 'yearColumns'], function(key) {
39581+ if (angular.isDefined(attrs[key])) {
39582+ datepickerEl.attr(cameltoDash(key), attrs[key]);
39583+ }
39584+ });
39585+
39586+ if (attrs.customClass) {
39587+ datepickerEl.attr('custom-class', 'customClass({ date: date, mode: mode })');
39588+ }
39589+
39590+ if (!isHtml5DateInput) {
39591+ // Internal API to maintain the correct ng-invalid-[key] class
39592+ ngModel.$$parserName = 'date';
39593+ ngModel.$validators.date = validator;
39594+ ngModel.$parsers.unshift(parseDate);
39595+ ngModel.$formatters.push(function(value) {
39596+ if (ngModel.$isEmpty(value)) {
39597+ scope.date = value;
39598+ return value;
39599+ }
39600+ scope.date = dateParser.fromTimezone(value, ngModelOptions.timezone);
39601+ return dateFilter(scope.date, dateFormat);
39602+ });
39603+ } else {
39604+ ngModel.$formatters.push(function(value) {
39605+ scope.date = dateParser.fromTimezone(value, ngModelOptions.timezone);
39606+ return value;
39607+ });
39608+ }
39609+
39610+ // Detect changes in the view from the text box
39611+ ngModel.$viewChangeListeners.push(function() {
39612+ scope.date = parseDateString(ngModel.$viewValue);
39613+ });
39614+
39615+ element.bind('keydown', inputKeydownBind);
39616+
39617+ $popup = $compile(popupEl)(scope);
39618+ // Prevent jQuery cache memory leak (template is now redundant after linking)
39619+ popupEl.remove();
39620+
39621+ if (appendToBody) {
39622+ $document.find('body').append($popup);
39623+ } else {
39624+ element.after($popup);
39625+ }
39626+
39627+ scope.$on('$destroy', function() {
39628+ if (scope.isOpen === true) {
39629+ if (!$rootScope.$$phase) {
39630+ scope.$apply(function() {
39631+ scope.isOpen = false;
39632+ });
39633+ }
39634+ }
39635+
39636+ $popup.remove();
39637+ element.unbind('keydown', inputKeydownBind);
39638+ $document.unbind('click', documentClickBind);
39639+ });
39640+ };
39641+
39642+ scope.getText = function(key) {
39643+ return scope[key + 'Text'] || datepickerPopupConfig[key + 'Text'];
39644+ };
39645+
39646+ scope.isDisabled = function(date) {
39647+ if (date === 'today') {
39648+ date = new Date();
39649+ }
39650+
39651+ return scope.watchData.minDate && scope.compare(date, cache.minDate) < 0 ||
39652+ scope.watchData.maxDate && scope.compare(date, cache.maxDate) > 0;
39653+ };
39654+
39655+ scope.compare = function(date1, date2) {
39656+ return new Date(date1.getFullYear(), date1.getMonth(), date1.getDate()) - new Date(date2.getFullYear(), date2.getMonth(), date2.getDate());
39657+ };
39658+
39659+ // Inner change
39660+ scope.dateSelection = function(dt) {
39661+ if (angular.isDefined(dt)) {
39662+ scope.date = dt;
39663+ }
39664+ var date = scope.date ? dateFilter(scope.date, dateFormat) : null; // Setting to NULL is necessary for form validators to function
39665+ element.val(date);
39666+ ngModel.$setViewValue(date);
39667+
39668+ if (closeOnDateSelection) {
39669+ scope.isOpen = false;
39670+ element[0].focus();
39671+ }
39672+ };
39673+
39674+ scope.keydown = function(evt) {
39675+ if (evt.which === 27) {
39676+ evt.stopPropagation();
39677+ scope.isOpen = false;
39678+ element[0].focus();
39679+ }
39680+ };
39681+
39682+ scope.select = function(date) {
39683+ if (date === 'today') {
39684+ var today = new Date();
39685+ if (angular.isDate(scope.date)) {
39686+ date = new Date(scope.date);
39687+ date.setFullYear(today.getFullYear(), today.getMonth(), today.getDate());
39688+ } else {
39689+ date = new Date(today.setHours(0, 0, 0, 0));
39690+ }
39691+ }
39692+ scope.dateSelection(date);
39693+ };
39694+
39695+ scope.close = function() {
39696+ scope.isOpen = false;
39697+ element[0].focus();
39698+ };
39699+
39700+ scope.disabled = angular.isDefined(attrs.disabled) || false;
39701+ if (attrs.ngDisabled) {
39702+ scope.$parent.$watch($parse(attrs.ngDisabled), function(disabled) {
39703+ scope.disabled = disabled;
39704+ });
39705+ }
39706+
39707+ scope.$watch('isOpen', function(value) {
39708+ if (value) {
39709+ if (!scope.disabled) {
39710+ scope.position = appendToBody ? $position.offset(element) : $position.position(element);
39711+ scope.position.top = scope.position.top + element.prop('offsetHeight');
39712+
39713+ $timeout(function() {
39714+ if (onOpenFocus) {
39715+ scope.$broadcast('uib:datepicker.focus');
39716+ }
39717+ $document.bind('click', documentClickBind);
39718+ }, 0, false);
39719+ } else {
39720+ scope.isOpen = false;
39721+ }
39722+ } else {
39723+ $document.unbind('click', documentClickBind);
39724+ }
39725+ });
39726+
39727+ function cameltoDash(string) {
39728+ return string.replace(/([A-Z])/g, function($1) { return '-' + $1.toLowerCase(); });
39729+ }
39730+
39731+ function parseDateString(viewValue) {
39732+ var date = dateParser.parse(viewValue, dateFormat, scope.date);
39733+ if (isNaN(date)) {
39734+ for (var i = 0; i < altInputFormats.length; i++) {
39735+ date = dateParser.parse(viewValue, altInputFormats[i], scope.date);
39736+ if (!isNaN(date)) {
39737+ return date;
39738+ }
39739+ }
39740+ }
39741+ return date;
39742+ }
39743+
39744+ function parseDate(viewValue) {
39745+ if (angular.isNumber(viewValue)) {
39746+ // presumably timestamp to date object
39747+ viewValue = new Date(viewValue);
39748+ }
39749+
39750+ if (!viewValue) {
39751+ return null;
39752+ }
39753+
39754+ if (angular.isDate(viewValue) && !isNaN(viewValue)) {
39755+ return viewValue;
39756+ }
39757+
39758+ if (angular.isString(viewValue)) {
39759+ var date = parseDateString(viewValue);
39760+ if (!isNaN(date)) {
39761+ return dateParser.toTimezone(date, ngModelOptions.timezone);
39762+ }
39763+ }
39764+
39765+ return ngModel.$options && ngModel.$options.allowInvalid ? viewValue : undefined;
39766+ }
39767+
39768+ function validator(modelValue, viewValue) {
39769+ var value = modelValue || viewValue;
39770+
39771+ if (!attrs.ngRequired && !value) {
39772+ return true;
39773+ }
39774+
39775+ if (angular.isNumber(value)) {
39776+ value = new Date(value);
39777+ }
39778+
39779+ if (!value) {
39780+ return true;
39781+ }
39782+
39783+ if (angular.isDate(value) && !isNaN(value)) {
39784+ return true;
39785+ }
39786+
39787+ if (angular.isString(value)) {
39788+ return !isNaN(parseDateString(viewValue));
39789+ }
39790+
39791+ return false;
39792+ }
39793+
39794+ function documentClickBind(event) {
39795+ if (!scope.isOpen && scope.disabled) {
39796+ return;
39797+ }
39798+
39799+ var popup = $popup[0];
39800+ var dpContainsTarget = element[0].contains(event.target);
39801+ // The popup node may not be an element node
39802+ // In some browsers (IE) only element nodes have the 'contains' function
39803+ var popupContainsTarget = popup.contains !== undefined && popup.contains(event.target);
39804+ if (scope.isOpen && !(dpContainsTarget || popupContainsTarget)) {
39805+ scope.$apply(function() {
39806+ scope.isOpen = false;
39807+ });
39808+ }
39809+ }
39810+
39811+ function inputKeydownBind(evt) {
39812+ if (evt.which === 27 && scope.isOpen) {
39813+ evt.preventDefault();
39814+ evt.stopPropagation();
39815+ scope.$apply(function() {
39816+ scope.isOpen = false;
39817+ });
39818+ element[0].focus();
39819+ } else if (evt.which === 40 && !scope.isOpen) {
39820+ evt.preventDefault();
39821+ evt.stopPropagation();
39822+ scope.$apply(function() {
39823+ scope.isOpen = true;
39824+ });
39825+ }
39826+ }
39827+ }])
39828+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3750739829
3750839830 .directive('uibDatepickerPopup', function() {
3750939831 return {
3751039832 require: ['ngModel', 'uibDatepickerPopup'],
3751139833 controller: 'UibDatepickerPopupController',
3751239834 scope: {
39835+<<<<<<< HEAD
3751339836 datepickerOptions: '=?',
3751439837 isOpen: '=?',
3751539838 currentText: '@',
3751639839 clearText: '@',
3751739840 closeText: '@'
39841+=======
39842+ isOpen: '=?',
39843+ currentText: '@',
39844+ clearText: '@',
39845+ closeText: '@',
39846+ dateDisabled: '&',
39847+ customClass: '&'
39848+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3751839849 },
3751939850 link: function(scope, element, attrs, ctrls) {
3752039851 var ngModel = ctrls[0],
@@ -37530,7 +39861,11 @@
3753039861 replace: true,
3753139862 transclude: true,
3753239863 templateUrl: function(element, attrs) {
39864+<<<<<<< HEAD
3753339865 return attrs.templateUrl || 'uib/template/datepickerPopup/popup.html';
39866+=======
39867+ return attrs.templateUrl || 'uib/template/datepicker/popup.html';
39868+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3753439869 }
3753539870 };
3753639871 });
@@ -37567,10 +39902,17 @@
3756739902 .service('uibDropdownService', ['$document', '$rootScope', function($document, $rootScope) {
3756839903 var openScope = null;
3756939904
39905+<<<<<<< HEAD
3757039906 this.open = function(dropdownScope, element) {
3757139907 if (!openScope) {
3757239908 $document.on('click', closeDropdown);
3757339909 element.on('keydown', keybindFilter);
39910+=======
39911+ this.open = function(dropdownScope) {
39912+ if (!openScope) {
39913+ $document.on('click', closeDropdown);
39914+ $document.on('keydown', keybindFilter);
39915+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3757439916 }
3757539917
3757639918 if (openScope && openScope !== dropdownScope) {
@@ -37580,11 +39922,19 @@
3758039922 openScope = dropdownScope;
3758139923 };
3758239924
39925+<<<<<<< HEAD
3758339926 this.close = function(dropdownScope, element) {
3758439927 if (openScope === dropdownScope) {
3758539928 openScope = null;
3758639929 $document.off('click', closeDropdown);
3758739930 element.off('keydown', keybindFilter);
39931+=======
39932+ this.close = function(dropdownScope) {
39933+ if (openScope === dropdownScope) {
39934+ openScope = null;
39935+ $document.off('click', closeDropdown);
39936+ $document.off('keydown', keybindFilter);
39937+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3758839938 }
3758939939 };
3759039940
@@ -37617,7 +39967,10 @@
3761739967
3761839968 var keybindFilter = function(evt) {
3761939969 if (evt.which === 27) {
39970+<<<<<<< HEAD
3762039971 evt.stopPropagation();
39972+=======
39973+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3762139974 openScope.focusToggleElement();
3762239975 closeDropdown();
3762339976 } else if (openScope.isKeynavEnabled() && [38, 40].indexOf(evt.which) !== -1 && openScope.isOpen) {
@@ -37678,12 +40031,16 @@
3767840031 };
3767940032
3768040033 this.toggle = function(open) {
40034+<<<<<<< HEAD
3768140035 scope.isOpen = arguments.length ? !!open : !scope.isOpen;
3768240036 if (angular.isFunction(setIsOpen)) {
3768340037 setIsOpen(scope, scope.isOpen);
3768440038 }
3768540039
3768640040 return scope.isOpen;
40041+=======
40042+ return scope.isOpen = arguments.length ? !!open : !scope.isOpen;
40043+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3768740044 };
3768840045
3768940046 // Allow other directives to watch status
@@ -37750,8 +40107,12 @@
3775040107 if (appendTo && self.dropdownMenu) {
3775140108 var pos = $position.positionElements($element, self.dropdownMenu, 'bottom-left', true),
3775240109 css,
40110+<<<<<<< HEAD
3775340111 rightalign,
3775440112 scrollbarWidth;
40113+=======
40114+ rightalign;
40115+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3775540116
3775640117 css = {
3775740118 top: pos.top + 'px',
@@ -37764,8 +40125,12 @@
3776440125 css.right = 'auto';
3776540126 } else {
3776640127 css.left = 'auto';
40128+<<<<<<< HEAD
3776740129 scrollbarWidth = $position.scrollbarWidth(true);
3776840130 css.right = window.innerWidth - scrollbarWidth -
40131+=======
40132+ css.right = window.innerWidth -
40133+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3776940134 (pos.left + $element.prop('offsetWidth')) + 'px';
3777040135 }
3777140136
@@ -37788,6 +40153,7 @@
3778840153 }
3778940154
3779040155 var openContainer = appendTo ? appendTo : $element;
40156+<<<<<<< HEAD
3779140157 var hasOpenClass = openContainer.hasClass(appendTo ? appendToOpenClass : openClass);
3779240158
3779340159 if (hasOpenClass === !isOpen) {
@@ -37797,6 +40163,14 @@
3779740163 }
3779840164 });
3779940165 }
40166+=======
40167+
40168+ $animate[isOpen ? 'addClass' : 'removeClass'](openContainer, appendTo ? appendToOpenClass : openClass).then(function() {
40169+ if (angular.isDefined(isOpen) && isOpen !== wasOpen) {
40170+ toggleInvoker($scope, { open: !!isOpen });
40171+ }
40172+ });
40173+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3780040174
3780140175 if (isOpen) {
3780240176 if (self.dropdownMenuTemplateUrl) {
@@ -37811,7 +40185,11 @@
3781140185 }
3781240186
3781340187 scope.focusToggleElement();
40188+<<<<<<< HEAD
3781440189 uibDropdownService.open(scope, $element);
40190+=======
40191+ uibDropdownService.open(scope);
40192+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3781540193 } else {
3781640194 if (self.dropdownMenuTemplateUrl) {
3781740195 if (templateScope) {
@@ -37822,7 +40200,11 @@
3782240200 self.dropdownMenu = newEl;
3782340201 }
3782440202
40203+<<<<<<< HEAD
3782540204 uibDropdownService.close(scope, $element);
40205+=======
40206+ uibDropdownService.close(scope);
40207+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3782640208 self.selectedOption = null;
3782740209 }
3782840210
@@ -37830,6 +40212,15 @@
3783040212 setIsOpen($scope, isOpen);
3783140213 }
3783240214 });
40215+<<<<<<< HEAD
40216+=======
40217+
40218+ $scope.$on('$locationChangeSuccess', function() {
40219+ if (scope.getAutoClose() !== 'disabled') {
40220+ scope.isOpen = false;
40221+ }
40222+ });
40223+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3783340224 }])
3783440225
3783540226 .directive('uibDropdown', function() {
@@ -37955,7 +40346,11 @@
3795540346 }
3795640347 };
3795740348 });
40349+<<<<<<< HEAD
3795840350 angular.module('ui.bootstrap.modal', ['ui.bootstrap.stackedMap', 'ui.bootstrap.position'])
40351+=======
40352+ angular.module('ui.bootstrap.modal', ['ui.bootstrap.stackedMap'])
40353+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3795940354 /**
3796040355 * A helper, internal data structure that stores all references attached to key
3796140356 */
@@ -38060,8 +40455,13 @@
3806040455 /**
3806140456 * A helper directive for the $modal service. It creates a backdrop element.
3806240457 */
40458+<<<<<<< HEAD
3806340459 .directive('uibModalBackdrop', ['$animate', '$injector', '$uibModalStack',
3806440460 function($animate, $injector, $modalStack) {
40461+=======
40462+ .directive('uibModalBackdrop', ['$animateCss', '$injector', '$uibModalStack',
40463+ function($animateCss, $injector, $modalStack) {
40464+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3806540465 return {
3806640466 replace: true,
3806740467 templateUrl: 'uib/template/modal/backdrop.html',
@@ -38073,12 +40473,24 @@
3807340473
3807440474 function linkFn(scope, element, attrs) {
3807540475 if (attrs.modalInClass) {
40476+<<<<<<< HEAD
3807640477 $animate.addClass(element, attrs.modalInClass);
40478+=======
40479+ $animateCss(element, {
40480+ addClass: attrs.modalInClass
40481+ }).start();
40482+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3807740483
3807840484 scope.$on($modalStack.NOW_CLOSING_EVENT, function(e, setIsAsync) {
3807940485 var done = setIsAsync();
3808040486 if (scope.modalOptions.animation) {
40487+<<<<<<< HEAD
3808140488 $animate.removeClass(element, attrs.modalInClass).then(done);
40489+=======
40490+ $animateCss(element, {
40491+ removeClass: attrs.modalInClass
40492+ }).start().then(done);
40493+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3808240494 } else {
3808340495 done();
3808440496 }
@@ -38087,8 +40499,13 @@
3808740499 }
3808840500 }])
3808940501
40502+<<<<<<< HEAD
3809040503 .directive('uibModalWindow', ['$uibModalStack', '$q', '$animateCss', '$document',
3809140504 function($modalStack, $q, $animateCss, $document) {
40505+=======
40506+ .directive('uibModalWindow', ['$uibModalStack', '$q', '$animate', '$animateCss', '$document',
40507+ function($modalStack, $q, $animate, $animateCss, $document) {
40508+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3809240509 return {
3809340510 scope: {
3809440511 index: '@'
@@ -38142,20 +40559,33 @@
3814240559
3814340560 scope.$on($modalStack.NOW_CLOSING_EVENT, function(e, setIsAsync) {
3814440561 var done = setIsAsync();
40562+<<<<<<< HEAD
3814540563 $animateCss(element, {
3814640564 removeClass: attrs.modalInClass
3814740565 }).start().then(done);
40566+=======
40567+ if ($animateCss) {
40568+ $animateCss(element, {
40569+ removeClass: attrs.modalInClass
40570+ }).start().then(done);
40571+ } else {
40572+ $animate.removeClass(element, attrs.modalInClass).then(done);
40573+ }
40574+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3814840575 });
3814940576 }
3815040577
3815140578
3815240579 $q.when(animationPromise).then(function() {
40580+<<<<<<< HEAD
3815340581 // Notify {@link $modalStack} that modal is rendered.
3815440582 var modal = $modalStack.getTop();
3815540583 if (modal) {
3815640584 $modalStack.modalRendered(modal.key);
3815740585 }
3815840586
40587+=======
40588+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3815940589 /**
3816040590 * If something within the freshly-opened modal already has focus (perhaps via a
3816140591 * directive that causes focus). then no need to try and focus anything.
@@ -38177,6 +40607,15 @@
3817740607 }
3817840608 }
3817940609 });
40610+<<<<<<< HEAD
40611+=======
40612+
40613+ // Notify {@link $modalStack} that modal is rendered.
40614+ var modal = $modalStack.getTop();
40615+ if (modal) {
40616+ $modalStack.modalRendered(modal.key);
40617+ }
40618+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3818040619 });
3818140620 }
3818240621 };
@@ -38204,8 +40643,13 @@
3820440643 })
3820540644
3820640645 .factory('$uibModalStack', ['$animate', '$animateCss', '$document',
40646+<<<<<<< HEAD
3820740647 '$compile', '$rootScope', '$q', '$$multiMap', '$$stackedMap', '$uibPosition',
3820840648 function($animate, $animateCss, $document, $compile, $rootScope, $q, $$multiMap, $$stackedMap, $uibPosition) {
40649+=======
40650+ '$compile', '$rootScope', '$q', '$$multiMap', '$$stackedMap',
40651+ function($animate, $animateCss, $document, $compile, $rootScope, $q, $$multiMap, $$stackedMap) {
40652+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3820940653 var OPENED_MODAL_CLASS = 'modal-open';
3821040654
3821140655 var backdropDomEl, backdropScope;
@@ -38214,6 +40658,7 @@
3821440658 var $modalStack = {
3821540659 NOW_CLOSING_EVENT: 'modal.stack.now-closing'
3821640660 };
40661+<<<<<<< HEAD
3821740662 var topModalIndex = 0;
3821840663 var previousTopOpenedModal = null;
3821940664
@@ -38228,6 +40673,15 @@
3822840673 element.offsetHeight ||
3822940674 element.getClientRects().length);
3823040675 }
40676+=======
40677+
40678+ //Modal focus behavior
40679+ var focusableElementList;
40680+ var focusIndex = 0;
40681+ var tababbleSelector = 'a[href], area[href], input:not([disabled]), ' +
40682+ 'button:not([disabled]),select:not([disabled]), textarea:not([disabled]), ' +
40683+ 'iframe, object, embed, *[tabindex], *[contenteditable=true]';
40684+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3823140685
3823240686 function backdropIndex() {
3823340687 var topBackdropIndex = -1;
@@ -38237,12 +40691,15 @@
3823740691 topBackdropIndex = i;
3823840692 }
3823940693 }
40694+<<<<<<< HEAD
3824040695
3824140696 // If any backdrop exist, ensure that it's index is always
3824240697 // right below the top modal
3824340698 if (topBackdropIndex > -1 && topBackdropIndex < topModalIndex) {
3824440699 topBackdropIndex = topModalIndex;
3824540700 }
40701+=======
40702+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3824640703 return topBackdropIndex;
3824740704 }
3824840705
@@ -38258,14 +40715,18 @@
3825840715
3825940716 //clean up the stack
3826040717 openedWindows.remove(modalInstance);
40718+<<<<<<< HEAD
3826140719 previousTopOpenedModal = openedWindows.top();
3826240720 if (previousTopOpenedModal) {
3826340721 topModalIndex = parseInt(previousTopOpenedModal.value.modalDomEl.attr('index'), 10);
3826440722 }
40723+=======
40724+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3826540725
3826640726 removeAfterAnimate(modalWindow.modalDomEl, modalWindow.modalScope, function() {
3826740727 var modalBodyClass = modalWindow.openedClass || OPENED_MODAL_CLASS;
3826840728 openedClasses.remove(modalBodyClass, modalInstance);
40729+<<<<<<< HEAD
3826940730 var areAnyOpen = openedClasses.hasKey(modalBodyClass);
3827040731 appendToElement.toggleClass(modalBodyClass, areAnyOpen);
3827140732 if (!areAnyOpen && scrollbarPadding && scrollbarPadding.heightOverflow && scrollbarPadding.scrollbarWidth) {
@@ -38278,6 +40739,11 @@
3827840739 }
3827940740 toggleTopWindowClass(true);
3828040741 }, modalWindow.closedDeferred);
40742+=======
40743+ appendToElement.toggleClass(modalBodyClass, openedClasses.hasKey(modalBodyClass));
40744+ toggleTopWindowClass(true);
40745+ });
40746+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3828140747 checkRemoveBackdrop();
3828240748
3828340749 //move focus to specified element if available, or else to body
@@ -38336,7 +40802,13 @@
3833640802 }
3833740803 afterAnimating.done = true;
3833840804
40805+<<<<<<< HEAD
3833940806 $animate.leave(domEl).then(function() {
40807+=======
40808+ $animateCss(domEl, {
40809+ event: 'leave'
40810+ }).start().then(function() {
40811+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3834040812 domEl.remove();
3834140813 if (closedDeferred) {
3834240814 closedDeferred.resolve();
@@ -38374,6 +40846,7 @@
3837440846 break;
3837540847 }
3837640848 case 9: {
40849+<<<<<<< HEAD
3837740850 var list = $modalStack.loadFocusElementList(modal);
3837840851 var focusChanged = false;
3837940852 if (evt.shiftKey) {
@@ -38383,6 +40856,17 @@
3838340856 } else {
3838440857 if ($modalStack.isFocusInLastItem(evt, list)) {
3838540858 focusChanged = $modalStack.focusFirstFocusableElement(list);
40859+=======
40860+ $modalStack.loadFocusElementList(modal);
40861+ var focusChanged = false;
40862+ if (evt.shiftKey) {
40863+ if ($modalStack.isFocusInFirstItem(evt)) {
40864+ focusChanged = $modalStack.focusLastFocusableElement();
40865+ }
40866+ } else {
40867+ if ($modalStack.isFocusInLastItem(evt)) {
40868+ focusChanged = $modalStack.focusFirstFocusableElement();
40869+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3838640870 }
3838740871 }
3838840872
@@ -38390,7 +40874,10 @@
3839040874 evt.preventDefault();
3839140875 evt.stopPropagation();
3839240876 }
40877+<<<<<<< HEAD
3839340878
40879+=======
40880+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3839440881 break;
3839540882 }
3839640883 }
@@ -38403,10 +40890,13 @@
3840340890
3840440891 toggleTopWindowClass(false);
3840540892
40893+<<<<<<< HEAD
3840640894 // Store the current top first, to determine what index we ought to use
3840740895 // for the current top modal
3840840896 previousTopOpenedModal = openedWindows.top();
3840940897
40898+=======
40899+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3841040900 openedWindows.add(modalInstance, {
3841140901 deferred: modal.deferred,
3841240902 renderDeferred: modal.renderDeferred,
@@ -38440,6 +40930,7 @@
3844040930 }
3844140931 $compile(backdropDomEl)(backdropScope);
3844240932 $animate.enter(backdropDomEl, appendToElement);
40933+<<<<<<< HEAD
3844340934 scrollbarPadding = $uibPosition.scrollbarPadding(appendToElement);
3844440935 if (scrollbarPadding.heightOverflow && scrollbarPadding.scrollbarWidth) {
3844540936 appendToElement.css({paddingRight: scrollbarPadding.right + 'px'});
@@ -38448,24 +40939,45 @@
3844840939
3844940940 // Set the top modal index based on the index of the previous top modal
3845040941 topModalIndex = previousTopOpenedModal ? parseInt(previousTopOpenedModal.value.modalDomEl.attr('index'), 10) + 1 : 0;
40942+=======
40943+ }
40944+
40945+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3845140946 var angularDomEl = angular.element('<div uib-modal-window="modal-window"></div>');
3845240947 angularDomEl.attr({
3845340948 'template-url': modal.windowTemplateUrl,
3845440949 'window-class': modal.windowClass,
3845540950 'window-top-class': modal.windowTopClass,
3845640951 'size': modal.size,
40952+<<<<<<< HEAD
3845740953 'index': topModalIndex,
40954+=======
40955+ 'index': openedWindows.length() - 1,
40956+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3845840957 'animate': 'animate'
3845940958 }).html(modal.content);
3846040959 if (modal.animation) {
3846140960 angularDomEl.attr('modal-animation', 'true');
3846240961 }
3846340962
40963+<<<<<<< HEAD
3846440964 appendToElement.addClass(modalBodyClass);
3846540965 $animate.enter($compile(angularDomEl)(modal.scope), appendToElement);
3846640966
3846740967 openedWindows.top().value.modalDomEl = angularDomEl;
3846840968 openedWindows.top().value.modalOpener = modalOpener;
40969+=======
40970+ $animate.enter(angularDomEl, appendToElement)
40971+ .then(function() {
40972+ $compile(angularDomEl)(modal.scope);
40973+ $animate.addClass(appendToElement, modalBodyClass);
40974+ });
40975+
40976+ openedWindows.top().value.modalDomEl = angularDomEl;
40977+ openedWindows.top().value.modalOpener = modalOpener;
40978+
40979+ $modalStack.clearFocusListCache();
40980+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3846940981 };
3847040982
3847140983 function broadcastClosing(modalWindow, resultOrReason, closing) {
@@ -38512,39 +41024,64 @@
3851241024 }
3851341025 };
3851441026
41027+<<<<<<< HEAD
3851541028 $modalStack.focusFirstFocusableElement = function(list) {
3851641029 if (list.length > 0) {
3851741030 list[0].focus();
41031+=======
41032+ $modalStack.focusFirstFocusableElement = function() {
41033+ if (focusableElementList.length > 0) {
41034+ focusableElementList[0].focus();
41035+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3851841036 return true;
3851941037 }
3852041038 return false;
3852141039 };
41040+<<<<<<< HEAD
3852241041
3852341042 $modalStack.focusLastFocusableElement = function(list) {
3852441043 if (list.length > 0) {
3852541044 list[list.length - 1].focus();
41045+=======
41046+ $modalStack.focusLastFocusableElement = function() {
41047+ if (focusableElementList.length > 0) {
41048+ focusableElementList[focusableElementList.length - 1].focus();
41049+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3852641050 return true;
3852741051 }
3852841052 return false;
3852941053 };
3853041054
41055+<<<<<<< HEAD
3853141056 $modalStack.isModalFocused = function(evt, modalWindow) {
3853241057 if (evt && modalWindow) {
3853341058 var modalDomEl = modalWindow.value.modalDomEl;
3853441059 if (modalDomEl && modalDomEl.length) {
3853541060 return (evt.target || evt.srcElement) === modalDomEl[0];
3853641061 }
41062+=======
41063+ $modalStack.isFocusInFirstItem = function(evt) {
41064+ if (focusableElementList.length > 0) {
41065+ return (evt.target || evt.srcElement) === focusableElementList[0];
41066+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3853741067 }
3853841068 return false;
3853941069 };
3854041070
41071+<<<<<<< HEAD
3854141072 $modalStack.isFocusInFirstItem = function(evt, list) {
3854241073 if (list.length > 0) {
3854341074 return (evt.target || evt.srcElement) === list[0];
41075+=======
41076+ $modalStack.isFocusInLastItem = function(evt) {
41077+ if (focusableElementList.length > 0) {
41078+ return (evt.target || evt.srcElement) === focusableElementList[focusableElementList.length - 1];
41079+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3854441080 }
3854541081 return false;
3854641082 };
3854741083
41084+<<<<<<< HEAD
3854841085 $modalStack.isFocusInLastItem = function(evt, list) {
3854941086 if (list.length > 0) {
3855041087 return (evt.target || evt.srcElement) === list[list.length - 1];
@@ -38561,6 +41098,20 @@
3856141098 Array.prototype.filter.call(elements, function(element) {
3856241099 return isVisible(element);
3856341100 }) : elements;
41101+=======
41102+ $modalStack.clearFocusListCache = function() {
41103+ focusableElementList = [];
41104+ focusIndex = 0;
41105+ };
41106+
41107+ $modalStack.loadFocusElementList = function(modalWindow) {
41108+ if (focusableElementList === undefined || !focusableElementList.length) {
41109+ if (modalWindow) {
41110+ var modalDomE1 = modalWindow.value.modalDomEl;
41111+ if (modalDomE1 && modalDomE1.length) {
41112+ focusableElementList = modalDomE1[0].querySelectorAll(tababbleSelector);
41113+ }
41114+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3856441115 }
3856541116 }
3856641117 };
@@ -38647,11 +41198,16 @@
3864741198 }
3864841199 });
3864941200
41201+<<<<<<< HEAD
3865041202 var ctrlInstance, ctrlInstantiate, ctrlLocals = {};
41203+=======
41204+ var ctrlInstance, ctrlLocals = {};
41205+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3865141206
3865241207 //controllers
3865341208 if (modalOptions.controller) {
3865441209 ctrlLocals.$scope = modalScope;
41210+<<<<<<< HEAD
3865541211 ctrlLocals.$scope.$resolve = {};
3865641212 ctrlLocals.$uibModalInstance = modalInstance;
3865741213 angular.forEach(tplAndVars[1], function(value, key) {
@@ -38675,6 +41231,22 @@
3867541231
3867641232 if (angular.isFunction(ctrlInstance.$onInit)) {
3867741233 ctrlInstance.$onInit();
41234+=======
41235+ ctrlLocals.$uibModalInstance = modalInstance;
41236+ angular.forEach(tplAndVars[1], function(value, key) {
41237+ ctrlLocals[key] = value;
41238+ });
41239+
41240+ ctrlInstance = $controller(modalOptions.controller, ctrlLocals);
41241+ if (modalOptions.controllerAs) {
41242+ if (modalOptions.bindToController) {
41243+ ctrlInstance.$close = modalScope.$close;
41244+ ctrlInstance.$dismiss = modalScope.$dismiss;
41245+ angular.extend(ctrlInstance, providedScope);
41246+ }
41247+
41248+ modalScope[modalOptions.controllerAs] = ctrlInstance;
41249+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3867841250 }
3867941251 }
3868041252
@@ -38727,7 +41299,10 @@
3872741299 create: function(ctrl, $scope, $attrs) {
3872841300 ctrl.setNumPages = $attrs.numPages ? $parse($attrs.numPages).assign : angular.noop;
3872941301 ctrl.ngModelCtrl = { $setViewValue: angular.noop }; // nullModelCtrl
41302+<<<<<<< HEAD
3873041303 ctrl._watchers = [];
41304+=======
41305+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3873141306
3873241307 ctrl.init = function(ngModelCtrl, config) {
3873341308 ctrl.ngModelCtrl = ngModelCtrl;
@@ -38738,11 +41313,19 @@
3873841313 };
3873941314
3874041315 if ($attrs.itemsPerPage) {
41316+<<<<<<< HEAD
3874141317 ctrl._watchers.push($scope.$parent.$watch($attrs.itemsPerPage, function(value) {
3874241318 ctrl.itemsPerPage = parseInt(value, 10);
3874341319 $scope.totalPages = ctrl.calculateTotalPages();
3874441320 ctrl.updatePage();
3874541321 }));
41322+=======
41323+ $scope.$parent.$watch($parse($attrs.itemsPerPage), function(value) {
41324+ ctrl.itemsPerPage = parseInt(value, 10);
41325+ $scope.totalPages = ctrl.calculateTotalPages();
41326+ ctrl.updatePage();
41327+ });
41328+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3874641329 } else {
3874741330 ctrl.itemsPerPage = config.itemsPerPage;
3874841331 }
@@ -38800,12 +41383,15 @@
3880041383 ctrl.ngModelCtrl.$render();
3880141384 }
3880241385 };
41386+<<<<<<< HEAD
3880341387
3880441388 $scope.$on('$destroy', function() {
3880541389 while (ctrl._watchers.length) {
3880641390 ctrl._watchers.shift()();
3880741391 }
3880841392 });
41393+=======
41394+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3880941395 }
3881041396 };
3881141397 }]);
@@ -38859,18 +41445,29 @@
3885941445 var maxSize = angular.isDefined($attrs.maxSize) ? $scope.$parent.$eval($attrs.maxSize) : uibPaginationConfig.maxSize,
3886041446 rotate = angular.isDefined($attrs.rotate) ? $scope.$parent.$eval($attrs.rotate) : uibPaginationConfig.rotate,
3886141447 forceEllipses = angular.isDefined($attrs.forceEllipses) ? $scope.$parent.$eval($attrs.forceEllipses) : uibPaginationConfig.forceEllipses,
41448+<<<<<<< HEAD
3886241449 boundaryLinkNumbers = angular.isDefined($attrs.boundaryLinkNumbers) ? $scope.$parent.$eval($attrs.boundaryLinkNumbers) : uibPaginationConfig.boundaryLinkNumbers,
3886341450 pageLabel = angular.isDefined($attrs.pageLabel) ? function(idx) { return $scope.$parent.$eval($attrs.pageLabel, {$page: idx}); } : angular.identity;
41451+=======
41452+ boundaryLinkNumbers = angular.isDefined($attrs.boundaryLinkNumbers) ? $scope.$parent.$eval($attrs.boundaryLinkNumbers) : uibPaginationConfig.boundaryLinkNumbers;
41453+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3886441454 $scope.boundaryLinks = angular.isDefined($attrs.boundaryLinks) ? $scope.$parent.$eval($attrs.boundaryLinks) : uibPaginationConfig.boundaryLinks;
3886541455 $scope.directionLinks = angular.isDefined($attrs.directionLinks) ? $scope.$parent.$eval($attrs.directionLinks) : uibPaginationConfig.directionLinks;
3886641456
3886741457 uibPaging.create(this, $scope, $attrs);
3886841458
3886941459 if ($attrs.maxSize) {
41460+<<<<<<< HEAD
3887041461 ctrl._watchers.push($scope.$parent.$watch($parse($attrs.maxSize), function(value) {
3887141462 maxSize = parseInt(value, 10);
3887241463 ctrl.render();
3887341464 }));
41465+=======
41466+ $scope.$parent.$watch($parse($attrs.maxSize), function(value) {
41467+ maxSize = parseInt(value, 10);
41468+ ctrl.render();
41469+ });
41470+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3887441471 }
3887541472
3887641473 // Create page object used in template
@@ -38912,7 +41509,11 @@
3891241509
3891341510 // Add page number links
3891441511 for (var number = startPage; number <= endPage; number++) {
41512+<<<<<<< HEAD
3891541513 var page = makePage(number, pageLabel(number), number === currentPage);
41514+=======
41515+ var page = makePage(number, number, number === currentPage);
41516+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3891641517 pages.push(page);
3891741518 }
3891841519
@@ -39054,7 +41655,11 @@
3905441655 /**
3905541656 * This allows you to extend the set of trigger mappings available. E.g.:
3905641657 *
41658+<<<<<<< HEAD
3905741659 * $tooltipProvider.setTriggers( { 'openTrigger': 'closeTrigger' } );
41660+=======
41661+ * $tooltipProvider.setTriggers( 'openTrigger': 'closeTrigger' );
41662+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3905841663 */
3905941664 this.setTriggers = function setTriggers(triggers) {
3906041665 angular.extend(triggerMap, triggers);
@@ -39127,6 +41732,7 @@
3912741732 var startSym = $interpolate.startSymbol();
3912841733 var endSym = $interpolate.endSymbol();
3912941734 var template =
41735+<<<<<<< HEAD
3913041736 '<div '+ directiveName + '-popup ' +
3913141737 'uib-title="' + startSym + 'title' + endSym + '" ' +
3913241738 (options.useContentExp ?
@@ -39138,6 +41744,19 @@
3913841744 'is-open="isOpen" ' +
3913941745 'origin-scope="origScope" ' +
3914041746 'class="uib-position-measure"' +
41747+=======
41748+ '<div '+ directiveName + '-popup '+
41749+ 'title="' + startSym + 'title' + endSym + '" '+
41750+ (options.useContentExp ?
41751+ 'content-exp="contentExp()" ' :
41752+ 'content="' + startSym + 'content' + endSym + '" ') +
41753+ 'placement="' + startSym + 'placement' + endSym + '" '+
41754+ 'popup-class="' + startSym + 'popupClass' + endSym + '" '+
41755+ 'animation="animation" ' +
41756+ 'is-open="isOpen"' +
41757+ 'origin-scope="origScope" ' +
41758+ 'style="visibility: hidden; display: block; top: -9999px; left: -9999px;"' +
41759+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3914141760 '>' +
3914241761 '</div>';
3914341762
@@ -39160,7 +41779,10 @@
3916041779 var isOpenParse = angular.isDefined(attrs[prefix + 'IsOpen']) ? $parse(attrs[prefix + 'IsOpen']) : false;
3916141780 var contentParse = options.useContentExp ? $parse(attrs[ttType]) : false;
3916241781 var observers = [];
41782+<<<<<<< HEAD
3916341783 var lastPlacement;
41784+=======
41785+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3916441786
3916541787 var positionTooltip = function() {
3916641788 // check if tooltip exists and is not empty
@@ -39168,6 +41790,7 @@
3916841790
3916941791 if (!positionTimeout) {
3917041792 positionTimeout = $timeout(function() {
41793+<<<<<<< HEAD
3917141794 var ttPosition = $position.positionElements(element, tooltip, ttScope.placement, appendToBody);
3917241795 tooltip.css({ top: ttPosition.top + 'px', left: ttPosition.left + 'px' });
3917341796
@@ -39191,6 +41814,38 @@
3919141814 $position.positionArrow(tooltip, ttPosition.placement);
3919241815 }
3919341816 lastPlacement = ttPosition.placement;
41817+=======
41818+ // Reset the positioning.
41819+ tooltip.css({ top: 0, left: 0 });
41820+
41821+ // Now set the calculated positioning.
41822+ var ttPosition = $position.positionElements(element, tooltip, ttScope.placement, appendToBody);
41823+ tooltip.css({ top: ttPosition.top + 'px', left: ttPosition.left + 'px', visibility: 'visible' });
41824+
41825+ // If the placement class is prefixed, still need
41826+ // to remove the TWBS standard class.
41827+ if (options.placementClassPrefix) {
41828+ tooltip.removeClass('top bottom left right');
41829+ }
41830+
41831+ tooltip.removeClass(
41832+ options.placementClassPrefix + 'top ' +
41833+ options.placementClassPrefix + 'top-left ' +
41834+ options.placementClassPrefix + 'top-right ' +
41835+ options.placementClassPrefix + 'bottom ' +
41836+ options.placementClassPrefix + 'bottom-left ' +
41837+ options.placementClassPrefix + 'bottom-right ' +
41838+ options.placementClassPrefix + 'left ' +
41839+ options.placementClassPrefix + 'left-top ' +
41840+ options.placementClassPrefix + 'left-bottom ' +
41841+ options.placementClassPrefix + 'right ' +
41842+ options.placementClassPrefix + 'right-top ' +
41843+ options.placementClassPrefix + 'right-bottom');
41844+
41845+ var placement = ttPosition.placement.split('-');
41846+ tooltip.addClass(placement[0], options.placementClassPrefix + ttPosition.placement);
41847+ $position.positionArrow(tooltip, ttPosition.placement);
41848+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3919441849
3919541850 positionTimeout = null;
3919641851 }, 0, false);
@@ -39287,6 +41942,7 @@
3928741942
3928841943 // First things first: we don't show it anymore.
3928941944 ttScope.$evalAsync(function() {
41945+<<<<<<< HEAD
3929041946 if (ttScope) {
3929141947 ttScope.isOpen = false;
3929241948 assignIsOpen(false);
@@ -39301,6 +41957,20 @@
3930141957 } else {
3930241958 removeTooltip();
3930341959 }
41960+=======
41961+ ttScope.isOpen = false;
41962+ assignIsOpen(false);
41963+ // And now we remove it from the DOM. However, if we have animation, we
41964+ // need to wait for it to expire beforehand.
41965+ // FIXME: this is a placeholder for a port of the transitions library.
41966+ // The fade transition in TWBS is 150ms.
41967+ if (ttScope.animation) {
41968+ if (!transitionTimeout) {
41969+ transitionTimeout = $timeout(removeTooltip, 150, false);
41970+ }
41971+ } else {
41972+ removeTooltip();
41973+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3930441974 }
3930541975 });
3930641976 }
@@ -39310,7 +41980,10 @@
3931041980 $timeout.cancel(hideTimeout);
3931141981 hideTimeout = null;
3931241982 }
41983+<<<<<<< HEAD
3931341984
41985+=======
41986+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3931441987 if (transitionTimeout) {
3931541988 $timeout.cancel(transitionTimeout);
3931641989 transitionTimeout = null;
@@ -39365,8 +42038,11 @@
3936542038
3936642039 ttScope.popupClass = attrs[prefix + 'Class'];
3936742040 ttScope.placement = angular.isDefined(attrs[prefix + 'Placement']) ? attrs[prefix + 'Placement'] : options.placement;
42041+<<<<<<< HEAD
3936842042 var placement = $position.parsePlacement(ttScope.placement);
3936942043 lastPlacement = placement[1] ? placement[0] + '-' + placement[1] : placement[0];
42044+=======
42045+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3937042046
3937142047 var delay = parseInt(attrs[prefix + 'PopupDelay'], 10);
3937242048 var closeDelay = parseInt(attrs[prefix + 'PopupCloseDelay'], 10);
@@ -39543,6 +42219,20 @@
3954342219
3954442220 appendToBody = angular.isDefined(appendToBodyVal) ? appendToBodyVal : appendToBody;
3954542221
42222+<<<<<<< HEAD
42223+=======
42224+ // if a tooltip is attached to <body> we need to remove it on
42225+ // location change as its parent scope will probably not be destroyed
42226+ // by the change.
42227+ if (appendToBody) {
42228+ scope.$on('$locationChangeSuccess', function closeTooltipOnLocationChangeSuccess() {
42229+ if (ttScope.isOpen) {
42230+ hide();
42231+ }
42232+ });
42233+ }
42234+
42235+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3954642236 // Make sure tooltip is destroyed and removed.
3954742237 scope.$on('$destroy', function onDestroyTooltip() {
3954842238 unregisterTriggers();
@@ -39644,6 +42334,11 @@
3964442334 // // in TWBS, so we need the primary position.
3964542335 var position = $uibPosition.parsePlacement(scope.placement);
3964642336 element.addClass(position[0]);
42337+<<<<<<< HEAD
42338+=======
42339+ } else {
42340+ element.addClass('top');
42341+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3964742342 }
3964842343
3964942344 if (scope.popupClass) {
@@ -39708,7 +42403,11 @@
3970842403 .directive('uibPopoverTemplatePopup', function() {
3970942404 return {
3971042405 replace: true,
42406+<<<<<<< HEAD
3971142407 scope: { uibTitle: '@', contentExp: '&', placement: '@', popupClass: '@', animation: '&', isOpen: '&',
42408+=======
42409+ scope: { title: '@', contentExp: '&', placement: '@', popupClass: '@', animation: '&', isOpen: '&',
42410+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3971242411 originScope: '&' },
3971342412 templateUrl: 'uib/template/popover/popover-template.html'
3971442413 };
@@ -39723,7 +42422,11 @@
3972342422 .directive('uibPopoverHtmlPopup', function() {
3972442423 return {
3972542424 replace: true,
42425+<<<<<<< HEAD
3972642426 scope: { contentExp: '&', uibTitle: '@', placement: '@', popupClass: '@', animation: '&', isOpen: '&' },
42427+=======
42428+ scope: { contentExp: '&', title: '@', placement: '@', popupClass: '@', animation: '&', isOpen: '&' },
42429+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3972742430 templateUrl: 'uib/template/popover/popover-html.html'
3972842431 };
3972942432 })
@@ -39737,7 +42440,11 @@
3973742440 .directive('uibPopoverPopup', function() {
3973842441 return {
3973942442 replace: true,
42443+<<<<<<< HEAD
3974042444 scope: { uibTitle: '@', content: '@', placement: '@', popupClass: '@', animation: '&', isOpen: '&' },
42445+=======
42446+ scope: { title: '@', content: '@', placement: '@', popupClass: '@', animation: '&', isOpen: '&' },
42447+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3974142448 templateUrl: 'uib/template/popover/popover.html'
3974242449 };
3974342450 })
@@ -39758,7 +42465,11 @@
3975842465 animate = angular.isDefined($attrs.animate) ? $scope.$parent.$eval($attrs.animate) : progressConfig.animate;
3975942466
3976042467 this.bars = [];
42468+<<<<<<< HEAD
3976142469 $scope.max = getMaxOrDefault();
42470+=======
42471+ $scope.max = angular.isDefined($scope.max) ? $scope.max : progressConfig.max;
42472+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3976242473
3976342474 this.addBar = function(bar, element, attrs) {
3976442475 if (!animate) {
@@ -39767,7 +42478,11 @@
3976742478
3976842479 this.bars.push(bar);
3976942480
42481+<<<<<<< HEAD
3977042482 bar.max = getMaxOrDefault();
42483+=======
42484+ bar.max = $scope.max;
42485+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3977142486 bar.title = attrs && angular.isDefined(attrs.title) ? attrs.title : 'progressbar';
3977242487
3977342488 bar.$watch('value', function(value) {
@@ -39798,6 +42513,7 @@
3979842513 });
3979942514 };
3980042515
42516+<<<<<<< HEAD
3980142517 //$attrs.$observe('maxParam', function(maxParam) {
3980242518 $scope.$watch('maxParam', function(maxParam) {
3980342519 self.bars.forEach(function(bar) {
@@ -39809,6 +42525,14 @@
3980942525 function getMaxOrDefault () {
3981042526 return angular.isDefined($scope.maxParam) ? $scope.maxParam : progressConfig.max;
3981142527 }
42528+=======
42529+ $scope.$watch('max', function(max) {
42530+ self.bars.forEach(function(bar) {
42531+ bar.max = $scope.max;
42532+ bar.recalculatePercentage();
42533+ });
42534+ });
42535+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3981242536 }])
3981342537
3981442538 .directive('uibProgress', function() {
@@ -39818,7 +42542,11 @@
3981842542 controller: 'UibProgressController',
3981942543 require: 'uibProgress',
3982042544 scope: {
42545+<<<<<<< HEAD
3982142546 maxParam: '=?max'
42547+=======
42548+ max: '=?'
42549+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3982242550 },
3982342551 templateUrl: 'uib/template/progressbar/progress.html'
3982442552 };
@@ -39847,7 +42575,11 @@
3984742575 controller: 'UibProgressController',
3984842576 scope: {
3984942577 value: '=',
42578+<<<<<<< HEAD
3985042579 maxParam: '=?max',
42580+=======
42581+ max: '=?',
42582+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3985142583 type: '@'
3985242584 },
3985342585 templateUrl: 'uib/template/progressbar/progressbar.html',
@@ -39863,13 +42595,20 @@
3986342595 max: 5,
3986442596 stateOn: null,
3986542597 stateOff: null,
42598+<<<<<<< HEAD
3986642599 enableReset: true,
42600+=======
42601+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3986742602 titles : ['one', 'two', 'three', 'four', 'five']
3986842603 })
3986942604
3987042605 .controller('UibRatingController', ['$scope', '$attrs', 'uibRatingConfig', function($scope, $attrs, ratingConfig) {
42606+<<<<<<< HEAD
3987142607 var ngModelCtrl = { $setViewValue: angular.noop },
3987242608 self = this;
42609+=======
42610+ var ngModelCtrl = { $setViewValue: angular.noop };
42611+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3987342612
3987442613 this.init = function(ngModelCtrl_) {
3987542614 ngModelCtrl = ngModelCtrl_;
@@ -39885,9 +42624,13 @@
3988542624
3988642625 this.stateOn = angular.isDefined($attrs.stateOn) ? $scope.$parent.$eval($attrs.stateOn) : ratingConfig.stateOn;
3988742626 this.stateOff = angular.isDefined($attrs.stateOff) ? $scope.$parent.$eval($attrs.stateOff) : ratingConfig.stateOff;
42627+<<<<<<< HEAD
3988842628 this.enableReset = angular.isDefined($attrs.enableReset) ?
3988942629 $scope.$parent.$eval($attrs.enableReset) : ratingConfig.enableReset;
3989042630 var tmpTitles = angular.isDefined($attrs.titles) ? $scope.$parent.$eval($attrs.titles) : ratingConfig.titles;
42631+=======
42632+ var tmpTitles = angular.isDefined($attrs.titles) ? $scope.$parent.$eval($attrs.titles) : ratingConfig.titles ;
42633+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3989142634 this.titles = angular.isArray(tmpTitles) && tmpTitles.length > 0 ?
3989242635 tmpTitles : ratingConfig.titles;
3989342636
@@ -39914,8 +42657,12 @@
3991442657
3991542658 $scope.rate = function(value) {
3991642659 if (!$scope.readonly && value >= 0 && value <= $scope.range.length) {
42660+<<<<<<< HEAD
3991742661 var newViewValue = self.enableReset && ngModelCtrl.$viewValue === value ? 0 : value;
3991842662 ngModelCtrl.$setViewValue(newViewValue);
42663+=======
42664+ ngModelCtrl.$setViewValue(ngModelCtrl.$viewValue === value ? 0 : value);
42665+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3991942666 ngModelCtrl.$render();
3992042667 }
3992142668 };
@@ -39942,7 +42689,10 @@
3994242689
3994342690 this.render = function() {
3994442691 $scope.value = ngModelCtrl.$viewValue;
42692+<<<<<<< HEAD
3994542693 $scope.title = self.getTitle($scope.value - 1);
42694+=======
42695+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3994642696 };
3994742697 }])
3994842698
@@ -39950,7 +42700,11 @@
3995042700 return {
3995142701 require: ['uibRating', 'ngModel'],
3995242702 scope: {
42703+<<<<<<< HEAD
3995342704 readonly: '=?readOnly',
42705+=======
42706+ readonly: '=?',
42707+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
3995442708 onHover: '&',
3995542709 onLeave: '&'
3995642710 },
@@ -39968,6 +42722,7 @@
3996842722
3996942723 .controller('UibTabsetController', ['$scope', function ($scope) {
3997042724 var ctrl = this,
42725+<<<<<<< HEAD
3997142726 oldIndex;
3997242727 ctrl.tabs = [];
3997342728
@@ -39998,10 +42753,28 @@
3999842753 ctrl.active = null;
3999942754 oldIndex = null;
4000042755 }
42756+=======
42757+ tabs = ctrl.tabs = $scope.tabs = [];
42758+
42759+ ctrl.select = function(selectedTab) {
42760+ angular.forEach(tabs, function(tab) {
42761+ if (tab.active && tab !== selectedTab) {
42762+ tab.active = false;
42763+ tab.onDeselect();
42764+ selectedTab.selectCalled = false;
42765+ }
42766+ });
42767+ selectedTab.active = true;
42768+ // only call select if it has not already been called
42769+ if (!selectedTab.selectCalled) {
42770+ selectedTab.onSelect();
42771+ selectedTab.selectCalled = true;
42772+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4000142773 }
4000242774 };
4000342775
4000442776 ctrl.addTab = function addTab(tab) {
42777+<<<<<<< HEAD
4000542778 ctrl.tabs.push({
4000642779 tab: tab,
4000742780 index: tab.index
@@ -40021,10 +42794,22 @@
4002142794 if (tab.index === ctrl.active || !angular.isDefined(ctrl.active) && ctrl.tabs.length === 1) {
4002242795 var newActiveIndex = findTabIndex(tab.index);
4002342796 ctrl.select(newActiveIndex);
42797+=======
42798+ tabs.push(tab);
42799+ // we can't run the select function on the first tab
42800+ // since that would select it twice
42801+ if (tabs.length === 1 && tab.active !== false) {
42802+ tab.active = true;
42803+ } else if (tab.active) {
42804+ ctrl.select(tab);
42805+ } else {
42806+ tab.active = false;
42807+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4002442808 }
4002542809 };
4002642810
4002742811 ctrl.removeTab = function removeTab(tab) {
42812+<<<<<<< HEAD
4002842813 var index;
4002942814 for (var i = 0; i < ctrl.tabs.length; i++) {
4003042815 if (ctrl.tabs[i].tab === tab) {
@@ -40048,10 +42833,23 @@
4004842833 }
4004942834 });
4005042835
42836+=======
42837+ var index = tabs.indexOf(tab);
42838+ //Select a new tab if the tab to be removed is selected and not destroyed
42839+ if (tab.active && tabs.length > 1 && !destroyed) {
42840+ //If this is the last tab, select the previous tab. else, the next tab.
42841+ var newActiveIndex = index === tabs.length - 1 ? index - 1 : index + 1;
42842+ ctrl.select(tabs[newActiveIndex]);
42843+ }
42844+ tabs.splice(index, 1);
42845+ };
42846+
42847+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4005142848 var destroyed;
4005242849 $scope.$on('$destroy', function() {
4005342850 destroyed = true;
4005442851 });
42852+<<<<<<< HEAD
4005542853
4005642854 function findTabIndex(index) {
4005742855 for (var i = 0; i < ctrl.tabs.length; i++) {
@@ -40060,12 +42858,15 @@
4006042858 }
4006142859 }
4006242860 }
42861+=======
42862+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4006342863 }])
4006442864
4006542865 .directive('uibTabset', function() {
4006642866 return {
4006742867 transclude: true,
4006842868 replace: true,
42869+<<<<<<< HEAD
4006942870 scope: {},
4007042871 bindToController: {
4007142872 active: '=?',
@@ -40081,6 +42882,16 @@
4008142882 scope.$parent.$eval(attrs.vertical) : false;
4008242883 scope.justified = angular.isDefined(attrs.justified) ?
4008342884 scope.$parent.$eval(attrs.justified) : false;
42885+=======
42886+ scope: {
42887+ type: '@'
42888+ },
42889+ controller: 'UibTabsetController',
42890+ templateUrl: 'uib/template/tabs/tabset.html',
42891+ link: function(scope, element, attrs) {
42892+ scope.vertical = angular.isDefined(attrs.vertical) ? scope.$parent.$eval(attrs.vertical) : false;
42893+ scope.justified = angular.isDefined(attrs.justified) ? scope.$parent.$eval(attrs.justified) : false;
42894+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4008442895 }
4008542896 };
4008642897 })
@@ -40089,6 +42900,7 @@
4008942900 return {
4009042901 require: '^uibTabset',
4009142902 replace: true,
42903+<<<<<<< HEAD
4009242904 templateUrl: function(element, attrs) {
4009342905 return attrs.templateUrl || 'uib/template/tabs/tab.html';
4009442906 },
@@ -40097,6 +42909,13 @@
4009742909 heading: '@',
4009842910 index: '=?',
4009942911 classes: '@?',
42912+=======
42913+ templateUrl: 'uib/template/tabs/tab.html',
42914+ transclude: true,
42915+ scope: {
42916+ active: '=?',
42917+ heading: '@',
42918+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4010042919 onSelect: '&select', //This callback is called in contentHeadingTransclude
4010142920 //once it inserts the tab's content into the dom
4010242921 onDeselect: '&deselect'
@@ -40106,6 +42925,15 @@
4010642925 },
4010742926 controllerAs: 'tab',
4010842927 link: function(scope, elm, attrs, tabsetCtrl, transclude) {
42928+<<<<<<< HEAD
42929+=======
42930+ scope.$watch('active', function(active) {
42931+ if (active) {
42932+ tabsetCtrl.select(scope);
42933+ }
42934+ });
42935+
42936+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4010942937 scope.disabled = false;
4011042938 if (attrs.disable) {
4011142939 scope.$parent.$watch($parse(attrs.disable), function(value) {
@@ -40113,6 +42941,7 @@
4011342941 });
4011442942 }
4011542943
42944+<<<<<<< HEAD
4011642945 if (angular.isUndefined(attrs.index)) {
4011742946 if (tabsetCtrl.tabs && tabsetCtrl.tabs.length) {
4011842947 scope.index = Math.max.apply(null, tabsetCtrl.tabs.map(function(t) { return t.index; })) + 1;
@@ -40136,6 +42965,11 @@
4013642965 }
4013742966
4013842967 tabsetCtrl.select(index, evt);
42968+=======
42969+ scope.select = function() {
42970+ if (!scope.disabled) {
42971+ scope.active = true;
42972+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4013942973 }
4014042974 };
4014142975
@@ -40171,7 +43005,11 @@
4017143005 restrict: 'A',
4017243006 require: '^uibTabset',
4017343007 link: function(scope, elm, attrs) {
43008+<<<<<<< HEAD
4017443009 var tab = scope.$eval(attrs.uibTabContentTransclude).tab;
43010+=======
43011+ var tab = scope.$eval(attrs.uibTabContentTransclude);
43012+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4017543013
4017643014 //Now our tab is ready to be transcluded: both the tab heading area
4017743015 //and the tab content area are loaded. Transclude 'em both.
@@ -40195,8 +43033,12 @@
4019543033 node.hasAttribute('x-uib-tab-heading') ||
4019643034 node.tagName.toLowerCase() === 'uib-tab-heading' ||
4019743035 node.tagName.toLowerCase() === 'data-uib-tab-heading' ||
43036+<<<<<<< HEAD
4019843037 node.tagName.toLowerCase() === 'x-uib-tab-heading' ||
4019943038 node.tagName.toLowerCase() === 'uib:tab-heading'
43039+=======
43040+ node.tagName.toLowerCase() === 'x-uib-tab-heading'
43041+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4020043042 );
4020143043 }
4020243044 });
@@ -40213,16 +43055,25 @@
4021343055 readonlyInput: false,
4021443056 mousewheel: true,
4021543057 arrowkeys: true,
43058+<<<<<<< HEAD
4021643059 showSpinners: true,
4021743060 templateUrl: 'uib/template/timepicker/timepicker.html'
43061+=======
43062+ showSpinners: true
43063+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4021843064 })
4021943065
4022043066 .controller('UibTimepickerController', ['$scope', '$element', '$attrs', '$parse', '$log', '$locale', 'uibTimepickerConfig', function($scope, $element, $attrs, $parse, $log, $locale, timepickerConfig) {
4022143067 var selected = new Date(),
43068+<<<<<<< HEAD
4022243069 watchers = [],
4022343070 ngModelCtrl = { $setViewValue: angular.noop }, // nullModelCtrl
4022443071 meridians = angular.isDefined($attrs.meridians) ? $scope.$parent.$eval($attrs.meridians) : timepickerConfig.meridians || $locale.DATETIME_FORMATS.AMPMS,
4022543072 padHours = angular.isDefined($attrs.padHours) ? $scope.$parent.$eval($attrs.padHours) : true;
43073+=======
43074+ ngModelCtrl = { $setViewValue: angular.noop }, // nullModelCtrl
43075+ meridians = angular.isDefined($attrs.meridians) ? $scope.$parent.$eval($attrs.meridians) : timepickerConfig.meridians || $locale.DATETIME_FORMATS.AMPMS;
43076+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4022643077
4022743078 $scope.tabindex = angular.isDefined($attrs.tabindex) ? $attrs.tabindex : 0;
4022843079 $element.removeAttr('tabindex');
@@ -40256,13 +43107,20 @@
4025643107
4025743108 var hourStep = timepickerConfig.hourStep;
4025843109 if ($attrs.hourStep) {
43110+<<<<<<< HEAD
4025943111 watchers.push($scope.$parent.$watch($parse($attrs.hourStep), function(value) {
4026043112 hourStep = +value;
4026143113 }));
43114+=======
43115+ $scope.$parent.$watch($parse($attrs.hourStep), function(value) {
43116+ hourStep = parseInt(value, 10);
43117+ });
43118+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4026243119 }
4026343120
4026443121 var minuteStep = timepickerConfig.minuteStep;
4026543122 if ($attrs.minuteStep) {
43123+<<<<<<< HEAD
4026643124 watchers.push($scope.$parent.$watch($parse($attrs.minuteStep), function(value) {
4026743125 minuteStep = +value;
4026843126 }));
@@ -40285,6 +43143,30 @@
4028543143 watchers.push($scope.$parent.$watch($parse($attrs.ngDisabled), function(value) {
4028643144 disabled = value;
4028743145 }));
43146+=======
43147+ $scope.$parent.$watch($parse($attrs.minuteStep), function(value) {
43148+ minuteStep = parseInt(value, 10);
43149+ });
43150+ }
43151+
43152+ var min;
43153+ $scope.$parent.$watch($parse($attrs.min), function(value) {
43154+ var dt = new Date(value);
43155+ min = isNaN(dt) ? undefined : dt;
43156+ });
43157+
43158+ var max;
43159+ $scope.$parent.$watch($parse($attrs.max), function(value) {
43160+ var dt = new Date(value);
43161+ max = isNaN(dt) ? undefined : dt;
43162+ });
43163+
43164+ var disabled = false;
43165+ if ($attrs.ngDisabled) {
43166+ $scope.$parent.$watch($parse($attrs.ngDisabled), function(value) {
43167+ disabled = value;
43168+ });
43169+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4028843170 }
4028943171
4029043172 $scope.noIncrementHours = function() {
@@ -40333,22 +43215,38 @@
4033343215
4033443216 var secondStep = timepickerConfig.secondStep;
4033543217 if ($attrs.secondStep) {
43218+<<<<<<< HEAD
4033643219 watchers.push($scope.$parent.$watch($parse($attrs.secondStep), function(value) {
4033743220 secondStep = +value;
4033843221 }));
43222+=======
43223+ $scope.$parent.$watch($parse($attrs.secondStep), function(value) {
43224+ secondStep = parseInt(value, 10);
43225+ });
43226+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4033943227 }
4034043228
4034143229 $scope.showSeconds = timepickerConfig.showSeconds;
4034243230 if ($attrs.showSeconds) {
43231+<<<<<<< HEAD
4034343232 watchers.push($scope.$parent.$watch($parse($attrs.showSeconds), function(value) {
4034443233 $scope.showSeconds = !!value;
4034543234 }));
43235+=======
43236+ $scope.$parent.$watch($parse($attrs.showSeconds), function(value) {
43237+ $scope.showSeconds = !!value;
43238+ });
43239+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4034643240 }
4034743241
4034843242 // 12H / 24H mode
4034943243 $scope.showMeridian = timepickerConfig.showMeridian;
4035043244 if ($attrs.showMeridian) {
43245+<<<<<<< HEAD
4035143246 watchers.push($scope.$parent.$watch($parse($attrs.showMeridian), function(value) {
43247+=======
43248+ $scope.$parent.$watch($parse($attrs.showMeridian), function(value) {
43249+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4035243250 $scope.showMeridian = !!value;
4035343251
4035443252 if (ngModelCtrl.$error.time) {
@@ -40361,15 +43259,26 @@
4036143259 } else {
4036243260 updateTemplate();
4036343261 }
43262+<<<<<<< HEAD
4036443263 }));
43264+=======
43265+ });
43266+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4036543267 }
4036643268
4036743269 // Get $scope.hours in 24H mode if valid
4036843270 function getHoursFromTemplate() {
43271+<<<<<<< HEAD
4036943272 var hours = +$scope.hours;
4037043273 var valid = $scope.showMeridian ? hours > 0 && hours < 13 :
4037143274 hours >= 0 && hours < 24;
4037243275 if (!valid || $scope.hours === '') {
43276+=======
43277+ var hours = parseInt($scope.hours, 10);
43278+ var valid = $scope.showMeridian ? hours > 0 && hours < 13 :
43279+ hours >= 0 && hours < 24;
43280+ if (!valid) {
43281+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4037343282 return undefined;
4037443283 }
4037543284
@@ -40385,6 +43294,7 @@
4038543294 }
4038643295
4038743296 function getMinutesFromTemplate() {
43297+<<<<<<< HEAD
4038843298 var minutes = +$scope.minutes;
4038943299 var valid = minutes >= 0 && minutes < 60;
4039043300 if (!valid || $scope.minutes === '') {
@@ -40399,11 +43309,27 @@
4039943309 }
4040043310
4040143311 function pad(value, noPad) {
43312+=======
43313+ var minutes = parseInt($scope.minutes, 10);
43314+ return minutes >= 0 && minutes < 60 ? minutes : undefined;
43315+ }
43316+
43317+ function getSecondsFromTemplate() {
43318+ var seconds = parseInt($scope.seconds, 10);
43319+ return seconds >= 0 && seconds < 60 ? seconds : undefined;
43320+ }
43321+
43322+ function pad(value) {
43323+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4040243324 if (value === null) {
4040343325 return '';
4040443326 }
4040543327
43328+<<<<<<< HEAD
4040643329 return angular.isDefined(value) && value.toString().length < 2 && !noPad ?
43330+=======
43331+ return angular.isDefined(value) && value.toString().length < 2 ?
43332+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4040743333 '0' + value : value.toString();
4040843334 }
4040943335
@@ -40530,6 +43456,7 @@
4053043456
4053143457 hoursInputEl.bind('blur', function(e) {
4053243458 ngModelCtrl.$setTouched();
43459+<<<<<<< HEAD
4053343460 if (modelIsEmpty()) {
4053443461 makeValid();
4053543462 } else if ($scope.hours === null || $scope.hours === '') {
@@ -40537,6 +43464,13 @@
4053743464 } else if (!$scope.invalidHours && $scope.hours < 10) {
4053843465 $scope.$apply(function() {
4053943466 $scope.hours = pad($scope.hours, !padHours);
43467+=======
43468+ if ($scope.hours === null || $scope.hours === '') {
43469+ invalidate(true);
43470+ } else if (!$scope.invalidHours && $scope.hours < 10) {
43471+ $scope.$apply(function() {
43472+ $scope.hours = pad($scope.hours);
43473+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4054043474 });
4054143475 }
4054243476 });
@@ -40562,9 +43496,13 @@
4056243496
4056343497 minutesInputEl.bind('blur', function(e) {
4056443498 ngModelCtrl.$setTouched();
43499+<<<<<<< HEAD
4056543500 if (modelIsEmpty()) {
4056643501 makeValid();
4056743502 } else if ($scope.minutes === null) {
43503+=======
43504+ if ($scope.minutes === null) {
43505+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4056843506 invalidate(undefined, true);
4056943507 } else if (!$scope.invalidMinutes && $scope.minutes < 10) {
4057043508 $scope.$apply(function() {
@@ -40587,9 +43525,13 @@
4058743525 };
4058843526
4058943527 secondsInputEl.bind('blur', function(e) {
43528+<<<<<<< HEAD
4059043529 if (modelIsEmpty()) {
4059143530 makeValid();
4059243531 } else if (!$scope.invalidSeconds && $scope.seconds < 10) {
43532+=======
43533+ if (!$scope.invalidSeconds && $scope.seconds < 10) {
43534+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4059343535 $scope.$apply( function() {
4059443536 $scope.seconds = pad($scope.seconds);
4059543537 });
@@ -40649,7 +43591,11 @@
4064943591 hours = hours === 0 || hours === 12 ? 12 : hours % 12; // Convert 24 to 12 hour system
4065043592 }
4065143593
43594+<<<<<<< HEAD
4065243595 $scope.hours = keyboardChange === 'h' ? hours : pad(hours, !padHours);
43596+=======
43597+ $scope.hours = keyboardChange === 'h' ? hours : pad(hours);
43598+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4065343599 if (keyboardChange !== 'm') {
4065443600 $scope.minutes = pad(minutes);
4065543601 }
@@ -40678,12 +43624,15 @@
4067843624 return newDate;
4067943625 }
4068043626
43627+<<<<<<< HEAD
4068143628 function modelIsEmpty() {
4068243629 return ($scope.hours === null || $scope.hours === '') &&
4068343630 ($scope.minutes === null || $scope.minutes === '') &&
4068443631 (!$scope.showSeconds || $scope.showSeconds && ($scope.seconds === null || $scope.seconds === ''));
4068543632 }
4068643633
43634+=======
43635+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4068743636 $scope.showSpinners = angular.isDefined($attrs.showSpinners) ?
4068843637 $scope.$parent.$eval($attrs.showSpinners) : timepickerConfig.showSpinners;
4068943638
@@ -40739,6 +43688,7 @@
4073943688 $scope.blur = function() {
4074043689 ngModelCtrl.$setTouched();
4074143690 };
43691+<<<<<<< HEAD
4074243692
4074343693 $scope.$on('$destroy', function() {
4074443694 while (watchers.length) {
@@ -40748,6 +43698,11 @@
4074843698 }])
4074943699
4075043700 .directive('uibTimepicker', ['uibTimepickerConfig', function(uibTimepickerConfig) {
43701+=======
43702+ }])
43703+
43704+ .directive('uibTimepicker', function() {
43705+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4075143706 return {
4075243707 require: ['uibTimepicker', '?^ngModel'],
4075343708 controller: 'UibTimepickerController',
@@ -40755,7 +43710,11 @@
4075543710 replace: true,
4075643711 scope: {},
4075743712 templateUrl: function(element, attrs) {
43713+<<<<<<< HEAD
4075843714 return attrs.templateUrl || uibTimepickerConfig.templateUrl;
43715+=======
43716+ return attrs.templateUrl || 'uib/template/timepicker/timepicker.html';
43717+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4075943718 },
4076043719 link: function(scope, element, attrs, ctrls) {
4076143720 var timepickerCtrl = ctrls[0], ngModelCtrl = ctrls[1];
@@ -40765,7 +43724,11 @@
4076543724 }
4076643725 }
4076743726 };
43727+<<<<<<< HEAD
4076843728 }]);
43729+=======
43730+ });
43731+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4076943732
4077043733 angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.debounce', 'ui.bootstrap.position'])
4077143734
@@ -40808,10 +43771,13 @@
4080843771 minLength = 1;
4080943772 }
4081043773
43774+<<<<<<< HEAD
4081143775 originalScope.$watch(attrs.typeaheadMinLength, function (newVal) {
4081243776 minLength = !newVal && newVal !== 0 ? 1 : newVal;
4081343777 });
4081443778
43779+=======
43780+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4081543781 //minimal wait time after last character typed before typeahead kicks-in
4081643782 var waitTime = originalScope.$eval(attrs.typeaheadWaitMs) || 0;
4081743783
@@ -40824,12 +43790,15 @@
4082443790 //binding to a variable that indicates if matches are being retrieved asynchronously
4082543791 var isLoadingSetter = $parse(attrs.typeaheadLoading).assign || angular.noop;
4082643792
43793+<<<<<<< HEAD
4082743794 //a function to determine if an event should cause selection
4082843795 var isSelectEvent = attrs.typeaheadShouldSelect ? $parse(attrs.typeaheadShouldSelect) : function(scope, vals) {
4082943796 var evt = vals.$event;
4083043797 return evt.which === 13 || evt.which === 9;
4083143798 };
4083243799
43800+=======
43801+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4083343802 //a callback executed when a match is selected
4083443803 var onSelectCallback = $parse(attrs.typeaheadOnSelect);
4083543804
@@ -40904,7 +43873,10 @@
4090443873 element.after(inputsContainer);
4090543874 hintInputElem = element.clone();
4090643875 hintInputElem.attr('placeholder', '');
43876+<<<<<<< HEAD
4090743877 hintInputElem.attr('tabindex', '-1');
43878+=======
43879+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4090843880 hintInputElem.val('');
4090943881 hintInputElem.css({
4091043882 'position': 'absolute',
@@ -41027,11 +43999,18 @@
4102743999
4102844000 if (showHint) {
4102944001 var firstLabel = scope.matches[0].label;
44002+<<<<<<< HEAD
4103044003 if (angular.isString(inputValue) &&
4103144004 inputValue.length > 0 &&
4103244005 firstLabel.slice(0, inputValue.length).toUpperCase() === inputValue.toUpperCase()) {
4103344006 hintInputElem.val(inputValue + firstLabel.slice(inputValue.length));
4103444007 } else {
44008+=======
44009+ if (inputValue.length > 0 && firstLabel.slice(0, inputValue.length).toUpperCase() === inputValue.toUpperCase()) {
44010+ hintInputElem.val(inputValue + firstLabel.slice(inputValue.length));
44011+ }
44012+ else {
44013+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4103544014 hintInputElem.val('');
4103644015 }
4103744016 }
@@ -41145,6 +44124,7 @@
4114544124 return;
4114644125 }
4114744126
44127+<<<<<<< HEAD
4114844128 var shouldSelect = isSelectEvent(originalScope, {$event: evt});
4114944129
4115044130 /**
@@ -41154,12 +44134,17 @@
4115444134 * then clear the results
4115544135 */
4115644136 if (scope.activeIdx === -1 && shouldSelect || evt.which === 9 && !!evt.shiftKey) {
44137+=======
44138+ // if there's nothing selected (i.e. focusFirst) and enter or tab is hit, clear the results
44139+ if (scope.activeIdx === -1 && (evt.which === 9 || evt.which === 13)) {
44140+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4115744141 resetMatches();
4115844142 scope.$digest();
4115944143 return;
4116044144 }
4116144145
4116244146 evt.preventDefault();
44147+<<<<<<< HEAD
4116344148 var target;
4116444149 switch (evt.which) {
4116544150 case 27: // escape
@@ -41192,6 +44177,38 @@
4119244177 }
4119344178 });
4119444179 }
44180+=======
44181+
44182+ switch (evt.which) {
44183+ case 9:
44184+ case 13:
44185+ scope.$apply(function () {
44186+ if (angular.isNumber(scope.debounceUpdate) || angular.isObject(scope.debounceUpdate)) {
44187+ $$debounce(function() {
44188+ scope.select(scope.activeIdx, evt);
44189+ }, angular.isNumber(scope.debounceUpdate) ? scope.debounceUpdate : scope.debounceUpdate['default']);
44190+ } else {
44191+ scope.select(scope.activeIdx, evt);
44192+ }
44193+ });
44194+ break;
44195+ case 27:
44196+ evt.stopPropagation();
44197+
44198+ resetMatches();
44199+ scope.$digest();
44200+ break;
44201+ case 38:
44202+ scope.activeIdx = (scope.activeIdx > 0 ? scope.activeIdx : scope.matches.length) - 1;
44203+ scope.$digest();
44204+ popUpEl.find('li')[scope.activeIdx].scrollIntoView(false);
44205+ break;
44206+ case 40:
44207+ scope.activeIdx = (scope.activeIdx + 1) % scope.matches.length;
44208+ scope.$digest();
44209+ popUpEl.find('li')[scope.activeIdx].scrollIntoView(false);
44210+ break;
44211+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4119544212 }
4119644213 });
4119744214
@@ -41218,10 +44235,14 @@
4121844235 });
4121944236 }
4122044237 if (!isEditable && modelCtrl.$error.editable) {
44238+<<<<<<< HEAD
4122144239 modelCtrl.$setViewValue();
4122244240 // Reset validity as we are clearing
4122344241 modelCtrl.$setValidity('editable', true);
4122444242 modelCtrl.$setValidity('parse', true);
44243+=======
44244+ modelCtrl.$viewValue = '';
44245+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4122544246 element.val('');
4122644247 }
4122744248 hasFocus = false;
@@ -41235,7 +44256,11 @@
4123544256 if (element[0] !== evt.target && evt.which !== 3 && scope.matches.length !== 0) {
4123644257 resetMatches();
4123744258 if (!$rootScope.$$phase) {
44259+<<<<<<< HEAD
4123844260 originalScope.$digest();
44261+=======
44262+ scope.$digest();
44263+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4123944264 }
4124044265 }
4124144266 };
@@ -41360,6 +44385,7 @@
4136044385 },
4136144386 replace: true,
4136244387 templateUrl: function(element, attrs) {
44388+<<<<<<< HEAD
4136344389 return attrs.popupTemplateUrl || 'uib/template/typeahead/typeahead-popup.html';
4136444390 },
4136544391 link: function(scope, element, attrs) {
@@ -43440,6 +46466,512 @@
4344046466
4344146467 /***/ },
4344246468 /* 10 */
46469+=======
46470+ return attrs.popupTemplateUrl || 'uib/template/typeahead/typeahead-popup.html';
46471+ },
46472+ link: function(scope, element, attrs) {
46473+ scope.templateUrl = attrs.templateUrl;
46474+
46475+ scope.isOpen = function() {
46476+ var isDropdownOpen = scope.matches.length > 0;
46477+ scope.assignIsOpen({ isOpen: isDropdownOpen });
46478+ return isDropdownOpen;
46479+ };
46480+
46481+ scope.isActive = function(matchIdx) {
46482+ return scope.active === matchIdx;
46483+ };
46484+
46485+ scope.selectActive = function(matchIdx) {
46486+ scope.active = matchIdx;
46487+ };
46488+
46489+ scope.selectMatch = function(activeIdx, evt) {
46490+ var debounce = scope.debounce();
46491+ if (angular.isNumber(debounce) || angular.isObject(debounce)) {
46492+ $$debounce(function() {
46493+ scope.select({activeIdx: activeIdx, evt: evt});
46494+ }, angular.isNumber(debounce) ? debounce : debounce['default']);
46495+ } else {
46496+ scope.select({activeIdx: activeIdx, evt: evt});
46497+ }
46498+ };
46499+ }
46500+ };
46501+ }])
46502+
46503+ .directive('uibTypeaheadMatch', ['$templateRequest', '$compile', '$parse', function($templateRequest, $compile, $parse) {
46504+ return {
46505+ scope: {
46506+ index: '=',
46507+ match: '=',
46508+ query: '='
46509+ },
46510+ link: function(scope, element, attrs) {
46511+ var tplUrl = $parse(attrs.templateUrl)(scope.$parent) || 'uib/template/typeahead/typeahead-match.html';
46512+ $templateRequest(tplUrl).then(function(tplContent) {
46513+ var tplEl = angular.element(tplContent.trim());
46514+ element.replaceWith(tplEl);
46515+ $compile(tplEl)(scope);
46516+ });
46517+ }
46518+ };
46519+ }])
46520+
46521+ .filter('uibTypeaheadHighlight', ['$sce', '$injector', '$log', function($sce, $injector, $log) {
46522+ var isSanitizePresent;
46523+ isSanitizePresent = $injector.has('$sanitize');
46524+
46525+ function escapeRegexp(queryToEscape) {
46526+ // Regex: capture the whole query string and replace it with the string that will be used to match
46527+ // the results, for example if the capture is "a" the result will be \a
46528+ return queryToEscape.replace(/([.?*+^$[\]\\(){}|-])/g, '\\$1');
46529+ }
46530+
46531+ function containsHtml(matchItem) {
46532+ return /<.*>/g.test(matchItem);
46533+ }
46534+
46535+ return function(matchItem, query) {
46536+ if (!isSanitizePresent && containsHtml(matchItem)) {
46537+ $log.warn('Unsafe use of typeahead please use ngSanitize'); // Warn the user about the danger
46538+ }
46539+ matchItem = query ? ('' + matchItem).replace(new RegExp(escapeRegexp(query), 'gi'), '<strong>$&</strong>') : matchItem; // Replaces the capture string with a the same string inside of a "strong" tag
46540+ if (!isSanitizePresent) {
46541+ matchItem = $sce.trustAsHtml(matchItem); // If $sanitize is not present we pack the string in a $sce object for the ng-bind-html directive
46542+ }
46543+ return matchItem;
46544+ };
46545+ }]);
46546+
46547+ angular.module("uib/template/accordion/accordion-group.html", []).run(["$templateCache", function($templateCache) {
46548+ $templateCache.put("uib/template/accordion/accordion-group.html",
46549+ "<div class=\"panel\" ng-class=\"panelClass || 'panel-default'\">\n" +
46550+ " <div class=\"panel-heading\" ng-keypress=\"toggleOpen($event)\">\n" +
46551+ " <h4 class=\"panel-title\">\n" +
46552+ " <div tabindex=\"0\" class=\"accordion-toggle\" ng-click=\"toggleOpen()\" uib-accordion-transclude=\"heading\"><span ng-class=\"{'text-muted': isDisabled}\">{{heading}}</span></div>\n" +
46553+ " </h4>\n" +
46554+ " </div>\n" +
46555+ " <div class=\"panel-collapse collapse\" uib-collapse=\"!isOpen\">\n" +
46556+ " <div class=\"panel-body\" ng-transclude></div>\n" +
46557+ " </div>\n" +
46558+ "</div>\n" +
46559+ "");
46560+ }]);
46561+
46562+ angular.module("uib/template/accordion/accordion.html", []).run(["$templateCache", function($templateCache) {
46563+ $templateCache.put("uib/template/accordion/accordion.html",
46564+ "<div class=\"panel-group\" ng-transclude></div>");
46565+ }]);
46566+
46567+ angular.module("uib/template/alert/alert.html", []).run(["$templateCache", function($templateCache) {
46568+ $templateCache.put("uib/template/alert/alert.html",
46569+ "<div class=\"alert\" ng-class=\"['alert-' + (type || 'warning'), closeable ? 'alert-dismissible' : null]\" role=\"alert\">\n" +
46570+ " <button ng-show=\"closeable\" type=\"button\" class=\"close\" ng-click=\"close({$event: $event})\">\n" +
46571+ " <span aria-hidden=\"true\">&times;</span>\n" +
46572+ " <span class=\"sr-only\">Close</span>\n" +
46573+ " </button>\n" +
46574+ " <div ng-transclude></div>\n" +
46575+ "</div>\n" +
46576+ "");
46577+ }]);
46578+
46579+ angular.module("uib/template/carousel/carousel.html", []).run(["$templateCache", function($templateCache) {
46580+ $templateCache.put("uib/template/carousel/carousel.html",
46581+ "<div ng-mouseenter=\"pause()\" ng-mouseleave=\"play()\" class=\"carousel\" ng-swipe-right=\"prev()\" ng-swipe-left=\"next()\">\n" +
46582+ " <div class=\"carousel-inner\" ng-transclude></div>\n" +
46583+ " <a role=\"button\" href class=\"left carousel-control\" ng-click=\"prev()\" ng-show=\"slides.length > 1\">\n" +
46584+ " <span aria-hidden=\"true\" class=\"glyphicon glyphicon-chevron-left\"></span>\n" +
46585+ " <span class=\"sr-only\">previous</span>\n" +
46586+ " </a>\n" +
46587+ " <a role=\"button\" href class=\"right carousel-control\" ng-click=\"next()\" ng-show=\"slides.length > 1\">\n" +
46588+ " <span aria-hidden=\"true\" class=\"glyphicon glyphicon-chevron-right\"></span>\n" +
46589+ " <span class=\"sr-only\">next</span>\n" +
46590+ " </a>\n" +
46591+ " <ol class=\"carousel-indicators\" ng-show=\"slides.length > 1\">\n" +
46592+ " <li ng-repeat=\"slide in slides | orderBy:indexOfSlide track by $index\" ng-class=\"{ active: isActive(slide) }\" ng-click=\"select(slide)\">\n" +
46593+ " <span class=\"sr-only\">slide {{ $index + 1 }} of {{ slides.length }}<span ng-if=\"isActive(slide)\">, currently active</span></span>\n" +
46594+ " </li>\n" +
46595+ " </ol>\n" +
46596+ "</div>");
46597+ }]);
46598+
46599+ angular.module("uib/template/carousel/slide.html", []).run(["$templateCache", function($templateCache) {
46600+ $templateCache.put("uib/template/carousel/slide.html",
46601+ "<div ng-class=\"{\n" +
46602+ " 'active': active\n" +
46603+ " }\" class=\"item text-center\" ng-transclude></div>\n" +
46604+ "");
46605+ }]);
46606+
46607+ angular.module("uib/template/datepicker/datepicker.html", []).run(["$templateCache", function($templateCache) {
46608+ $templateCache.put("uib/template/datepicker/datepicker.html",
46609+ "<div class=\"uib-datepicker\" ng-switch=\"datepickerMode\" role=\"application\" ng-keydown=\"keydown($event)\">\n" +
46610+ " <uib-daypicker ng-switch-when=\"day\" tabindex=\"0\"></uib-daypicker>\n" +
46611+ " <uib-monthpicker ng-switch-when=\"month\" tabindex=\"0\"></uib-monthpicker>\n" +
46612+ " <uib-yearpicker ng-switch-when=\"year\" tabindex=\"0\"></uib-yearpicker>\n" +
46613+ "</div>");
46614+ }]);
46615+
46616+ angular.module("uib/template/datepicker/day.html", []).run(["$templateCache", function($templateCache) {
46617+ $templateCache.put("uib/template/datepicker/day.html",
46618+ "<table class=\"uib-daypicker\" role=\"grid\" aria-labelledby=\"{{::uniqueId}}-title\" aria-activedescendant=\"{{activeDateId}}\">\n" +
46619+ " <thead>\n" +
46620+ " <tr>\n" +
46621+ " <th><button type=\"button\" class=\"btn btn-default btn-sm pull-left uib-left\" ng-click=\"move(-1)\" tabindex=\"-1\"><i class=\"glyphicon glyphicon-chevron-left\"></i></button></th>\n" +
46622+ " <th colspan=\"{{::5 + showWeeks}}\"><button id=\"{{::uniqueId}}-title\" role=\"heading\" aria-live=\"assertive\" aria-atomic=\"true\" type=\"button\" class=\"btn btn-default btn-sm uib-title\" ng-click=\"toggleMode()\" ng-disabled=\"datepickerMode === maxMode\" tabindex=\"-1\" style=\"width:100%;\"><strong>{{title}}</strong></button></th>\n" +
46623+ " <th><button type=\"button\" class=\"btn btn-default btn-sm pull-right uib-right\" ng-click=\"move(1)\" tabindex=\"-1\"><i class=\"glyphicon glyphicon-chevron-right\"></i></button></th>\n" +
46624+ " </tr>\n" +
46625+ " <tr>\n" +
46626+ " <th ng-if=\"showWeeks\" class=\"text-center\"></th>\n" +
46627+ " <th ng-repeat=\"label in ::labels track by $index\" class=\"text-center\"><small aria-label=\"{{::label.full}}\">{{::label.abbr}}</small></th>\n" +
46628+ " </tr>\n" +
46629+ " </thead>\n" +
46630+ " <tbody>\n" +
46631+ " <tr class=\"uib-weeks\" ng-repeat=\"row in rows track by $index\">\n" +
46632+ " <td ng-if=\"showWeeks\" class=\"text-center h6\"><em>{{ weekNumbers[$index] }}</em></td>\n" +
46633+ " <td ng-repeat=\"dt in row\" class=\"uib-day text-center\" role=\"gridcell\"\n" +
46634+ " id=\"{{::dt.uid}}\"\n" +
46635+ " ng-class=\"::dt.customClass\">\n" +
46636+ " <button type=\"button\" style=\"min-width:100%;\" class=\"btn btn-default btn-sm\"\n" +
46637+ " uib-is-class=\"\n" +
46638+ " 'btn-info' for selectedDt,\n" +
46639+ " 'active' for activeDt\n" +
46640+ " on dt\"\n" +
46641+ " ng-click=\"select(dt.date)\"\n" +
46642+ " ng-disabled=\"::dt.disabled\"\n" +
46643+ " tabindex=\"-1\"><span ng-class=\"::{'text-muted': dt.secondary, 'text-info': dt.current}\">{{::dt.label}}</span></button>\n" +
46644+ " </td>\n" +
46645+ " </tr>\n" +
46646+ " </tbody>\n" +
46647+ "</table>\n" +
46648+ "");
46649+ }]);
46650+
46651+ angular.module("uib/template/datepicker/month.html", []).run(["$templateCache", function($templateCache) {
46652+ $templateCache.put("uib/template/datepicker/month.html",
46653+ "<table class=\"uib-monthpicker\" role=\"grid\" aria-labelledby=\"{{::uniqueId}}-title\" aria-activedescendant=\"{{activeDateId}}\">\n" +
46654+ " <thead>\n" +
46655+ " <tr>\n" +
46656+ " <th><button type=\"button\" class=\"btn btn-default btn-sm pull-left uib-left\" ng-click=\"move(-1)\" tabindex=\"-1\"><i class=\"glyphicon glyphicon-chevron-left\"></i></button></th>\n" +
46657+ " <th><button id=\"{{::uniqueId}}-title\" role=\"heading\" aria-live=\"assertive\" aria-atomic=\"true\" type=\"button\" class=\"btn btn-default btn-sm uib-title\" ng-click=\"toggleMode()\" ng-disabled=\"datepickerMode === maxMode\" tabindex=\"-1\" style=\"width:100%;\"><strong>{{title}}</strong></button></th>\n" +
46658+ " <th><button type=\"button\" class=\"btn btn-default btn-sm pull-right uib-right\" ng-click=\"move(1)\" tabindex=\"-1\"><i class=\"glyphicon glyphicon-chevron-right\"></i></button></th>\n" +
46659+ " </tr>\n" +
46660+ " </thead>\n" +
46661+ " <tbody>\n" +
46662+ " <tr class=\"uib-months\" ng-repeat=\"row in rows track by $index\">\n" +
46663+ " <td ng-repeat=\"dt in row\" class=\"uib-month text-center\" role=\"gridcell\"\n" +
46664+ " id=\"{{::dt.uid}}\"\n" +
46665+ " ng-class=\"::dt.customClass\">\n" +
46666+ " <button type=\"button\" style=\"min-width:100%;\" class=\"btn btn-default\"\n" +
46667+ " uib-is-class=\"\n" +
46668+ " 'btn-info' for selectedDt,\n" +
46669+ " 'active' for activeDt\n" +
46670+ " on dt\"\n" +
46671+ " ng-click=\"select(dt.date)\"\n" +
46672+ " ng-disabled=\"::dt.disabled\"\n" +
46673+ " tabindex=\"-1\"><span ng-class=\"::{'text-info': dt.current}\">{{::dt.label}}</span></button>\n" +
46674+ " </td>\n" +
46675+ " </tr>\n" +
46676+ " </tbody>\n" +
46677+ "</table>\n" +
46678+ "");
46679+ }]);
46680+
46681+ angular.module("uib/template/datepicker/popup.html", []).run(["$templateCache", function($templateCache) {
46682+ $templateCache.put("uib/template/datepicker/popup.html",
46683+ "<ul class=\"uib-datepicker-popup dropdown-menu\" dropdown-nested ng-if=\"isOpen\" style=\"display: block\" ng-style=\"{top: position.top+'px', left: position.left+'px'}\" ng-keydown=\"keydown($event)\" ng-click=\"$event.stopPropagation()\">\n" +
46684+ " <li ng-transclude></li>\n" +
46685+ " <li ng-if=\"showButtonBar\" style=\"padding:10px 9px 2px\" class=\"uib-button-bar\">\n" +
46686+ " <span class=\"btn-group pull-left\">\n" +
46687+ " <button type=\"button\" class=\"btn btn-sm btn-info uib-datepicker-current\" ng-click=\"select('today')\" ng-disabled=\"isDisabled('today')\">{{ getText('current') }}</button>\n" +
46688+ " <button type=\"button\" class=\"btn btn-sm btn-danger uib-clear\" ng-click=\"select(null)\">{{ getText('clear') }}</button>\n" +
46689+ " </span>\n" +
46690+ " <button type=\"button\" class=\"btn btn-sm btn-success pull-right uib-close\" ng-click=\"close()\">{{ getText('close') }}</button>\n" +
46691+ " </li>\n" +
46692+ "</ul>\n" +
46693+ "");
46694+ }]);
46695+
46696+ angular.module("uib/template/datepicker/year.html", []).run(["$templateCache", function($templateCache) {
46697+ $templateCache.put("uib/template/datepicker/year.html",
46698+ "<table class=\"uib-yearpicker\" role=\"grid\" aria-labelledby=\"{{::uniqueId}}-title\" aria-activedescendant=\"{{activeDateId}}\">\n" +
46699+ " <thead>\n" +
46700+ " <tr>\n" +
46701+ " <th><button type=\"button\" class=\"btn btn-default btn-sm pull-left uib-left\" ng-click=\"move(-1)\" tabindex=\"-1\"><i class=\"glyphicon glyphicon-chevron-left\"></i></button></th>\n" +
46702+ " <th colspan=\"{{::columns - 2}}\"><button id=\"{{::uniqueId}}-title\" role=\"heading\" aria-live=\"assertive\" aria-atomic=\"true\" type=\"button\" class=\"btn btn-default btn-sm uib-title\" ng-click=\"toggleMode()\" ng-disabled=\"datepickerMode === maxMode\" tabindex=\"-1\" style=\"width:100%;\"><strong>{{title}}</strong></button></th>\n" +
46703+ " <th><button type=\"button\" class=\"btn btn-default btn-sm pull-right uib-right\" ng-click=\"move(1)\" tabindex=\"-1\"><i class=\"glyphicon glyphicon-chevron-right\"></i></button></th>\n" +
46704+ " </tr>\n" +
46705+ " </thead>\n" +
46706+ " <tbody>\n" +
46707+ " <tr class=\"uib-years\" ng-repeat=\"row in rows track by $index\">\n" +
46708+ " <td ng-repeat=\"dt in row\" class=\"uib-year text-center\" role=\"gridcell\"\n" +
46709+ " id=\"{{::dt.uid}}\"\n" +
46710+ " ng-class=\"::dt.customClass\">\n" +
46711+ " <button type=\"button\" style=\"min-width:100%;\" class=\"btn btn-default\"\n" +
46712+ " uib-is-class=\"\n" +
46713+ " 'btn-info' for selectedDt,\n" +
46714+ " 'active' for activeDt\n" +
46715+ " on dt\"\n" +
46716+ " ng-click=\"select(dt.date)\"\n" +
46717+ " ng-disabled=\"::dt.disabled\"\n" +
46718+ " tabindex=\"-1\"><span ng-class=\"::{'text-info': dt.current}\">{{::dt.label}}</span></button>\n" +
46719+ " </td>\n" +
46720+ " </tr>\n" +
46721+ " </tbody>\n" +
46722+ "</table>\n" +
46723+ "");
46724+ }]);
46725+
46726+ angular.module("uib/template/modal/backdrop.html", []).run(["$templateCache", function($templateCache) {
46727+ $templateCache.put("uib/template/modal/backdrop.html",
46728+ "<div class=\"modal-backdrop\"\n" +
46729+ " uib-modal-animation-class=\"fade\"\n" +
46730+ " modal-in-class=\"in\"\n" +
46731+ " ng-style=\"{'z-index': 1040 + (index && 1 || 0) + index*10}\"\n" +
46732+ "></div>\n" +
46733+ "");
46734+ }]);
46735+
46736+ angular.module("uib/template/modal/window.html", []).run(["$templateCache", function($templateCache) {
46737+ $templateCache.put("uib/template/modal/window.html",
46738+ "<div modal-render=\"{{$isRendered}}\" tabindex=\"-1\" role=\"dialog\" class=\"modal\"\n" +
46739+ " uib-modal-animation-class=\"fade\"\n" +
46740+ " modal-in-class=\"in\"\n" +
46741+ " ng-style=\"{'z-index': 1050 + index*10, display: 'block'}\">\n" +
46742+ " <div class=\"modal-dialog\" ng-class=\"size ? 'modal-' + size : ''\"><div class=\"modal-content\" uib-modal-transclude></div></div>\n" +
46743+ "</div>\n" +
46744+ "");
46745+ }]);
46746+
46747+ angular.module("uib/template/pager/pager.html", []).run(["$templateCache", function($templateCache) {
46748+ $templateCache.put("uib/template/pager/pager.html",
46749+ "<ul class=\"pager\">\n" +
46750+ " <li ng-class=\"{disabled: noPrevious()||ngDisabled, previous: align}\"><a href ng-click=\"selectPage(page - 1, $event)\">{{::getText('previous')}}</a></li>\n" +
46751+ " <li ng-class=\"{disabled: noNext()||ngDisabled, next: align}\"><a href ng-click=\"selectPage(page + 1, $event)\">{{::getText('next')}}</a></li>\n" +
46752+ "</ul>\n" +
46753+ "");
46754+ }]);
46755+
46756+ angular.module("uib/template/pagination/pager.html", []).run(["$templateCache", function($templateCache) {
46757+ $templateCache.put("uib/template/pagination/pager.html",
46758+ "<ul class=\"pager\">\n" +
46759+ " <li ng-class=\"{disabled: noPrevious()||ngDisabled, previous: align}\"><a href ng-click=\"selectPage(page - 1, $event)\">{{::getText('previous')}}</a></li>\n" +
46760+ " <li ng-class=\"{disabled: noNext()||ngDisabled, next: align}\"><a href ng-click=\"selectPage(page + 1, $event)\">{{::getText('next')}}</a></li>\n" +
46761+ "</ul>\n" +
46762+ "");
46763+ }]);
46764+
46765+ angular.module("uib/template/pagination/pagination.html", []).run(["$templateCache", function($templateCache) {
46766+ $templateCache.put("uib/template/pagination/pagination.html",
46767+ "<ul class=\"pagination\">\n" +
46768+ " <li ng-if=\"::boundaryLinks\" ng-class=\"{disabled: noPrevious()||ngDisabled}\" class=\"pagination-first\"><a href ng-click=\"selectPage(1, $event)\">{{::getText('first')}}</a></li>\n" +
46769+ " <li ng-if=\"::directionLinks\" ng-class=\"{disabled: noPrevious()||ngDisabled}\" class=\"pagination-prev\"><a href ng-click=\"selectPage(page - 1, $event)\">{{::getText('previous')}}</a></li>\n" +
46770+ " <li ng-repeat=\"page in pages track by $index\" ng-class=\"{active: page.active,disabled: ngDisabled&&!page.active}\" class=\"pagination-page\"><a href ng-click=\"selectPage(page.number, $event)\">{{page.text}}</a></li>\n" +
46771+ " <li ng-if=\"::directionLinks\" ng-class=\"{disabled: noNext()||ngDisabled}\" class=\"pagination-next\"><a href ng-click=\"selectPage(page + 1, $event)\">{{::getText('next')}}</a></li>\n" +
46772+ " <li ng-if=\"::boundaryLinks\" ng-class=\"{disabled: noNext()||ngDisabled}\" class=\"pagination-last\"><a href ng-click=\"selectPage(totalPages, $event)\">{{::getText('last')}}</a></li>\n" +
46773+ "</ul>\n" +
46774+ "");
46775+ }]);
46776+
46777+ angular.module("uib/template/tooltip/tooltip-html-popup.html", []).run(["$templateCache", function($templateCache) {
46778+ $templateCache.put("uib/template/tooltip/tooltip-html-popup.html",
46779+ "<div class=\"tooltip\"\n" +
46780+ " tooltip-animation-class=\"fade\"\n" +
46781+ " uib-tooltip-classes\n" +
46782+ " ng-class=\"{ in: isOpen() }\">\n" +
46783+ " <div class=\"tooltip-arrow\"></div>\n" +
46784+ " <div class=\"tooltip-inner\" ng-bind-html=\"contentExp()\"></div>\n" +
46785+ "</div>\n" +
46786+ "");
46787+ }]);
46788+
46789+ angular.module("uib/template/tooltip/tooltip-popup.html", []).run(["$templateCache", function($templateCache) {
46790+ $templateCache.put("uib/template/tooltip/tooltip-popup.html",
46791+ "<div class=\"tooltip\"\n" +
46792+ " tooltip-animation-class=\"fade\"\n" +
46793+ " uib-tooltip-classes\n" +
46794+ " ng-class=\"{ in: isOpen() }\">\n" +
46795+ " <div class=\"tooltip-arrow\"></div>\n" +
46796+ " <div class=\"tooltip-inner\" ng-bind=\"content\"></div>\n" +
46797+ "</div>\n" +
46798+ "");
46799+ }]);
46800+
46801+ angular.module("uib/template/tooltip/tooltip-template-popup.html", []).run(["$templateCache", function($templateCache) {
46802+ $templateCache.put("uib/template/tooltip/tooltip-template-popup.html",
46803+ "<div class=\"tooltip\"\n" +
46804+ " tooltip-animation-class=\"fade\"\n" +
46805+ " uib-tooltip-classes\n" +
46806+ " ng-class=\"{ in: isOpen() }\">\n" +
46807+ " <div class=\"tooltip-arrow\"></div>\n" +
46808+ " <div class=\"tooltip-inner\"\n" +
46809+ " uib-tooltip-template-transclude=\"contentExp()\"\n" +
46810+ " tooltip-template-transclude-scope=\"originScope()\"></div>\n" +
46811+ "</div>\n" +
46812+ "");
46813+ }]);
46814+
46815+ angular.module("uib/template/popover/popover-html.html", []).run(["$templateCache", function($templateCache) {
46816+ $templateCache.put("uib/template/popover/popover-html.html",
46817+ "<div class=\"popover\"\n" +
46818+ " tooltip-animation-class=\"fade\"\n" +
46819+ " uib-tooltip-classes\n" +
46820+ " ng-class=\"{ in: isOpen() }\">\n" +
46821+ " <div class=\"arrow\"></div>\n" +
46822+ "\n" +
46823+ " <div class=\"popover-inner\">\n" +
46824+ " <h3 class=\"popover-title\" ng-bind=\"title\" ng-if=\"title\"></h3>\n" +
46825+ " <div class=\"popover-content\" ng-bind-html=\"contentExp()\"></div>\n" +
46826+ " </div>\n" +
46827+ "</div>\n" +
46828+ "");
46829+ }]);
46830+
46831+ angular.module("uib/template/popover/popover-template.html", []).run(["$templateCache", function($templateCache) {
46832+ $templateCache.put("uib/template/popover/popover-template.html",
46833+ "<div class=\"popover\"\n" +
46834+ " tooltip-animation-class=\"fade\"\n" +
46835+ " uib-tooltip-classes\n" +
46836+ " ng-class=\"{ in: isOpen() }\">\n" +
46837+ " <div class=\"arrow\"></div>\n" +
46838+ "\n" +
46839+ " <div class=\"popover-inner\">\n" +
46840+ " <h3 class=\"popover-title\" ng-bind=\"title\" ng-if=\"title\"></h3>\n" +
46841+ " <div class=\"popover-content\"\n" +
46842+ " uib-tooltip-template-transclude=\"contentExp()\"\n" +
46843+ " tooltip-template-transclude-scope=\"originScope()\"></div>\n" +
46844+ " </div>\n" +
46845+ "</div>\n" +
46846+ "");
46847+ }]);
46848+
46849+ angular.module("uib/template/popover/popover.html", []).run(["$templateCache", function($templateCache) {
46850+ $templateCache.put("uib/template/popover/popover.html",
46851+ "<div class=\"popover\"\n" +
46852+ " tooltip-animation-class=\"fade\"\n" +
46853+ " uib-tooltip-classes\n" +
46854+ " ng-class=\"{ in: isOpen() }\">\n" +
46855+ " <div class=\"arrow\"></div>\n" +
46856+ "\n" +
46857+ " <div class=\"popover-inner\">\n" +
46858+ " <h3 class=\"popover-title\" ng-bind=\"title\" ng-if=\"title\"></h3>\n" +
46859+ " <div class=\"popover-content\" ng-bind=\"content\"></div>\n" +
46860+ " </div>\n" +
46861+ "</div>\n" +
46862+ "");
46863+ }]);
46864+
46865+ angular.module("uib/template/progressbar/bar.html", []).run(["$templateCache", function($templateCache) {
46866+ $templateCache.put("uib/template/progressbar/bar.html",
46867+ "<div class=\"progress-bar\" ng-class=\"type && 'progress-bar-' + type\" role=\"progressbar\" aria-valuenow=\"{{value}}\" aria-valuemin=\"0\" aria-valuemax=\"{{max}}\" ng-style=\"{width: (percent < 100 ? percent : 100) + '%'}\" aria-valuetext=\"{{percent | number:0}}%\" aria-labelledby=\"{{::title}}\" ng-transclude></div>\n" +
46868+ "");
46869+ }]);
46870+
46871+ angular.module("uib/template/progressbar/progress.html", []).run(["$templateCache", function($templateCache) {
46872+ $templateCache.put("uib/template/progressbar/progress.html",
46873+ "<div class=\"progress\" ng-transclude aria-labelledby=\"{{::title}}\"></div>");
46874+ }]);
46875+
46876+ angular.module("uib/template/progressbar/progressbar.html", []).run(["$templateCache", function($templateCache) {
46877+ $templateCache.put("uib/template/progressbar/progressbar.html",
46878+ "<div class=\"progress\">\n" +
46879+ " <div class=\"progress-bar\" ng-class=\"type && 'progress-bar-' + type\" role=\"progressbar\" aria-valuenow=\"{{value}}\" aria-valuemin=\"0\" aria-valuemax=\"{{max}}\" ng-style=\"{width: (percent < 100 ? percent : 100) + '%'}\" aria-valuetext=\"{{percent | number:0}}%\" aria-labelledby=\"{{::title}}\" ng-transclude></div>\n" +
46880+ "</div>\n" +
46881+ "");
46882+ }]);
46883+
46884+ angular.module("uib/template/rating/rating.html", []).run(["$templateCache", function($templateCache) {
46885+ $templateCache.put("uib/template/rating/rating.html",
46886+ "<span ng-mouseleave=\"reset()\" ng-keydown=\"onKeydown($event)\" tabindex=\"0\" role=\"slider\" aria-valuemin=\"0\" aria-valuemax=\"{{range.length}}\" aria-valuenow=\"{{value}}\">\n" +
46887+ " <span ng-repeat-start=\"r in range track by $index\" class=\"sr-only\">({{ $index < value ? '*' : ' ' }})</span>\n" +
46888+ " <i ng-repeat-end ng-mouseenter=\"enter($index + 1)\" ng-click=\"rate($index + 1)\" class=\"glyphicon\" ng-class=\"$index < value && (r.stateOn || 'glyphicon-star') || (r.stateOff || 'glyphicon-star-empty')\" ng-attr-title=\"{{r.title}}\" aria-valuetext=\"{{r.title}}\"></i>\n" +
46889+ "</span>\n" +
46890+ "");
46891+ }]);
46892+
46893+ angular.module("uib/template/tabs/tab.html", []).run(["$templateCache", function($templateCache) {
46894+ $templateCache.put("uib/template/tabs/tab.html",
46895+ "<li ng-class=\"{active: active, disabled: disabled}\" class=\"uib-tab\">\n" +
46896+ " <div ng-click=\"select()\" uib-tab-heading-transclude>{{heading}}</div>\n" +
46897+ "</li>\n" +
46898+ "");
46899+ }]);
46900+
46901+ angular.module("uib/template/tabs/tabset.html", []).run(["$templateCache", function($templateCache) {
46902+ $templateCache.put("uib/template/tabs/tabset.html",
46903+ "<div>\n" +
46904+ " <ul class=\"nav nav-{{type || 'tabs'}}\" ng-class=\"{'nav-stacked': vertical, 'nav-justified': justified}\" ng-transclude></ul>\n" +
46905+ " <div class=\"tab-content\">\n" +
46906+ " <div class=\"tab-pane\" \n" +
46907+ " ng-repeat=\"tab in tabs\" \n" +
46908+ " ng-class=\"{active: tab.active}\"\n" +
46909+ " uib-tab-content-transclude=\"tab\">\n" +
46910+ " </div>\n" +
46911+ " </div>\n" +
46912+ "</div>\n" +
46913+ "");
46914+ }]);
46915+
46916+ angular.module("uib/template/timepicker/timepicker.html", []).run(["$templateCache", function($templateCache) {
46917+ $templateCache.put("uib/template/timepicker/timepicker.html",
46918+ "<table class=\"uib-timepicker\">\n" +
46919+ " <tbody>\n" +
46920+ " <tr class=\"text-center\" ng-show=\"::showSpinners\">\n" +
46921+ " <td class=\"uib-increment hours\"><a ng-click=\"incrementHours()\" ng-class=\"{disabled: noIncrementHours()}\" class=\"btn btn-link\" ng-disabled=\"noIncrementHours()\" tabindex=\"{{::tabindex}}\"><span class=\"glyphicon glyphicon-chevron-up\"></span></a></td>\n" +
46922+ " <td>&nbsp;</td>\n" +
46923+ " <td class=\"uib-increment minutes\"><a ng-click=\"incrementMinutes()\" ng-class=\"{disabled: noIncrementMinutes()}\" class=\"btn btn-link\" ng-disabled=\"noIncrementMinutes()\" tabindex=\"{{::tabindex}}\"><span class=\"glyphicon glyphicon-chevron-up\"></span></a></td>\n" +
46924+ " <td ng-show=\"showSeconds\">&nbsp;</td>\n" +
46925+ " <td ng-show=\"showSeconds\" class=\"uib-increment seconds\"><a ng-click=\"incrementSeconds()\" ng-class=\"{disabled: noIncrementSeconds()}\" class=\"btn btn-link\" ng-disabled=\"noIncrementSeconds()\" tabindex=\"{{::tabindex}}\"><span class=\"glyphicon glyphicon-chevron-up\"></span></a></td>\n" +
46926+ " <td ng-show=\"showMeridian\"></td>\n" +
46927+ " </tr>\n" +
46928+ " <tr>\n" +
46929+ " <td class=\"form-group uib-time hours\" ng-class=\"{'has-error': invalidHours}\">\n" +
46930+ " <input style=\"width:50px;\" type=\"text\" placeholder=\"HH\" ng-model=\"hours\" ng-change=\"updateHours()\" class=\"form-control text-center\" ng-readonly=\"::readonlyInput\" maxlength=\"2\" tabindex=\"{{::tabindex}}\" ng-disabled=\"disabled\" ng-blur=\"blur()\">\n" +
46931+ " </td>\n" +
46932+ " <td class=\"uib-separator\">:</td>\n" +
46933+ " <td class=\"form-group uib-time minutes\" ng-class=\"{'has-error': invalidMinutes}\">\n" +
46934+ " <input style=\"width:50px;\" type=\"text\" placeholder=\"MM\" ng-model=\"minutes\" ng-change=\"updateMinutes()\" class=\"form-control text-center\" ng-readonly=\"::readonlyInput\" maxlength=\"2\" tabindex=\"{{::tabindex}}\" ng-disabled=\"disabled\" ng-blur=\"blur()\">\n" +
46935+ " </td>\n" +
46936+ " <td ng-show=\"showSeconds\" class=\"uib-separator\">:</td>\n" +
46937+ " <td class=\"form-group uib-time seconds\" ng-class=\"{'has-error': invalidSeconds}\" ng-show=\"showSeconds\">\n" +
46938+ " <input style=\"width:50px;\" type=\"text\" ng-model=\"seconds\" ng-change=\"updateSeconds()\" class=\"form-control text-center\" ng-readonly=\"readonlyInput\" maxlength=\"2\" tabindex=\"{{::tabindex}}\" ng-disabled=\"disabled\" ng-blur=\"blur()\">\n" +
46939+ " </td>\n" +
46940+ " <td ng-show=\"showMeridian\" class=\"uib-time am-pm\"><button type=\"button\" ng-class=\"{disabled: noToggleMeridian()}\" class=\"btn btn-default text-center\" ng-click=\"toggleMeridian()\" ng-disabled=\"noToggleMeridian()\" tabindex=\"{{::tabindex}}\">{{meridian}}</button></td>\n" +
46941+ " </tr>\n" +
46942+ " <tr class=\"text-center\" ng-show=\"::showSpinners\">\n" +
46943+ " <td class=\"uib-decrement hours\"><a ng-click=\"decrementHours()\" ng-class=\"{disabled: noDecrementHours()}\" class=\"btn btn-link\" ng-disabled=\"noDecrementHours()\" tabindex=\"{{::tabindex}}\"><span class=\"glyphicon glyphicon-chevron-down\"></span></a></td>\n" +
46944+ " <td>&nbsp;</td>\n" +
46945+ " <td class=\"uib-decrement minutes\"><a ng-click=\"decrementMinutes()\" ng-class=\"{disabled: noDecrementMinutes()}\" class=\"btn btn-link\" ng-disabled=\"noDecrementMinutes()\" tabindex=\"{{::tabindex}}\"><span class=\"glyphicon glyphicon-chevron-down\"></span></a></td>\n" +
46946+ " <td ng-show=\"showSeconds\">&nbsp;</td>\n" +
46947+ " <td ng-show=\"showSeconds\" class=\"uib-decrement seconds\"><a ng-click=\"decrementSeconds()\" ng-class=\"{disabled: noDecrementSeconds()}\" class=\"btn btn-link\" ng-disabled=\"noDecrementSeconds()\" tabindex=\"{{::tabindex}}\"><span class=\"glyphicon glyphicon-chevron-down\"></span></a></td>\n" +
46948+ " <td ng-show=\"showMeridian\"></td>\n" +
46949+ " </tr>\n" +
46950+ " </tbody>\n" +
46951+ "</table>\n" +
46952+ "");
46953+ }]);
46954+
46955+ angular.module("uib/template/typeahead/typeahead-match.html", []).run(["$templateCache", function($templateCache) {
46956+ $templateCache.put("uib/template/typeahead/typeahead-match.html",
46957+ "<a href tabindex=\"-1\" ng-bind-html=\"match.label | uibTypeaheadHighlight:query\"></a>\n" +
46958+ "");
46959+ }]);
46960+
46961+ angular.module("uib/template/typeahead/typeahead-popup.html", []).run(["$templateCache", function($templateCache) {
46962+ $templateCache.put("uib/template/typeahead/typeahead-popup.html",
46963+ "<ul class=\"dropdown-menu\" ng-show=\"isOpen() && !moveInProgress\" ng-style=\"{top: position().top+'px', left: position().left+'px'}\" style=\"display: block;\" role=\"listbox\" aria-hidden=\"{{!isOpen()}}\">\n" +
46964+ " <li ng-repeat=\"match in matches track by $index\" ng-class=\"{active: isActive($index) }\" ng-mouseenter=\"selectActive($index)\" ng-click=\"selectMatch($index, $event)\" role=\"option\" id=\"{{::match.id}}\">\n" +
46965+ " <div uib-typeahead-match index=\"$index\" match=\"match\" query=\"query\" template-url=\"templateUrl\"></div>\n" +
46966+ " </li>\n" +
46967+ "</ul>\n" +
46968+ "");
46969+ }]);
46970+ angular.module('ui.bootstrap.carousel').run(function() {!angular.$$csp() && angular.element(document).find('head').prepend('<style type="text/css">.ng-animate.item:not(.left):not(.right){-webkit-transition:0s ease-in-out left;transition:0s ease-in-out left}</style>'); })
46971+
46972+/***/ },
46973+/* 8 */
46974+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4344346975 /***/ function(module, exports) {
4344446976
4344546977 var app;
@@ -43511,10 +47043,13 @@
4351147043 var endPoint = '/api/v1/debug';
4351247044 return this.$http.get(endPoint);
4351347045 };
47046+<<<<<<< HEAD
4351447047 APIEndPoint.prototype.upload = function () {
4351547048 var endPoint = '/api/v1/upload';
4351647049 return this.$http.get(endPoint);
4351747050 };
47051+=======
47052+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4351847053 APIEndPoint.prototype.help = function (command) {
4351947054 var endPoint = '/api/v1/help/' + command;
4352047055 return this.$http.get(endPoint);
@@ -43559,6 +47094,7 @@
4355947094 this.modalOption.size = 'lg';
4356047095 return this.$uibModal.open(this.modalOption);
4356147096 };
47097+<<<<<<< HEAD
4356247098 MyModal.prototype.upload = function () {
4356347099 this.modalOption.templateUrl = 'templates/upload.html';
4356447100 this.modalOption.controller = 'uploadController';
@@ -43566,6 +47102,8 @@
4356647102 this.modalOption.size = 'lg';
4356747103 return this.$uibModal.open(this.modalOption);
4356847104 };
47105+=======
47106+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4356947107 MyModal.$inject = ['$uibModal'];
4357047108 return MyModal;
4357147109 })();
@@ -43946,6 +47484,7 @@
4394647484 })(app || (app = {}));
4394747485 var app;
4394847486 (function (app) {
47487+<<<<<<< HEAD
4394947488 var directives;
4395047489 (function (directives) {
4395147490 var Upload = (function () {
@@ -43997,6 +47536,8 @@
4399747536 })(app || (app = {}));
4399847537 var app;
4399947538 (function (app) {
47539+=======
47540+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4400047541 var controllers;
4400147542 (function (controllers) {
4400247543 var Execution = (function () {
@@ -44058,9 +47599,12 @@
4405847599 Workspace.prototype.addDirectory = function (info, directoryList) {
4405947600 directoryList.push(info);
4406047601 };
47602+<<<<<<< HEAD
4406147603 Workspace.prototype.upload = function () {
4406247604 this.MyModal.upload();
4406347605 };
47606+=======
47607+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4406447608 Workspace.prototype.debug = function () {
4406547609 this.MyModal.preview();
4406647610 };
@@ -44121,6 +47665,7 @@
4412147665 (function (app) {
4412247666 var controllers;
4412347667 (function (controllers) {
47668+<<<<<<< HEAD
4412447669 var Upload = (function () {
4412547670 function Upload($scope, APIEndPoint, $modalInstance) {
4412647671 this.APIEndPoint = APIEndPoint;
@@ -44138,6 +47683,8 @@
4413847683 (function (app) {
4413947684 var controllers;
4414047685 (function (controllers) {
47686+=======
47687+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4414147688 var Preview = (function () {
4414247689 function Preview($scope, APIEndPoint, $modalInstance) {
4414347690 this.APIEndPoint = APIEndPoint;
@@ -44208,7 +47755,10 @@
4420847755 app.zephyr.filter('Tag', filters.Tag);
4420947756 app.zephyr.controller('selectCommandController', app.controllers.SelectCommand);
4421047757 app.zephyr.controller('previewController', app.controllers.Preview);
47758+<<<<<<< HEAD
4421147759 app.zephyr.controller('uploadController', app.controllers.Upload);
47760+=======
47761+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4421247762 app.zephyr.controller('executionController', app.controllers.Execution);
4421347763 app.zephyr.controller('workspaceController', app.controllers.Workspace);
4421447764 app.zephyr.controller('historyController', app.controllers.History);
@@ -44216,7 +47766,10 @@
4421647766 app.zephyr.controller('optionController', app.directives.OptionController);
4421747767 app.zephyr.controller('directoryController', app.directives.DirectoryController);
4421847768 app.zephyr.controller('HeaderMenuController', app.directives.HeaderMenuController);
47769+<<<<<<< HEAD
4421947770 app.zephyr.controller('uploadController', app.directives.UploadController);
47771+=======
47772+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4422047773 app.zephyr.directive('headerMenu', app.directives.HeaderMenu.Factory());
4422147774 app.zephyr.directive('command', app.directives.Command.Factory());
4422247775 app.zephyr.directive('option', app.directives.Option.Factory());
@@ -44225,7 +47778,11 @@
4422547778
4422647779
4422747780 /***/ },
47781+<<<<<<< HEAD
4422847782 /* 11 */
47783+=======
47784+/* 9 */
47785+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4422947786 /***/ function(module, exports) {
4423047787
4423147788 var app;
@@ -44297,10 +47854,13 @@
4429747854 var endPoint = '/api/v1/debug';
4429847855 return this.$http.get(endPoint);
4429947856 };
47857+<<<<<<< HEAD
4430047858 APIEndPoint.prototype.upload = function () {
4430147859 var endPoint = '/api/v1/upload';
4430247860 return this.$http.get(endPoint);
4430347861 };
47862+=======
47863+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4430447864 APIEndPoint.prototype.help = function (command) {
4430547865 var endPoint = '/api/v1/help/' + command;
4430647866 return this.$http.get(endPoint);
@@ -44345,6 +47905,7 @@
4434547905 this.modalOption.size = 'lg';
4434647906 return this.$uibModal.open(this.modalOption);
4434747907 };
47908+<<<<<<< HEAD
4434847909 MyModal.prototype.upload = function () {
4434947910 this.modalOption.templateUrl = 'templates/upload.html';
4435047911 this.modalOption.controller = 'uploadController';
@@ -44352,6 +47913,8 @@
4435247913 this.modalOption.size = 'lg';
4435347914 return this.$uibModal.open(this.modalOption);
4435447915 };
47916+=======
47917+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4435547918 MyModal.$inject = ['$uibModal'];
4435647919 return MyModal;
4435747920 })();
@@ -44732,6 +48295,7 @@
4473248295 })(app || (app = {}));
4473348296 var app;
4473448297 (function (app) {
48298+<<<<<<< HEAD
4473548299 var directives;
4473648300 (function (directives) {
4473748301 var Upload = (function () {
@@ -44783,6 +48347,8 @@
4478348347 })(app || (app = {}));
4478448348 var app;
4478548349 (function (app) {
48350+=======
48351+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4478648352 var controllers;
4478748353 (function (controllers) {
4478848354 var Execution = (function () {
@@ -44844,9 +48410,12 @@
4484448410 Workspace.prototype.addDirectory = function (info, directoryList) {
4484548411 directoryList.push(info);
4484648412 };
48413+<<<<<<< HEAD
4484748414 Workspace.prototype.upload = function () {
4484848415 this.MyModal.upload();
4484948416 };
48417+=======
48418+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4485048419 Workspace.prototype.debug = function () {
4485148420 this.MyModal.preview();
4485248421 };
@@ -44907,6 +48476,7 @@
4490748476 (function (app) {
4490848477 var controllers;
4490948478 (function (controllers) {
48479+<<<<<<< HEAD
4491048480 var Upload = (function () {
4491148481 function Upload($scope, APIEndPoint, $modalInstance) {
4491248482 this.APIEndPoint = APIEndPoint;
@@ -44924,6 +48494,8 @@
4492448494 (function (app) {
4492548495 var controllers;
4492648496 (function (controllers) {
48497+=======
48498+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4492748499 var Preview = (function () {
4492848500 function Preview($scope, APIEndPoint, $modalInstance) {
4492948501 this.APIEndPoint = APIEndPoint;
@@ -44994,7 +48566,10 @@
4499448566 app.zephyr.filter('Tag', filters.Tag);
4499548567 app.zephyr.controller('selectCommandController', app.controllers.SelectCommand);
4499648568 app.zephyr.controller('previewController', app.controllers.Preview);
48569+<<<<<<< HEAD
4499748570 app.zephyr.controller('uploadController', app.controllers.Upload);
48571+=======
48572+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4499848573 app.zephyr.controller('executionController', app.controllers.Execution);
4499948574 app.zephyr.controller('workspaceController', app.controllers.Workspace);
4500048575 app.zephyr.controller('historyController', app.controllers.History);
@@ -45002,7 +48577,10 @@
4500248577 app.zephyr.controller('optionController', app.directives.OptionController);
4500348578 app.zephyr.controller('directoryController', app.directives.DirectoryController);
4500448579 app.zephyr.controller('HeaderMenuController', app.directives.HeaderMenuController);
48580+<<<<<<< HEAD
4500548581 app.zephyr.controller('uploadController', app.directives.UploadController);
48582+=======
48583+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
4500648584 app.zephyr.directive('headerMenu', app.directives.HeaderMenu.Factory());
4500748585 app.zephyr.directive('command', app.directives.Command.Factory());
4500848586 app.zephyr.directive