From eb28c3b137c8a0d61377087c9a04b820151b0b7c Mon Sep 17 00:00:00 2001 From: Bernhard Posselt Date: Thu, 30 Apr 2015 18:30:11 +0200 Subject: update deps --- js/vendor/angular/.bower.json | 8 +- js/vendor/angular/angular.js | 630 ++++++++++++++++++++++------------ js/vendor/angular/angular.min.js | 537 ++++++++++++++--------------- js/vendor/angular/angular.min.js.gzip | Bin 50718 -> 50995 bytes js/vendor/angular/angular.min.js.map | 6 +- js/vendor/angular/bower.json | 2 +- js/vendor/angular/package.json | 2 +- 7 files changed, 692 insertions(+), 493 deletions(-) (limited to 'js/vendor/angular') diff --git a/js/vendor/angular/.bower.json b/js/vendor/angular/.bower.json index 2478b1633..4eb1b5cc2 100644 --- a/js/vendor/angular/.bower.json +++ b/js/vendor/angular/.bower.json @@ -1,15 +1,15 @@ { "name": "angular", - "version": "1.4.0-rc.0", + "version": "1.4.0-rc.1", "main": "./angular.js", "ignore": [], "dependencies": {}, "homepage": "https://github.com/angular/bower-angular", - "_release": "1.4.0-rc.0", + "_release": "1.4.0-rc.1", "_resolution": { "type": "version", - "tag": "v1.4.0-rc.0", - "commit": "c339b32bb688fbbc66837c1b39925c457e24d3b5" + "tag": "v1.4.0-rc.1", + "commit": "f26bf48643e6fdfc193ca0cff1009f8eb5c27edd" }, "_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 a4d41b391..f39953895 100644 --- a/js/vendor/angular/angular.js +++ b/js/vendor/angular/angular.js @@ -1,5 +1,5 @@ /** - * @license AngularJS v1.4.0-rc.0 + * @license AngularJS v1.4.0-rc.1 * (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-rc.0/' + + message += '\nhttp://errors.angularjs.org/1.4.0-rc.1/' + (module ? module + '/' : '') + code; for (i = SKIP_INDEXES, paramPrefix = '?'; i < templateArgs.length; i++, paramPrefix = '&') { @@ -2286,11 +2286,11 @@ function toDebugString(obj) { * - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat". */ var version = { - full: '1.4.0-rc.0', // all of these placeholder strings will be replaced by grunt's + full: '1.4.0-rc.1', // all of these placeholder strings will be replaced by grunt's major: 1, // package task minor: 4, dot: 0, - codeName: 'smooth-unwinding' + codeName: 'sartorial-chronography' }; @@ -4746,6 +4746,7 @@ var $$CoreAnimateQueueProvider = function() { enabled: noop, on: noop, off: noop, + pin: noop, push: function(element, event, options, domOperation) { domOperation && domOperation(); @@ -4836,7 +4837,7 @@ var $$CoreAnimateQueueProvider = function() { var $AnimateProvider = ['$provide', function($provide) { var provider = this; - this.$$registeredAnimations = []; + this.$$registeredAnimations = Object.create(null); /** * @ngdoc method @@ -4944,12 +4945,120 @@ var $AnimateProvider = ['$provide', function($provide) { return { // we don't call it directly since non-existant arguments may // be interpreted as null within the sub enabled function + + /** + * + * @ngdoc method + * @name $animate#on + * @kind function + * @description Sets up an event listener to fire whenever the animation event (enter, leave, move, etc...) + * has fired on the given element or among any of its children. Once the listener is fired, the provided callback + * is fired with the following params: + * + * ```js + * $animate.on('enter', container, + * function callback(element, phase) { + * // cool we detected an enter animation within the container + * } + * ); + * ``` + * + * @param {string} event the animation event that will be captured (e.g. enter, leave, move, addClass, removeClass, etc...) + * @param {DOMElement} container the container element that will capture each of the animation events that are fired on itself + * as well as among its children + * @param {Function} callback the callback function that will be fired when the listener is triggered + * + * The arguments present in the callback function are: + * * `element` - The captured DOM element that the animation was fired on. + * * `phase` - The phase of the animation. The two possible phases are **start** (when the animation starts) and **close** (when it ends). + */ on: $$animateQueue.on, + + /** + * + * @ngdoc method + * @name $animate#off + * @kind function + * @description Deregisters an event listener based on the event which has been associated with the provided element. This method + * can be used in three different ways depending on the arguments: + * + * ```js + * // remove all the animation event listeners listening for `enter` + * $animate.off('enter'); + * + * // remove all the animation event listeners listening for `enter` on the given element and its children + * $animate.off('enter', container); + * + * // remove the event listener function provided by `listenerFn` that is set + * // to listen for `enter` on the given `element` as well as its children + * $animate.off('enter', container, callback); + * ``` + * + * @param {string} event the animation event (e.g. enter, leave, move, addClass, removeClass, etc...) + * @param {DOMElement=} container the container element the event listener was placed on + * @param {Function=} callback the callback function that was registered as the listener + */ off: $$animateQueue.off, + + /** + * @ngdoc method + * @name $animate#pin + * @kind function + * @description Associates the provided element with a host parent element to allow the element to be animated even if it exists + * outside of the DOM structure of the Angular application. By doing so, any animation triggered via `$animate` can be issued on the + * element despite being outside the realm of the application or within another application. Say for example if the application + * was bootstrapped on an element that is somewhere inside of the `` tag, but we wanted to allow for an element to be situated + * as a direct child of `document.body`, then this can be achieved by pinning the element via `$animate.pin(element)`. Keep in mind + * that calling `$animate.pin(element, parentElement)` will not actually insert into the DOM anywhere; it will just create the association. + * + * Note that this feature is only active when the `ngAnimate` module is used. + * + * @param {DOMElement} element the external element that will be pinned + * @param {DOMElement} parentElement the host parent element that will be associated with the external element + */ + pin: $$animateQueue.pin, + + /** + * + * @ngdoc method + * @name $animate#enabled + * @kind function + * @description Used to get and set whether animations are enabled or not on the entire application or on an element and its children. This + * function can be called in four ways: + * + * ```js + * // returns true or false + * $animate.enabled(); + * + * // changes the enabled state for all animations + * $animate.enabled(false); + * $animate.enabled(true); + * + * // returns true or false if animations are enabled for an element + * $animate.enabled(element); + * + * // changes the enabled state for an element and its children + * $animate.enabled(element, true); + * $animate.enabled(element, false); + * ``` + * + * @param {DOMElement=} element the element that will be considered for checking/setting the enabled state + * @param {boolean=} enabled whether or not the animations will be enabled for the element + * + * @return {boolean} whether or not animations are enabled + */ enabled: $$animateQueue.enabled, + /** + * @ngdoc method + * @name $animate#cancel + * @kind function + * @description Cancels the provided animation. + * + * @param {Promise} animationPromise The animation promise that is returned when an animation is started. + */ cancel: function(runner) { - runner.cancel && runner.end(); + runner.end && runner.end(); }, /** @@ -6513,8 +6622,8 @@ function $TemplateCacheProvider() { }]);
-
-
+
+
@@ -6551,7 +6660,7 @@ function $TemplateCacheProvider() { * * `cloneAttachFn` - If `cloneAttachFn` is provided, then the link function will clone the * `template` and call the `cloneAttachFn` function allowing the caller to attach the * cloned elements to the DOM document at the appropriate place. The `cloneAttachFn` is - * called as:
`cloneAttachFn(clonedElement, scope)` where: + * called as:
`cloneAttachFn(clonedElement, scope)` where: * * * `clonedElement` - is a clone of the original `element` passed into the compiler. * * `scope` - is the current scope with which the linking function is working with. @@ -8930,7 +9039,7 @@ function $HttpParamSerializerJQLikeProvider() { * @name $httpParamSerializerJQLike * @description * - * Alternative $http params serializer that follows jQuerys `param()` method {http://api.jquery.com/jquery.param/} logic. + * Alternative $http params serializer that follows jQuery's [`param()`](http://api.jquery.com/jquery.param/) method logic. * */ this.$get = function() { return paramSerializerFactory(true); @@ -9083,8 +9192,8 @@ function $HttpProvider() { * * - **`defaults.paramSerializer`** - {string|function(Object):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}. + * If specified as string, it is interpreted as a function registered with the {@link auto.$injector $injector}. + * Defaults to {@link ng.$httpParamSerializer $httpParamSerializer}. * **/ var defaults = this.defaults = { @@ -9615,11 +9724,11 @@ function $HttpProvider() {
- - +
@@ -16363,7 +16472,7 @@ function $SceDelegateProvider() { * Here's an example of a binding in a privileged context: * * ``` - * + * *
* ``` * @@ -17489,7 +17598,7 @@ function urlIsSameOrigin(requestUrl) { }]);
- +
@@ -17790,7 +17899,7 @@ function $FilterProvider($provide) { {name:'Julie', phone:'555-8765'}, {name:'Juliette', phone:'555-5678'}]">
- Search: + @@ -17799,10 +17908,10 @@ function $FilterProvider($provide) {
NamePhone

- Any:
- Name only
- Phone only
- Equality
+
+
+
+
@@ -18005,7 +18114,7 @@ function getTypeForFilter(val) { }]);
-
+
default currency symbol ($): {{amount | currency}}
custom currency identifier (USD$): {{amount | currency:"USD$"}} no fractions (0): {{amount | currency:"USD$":0}} @@ -18080,7 +18189,7 @@ function currencyFilter($locale) { }]);
- Enter number:
+
Default formatting: {{val | number}}
No fractions: {{val | number:0}}
Negative number: {{-val | number:4}} @@ -18595,11 +18704,20 @@ var uppercaseFilter = valueFn(uppercase); }]);
- Limit {{numbers}} to: +

Output numbers: {{ numbers | limitTo:numLimit }}

- Limit {{letters}} to: +

Output letters: {{ letters | limitTo:letterLimit }}

- Limit {{longNumber}} to: +

Output long number: {{ longNumber | limitTo:longNumberLimit }}

@@ -19073,12 +19191,12 @@ var htmlAnchorDirective = valueFn({ * * The buggy way to write it: * ```html - * + * Description * ``` * * The correct way to write it: * ```html - * + * Description * ``` * * @element IMG @@ -19099,12 +19217,12 @@ var htmlAnchorDirective = valueFn({ * * The buggy way to write it: * ```html - * + * Description * ``` * * The correct way to write it: * ```html - * + * Description * ``` * * @element IMG @@ -19141,7 +19259,7 @@ var htmlAnchorDirective = valueFn({ * @example - Click me to toggle:
+
@@ -19176,8 +19294,8 @@ var htmlAnchorDirective = valueFn({ * @example - Check me to check both:
- +
+
it('should check both checkBoxes', function() { @@ -19211,8 +19329,8 @@ var htmlAnchorDirective = valueFn({ * @example - Check me to make text readonly:
- +
+
it('should toggle readonly attr', function() { @@ -19247,8 +19365,8 @@ var htmlAnchorDirective = valueFn({ * @example - Check me to select:
-
+ @@ -19284,7 +19402,7 @@ var htmlAnchorDirective = valueFn({ * @example - Check me check multiple:
+
Show/Hide me
@@ -19987,13 +20105,16 @@ var inputType = { }]);
- Single word: - - Required! - - Single word only! - + +
+ + Required! + + Single word only! +
text = {{example.text}}
myForm.input.$valid = {{myForm.input.$valid}}
myForm.input.$error = {{myForm.input.$error}}
@@ -20072,13 +20193,15 @@ var inputType = { }]); - Pick a date in 2013: + - - Required! - - Not a valid date! +
+ + Required! + + Not a valid date! +
value = {{example.value | date: "yyyy-MM-dd"}}
myForm.input.$valid = {{myForm.input.$valid}}
myForm.input.$error = {{myForm.input.$error}}
@@ -20165,13 +20288,15 @@ var inputType = { }]); - Pick a date between in 2013: + - - Required! - - Not a valid date! +
+ + Required! + + Not a valid date! +
value = {{example.value | date: "yyyy-MM-ddTHH:mm:ss"}}
myForm.input.$valid = {{myForm.input.$valid}}
myForm.input.$error = {{myForm.input.$error}}
@@ -20259,13 +20384,15 @@ var inputType = { }]); - Pick a between 8am and 5pm: + - - Required! - - Not a valid date! +
+ + Required! + + Not a valid date! +
value = {{example.value | date: "HH:mm:ss"}}
myForm.input.$valid = {{myForm.input.$valid}}
myForm.input.$error = {{myForm.input.$error}}
@@ -20352,13 +20479,17 @@ var inputType = { }]); - Pick a date between in 2013: - - - Required! - - Not a valid date! + +
+ + Required! + + Not a valid date! +
value = {{example.value | date: "yyyy-Www"}}
myForm.input.$valid = {{myForm.input.$valid}}
myForm.input.$error = {{myForm.input.$error}}
@@ -20445,13 +20576,15 @@ var inputType = { }]); - Pick a month in 2013: + - - Required! - - Not a valid month! +
+ + Required! + + Not a valid month! +
value = {{example.value | date: "yyyy-MM"}}
myForm.input.$valid = {{myForm.input.$valid}}
myForm.input.$error = {{myForm.input.$error}}
@@ -20548,12 +20681,16 @@ var inputType = { }]); - Number: - - Required! - - Not valid number! + +
+ + Required! + + Not valid number! +
value = {{example.value}}
myForm.input.$valid = {{myForm.input.$valid}}
myForm.input.$error = {{myForm.input.$error}}
@@ -20638,11 +20775,15 @@ var inputType = { }]); - URL: - - Required! - - Not valid url! +
@@ -21579,7 +21747,7 @@ var ngValueDirective = function() { }]);
- Enter name:
+
Hello !
@@ -21640,8 +21808,8 @@ var ngBindDirective = ['$compile', function($compile) { }]);
- Salutation:
- Name:
+
+

        
@@ -21988,21 +22156,34 @@ function classDirective(name, selector) {

Map Syntax Example

- deleted (apply "strike" class)
- important (apply "bold" class)
- error (apply "red" class) +
+
+

Using String Syntax

- +

Using Array Syntax

-
-
-
+
+
+

Using Array and Map Syntax

-
- warning (apply "orange" class) +
+
.strike { @@ -22330,20 +22511,20 @@ var ngCloakDirective = ngDirective({ * * *
- * Name: - * [ greet ]
+ * + *
* Contact: *
    *
  • - * * * * - * - * [ clear - * | X ] + * + * + * *
  • - *
  • [ add ]
  • + *
  • *
*
*
@@ -22393,12 +22574,12 @@ var ngCloakDirective = ngDirective({ * expect(secondRepeat.element(by.model('contact.value')).getAttribute('value')) * .toBe('john.smith@example.org'); * - * firstRepeat.element(by.linkText('clear')).click(); + * firstRepeat.element(by.buttonText('clear')).click(); * * expect(firstRepeat.element(by.model('contact.value')).getAttribute('value')) * .toBe(''); * - * container.element(by.linkText('add')).click(); + * container.element(by.buttonText('add')).click(); * * expect(container.element(by.repeater('contact in settings.contacts').row(2)) * .element(by.model('contact.value')) @@ -22413,20 +22594,20 @@ var ngCloakDirective = ngDirective({ * * *
- * Name: - * [ greet ]
+ * + *
* Contact: *
    *
  • - * * * * - * - * [ clear - * | X ] + * + * + * *
  • - *
  • [ add ]
  • + *
  • [ ]
  • *
*
*
@@ -22476,12 +22657,12 @@ var ngCloakDirective = ngDirective({ * expect(secondRepeat.element(by.model('contact.value')).getAttribute('value')) * .toBe('john.smith@example.org'); * - * firstRepeat.element(by.linkText('clear')).click(); + * firstRepeat.element(by.buttonText('clear')).click(); * * expect(firstRepeat.element(by.model('contact.value')).getAttribute('value')) * .toBe(''); * - * container.element(by.linkText('add')).click(); + * container.element(by.buttonText('add')).click(); * * expect(container.element(by.repeater('contact in contacts').row(2)) * .element(by.model('contact.value')) @@ -23204,7 +23385,7 @@ forEach( * @example - Click me:
+
Show when checked: This is removed when the checkbox is unchecked. @@ -23672,9 +23853,11 @@ var ngInitDirective = ngDirective({ *
* *
- * List: - * + * + * + * * Required! + * *
* names = {{names}}
* myForm.namesInput.$valid = {{myForm.namesInput.$valid}}
@@ -23961,7 +24144,7 @@ is set to `true`. The parse error is stored in `ngModel.$error.parse`. required>Change me!
Required!
- + @@ -24243,12 +24426,14 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$ *

Now see what happens if you start typing then press the Escape key

* *
- *

With $rollbackViewValue()

- *
+ *

With $rollbackViewValue()

+ *
* myValue: "{{ myValue }}" * - *

Without $rollbackViewValue()

- *
+ *

Without $rollbackViewValue()

+ *
* myValue: "{{ myValue }}" * *
@@ -24712,10 +24897,13 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$ background: red; } - Update input to see transitions when valid/invalid. - Integer is a valid value. +

+ Update input to see transitions when valid/invalid. + Integer is a valid value. +

- + * @@ -24745,10 +24933,11 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
- Name: - +
user.name = 
@@ -24880,14 +25069,15 @@ var DEFAULT_REGEXP = /(\s+|^)default(\s+|$)/;
- Name: -
- - Other data: -
+
+
user.name = 
@@ -24935,11 +25125,13 @@ var DEFAULT_REGEXP = /(\s+|^)default(\s+|$)/;
- Name: - -
+ + +
user.name = 
@@ -24958,10 +25150,11 @@ var DEFAULT_REGEXP = /(\s+|^)default(\s+|$)/;
- Name: - +
user.name = 
@@ -25289,37 +25482,40 @@ var ngOptionsMinErr = minErr('ngOptions');
  • - Name: - Disabled? - [X] + + +
  • - [add] +

- Color (null not allowed): -
- - Color (null allowed): +
+
- Color grouped by shade: -
+
- Color grouped by shade, with some disabled: - -
+ +
- Select bogus.
+ Select . +

Currently selected: {{ {selected_color:myColor} }}
- Person 1:
- Person 2:
- Number of People:
+
+
+
Without Offset: @@ -26255,7 +26460,7 @@ var ngPluralizeDirective = ['$locale', '$interpolate', '$log', function($locale, {name:'Samantha', age:60, gender:'girl'} ]"> I have {{friends.length}} friends. They are: - +
  • [{{$index + 1}}] {{friend.name}} who is {{friend.age}} years old. @@ -26654,7 +26859,7 @@ var NG_HIDE_IN_PROGRESS_CLASS = 'ng-hide-animate'; * @example - Click me:
    + Click me:
    Show:
    @@ -26819,7 +27024,7 @@ var ngShowDirective = ['$animate', function($animate) { * @example - Click me:
    + Click me:
    Show:
    @@ -27184,8 +27389,8 @@ var ngSwitchDefaultDirective = ngDirective({ }]);
    -
    -
    +
    +
    {{text}}
    @@ -27312,19 +27517,6 @@ var SelectController = if (self.unknownOption.parent()) self.unknownOption.remove(); }; - // Here we find the option that represents the "empty" value, i.e. the option with a value - // of `""`. This option needs to be accessed (to select it directly) when setting the value - // of the select to `""` because IE9 will not automatically select the option. - // - // Additionally, the `ngOptions` directive uses this option to allow the application developer - // to provide their own custom "empty" option when the viewValue does not match any of the - // option values. - for (var i = 0, children = $element.children(), ii = children.length; i < ii; i++) { - if (children[i].value === '') { - self.emptyOption = children.eq(i); - break; - } - } // Read the value of the select control, the implementation of this changes depending // upon whether the select can have multiple values and whether ngOptions is at work. @@ -27353,8 +27545,11 @@ var SelectController = // Tell the select control that an option, with the given value, has been added - self.addOption = function(value) { + self.addOption = function(value, element) { assertNotHasOwnProperty(value, '"option value"'); + if (value === '') { + self.emptyOption = element; + } var count = optionsMap.get(value) || 0; optionsMap.put(value, count + 1); }; @@ -27365,6 +27560,9 @@ var SelectController = if (count) { if (count === 1) { optionsMap.remove(value); + if (value === '') { + self.emptyOption = undefined; + } } else { optionsMap.put(value, count - 1); } diff --git a/js/vendor/angular/angular.min.js b/js/vendor/angular/angular.min.js index 31445895b..375e4b0bd 100644 --- a/js/vendor/angular/angular.min.js +++ b/js/vendor/angular/angular.min.js @@ -1,199 +1,199 @@ /* - AngularJS v1.4.0-rc.0 + AngularJS v1.4.0-rc.1 (c) 2010-2015 Google, Inc. http://angularjs.org License: MIT */ -(function(P,X,u){'use strict';function J(b){return function(){var a=arguments[0],c;c="["+(b?b+":":"")+a+"] http://errors.angularjs.org/1.4.0-rc.0/"+(b?b+"/":"")+a;for(a=1;a").append(b).html();try{return b[0].nodeType===Za?N(c):c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+N(b)})}catch(d){return N(c)}}function rc(b){try{return decodeURIComponent(b)}catch(a){}} -function sc(b){var a={},c,d;n((b||"").split("&"),function(b){b&&(c=b.replace(/\+/g,"%20").split("="),d=rc(c[0]),x(d)&&(b=x(c[1])?rc(c[1]):!0,tc.call(a,d)?K(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){K(b)?n(b,function(b){a.push(ua(d,!0)+(!0===b?"":"="+ua(b,!0)))}):a.push(ua(d,!0)+(!0===b?"":"="+ua(b,!0)))});return a.length?a.join("&"):""}function kb(b){return ua(b,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function ua(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 Td(b,a){var c,d,e=Ka.length;for(d=0;d/,">"));}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=$a(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!/;P&&e.test(P.name)&&(c.debugInfoEnabled=!0,P.name=P.name.replace(e,""));if(P&&!f.test(P.name))return d();P.name=P.name.replace(f,"");ba.resumeBootstrap=function(b){n(b,function(b){a.push(b)});return d()};H(ba.resumeDeferredBootstrap)&&ba.resumeDeferredBootstrap()}function Vd(){P.name="NG_ENABLE_DEBUG_INFO!"+P.name;P.location.reload()}function Wd(b){b=ba.element(b).injector();if(!b)throw Da("test");return b.get("$$testability")} -function vc(b,a){a=a||"_";return b.replace(Xd,function(b,d){return(d?a:"")+b.toLowerCase()})}function Yd(){var b;if(!wc){var a=lb();ja=P.jQuery;x(a)&&(ja=null===a?u:P[a]);ja&&ja.fn.on?(F=ja,Q(ja.fn,{scope:La.scope,isolateScope:La.isolateScope,controller:La.controller,injector:La.injector,inheritedData:La.inheritedData}),b=ja.cleanData,ja.cleanData=function(a){var d;if(Ob)Ob=!1;else for(var e=0,f;null!=(f=a[e]);e++)(d=ja._data(f,"events"))&&d.$destroy&&ja(f).triggerHandler("$destroy");b(a)}):F=R;ba.element= -F;wc=!0}}function Pb(b,a,c){if(!b)throw Da("areq",a||"?",c||"required");return b}function Ma(b,a,c){c&&K(b)&&(b=b[b.length-1]);Pb(H(b),a,"not a function, got "+(b&&"object"===typeof b?b.construct
NamePhone