summaryrefslogtreecommitdiffstats
path: root/js/vendor/angular
diff options
context:
space:
mode:
Diffstat (limited to 'js/vendor/angular')
-rw-r--r--js/vendor/angular/.bower.json8
-rw-r--r--js/vendor/angular/angular.js221
-rw-r--r--js/vendor/angular/angular.min.js558
-rw-r--r--js/vendor/angular/angular.min.js.gzipbin50508 -> 50718 bytes
-rw-r--r--js/vendor/angular/angular.min.js.map6
-rw-r--r--js/vendor/angular/bower.json2
-rw-r--r--js/vendor/angular/package.json2
7 files changed, 451 insertions, 346 deletions
diff --git a/js/vendor/angular/.bower.json b/js/vendor/angular/.bower.json
index b087f458d..a65a63b4b 100644
--- a/js/vendor/angular/.bower.json
+++ b/js/vendor/angular/.bower.json
@@ -1,15 +1,15 @@
{
"name": "angular",
- "version": "1.4.0-build.3937+sha.171b9f7",
+ "version": "1.4.0-build.3954+sha.9dfa949",
"main": "./angular.js",
"ignore": [],
"dependencies": {},
"homepage": "https://github.com/angular/bower-angular",
- "_release": "1.4.0-build.3937+sha.171b9f7",
+ "_release": "1.4.0-build.3954+sha.9dfa949",
"_resolution": {
"type": "version",
- "tag": "v1.4.0-build.3937+sha.171b9f7",
- "commit": "9ec2dbe681053e819f02d1f61188f29c48118c12"
+ "tag": "v1.4.0-build.3954+sha.9dfa949",
+ "commit": "275af50ba8f1e04d00992e61d43f8a8947d3a00d"
},
"_source": "git://github.com/angular/bower-angular.git",
"_target": "~1.4.*",
diff --git a/js/vendor/angular/angular.js b/js/vendor/angular/angular.js
index 54600a256..3ba620e14 100644
--- a/js/vendor/angular/angular.js
+++ b/js/vendor/angular/angular.js
@@ -1,5 +1,5 @@
/**
- * @license AngularJS v1.4.0-build.3937+sha.171b9f7
+ * @license AngularJS v1.4.0-build.3954+sha.9dfa949
* (c) 2010-2015 Google, Inc. http://angularjs.org
* License: MIT
*/
@@ -57,7 +57,7 @@ function minErr(module, ErrorConstructor) {
return match;
});
- message += '\nhttp://errors.angularjs.org/1.4.0-build.3937+sha.171b9f7/' +
+ message += '\nhttp://errors.angularjs.org/1.4.0-build.3954+sha.9dfa949/' +
(module ? module + '/' : '') + code;
for (i = SKIP_INDEXES, paramPrefix = '?'; i < templateArgs.length; i++, paramPrefix = '&') {
@@ -1150,8 +1150,8 @@ function toJsonReplacer(key, value) {
* stripped since angular uses this notation internally.
*
* @param {Object|Array|Date|string|number} obj Input to be serialized into JSON.
- * @param {boolean|number=} pretty If set to true, the JSON output will contain newlines and whitespace.
- * If set to an integer, the JSON output will contain that many spaces per indentation (the default is 2).
+ * @param {boolean|number} [pretty=2] If set to true, the JSON output will contain newlines and whitespace.
+ * If set to an integer, the JSON output will contain that many spaces per indentation.
* @returns {string|undefined} JSON-ified string representing `obj`.
*/
function toJson(obj, pretty) {
@@ -2244,6 +2244,8 @@ function toDebugString(obj) {
$IntervalProvider,
$$HashMapProvider,
$HttpProvider,
+ $HttpParamSerializerProvider,
+ $HttpParamSerializerJQLikeProvider,
$HttpBackendProvider,
$LocationProvider,
$LogProvider,
@@ -2282,7 +2284,7 @@ function toDebugString(obj) {
* - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat".
*/
var version = {
- full: '1.4.0-build.3937+sha.171b9f7', // all of these placeholder strings will be replaced by grunt's
+ full: '1.4.0-build.3954+sha.9dfa949', // all of these placeholder strings will be replaced by grunt's
major: 1, // package task
minor: 4,
dot: 0,
@@ -2401,6 +2403,8 @@ function publishExternalAPI(angular) {
$interpolate: $InterpolateProvider,
$interval: $IntervalProvider,
$http: $HttpProvider,
+ $httpParamSerializer: $HttpParamSerializerProvider,
+ $httpParamSerializerJQLike: $HttpParamSerializerJQLikeProvider,
$httpBackend: $HttpBackendProvider,
$location: $LocationProvider,
$log: $LogProvider,
@@ -4433,9 +4437,10 @@ function $AnchorScrollProvider() {
* @requires $rootScope
*
* @description
- * When called, it checks the current value of {@link ng.$location#hash $location.hash()} and
- * scrolls to the related element, according to the rules specified in the
- * [Html5 spec](http://dev.w3.org/html5/spec/Overview.html#the-indicated-part-of-the-document).
+ * When called, it scrolls to the element related to the specified `hash` or (if omitted) to the
+ * current value of {@link ng.$location#hash $location.hash()}, according to the rules specified
+ * in the
+ * [HTML5 spec](http://dev.w3.org/html5/spec/Overview.html#the-indicated-part-of-the-document).
*
* It also watches the {@link ng.$location#hash $location.hash()} and automatically scrolls to
* match any anchor whenever it changes. This can be disabled by calling
@@ -4444,6 +4449,9 @@ function $AnchorScrollProvider() {
* Additionally, you can use its {@link ng.$anchorScroll#yOffset yOffset} property to specify a
* vertical scroll-offset (either fixed or dynamic).
*
+ * @param {string=} hash The hash specifying the element to scroll to. If omitted, the value of
+ * {@link ng.$location#hash $location.hash()} will be used.
+ *
* @property {(number|function|jqLite)} yOffset
* If set, specifies a vertical scroll-offset. This is often useful when there are fixed
* positioned elements at the top of the page, such as navbars, headers etc.
@@ -4627,8 +4635,9 @@ function $AnchorScrollProvider() {
}
}
- function scroll() {
- var hash = $location.hash(), elm;
+ function scroll(hash) {
+ hash = isString(hash) ? hash : $location.hash();
+ var elm;
// empty hash, scroll to the top of the page
if (!hash) scrollTo(null);
@@ -5308,6 +5317,16 @@ function Browser(window, document, $log, $sniffer) {
};
/**
+ * @private
+ * Remove popstate and hashchange handler from window.
+ *
+ * NOTE: this api is intended for use only by $rootScope.
+ */
+ self.$$applicationDestroyed = function() {
+ jqLite(window).off('hashchange popstate', cacheStateAndFireUrlChange);
+ };
+
+ /**
* Checks whether the url has changed outside of Angular.
* Needs to be exported to be able to check for changes that have been done in sync,
* as hashchange/popstate events fire in async.
@@ -8773,6 +8792,65 @@ var JSON_ENDS = {
};
var JSON_PROTECTION_PREFIX = /^\)\]\}',?\n/;
+function paramSerializerFactory(jQueryMode) {
+
+ function serializeValue(v) {
+ if (isObject(v)) {
+ return isDate(v) ? v.toISOString() : toJson(v);
+ }
+ return v;
+ }
+
+ return function paramSerializer(params) {
+ if (!params) return '';
+ var parts = [];
+ forEachSorted(params, function(value, key) {
+ if (value === null || isUndefined(value)) return;
+ if (isArray(value) || isObject(value) && jQueryMode) {
+ forEach(value, function(v, k) {
+ var keySuffix = jQueryMode ? '[' + (!isArray(value) ? k : '') + ']' : '';
+ parts.push(encodeUriQuery(key + keySuffix) + '=' + encodeUriQuery(serializeValue(v)));
+ });
+ } else {
+ parts.push(encodeUriQuery(key) + '=' + encodeUriQuery(serializeValue(value)));
+ }
+ });
+
+ return parts.length > 0 ? parts.join('&') : '';
+ };
+}
+
+function $HttpParamSerializerProvider() {
+ /**
+ * @ngdoc service
+ * @name $httpParamSerializer
+ * @description
+ *
+ * Default $http params serializer that converts objects to a part of a request URL
+ * according to the following rules:
+ * * `{'foo': 'bar'}` results in `foo=bar`
+ * * `{'foo': Date.now()}` results in `foo=2015-04-01T09%3A50%3A49.262Z` (`toISOString()` and encoded representation of a Date object)
+ * * `{'foo': ['bar', 'baz']}` results in `foo=bar&foo=baz` (repeated key for each array element)
+ * * `{'foo': {'bar':'baz'}}` results in `foo=%7B%22bar%22%3A%22baz%22%7D"` (stringified and encoded representation of an object)
+ * */
+ this.$get = function() {
+ return paramSerializerFactory(false);
+ };
+}
+
+function $HttpParamSerializerJQLikeProvider() {
+ /**
+ * @ngdoc service
+ * @name $httpParamSerializerJQLike
+ * @description
+ *
+ * Alternative $http params serializer that follows jQuerys `param()` method {http://api.jquery.com/jquery.param/} logic.
+ * */
+ this.$get = function() {
+ return paramSerializerFactory(true);
+ };
+}
+
function defaultHttpResponseTransform(data, headers) {
if (isString(data)) {
// Strip json vulnerability protection prefix and trim whitespace
@@ -8917,6 +8995,11 @@ function $HttpProvider() {
* - **`defaults.headers.put`**
* - **`defaults.headers.patch`**
*
+ * - **`defaults.paramSerializer`** - {string|function(Object<string,string>):string} - A function used to prepare string representation
+ * of request parameters (specified as an object).
+ * Is specified as string, it is interpreted as function registered in with the {$injector}.
+ * Defaults to {$httpParamSerializer}.
+ *
**/
var defaults = this.defaults = {
// transform incoming response data
@@ -8938,7 +9021,9 @@ function $HttpProvider() {
},
xsrfCookieName: 'XSRF-TOKEN',
- xsrfHeaderName: 'X-XSRF-TOKEN'
+ xsrfHeaderName: 'X-XSRF-TOKEN',
+
+ paramSerializer: '$httpParamSerializer'
};
var useApplyAsync = false;
@@ -8952,7 +9037,7 @@ function $HttpProvider() {
* significant performance improvement for bigger applications that make many HTTP requests
* concurrently (common during application bootstrap).
*
- * Defaults to false. If no value is specifed, returns the current configured value.
+ * Defaults to false. If no value is specified, returns the current configured value.
*
* @param {boolean=} value If true, when requests are loaded, they will schedule a deferred
* "apply" on the next tick, giving time for subsequent requests in a roughly ~10ms window
@@ -8990,6 +9075,12 @@ function $HttpProvider() {
var defaultCache = $cacheFactory('$http');
/**
+ * Make sure that default param serializer is exposed as a function
+ */
+ defaults.paramSerializer = isString(defaults.paramSerializer) ?
+ $injector.get(defaults.paramSerializer) : defaults.paramSerializer;
+
+ /**
* Interceptors stored in reverse order. Inner interceptors before outer interceptors.
* The reversal is needed so that we can build up the interception chain around the
* server request.
@@ -9400,6 +9491,9 @@ function $HttpProvider() {
* response body, headers and status and returns its transformed (typically deserialized) version.
* See {@link ng.$http#overriding-the-default-transformations-per-request
* Overriding the Default Transformations}
+ * - **paramSerializer** - {string|function(Object<string,string>):string} - A function used to prepare string representation
+ * of request parameters (specified as an object).
+ * Is specified as string, it is interpreted as function registered in with the {$injector}.
* - **cache** – `{boolean|Cache}` – If true, a default $http cache will be used to cache the
* GET request, otherwise if a cache instance built with
* {@link ng.$cacheFactory $cacheFactory}, this cache will be used for
@@ -9528,11 +9622,14 @@ function $HttpProvider() {
var config = extend({
method: 'get',
transformRequest: defaults.transformRequest,
- transformResponse: defaults.transformResponse
+ transformResponse: defaults.transformResponse,
+ paramSerializer: defaults.paramSerializer
}, requestConfig);
config.headers = mergeHeaders(requestConfig);
config.method = uppercase(config.method);
+ config.paramSerializer = isString(config.paramSerializer) ?
+ $injector.get(config.paramSerializer) : config.paramSerializer;
var serverRequest = function(config) {
var headers = config.headers;
@@ -9796,7 +9893,7 @@ function $HttpProvider() {
cache,
cachedResp,
reqHeaders = config.headers,
- url = buildUrl(config.url, config.params);
+ url = buildUrl(config.url, config.paramSerializer(config.params));
$http.pendingRequests.push(config);
promise.then(removePendingReq, removePendingReq);
@@ -9903,27 +10000,9 @@ function $HttpProvider() {
}
- function buildUrl(url, params) {
- if (!params) return url;
- var parts = [];
- forEachSorted(params, function(value, key) {
- if (value === null || isUndefined(value)) return;
- if (!isArray(value)) value = [value];
-
- forEach(value, function(v) {
- if (isObject(v)) {
- if (isDate(v)) {
- v = v.toISOString();
- } else {
- v = toJson(v);
- }
- }
- parts.push(encodeUriQuery(key) + '=' +
- encodeUriQuery(v));
- });
- });
- if (parts.length > 0) {
- url += ((url.indexOf('?') == -1) ? '?' : '&') + parts.join('&');
+ function buildUrl(url, serializedParams) {
+ if (serializedParams.length > 0) {
+ url += ((url.indexOf('?') == -1) ? '?' : '&') + serializedParams;
}
return url;
}
@@ -12636,7 +12715,7 @@ ASTCompiler.prototype = {
self.state.computing = fnKey;
var intoId = self.nextId();
self.recurse(watch, intoId);
- self.return(intoId);
+ self.return_(intoId);
self.state.inputs.push(fnKey);
watch.watchId = key;
});
@@ -12723,7 +12802,7 @@ ASTCompiler.prototype = {
recursionFn = recursionFn || noop;
if (!skipWatchIdCheck && isDefined(ast.watchId)) {
intoId = intoId || this.nextId();
- this.if('i',
+ this.if_('i',
this.lazyAssign(intoId, this.computedMember('i', ast.watchId)),
this.lazyRecurse(ast, intoId, nameId, recursionFn, create, true)
);
@@ -12736,7 +12815,7 @@ ASTCompiler.prototype = {
if (pos !== ast.body.length - 1) {
self.current().body.push(right, ';');
} else {
- self.return(right);
+ self.return_(right);
}
});
break;
@@ -12767,13 +12846,13 @@ ASTCompiler.prototype = {
case AST.LogicalExpression:
intoId = intoId || this.nextId();
self.recurse(ast.left, intoId);
- self.if(ast.operator === '&&' ? intoId : self.not(intoId), self.lazyRecurse(ast.right, intoId));
+ self.if_(ast.operator === '&&' ? intoId : self.not(intoId), self.lazyRecurse(ast.right, intoId));
recursionFn(intoId);
break;
case AST.ConditionalExpression:
intoId = intoId || this.nextId();
self.recurse(ast.test, intoId);
- self.if(intoId, self.lazyRecurse(ast.alternate, intoId), self.lazyRecurse(ast.consequent, intoId));
+ self.if_(intoId, self.lazyRecurse(ast.alternate, intoId), self.lazyRecurse(ast.consequent, intoId));
recursionFn(intoId);
break;
case AST.Identifier:
@@ -12784,11 +12863,11 @@ ASTCompiler.prototype = {
nameId.name = ast.name;
}
ensureSafeMemberName(ast.name);
- self.if(self.stage === 'inputs' || self.not(self.getHasOwnProperty('l', ast.name)),
+ self.if_(self.stage === 'inputs' || self.not(self.getHasOwnProperty('l', ast.name)),
function() {
- self.if(self.stage === 'inputs' || 's', function() {
+ self.if_(self.stage === 'inputs' || 's', function() {
if (create && create !== 1) {
- self.if(
+ self.if_(
self.not(self.nonComputedMember('s', ast.name)),
self.lazyAssign(self.nonComputedMember('s', ast.name), '{}'));
}
@@ -12805,13 +12884,13 @@ ASTCompiler.prototype = {
left = nameId && (nameId.context = this.nextId()) || this.nextId();
intoId = intoId || this.nextId();
self.recurse(ast.object, left, undefined, function() {
- self.if(self.notNull(left), function() {
+ self.if_(self.notNull(left), function() {
if (ast.computed) {
right = self.nextId();
self.recurse(ast.property, right);
self.addEnsureSafeMemberName(right);
if (create && create !== 1) {
- self.if(self.not(self.computedMember(left, right)), self.lazyAssign(self.computedMember(left, right), '{}'));
+ self.if_(self.not(self.computedMember(left, right)), self.lazyAssign(self.computedMember(left, right), '{}'));
}
expression = self.ensureSafeObject(self.computedMember(left, right));
self.assign(intoId, expression);
@@ -12822,7 +12901,7 @@ ASTCompiler.prototype = {
} else {
ensureSafeMemberName(ast.property.name);
if (create && create !== 1) {
- self.if(self.not(self.nonComputedMember(left, ast.property.name)), self.lazyAssign(self.nonComputedMember(left, ast.property.name), '{}'));
+ self.if_(self.not(self.nonComputedMember(left, ast.property.name)), self.lazyAssign(self.nonComputedMember(left, ast.property.name), '{}'));
}
expression = self.nonComputedMember(left, ast.property.name);
if (self.state.expensiveChecks || isPossiblyDangerousMemberName(ast.property.name)) {
@@ -12856,7 +12935,7 @@ ASTCompiler.prototype = {
left = {};
args = [];
self.recurse(ast.callee, right, left, function() {
- self.if(self.notNull(right), function() {
+ self.if_(self.notNull(right), function() {
self.addEnsureSafeFunction(right);
forEach(ast.arguments, function(expr) {
self.recurse(expr, self.nextId(), undefined, function(argument) {
@@ -12885,7 +12964,7 @@ ASTCompiler.prototype = {
throw $parseMinErr('lval', 'Trying to assing a value to a non l-value');
}
this.recurse(ast.left, undefined, left, function() {
- self.if(self.notNull(left.context), function() {
+ self.if_(self.notNull(left.context), function() {
self.recurse(ast.right, right);
self.addEnsureSafeObject(self.member(left.context, left.name, left.computed));
expression = self.member(left.context, left.name, left.computed) + ast.operator + right;
@@ -12960,11 +13039,11 @@ ASTCompiler.prototype = {
return 'plus(' + left + ',' + right + ')';
},
- 'return': function(id) {
+ return_: function(id) {
this.current().body.push('return ', id, ';');
},
- 'if': function(test, alternate, consequent) {
+ if_: function(test, alternate, consequent) {
if (test === true) {
alternate();
} else {
@@ -15234,6 +15313,11 @@ function $RootScopeProvider() {
this.$broadcast('$destroy');
this.$$destroyed = true;
+ if (this === $rootScope) {
+ //Remove handlers attached to window when $rootScope is removed
+ $browser.$$applicationDestroyed();
+ }
+
incrementWatchersCount(this, -this.$$watchersCount);
for (var eventName in this.$$listenerCount) {
decrementListenerCount(this, this.$$listenerCount[eventName], eventName);
@@ -17346,7 +17430,7 @@ function $WindowProvider() {
* @return {Object} a key/value map of the current cookies
*/
function $$CookieReader($document) {
- var rawDocument = $document[0];
+ var rawDocument = $document[0] || {};
var lastCookies = {};
var lastCookieString = '';
@@ -17360,9 +17444,10 @@ function $$CookieReader($document) {
return function() {
var cookieArray, cookie, i, index, name;
+ var currentCookieString = rawDocument.cookie || '';
- if (rawDocument.cookie !== lastCookieString) {
- lastCookieString = rawDocument.cookie;
+ if (currentCookieString !== lastCookieString) {
+ lastCookieString = currentCookieString;
cookieArray = lastCookieString.split('; ');
lastCookies = {};
@@ -17687,14 +17772,16 @@ function filterFilter() {
}
}
+ var expressionType = getTypeForFilter(expression);
var predicateFn;
var matchAgainstAnyProp;
- switch (typeof expression) {
+ switch (expressionType) {
case 'function':
predicateFn = expression;
break;
case 'boolean':
+ case 'null':
case 'number':
case 'string':
matchAgainstAnyProp = true;
@@ -17724,6 +17811,14 @@ function createPredicateFn(expression, comparator, matchAgainstAnyProp) {
comparator = equals;
} else if (!isFunction(comparator)) {
comparator = function(actual, expected) {
+ if (isUndefined(actual)) {
+ // No substring matching against `undefined`
+ return false;
+ }
+ if ((actual === null) || (expected === null)) {
+ // No substring matching against `null`; only match against `null`
+ return actual === expected;
+ }
if (isObject(expected) || (isObject(actual) && !hasCustomToString(actual))) {
// Should not compare primitives against objects, unless they have custom `toString` method
return false;
@@ -17746,8 +17841,8 @@ function createPredicateFn(expression, comparator, matchAgainstAnyProp) {
}
function deepCompare(actual, expected, comparator, matchAgainstAnyProp, dontMatchWholeObject) {
- var actualType = (actual !== null) ? typeof actual : 'null';
- var expectedType = (expected !== null) ? typeof expected : 'null';
+ var actualType = getTypeForFilter(actual);
+ var expectedType = getTypeForFilter(expected);
if ((expectedType === 'string') && (expected.charAt(0) === '!')) {
return !deepCompare(actual, expected.substring(1), comparator, matchAgainstAnyProp);
@@ -17794,6 +17889,11 @@ function deepCompare(actual, expected, comparator, matchAgainstAnyProp, dontMatc
}
}
+// Used for easily differentiating between `null` and actual `object`
+function getTypeForFilter(val) {
+ return (val === null) ? 'null' : typeof val;
+}
+
/**
* @ngdoc filter
* @name currency
@@ -24393,7 +24493,10 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
// if scope model value and ngModel value are out of sync
// TODO(perf): why not move this to the action fn?
- if (modelValue !== ctrl.$modelValue) {
+ if (modelValue !== ctrl.$modelValue &&
+ // checks for NaN is needed to allow setting the model to NaN when there's an asyncValidator
+ (ctrl.$modelValue === ctrl.$modelValue || modelValue === modelValue)
+ ) {
ctrl.$modelValue = ctrl.$$rawModelValue = modelValue;
parserValid = undefined;
@@ -26749,12 +26852,12 @@ var ngHideDirective = ['$animate', function($animate) {
</example>
*/
var ngStyleDirective = ngDirective(function(scope, element, attr) {
- scope.$watchCollection(attr.ngStyle, function ngStyleWatchAction(newStyles, oldStyles) {
+ scope.$watch(attr.ngStyle, function ngStyleWatchAction(newStyles, oldStyles) {
if (oldStyles && (newStyles !== oldStyles)) {
forEach(oldStyles, function(val, style) { element.css(style, '');});
}
if (newStyles) element.css(newStyles);
- });
+ }, true);
});
/**
diff --git a/js/vendor/angular/angular.min.js b/js/vendor/angular/angular.min.js
index c9a455796..526f6b933 100644
--- a/js/vendor/angular/angular.min.js
+++ b/js/vendor/angular/angular.min.js
@@ -1,284 +1,286 @@
/*
- AngularJS v1.4.0-build.3937+sha.171b9f7
+ AngularJS v1.4.0-build.3954+sha.9dfa949
(c) 2010-2015 Google, Inc. http://angularjs.org
License: MIT
*/
-(function(O,Y,u){'use strict';function H(b){return function(){var a=arguments[0],c;c="["+(b?b+":":"")+a+"] http://errors.angularjs.org/1.4.0-build.3937+sha.171b9f7/"+(b?b+"/":"")+a;for(a=1;a<arguments.length;a++){c=c+(1==a?"?":"&")+"p"+(a-1)+"=";var d=encodeURIComponent,e;e=arguments[a];e="function"==typeof e?e.toString().replace(/ \{[\s\S]*$/,""):"undefined"==typeof e?"undefined":"string"!=typeof e?JSON.stringify(e):e;c+=d(e)}return Error(c)}}function Ra(b){if(null==b||Sa(b))return!1;var a=b.length;
-return b.nodeType===na&&a?!0:I(b)||C(b)||0===a||"number"===typeof a&&0<a&&a-1 in b}function n(b,a,c){var d,e;if(b)if(G(b))for(d in b)"prototype"==d||"length"==d||"name"==d||b.hasOwnProperty&&!b.hasOwnProperty(d)||a.call(c,b[d],d,b);else if(C(b)||Ra(b)){var f="object"!==typeof b;d=0;for(e=b.length;d<e;d++)(f||d in b)&&a.call(c,b[d],d,b)}else if(b.forEach&&b.forEach!==n)b.forEach(a,c,b);else for(d in b)b.hasOwnProperty(d)&&a.call(c,b[d],d,b);return b}function Ld(b,a,c){for(var d=Object.keys(b).sort(),
-e=0;e<d.length;e++)a.call(c,b[d[e]],d[e]);return d}function jc(b){return function(a,c){b(c,a)}}function Md(){return++jb}function kc(b,a){a?b.$$hashKey=a:delete b.$$hashKey}function Kb(b,a,c){for(var d=b.$$hashKey,e=0,f=a.length;e<f;++e){var h=a[e];if(E(h)||G(h))for(var g=Object.keys(h),l=0,k=g.length;l<k;l++){var m=g[l],q=h[m];c&&E(q)?(E(b[m])||(b[m]=C(q)?[]:{}),Kb(b[m],[q],!0)):b[m]=q}}kc(b,d);return b}function Q(b){return Kb(b,qa.call(arguments,1),!1)}function Nd(b){return Kb(b,qa.call(arguments,
-1),!0)}function ba(b){return parseInt(b,10)}function Lb(b,a){return Q(Object.create(b),a)}function w(){}function Ta(b){return b}function oa(b){return function(){return b}}function D(b){return"undefined"===typeof b}function x(b){return"undefined"!==typeof b}function E(b){return null!==b&&"object"===typeof b}function I(b){return"string"===typeof b}function W(b){return"number"===typeof b}function da(b){return"[object Date]"===ra.call(b)}function G(b){return"function"===typeof b}function Ua(b){return"[object RegExp]"===
-ra.call(b)}function Sa(b){return b&&b.window===b}function Va(b){return b&&b.$evalAsync&&b.$watch}function Wa(b){return"boolean"===typeof b}function lc(b){return!(!b||!(b.nodeName||b.prop&&b.attr&&b.find))}function Od(b){var a={};b=b.split(",");var c;for(c=0;c<b.length;c++)a[b[c]]=!0;return a}function sa(b){return M(b.nodeName||b[0]&&b[0].nodeName)}function Xa(b,a){var c=b.indexOf(a);0<=c&&b.splice(c,1);return c}function ta(b,a,c,d){if(Sa(b)||Va(b))throw Ea("cpws");if(mc.test(ra.call(a)))throw Ea("cpta");
-if(a){if(b===a)throw Ea("cpi");c=c||[];d=d||[];if(E(b)){var e=c.indexOf(b);if(-1!==e)return d[e];c.push(b);d.push(a)}if(C(b))for(var f=a.length=0;f<b.length;f++)e=ta(b[f],null,c,d),E(b[f])&&(c.push(b[f]),d.push(e)),a.push(e);else{var h=a.$$hashKey;C(a)?a.length=0:n(a,function(b,c){delete a[c]});for(f in b)b.hasOwnProperty(f)&&(e=ta(b[f],null,c,d),E(b[f])&&(c.push(b[f]),d.push(e)),a[f]=e);kc(a,h)}}else if(a=b)C(b)?a=ta(b,[],c,d):mc.test(ra.call(b))?a=new b.constructor(b):da(b)?a=new Date(b.getTime()):
-Ua(b)?(a=new RegExp(b.source,b.toString().match(/[^\/]*$/)[0]),a.lastIndex=b.lastIndex):E(b)&&(e=Object.create(Object.getPrototypeOf(b)),a=ta(b,e,c,d));return a}function ea(b,a){if(C(b)){a=a||[];for(var c=0,d=b.length;c<d;c++)a[c]=b[c]}else if(E(b))for(c in a=a||{},b)if("$"!==c.charAt(0)||"$"!==c.charAt(1))a[c]=b[c];return a||b}function ja(b,a){if(b===a)return!0;if(null===b||null===a)return!1;if(b!==b&&a!==a)return!0;var c=typeof b,d;if(c==typeof a&&"object"==c)if(C(b)){if(!C(a))return!1;if((c=b.length)==
-a.length){for(d=0;d<c;d++)if(!ja(b[d],a[d]))return!1;return!0}}else{if(da(b))return da(a)?ja(b.getTime(),a.getTime()):!1;if(Ua(b))return Ua(a)?b.toString()==a.toString():!1;if(Va(b)||Va(a)||Sa(b)||Sa(a)||C(a)||da(a)||Ua(a))return!1;c={};for(d in b)if("$"!==d.charAt(0)&&!G(b[d])){if(!ja(b[d],a[d]))return!1;c[d]=!0}for(d in a)if(!c.hasOwnProperty(d)&&"$"!==d.charAt(0)&&a[d]!==u&&!G(a[d]))return!1;return!0}return!1}function Ya(b,a,c){return b.concat(qa.call(a,c))}function nc(b,a){var c=2<arguments.length?
-qa.call(arguments,2):[];return!G(a)||a instanceof RegExp?a:c.length?function(){return arguments.length?a.apply(b,Ya(c,arguments,0)):a.apply(b,c)}:function(){return arguments.length?a.apply(b,arguments):a.call(b)}}function Pd(b,a){var c=a;"string"===typeof b&&"$"===b.charAt(0)&&"$"===b.charAt(1)?c=u:Sa(a)?c="$WINDOW":a&&Y===a?c="$DOCUMENT":Va(a)&&(c="$SCOPE");return c}function Za(b,a){if("undefined"===typeof b)return u;W(a)||(a=a?2:null);return JSON.stringify(b,Pd,a)}function oc(b){return I(b)?JSON.parse(b):
-b}function pc(b,a){var c=Date.parse("Jan 01, 1970 00:00:00 "+b)/6E4;return isNaN(c)?a:c}function Mb(b,a,c){c=c?-1:1;var d=pc(a,b.getTimezoneOffset());a=b;b=c*(d-b.getTimezoneOffset());a=new Date(a.getTime());a.setMinutes(a.getMinutes()+b);return a}function ua(b){b=A(b).clone();try{b.empty()}catch(a){}var c=A("<div>").append(b).html();try{return b[0].nodeType===$a?M(c):c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+M(b)})}catch(d){return M(c)}}function qc(b){try{return decodeURIComponent(b)}catch(a){}}
-function rc(b){var a={},c,d;n((b||"").split("&"),function(b){b&&(c=b.replace(/\+/g,"%20").split("="),d=qc(c[0]),x(d)&&(b=x(c[1])?qc(c[1]):!0,sc.call(a,d)?C(a[d])?a[d].push(b):a[d]=[a[d],b]:a[d]=b))});return a}function Nb(b){var a=[];n(b,function(b,d){C(b)?n(b,function(b){a.push(Fa(d,!0)+(!0===b?"":"="+Fa(b,!0)))}):a.push(Fa(d,!0)+(!0===b?"":"="+Fa(b,!0)))});return a.length?a.join("&"):""}function kb(b){return Fa(b,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function Fa(b,a){return encodeURIComponent(b).replace(/%40/gi,
-"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%20/g,a?"%20":"+")}function Qd(b,a){var c,d,e=Ma.length;for(d=0;d<e;++d)if(c=Ma[d]+a,I(c=b.getAttribute(c)))return c;return null}function Rd(b,a){var c,d,e={};n(Ma,function(a){a+="app";!c&&b.hasAttribute&&b.hasAttribute(a)&&(c=b,d=b.getAttribute(a))});n(Ma,function(a){a+="app";var e;!c&&(e=b.querySelector("["+a.replace(":","\\:")+"]"))&&(c=e,d=e.getAttribute(a))});c&&(e.strictDi=null!==Qd(c,"strict-di"),
-a(c,d?[d]:[],e))}function tc(b,a,c){E(c)||(c={});c=Q({strictDi:!1},c);var d=function(){b=A(b);if(b.injector()){var d=b[0]===Y?"document":ua(b);throw Ea("btstrpd",d.replace(/</,"&lt;").replace(/>/,"&gt;"));}a=a||[];a.unshift(["$provide",function(a){a.value("$rootElement",b)}]);c.debugInfoEnabled&&a.push(["$compileProvider",function(a){a.debugInfoEnabled(!0)}]);a.unshift("ng");d=ab(a,c.strictDi);d.invoke(["$rootScope","$rootElement","$compile","$injector",function(a,b,c,d){a.$apply(function(){b.data("$injector",
-d);c(b)(a)})}]);return d},e=/^NG_ENABLE_DEBUG_INFO!/,f=/^NG_DEFER_BOOTSTRAP!/;O&&e.test(O.name)&&(c.debugInfoEnabled=!0,O.name=O.name.replace(e,""));if(O&&!f.test(O.name))return d();O.name=O.name.replace(f,"");$.resumeBootstrap=function(b){n(b,function(b){a.push(b)});return d()};G($.resumeDeferredBootstrap)&&$.resumeDeferredBootstrap()}function Sd(){O.name="NG_ENABLE_DEBUG_INFO!"+O.name;O.location.reload()}function Td(b){b=$.element(b).injector();if(!b)throw Ea("test");return b.get("$$testability")}
-function uc(b,a){a=a||"_";return b.replace(Ud,function(b,d){return(d?a:"")+b.toLowerCase()})}function Vd(){var b;if(!vc){var a=lb();ka=O.jQuery;x(a)&&(ka=null===a?u:O[a]);ka&&ka.fn.on?(A=ka,Q(ka.fn,{scope:Na.scope,isolateScope:Na.isolateScope,controller:Na.controller,injector:Na.injector,inheritedData:Na.inheritedData}),b=ka.cleanData,ka.cleanData=function(a){var d;if(Ob)Ob=!1;else for(var e=0,f;null!=(f=a[e]);e++)(d=ka._data(f,"events"))&&d.$destroy&&ka(f).triggerHandler("$destroy");b(a)}):A=P;$.element=
-A;vc=!0}}function Pb(b,a,c){if(!b)throw Ea("areq",a||"?",c||"required");return b}function Oa(b,a,c){c&&C(b)&&(b=b[b.length-1]);Pb(G(b),a,"not a function, got "+(b&&"object"===typeof b?b.constructor.name||"Object":typeof b));return b}function Pa(b,a){if("hasOwnProperty"===b)throw Ea("badname",a);}function wc(b,a,c){if(!a)return b;a=a.split(".");for(var d,e=b,f=a.length,h=0;h<f;h++)d=a[h],b&&(b=(e=b)[d]);return!c&&G(b)?nc(e,b):b}function mb(b){var a=b[0];b=b[b.length-1];var c=[a];do{a=a.nextSibling;
-if(!a)break;c.push(a)}while(a!==b);return A(c)}function la(){return Object.create(null)}function Wd(b){function a(a,b,c){return a[b]||(a[b]=c())}var c=H("$injector"),d=H("ng");b=a(b,"angular",Object);b.$$minErr=b.$$minErr||H;return a(b,"module",function(){var b={};return function(f,h,g){if("hasOwnProperty"===f)throw d("badname","module");h&&b.hasOwnProperty(f)&&(b[f]=null);return a(b,f,function(){function a(c,d,e,f){f||(f=b);return function(){f[e||"push"]([c,d,arguments]);return t}}if(!h)throw c("nomod",
+(function(O,Y,u){'use strict';function J(b){return function(){var a=arguments[0],c;c="["+(b?b+":":"")+a+"] http://errors.angularjs.org/1.4.0-build.3954+sha.9dfa949/"+(b?b+"/":"")+a;for(a=1;a<arguments.length;a++){c=c+(1==a?"?":"&")+"p"+(a-1)+"=";var d=encodeURIComponent,e;e=arguments[a];e="function"==typeof e?e.toString().replace(/ \{[\s\S]*$/,""):"undefined"==typeof e?"undefined":"string"!=typeof e?JSON.stringify(e):e;c+=d(e)}return Error(c)}}function Ra(b){if(null==b||Sa(b))return!1;var a=b.length;
+return b.nodeType===oa&&a?!0:D(b)||I(b)||0===a||"number"===typeof a&&0<a&&a-1 in b}function n(b,a,c){var d,e;if(b)if(H(b))for(d in b)"prototype"==d||"length"==d||"name"==d||b.hasOwnProperty&&!b.hasOwnProperty(d)||a.call(c,b[d],d,b);else if(I(b)||Ra(b)){var f="object"!==typeof b;d=0;for(e=b.length;d<e;d++)(f||d in b)&&a.call(c,b[d],d,b)}else if(b.forEach&&b.forEach!==n)b.forEach(a,c,b);else for(d in b)b.hasOwnProperty(d)&&a.call(c,b[d],d,b);return b}function Nd(b,a,c){for(var d=Object.keys(b).sort(),
+e=0;e<d.length;e++)a.call(c,b[d[e]],d[e]);return d}function jc(b){return function(a,c){b(c,a)}}function Od(){return++jb}function kc(b,a){a?b.$$hashKey=a:delete b.$$hashKey}function Kb(b,a,c){for(var d=b.$$hashKey,e=0,f=a.length;e<f;++e){var h=a[e];if(C(h)||H(h))for(var g=Object.keys(h),l=0,k=g.length;l<k;l++){var m=g[l],q=h[m];c&&C(q)?(C(b[m])||(b[m]=I(q)?[]:{}),Kb(b[m],[q],!0)):b[m]=q}}kc(b,d);return b}function T(b){return Kb(b,qa.call(arguments,1),!1)}function Pd(b){return Kb(b,qa.call(arguments,
+1),!0)}function ca(b){return parseInt(b,10)}function Lb(b,a){return T(Object.create(b),a)}function z(){}function Ta(b){return b}function pa(b){return function(){return b}}function F(b){return"undefined"===typeof b}function w(b){return"undefined"!==typeof b}function C(b){return null!==b&&"object"===typeof b}function D(b){return"string"===typeof b}function X(b){return"number"===typeof b}function ea(b){return"[object Date]"===ra.call(b)}function H(b){return"function"===typeof b}function Ua(b){return"[object RegExp]"===
+ra.call(b)}function Sa(b){return b&&b.window===b}function Va(b){return b&&b.$evalAsync&&b.$watch}function Wa(b){return"boolean"===typeof b}function lc(b){return!(!b||!(b.nodeName||b.prop&&b.attr&&b.find))}function Qd(b){var a={};b=b.split(",");var c;for(c=0;c<b.length;c++)a[b[c]]=!0;return a}function sa(b){return N(b.nodeName||b[0]&&b[0].nodeName)}function Xa(b,a){var c=b.indexOf(a);0<=c&&b.splice(c,1);return c}function ta(b,a,c,d){if(Sa(b)||Va(b))throw Da("cpws");if(mc.test(ra.call(a)))throw Da("cpta");
+if(a){if(b===a)throw Da("cpi");c=c||[];d=d||[];if(C(b)){var e=c.indexOf(b);if(-1!==e)return d[e];c.push(b);d.push(a)}if(I(b))for(var f=a.length=0;f<b.length;f++)e=ta(b[f],null,c,d),C(b[f])&&(c.push(b[f]),d.push(e)),a.push(e);else{var h=a.$$hashKey;I(a)?a.length=0:n(a,function(b,c){delete a[c]});for(f in b)b.hasOwnProperty(f)&&(e=ta(b[f],null,c,d),C(b[f])&&(c.push(b[f]),d.push(e)),a[f]=e);kc(a,h)}}else if(a=b)I(b)?a=ta(b,[],c,d):mc.test(ra.call(b))?a=new b.constructor(b):ea(b)?a=new Date(b.getTime()):
+Ua(b)?(a=new RegExp(b.source,b.toString().match(/[^\/]*$/)[0]),a.lastIndex=b.lastIndex):C(b)&&(e=Object.create(Object.getPrototypeOf(b)),a=ta(b,e,c,d));return a}function fa(b,a){if(I(b)){a=a||[];for(var c=0,d=b.length;c<d;c++)a[c]=b[c]}else if(C(b))for(c in a=a||{},b)if("$"!==c.charAt(0)||"$"!==c.charAt(1))a[c]=b[c];return a||b}function ka(b,a){if(b===a)return!0;if(null===b||null===a)return!1;if(b!==b&&a!==a)return!0;var c=typeof b,d;if(c==typeof a&&"object"==c)if(I(b)){if(!I(a))return!1;if((c=b.length)==
+a.length){for(d=0;d<c;d++)if(!ka(b[d],a[d]))return!1;return!0}}else{if(ea(b))return ea(a)?ka(b.getTime(),a.getTime()):!1;if(Ua(b))return Ua(a)?b.toString()==a.toString():!1;if(Va(b)||Va(a)||Sa(b)||Sa(a)||I(a)||ea(a)||Ua(a))return!1;c={};for(d in b)if("$"!==d.charAt(0)&&!H(b[d])){if(!ka(b[d],a[d]))return!1;c[d]=!0}for(d in a)if(!c.hasOwnProperty(d)&&"$"!==d.charAt(0)&&a[d]!==u&&!H(a[d]))return!1;return!0}return!1}function Ya(b,a,c){return b.concat(qa.call(a,c))}function nc(b,a){var c=2<arguments.length?
+qa.call(arguments,2):[];return!H(a)||a instanceof RegExp?a:c.length?function(){return arguments.length?a.apply(b,Ya(c,arguments,0)):a.apply(b,c)}:function(){return arguments.length?a.apply(b,arguments):a.call(b)}}function Rd(b,a){var c=a;"string"===typeof b&&"$"===b.charAt(0)&&"$"===b.charAt(1)?c=u:Sa(a)?c="$WINDOW":a&&Y===a?c="$DOCUMENT":Va(a)&&(c="$SCOPE");return c}function Za(b,a){if("undefined"===typeof b)return u;X(a)||(a=a?2:null);return JSON.stringify(b,Rd,a)}function oc(b){return D(b)?JSON.parse(b):
+b}function pc(b,a){var c=Date.parse("Jan 01, 1970 00:00:00 "+b)/6E4;return isNaN(c)?a:c}function Mb(b,a,c){c=c?-1:1;var d=pc(a,b.getTimezoneOffset());a=b;b=c*(d-b.getTimezoneOffset());a=new Date(a.getTime());a.setMinutes(a.getMinutes()+b);return a}function ua(b){b=E(b).clone();try{b.empty()}catch(a){}var c=E("<div>").append(b).html();try{return b[0].nodeType===$a?N(c):c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+N(b)})}catch(d){return N(c)}}function qc(b){try{return decodeURIComponent(b)}catch(a){}}
+function rc(b){var a={},c,d;n((b||"").split("&"),function(b){b&&(c=b.replace(/\+/g,"%20").split("="),d=qc(c[0]),w(d)&&(b=w(c[1])?qc(c[1]):!0,sc.call(a,d)?I(a[d])?a[d].push(b):a[d]=[a[d],b]:a[d]=b))});return a}function Nb(b){var a=[];n(b,function(b,d){I(b)?n(b,function(b){a.push(va(d,!0)+(!0===b?"":"="+va(b,!0)))}):a.push(va(d,!0)+(!0===b?"":"="+va(b,!0)))});return a.length?a.join("&"):""}function kb(b){return va(b,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function va(b,a){return encodeURIComponent(b).replace(/%40/gi,
+"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%20/g,a?"%20":"+")}function Sd(b,a){var c,d,e=Ma.length;for(d=0;d<e;++d)if(c=Ma[d]+a,D(c=b.getAttribute(c)))return c;return null}function Td(b,a){var c,d,e={};n(Ma,function(a){a+="app";!c&&b.hasAttribute&&b.hasAttribute(a)&&(c=b,d=b.getAttribute(a))});n(Ma,function(a){a+="app";var e;!c&&(e=b.querySelector("["+a.replace(":","\\:")+"]"))&&(c=e,d=e.getAttribute(a))});c&&(e.strictDi=null!==Sd(c,"strict-di"),
+a(c,d?[d]:[],e))}function tc(b,a,c){C(c)||(c={});c=T({strictDi:!1},c);var d=function(){b=E(b);if(b.injector()){var d=b[0]===Y?"document":ua(b);throw Da("btstrpd",d.replace(/</,"&lt;").replace(/>/,"&gt;"));}a=a||[];a.unshift(["$provide",function(a){a.value("$rootElement",b)}]);c.debugInfoEnabled&&a.push(["$compileProvider",function(a){a.debugInfoEnabled(!0)}]);a.unshift("ng");d=ab(a,c.strictDi);d.invoke(["$rootScope","$rootElement","$compile","$injector",function(a,b,c,d){a.$apply(function(){b.data("$injector",
+d);c(b)(a)})}]);return d},e=/^NG_ENABLE_DEBUG_INFO!/,f=/^NG_DEFER_BOOTSTRAP!/;O&&e.test(O.name)&&(c.debugInfoEnabled=!0,O.name=O.name.replace(e,""));if(O&&!f.test(O.name))return d();O.name=O.name.replace(f,"");aa.resumeBootstrap=function(b){n(b,function(b){a.push(b)});return d()};H(aa.resumeDeferredBootstrap)&&aa.resumeDeferredBootstrap()}function Ud(){O.name="NG_ENABLE_DEBUG_INFO!"+O.name;O.location.reload()}function Vd(b){b=aa.element(b).injector();if(!b)throw Da("test");return b.get("$$testability")}
+function uc(b,a){a=a||"_";return b.replace(Wd,function(b,d){return(d?a:"")+b.toLowerCase()})}function Xd(){var b;if(!vc){var a=lb();la=O.jQuery;w(a)&&(la=null===a?u:O[a]);la&&la.fn.on?(E=la,T(la.fn,{scope:Na.scope,isolateScope:Na.isolateScope,controller:Na.controller,injector:Na.injector,inheritedData:Na.inheritedData}),b=la.cleanData,la.cleanData=function(a){var d;if(Ob)Ob=!1;else for(var e=0,f;null!=(f=a[e]);e++)(d=la._data(f,"events"))&&d.$destroy&&la(f).triggerHandler("$destroy");b(a)}):E=P;aa.element=
+E;vc=!0}}function Pb(b,a,c){if(!b)throw Da("areq",a||"?",c||"required");return b}function Oa(b,a,c){c&&I(b)&&(b=b[b.length-1]);Pb(H(b),a,"not a function, got "+(b&&"object"===typeof b?b.constructor.name||"Object":typeof b));return b}function Pa(b,a){if("hasOwnProperty"===b)throw Da("badname",a);}function wc(b,a,c){if(!a)return b;a=a.split(".");for(var d,e=b,f=a.length,h=0;h<f;h++)d=a[h],b&&(b=(e=b)[d]);return!c&&H(b)?nc(e,b):b}function mb(b){var a=b[0];b=b[b.length-1];var c=[a];do{a=a.nextSibling;
+if(!a)break;c.push(a)}while(a!==b);return E(c)}function ma(){return Object.create(null)}function Yd(b){function a(a,b,c){return a[b]||(a[b]=c())}var c=J("$injector")