From 39fb73a2a8298991ece01d9f5ea0d570e0afb9b4 Mon Sep 17 00:00:00 2001 From: Spencer Alger Date: Tue, 23 Sep 2014 08:32:33 -0700 Subject: [PATCH] added angular and angular-mocks as bower_components, jquery as npm dep --- .npmignore | 1 + bower_components/angular-mocks/.bower.json | 19 + bower_components/angular-mocks/README.md | 42 + .../angular-mocks/angular-mocks.js | 2177 ++++ bower_components/angular-mocks/bower.json | 8 + bower_components/angular/.bower.json | 16 + bower_components/angular/README.md | 48 + bower_components/angular/angular-csp.css | 24 + .../angular}/angular.js | 3159 +++--- bower_components/angular/angular.min.js | 216 + bower_components/angular/angular.min.js.gzip | Bin 0 -> 39789 bytes bower_components/angular/angular.min.js.map | 8 + bower_components/angular/bower.json | 7 + package.json | 3 +- test/utils/jquery.js | 9789 ----------------- test/utils/server.js | 5 +- 16 files changed, 4378 insertions(+), 11144 deletions(-) create mode 100644 bower_components/angular-mocks/.bower.json create mode 100644 bower_components/angular-mocks/README.md create mode 100644 bower_components/angular-mocks/angular-mocks.js create mode 100644 bower_components/angular-mocks/bower.json create mode 100644 bower_components/angular/.bower.json create mode 100644 bower_components/angular/README.md create mode 100644 bower_components/angular/angular-csp.css rename {test/utils => bower_components/angular}/angular.js (90%) create mode 100644 bower_components/angular/angular.min.js create mode 100644 bower_components/angular/angular.min.js.gzip create mode 100644 bower_components/angular/angular.min.js.map create mode 100644 bower_components/angular/bower.json delete mode 100644 test/utils/jquery.js diff --git a/.npmignore b/.npmignore index cc7d29402..d84e99b35 100644 --- a/.npmignore +++ b/.npmignore @@ -1,4 +1,5 @@ dist +bower_components npm-debug.log node_modules scripts/scratch* diff --git a/bower_components/angular-mocks/.bower.json b/bower_components/angular-mocks/.bower.json new file mode 100644 index 000000000..e15011874 --- /dev/null +++ b/bower_components/angular-mocks/.bower.json @@ -0,0 +1,19 @@ +{ + "name": "angular-mocks", + "version": "1.2.25", + "main": "./angular-mocks.js", + "dependencies": { + "angular": "1.2.25" + }, + "homepage": "https://github.com/angular/bower-angular-mocks", + "_release": "1.2.25", + "_resolution": { + "type": "version", + "tag": "v1.2.25", + "commit": "e3351b37d02cfc1a9302f3eb57febc3acb77d0c8" + }, + "_source": "git://github.com/angular/bower-angular-mocks.git", + "_target": "~1.2.25", + "_originalSource": "angular-mocks", + "_direct": true +} \ No newline at end of file diff --git a/bower_components/angular-mocks/README.md b/bower_components/angular-mocks/README.md new file mode 100644 index 000000000..3448d2849 --- /dev/null +++ b/bower_components/angular-mocks/README.md @@ -0,0 +1,42 @@ +# bower-angular-mocks + +This repo is for distribution on `bower`. The source for this module is in the +[main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngMock). +Please file issues and pull requests against that repo. + +## Install + +Install with `bower`: + +```shell +bower install angular-mocks +``` + +## Documentation + +Documentation is available on the +[AngularJS docs site](http://docs.angularjs.org/guide/dev_guide.unit-testing). + +## License + +The MIT License + +Copyright (c) 2010-2012 Google, Inc. http://angularjs.org + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/bower_components/angular-mocks/angular-mocks.js b/bower_components/angular-mocks/angular-mocks.js new file mode 100644 index 000000000..054bb0b9b --- /dev/null +++ b/bower_components/angular-mocks/angular-mocks.js @@ -0,0 +1,2177 @@ +/** + * @license AngularJS v1.2.25 + * (c) 2010-2014 Google, Inc. http://angularjs.org + * License: MIT + */ +(function(window, angular, undefined) { + +'use strict'; + +/** + * @ngdoc object + * @name angular.mock + * @description + * + * Namespace from 'angular-mocks.js' which contains testing related code. + */ +angular.mock = {}; + +/** + * ! This is a private undocumented service ! + * + * @name $browser + * + * @description + * This service is a mock implementation of {@link ng.$browser}. It provides fake + * implementation for commonly used browser apis that are hard to test, e.g. setTimeout, xhr, + * cookies, etc... + * + * The api of this service is the same as that of the real {@link ng.$browser $browser}, except + * that there are several helper methods available which can be used in tests. + */ +angular.mock.$BrowserProvider = function() { + this.$get = function() { + return new angular.mock.$Browser(); + }; +}; + +angular.mock.$Browser = function() { + var self = this; + + this.isMock = true; + self.$$url = "http://server/"; + self.$$lastUrl = self.$$url; // used by url polling fn + self.pollFns = []; + + // TODO(vojta): remove this temporary api + self.$$completeOutstandingRequest = angular.noop; + self.$$incOutstandingRequestCount = angular.noop; + + + // register url polling fn + + self.onUrlChange = function(listener) { + self.pollFns.push( + function() { + if (self.$$lastUrl != self.$$url) { + self.$$lastUrl = self.$$url; + listener(self.$$url); + } + } + ); + + return listener; + }; + + self.$$checkUrlChange = angular.noop; + + self.cookieHash = {}; + self.lastCookieHash = {}; + self.deferredFns = []; + self.deferredNextId = 0; + + self.defer = function(fn, delay) { + delay = delay || 0; + self.deferredFns.push({time:(self.defer.now + delay), fn:fn, id: self.deferredNextId}); + self.deferredFns.sort(function(a,b){ return a.time - b.time;}); + return self.deferredNextId++; + }; + + + /** + * @name $browser#defer.now + * + * @description + * Current milliseconds mock time. + */ + self.defer.now = 0; + + + self.defer.cancel = function(deferId) { + var fnIndex; + + angular.forEach(self.deferredFns, function(fn, index) { + if (fn.id === deferId) fnIndex = index; + }); + + if (fnIndex !== undefined) { + self.deferredFns.splice(fnIndex, 1); + return true; + } + + return false; + }; + + + /** + * @name $browser#defer.flush + * + * @description + * Flushes all pending requests and executes the defer callbacks. + * + * @param {number=} number of milliseconds to flush. See {@link #defer.now} + */ + self.defer.flush = function(delay) { + if (angular.isDefined(delay)) { + self.defer.now += delay; + } else { + if (self.deferredFns.length) { + self.defer.now = self.deferredFns[self.deferredFns.length-1].time; + } else { + throw new Error('No deferred tasks to be flushed'); + } + } + + while (self.deferredFns.length && self.deferredFns[0].time <= self.defer.now) { + self.deferredFns.shift().fn(); + } + }; + + self.$$baseHref = ''; + self.baseHref = function() { + return this.$$baseHref; + }; +}; +angular.mock.$Browser.prototype = { + +/** + * @name $browser#poll + * + * @description + * run all fns in pollFns + */ + poll: function poll() { + angular.forEach(this.pollFns, function(pollFn){ + pollFn(); + }); + }, + + addPollFn: function(pollFn) { + this.pollFns.push(pollFn); + return pollFn; + }, + + url: function(url, replace) { + if (url) { + this.$$url = url; + return this; + } + + return this.$$url; + }, + + cookies: function(name, value) { + if (name) { + if (angular.isUndefined(value)) { + delete this.cookieHash[name]; + } else { + if (angular.isString(value) && //strings only + value.length <= 4096) { //strict cookie storage limits + this.cookieHash[name] = value; + } + } + } else { + if (!angular.equals(this.cookieHash, this.lastCookieHash)) { + this.lastCookieHash = angular.copy(this.cookieHash); + this.cookieHash = angular.copy(this.cookieHash); + } + return this.cookieHash; + } + }, + + notifyWhenNoOutstandingRequests: function(fn) { + fn(); + } +}; + + +/** + * @ngdoc provider + * @name $exceptionHandlerProvider + * + * @description + * Configures the mock implementation of {@link ng.$exceptionHandler} to rethrow or to log errors + * passed into the `$exceptionHandler`. + */ + +/** + * @ngdoc service + * @name $exceptionHandler + * + * @description + * Mock implementation of {@link ng.$exceptionHandler} that rethrows or logs errors passed + * into it. See {@link ngMock.$exceptionHandlerProvider $exceptionHandlerProvider} for configuration + * information. + * + * + * ```js + * describe('$exceptionHandlerProvider', function() { + * + * it('should capture log messages and exceptions', function() { + * + * module(function($exceptionHandlerProvider) { + * $exceptionHandlerProvider.mode('log'); + * }); + * + * inject(function($log, $exceptionHandler, $timeout) { + * $timeout(function() { $log.log(1); }); + * $timeout(function() { $log.log(2); throw 'banana peel'; }); + * $timeout(function() { $log.log(3); }); + * expect($exceptionHandler.errors).toEqual([]); + * expect($log.assertEmpty()); + * $timeout.flush(); + * expect($exceptionHandler.errors).toEqual(['banana peel']); + * expect($log.log.logs).toEqual([[1], [2], [3]]); + * }); + * }); + * }); + * ``` + */ + +angular.mock.$ExceptionHandlerProvider = function() { + var handler; + + /** + * @ngdoc method + * @name $exceptionHandlerProvider#mode + * + * @description + * Sets the logging mode. + * + * @param {string} mode Mode of operation, defaults to `rethrow`. + * + * - `rethrow`: If any errors are passed into the handler in tests, it typically + * means that there is a bug in the application or test, so this mock will + * make these tests fail. + * - `log`: Sometimes it is desirable to test that an error is thrown, for this case the `log` + * mode stores an array of errors in `$exceptionHandler.errors`, to allow later + * assertion of them. See {@link ngMock.$log#assertEmpty assertEmpty()} and + * {@link ngMock.$log#reset reset()} + */ + this.mode = function(mode) { + switch(mode) { + case 'rethrow': + handler = function(e) { + throw e; + }; + break; + case 'log': + var errors = []; + + handler = function(e) { + if (arguments.length == 1) { + errors.push(e); + } else { + errors.push([].slice.call(arguments, 0)); + } + }; + + handler.errors = errors; + break; + default: + throw new Error("Unknown mode '" + mode + "', only 'log'/'rethrow' modes are allowed!"); + } + }; + + this.$get = function() { + return handler; + }; + + this.mode('rethrow'); +}; + + +/** + * @ngdoc service + * @name $log + * + * @description + * Mock implementation of {@link ng.$log} that gathers all logged messages in arrays + * (one array per logging level). These arrays are exposed as `logs` property of each of the + * level-specific log function, e.g. for level `error` the array is exposed as `$log.error.logs`. + * + */ +angular.mock.$LogProvider = function() { + var debug = true; + + function concat(array1, array2, index) { + return array1.concat(Array.prototype.slice.call(array2, index)); + } + + this.debugEnabled = function(flag) { + if (angular.isDefined(flag)) { + debug = flag; + return this; + } else { + return debug; + } + }; + + this.$get = function () { + var $log = { + log: function() { $log.log.logs.push(concat([], arguments, 0)); }, + warn: function() { $log.warn.logs.push(concat([], arguments, 0)); }, + info: function() { $log.info.logs.push(concat([], arguments, 0)); }, + error: function() { $log.error.logs.push(concat([], arguments, 0)); }, + debug: function() { + if (debug) { + $log.debug.logs.push(concat([], arguments, 0)); + } + } + }; + + /** + * @ngdoc method + * @name $log#reset + * + * @description + * Reset all of the logging arrays to empty. + */ + $log.reset = function () { + /** + * @ngdoc property + * @name $log#log.logs + * + * @description + * Array of messages logged using {@link ngMock.$log#log}. + * + * @example + * ```js + * $log.log('Some Log'); + * var first = $log.log.logs.unshift(); + * ``` + */ + $log.log.logs = []; + /** + * @ngdoc property + * @name $log#info.logs + * + * @description + * Array of messages logged using {@link ngMock.$log#info}. + * + * @example + * ```js + * $log.info('Some Info'); + * var first = $log.info.logs.unshift(); + * ``` + */ + $log.info.logs = []; + /** + * @ngdoc property + * @name $log#warn.logs + * + * @description + * Array of messages logged using {@link ngMock.$log#warn}. + * + * @example + * ```js + * $log.warn('Some Warning'); + * var first = $log.warn.logs.unshift(); + * ``` + */ + $log.warn.logs = []; + /** + * @ngdoc property + * @name $log#error.logs + * + * @description + * Array of messages logged using {@link ngMock.$log#error}. + * + * @example + * ```js + * $log.error('Some Error'); + * var first = $log.error.logs.unshift(); + * ``` + */ + $log.error.logs = []; + /** + * @ngdoc property + * @name $log#debug.logs + * + * @description + * Array of messages logged using {@link ngMock.$log#debug}. + * + * @example + * ```js + * $log.debug('Some Error'); + * var first = $log.debug.logs.unshift(); + * ``` + */ + $log.debug.logs = []; + }; + + /** + * @ngdoc method + * @name $log#assertEmpty + * + * @description + * Assert that the all of the logging methods have no logged messages. If messages present, an + * exception is thrown. + */ + $log.assertEmpty = function() { + var errors = []; + angular.forEach(['error', 'warn', 'info', 'log', 'debug'], function(logLevel) { + angular.forEach($log[logLevel].logs, function(log) { + angular.forEach(log, function (logItem) { + errors.push('MOCK $log (' + logLevel + '): ' + String(logItem) + '\n' + + (logItem.stack || '')); + }); + }); + }); + if (errors.length) { + errors.unshift("Expected $log to be empty! Either a message was logged unexpectedly, or "+ + "an expected log message was not checked and removed:"); + errors.push(''); + throw new Error(errors.join('\n---------\n')); + } + }; + + $log.reset(); + return $log; + }; +}; + + +/** + * @ngdoc service + * @name $interval + * + * @description + * Mock implementation of the $interval service. + * + * Use {@link ngMock.$interval#flush `$interval.flush(millis)`} to + * move forward by `millis` milliseconds and trigger any functions scheduled to run in that + * time. + * + * @param {function()} fn A function that should be called repeatedly. + * @param {number} delay Number of milliseconds between each function call. + * @param {number=} [count=0] Number of times to repeat. If not set, or 0, will repeat + * indefinitely. + * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise + * will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block. + * @returns {promise} A promise which will be notified on each iteration. + */ +angular.mock.$IntervalProvider = function() { + this.$get = ['$rootScope', '$q', + function($rootScope, $q) { + var repeatFns = [], + nextRepeatId = 0, + now = 0; + + var $interval = function(fn, delay, count, invokeApply) { + var deferred = $q.defer(), + promise = deferred.promise, + iteration = 0, + skipApply = (angular.isDefined(invokeApply) && !invokeApply); + + count = (angular.isDefined(count)) ? count : 0; + promise.then(null, null, fn); + + promise.$$intervalId = nextRepeatId; + + function tick() { + deferred.notify(iteration++); + + if (count > 0 && iteration >= count) { + var fnIndex; + deferred.resolve(iteration); + + angular.forEach(repeatFns, function(fn, index) { + if (fn.id === promise.$$intervalId) fnIndex = index; + }); + + if (fnIndex !== undefined) { + repeatFns.splice(fnIndex, 1); + } + } + + if (!skipApply) $rootScope.$apply(); + } + + repeatFns.push({ + nextTime:(now + delay), + delay: delay, + fn: tick, + id: nextRepeatId, + deferred: deferred + }); + repeatFns.sort(function(a,b){ return a.nextTime - b.nextTime;}); + + nextRepeatId++; + return promise; + }; + /** + * @ngdoc method + * @name $interval#cancel + * + * @description + * Cancels a task associated with the `promise`. + * + * @param {promise} promise A promise from calling the `$interval` function. + * @returns {boolean} Returns `true` if the task was successfully cancelled. + */ + $interval.cancel = function(promise) { + if(!promise) return false; + var fnIndex; + + angular.forEach(repeatFns, function(fn, index) { + if (fn.id === promise.$$intervalId) fnIndex = index; + }); + + if (fnIndex !== undefined) { + repeatFns[fnIndex].deferred.reject('canceled'); + repeatFns.splice(fnIndex, 1); + return true; + } + + return false; + }; + + /** + * @ngdoc method + * @name $interval#flush + * @description + * + * Runs interval tasks scheduled to be run in the next `millis` milliseconds. + * + * @param {number=} millis maximum timeout amount to flush up until. + * + * @return {number} The amount of time moved forward. + */ + $interval.flush = function(millis) { + now += millis; + while (repeatFns.length && repeatFns[0].nextTime <= now) { + var task = repeatFns[0]; + task.fn(); + task.nextTime += task.delay; + repeatFns.sort(function(a,b){ return a.nextTime - b.nextTime;}); + } + return millis; + }; + + return $interval; + }]; +}; + + +/* jshint -W101 */ +/* The R_ISO8061_STR regex is never going to fit into the 100 char limit! + * This directive should go inside the anonymous function but a bug in JSHint means that it would + * not be enacted early enough to prevent the warning. + */ +var R_ISO8061_STR = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?:\:?(\d\d)(?:\:?(\d\d)(?:\.(\d{3}))?)?)?(Z|([+-])(\d\d):?(\d\d)))?$/; + +function jsonStringToDate(string) { + var match; + if (match = string.match(R_ISO8061_STR)) { + var date = new Date(0), + tzHour = 0, + tzMin = 0; + if (match[9]) { + tzHour = int(match[9] + match[10]); + tzMin = int(match[9] + match[11]); + } + date.setUTCFullYear(int(match[1]), int(match[2]) - 1, int(match[3])); + date.setUTCHours(int(match[4]||0) - tzHour, + int(match[5]||0) - tzMin, + int(match[6]||0), + int(match[7]||0)); + return date; + } + return string; +} + +function int(str) { + return parseInt(str, 10); +} + +function padNumber(num, digits, trim) { + var neg = ''; + if (num < 0) { + neg = '-'; + num = -num; + } + num = '' + num; + while(num.length < digits) num = '0' + num; + if (trim) + num = num.substr(num.length - digits); + return neg + num; +} + + +/** + * @ngdoc type + * @name angular.mock.TzDate + * @description + * + * *NOTE*: this is not an injectable instance, just a globally available mock class of `Date`. + * + * Mock of the Date type which has its timezone specified via constructor arg. + * + * The main purpose is to create Date-like instances with timezone fixed to the specified timezone + * offset, so that we can test code that depends on local timezone settings without dependency on + * the time zone settings of the machine where the code is running. + * + * @param {number} offset Offset of the *desired* timezone in hours (fractions will be honored) + * @param {(number|string)} timestamp Timestamp representing the desired time in *UTC* + * + * @example + * !!!! WARNING !!!!! + * This is not a complete Date object so only methods that were implemented can be called safely. + * To make matters worse, TzDate instances inherit stuff from Date via a prototype. + * + * We do our best to intercept calls to "unimplemented" methods, but since the list of methods is + * incomplete we might be missing some non-standard methods. This can result in errors like: + * "Date.prototype.foo called on incompatible Object". + * + * ```js + * var newYearInBratislava = new TzDate(-1, '2009-12-31T23:00:00Z'); + * newYearInBratislava.getTimezoneOffset() => -60; + * newYearInBratislava.getFullYear() => 2010; + * newYearInBratislava.getMonth() => 0; + * newYearInBratislava.getDate() => 1; + * newYearInBratislava.getHours() => 0; + * newYearInBratislava.getMinutes() => 0; + * newYearInBratislava.getSeconds() => 0; + * ``` + * + */ +angular.mock.TzDate = function (offset, timestamp) { + var self = new Date(0); + if (angular.isString(timestamp)) { + var tsStr = timestamp; + + self.origDate = jsonStringToDate(timestamp); + + timestamp = self.origDate.getTime(); + if (isNaN(timestamp)) + throw { + name: "Illegal Argument", + message: "Arg '" + tsStr + "' passed into TzDate constructor is not a valid date string" + }; + } else { + self.origDate = new Date(timestamp); + } + + var localOffset = new Date(timestamp).getTimezoneOffset(); + self.offsetDiff = localOffset*60*1000 - offset*1000*60*60; + self.date = new Date(timestamp + self.offsetDiff); + + self.getTime = function() { + return self.date.getTime() - self.offsetDiff; + }; + + self.toLocaleDateString = function() { + return self.date.toLocaleDateString(); + }; + + self.getFullYear = function() { + return self.date.getFullYear(); + }; + + self.getMonth = function() { + return self.date.getMonth(); + }; + + self.getDate = function() { + return self.date.getDate(); + }; + + self.getHours = function() { + return self.date.getHours(); + }; + + self.getMinutes = function() { + return self.date.getMinutes(); + }; + + self.getSeconds = function() { + return self.date.getSeconds(); + }; + + self.getMilliseconds = function() { + return self.date.getMilliseconds(); + }; + + self.getTimezoneOffset = function() { + return offset * 60; + }; + + self.getUTCFullYear = function() { + return self.origDate.getUTCFullYear(); + }; + + self.getUTCMonth = function() { + return self.origDate.getUTCMonth(); + }; + + self.getUTCDate = function() { + return self.origDate.getUTCDate(); + }; + + self.getUTCHours = function() { + return self.origDate.getUTCHours(); + }; + + self.getUTCMinutes = function() { + return self.origDate.getUTCMinutes(); + }; + + self.getUTCSeconds = function() { + return self.origDate.getUTCSeconds(); + }; + + self.getUTCMilliseconds = function() { + return self.origDate.getUTCMilliseconds(); + }; + + self.getDay = function() { + return self.date.getDay(); + }; + + // provide this method only on browsers that already have it + if (self.toISOString) { + self.toISOString = function() { + return padNumber(self.origDate.getUTCFullYear(), 4) + '-' + + padNumber(self.origDate.getUTCMonth() + 1, 2) + '-' + + padNumber(self.origDate.getUTCDate(), 2) + 'T' + + padNumber(self.origDate.getUTCHours(), 2) + ':' + + padNumber(self.origDate.getUTCMinutes(), 2) + ':' + + padNumber(self.origDate.getUTCSeconds(), 2) + '.' + + padNumber(self.origDate.getUTCMilliseconds(), 3) + 'Z'; + }; + } + + //hide all methods not implemented in this mock that the Date prototype exposes + var unimplementedMethods = ['getUTCDay', + 'getYear', 'setDate', 'setFullYear', 'setHours', 'setMilliseconds', + 'setMinutes', 'setMonth', 'setSeconds', 'setTime', 'setUTCDate', 'setUTCFullYear', + 'setUTCHours', 'setUTCMilliseconds', 'setUTCMinutes', 'setUTCMonth', 'setUTCSeconds', + 'setYear', 'toDateString', 'toGMTString', 'toJSON', 'toLocaleFormat', 'toLocaleString', + 'toLocaleTimeString', 'toSource', 'toString', 'toTimeString', 'toUTCString', 'valueOf']; + + angular.forEach(unimplementedMethods, function(methodName) { + self[methodName] = function() { + throw new Error("Method '" + methodName + "' is not implemented in the TzDate mock"); + }; + }); + + return self; +}; + +//make "tzDateInstance instanceof Date" return true +angular.mock.TzDate.prototype = Date.prototype; +/* jshint +W101 */ + +angular.mock.animate = angular.module('ngAnimateMock', ['ng']) + + .config(['$provide', function($provide) { + + var reflowQueue = []; + $provide.value('$$animateReflow', function(fn) { + var index = reflowQueue.length; + reflowQueue.push(fn); + return function cancel() { + reflowQueue.splice(index, 1); + }; + }); + + $provide.decorator('$animate', function($delegate, $$asyncCallback) { + var animate = { + queue : [], + enabled : $delegate.enabled, + triggerCallbacks : function() { + $$asyncCallback.flush(); + }, + triggerReflow : function() { + angular.forEach(reflowQueue, function(fn) { + fn(); + }); + reflowQueue = []; + } + }; + + angular.forEach( + ['enter','leave','move','addClass','removeClass','setClass'], function(method) { + animate[method] = function() { + animate.queue.push({ + event : method, + element : arguments[0], + args : arguments + }); + $delegate[method].apply($delegate, arguments); + }; + }); + + return animate; + }); + + }]); + + +/** + * @ngdoc function + * @name angular.mock.dump + * @description + * + * *NOTE*: this is not an injectable instance, just a globally available function. + * + * Method for serializing common angular objects (scope, elements, etc..) into strings, useful for + * debugging. + * + * This method is also available on window, where it can be used to display objects on debug + * console. + * + * @param {*} object - any object to turn into string. + * @return {string} a serialized string of the argument + */ +angular.mock.dump = function(object) { + return serialize(object); + + function serialize(object) { + var out; + + if (angular.isElement(object)) { + object = angular.element(object); + out = angular.element('
'); + angular.forEach(object, function(element) { + out.append(angular.element(element).clone()); + }); + out = out.html(); + } else if (angular.isArray(object)) { + out = []; + angular.forEach(object, function(o) { + out.push(serialize(o)); + }); + out = '[ ' + out.join(', ') + ' ]'; + } else if (angular.isObject(object)) { + if (angular.isFunction(object.$eval) && angular.isFunction(object.$apply)) { + out = serializeScope(object); + } else if (object instanceof Error) { + out = object.stack || ('' + object.name + ': ' + object.message); + } else { + // TODO(i): this prevents methods being logged, + // we should have a better way to serialize objects + out = angular.toJson(object, true); + } + } else { + out = String(object); + } + + return out; + } + + function serializeScope(scope, offset) { + offset = offset || ' '; + var log = [offset + 'Scope(' + scope.$id + '): {']; + for ( var key in scope ) { + if (Object.prototype.hasOwnProperty.call(scope, key) && !key.match(/^(\$|this)/)) { + log.push(' ' + key + ': ' + angular.toJson(scope[key])); + } + } + var child = scope.$$childHead; + while(child) { + log.push(serializeScope(child, offset + ' ')); + child = child.$$nextSibling; + } + log.push('}'); + return log.join('\n' + offset); + } +}; + +/** + * @ngdoc service + * @name $httpBackend + * @description + * Fake HTTP backend implementation suitable for unit testing applications that use the + * {@link ng.$http $http service}. + * + * *Note*: For fake HTTP backend implementation suitable for end-to-end testing or backend-less + * development please see {@link ngMockE2E.$httpBackend e2e $httpBackend mock}. + * + * During unit testing, we want our unit tests to run quickly and have no external dependencies so + * we don’t want to send [XHR](https://developer.mozilla.org/en/xmlhttprequest) or + * [JSONP](http://en.wikipedia.org/wiki/JSONP) requests to a real server. All we really need is + * to verify whether a certain request has been sent or not, or alternatively just let the + * application make requests, respond with pre-trained responses and assert that the end result is + * what we expect it to be. + * + * This mock implementation can be used to respond with static or dynamic responses via the + * `expect` and `when` apis and their shortcuts (`expectGET`, `whenPOST`, etc). + * + * When an Angular application needs some data from a server, it calls the $http service, which + * sends the request to a real server using $httpBackend service. With dependency injection, it is + * easy to inject $httpBackend mock (which has the same API as $httpBackend) and use it to verify + * the requests and respond with some testing data without sending a request to a real server. + * + * There are two ways to specify what test data should be returned as http responses by the mock + * backend when the code under test makes http requests: + * + * - `$httpBackend.expect` - specifies a request expectation + * - `$httpBackend.when` - specifies a backend definition + * + * + * # Request Expectations vs Backend Definitions + * + * Request expectations provide a way to make assertions about requests made by the application and + * to define responses for those requests. The test will fail if the expected requests are not made + * or they are made in the wrong order. + * + * Backend definitions allow you to define a fake backend for your application which doesn't assert + * if a particular request was made or not, it just returns a trained response if a request is made. + * The test will pass whether or not the request gets made during testing. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
Request expectationsBackend definitions
Syntax.expect(...).respond(...).when(...).respond(...)
Typical usagestrict unit testsloose (black-box) unit testing
Fulfills multiple requestsNOYES
Order of requests mattersYESNO
Request requiredYESNO
Response requiredoptional (see below)YES
+ * + * In cases where both backend definitions and request expectations are specified during unit + * testing, the request expectations are evaluated first. + * + * If a request expectation has no response specified, the algorithm will search your backend + * definitions for an appropriate response. + * + * If a request didn't match any expectation or if the expectation doesn't have the response + * defined, the backend definitions are evaluated in sequential order to see if any of them match + * the request. The response from the first matched definition is returned. + * + * + * # Flushing HTTP requests + * + * The $httpBackend used in production always responds to requests asynchronously. If we preserved + * this behavior in unit testing, we'd have to create async unit tests, which are hard to write, + * to follow and to maintain. But neither can the testing mock respond synchronously; that would + * change the execution of the code under test. For this reason, the mock $httpBackend has a + * `flush()` method, which allows the test to explicitly flush pending requests. This preserves + * the async api of the backend, while allowing the test to execute synchronously. + * + * + * # Unit testing with mock $httpBackend + * The following code shows how to setup and use the mock backend when unit testing a controller. + * First we create the controller under test: + * + ```js + // The controller code + function MyController($scope, $http) { + var authToken; + + $http.get('/auth.py').success(function(data, status, headers) { + authToken = headers('A-Token'); + $scope.user = data; + }); + + $scope.saveMessage = function(message) { + var headers = { 'Authorization': authToken }; + $scope.status = 'Saving...'; + + $http.post('/add-msg.py', message, { headers: headers } ).success(function(response) { + $scope.status = ''; + }).error(function() { + $scope.status = 'ERROR!'; + }); + }; + } + ``` + * + * Now we setup the mock backend and create the test specs: + * + ```js + // testing controller + describe('MyController', function() { + var $httpBackend, $rootScope, createController; + + beforeEach(inject(function($injector) { + // Set up the mock http service responses + $httpBackend = $injector.get('$httpBackend'); + // backend definition common for all tests + $httpBackend.when('GET', '/auth.py').respond({userId: 'userX'}, {'A-Token': 'xxx'}); + + // Get hold of a scope (i.e. the root scope) + $rootScope = $injector.get('$rootScope'); + // The $controller service is used to create instances of controllers + var $controller = $injector.get('$controller'); + + createController = function() { + return $controller('MyController', {'$scope' : $rootScope }); + }; + })); + + + afterEach(function() { + $httpBackend.verifyNoOutstandingExpectation(); + $httpBackend.verifyNoOutstandingRequest(); + }); + + + it('should fetch authentication token', function() { + $httpBackend.expectGET('/auth.py'); + var controller = createController(); + $httpBackend.flush(); + }); + + + it('should send msg to server', function() { + var controller = createController(); + $httpBackend.flush(); + + // now you don’t care about the authentication, but + // the controller will still send the request and + // $httpBackend will respond without you having to + // specify the expectation and response for this request + + $httpBackend.expectPOST('/add-msg.py', 'message content').respond(201, ''); + $rootScope.saveMessage('message content'); + expect($rootScope.status).toBe('Saving...'); + $httpBackend.flush(); + expect($rootScope.status).toBe(''); + }); + + + it('should send auth header', function() { + var controller = createController(); + $httpBackend.flush(); + + $httpBackend.expectPOST('/add-msg.py', undefined, function(headers) { + // check if the header was send, if it wasn't the expectation won't + // match the request and the test will fail + return headers['Authorization'] == 'xxx'; + }).respond(201, ''); + + $rootScope.saveMessage('whatever'); + $httpBackend.flush(); + }); + }); + ``` + */ +angular.mock.$HttpBackendProvider = function() { + this.$get = ['$rootScope', createHttpBackendMock]; +}; + +/** + * General factory function for $httpBackend mock. + * Returns instance for unit testing (when no arguments specified): + * - passing through is disabled + * - auto flushing is disabled + * + * Returns instance for e2e testing (when `$delegate` and `$browser` specified): + * - passing through (delegating request to real backend) is enabled + * - auto flushing is enabled + * + * @param {Object=} $delegate Real $httpBackend instance (allow passing through if specified) + * @param {Object=} $browser Auto-flushing enabled if specified + * @return {Object} Instance of $httpBackend mock + */ +function createHttpBackendMock($rootScope, $delegate, $browser) { + var definitions = [], + expectations = [], + responses = [], + responsesPush = angular.bind(responses, responses.push), + copy = angular.copy; + + function createResponse(status, data, headers, statusText) { + if (angular.isFunction(status)) return status; + + return function() { + return angular.isNumber(status) + ? [status, data, headers, statusText] + : [200, status, data]; + }; + } + + // TODO(vojta): change params to: method, url, data, headers, callback + function $httpBackend(method, url, data, callback, headers, timeout, withCredentials) { + var xhr = new MockXhr(), + expectation = expectations[0], + wasExpected = false; + + function prettyPrint(data) { + return (angular.isString(data) || angular.isFunction(data) || data instanceof RegExp) + ? data + : angular.toJson(data); + } + + function wrapResponse(wrapped) { + if (!$browser && timeout && timeout.then) timeout.then(handleTimeout); + + return handleResponse; + + function handleResponse() { + var response = wrapped.response(method, url, data, headers); + xhr.$$respHeaders = response[2]; + callback(copy(response[0]), copy(response[1]), xhr.getAllResponseHeaders(), + copy(response[3] || '')); + } + + function handleTimeout() { + for (var i = 0, ii = responses.length; i < ii; i++) { + if (responses[i] === handleResponse) { + responses.splice(i, 1); + callback(-1, undefined, ''); + break; + } + } + } + } + + if (expectation && expectation.match(method, url)) { + if (!expectation.matchData(data)) + throw new Error('Expected ' + expectation + ' with different data\n' + + 'EXPECTED: ' + prettyPrint(expectation.data) + '\nGOT: ' + data); + + if (!expectation.matchHeaders(headers)) + throw new Error('Expected ' + expectation + ' with different headers\n' + + 'EXPECTED: ' + prettyPrint(expectation.headers) + '\nGOT: ' + + prettyPrint(headers)); + + expectations.shift(); + + if (expectation.response) { + responses.push(wrapResponse(expectation)); + return; + } + wasExpected = true; + } + + var i = -1, definition; + while ((definition = definitions[++i])) { + if (definition.match(method, url, data, headers || {})) { + if (definition.response) { + // if $browser specified, we do auto flush all requests + ($browser ? $browser.defer : responsesPush)(wrapResponse(definition)); + } else if (definition.passThrough) { + $delegate(method, url, data, callback, headers, timeout, withCredentials); + } else throw new Error('No response defined !'); + return; + } + } + throw wasExpected ? + new Error('No response defined !') : + new Error('Unexpected request: ' + method + ' ' + url + '\n' + + (expectation ? 'Expected ' + expectation : 'No more request expected')); + } + + /** + * @ngdoc method + * @name $httpBackend#when + * @description + * Creates a new backend definition. + * + * @param {string} method HTTP method. + * @param {string|RegExp} url HTTP url. + * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives + * data string and returns true if the data is as expected. + * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header + * object and returns true if the headers match the current definition. + * @returns {requestHandler} Returns an object with `respond` method that controls how a matched + * request is handled. + * + * - respond – + * `{function([status,] data[, headers, statusText]) + * | function(function(method, url, data, headers)}` + * – The respond method takes a set of static data to be returned or a function that can + * return an array containing response status (number), response data (string), response + * headers (Object), and the text for the status (string). + */ + $httpBackend.when = function(method, url, data, headers) { + var definition = new MockHttpExpectation(method, url, data, headers), + chain = { + respond: function(status, data, headers, statusText) { + definition.response = createResponse(status, data, headers, statusText); + } + }; + + if ($browser) { + chain.passThrough = function() { + definition.passThrough = true; + }; + } + + definitions.push(definition); + return chain; + }; + + /** + * @ngdoc method + * @name $httpBackend#whenGET + * @description + * Creates a new backend definition for GET requests. For more info see `when()`. + * + * @param {string|RegExp} url HTTP url. + * @param {(Object|function(Object))=} headers HTTP headers. + * @returns {requestHandler} Returns an object with `respond` method that control how a matched + * request is handled. + */ + + /** + * @ngdoc method + * @name $httpBackend#whenHEAD + * @description + * Creates a new backend definition for HEAD requests. For more info see `when()`. + * + * @param {string|RegExp} url HTTP url. + * @param {(Object|function(Object))=} headers HTTP headers. + * @returns {requestHandler} Returns an object with `respond` method that control how a matched + * request is handled. + */ + + /** + * @ngdoc method + * @name $httpBackend#whenDELETE + * @description + * Creates a new backend definition for DELETE requests. For more info see `when()`. + * + * @param {string|RegExp} url HTTP url. + * @param {(Object|function(Object))=} headers HTTP headers. + * @returns {requestHandler} Returns an object with `respond` method that control how a matched + * request is handled. + */ + + /** + * @ngdoc method + * @name $httpBackend#whenPOST + * @description + * Creates a new backend definition for POST requests. For more info see `when()`. + * + * @param {string|RegExp} url HTTP url. + * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives + * data string and returns true if the data is as expected. + * @param {(Object|function(Object))=} headers HTTP headers. + * @returns {requestHandler} Returns an object with `respond` method that control how a matched + * request is handled. + */ + + /** + * @ngdoc method + * @name $httpBackend#whenPUT + * @description + * Creates a new backend definition for PUT requests. For more info see `when()`. + * + * @param {string|RegExp} url HTTP url. + * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives + * data string and returns true if the data is as expected. + * @param {(Object|function(Object))=} headers HTTP headers. + * @returns {requestHandler} Returns an object with `respond` method that control how a matched + * request is handled. + */ + + /** + * @ngdoc method + * @name $httpBackend#whenJSONP + * @description + * Creates a new backend definition for JSONP requests. For more info see `when()`. + * + * @param {string|RegExp} url HTTP url. + * @returns {requestHandler} Returns an object with `respond` method that control how a matched + * request is handled. + */ + createShortMethods('when'); + + + /** + * @ngdoc method + * @name $httpBackend#expect + * @description + * Creates a new request expectation. + * + * @param {string} method HTTP method. + * @param {string|RegExp} url HTTP url. + * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that + * receives data string and returns true if the data is as expected, or Object if request body + * is in JSON format. + * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header + * object and returns true if the headers match the current expectation. + * @returns {requestHandler} Returns an object with `respond` method that control how a matched + * request is handled. + * + * - respond – + * `{function([status,] data[, headers, statusText]) + * | function(function(method, url, data, headers)}` + * – The respond method takes a set of static data to be returned or a function that can + * return an array containing response status (number), response data (string), response + * headers (Object), and the text for the status (string). + */ + $httpBackend.expect = function(method, url, data, headers) { + var expectation = new MockHttpExpectation(method, url, data, headers); + expectations.push(expectation); + return { + respond: function (status, data, headers, statusText) { + expectation.response = createResponse(status, data, headers, statusText); + } + }; + }; + + + /** + * @ngdoc method + * @name $httpBackend#expectGET + * @description + * Creates a new request expectation for GET requests. For more info see `expect()`. + * + * @param {string|RegExp} url HTTP url. + * @param {Object=} headers HTTP headers. + * @returns {requestHandler} Returns an object with `respond` method that control how a matched + * request is handled. See #expect for more info. + */ + + /** + * @ngdoc method + * @name $httpBackend#expectHEAD + * @description + * Creates a new request expectation for HEAD requests. For more info see `expect()`. + * + * @param {string|RegExp} url HTTP url. + * @param {Object=} headers HTTP headers. + * @returns {requestHandler} Returns an object with `respond` method that control how a matched + * request is handled. + */ + + /** + * @ngdoc method + * @name $httpBackend#expectDELETE + * @description + * Creates a new request expectation for DELETE requests. For more info see `expect()`. + * + * @param {string|RegExp} url HTTP url. + * @param {Object=} headers HTTP headers. + * @returns {requestHandler} Returns an object with `respond` method that control how a matched + * request is handled. + */ + + /** + * @ngdoc method + * @name $httpBackend#expectPOST + * @description + * Creates a new request expectation for POST requests. For more info see `expect()`. + * + * @param {string|RegExp} url HTTP url. + * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that + * receives data string and returns true if the data is as expected, or Object if request body + * is in JSON format. + * @param {Object=} headers HTTP headers. + * @returns {requestHandler} Returns an object with `respond` method that control how a matched + * request is handled. + */ + + /** + * @ngdoc method + * @name $httpBackend#expectPUT + * @description + * Creates a new request expectation for PUT requests. For more info see `expect()`. + * + * @param {string|RegExp} url HTTP url. + * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that + * receives data string and returns true if the data is as expected, or Object if request body + * is in JSON format. + * @param {Object=} headers HTTP headers. + * @returns {requestHandler} Returns an object with `respond` method that control how a matched + * request is handled. + */ + + /** + * @ngdoc method + * @name $httpBackend#expectPATCH + * @description + * Creates a new request expectation for PATCH requests. For more info see `expect()`. + * + * @param {string|RegExp} url HTTP url. + * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that + * receives data string and returns true if the data is as expected, or Object if request body + * is in JSON format. + * @param {Object=} headers HTTP headers. + * @returns {requestHandler} Returns an object with `respond` method that control how a matched + * request is handled. + */ + + /** + * @ngdoc method + * @name $httpBackend#expectJSONP + * @description + * Creates a new request expectation for JSONP requests. For more info see `expect()`. + * + * @param {string|RegExp} url HTTP url. + * @returns {requestHandler} Returns an object with `respond` method that control how a matched + * request is handled. + */ + createShortMethods('expect'); + + + /** + * @ngdoc method + * @name $httpBackend#flush + * @description + * Flushes all pending requests using the trained responses. + * + * @param {number=} count Number of responses to flush (in the order they arrived). If undefined, + * all pending requests will be flushed. If there are no pending requests when the flush method + * is called an exception is thrown (as this typically a sign of programming error). + */ + $httpBackend.flush = function(count) { + $rootScope.$digest(); + if (!responses.length) throw new Error('No pending request to flush !'); + + if (angular.isDefined(count)) { + while (count--) { + if (!responses.length) throw new Error('No more pending request to flush !'); + responses.shift()(); + } + } else { + while (responses.length) { + responses.shift()(); + } + } + $httpBackend.verifyNoOutstandingExpectation(); + }; + + + /** + * @ngdoc method + * @name $httpBackend#verifyNoOutstandingExpectation + * @description + * Verifies that all of the requests defined via the `expect` api were made. If any of the + * requests were not made, verifyNoOutstandingExpectation throws an exception. + * + * Typically, you would call this method following each test case that asserts requests using an + * "afterEach" clause. + * + * ```js + * afterEach($httpBackend.verifyNoOutstandingExpectation); + * ``` + */ + $httpBackend.verifyNoOutstandingExpectation = function() { + $rootScope.$digest(); + if (expectations.length) { + throw new Error('Unsatisfied requests: ' + expectations.join(', ')); + } + }; + + + /** + * @ngdoc method + * @name $httpBackend#verifyNoOutstandingRequest + * @description + * Verifies that there are no outstanding requests that need to be flushed. + * + * Typically, you would call this method following each test case that asserts requests using an + * "afterEach" clause. + * + * ```js + * afterEach($httpBackend.verifyNoOutstandingRequest); + * ``` + */ + $httpBackend.verifyNoOutstandingRequest = function() { + if (responses.length) { + throw new Error('Unflushed requests: ' + responses.length); + } + }; + + + /** + * @ngdoc method + * @name $httpBackend#resetExpectations + * @description + * Resets all request expectations, but preserves all backend definitions. Typically, you would + * call resetExpectations during a multiple-phase test when you want to reuse the same instance of + * $httpBackend mock. + */ + $httpBackend.resetExpectations = function() { + expectations.length = 0; + responses.length = 0; + }; + + return $httpBackend; + + + function createShortMethods(prefix) { + angular.forEach(['GET', 'DELETE', 'JSONP'], function(method) { + $httpBackend[prefix + method] = function(url, headers) { + return $httpBackend[prefix](method, url, undefined, headers); + }; + }); + + angular.forEach(['PUT', 'POST', 'PATCH'], function(method) { + $httpBackend[prefix + method] = function(url, data, headers) { + return $httpBackend[prefix](method, url, data, headers); + }; + }); + } +} + +function MockHttpExpectation(method, url, data, headers) { + + this.data = data; + this.headers = headers; + + this.match = function(m, u, d, h) { + if (method != m) return false; + if (!this.matchUrl(u)) return false; + if (angular.isDefined(d) && !this.matchData(d)) return false; + if (angular.isDefined(h) && !this.matchHeaders(h)) return false; + return true; + }; + + this.matchUrl = function(u) { + if (!url) return true; + if (angular.isFunction(url.test)) return url.test(u); + return url == u; + }; + + this.matchHeaders = function(h) { + if (angular.isUndefined(headers)) return true; + if (angular.isFunction(headers)) return headers(h); + return angular.equals(headers, h); + }; + + this.matchData = function(d) { + if (angular.isUndefined(data)) return true; + if (data && angular.isFunction(data.test)) return data.test(d); + if (data && angular.isFunction(data)) return data(d); + if (data && !angular.isString(data)) return angular.equals(data, angular.fromJson(d)); + return data == d; + }; + + this.toString = function() { + return method + ' ' + url; + }; +} + +function createMockXhr() { + return new MockXhr(); +} + +function MockXhr() { + + // hack for testing $http, $httpBackend + MockXhr.$$lastInstance = this; + + this.open = function(method, url, async) { + this.$$method = method; + this.$$url = url; + this.$$async = async; + this.$$reqHeaders = {}; + this.$$respHeaders = {}; + }; + + this.send = function(data) { + this.$$data = data; + }; + + this.setRequestHeader = function(key, value) { + this.$$reqHeaders[key] = value; + }; + + this.getResponseHeader = function(name) { + // the lookup must be case insensitive, + // that's why we try two quick lookups first and full scan last + var header = this.$$respHeaders[name]; + if (header) return header; + + name = angular.lowercase(name); + header = this.$$respHeaders[name]; + if (header) return header; + + header = undefined; + angular.forEach(this.$$respHeaders, function(headerVal, headerName) { + if (!header && angular.lowercase(headerName) == name) header = headerVal; + }); + return header; + }; + + this.getAllResponseHeaders = function() { + var lines = []; + + angular.forEach(this.$$respHeaders, function(value, key) { + lines.push(key + ': ' + value); + }); + return lines.join('\n'); + }; + + this.abort = angular.noop; +} + + +/** + * @ngdoc service + * @name $timeout + * @description + * + * This service is just a simple decorator for {@link ng.$timeout $timeout} service + * that adds a "flush" and "verifyNoPendingTasks" methods. + */ + +angular.mock.$TimeoutDecorator = function($delegate, $browser) { + + /** + * @ngdoc method + * @name $timeout#flush + * @description + * + * Flushes the queue of pending tasks. + * + * @param {number=} delay maximum timeout amount to flush up until + */ + $delegate.flush = function(delay) { + $browser.defer.flush(delay); + }; + + /** + * @ngdoc method + * @name $timeout#verifyNoPendingTasks + * @description + * + * Verifies that there are no pending tasks that need to be flushed. + */ + $delegate.verifyNoPendingTasks = function() { + if ($browser.deferredFns.length) { + throw new Error('Deferred tasks to flush (' + $browser.deferredFns.length + '): ' + + formatPendingTasksAsString($browser.deferredFns)); + } + }; + + function formatPendingTasksAsString(tasks) { + var result = []; + angular.forEach(tasks, function(task) { + result.push('{id: ' + task.id + ', ' + 'time: ' + task.time + '}'); + }); + + return result.join(', '); + } + + return $delegate; +}; + +angular.mock.$RAFDecorator = function($delegate) { + var queue = []; + var rafFn = function(fn) { + var index = queue.length; + queue.push(fn); + return function() { + queue.splice(index, 1); + }; + }; + + rafFn.supported = $delegate.supported; + + rafFn.flush = function() { + if(queue.length === 0) { + throw new Error('No rAF callbacks present'); + } + + var length = queue.length; + for(var i=0;i'); + }; +}; + +/** + * @ngdoc module + * @name ngMock + * @packageName angular-mocks + * @description + * + * # ngMock + * + * The `ngMock` module provides support to inject and mock Angular services into unit tests. + * In addition, ngMock also extends various core ng services such that they can be + * inspected and controlled in a synchronous manner within test code. + * + * + *
+ * + */ +angular.module('ngMock', ['ng']).provider({ + $browser: angular.mock.$BrowserProvider, + $exceptionHandler: angular.mock.$ExceptionHandlerProvider, + $log: angular.mock.$LogProvider, + $interval: angular.mock.$IntervalProvider, + $httpBackend: angular.mock.$HttpBackendProvider, + $rootElement: angular.mock.$RootElementProvider +}).config(['$provide', function($provide) { + $provide.decorator('$timeout', angular.mock.$TimeoutDecorator); + $provide.decorator('$$rAF', angular.mock.$RAFDecorator); + $provide.decorator('$$asyncCallback', angular.mock.$AsyncCallbackDecorator); +}]); + +/** + * @ngdoc module + * @name ngMockE2E + * @module ngMockE2E + * @packageName angular-mocks + * @description + * + * The `ngMockE2E` is an angular module which contains mocks suitable for end-to-end testing. + * Currently there is only one mock present in this module - + * the {@link ngMockE2E.$httpBackend e2e $httpBackend} mock. + */ +angular.module('ngMockE2E', ['ng']).config(['$provide', function($provide) { + $provide.decorator('$httpBackend', angular.mock.e2e.$httpBackendDecorator); +}]); + +/** + * @ngdoc service + * @name $httpBackend + * @module ngMockE2E + * @description + * Fake HTTP backend implementation suitable for end-to-end testing or backend-less development of + * applications that use the {@link ng.$http $http service}. + * + * *Note*: For fake http backend implementation suitable for unit testing please see + * {@link ngMock.$httpBackend unit-testing $httpBackend mock}. + * + * This implementation can be used to respond with static or dynamic responses via the `when` api + * and its shortcuts (`whenGET`, `whenPOST`, etc) and optionally pass through requests to the + * real $httpBackend for specific requests (e.g. to interact with certain remote apis or to fetch + * templates from a webserver). + * + * As opposed to unit-testing, in an end-to-end testing scenario or in scenario when an application + * is being developed with the real backend api replaced with a mock, it is often desirable for + * certain category of requests to bypass the mock and issue a real http request (e.g. to fetch + * templates or static files from the webserver). To configure the backend with this behavior + * use the `passThrough` request handler of `when` instead of `respond`. + * + * Additionally, we don't want to manually have to flush mocked out requests like we do during unit + * testing. For this reason the e2e $httpBackend flushes mocked out requests + * automatically, closely simulating the behavior of the XMLHttpRequest object. + * + * To setup the application to run with this http backend, you have to create a module that depends + * on the `ngMockE2E` and your application modules and defines the fake backend: + * + * ```js + * myAppDev = angular.module('myAppDev', ['myApp', 'ngMockE2E']); + * myAppDev.run(function($httpBackend) { + * phones = [{name: 'phone1'}, {name: 'phone2'}]; + * + * // returns the current list of phones + * $httpBackend.whenGET('/phones').respond(phones); + * + * // adds a new phone to the phones array + * $httpBackend.whenPOST('/phones').respond(function(method, url, data) { + * var phone = angular.fromJson(data); + * phones.push(phone); + * return [200, phone, {}]; + * }); + * $httpBackend.whenGET(/^\/templates\//).passThrough(); + * //... + * }); + * ``` + * + * Afterwards, bootstrap your app with this new module. + */ + +/** + * @ngdoc method + * @name $httpBackend#when + * @module ngMockE2E + * @description + * Creates a new backend definition. + * + * @param {string} method HTTP method. + * @param {string|RegExp} url HTTP url. + * @param {(string|RegExp)=} data HTTP request body. + * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header + * object and returns true if the headers match the current definition. + * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that + * control how a matched request is handled. + * + * - respond – + * `{function([status,] data[, headers, statusText]) + * | function(function(method, url, data, headers)}` + * – The respond method takes a set of static data to be returned or a function that can return + * an array containing response status (number), response data (string), response headers + * (Object), and the text for the status (string). + * - passThrough – `{function()}` – Any request matching a backend definition with + * `passThrough` handler will be passed through to the real backend (an XHR request will be made + * to the server.) + */ + +/** + * @ngdoc method + * @name $httpBackend#whenGET + * @module ngMockE2E + * @description + * Creates a new backend definition for GET requests. For more info see `when()`. + * + * @param {string|RegExp} url HTTP url. + * @param {(Object|function(Object))=} headers HTTP headers. + * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that + * control how a matched request is handled. + */ + +/** + * @ngdoc method + * @name $httpBackend#whenHEAD + * @module ngMockE2E + * @description + * Creates a new backend definition for HEAD requests. For more info see `when()`. + * + * @param {string|RegExp} url HTTP url. + * @param {(Object|function(Object))=} headers HTTP headers. + * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that + * control how a matched request is handled. + */ + +/** + * @ngdoc method + * @name $httpBackend#whenDELETE + * @module ngMockE2E + * @description + * Creates a new backend definition for DELETE requests. For more info see `when()`. + * + * @param {string|RegExp} url HTTP url. + * @param {(Object|function(Object))=} headers HTTP headers. + * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that + * control how a matched request is handled. + */ + +/** + * @ngdoc method + * @name $httpBackend#whenPOST + * @module ngMockE2E + * @description + * Creates a new backend definition for POST requests. For more info see `when()`. + * + * @param {string|RegExp} url HTTP url. + * @param {(string|RegExp)=} data HTTP request body. + * @param {(Object|function(Object))=} headers HTTP headers. + * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that + * control how a matched request is handled. + */ + +/** + * @ngdoc method + * @name $httpBackend#whenPUT + * @module ngMockE2E + * @description + * Creates a new backend definition for PUT requests. For more info see `when()`. + * + * @param {string|RegExp} url HTTP url. + * @param {(string|RegExp)=} data HTTP request body. + * @param {(Object|function(Object))=} headers HTTP headers. + * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that + * control how a matched request is handled. + */ + +/** + * @ngdoc method + * @name $httpBackend#whenPATCH + * @module ngMockE2E + * @description + * Creates a new backend definition for PATCH requests. For more info see `when()`. + * + * @param {string|RegExp} url HTTP url. + * @param {(string|RegExp)=} data HTTP request body. + * @param {(Object|function(Object))=} headers HTTP headers. + * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that + * control how a matched request is handled. + */ + +/** + * @ngdoc method + * @name $httpBackend#whenJSONP + * @module ngMockE2E + * @description + * Creates a new backend definition for JSONP requests. For more info see `when()`. + * + * @param {string|RegExp} url HTTP url. + * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that + * control how a matched request is handled. + */ +angular.mock.e2e = {}; +angular.mock.e2e.$httpBackendDecorator = + ['$rootScope', '$delegate', '$browser', createHttpBackendMock]; + + +angular.mock.clearDataCache = function() { + var key, + cache = angular.element.cache; + + for(key in cache) { + if (Object.prototype.hasOwnProperty.call(cache,key)) { + var handle = cache[key].handle; + + handle && angular.element(handle.elem).off(); + delete cache[key]; + } + } +}; + + +if(window.jasmine || window.mocha) { + + var currentSpec = null, + isSpecRunning = function() { + return !!currentSpec; + }; + + + (window.beforeEach || window.setup)(function() { + currentSpec = this; + }); + + (window.afterEach || window.teardown)(function() { + var injector = currentSpec.$injector; + + angular.forEach(currentSpec.$modules, function(module) { + if (module && module.$$hashKey) { + module.$$hashKey = undefined; + } + }); + + currentSpec.$injector = null; + currentSpec.$modules = null; + currentSpec = null; + + if (injector) { + injector.get('$rootElement').off(); + injector.get('$browser').pollFns.length = 0; + } + + angular.mock.clearDataCache(); + + // clean up jquery's fragment cache + angular.forEach(angular.element.fragments, function(val, key) { + delete angular.element.fragments[key]; + }); + + MockXhr.$$lastInstance = null; + + angular.forEach(angular.callbacks, function(val, key) { + delete angular.callbacks[key]; + }); + angular.callbacks.counter = 0; + }); + + /** + * @ngdoc function + * @name angular.mock.module + * @description + * + * *NOTE*: This function is also published on window for easy access.
+ * *NOTE*: This function is declared ONLY WHEN running tests with jasmine or mocha + * + * This function registers a module configuration code. It collects the configuration information + * which will be used when the injector is created by {@link angular.mock.inject inject}. + * + * See {@link angular.mock.inject inject} for usage example + * + * @param {...(string|Function|Object)} fns any number of modules which are represented as string + * aliases or as anonymous module initialization functions. The modules are used to + * configure the injector. The 'ng' and 'ngMock' modules are automatically loaded. If an + * object literal is passed they will be registered as values in the module, the key being + * the module name and the value being what is returned. + */ + window.module = angular.mock.module = function() { + var moduleFns = Array.prototype.slice.call(arguments, 0); + return isSpecRunning() ? workFn() : workFn; + ///////////////////// + function workFn() { + if (currentSpec.$injector) { + throw new Error('Injector already created, can not register a module!'); + } else { + var modules = currentSpec.$modules || (currentSpec.$modules = []); + angular.forEach(moduleFns, function(module) { + if (angular.isObject(module) && !angular.isArray(module)) { + modules.push(function($provide) { + angular.forEach(module, function(value, key) { + $provide.value(key, value); + }); + }); + } else { + modules.push(module); + } + }); + } + } + }; + + /** + * @ngdoc function + * @name angular.mock.inject + * @description + * + * *NOTE*: This function is also published on window for easy access.
+ * *NOTE*: This function is declared ONLY WHEN running tests with jasmine or mocha + * + * The inject function wraps a function into an injectable function. The inject() creates new + * instance of {@link auto.$injector $injector} per test, which is then used for + * resolving references. + * + * + * ## Resolving References (Underscore Wrapping) + * Often, we would like to inject a reference once, in a `beforeEach()` block and reuse this + * in multiple `it()` clauses. To be able to do this we must assign the reference to a variable + * that is declared in the scope of the `describe()` block. Since we would, most likely, want + * the variable to have the same name of the reference we have a problem, since the parameter + * to the `inject()` function would hide the outer variable. + * + * To help with this, the injected parameters can, optionally, be enclosed with underscores. + * These are ignored by the injector when the reference name is resolved. + * + * For example, the parameter `_myService_` would be resolved as the reference `myService`. + * Since it is available in the function body as _myService_, we can then assign it to a variable + * defined in an outer scope. + * + * ``` + * // Defined out reference variable outside + * var myService; + * + * // Wrap the parameter in underscores + * beforeEach( inject( function(_myService_){ + * myService = _myService_; + * })); + * + * // Use myService in a series of tests. + * it('makes use of myService', function() { + * myService.doStuff(); + * }); + * + * ``` + * + * See also {@link angular.mock.module angular.mock.module} + * + * ## Example + * Example of what a typical jasmine tests looks like with the inject method. + * ```js + * + * angular.module('myApplicationModule', []) + * .value('mode', 'app') + * .value('version', 'v1.0.1'); + * + * + * describe('MyApp', function() { + * + * // You need to load modules that you want to test, + * // it loads only the "ng" module by default. + * beforeEach(module('myApplicationModule')); + * + * + * // inject() is used to inject arguments of all given functions + * it('should provide a version', inject(function(mode, version) { + * expect(version).toEqual('v1.0.1'); + * expect(mode).toEqual('app'); + * })); + * + * + * // The inject and module method can also be used inside of the it or beforeEach + * it('should override a version and test the new version is injected', function() { + * // module() takes functions or strings (module aliases) + * module(function($provide) { + * $provide.value('version', 'overridden'); // override version here + * }); + * + * inject(function(version) { + * expect(version).toEqual('overridden'); + * }); + * }); + * }); + * + * ``` + * + * @param {...Function} fns any number of functions which will be injected using the injector. + */ + + + + var ErrorAddingDeclarationLocationStack = function(e, errorForStack) { + this.message = e.message; + this.name = e.name; + if (e.line) this.line = e.line; + if (e.sourceId) this.sourceId = e.sourceId; + if (e.stack && errorForStack) + this.stack = e.stack + '\n' + errorForStack.stack; + if (e.stackArray) this.stackArray = e.stackArray; + }; + ErrorAddingDeclarationLocationStack.prototype.toString = Error.prototype.toString; + + window.inject = angular.mock.inject = function() { + var blockFns = Array.prototype.slice.call(arguments, 0); + var errorForStack = new Error('Declaration Location'); + return isSpecRunning() ? workFn.call(currentSpec) : workFn; + ///////////////////// + function workFn() { + var modules = currentSpec.$modules || []; + + modules.unshift('ngMock'); + modules.unshift('ng'); + var injector = currentSpec.$injector; + if (!injector) { + injector = currentSpec.$injector = angular.injector(modules); + } + for(var i = 0, ii = blockFns.length; i < ii; i++) { + try { + /* jshint -W040 *//* Jasmine explicitly provides a `this` object when calling functions */ + injector.invoke(blockFns[i] || angular.noop, this); + /* jshint +W040 */ + } catch (e) { + if (e.stack && errorForStack) { + throw new ErrorAddingDeclarationLocationStack(e, errorForStack); + } + throw e; + } finally { + errorForStack = null; + } + } + } + }; +} + + +})(window, window.angular); diff --git a/bower_components/angular-mocks/bower.json b/bower_components/angular-mocks/bower.json new file mode 100644 index 000000000..2fd96eb8c --- /dev/null +++ b/bower_components/angular-mocks/bower.json @@ -0,0 +1,8 @@ +{ + "name": "angular-mocks", + "version": "1.2.25", + "main": "./angular-mocks.js", + "dependencies": { + "angular": "1.2.25" + } +} diff --git a/bower_components/angular/.bower.json b/bower_components/angular/.bower.json new file mode 100644 index 000000000..a312cd450 --- /dev/null +++ b/bower_components/angular/.bower.json @@ -0,0 +1,16 @@ +{ + "name": "angular", + "version": "1.2.25", + "main": "./angular.js", + "dependencies": {}, + "homepage": "https://github.com/angular/bower-angular", + "_release": "1.2.25", + "_resolution": { + "type": "version", + "tag": "v1.2.25", + "commit": "0d956316b0472031ac895e57c14b8b2100eea9fb" + }, + "_source": "git://github.com/angular/bower-angular.git", + "_target": "1.2.25", + "_originalSource": "angular" +} \ No newline at end of file diff --git a/bower_components/angular/README.md b/bower_components/angular/README.md new file mode 100644 index 000000000..fc0c09987 --- /dev/null +++ b/bower_components/angular/README.md @@ -0,0 +1,48 @@ +# bower-angular + +This repo is for distribution on `bower`. The source for this module is in the +[main AngularJS repo](https://github.com/angular/angular.js). +Please file issues and pull requests against that repo. + +## Install + +Install with `bower`: + +```shell +bower install angular +``` + +Add a ` +``` + +## Documentation + +Documentation is available on the +[AngularJS docs site](http://docs.angularjs.org/). + +## License + +The MIT License + +Copyright (c) 2010-2012 Google, Inc. http://angularjs.org + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/bower_components/angular/angular-csp.css b/bower_components/angular/angular-csp.css new file mode 100644 index 000000000..3abb3a0e6 --- /dev/null +++ b/bower_components/angular/angular-csp.css @@ -0,0 +1,24 @@ +/* Include this file in your html if you are using the CSP mode. */ + +@charset "UTF-8"; + +[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], +.ng-cloak, .x-ng-cloak, +.ng-hide { + display: none !important; +} + +ng\:form { + display: block; +} + +.ng-animate-block-transitions { + transition:0s all!important; + -webkit-transition:0s all!important; +} + +/* show the element during a show/hide animation when the + * animation is ongoing, but the .ng-hide class is active */ +.ng-hide-add-active, .ng-hide-remove { + display: block!important; +} diff --git a/test/utils/angular.js b/bower_components/angular/angular.js similarity index 90% rename from test/utils/angular.js rename to bower_components/angular/angular.js index edeab1a92..132234b62 100644 --- a/test/utils/angular.js +++ b/bower_components/angular/angular.js @@ -1,5 +1,5 @@ /** - * @license AngularJS v1.2.17-build.157+sha.5f5bf07 + * @license AngularJS v1.2.25 * (c) 2010-2014 Google, Inc. http://angularjs.org * License: MIT */ @@ -68,7 +68,7 @@ function minErr(module) { return match; }); - message = message + '\nhttp://errors.angularjs.org/1.2.17-build.157+sha.5f5bf07/' + + message = message + '\nhttp://errors.angularjs.org/1.2.25/' + (module ? module + '/' : '') + code; for (i = 2; i < arguments.length; i++) { message = message + (i == 2 ? '?' : '&') + 'p' + (i-2) + '=' + @@ -80,88 +80,88 @@ function minErr(module) { } /* We need to tell jshint what variables are being exported */ -/* global - -angular, - -msie, - -jqLite, - -jQuery, - -slice, - -push, - -toString, - -ngMinErr, - -angularModule, - -nodeName_, - -uid, - - -lowercase, - -uppercase, - -manualLowercase, - -manualUppercase, - -nodeName_, - -isArrayLike, - -forEach, - -sortedKeys, - -forEachSorted, - -reverseParams, - -nextUid, - -setHashKey, - -extend, - -int, - -inherit, - -noop, - -identity, - -valueFn, - -isUndefined, - -isDefined, - -isObject, - -isString, - -isNumber, - -isDate, - -isArray, - -isFunction, - -isRegExp, - -isWindow, - -isScope, - -isFile, - -isBlob, - -isBoolean, - -trim, - -isElement, - -makeMap, - -map, - -size, - -includes, - -indexOf, - -arrayRemove, - -isLeafNode, - -copy, - -shallowCopy, - -equals, - -csp, - -concat, - -sliceArgs, - -bind, - -toJsonReplacer, - -toJson, - -fromJson, - -toBoolean, - -startingTag, - -tryDecodeURIComponent, - -parseKeyValue, - -toKeyValue, - -encodeUriSegment, - -encodeUriQuery, - -angularInit, - -bootstrap, - -snake_case, - -bindJQuery, - -assertArg, - -assertArgFn, - -assertNotHasOwnProperty, - -getter, - -getBlockElements, - -hasOwnProperty, +/* global angular: true, + msie: true, + jqLite: true, + jQuery: true, + slice: true, + push: true, + toString: true, + ngMinErr: true, + angularModule: true, + nodeName_: true, + uid: true, + VALIDITY_STATE_PROPERTY: true, + lowercase: true, + uppercase: true, + manualLowercase: true, + manualUppercase: true, + nodeName_: true, + isArrayLike: true, + forEach: true, + sortedKeys: true, + forEachSorted: true, + reverseParams: true, + nextUid: true, + setHashKey: true, + extend: true, + int: true, + inherit: true, + noop: true, + identity: true, + valueFn: true, + isUndefined: true, + isDefined: true, + isObject: true, + isString: true, + isNumber: true, + isDate: true, + isArray: true, + isFunction: true, + isRegExp: true, + isWindow: true, + isScope: true, + isFile: true, + isBlob: true, + isBoolean: true, + isPromiseLike: true, + trim: true, + isElement: true, + makeMap: true, + map: true, + size: true, + includes: true, + indexOf: true, + arrayRemove: true, + isLeafNode: true, + copy: true, + shallowCopy: true, + equals: true, + csp: true, + concat: true, + sliceArgs: true, + bind: true, + toJsonReplacer: true, + toJson: true, + fromJson: true, + toBoolean: true, + startingTag: true, + tryDecodeURIComponent: true, + parseKeyValue: true, + toKeyValue: true, + encodeUriSegment: true, + encodeUriQuery: true, + angularInit: true, + bootstrap: true, + snake_case: true, + bindJQuery: true, + assertArg: true, + assertArgFn: true, + assertNotHasOwnProperty: true, + getter: true, + getBlockElements: true, + hasOwnProperty: true, */ //////////////////////////////////// @@ -181,11 +181,15 @@ function minErr(module) { *
*/ +// The name of a form control's ValidityState property. +// This is used so that it's possible for internal tests to create mock ValidityStates. +var VALIDITY_STATE_PROPERTY = 'validity'; + /** * @ngdoc function * @name angular.lowercase * @module ng - * @function + * @kind function * * @description Converts the specified string to lowercase. * @param {string} string String to be converted to lowercase. @@ -198,7 +202,7 @@ var hasOwnProperty = Object.prototype.hasOwnProperty; * @ngdoc function * @name angular.uppercase * @module ng - * @function + * @kind function * * @description Converts the specified string to uppercase. * @param {string} string String to be converted to uppercase. @@ -280,7 +284,7 @@ function isArrayLike(obj) { * @ngdoc function * @name angular.forEach * @module ng - * @function + * @kind function * * @description * Invokes the `iterator` function once for each item in `obj` collection, which can be either an @@ -294,7 +298,7 @@ function isArrayLike(obj) { ```js var values = {name: 'misko', gender: 'male'}; var log = []; - angular.forEach(values, function(value, key){ + angular.forEach(values, function(value, key) { this.push(key + ': ' + value); }, log); expect(log).toEqual(['name: misko', 'gender: male']); @@ -308,7 +312,7 @@ function isArrayLike(obj) { function forEach(obj, iterator, context) { var key; if (obj) { - if (isFunction(obj)){ + if (isFunction(obj)) { for (key in obj) { // Need to check if hasOwnProperty exists, // as on IE8 the result of querySelectorAll is an object without a hasOwnProperty function @@ -316,11 +320,12 @@ function forEach(obj, iterator, context) { iterator.call(context, obj[key], key); } } - } else if (obj.forEach && obj.forEach !== forEach) { - obj.forEach(iterator, context); - } else if (isArrayLike(obj)) { - for (key = 0; key < obj.length; key++) + } else if (isArray(obj) || isArrayLike(obj)) { + for (key = 0; key < obj.length; key++) { iterator.call(context, obj[key], key); + } + } else if (obj.forEach && obj.forEach !== forEach) { + obj.forEach(iterator, context); } else { for (key in obj) { if (obj.hasOwnProperty(key)) { @@ -409,7 +414,7 @@ function setHashKey(obj, h) { * @ngdoc function * @name angular.extend * @module ng - * @function + * @kind function * * @description * Extends the destination object `dst` by copying all of the properties from the `src` object(s) @@ -421,9 +426,9 @@ function setHashKey(obj, h) { */ function extend(dst) { var h = dst.$$hashKey; - forEach(arguments, function(obj){ + forEach(arguments, function(obj) { if (obj !== dst) { - forEach(obj, function(value, key){ + forEach(obj, function(value, key) { dst[key] = value; }); } @@ -446,7 +451,7 @@ function inherit(parent, extra) { * @ngdoc function * @name angular.noop * @module ng - * @function + * @kind function * * @description * A function that performs no operations. This function can be useful when writing code in the @@ -466,7 +471,7 @@ noop.$inject = []; * @ngdoc function * @name angular.identity * @module ng - * @function + * @kind function * * @description * A function that returns its first argument. This function is useful when writing code in the @@ -488,7 +493,7 @@ function valueFn(value) {return function() {return value;};} * @ngdoc function * @name angular.isUndefined * @module ng - * @function + * @kind function * * @description * Determines if a reference is undefined. @@ -503,7 +508,7 @@ function isUndefined(value){return typeof value === 'undefined';} * @ngdoc function * @name angular.isDefined * @module ng - * @function + * @kind function * * @description * Determines if a reference is defined. @@ -518,7 +523,7 @@ function isDefined(value){return typeof value !== 'undefined';} * @ngdoc function * @name angular.isObject * @module ng - * @function + * @kind function * * @description * Determines if a reference is an `Object`. Unlike `typeof` in JavaScript, `null`s are not @@ -534,7 +539,7 @@ function isObject(value){return value != null && typeof value === 'object';} * @ngdoc function * @name angular.isString * @module ng - * @function + * @kind function * * @description * Determines if a reference is a `String`. @@ -549,7 +554,7 @@ function isString(value){return typeof value === 'string';} * @ngdoc function * @name angular.isNumber * @module ng - * @function + * @kind function * * @description * Determines if a reference is a `Number`. @@ -564,7 +569,7 @@ function isNumber(value){return typeof value === 'number';} * @ngdoc function * @name angular.isDate * @module ng - * @function + * @kind function * * @description * Determines if a value is a date. @@ -572,7 +577,7 @@ function isNumber(value){return typeof value === 'number';} * @param {*} value Reference to check. * @returns {boolean} True if `value` is a `Date`. */ -function isDate(value){ +function isDate(value) { return toString.call(value) === '[object Date]'; } @@ -581,7 +586,7 @@ function isDate(value){ * @ngdoc function * @name angular.isArray * @module ng - * @function + * @kind function * * @description * Determines if a reference is an `Array`. @@ -589,16 +594,20 @@ function isDate(value){ * @param {*} value Reference to check. * @returns {boolean} True if `value` is an `Array`. */ -function isArray(value) { - return toString.call(value) === '[object Array]'; -} - +var isArray = (function() { + if (!isFunction(Array.isArray)) { + return function(value) { + return toString.call(value) === '[object Array]'; + }; + } + return Array.isArray; +})(); /** * @ngdoc function * @name angular.isFunction * @module ng - * @function + * @kind function * * @description * Determines if a reference is a `Function`. @@ -653,6 +662,11 @@ function isBoolean(value) { } +function isPromiseLike(obj) { + return obj && isFunction(obj.then); +} + + var trim = (function() { // native trim is way faster: http://jsperf.com/angular-trim-test // but IE doesn't have it... :-( @@ -672,7 +686,7 @@ var trim = (function() { * @ngdoc function * @name angular.isElement * @module ng - * @function + * @kind function * * @description * Determines if a reference is a DOM element (or wrapped jQuery element). @@ -690,7 +704,7 @@ function isElement(node) { * @param str 'key1,key2,...' * @returns {object} in the form of {key1:true, key2:true, ...} */ -function makeMap(str){ +function makeMap(str) { var obj = {}, items = str.split(","), i; for ( i = 0; i < items.length; i++ ) obj[ items[i] ] = true; @@ -737,7 +751,7 @@ function size(obj, ownPropsOnly) { if (isArray(obj) || isString(obj)) { return obj.length; - } else if (isObject(obj)){ + } else if (isObject(obj)) { for (key in obj) if (!ownPropsOnly || obj.hasOwnProperty(key)) count++; @@ -783,7 +797,7 @@ function isLeafNode (node) { * @ngdoc function * @name angular.copy * @module ng - * @function + * @kind function * * @description * Creates a deep copy of `source`, which should be an object or an array. @@ -801,9 +815,9 @@ function isLeafNode (node) { * @returns {*} The copy or updated `destination`, if `destination` was specified. * * @example - + -
+
Name:
E-mail:
@@ -817,26 +831,27 @@ function isLeafNode (node) {
*/ -function copy(source, destination){ +function copy(source, destination, stackSource, stackDest) { if (isWindow(source) || isScope(source)) { throw ngMinErr('cpws', "Can't copy! Making copies of Window or Scope instances is not supported."); @@ -846,52 +861,87 @@ function copy(source, destination){ destination = source; if (source) { if (isArray(source)) { - destination = copy(source, []); + destination = copy(source, [], stackSource, stackDest); } else if (isDate(source)) { destination = new Date(source.getTime()); } else if (isRegExp(source)) { - destination = new RegExp(source.source); + destination = new RegExp(source.source, source.toString().match(/[^\/]*$/)[0]); + destination.lastIndex = source.lastIndex; } else if (isObject(source)) { - destination = copy(source, {}); + destination = copy(source, {}, stackSource, stackDest); } } } else { if (source === destination) throw ngMinErr('cpi', "Can't copy! Source and destination are identical."); + + stackSource = stackSource || []; + stackDest = stackDest || []; + + if (isObject(source)) { + var index = indexOf(stackSource, source); + if (index !== -1) return stackDest[index]; + + stackSource.push(source); + stackDest.push(destination); + } + + var result; if (isArray(source)) { destination.length = 0; for ( var i = 0; i < source.length; i++) { - destination.push(copy(source[i])); + result = copy(source[i], null, stackSource, stackDest); + if (isObject(source[i])) { + stackSource.push(source[i]); + stackDest.push(result); + } + destination.push(result); } } else { var h = destination.$$hashKey; - forEach(destination, function(value, key){ - delete destination[key]; - }); + if (isArray(destination)) { + destination.length = 0; + } else { + forEach(destination, function(value, key) { + delete destination[key]; + }); + } for ( var key in source) { - destination[key] = copy(source[key]); + result = copy(source[key], null, stackSource, stackDest); + if (isObject(source[key])) { + stackSource.push(source[key]); + stackDest.push(result); + } + destination[key] = result; } setHashKey(destination,h); } + } return destination; } /** - * Create a shallow copy of an object + * Creates a shallow copy of an object, an array or a primitive */ function shallowCopy(src, dst) { - dst = dst || {}; + if (isArray(src)) { + dst = dst || []; - for(var key in src) { - // shallowCopy is only ever called by $compile nodeLinkFn, which has control over src - // so we don't need to worry about using our custom hasOwnProperty here - if (src.hasOwnProperty(key) && !(key.charAt(0) === '$' && key.charAt(1) === '$')) { - dst[key] = src[key]; + for ( var i = 0; i < src.length; i++) { + dst[i] = src[i]; + } + } else if (isObject(src)) { + dst = dst || {}; + + for (var key in src) { + if (hasOwnProperty.call(src, key) && !(key.charAt(0) === '$' && key.charAt(1) === '$')) { + dst[key] = src[key]; + } } } - return dst; + return dst || src; } @@ -899,7 +949,7 @@ function shallowCopy(src, dst) { * @ngdoc function * @name angular.equals * @module ng - * @function + * @kind function * * @description * Determines if two objects or two values are equivalent. Supports value types, regular @@ -911,7 +961,7 @@ function shallowCopy(src, dst) { * * Both objects or values are of the same type and all of their properties are equal by * comparing them with `angular.equals`. * * Both values are NaN. (In JavaScript, NaN == NaN => false. But we consider two NaN as equal) - * * Both values represent the same regular expression (In JavasScript, + * * Both values represent the same regular expression (In JavaScript, * /abc/ == /abc/ => false. But we consider two regular expressions as equal when their textual * representation matches). * @@ -940,7 +990,8 @@ function equals(o1, o2) { return true; } } else if (isDate(o1)) { - return isDate(o2) && o1.getTime() == o2.getTime(); + if (!isDate(o2)) return false; + return (isNaN(o1.getTime()) && isNaN(o2.getTime())) || (o1.getTime() === o2.getTime()); } else if (isRegExp(o1) && isRegExp(o2)) { return o1.toString() == o2.toString(); } else { @@ -964,12 +1015,25 @@ function equals(o1, o2) { return false; } +var csp = function() { + if (isDefined(csp.isActive_)) return csp.isActive_; + + var active = !!(document.querySelector('[ng-csp]') || + document.querySelector('[data-ng-csp]')); + + if (!active) { + try { + /* jshint -W031, -W054 */ + new Function(''); + /* jshint +W031, +W054 */ + } catch (e) { + active = true; + } + } + + return (csp.isActive_ = active); +}; -function csp() { - return (document.securityPolicy && document.securityPolicy.isActive) || - (document.querySelector && - !!(document.querySelector('[ng-csp]') || document.querySelector('[data-ng-csp]'))); -} function concat(array1, array2, index) { @@ -986,7 +1050,7 @@ function sliceArgs(args, startIndex) { * @ngdoc function * @name angular.bind * @module ng - * @function + * @kind function * * @description * Returns a function which calls function `fn` bound to `self` (`self` becomes the `this` for @@ -1042,7 +1106,7 @@ function toJsonReplacer(key, value) { * @ngdoc function * @name angular.toJson * @module ng - * @function + * @kind function * * @description * Serializes input into a JSON-formatted string. Properties with leading $ characters will be @@ -1062,7 +1126,7 @@ function toJson(obj, pretty) { * @ngdoc function * @name angular.fromJson * @module ng - * @function + * @kind function * * @description * Deserializes a JSON string. @@ -1139,13 +1203,13 @@ function tryDecodeURIComponent(value) { */ function parseKeyValue(/**string*/keyValue) { var obj = {}, key_value, key; - forEach((keyValue || "").split('&'), function(keyValue){ + forEach((keyValue || "").split('&'), function(keyValue) { if ( keyValue ) { - key_value = keyValue.split('='); + key_value = keyValue.replace(/\+/g,'%20').split('='); key = tryDecodeURIComponent(key_value[0]); if ( isDefined(key) ) { var val = isDefined(key_value[1]) ? tryDecodeURIComponent(key_value[1]) : true; - if (!obj[key]) { + if (!hasOwnProperty.call(obj, key)) { obj[key] = val; } else if(isArray(obj[key])) { obj[key].push(val); @@ -1319,7 +1383,7 @@ function angularInit(element, bootstrap) { * * Angular will detect if it has been loaded into the browser more than once and only allow the * first loaded script to be bootstrapped and will report a warning to the browser console for - * each of the subsequent scripts. This prevents strange results in applications, where otherwise + * each of the subsequent scripts. This prevents strange results in applications, where otherwise * multiple instances of Angular try to work on the DOM. * * @@ -1365,7 +1429,11 @@ function bootstrap(element, modules) { if (element.injector()) { var tag = (element[0] === document) ? 'document' : startingTag(element); - throw ngMinErr('btstrpd', "App Already Bootstrapped with this Element '{0}'", tag); + //Encode angle brackets to prevent input from being sanitized to empty string #8683 + throw ngMinErr( + 'btstrpd', + "App Already Bootstrapped with this Element '{0}'", + tag.replace(//,'>')); } modules = modules || []; @@ -1401,7 +1469,7 @@ function bootstrap(element, modules) { } var SNAKE_CASE_REGEXP = /[A-Z]/g; -function snake_case(name, separator){ +function snake_case(name, separator) { separator = separator || '_'; return name.replace(SNAKE_CASE_REGEXP, function(letter, pos) { return (pos ? separator : '') + letter.toLowerCase(); @@ -1411,8 +1479,9 @@ function snake_case(name, separator){ function bindJQuery() { // bind to jQuery if present; jQuery = window.jQuery; - // reset to jQuery or default to us. - if (jQuery) { + // Use jQuery if it exists with proper functionality, otherwise default to us. + // Angular 1.2+ requires jQuery 1.7.1+ for on()/off() support. + if (jQuery && jQuery.fn.on) { jqLite = jQuery; extend(jQuery.fn, { scope: JQLitePrototype.scope, @@ -1448,7 +1517,7 @@ function assertArgFn(arg, name, acceptArrayAnnotation) { } assertArg(isFunction(arg), name, 'not a function, got ' + - (arg && typeof arg == 'object' ? arg.constructor.name || 'Object' : typeof arg)); + (arg && typeof arg === 'object' ? arg.constructor.name || 'Object' : typeof arg)); return arg; } @@ -1558,7 +1627,7 @@ function setupModuleLoader(window) { * * # Module * - * A module is a collection of services, directives, filters, and configuration information. + * A module is a collection of services, directives, controllers, filters, and configuration information. * `angular.module` is used to configure the {@link auto.$injector $injector}. * * ```js @@ -1586,9 +1655,9 @@ function setupModuleLoader(window) { * {@link angular.bootstrap} to simplify this process for you. * * @param {!string} name The name of the module to create or retrieve. -<<<<<* @param {!Array.=} requires If specified then new module is being created. If ->>>>>* unspecified then the module is being retrieved for further configuration. - * @param {Function} configFn Optional configuration function for the module. Same as + * @param {!Array.=} requires If specified then new module is being created. If + * unspecified then the module is being retrieved for further configuration. + * @param {Function=} configFn Optional configuration function for the module. Same as * {@link angular.Module#config Module#config()}. * @returns {module} new module with the {@link angular.Module} api. */ @@ -1628,7 +1697,7 @@ function setupModuleLoader(window) { * @ngdoc property * @name angular.Module#requires * @module ng - * @returns {Array.} List of module names which must be loaded before this module. + * * @description * Holds the list of modules which the injector will load before the current module is * loaded. @@ -1639,8 +1708,9 @@ function setupModuleLoader(window) { * @ngdoc property * @name angular.Module#name * @module ng - * @returns {string} Name of the module. + * * @description + * Name of the module. */ name: name, @@ -1825,12 +1895,11 @@ function setupModuleLoader(window) { } -/* global - angularModule: true, - version: true, +/* global angularModule: true, + version: true, - $LocaleProvider, - $CompileProvider, + $LocaleProvider, + $CompileProvider, htmlAnchorDirective, inputDirective, @@ -1918,11 +1987,11 @@ function setupModuleLoader(window) { * - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat". */ var version = { - full: '1.2.17-build.157+sha.5f5bf07', // all of these placeholder strings will be replaced by grunt's + full: '1.2.25', // all of these placeholder strings will be replaced by grunt's major: 1, // package task minor: 2, - dot: 17, - codeName: 'snapshot' + dot: 25, + codeName: 'hypnotic-gesticulation' }; @@ -1935,11 +2004,11 @@ function publishExternalAPI(angular){ 'element': jqLite, 'forEach': forEach, 'injector': createInjector, - 'noop':noop, - 'bind':bind, + 'noop': noop, + 'bind': bind, 'toJson': toJson, 'fromJson': fromJson, - 'identity':identity, + 'identity': identity, 'isUndefined': isUndefined, 'isDefined': isDefined, 'isString': isString, @@ -2046,12 +2115,10 @@ function publishExternalAPI(angular){ ]); } -/* global - - -JQLitePrototype, - -addEventListenerFn, - -removeEventListenerFn, - -BOOLEAN_ATTR +/* global JQLitePrototype: true, + addEventListenerFn: true, + removeEventListenerFn: true, + BOOLEAN_ATTR: true */ ////////////////////////////////// @@ -2062,7 +2129,7 @@ function publishExternalAPI(angular){ * @ngdoc function * @name angular.element * @module ng - * @function + * @kind function * * @description * Wraps a raw DOM element or HTML string as a [jQuery](http://jquery.com) element. @@ -2144,8 +2211,9 @@ function publishExternalAPI(angular){ * @returns {Object} jQuery object. */ +JQLite.expando = 'ng339'; + var jqCache = JQLite.cache = {}, - jqName = JQLite.expando = 'ng-' + new Date().getTime(), jqId = 1, addEventListenerFn = (window.document.addEventListener ? function(element, type, fn) {element.addEventListener(type, fn, false);} @@ -2355,7 +2423,7 @@ function jqLiteOff(element, type, fn, unsupported) { } function jqLiteRemoveData(element, name) { - var expandoId = element[jqName], + var expandoId = element.ng339, expandoStore = jqCache[expandoId]; if (expandoStore) { @@ -2369,17 +2437,17 @@ function jqLiteRemoveData(element, name) { jqLiteOff(element); } delete jqCache[expandoId]; - element[jqName] = undefined; // ie does not allow deletion of attributes on elements. + element.ng339 = undefined; // don't delete DOM expandos. IE and Chrome don't like it } } function jqLiteExpandoStore(element, key, value) { - var expandoId = element[jqName], + var expandoId = element.ng339, expandoStore = jqCache[expandoId || -1]; if (isDefined(value)) { if (!expandoStore) { - element[jqName] = expandoId = jqNextId(); + element.ng339 = expandoId = jqNextId(); expandoStore = jqCache[expandoId] = {}; } expandoStore[key] = value; @@ -2464,25 +2532,22 @@ function jqLiteController(element, name) { } function jqLiteInheritedData(element, name, value) { - element = jqLite(element); - // if element is the document object work with the html element instead // this makes $(document).scope() possible - if(element[0].nodeType == 9) { - element = element.find('html'); + if(element.nodeType == 9) { + element = element.documentElement; } var names = isArray(name) ? name : [name]; - while (element.length) { - var node = element[0]; + while (element) { for (var i = 0, ii = names.length; i < ii; i++) { - if ((value = element.data(names[i])) !== undefined) return value; + if ((value = jqLite.data(element, names[i])) !== undefined) return value; } // If dealing with a document fragment node with a host element, and no parent, use the host // element as the parent. This enables directives within a Shadow DOM or polyfilled Shadow DOM // to lookup parent controllers. - element = jqLite(node.parentNode || (node.nodeType === 11 && node.host)); + element = element.parentNode || (element.nodeType === 11 && element.host); } } @@ -2557,18 +2622,25 @@ function getBooleanAttrName(element, name) { return booleanAttr && BOOLEAN_ELEMENTS[element.nodeName] && booleanAttr; } +forEach({ + data: jqLiteData, + removeData: jqLiteRemoveData +}, function(fn, name) { + JQLite[name] = fn; +}); + forEach({ data: jqLiteData, inheritedData: jqLiteInheritedData, scope: function(element) { // Can't use jqLiteData here directly so we stay compatible with jQuery! - return jqLite(element).data('$scope') || jqLiteInheritedData(element.parentNode || element, ['$isolateScope', '$scope']); + return jqLite.data(element, '$scope') || jqLiteInheritedData(element.parentNode || element, ['$isolateScope', '$scope']); }, isolateScope: function(element) { // Can't use jqLiteData here directly so we stay compatible with jQuery! - return jqLite(element).data('$isolateScope') || jqLite(element).data('$isolateScopeNoTemplate'); + return jqLite.data(element, '$isolateScope') || jqLite.data(element, '$isolateScopeNoTemplate'); }, controller: jqLiteController, @@ -2698,6 +2770,7 @@ forEach({ */ JQLite.prototype[name] = function(arg1, arg2) { var i, key; + var nodeCount = this.length; // jqLiteHasClass has only two arguments, but is a getter-only fn, so we need to special-case it // in a way that survives minification. @@ -2707,7 +2780,7 @@ forEach({ if (isObject(arg1)) { // we are a write, but the object properties are the key/values - for (i = 0; i < this.length; i++) { + for (i = 0; i < nodeCount; i++) { if (fn === jqLiteData) { // data() takes the whole object in jQuery fn(this[i], arg1); @@ -2721,9 +2794,10 @@ forEach({ return this; } else { // we are a read, so read the first child. + // TODO: do we still need this? var value = fn.$dv; // Only if we have $dv do we iterate over all, otherwise it is just the first element. - var jj = (value === undefined) ? Math.min(this.length, 1) : this.length; + var jj = (value === undefined) ? Math.min(nodeCount, 1) : nodeCount; for (var j = 0; j < jj; j++) { var nodeValue = fn(this[j], arg1, arg2); value = value ? value + nodeValue : nodeValue; @@ -2732,7 +2806,7 @@ forEach({ } } else { // we are a write, so apply to all children - for (i = 0; i < this.length; i++) { + for (i = 0; i < nodeCount; i++) { fn(this[i], arg1, arg2); } // return self for chaining @@ -2993,19 +3067,37 @@ forEach({ clone: jqLiteClone, - triggerHandler: function(element, eventName, eventData) { + triggerHandler: function(element, event, extraParameters) { + + var dummyEvent, eventFnsCopy, handlerArgs; + var eventName = event.type || event; var eventFns = (jqLiteExpandoStore(element, 'events') || {})[eventName]; - eventData = eventData || []; + if (eventFns) { - var event = [{ - preventDefault: noop, - stopPropagation: noop - }]; + // Create a dummy event to pass to the handlers + dummyEvent = { + preventDefault: function() { this.defaultPrevented = true; }, + isDefaultPrevented: function() { return this.defaultPrevented === true; }, + stopPropagation: noop, + type: eventName, + target: element + }; - forEach(eventFns, function(fn) { - fn.apply(element, event.concat(eventData)); - }); + // If a custom event was provided then extend our dummy event with it + if (event.type) { + dummyEvent = extend(dummyEvent, event); + } + + // Copy event handlers in case event handlers array is modified during execution. + eventFnsCopy = shallowCopy(eventFns); + handlerArgs = extraParameters ? [dummyEvent].concat(extraParameters) : [dummyEvent]; + + forEach(eventFnsCopy, function(fn) { + fn.apply(element, handlerArgs); + }); + + } } }, function(fn, name){ /** @@ -3044,16 +3136,16 @@ forEach({ * @returns {string} hash string such that the same input will have the same hash string. * The resulting string key is in 'type:hashKey' format. */ -function hashKey(obj) { +function hashKey(obj, nextUidFn) { var objType = typeof obj, key; - if (objType == 'object' && obj !== null) { + if (objType == 'function' || (objType == 'object' && obj !== null)) { if (typeof (key = obj.$$hashKey) == 'function') { // must invoke on object to keep the right this key = obj.$$hashKey(); } else if (key === undefined) { - key = obj.$$hashKey = nextUid(); + key = obj.$$hashKey = (nextUidFn || nextUid)(); } } else { key = obj; @@ -3065,7 +3157,13 @@ function hashKey(obj) { /** * HashMap which can use objects as keys */ -function HashMap(array){ +function HashMap(array, isolatedUid) { + if (isolatedUid) { + var uid = 0; + this.nextUid = function() { + return ++uid; + }; + } forEach(array, this.put, this); } HashMap.prototype = { @@ -3075,7 +3173,7 @@ HashMap.prototype = { * @param value value to store can be any type */ put: function(key, value) { - this[hashKey(key)] = value; + this[hashKey(key, this.nextUid)] = value; }, /** @@ -3083,7 +3181,7 @@ HashMap.prototype = { * @returns {Object} the value for the key */ get: function(key) { - return this[hashKey(key)]; + return this[hashKey(key, this.nextUid)]; }, /** @@ -3091,7 +3189,7 @@ HashMap.prototype = { * @param key */ remove: function(key) { - var value = this[key = hashKey(key)]; + var value = this[key = hashKey(key, this.nextUid)]; delete this[key]; return value; } @@ -3101,7 +3199,7 @@ HashMap.prototype = { * @ngdoc function * @module ng * @name angular.injector - * @function + * @kind function * * @description * Creates an injector function that can be used for retrieving services as well as for @@ -3169,7 +3267,7 @@ function annotate(fn) { argDecl, last; - if (typeof fn == 'function') { + if (typeof fn === 'function') { if (!($inject = fn.$inject)) { $inject = []; if (fn.length) { @@ -3198,7 +3296,7 @@ function annotate(fn) { /** * @ngdoc service * @name $injector - * @function + * @kind function * * @description * @@ -3382,7 +3480,7 @@ function annotate(fn) { /** - * @ngdoc object + * @ngdoc service * @name $provide * * @description @@ -3688,7 +3786,7 @@ function createInjector(modulesToLoad) { var INSTANTIATING = {}, providerSuffix = 'Provider', path = [], - loadedModules = new HashMap(), + loadedModules = new HashMap([], true), providerCache = { $provide: { provider: supportObject(provider), @@ -3821,7 +3919,8 @@ function createInjector(modulesToLoad) { function getService(serviceName) { if (cache.hasOwnProperty(serviceName)) { if (cache[serviceName] === INSTANTIATING) { - throw $injectorMinErr('cdep', 'Circular dependency found: {0}', path.join(' <- ')); + throw $injectorMinErr('cdep', 'Circular dependency found: {0}', + serviceName + ' <- ' + path.join(' <- ')); } return cache[serviceName]; } else { @@ -3858,8 +3957,7 @@ function createInjector(modulesToLoad) { : getService(key) ); } - if (!fn.$inject) { - // this means that we must be an array. + if (isArray(fn)) { fn = fn[length]; } @@ -4104,7 +4202,7 @@ var $AnimateProvider = ['$provide', function($provide) { * * @ngdoc method * @name $animate#enter - * @function + * @kind function * @description Inserts the element into the DOM either after the `after` element or within * the `parent` element. Once complete, the done() callback will be fired (if provided). * @param {DOMElement} element the element which will be inserted into the DOM @@ -4131,7 +4229,7 @@ var $AnimateProvider = ['$provide', function($provide) { * * @ngdoc method * @name $animate#leave - * @function + * @kind function * @description Removes the element from the DOM. Once complete, the done() callback will be * fired (if provided). * @param {DOMElement} element the element which will be removed from the DOM @@ -4147,7 +4245,7 @@ var $AnimateProvider = ['$provide', function($provide) { * * @ngdoc method * @name $animate#move - * @function + * @kind function * @description Moves the position of the provided element within the DOM to be placed * either after the `after` element or inside of the `parent` element. Once complete, the * done() callback will be fired (if provided). @@ -4171,7 +4269,7 @@ var $AnimateProvider = ['$provide', function($provide) { * * @ngdoc method * @name $animate#addClass - * @function + * @kind function * @description Adds the provided className CSS class value to the provided element. Once * complete, the done() callback will be fired (if provided). * @param {DOMElement} element the element which will have the className value @@ -4194,7 +4292,7 @@ var $AnimateProvider = ['$provide', function($provide) { * * @ngdoc method * @name $animate#removeClass - * @function + * @kind function * @description Removes the provided className CSS class value from the provided element. * Once complete, the done() callback will be fired (if provided). * @param {DOMElement} element the element which will have the className value @@ -4217,10 +4315,10 @@ var $AnimateProvider = ['$provide', function($provide) { * * @ngdoc method * @name $animate#setClass - * @function + * @kind function * @description Adds and/or removes the given CSS classes to and from the element. * Once complete, the done() callback will be fired (if provided). - * @param {DOMElement} element the element which will it's CSS classes changed + * @param {DOMElement} element the element which will have its CSS classes changed * removed from it * @param {string} add the CSS classes which will be added to the element * @param {string} remove the CSS class which will be removed from the element @@ -4484,6 +4582,13 @@ function Browser(window, document, $log, $sniffer) { return callback; }; + /** + * 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. + */ + self.$$checkUrlChange = fireUrlChange; + ////////////////////////////////////////////////////////////// // Misc API ////////////////////////////////////////////////////////////// @@ -4700,8 +4805,10 @@ function $BrowserProvider(){ $scope.keys = []; $scope.cache = $cacheFactory('cacheId'); $scope.put = function(key, value) { - $scope.cache.put(key, value); - $scope.keys.push(key); + if ($scope.cache.get(key) === undefined) { + $scope.keys.push(key); + } + $scope.cache.put(key, value === undefined ? null : value); }; }]); @@ -4774,7 +4881,7 @@ function $CacheFactoryProvider() { /** * @ngdoc method * @name $cacheFactory.Cache#put - * @function + * @kind function * * @description * Inserts a named entry into the {@link $cacheFactory.Cache Cache} object to be @@ -4810,7 +4917,7 @@ function $CacheFactoryProvider() { /** * @ngdoc method * @name $cacheFactory.Cache#get - * @function + * @kind function * * @description * Retrieves named data stored in the {@link $cacheFactory.Cache Cache} object. @@ -4834,7 +4941,7 @@ function $CacheFactoryProvider() { /** * @ngdoc method * @name $cacheFactory.Cache#remove - * @function + * @kind function * * @description * Removes an entry from the {@link $cacheFactory.Cache Cache} object. @@ -4862,7 +4969,7 @@ function $CacheFactoryProvider() { /** * @ngdoc method * @name $cacheFactory.Cache#removeAll - * @function + * @kind function * * @description * Clears the cache object of any entries. @@ -4878,7 +4985,7 @@ function $CacheFactoryProvider() { /** * @ngdoc method * @name $cacheFactory.Cache#destroy - * @function + * @kind function * * @description * Destroys the {@link $cacheFactory.Cache Cache} object entirely, @@ -4895,7 +5002,7 @@ function $CacheFactoryProvider() { /** * @ngdoc method * @name $cacheFactory.Cache#info - * @function + * @kind function * * @description * Retrieve information regarding a particular {@link $cacheFactory.Cache Cache}. @@ -4950,7 +5057,7 @@ function $CacheFactoryProvider() { * @name $cacheFactory#info * * @description - * Get information about all the of the caches that have been created + * Get information about all the caches that have been created * * @returns {Object} - key-value map of `cacheId` to the result of calling `cache#info` */ @@ -5051,7 +5158,7 @@ function $TemplateCacheProvider() { /** * @ngdoc service * @name $compile - * @function + * @kind function * * @description * Compiles an HTML string or DOM into a template and produces a template function, which @@ -5089,7 +5196,6 @@ function $TemplateCacheProvider() { * template: '
', // or // function(tElement, tAttrs) { ... }, * // or * // templateUrl: 'directive.html', // or // function(tElement, tAttrs) { ... }, - * replace: false, * transclude: false, * restrict: 'A', * scope: false, @@ -5193,7 +5299,7 @@ function $TemplateCacheProvider() { * local name. Given `` and widget definition of * `scope: { localFn:'&myAttr' }`, then isolate scope property `localFn` will point to * a function wrapper for the `count = count + value` expression. Often it's desirable to - * pass data from the isolated scope via an expression and to the parent scope, this can be + * pass data from the isolated scope via an expression to the parent scope, this can be * done by passing a map of local variable names and values into the expression wrapper fn. * For example, if the expression is `increment(amount)` then we can specify the amount value * by calling the `localFn` as `localFn({amount: 22})`. @@ -5222,9 +5328,9 @@ function $TemplateCacheProvider() { * * * (no prefix) - Locate the required controller on the current element. Throw an error if not found. * * `?` - Attempt to locate the required controller or pass `null` to the `link` fn if not found. - * * `^` - Locate the required controller by searching the element's parents. Throw an error if not found. - * * `?^` - Attempt to locate the required controller by searching the element's parents or pass `null` to the - * `link` fn if not found. + * * `^` - Locate the required controller by searching the element and its parents. Throw an error if not found. + * * `?^` - Attempt to locate the required controller by searching the element and its parents or pass + * `null` to the `link` fn if not found. * * * #### `controllerAs` @@ -5244,14 +5350,16 @@ function $TemplateCacheProvider() { * * * #### `template` - * replace the current element with the contents of the HTML. The replacement process - * migrates all of the attributes / classes from the old element to the new one. See the - * {@link guide/directive#creating-custom-directives_creating-directives_template-expanding-directive - * Directives Guide} for an example. + * HTML markup that may: + * * Replace the contents of the directive's element (default). + * * Replace the directive's element itself (if `replace` is true - DEPRECATED). + * * Wrap the contents of the directive's element (if `transclude` is true). * - * You can specify `template` as a string representing the template or as a function which takes - * two arguments `tElement` and `tAttrs` (described in the `compile` function api below) and - * returns a string value representing the template. + * Value may be: + * + * * A string. For example `
{{delete_str}}
`. + * * A function which takes two arguments `tElement` and `tAttrs` (described in the `compile` + * function api below) and returns a string value. * * * #### `templateUrl` @@ -5265,12 +5373,15 @@ function $TemplateCacheProvider() { * api/ng.$sce#getTrustedResourceUrl $sce.getTrustedResourceUrl}. * * - * #### `replace` - * specify where the template should be inserted. Defaults to `false`. + * #### `replace` ([*DEPRECATED*!], will be removed in next major release) + * specify what the template should replace. Defaults to `false`. * - * * `true` - the template will replace the current element. - * * `false` - the template will replace the contents of the current element. + * * `true` - the template will replace the directive's element. + * * `false` - the template will replace the contents of the directive's element. * + * The replacement process migrates all of the attributes / classes from the old element to the new + * one. See the {@link guide/directive#creating-custom-directives_creating-directives_template-expanding-directive + * Directives Guide} for an example. * * #### `transclude` * compile the content of the element and make it available to the directive. @@ -5284,6 +5395,11 @@ function $TemplateCacheProvider() { * * `true` - transclude the content of the directive. * * `'element'` - transclude the whole element including any directives defined at lower priority. * + *
+ * **Note:** When testing an element transclude directive you must not place the directive at the root of the + * DOM fragment that is being compiled. See {@link guide/unit-testing#testing-transclusion-directives + * Testing Transclusion Directives}. + *
* * #### `compile` * @@ -5292,11 +5408,7 @@ function $TemplateCacheProvider() { * ``` * * The compile function deals with transforming the template DOM. Since most directives do not do - * template transformation, it is not used often. Examples that require compile functions are - * directives that transform template DOM, such as {@link - * api/ng.directive:ngRepeat ngRepeat}, or load the contents - * asynchronously, such as {@link ngRoute.directive:ngView ngView}. The - * compile function takes the following arguments. + * template transformation, it is not used often. The compile function takes the following arguments: * * * `tElement` - template element - The element where the directive has been declared. It is * safe to do template transformation on the element and child elements only. @@ -5424,10 +5536,10 @@ function $TemplateCacheProvider() { * to illustrate how `$compile` works. *
* - + -
+


@@ -5534,7 +5645,7 @@ var $compileMinErr = minErr('$compile'); /** * @ngdoc provider * @name $compileProvider - * @function + * @kind function * * @description */ @@ -5542,8 +5653,8 @@ $CompileProvider.$inject = ['$provide', '$$sanitizeUriProvider']; function $CompileProvider($provide, $$sanitizeUriProvider) { var hasDirectives = {}, Suffix = 'Directive', - COMMENT_DIRECTIVE_REGEXP = /^\s*directive\:\s*([\d\w\-_]+)\s+(.*)$/, - CLASS_DIRECTIVE_REGEXP = /(([\d\w\-_]+)(?:\:([^;]+))?;?)/; + COMMENT_DIRECTIVE_REGEXP = /^\s*directive\:\s*([\d\w_\-]+)\s+(.*)$/, + CLASS_DIRECTIVE_REGEXP = /(([\d\w_\-]+)(?:\:([^;]+))?;?)/; // Ref: http://developers.whatwg.org/webappapis.html#event-handler-idl-attributes // The assumption is that future DOM event attribute names will begin with @@ -5553,7 +5664,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { /** * @ngdoc method * @name $compileProvider#directive - * @function + * @kind function * * @description * Register a new directive with the compiler. @@ -5606,7 +5717,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { /** * @ngdoc method * @name $compileProvider#aHrefSanitizationWhitelist - * @function + * @kind function * * @description * Retrieves or overrides the default regular expression that is used for whitelisting of safe @@ -5636,7 +5747,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { /** * @ngdoc method * @name $compileProvider#imgSrcSanitizationWhitelist - * @function + * @kind function * * @description * Retrieves or overrides the default regular expression that is used for whitelisting of safe @@ -5680,7 +5791,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { /** * @ngdoc method * @name $compile.directive.Attributes#$addClass - * @function + * @kind function * * @description * Adds the CSS class value specified by the classVal parameter to the element. If animations @@ -5697,7 +5808,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { /** * @ngdoc method * @name $compile.directive.Attributes#$removeClass - * @function + * @kind function * * @description * Removes the CSS class value specified by the classVal parameter from the element. If @@ -5714,7 +5825,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { /** * @ngdoc method * @name $compile.directive.Attributes#$updateClass - * @function + * @kind function * * @description * Adds and removes the appropriate CSS class values to the element based on the difference @@ -5802,7 +5913,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { /** * @ngdoc method * @name $compile.directive.Attributes#$observe - * @function + * @kind function * * @description * Observes an interpolated attribute. @@ -5865,7 +5976,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { compileNodes($compileNodes, transcludeFn, $compileNodes, maxPriority, ignoreDirective, previousCompileContext); safeAddClass($compileNodes, 'ng-scope'); - return function publicLinkFn(scope, cloneConnectFn, transcludeControllers){ + return function publicLinkFn(scope, cloneConnectFn, transcludeControllers, parentBoundTranscludeFn){ assertArg(scope, 'scope'); // important!!: we must call our jqLite.clone() since the jQuery one is trying to be smart // and sometimes changes the structure of the DOM. @@ -5887,7 +5998,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { } if (cloneConnectFn) cloneConnectFn($linkNode, scope); - if (compositeLinkFn) compositeLinkFn(scope, $linkNode, $linkNode); + if (compositeLinkFn) compositeLinkFn(scope, $linkNode, $linkNode, parentBoundTranscludeFn); return $linkNode; }; } @@ -5934,7 +6045,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { : null; if (nodeLinkFn && nodeLinkFn.scope) { - safeAddClass(jqLite(nodeList[i]), 'ng-scope'); + safeAddClass(attrs.$$element, 'ng-scope'); } childLinkFn = (nodeLinkFn && nodeLinkFn.terminal || @@ -5942,7 +6053,9 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { !childNodes.length) ? null : compileNodes(childNodes, - nodeLinkFn ? nodeLinkFn.transclude : transcludeFn); + nodeLinkFn ? ( + (nodeLinkFn.transcludeOnThisElement || !nodeLinkFn.templateOnThisElement) + && nodeLinkFn.transclude) : transcludeFn); linkFns.push(nodeLinkFn, childLinkFn); linkFnFound = linkFnFound || nodeLinkFn || childLinkFn; @@ -5953,8 +6066,8 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { // return a linking function if we have found anything, null otherwise return linkFnFound ? compositeLinkFn : null; - function compositeLinkFn(scope, nodeList, $rootElement, boundTranscludeFn) { - var nodeLinkFn, childLinkFn, node, $node, childScope, childTranscludeFn, i, ii, n; + function compositeLinkFn(scope, nodeList, $rootElement, parentBoundTranscludeFn) { + var nodeLinkFn, childLinkFn, node, childScope, i, ii, n, childBoundTranscludeFn; // copy nodeList so that linking doesn't break due to live list updates. var nodeListLength = nodeList.length, @@ -5967,32 +6080,40 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { node = stableNodeList[n]; nodeLinkFn = linkFns[i++]; childLinkFn = linkFns[i++]; - $node = jqLite(node); if (nodeLinkFn) { if (nodeLinkFn.scope) { childScope = scope.$new(); - $node.data('$scope', childScope); + jqLite.data(node, '$scope', childScope); } else { childScope = scope; } - childTranscludeFn = nodeLinkFn.transclude; - if (childTranscludeFn || (!boundTranscludeFn && transcludeFn)) { - nodeLinkFn(childLinkFn, childScope, node, $rootElement, - createBoundTranscludeFn(scope, childTranscludeFn || transcludeFn) - ); + + if ( nodeLinkFn.transcludeOnThisElement ) { + childBoundTranscludeFn = createBoundTranscludeFn(scope, nodeLinkFn.transclude, parentBoundTranscludeFn); + + } else if (!nodeLinkFn.templateOnThisElement && parentBoundTranscludeFn) { + childBoundTranscludeFn = parentBoundTranscludeFn; + + } else if (!parentBoundTranscludeFn && transcludeFn) { + childBoundTranscludeFn = createBoundTranscludeFn(scope, transcludeFn); + } else { - nodeLinkFn(childLinkFn, childScope, node, $rootElement, boundTranscludeFn); + childBoundTranscludeFn = null; } + + nodeLinkFn(childLinkFn, childScope, node, $rootElement, childBoundTranscludeFn); + } else if (childLinkFn) { - childLinkFn(scope, node.childNodes, undefined, boundTranscludeFn); + childLinkFn(scope, node.childNodes, undefined, parentBoundTranscludeFn); } } } } - function createBoundTranscludeFn(scope, transcludeFn) { - return function boundTranscludeFn(transcludedScope, cloneFn, controllers) { + function createBoundTranscludeFn(scope, transcludeFn, previousBoundTranscludeFn) { + + var boundTranscludeFn = function(transcludedScope, cloneFn, controllers) { var scopeCreated = false; if (!transcludedScope) { @@ -6001,12 +6122,14 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { scopeCreated = true; } - var clone = transcludeFn(transcludedScope, cloneFn, controllers); + var clone = transcludeFn(transcludedScope, cloneFn, controllers, previousBoundTranscludeFn); if (scopeCreated) { - clone.on('$destroy', bind(transcludedScope, transcludedScope.$destroy)); + clone.on('$destroy', function() { transcludedScope.$destroy(); }); } return clone; }; + + return boundTranscludeFn; } /** @@ -6032,7 +6155,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { directiveNormalize(nodeName_(node).toLowerCase()), 'E', maxPriority, ignoreDirective); // iterate over the attributes - for (var attr, name, nName, ngAttrName, value, nAttrs = node.attributes, + for (var attr, name, nName, ngAttrName, value, isNgAttr, nAttrs = node.attributes, j = 0, jj = nAttrs && nAttrs.length; j < jj; j++) { var attrStartName = false; var attrEndName = false; @@ -6040,9 +6163,11 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { attr = nAttrs[j]; if (!msie || msie >= 8 || attr.specified) { name = attr.name; + value = trim(attr.value); + // support ngAttr attribute binding ngAttrName = directiveNormalize(name); - if (NG_ATTR_BINDING.test(ngAttrName)) { + if (isNgAttr = NG_ATTR_BINDING.test(ngAttrName)) { name = snake_case(ngAttrName.substr(6), '-'); } @@ -6055,9 +6180,11 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { nName = directiveNormalize(name.toLowerCase()); attrsMap[nName] = name; - attrs[nName] = value = trim(attr.value); - if (getBooleanAttrName(node, nName)) { - attrs[nName] = true; // presence means true + if (isNgAttr || !attrs.hasOwnProperty(nName)) { + attrs[nName] = value; + if (getBooleanAttrName(node, nName)) { + attrs[nName] = true; // presence means true + } } addAttrInterpolateDirective(node, directives, value, nName); addDirective(directives, nName, 'A', maxPriority, ignoreDirective, attrStartName, @@ -6184,6 +6311,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { templateDirective = previousCompileContext.templateDirective, nonTlbTranscludeDirective = previousCompileContext.nonTlbTranscludeDirective, hasTranscludeDirective = false, + hasTemplate = false, hasElementTranscludeDirective = previousCompileContext.hasElementTranscludeDirective, $compileNode = templateAttrs.$$element = jqLite(compileNode), directive, @@ -6248,12 +6376,12 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { if (directiveValue == 'element') { hasElementTranscludeDirective = true; terminalPriority = directive.priority; - $template = groupScan(compileNode, attrStart, attrEnd); + $template = $compileNode; $compileNode = templateAttrs.$$element = jqLite(document.createComment(' ' + directiveName + ': ' + templateAttrs[directiveName] + ' ')); compileNode = $compileNode[0]; - replaceWith(jqCollection, jqLite(sliceArgs($template)), compileNode); + replaceWith(jqCollection, sliceArgs($template), compileNode); childTranscludeFn = compile($template, transcludeFn, terminalPriority, replaceDirective && replaceDirective.name, { @@ -6274,6 +6402,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { } if (directive.template) { + hasTemplate = true; assertNoDuplicate('template', templateDirective, directive, $compileNode); templateDirective = directive; @@ -6323,6 +6452,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { } if (directive.templateUrl) { + hasTemplate = true; assertNoDuplicate('template', templateDirective, directive, $compileNode); templateDirective = directive; @@ -6331,7 +6461,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { } nodeLinkFn = compileTemplateUrl(directives.splice(i, directives.length - i), $compileNode, - templateAttrs, jqCollection, childTranscludeFn, preLinkFns, postLinkFns, { + templateAttrs, jqCollection, hasTranscludeDirective && childTranscludeFn, preLinkFns, postLinkFns, { controllerDirectives: controllerDirectives, newIsolateScopeDirective: newIsolateScopeDirective, templateDirective: templateDirective, @@ -6359,7 +6489,10 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { } nodeLinkFn.scope = newScopeDirective && newScopeDirective.scope === true; - nodeLinkFn.transclude = hasTranscludeDirective && childTranscludeFn; + nodeLinkFn.transcludeOnThisElement = hasTranscludeDirective; + nodeLinkFn.templateOnThisElement = hasTemplate; + nodeLinkFn.transclude = childTranscludeFn; + previousCompileContext.hasElementTranscludeDirective = hasElementTranscludeDirective; // might be normal or delayed nodeLinkFn depending on if templateUrl is present @@ -6425,28 +6558,26 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { function nodeLinkFn(childLinkFn, scope, linkNode, $rootElement, boundTranscludeFn) { var attrs, $element, i, ii, linkFn, controller, isolateScope, elementControllers = {}, transcludeFn; - if (compileNode === linkNode) { - attrs = templateAttrs; - } else { - attrs = shallowCopy(templateAttrs, new Attributes(jqLite(linkNode), templateAttrs.$attr)); - } + attrs = (compileNode === linkNode) + ? templateAttrs + : shallowCopy(templateAttrs, new Attributes(jqLite(linkNode), templateAttrs.$attr)); $element = attrs.$$element; if (newIsolateScopeDirective) { var LOCAL_REGEXP = /^\s*([@=&])(\??)\s*(\w*)\s*$/; - var $linkNode = jqLite(linkNode); isolateScope = scope.$new(true); - if (templateDirective && (templateDirective === newIsolateScopeDirective.$$originalDirective)) { - $linkNode.data('$isolateScope', isolateScope) ; + if (templateDirective && (templateDirective === newIsolateScopeDirective || + templateDirective === newIsolateScopeDirective.$$originalDirective)) { + $element.data('$isolateScope', isolateScope); } else { - $linkNode.data('$isolateScopeNoTemplate', isolateScope); + $element.data('$isolateScopeNoTemplate', isolateScope); } - safeAddClass($linkNode, 'ng-isolate-scope'); + safeAddClass($element, 'ng-isolate-scope'); forEach(newIsolateScopeDirective.scope, function(definition, scopeName) { var match = definition.match(LOCAL_REGEXP) || [], @@ -6480,7 +6611,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { if (parentGet.literal) { compare = equals; } else { - compare = function(a,b) { return a === b; }; + compare = function(a,b) { return a === b || (a !== a && b !== b); }; } parentSet = parentGet.assign || function() { // reset the change, or we will throw this exception on every $digest @@ -6664,7 +6795,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { // reapply the old attributes to the new element forEach(dst, function(value, key) { if (key.charAt(0) != '$') { - if (src[key]) { + if (src[key] && src[key] !== value) { value += (key === 'style' ? ';' : ' ') + src[key]; } dst.$set(key, value, true, srcAttr[key]); @@ -6753,7 +6884,6 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { }); afterTemplateChildLinkFn = compileNodes($compileNode[0].childNodes, childTranscludeFn); - while(linkQueue.length) { var scope = linkQueue.shift(), beforeTemplateLinkNode = linkQueue.shift(), @@ -6775,8 +6905,8 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { // Copy in CSS classes from original node safeAddClass(jqLite(linkNode), oldClasses); } - if (afterTemplateNodeLinkFn.transclude) { - childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude); + if (afterTemplateNodeLinkFn.transcludeOnThisElement) { + childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude, boundTranscludeFn); } else { childBoundTranscludeFn = boundTranscludeFn; } @@ -6790,13 +6920,17 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { }); return function delayedNodeLinkFn(ignoreChildLinkFn, scope, node, rootElement, boundTranscludeFn) { + var childBoundTranscludeFn = boundTranscludeFn; if (linkQueue) { linkQueue.push(scope); linkQueue.push(node); linkQueue.push(rootElement); - linkQueue.push(boundTranscludeFn); + linkQueue.push(childBoundTranscludeFn); } else { - afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, node, rootElement, boundTranscludeFn); + if (afterTemplateNodeLinkFn.transcludeOnThisElement) { + childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude, boundTranscludeFn); + } + afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, node, rootElement, childBoundTranscludeFn); } }; } @@ -6821,23 +6955,31 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { } - function addTextInterpolateDirective(directives, text) { - var interpolateFn = $interpolate(text, true); - if (interpolateFn) { - directives.push({ - priority: 0, - compile: valueFn(function textInterpolateLinkFn(scope, node) { - var parent = node.parent(), - bindings = parent.data('$binding') || []; - bindings.push(interpolateFn); - safeAddClass(parent.data('$binding', bindings), 'ng-binding'); - scope.$watch(interpolateFn, function interpolateFnWatchAction(value) { - node[0].nodeValue = value; - }); - }) - }); + function addTextInterpolateDirective(directives, text) { + var interpolateFn = $interpolate(text, true); + if (interpolateFn) { + directives.push({ + priority: 0, + compile: function textInterpolateCompileFn(templateNode) { + // when transcluding a template that has bindings in the root + // then we don't have a parent and should do this in the linkFn + var parent = templateNode.parent(), hasCompileParent = parent.length; + if (hasCompileParent) safeAddClass(templateNode.parent(), 'ng-binding'); + + return function textInterpolateLinkFn(scope, node) { + var parent = node.parent(), + bindings = parent.data('$binding') || []; + bindings.push(interpolateFn); + parent.data('$binding', bindings); + if (!hasCompileParent) safeAddClass(parent, 'ng-binding'); + scope.$watch(interpolateFn, function interpolateFnWatchAction(value) { + node[0].nodeValue = value; + }); + }; + } + }); + } } - } function getTrustedContext(node, attrNormalizedName) { @@ -7006,15 +7148,17 @@ function directiveNormalize(name) { /** * @ngdoc property * @name $compile.directive.Attributes#$attr - * @returns {object} A map of DOM element attribute names to the normalized name. This is - * needed to do reverse lookup from normalized name back to actual name. + * + * @description + * A map of DOM element attribute names to the normalized name. This is + * needed to do reverse lookup from normalized name back to actual name. */ /** * @ngdoc method * @name $compile.directive.Attributes#$set - * @function + * @kind function * * @description * Set DOM element attribute value. @@ -7137,7 +7281,7 @@ function $ControllerProvider() { instance = $injector.instantiate(expression, locals); if (identifier) { - if (!(locals && typeof locals.$scope == 'object')) { + if (!(locals && typeof locals.$scope === 'object')) { throw minErr('$controller')('noscp', "Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`.", constructor || expression.name, identifier); @@ -7160,18 +7304,19 @@ function $ControllerProvider() { * A {@link angular.element jQuery or jqLite} wrapper for the browser's `window.document` object. * * @example - + -
+

$document title:

window.document title:

- function MainCtrl($scope, $document) { - $scope.title = $document[0].title; - $scope.windowTitle = angular.element(window.document)[0].title; - } + angular.module('documentExample', []) + .controller('ExampleController', ['$scope', '$document', function($scope, $document) { + $scope.title = $document[0].title; + $scope.windowTitle = angular.element(window.document)[0].title; + }]); */ @@ -7238,11 +7383,7 @@ function parseHeaders(headers) { val = trim(line.substr(i + 1)); if (key) { - if (parsed[key]) { - parsed[key] += ', ' + val; - } else { - parsed[key] = val; - } + parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; } }); @@ -7304,12 +7445,39 @@ function isSuccess(status) { } +/** + * @ngdoc provider + * @name $httpProvider + * @description + * Use `$httpProvider` to change the default behavior of the {@link ng.$http $http} service. + * */ function $HttpProvider() { var JSON_START = /^\s*(\[|\{[^\{])/, JSON_END = /[\}\]]\s*$/, PROTECTION_PREFIX = /^\)\]\}',?\n/, CONTENT_TYPE_APPLICATION_JSON = {'Content-Type': 'application/json;charset=utf-8'}; + /** + * @ngdoc property + * @name $httpProvider#defaults + * @description + * + * Object containing default values for all {@link ng.$http $http} requests. + * + * - **`defaults.xsrfCookieName`** - {string} - Name of cookie containing the XSRF token. + * Defaults value is `'XSRF-TOKEN'`. + * + * - **`defaults.xsrfHeaderName`** - {string} - Name of HTTP header to populate with the + * XSRF token. Defaults value is `'X-XSRF-TOKEN'`. + * + * - **`defaults.headers`** - {Object} - Default headers for all $http requests. + * Refer to {@link ng.$http#setting-http-headers $http} for documentation on + * setting default headers. + * - **`defaults.headers.common`** + * - **`defaults.headers.post`** + * - **`defaults.headers.put`** + * - **`defaults.headers.patch`** + **/ var defaults = this.defaults = { // transform incoming response data transformResponse: [function(data) { @@ -7332,9 +7500,9 @@ function $HttpProvider() { common: { 'Accept': 'application/json, text/plain, */*' }, - post: copy(CONTENT_TYPE_APPLICATION_JSON), - put: copy(CONTENT_TYPE_APPLICATION_JSON), - patch: copy(CONTENT_TYPE_APPLICATION_JSON) + post: shallowCopy(CONTENT_TYPE_APPLICATION_JSON), + put: shallowCopy(CONTENT_TYPE_APPLICATION_JSON), + patch: shallowCopy(CONTENT_TYPE_APPLICATION_JSON) }, xsrfCookieName: 'XSRF-TOKEN', @@ -7473,6 +7641,7 @@ function $HttpProvider() { * - {@link ng.$http#put $http.put} * - {@link ng.$http#delete $http.delete} * - {@link ng.$http#jsonp $http.jsonp} + * - {@link ng.$http#patch $http.patch} * * * # Setting HTTP Headers @@ -7576,14 +7745,14 @@ function $HttpProvider() { * * There are two kinds of interceptors (and two kinds of rejection interceptors): * - * * `request`: interceptors get called with http `config` object. The function is free to - * modify the `config` or create a new one. The function needs to return the `config` - * directly or as a promise. + * * `request`: interceptors get called with a http `config` object. The function is free to + * modify the `config` object or create a new one. The function needs to return the `config` + * object directly, or a promise containing the `config` or a new `config` object. * * `requestError`: interceptor gets called when a previous interceptor threw an error or * resolved with a rejection. * * `response`: interceptors get called with http `response` object. The function is free to - * modify the `response` or create a new one. The function needs to return the `response` - * directly or as a promise. + * modify the `response` object or create a new one. The function needs to return the `response` + * object directly, or as a promise containing the `response` or a new `response` object. * * `responseError`: interceptor gets called when a previous interceptor threw an error or * resolved with a rejection. * @@ -7595,7 +7764,7 @@ function $HttpProvider() { * // optional method * 'request': function(config) { * // do something on success - * return config || $q.when(config); + * return config; * }, * * // optional method @@ -7612,7 +7781,7 @@ function $HttpProvider() { * // optional method * 'response': function(response) { * // do something on success - * return response || $q.when(response); + * return response; * }, * * // optional method @@ -7737,7 +7906,7 @@ function $HttpProvider() { * that only JavaScript running on your domain could have sent the request. The token must be * unique for each user and must be verifiable by the server (to prevent the JavaScript from * making up its own tokens). We recommend that the token is a digest of your site's - * authentication cookie with a [salt](https://en.wikipedia.org/wiki/Salt_(cryptography)) + * authentication cookie with a [salt](https://en.wikipedia.org/wiki/Salt_(cryptography)) * for added security. * * The name of the headers can be specified using the xsrfHeaderName and xsrfCookieName @@ -7773,8 +7942,8 @@ function $HttpProvider() { * caching. * - **timeout** – `{number|Promise}` – timeout in milliseconds, or {@link ng.$q promise} * that should abort the request when resolved. - * - **withCredentials** - `{boolean}` - whether to to set the `withCredentials` flag on the - * XHR object. See [requests with credentials]https://developer.mozilla.org/en/http_access_control#section_5 + * - **withCredentials** - `{boolean}` - whether to set the `withCredentials` flag on the + * XHR object. See [requests with credentials](https://developer.mozilla.org/docs/Web/HTTP/Access_control_CORS#Requests_with_credentials) * for more information. * - **responseType** - `{string}` - see * [requestType](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#responseType). @@ -7799,9 +7968,9 @@ function $HttpProvider() { * * * @example - + -
+

- * Current time is: - *
- * Blood 1 : {{blood_1}} - * Blood 2 : {{blood_2}} - * - * - * - *
+ *
+ *
+ * Date format:
+ * Current time is: + *
+ * Blood 1 : {{blood_1}} + * Blood 2 : {{blood_2}} + * + * + * *
+ *
* - * + * * */ function interval(fn, delay, count, invokeApply) { @@ -8872,7 +9067,7 @@ function $IntervalProvider() { interval.cancel = function(promise) { if (promise && promise.$$intervalId in intervals) { intervals[promise.$$intervalId].reject('canceled'); - clearInterval(promise.$$intervalId); + $window.clearInterval(promise.$$intervalId); delete intervals[promise.$$intervalId]; return true; } @@ -9275,17 +9470,16 @@ LocationHashbangInHtml5Url.prototype = * Change path, search and hash, when called with parameter and return `$location`. * * @param {string=} url New url without base prefix (e.g. `/path?a=b#hash`) - * @param {string=} replace The path that will be changed * @return {string} url */ - url: function(url, replace) { + url: function(url) { if (isUndefined(url)) return this.$$url; var match = PATH_MATCH.exec(url); if (match[1]) this.path(decodeURIComponent(match[1])); if (match[2] || match[1]) this.search(match[3] || ''); - this.hash(match[5] || '', replace); + this.hash(match[5] || ''); return this; }, @@ -9343,10 +9537,11 @@ LocationHashbangInHtml5Url.prototype = * Note: Path should always begin with forward slash (/), this method will add the forward slash * if it is missing. * - * @param {string=} path New path + * @param {(string|number)=} path New path * @return {string} path */ path: locationGetterSetter('$$path', function(path) { + path = path ? path.toString() : ''; return path.charAt(0) == '/' ? path : '/' + path; }), @@ -9382,14 +9577,17 @@ LocationHashbangInHtml5Url.prototype = * If the argument is a hash object containing an array of values, these values will be encoded * as duplicate search parameters in the url. * - * @param {(string|Array)=} paramValue If `search` is a string, then `paramValue` will - * override only a single search property. + * @param {(string|Number|Array|boolean)=} paramValue If `search` is a string or number, then `paramValue` + * will override only a single search property. * * If `paramValue` is an array, it will override the property of the `search` component of * `$location` specified via the first argument. * * If `paramValue` is `null`, the property specified via the first argument will be deleted. * + * If `paramValue` is `true`, the property specified via the first argument will be added with no + * value nor trailing equal sign. + * * @return {Object} If called with no arguments returns the parsed `search` object. If called with * one or more arguments returns `$location` object itself. */ @@ -9398,9 +9596,15 @@ LocationHashbangInHtml5Url.prototype = case 0: return this.$$search; case 1: - if (isString(search)) { + if (isString(search) || isNumber(search)) { + search = search.toString(); this.$$search = parseKeyValue(search); } else if (isObject(search)) { + // remove object undefined or null properties + forEach(search, function(value, key) { + if (value == null) delete search[key]; + }); + this.$$search = search; } else { throw $locationMinErr('isrcharg', @@ -9430,10 +9634,12 @@ LocationHashbangInHtml5Url.prototype = * * Change hash fragment when called with parameter and return `$location`. * - * @param {string=} hash New hash fragment + * @param {(string|number)=} hash New hash fragment * @return {string} hash */ - hash: locationGetterSetter('$$hash', identity), + hash: locationGetterSetter('$$hash', function(hash) { + return hash ? hash.toString() : ''; + }), /** * @ngdoc method @@ -9506,7 +9712,7 @@ function $LocationProvider(){ html5Mode = false; /** - * @ngdoc property + * @ngdoc method * @name $locationProvider#hashPrefix * @description * @param {string=} prefix Prefix for hash part (containing path and search) @@ -9522,7 +9728,7 @@ function $LocationProvider(){ }; /** - * @ngdoc property + * @ngdoc method * @name $locationProvider#html5Mode * @description * @param {boolean=} mode Use HTML5 strategy if available. @@ -9582,6 +9788,8 @@ function $LocationProvider(){ $location = new LocationMode(appBase, '#' + hashPrefix); $location.$$parse($location.$$rewrite(initialUrl)); + var IGNORE_URI_REGEXP = /^\s*(javascript|mailto):/i; + $rootElement.on('click', function(event) { // TODO(vojta): rewrite link when opening in new tab/window (in legacy browser) // currently we open nice url link and redirect then @@ -9604,6 +9812,9 @@ function $LocationProvider(){ absHref = urlResolve(absHref.animVal).href; } + // Ignore when url is started with javascript: or mailto: + if (IGNORE_URI_REGEXP.test(absHref)) return; + // Make relative links work in HTML5 mode for legacy browsers (or at least IE8 & 9) // The href should be a regular url e.g. /link/somewhere or link/somewhere or ../somewhere or // somewhere#anchor or http://example.com/somewhere @@ -9612,7 +9823,7 @@ function $LocationProvider(){ // http://msdn.microsoft.com/en-us/library/ie/dd347148(v=vs.85).aspx var href = elm.attr('href') || elm.attr('xlink:href'); - if (href.indexOf('://') < 0) { // Ignore absolute URLs + if (href && href.indexOf('://') < 0) { // Ignore absolute URLs var prefix = '#' + hashPrefix; if (href[0] == '/') { // absolute path - replace old path @@ -9624,6 +9835,7 @@ function $LocationProvider(){ // relative path - join with current path var stack = $location.path().split("/"), parts = href.split("/"); + if (stack.length === 2 && !stack[1]) stack.length = 1; for (var i=0; i + - function LogCtrl($scope, $log) { - $scope.$log = $log; - $scope.message = 'Hello World!'; - } + angular.module('logExample', []) + .controller('LogController', ['$scope', '$log', function($scope, $log) { + $scope.$log = $log; + $scope.message = 'Hello World!'; + }]); -
+

Reload this page with open console, enter text and hit the log button...

Message: @@ -9754,7 +9967,7 @@ function $LogProvider(){ self = this; /** - * @ngdoc property + * @ngdoc method * @name $logProvider#debugEnabled * @description * @param {boolean=} flag enable or disable debug level messages @@ -9880,14 +10093,7 @@ var promiseWarning; // // As an example, consider the following Angular expression: // -// {}.toString.constructor(alert("evil JS code")) -// -// We want to prevent this type of access. For the sake of performance, during the lexing phase we -// disallow any "dotted" access to any member named "constructor". -// -// For reflective calls (a[b]) we check that the value of the lookup is not the Function constructor -// while evaluating the expression, which is a stronger but more expensive test. Since reflective -// calls are expensive anyway, this is not such a big deal compared to static dereferencing. +// {}.toString.constructor('alert("evil JS code")') // // This sandboxing technique is not perfect and doesn't aim to be. The goal is to prevent exploits // against the expression language, but not to prevent exploits that were enabled by exposing @@ -9895,17 +10101,19 @@ var promiseWarning; // practice and therefore we are not even trying to protect against interaction with an object // explicitly exposed in this way. // -// A developer could foil the name check by aliasing the Function constructor under a different -// name on the scope. -// // In general, it is not possible to access a Window object from an angular expression unless a // window or some DOM object that has a reference to window is published onto a Scope. +// Similarly we prevent invocations of function known to be dangerous, as well as assignments to +// native objects. + function ensureSafeMemberName(name, fullExpression) { - if (name === "constructor") { + if (name === "__defineGetter__" || name === "__defineSetter__" + || name === "__lookupGetter__" || name === "__lookupSetter__" + || name === "__proto__") { throw $parseMinErr('isecfld', - 'Referencing "constructor" field in Angular expressions is disallowed! Expression: {0}', - fullExpression); + 'Attempting to access a disallowed field in Angular expressions! ' + +'Expression: {0}', fullExpression); } return name; } @@ -9927,11 +10135,34 @@ function ensureSafeObject(obj, fullExpression) { throw $parseMinErr('isecdom', 'Referencing DOM nodes in Angular expressions is disallowed! Expression: {0}', fullExpression); + } else if (// block Object so that we can't get hold of dangerous Object.* methods + obj === Object) { + throw $parseMinErr('isecobj', + 'Referencing Object in Angular expressions is disallowed! Expression: {0}', + fullExpression); } } return obj; } +var CALL = Function.prototype.call; +var APPLY = Function.prototype.apply; +var BIND = Function.prototype.bind; + +function ensureSafeFunction(obj, fullExpression) { + if (obj) { + if (obj.constructor === obj) { + throw $parseMinErr('isecfn', + 'Referencing Function in Angular expressions is disallowed! Expression: {0}', + fullExpression); + } else if (obj === CALL || obj === APPLY || (BIND && obj === BIND)) { + throw $parseMinErr('isecff', + 'Referencing call, apply or bind in Angular expressions is disallowed! Expression: {0}', + fullExpression); + } + } +} + var OPERATORS = { /* jshint bitwise : false */ 'null':function(){return null;}, @@ -9997,9 +10228,6 @@ Lexer.prototype = { this.tokens = []; - var token; - var json = []; - while (this.index < this.text.length) { this.ch = this.text.charAt(this.index); if (this.is('"\'')) { @@ -10008,19 +10236,11 @@ Lexer.prototype = { this.readNumber(); } else if (this.isIdent(this.ch)) { this.readIdent(); - // identifiers can only be if the preceding char was a { or , - if (this.was('{,') && json[0] === '{' && - (token = this.tokens[this.tokens.length - 1])) { - token.json = token.text.indexOf('.') === -1; - } } else if (this.is('(){}[].,;:?')) { this.tokens.push({ index: this.index, - text: this.ch, - json: (this.was(':[,') && this.is('{[')) || this.is('}]:,') + text: this.ch }); - if (this.is('{[')) json.unshift(this.ch); - if (this.is('}]')) json.shift(); this.index++; } else if (this.isWhitespace(this.ch)) { this.index++; @@ -10041,8 +10261,7 @@ Lexer.prototype = { this.tokens.push({ index: this.index, text: this.ch, - fn: fn, - json: (this.was('[,:') && this.is('+-')) + fn: fn }); this.index += 1; } else { @@ -10125,7 +10344,8 @@ Lexer.prototype = { this.tokens.push({ index: start, text: number, - json: true, + literal: true, + constant: true, fn: function() { return number; } }); }, @@ -10177,7 +10397,8 @@ Lexer.prototype = { // OPERATORS is our own object so we don't need to use special hasOwnPropertyFn if (OPERATORS.hasOwnProperty(ident)) { token.fn = OPERATORS[ident]; - token.json = OPERATORS[ident]; + token.literal = true; + token.constant = true; } else { var getter = getterFn(ident, this.options, this.text); token.fn = extend(function(self, locals) { @@ -10194,13 +10415,11 @@ Lexer.prototype = { if (methodName) { this.tokens.push({ index:lastDot, - text: '.', - json: false + text: '.' }); this.tokens.push({ index: lastDot + 1, - text: methodName, - json: false + text: methodName }); } }, @@ -10223,11 +10442,7 @@ Lexer.prototype = { string += String.fromCharCode(parseInt(hex, 16)); } else { var rep = ESCAPE[ch]; - if (rep) { - string += rep; - } else { - string += ch; - } + string = string + (rep || ch); } escape = false; } else if (ch === '\\') { @@ -10238,7 +10453,8 @@ Lexer.prototype = { index: start, text: rawString, string: string, - json: true, + literal: true, + constant: true, fn: function() { return string; } }); return; @@ -10270,28 +10486,12 @@ Parser.ZERO = extend(function () { Parser.prototype = { constructor: Parser, - parse: function (text, json) { + parse: function (text) { this.text = text; - //TODO(i): strip all the obsolte json stuff from this file - this.json = json; - this.tokens = this.lexer.lex(text); - if (json) { - // The extra level of aliasing is here, just in case the lexer misses something, so that - // we prevent any accidental execution in JSON. - this.assignment = this.logicalOR; - - this.functionCall = - this.fieldAccess = - this.objectIndex = - this.filterChain = function() { - this.throwError('is not valid json', {text: text, index: 0}); - }; - } - - var value = json ? this.primary() : this.statements(); + var value = this.statements(); if (this.tokens.length !== 0) { this.throwError('is an unexpected token', this.tokens[0]); @@ -10318,10 +10518,8 @@ Parser.prototype = { if (!primary) { this.throwError('not a primary expression', token); } - if (token.json) { - primary.constant = true; - primary.literal = true; - } + primary.literal = !!token.literal; + primary.constant = !!token.constant; } var next, context; @@ -10369,9 +10567,6 @@ Parser.prototype = { expect: function(e1, e2, e3, e4){ var token = this.peek(e1, e2, e3, e4); if (token) { - if (this.json && !token.json) { - this.throwError('is not valid json', token); - } this.tokens.shift(); return token; } @@ -10492,9 +10687,9 @@ Parser.prototype = { var middle; var token; if ((token = this.expect('?'))) { - middle = this.ternary(); + middle = this.assignment(); if ((token = this.expect(':'))) { - return this.ternaryFn(left, middle, this.ternary()); + return this.ternaryFn(left, middle, this.assignment()); } else { this.throwError('expected :', token); } @@ -10582,7 +10777,9 @@ Parser.prototype = { return getter(self || object(scope, locals)); }, { assign: function(scope, value, locals) { - return setter(object(scope, locals), field, value, parser.text, parser.options); + var o = object(scope, locals); + if (!o) object.assign(scope, o = {}); + return setter(o, field, value, parser.text, parser.options); } }); }, @@ -10598,6 +10795,7 @@ Parser.prototype = { i = indexFn(self, locals), v, p; + ensureSafeMemberName(i, parser.text); if (!o) return undefined; v = ensureSafeObject(o[i], parser.text); if (v && v.then && parser.options.unwrapPromises) { @@ -10611,10 +10809,11 @@ Parser.prototype = { return v; }, { assign: function(self, value, locals) { - var key = indexFn(self, locals); + var key = ensureSafeMemberName(indexFn(self, locals), parser.text); // prevent overwriting of Function.constructor which would break ensureSafeObject check - var safe = ensureSafeObject(obj(self, locals), parser.text); - return safe[key] = value; + var o = ensureSafeObject(obj(self, locals), parser.text); + if (!o) obj.assign(self, o = {}); + return o[key] = value; } }); }, @@ -10635,12 +10834,12 @@ Parser.prototype = { var context = contextGetter ? contextGetter(scope, locals) : scope; for (var i = 0; i < argsFn.length; i++) { - args.push(argsFn[i](scope, locals)); + args.push(ensureSafeObject(argsFn[i](scope, locals), parser.text)); } var fnPtr = fn(scope, locals, context) || noop; ensureSafeObject(context, parser.text); - ensureSafeObject(fnPtr, parser.text); + ensureSafeFunction(fnPtr, parser.text); // IE stupidity! (IE doesn't have apply for some native functions) var v = fnPtr.apply @@ -10723,13 +10922,15 @@ Parser.prototype = { ////////////////////////////////////////////////// function setter(obj, path, setValue, fullExp, options) { + ensureSafeObject(obj, fullExp); + //needed? options = options || {}; var element = path.split('.'), key; for (var i = 0; element.length > 1; i++) { key = ensureSafeMemberName(element.shift(), fullExp); - var propertyObj = obj[key]; + var propertyObj = ensureSafeObject(obj[key], fullExp); if (!propertyObj) { propertyObj = {}; obj[key] = propertyObj; @@ -10749,6 +10950,7 @@ function setter(obj, path, setValue, fullExp, options) { } } key = ensureSafeMemberName(element.shift(), fullExp); + ensureSafeObject(obj[key], fullExp); obj[key] = setValue; return setValue; } @@ -10864,26 +11066,6 @@ function cspSafeGetterFn(key0, key1, key2, key3, key4, fullExp, options) { }; } -function simpleGetterFn1(key0, fullExp) { - ensureSafeMemberName(key0, fullExp); - - return function simpleGetterFn1(scope, locals) { - if (scope == null) return undefined; - return ((locals && locals.hasOwnProperty(key0)) ? locals : scope)[key0]; - }; -} - -function simpleGetterFn2(key0, key1, fullExp) { - ensureSafeMemberName(key0, fullExp); - ensureSafeMemberName(key1, fullExp); - - return function simpleGetterFn2(scope, locals) { - if (scope == null) return undefined; - scope = ((locals && locals.hasOwnProperty(key0)) ? locals : scope)[key0]; - return scope == null ? undefined : scope[key1]; - }; -} - function getterFn(path, options, fullExp) { // Check whether the cache has this getter already. // We can use hasOwnProperty directly on the cache because we ensure, @@ -10896,13 +11078,8 @@ function getterFn(path, options, fullExp) { pathKeysLength = pathKeys.length, fn; - // When we have only 1 or 2 tokens, use optimized special case closures. // http://jsperf.com/angularjs-parse-getter/6 - if (!options.unwrapPromises && pathKeysLength === 1) { - fn = simpleGetterFn1(pathKeys[0], fullExp); - } else if (!options.unwrapPromises && pathKeysLength === 2) { - fn = simpleGetterFn2(pathKeys[0], pathKeys[1], fullExp); - } else if (options.csp) { + if (options.csp) { if (pathKeysLength < 6) { fn = cspSafeGetterFn(pathKeys[0], pathKeys[1], pathKeys[2], pathKeys[3], pathKeys[4], fullExp, options); @@ -11006,7 +11183,7 @@ function getterFn(path, options, fullExp) { /** * @ngdoc provider * @name $parseProvider - * @function + * @kind function * * @description * `$parseProvider` can be used for configuring the default behavior of the {@link ng.$parse $parse} @@ -11125,7 +11302,7 @@ function $ParseProvider() { var lexer = new Lexer($parseOptions); var parser = new Parser(lexer, $filter, $parseOptions); - parsedExpression = parser.parse(exp, false); + parsedExpression = parser.parse(exp); if (exp !== 'hasOwnProperty') { // Only cache the value if it's not going to mess up the cache object @@ -11168,17 +11345,13 @@ function $ParseProvider() { * var deferred = $q.defer(); * * setTimeout(function() { - * // since this fn executes async in a future turn of the event loop, we need to wrap - * // our code into an $apply call so that the model changes are properly observed. - * scope.$apply(function() { - * deferred.notify('About to greet ' + name + '.'); + * deferred.notify('About to greet ' + name + '.'); * - * if (okToGreet(name)) { - * deferred.resolve('Hello, ' + name + '!'); - * } else { - * deferred.reject('Greeting ' + name + ' is not allowed.'); - * } - * }); + * if (okToGreet(name)) { + * deferred.resolve('Hello, ' + name + '!'); + * } else { + * deferred.reject('Greeting ' + name + ' is not allowed.'); + * } * }, 1000); * * return deferred.promise; @@ -11336,7 +11509,7 @@ function qFactory(nextTick, exceptionHandler) { /** * @ngdoc method * @name $q#defer - * @function + * @kind function * * @description * Creates a `Deferred` object which represents a task which will finish in the future. @@ -11452,7 +11625,7 @@ function qFactory(nextTick, exceptionHandler) { } catch(e) { return makePromise(e, false); } - if (callbackOutput && isFunction(callbackOutput.then)) { + if (isPromiseLike(callbackOutput)) { return callbackOutput.then(function() { return makePromise(value, isResolved); }, function(error) { @@ -11477,7 +11650,7 @@ function qFactory(nextTick, exceptionHandler) { var ref = function(value) { - if (value && isFunction(value.then)) return value; + if (isPromiseLike(value)) return value; return { then: function(callback) { var result = defer(); @@ -11493,7 +11666,7 @@ function qFactory(nextTick, exceptionHandler) { /** * @ngdoc method * @name $q#reject - * @function + * @kind function * * @description * Creates a promise that is resolved as rejected with the specified `reason`. This api should be @@ -11553,7 +11726,7 @@ function qFactory(nextTick, exceptionHandler) { /** * @ngdoc method * @name $q#when - * @function + * @kind function * * @description * Wraps an object that might be a value or a (3rd party) then-able promise into a $q promise. @@ -11625,7 +11798,7 @@ function qFactory(nextTick, exceptionHandler) { /** * @ngdoc method * @name $q#all - * @function + * @kind function * * @description * Combines multiple promises into a single promise that is resolved when all of the input @@ -11716,7 +11889,7 @@ function $$RAFProvider(){ //rAF * * Loop operations are optimized by using while(count--) { ... } * - this means that in order to keep the same order of execution as addition we have to add - * items to the array at the beginning (shift) instead of at the end (push) + * items to the array at the beginning (unshift) instead of at the end (push) * * Child scopes are created and removed often * - Using an array would be slow since inserts in middle are expensive so we use linked list @@ -11840,24 +12013,39 @@ function $RootScopeProvider(){ /** * @ngdoc property * @name $rootScope.Scope#$id - * @returns {number} Unique scope ID (monotonically increasing alphanumeric sequence) useful for - * debugging. + * + * @description + * Unique scope ID (monotonically increasing) useful for debugging. */ + /** + * @ngdoc property + * @name $rootScope.Scope#$parent + * + * @description + * Reference to the parent scope. + */ + + /** + * @ngdoc property + * @name $rootScope.Scope#$root + * + * @description + * Reference to the root scope. + */ Scope.prototype = { constructor: Scope, /** * @ngdoc method * @name $rootScope.Scope#$new - * @function + * @kind function * * @description * Creates a new child {@link ng.$rootScope.Scope scope}. * - * The parent scope will propagate the {@link ng.$rootScope.Scope#$digest $digest()} and - * {@link ng.$rootScope.Scope#$digest $digest()} events. The scope can be removed from the - * scope hierarchy using {@link ng.$rootScope.Scope#$destroy $destroy()}. + * The parent scope will propagate the {@link ng.$rootScope.Scope#$digest $digest()} event. + * The scope can be removed from the scope hierarchy using {@link ng.$rootScope.Scope#$destroy $destroy()}. * * {@link ng.$rootScope.Scope#$destroy $destroy()} must be called on a scope when it is * desired for the scope and its child scopes to be permanently detached from the parent and @@ -11912,7 +12100,7 @@ function $RootScopeProvider(){ /** * @ngdoc method * @name $rootScope.Scope#$watch - * @function + * @kind function * * @description * Registers a `listener` callback to be executed whenever the `watchExpression` changes. @@ -11924,10 +12112,14 @@ function $RootScopeProvider(){ * {@link ng.$rootScope.Scope#$digest $digest()} and should be idempotent.) * - The `listener` is called only when the value from the current `watchExpression` and the * previous call to `watchExpression` are not equal (with the exception of the initial run, - * see below). The inequality is determined according to - * {@link angular.equals} function. To save the value of the object for later comparison, - * the {@link angular.copy} function is used. It also means that watching complex options - * will have adverse memory and performance implications. + * see below). Inequality is determined according to reference inequality, + * [strict comparison](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators) + * via the `!==` Javascript operator, unless `objectEquality == true` + * (see next point) + * - When `objectEquality == true`, inequality of the `watchExpression` is determined + * according to the {@link angular.equals} function. To save the value of the object for + * later comparison, the {@link angular.copy} function is used. This therefore means that + * watching complex objects will have adverse memory and performance implications. * - The watch `listener` may change the model, which may trigger other `listener`s to fire. * This is achieved by rerunning the watchers until no changes are detected. The rerun * iteration limit is 10 to prevent an infinite loop deadlock. @@ -11962,12 +12154,16 @@ function $RootScopeProvider(){ expect(scope.counter).toEqual(0); scope.$digest(); - // no variable change - expect(scope.counter).toEqual(0); + // the listener is always called during the first $digest loop after it was registered + expect(scope.counter).toEqual(1); + + scope.$digest(); + // but now it will not be called unless the value changes + expect(scope.counter).toEqual(1); scope.name = 'adam'; scope.$digest(); - expect(scope.counter).toEqual(1); + expect(scope.counter).toEqual(2); @@ -12064,7 +12260,7 @@ function $RootScopeProvider(){ /** * @ngdoc method * @name $rootScope.Scope#$watchCollection - * @function + * @kind function * * @description * Shallow watches the properties of an object and fires whenever any of the properties change @@ -12136,7 +12332,7 @@ function $RootScopeProvider(){ function $watchCollectionWatch() { newValue = objGetter(self); - var newLength, key; + var newLength, key, bothNaN; if (!isObject(newValue)) { // if primitive if (oldValue !== newValue) { @@ -12160,7 +12356,7 @@ function $RootScopeProvider(){ } // copy the items to oldValue and look for changes. for (var i = 0; i < newLength; i++) { - var bothNaN = (oldValue[i] !== oldValue[i]) && + bothNaN = (oldValue[i] !== oldValue[i]) && (newValue[i] !== newValue[i]); if (!bothNaN && (oldValue[i] !== newValue[i])) { changeDetected++; @@ -12180,7 +12376,9 @@ function $RootScopeProvider(){ if (newValue.hasOwnProperty(key)) { newLength++; if (oldValue.hasOwnProperty(key)) { - if (oldValue[key] !== newValue[key]) { + bothNaN = (oldValue[key] !== oldValue[key]) && + (newValue[key] !== newValue[key]); + if (!bothNaN && (oldValue[key] !== newValue[key])) { changeDetected++; oldValue[key] = newValue[key]; } @@ -12240,7 +12438,7 @@ function $RootScopeProvider(){ /** * @ngdoc method * @name $rootScope.Scope#$digest - * @function + * @kind function * * @description * Processes all of the {@link ng.$rootScope.Scope#$watch watchers} of the current scope and @@ -12275,12 +12473,16 @@ function $RootScopeProvider(){ expect(scope.counter).toEqual(0); scope.$digest(); - // no variable change - expect(scope.counter).toEqual(0); + // the listener is always called during the first $digest loop after it was registered + expect(scope.counter).toEqual(1); + + scope.$digest(); + // but now it will not be called unless the value changes + expect(scope.counter).toEqual(1); scope.name = 'adam'; scope.$digest(); - expect(scope.counter).toEqual(1); + expect(scope.counter).toEqual(2); * ``` * */ @@ -12296,6 +12498,8 @@ function $RootScopeProvider(){ logIdx, logMsg, asyncTask; beginPhase('$digest'); + // Check for changes to browser url that happened in sync before the call to $digest + $browser.$$checkUrlChange(); lastDirtyWatch = null; @@ -12328,11 +12532,11 @@ function $RootScopeProvider(){ if ((value = watch.get(current)) !== (last = watch.last) && !(watch.eq ? equals(value, last) - : (typeof value == 'number' && typeof last == 'number' + : (typeof value === 'number' && typeof last === 'number' && isNaN(value) && isNaN(last)))) { dirty = true; lastDirtyWatch = watch; - watch.last = watch.eq ? copy(value) : value; + watch.last = watch.eq ? copy(value, null) : value; watch.fn(value, ((last === initWatchVal) ? value : last), current); if (ttl < 5) { logIdx = 4 - ttl; @@ -12407,7 +12611,7 @@ function $RootScopeProvider(){ /** * @ngdoc method * @name $rootScope.Scope#$destroy - * @function + * @kind function * * @description * Removes the current scope (and all of its children) from the parent scope. Removal implies @@ -12468,7 +12672,7 @@ function $RootScopeProvider(){ /** * @ngdoc method * @name $rootScope.Scope#$eval - * @function + * @kind function * * @description * Executes the `expression` on the current scope and returns the result. Any exceptions in @@ -12500,7 +12704,7 @@ function $RootScopeProvider(){ /** * @ngdoc method * @name $rootScope.Scope#$evalAsync - * @function + * @kind function * * @description * Executes the expression on the current scope at a later point in time. @@ -12547,7 +12751,7 @@ function $RootScopeProvider(){ /** * @ngdoc method * @name $rootScope.Scope#$apply - * @function + * @kind function * * @description * `$apply()` is used to execute an expression in angular from outside of the angular @@ -12609,7 +12813,7 @@ function $RootScopeProvider(){ /** * @ngdoc method * @name $rootScope.Scope#$on - * @function + * @kind function * * @description * Listens on events of a given type. See {@link ng.$rootScope.Scope#$emit $emit} for @@ -12658,7 +12862,7 @@ function $RootScopeProvider(){ /** * @ngdoc method * @name $rootScope.Scope#$emit - * @function + * @kind function * * @description * Dispatches an event `name` upwards through the scope hierarchy notifying the @@ -12726,7 +12930,7 @@ function $RootScopeProvider(){ /** * @ngdoc method * @name $rootScope.Scope#$broadcast - * @function + * @kind function * * @description * Dispatches an event `name` downwards to all child scopes (and their children) notifying the @@ -12842,7 +13046,7 @@ function $RootScopeProvider(){ */ function $$SanitizeUriProvider() { var aHrefSanitizationWhitelist = /^\s*(https?|ftp|mailto|tel|file):/, - imgSrcSanitizationWhitelist = /^\s*(https?|ftp|file):|data:image\//; + imgSrcSanitizationWhitelist = /^\s*((https?|ftp|file):|data:image\/)/; /** * @description @@ -12974,7 +13178,7 @@ function adjustMatchers(matchers) { /** * @ngdoc service * @name $sceDelegate - * @function + * @kind function * * @description * @@ -13016,24 +13220,26 @@ function adjustMatchers(matchers) { * * - your app is hosted at url `http://myapp.example.com/` * - but some of your templates are hosted on other domains you control such as - * `http://srv01.assets.example.com/`, `http://srv02.assets.example.com/`, etc. + * `http://srv01.assets.example.com/`,  `http://srv02.assets.example.com/`, etc. * - and you have an open redirect at `http://myapp.example.com/clickThru?...`. * * Here is what a secure configuration for this scenario might look like: * - *
- *    angular.module('myApp', []).config(function($sceDelegateProvider) {
- *      $sceDelegateProvider.resourceUrlWhitelist([
- *        // Allow same origin resource loads.
- *        'self',
- *        // Allow loading from our assets domain.  Notice the difference between * and **.
- *        'http://srv*.assets.example.com/**']);
+ * ```
+ *  angular.module('myApp', []).config(function($sceDelegateProvider) {
+ *    $sceDelegateProvider.resourceUrlWhitelist([
+ *      // Allow same origin resource loads.
+ *      'self',
+ *      // Allow loading from our assets domain.  Notice the difference between * and **.
+ *      'http://srv*.assets.example.com/**'
+ *    ]);
  *
- *      // The blacklist overrides the whitelist so the open redirect here is blocked.
- *      $sceDelegateProvider.resourceUrlBlacklist([
- *        'http://myapp.example.com/clickThru**']);
- *      });
- * 
+ * // The blacklist overrides the whitelist so the open redirect here is blocked. + * $sceDelegateProvider.resourceUrlBlacklist([ + * 'http://myapp.example.com/clickThru**' + * ]); + * }); + * ``` */ function $SceDelegateProvider() { @@ -13046,7 +13252,7 @@ function $SceDelegateProvider() { /** * @ngdoc method * @name $sceDelegateProvider#resourceUrlWhitelist - * @function + * @kind function * * @param {Array=} whitelist When provided, replaces the resourceUrlWhitelist with the value * provided. This must be an array or null. A snapshot of this array is used so further @@ -13075,7 +13281,7 @@ function $SceDelegateProvider() { /** * @ngdoc method * @name $sceDelegateProvider#resourceUrlBlacklist - * @function + * @kind function * * @param {Array=} blacklist When provided, replaces the resourceUrlBlacklist with the value * provided. This must be an array or null. A snapshot of this array is used so further @@ -13302,7 +13508,7 @@ function $SceDelegateProvider() { /** * @ngdoc service * @name $sce - * @function + * @kind function * * @description * @@ -13328,10 +13534,10 @@ function $SceDelegateProvider() { * * Here's an example of a binding in a privileged context: * - *
- *     
- *     
- *
+ * ``` + * + *
+ * ``` * * Notice that `ng-bind-html` is bound to `userHtml` controlled by the user. With SCE * disabled, this application allows the user to render arbitrary HTML into the DIV. @@ -13371,15 +13577,15 @@ function $SceDelegateProvider() { * ng.$sce#parseAsHtml $sce.parseAsHtml(binding expression)}. Here's the actual code (slightly * simplified): * - *
- *   var ngBindHtmlDirective = ['$sce', function($sce) {
- *     return function(scope, element, attr) {
- *       scope.$watch($sce.parseAsHtml(attr.ngBindHtml), function(value) {
- *         element.html(value || '');
- *       });
- *     };
- *   }];
- * 
+ * ``` + * var ngBindHtmlDirective = ['$sce', function($sce) { + * return function(scope, element, attr) { + * scope.$watch($sce.parseAsHtml(attr.ngBindHtml), function(value) { + * element.html(value || ''); + * }); + * }; + * }]; + * ``` * * ## Impact on loading templates * @@ -13428,7 +13634,7 @@ function $SceDelegateProvider() { * * | Context | Notes | * |---------------------|----------------| - * | `$sce.HTML` | For HTML that's safe to source into the application. The {@link ng.directive:ngBindHtml ngBindHtml} directive uses this context for bindings. | + * | `$sce.HTML` | For HTML that's safe to source into the application. The {@link ng.directive:ngBindHtml ngBindHtml} directive uses this context for bindings. If an unsafe value is encountered and the {@link ngSanitize $sanitize} module is present this will sanitize the value instead of throwing an error. | * | `$sce.CSS` | For CSS that's safe to source into the application. Currently unused. Feel free to use it in your own directives. | * | `$sce.URL` | For URLs that are safe to follow as links. Currently unused (`
Note that `$sce.RESOURCE_URL` makes a stronger statement about the URL than `$sce.URL` does and therefore contexts requiring values trusted for `$sce.RESOURCE_URL` can be used anywhere that values trusted for `$sce.URL` are required. | @@ -13452,7 +13658,7 @@ function $SceDelegateProvider() { * - `**`: matches zero or more occurrences of *any* character. As such, it's not * not appropriate to use in for a scheme, domain, etc. as it would match too much. (e.g. * http://**.example.com/ would match http://evil.com/?ignore=.example.com/ and that might - * not have been the intention.) It's usage at the very end of the path is ok. (e.g. + * not have been the intention.) Its usage at the very end of the path is ok. (e.g. * http://foo.example.com/templates/**). * - **RegExp** (*see caveat below*) * - *Caveat*: While regular expressions are powerful and offer great flexibility, their syntax @@ -13483,66 +13689,65 @@ function $SceDelegateProvider() { * * ## Show me an example using SCE. * - * @example - - -
-

- User comments
- By default, HTML that isn't explicitly trusted (e.g. Alice's comment) is sanitized when - $sanitize is available. If $sanitize isn't available, this results in an error instead of an - exploit. -
-
- {{userComment.name}}: - -
-
-
-
-
- - - var mySceApp = angular.module('mySceApp', ['ngSanitize']); - - mySceApp.controller("myAppController", function myAppController($http, $templateCache, $sce) { - var self = this; - $http.get("test_data.json", {cache: $templateCache}).success(function(userComments) { - self.userComments = userComments; - }); - self.explicitlyTrustedHtml = $sce.trustAsHtml( - 'Hover over this text.'); - }); - - - -[ - { "name": "Alice", - "htmlComment": - "Is anyone reading this?" - }, - { "name": "Bob", - "htmlComment": "Yes! Am I the only other one?" - } -] - - - - describe('SCE doc demo', function() { - it('should sanitize untrusted values', function() { - expect(element(by.css('.htmlComment')).getInnerHtml()) - .toBe('Is anyone reading this?'); - }); - - it('should NOT sanitize explicitly trusted values', function() { - expect(element(by.id('explicitlyTrustedHtml')).getInnerHtml()).toBe( - 'Hover over this text.'); - }); - }); - -
+ * + * + *
+ *

+ * User comments
+ * By default, HTML that isn't explicitly trusted (e.g. Alice's comment) is sanitized when + * $sanitize is available. If $sanitize isn't available, this results in an error instead of an + * exploit. + *
+ *
+ * {{userComment.name}}: + * + *
+ *
+ *
+ *
+ *
+ * + * + * var mySceApp = angular.module('mySceApp', ['ngSanitize']); + * + * mySceApp.controller("myAppController", function myAppController($http, $templateCache, $sce) { + * var self = this; + * $http.get("test_data.json", {cache: $templateCache}).success(function(userComments) { + * self.userComments = userComments; + * }); + * self.explicitlyTrustedHtml = $sce.trustAsHtml( + * 'Hover over this text.'); + * }); + * + * + * + * [ + * { "name": "Alice", + * "htmlComment": + * "Is anyone reading this?" + * }, + * { "name": "Bob", + * "htmlComment": "Yes! Am I the only other one?" + * } + * ] + * + * + * + * describe('SCE doc demo', function() { + * it('should sanitize untrusted values', function() { + * expect(element.all(by.css('.htmlComment')).first().getInnerHtml()) + * .toBe('Is anyone reading this?'); + * }); + * + * it('should NOT sanitize explicitly trusted values', function() { + * expect(element(by.id('explicitlyTrustedHtml')).getInnerHtml()).toBe( + * 'Hover over this text.'); + * }); + * }); + * + *
* * * @@ -13556,13 +13761,13 @@ function $SceDelegateProvider() { * * That said, here's how you can completely disable SCE: * - *
- *   angular.module('myAppWithSceDisabledmyApp', []).config(function($sceProvider) {
- *     // Completely disable SCE.  For demonstration purposes only!
- *     // Do not use in new projects.
- *     $sceProvider.enabled(false);
- *   });
- * 
+ * ``` + * angular.module('myAppWithSceDisabledmyApp', []).config(function($sceProvider) { + * // Completely disable SCE. For demonstration purposes only! + * // Do not use in new projects. + * $sceProvider.enabled(false); + * }); + * ``` * */ /* jshint maxlen: 100 */ @@ -13573,7 +13778,7 @@ function $SceProvider() { /** * @ngdoc method * @name $sceProvider#enabled - * @function + * @kind function * * @param {boolean=} value If provided, then enables/disables SCE. * @return {boolean} true if SCE is enabled, false otherwise. @@ -13646,12 +13851,12 @@ function $SceProvider() { 'document. See http://docs.angularjs.org/api/ng.$sce for more information.'); } - var sce = copy(SCE_CONTEXTS); + var sce = shallowCopy(SCE_CONTEXTS); /** * @ngdoc method * @name $sce#isEnabled - * @function + * @kind function * * @return {Boolean} true if SCE is enabled, false otherwise. If you want to set the value, you * have to do it at module config time on {@link ng.$sceProvider $sceProvider}. @@ -13673,7 +13878,7 @@ function $SceProvider() { /** * @ngdoc method - * @name $sce#parse + * @name $sce#parseAs * * @description * Converts Angular {@link guide/expression expression} into a function. This is like {@link @@ -14186,7 +14391,7 @@ var originUrl = urlResolve(window.location.href, true); * https://github.com/angular/angular.js/pull/2902 * http://james.padolsey.com/javascript/parsing-urls-with-the-dom/ * - * @function + * @kind function * @param {string} url The URL to be parsed. * @description Normalizes and parses a URL. * @returns {object} Returns the normalized URL as a dictionary. @@ -14259,17 +14464,18 @@ function urlIsSameOrigin(requestUrl) { * expression. * * @example - + -
+
@@ -14287,6 +14493,17 @@ function $WindowProvider(){ this.$get = valueFn(window); } +/* global currencyFilter: true, + dateFilter: true, + filterFilter: true, + jsonFilter: true, + limitToFilter: true, + lowercaseFilter: true, + numberFilter: true, + orderByFilter: true, + uppercaseFilter: true, + */ + /** * @ngdoc provider * @name $filterProvider @@ -14336,21 +14553,11 @@ function $WindowProvider(){ * For more information about how angular filters work, and how to create your own filters, see * {@link guide/filter Filters} in the Angular Developer Guide. */ -/** - * @ngdoc method - * @name $filterProvider#register - * @description - * Register filter factory function. - * - * @param {String} name Name of the filter. - * @param {Function} fn The filter factory function which is injectable. - */ - /** * @ngdoc service * @name $filter - * @function + * @kind function * @description * Filters are used for formatting data displayed to the user. * @@ -14360,14 +14567,31 @@ function $WindowProvider(){ * * @param {String} name Name of the filter function to retrieve * @return {Function} the filter function - */ + * @example + + +
+

{{ originalText }}

+

{{ filteredText }}

+
+
+ + + angular.module('filterExample', []) + .controller('MainCtrl', function($scope, $filter) { + $scope.originalText = 'hello'; + $scope.filteredText = $filter('uppercase')($scope.originalText); + }); + +
+ */ $FilterProvider.$inject = ['$provide']; function $FilterProvider($provide) { var suffix = 'Filter'; /** * @ngdoc method - * @name $controllerProvider#register + * @name $filterProvider#register * @param {string|Object} name Name of the filter function, or an object map of filters where * the keys are the filter names and the values are the filter factories. * @returns {Object} Registered filter instance, or if a map of filters was provided then a map @@ -14420,7 +14644,7 @@ function $FilterProvider($provide) { /** * @ngdoc filter * @name filter - * @function + * @kind function * * @description * Selects a subset of items from `array` and returns it as a new array. @@ -14440,7 +14664,9 @@ function $FilterProvider($provide) { * which have property `name` containing "M" and property `phone` containing "1". A special * property name `$` can be used (as in `{$:"text"}`) to accept a match against any * property of the object. That's equivalent to the simple substring match with a `string` - * as described above. + * as described above. The predicate can be negated by prefixing the string with `!`. + * For Example `{name: "!M"}` predicate will return an array of items which have property `name` + * not containing "M". * * - `function(value)`: A predicate function can be used to write arbitrary filters. The function is * called for each element of `array`. The final result is an array of those elements that @@ -14452,15 +14678,15 @@ function $FilterProvider($provide) { * * Can be one of: * - * - `function(actual, expected)`: - * The function will be given the object value and the predicate value to compare and - * should return true if the item should be included in filtered result. + * - `function(actual, expected)`: + * The function will be given the object value and the predicate value to compare and + * should return true if the item should be included in filtered result. * - * - `true`: A shorthand for `function(actual, expected) { return angular.equals(expected, actual)}`. - * this is essentially strict comparison of expected and actual. + * - `true`: A shorthand for `function(actual, expected) { return angular.equals(expected, actual)}`. + * this is essentially strict comparison of expected and actual. * - * - `false|undefined`: A short hand for a function which will look for a substring match in case - * insensitive way. + * - `false|undefined`: A short hand for a function which will look for a substring match in case + * insensitive way. * * @example @@ -14612,7 +14838,7 @@ function filterFilter() { // jshint +W086 for (var key in expression) { (function(path) { - if (typeof expression[path] == 'undefined') return; + if (typeof expression[path] === 'undefined') return; predicates.push(function(value) { return search(path == '$' ? value : (value && value[path]), expression[path]); }); @@ -14639,7 +14865,7 @@ function filterFilter() { /** * @ngdoc filter * @name currency - * @function + * @kind function * * @description * Formats a number as a currency (ie $1,234.56). When no currency symbol is provided, default @@ -14651,14 +14877,15 @@ function filterFilter() { * * * @example - + -
+

default currency symbol ($): {{amount | currency}}
custom currency identifier (USD$): {{amount | currency:"USD$"}} @@ -14696,7 +14923,7 @@ function currencyFilter($locale) { /** * @ngdoc filter * @name number - * @function + * @kind function * * @description * Formats a number as text. @@ -14710,14 +14937,15 @@ function currencyFilter($locale) { * @returns {string} Number rounded to decimalPlaces and places a “,” after each third digit. * * @example - + -
+
Enter number:
Default formatting: {{val | number}}
No fractions: {{val | number:0}}
@@ -14767,6 +14995,7 @@ function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) { var match = numStr.match(/([\d\.]+)e(-?)(\d+)/); if (match && match[2] == '-' && match[3] > fractionSize + 1) { numStr = '0'; + number = 0; } else { formatedText = numStr; hasExponent = true; @@ -14781,8 +15010,15 @@ function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) { fractionSize = Math.min(Math.max(pattern.minFrac, fractionLen), pattern.maxFrac); } - var pow = Math.pow(10, fractionSize); - number = Math.round(number * pow) / pow; + // safely round numbers in JS without hitting imprecisions of floating-point arithmetics + // inspired by: + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round + number = +(Math.round(+(number.toString() + 'e' + fractionSize)).toString() + 'e' + -fractionSize); + + if (number === 0) { + isNegative = false; + } + var fraction = ('' + number).split(DECIMAL_SEP); var whole = fraction[0]; fraction = fraction[1] || ''; @@ -14908,7 +15144,7 @@ var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+ /** * @ngdoc filter * @name date - * @function + * @kind function * * @description * Formats `date` to a string based on the requested `format`. @@ -14952,12 +15188,12 @@ var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+ * * `'mediumTime'`: equivalent to `'h:mm:ss a'` for en_US locale (e.g. 12:05:08 pm) * * `'shortTime'`: equivalent to `'h:mm a'` for en_US locale (e.g. 12:05 pm) * - * `format` string can contain literal values. These need to be quoted with single quotes (e.g. - * `"h 'in the morning'"`). In order to output single quote, use two single quotes in a sequence + * `format` string can contain literal values. These need to be escaped by surrounding with single quotes (e.g. + * `"h 'in the morning'"`). In order to output a single quote, escape it - i.e., two single quotes in a sequence * (e.g. `"h 'o''clock'"`). * * @param {(Date|number|string)} date Date to format either as Date object, milliseconds (string or - * number) or various ISO 8601 datetime string formats (e.g. yyyy-MM-ddTHH:mm:ss.SSSZ and its + * number) or various ISO 8601 datetime string formats (e.g. yyyy-MM-ddTHH:mm:ss.sssZ and its * shorter versions like yyyy-MM-ddTHH:mmZ, yyyy-MM-dd or yyyyMMddTHHmmssZ). If no timezone is * specified in the string input, the time is considered to be in the local timezone. * @param {string=} format Formatting rules (see Description). If not specified, @@ -14973,6 +15209,8 @@ var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+ {{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}
{{1288323623006 | date:'MM/dd/yyyy @ h:mma'}}: {{'1288323623006' | date:'MM/dd/yyyy @ h:mma'}}
+ {{1288323623006 | date:"MM/dd/yyyy 'at' h:mma"}}: + {{'1288323623006' | date:"MM/dd/yyyy 'at' h:mma"}}
it('should format date', function() { @@ -14982,6 +15220,8 @@ var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+ toMatch(/2010\-10\-2\d \d{2}:\d{2}:\d{2} (\-|\+)?\d{4}/); expect(element(by.binding("'1288323623006' | date:'MM/dd/yyyy @ h:mma'")).getText()). toMatch(/10\/2\d\/2010 @ \d{1,2}:\d{2}(AM|PM)/); + expect(element(by.binding("'1288323623006' | date:\"MM/dd/yyyy 'at' h:mma\"")).getText()). + toMatch(/10\/2\d\/2010 at \d{1,2}:\d{2}(AM|PM)/); }); @@ -15025,11 +15265,7 @@ function dateFilter($locale) { format = format || 'mediumDate'; format = $locale.DATETIME_FORMATS[format] || format; if (isString(date)) { - if (NUMBER_STRING.test(date)) { - date = int(date); - } else { - date = jsonStringToDate(date); - } + date = NUMBER_STRING.test(date) ? int(date) : jsonStringToDate(date); } if (isNumber(date)) { @@ -15065,7 +15301,7 @@ function dateFilter($locale) { /** * @ngdoc filter * @name json - * @function + * @kind function * * @description * Allows you to convert a JavaScript object into JSON string. @@ -15100,7 +15336,7 @@ function jsonFilter() { /** * @ngdoc filter * @name lowercase - * @function + * @kind function * @description * Converts string to lowercase. * @see angular.lowercase @@ -15111,7 +15347,7 @@ var lowercaseFilter = valueFn(lowercase); /** * @ngdoc filter * @name uppercase - * @function + * @kind function * @description * Converts string to uppercase. * @see angular.uppercase @@ -15121,7 +15357,7 @@ var uppercaseFilter = valueFn(uppercase); /** * @ngdoc filter * @name limitTo - * @function + * @kind function * * @description * Creates a new array or string containing only a specified number of elements. The elements @@ -15137,17 +15373,18 @@ var uppercaseFilter = valueFn(uppercase); * had less than `limit` elements. * * @example - + -
+
Limit {{numbers}} to:

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

Limit {{letters}} to: @@ -15234,7 +15471,7 @@ function limitToFilter(){ /** * @ngdoc filter * @name orderBy - * @function + * @kind function * * @description * Orders a specified `array` by the `expression` predicate. It is ordered alphabetically @@ -15249,9 +15486,13 @@ function limitToFilter(){ * * - `function`: Getter function. The result of this function will be sorted using the * `<`, `=`, `>` operator. - * - `string`: An Angular expression which evaluates to an object to order by, such as 'name' - * to sort by a property called 'name'. Optionally prefixed with `+` or `-` to control - * ascending or descending sort order (for example, +name or -name). + * - `string`: An Angular expression. The result of this expression is used to compare elements + * (for example `name` to sort by a property called `name` or `name.substr(0, 3)` to sort by + * 3 first characters of a property called `name`). The result of a constant expression + * is interpreted as a property name to be used in comparisons (for example `"special name"` + * to sort object by the value of their `special name` property). An expression can be + * optionally prefixed with `+` or `-` to control ascending or descending sort order + * (for example, `+name` or `-name`). * - `Array`: An array of function or string predicates. The first predicate in the array * is used for sorting, but when two items are equivalent, the next predicate is used. * @@ -15259,20 +15500,21 @@ function limitToFilter(){ * @returns {Array} Sorted copy of the source array. * * @example - + -
+
Sorting predicate = {{predicate}}; reverse = {{reverse}}

[ unsorted ] @@ -15292,11 +15534,56 @@ function limitToFilter(){
+ * + * It's also possible to call the orderBy filter manually, by injecting `$filter`, retrieving the + * filter routine with `$filter('orderBy')`, and calling the returned filter routine with the + * desired parameters. + * + * Example: + * + * @example + + +
+ + + + + + + + + + + +
Name + (^)Phone NumberAge
{{friend.name}}{{friend.phone}}{{friend.age}}
+
+
+ + + angular.module('orderByExample', []) + .controller('ExampleController', ['$scope', '$filter', function($scope, $filter) { + var orderBy = $filter('orderBy'); + $scope.friends = [ + { name: 'John', phone: '555-1212', age: 10 }, + { name: 'Mary', phone: '555-9876', age: 19 }, + { name: 'Mike', phone: '555-4321', age: 21 }, + { name: 'Adam', phone: '555-5678', age: 35 }, + { name: 'Julie', phone: '555-8765', age: 29 } + ]; + $scope.order = function(predicate, reverse) { + $scope.friends = orderBy($scope.friends, predicate, reverse); + }; + $scope.order('-age',false); + }]); + +
*/ orderByFilter.$inject = ['$parse']; function orderByFilter($parse){ return function(array, sortPredicate, reverseOrder) { - if (!isArray(array)) return array; + if (!(isArrayLike(array))) return array; if (!sortPredicate) return array; sortPredicate = isArray(sortPredicate) ? sortPredicate: [sortPredicate]; sortPredicate = map(sortPredicate, function(predicate){ @@ -15338,6 +15625,10 @@ function orderByFilter($parse){ var t1 = typeof v1; var t2 = typeof v2; if (t1 == t2) { + if (isDate(v1) && isDate(v2)) { + v1 = v1.valueOf(); + v2 = v2.valueOf(); + } if (t1 == "string") { v1 = v1.toLowerCase(); v2 = v2.toLowerCase(); @@ -15475,7 +15766,7 @@ var htmlAnchorDirective = valueFn({ return browser.driver.getCurrentUrl().then(function(url) { return url.match(/\/123$/); }); - }, 1000, 'page should navigate to /123'); + }, 5000, 'page should navigate to /123'); }); xit('should execute ng-click but not reload when href empty string and name specified', function() { @@ -15503,7 +15794,7 @@ var htmlAnchorDirective = valueFn({ return browser.driver.getCurrentUrl().then(function(url) { return url.match(/\/6$/); }); - }, 1000, 'page should navigate to /6'); + }, 5000, 'page should navigate to /6'); }); @@ -15569,7 +15860,7 @@ var htmlAnchorDirective = valueFn({ * * @description * - * The following markup will make the button enabled on Chrome/Firefox but not on IE8 and older IEs: + * We shouldn't do this, because it will make the button enabled on Chrome/Firefox but not on IE8 and older IEs: * ```html *
* @@ -15789,8 +16080,12 @@ forEach(['src', 'srcset', 'href'], function(attrName) { } attr.$observe(normalized, function(value) { - if (!value) - return; + if (!value) { + if (attrName === 'href') { + attr.$set(name, null); + } + return; + } attr.$set(name, value); @@ -15875,8 +16170,9 @@ function FormController(element, attrs, $scope, $animate) { // convenience method for easy toggling of classes function toggleValidCss(isValid, validationErrorKey) { validationErrorKey = validationErrorKey ? '-' + snake_case(validationErrorKey, '-') : ''; - $animate.removeClass(element, (isValid ? INVALID_CLASS : VALID_CLASS) + validationErrorKey); - $animate.addClass(element, (isValid ? VALID_CLASS : INVALID_CLASS) + validationErrorKey); + $animate.setClass(element, + (isValid ? VALID_CLASS : INVALID_CLASS) + validationErrorKey, + (isValid ? INVALID_CLASS : VALID_CLASS) + validationErrorKey); } /** @@ -16091,8 +16387,6 @@ function FormController(element, attrs, $scope, $animate) { * hitting enter in any of the input fields will trigger the click handler on the *first* button or * input[type=submit] (`ngClick`) *and* a submit handler on the enclosing form (`ngSubmit`) * - * @param {string=} name Name of the form. If specified, the form controller will be published into - * related scope, under this name. * * ## Animation Hooks * @@ -16119,12 +16413,13 @@ function FormController(element, attrs, $scope, $animate) { * * * @example - + - + userType: Required!
userType = {{userType}}
@@ -16169,6 +16464,8 @@ function FormController(element, attrs, $scope, $animate) {
* + * @param {string=} name Name of the form. If specified, the form controller will be published into + * related scope, under this name. */ var formDirectiveFactory = function(isNgForm) { return ['$timeout', function($timeout) { @@ -16230,16 +16527,14 @@ var formDirectiveFactory = function(isNgForm) { var formDirective = formDirectiveFactory(); var ngFormDirective = formDirectiveFactory(true); -/* global - - -VALID_CLASS, - -INVALID_CLASS, - -PRISTINE_CLASS, - -DIRTY_CLASS +/* global VALID_CLASS: true, + INVALID_CLASS: true, + PRISTINE_CLASS: true, + DIRTY_CLASS: true */ var URL_REGEXP = /^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/; -var EMAIL_REGEXP = /^[a-z0-9!#$%&'*+/=?^_`{|}~.-]+@[a-z0-9-]+(\.[a-z0-9-]+)*$/i; +var EMAIL_REGEXP = /^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i; var NUMBER_REGEXP = /^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/; var inputType = { @@ -16249,7 +16544,9 @@ var inputType = { * @name input[text] * * @description - * Standard HTML text input with angular data binding. + * Standard HTML text input with angular data binding, inherited by most of the `input` elements. + * + * *NOTE* Not every feature offered is available for all input types. * * @param {string} ngModel Assignable angular expression to data-bind to. * @param {string=} name Property name of the form under which the control is published. @@ -16267,17 +16564,20 @@ var inputType = { * @param {string=} ngChange Angular expression to be executed when input changes due to user * interaction with the input element. * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input. + * This parameter is ignored for input[type=password] controls, which will never trim the + * input. * * @example - + - + Single word: @@ -16349,14 +16649,15 @@ var inputType = { * interaction with the input element. * * @example - + - + Number: @@ -16424,14 +16725,15 @@ var inputType = { * interaction with the input element. * * @example - + - + URL: Required! @@ -16500,14 +16802,15 @@ var inputType = { * interaction with the input element. * * @example - + - + Email: Required! @@ -16566,18 +16869,19 @@ var inputType = { * be set when selected. * * @example - + - + Red
Green
Blue
@@ -16616,15 +16920,16 @@ var inputType = { * interaction with the input element. * * @example - + - + Value1:
Value2:
@@ -16665,15 +16970,29 @@ function validate(ctrl, validatorName, validity, value){ return validity ? value : undefined; } +function testFlags(validity, flags) { + var i, flag; + if (flags) { + for (i=0; i - if (toBoolean(attr.ngTrim || 'T')) { + // If input type is 'password', the value is never trimmed + if (type !== 'password' && (toBoolean(attr.ngTrim || 'T'))) { value = trim(value); } - if (ctrl.$viewValue !== value || - // If the value is still empty/falsy, and there is no `required` error, run validators - // again. This enables HTML5 constraint validation errors to affect Angular validation - // even when the first character entered causes an error. - (validity && value === '' && !validity.valueMissing)) { - if (scope.$$phase) { + // If a control is suffering from bad input, browsers discard its value, so it may be + // necessary to revalidate even if the control's value is the same empty value twice in + // a row. + var revalidate = validity && ctrl.$$hasNativeValidators; + if (ctrl.$viewValue !== value || (value === '' && revalidate)) { + if (scope.$root.$$phase) { ctrl.$setViewValue(value); } else { scope.$apply(function() { @@ -16833,6 +17154,8 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) { } } +var numberBadFlags = ['badInput']; + function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) { textInputType(scope, element, attr, ctrl, $sniffer, $browser); @@ -16847,7 +17170,7 @@ function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) { } }); - addNativeHtml5Validators(ctrl, 'number', element); + addNativeHtml5Validators(ctrl, 'number', numberBadFlags, null, ctrl.$$validityState); ctrl.$formatters.push(function(value) { return ctrl.$isEmpty(value) ? '' : '' + value; @@ -16979,6 +17302,7 @@ function checkboxInputType(scope, element, attr, ctrl) { * patterns defined as scope expressions. * @param {string=} ngChange Angular expression to be executed when input changes due to user * interaction with the input element. + * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input. */ @@ -16991,6 +17315,8 @@ function checkboxInputType(scope, element, attr, ctrl) { * HTML input element control with angular data-binding. Input control follows HTML5 input types * and polyfills the HTML5 validation behavior for older browsers. * + * *NOTE* Not every feature offered is available for all input types. + * * @param {string} ngModel Assignable angular expression to data-bind to. * @param {string=} name Property name of the form under which the control is published. * @param {string=} required Sets `required` validation error key if the value is not entered. @@ -17004,16 +17330,20 @@ function checkboxInputType(scope, element, attr, ctrl) { * patterns defined as scope expressions. * @param {string=} ngChange Angular expression to be executed when input changes due to user * interaction with the input element. + * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input. + * This parameter is ignored for input[type=password] controls, which will never trim the + * input. * * @example - + -
+
User name: @@ -17128,14 +17458,14 @@ var VALID_CLASS = 'ng-valid', * @property {Array.} $formatters Array of functions to execute, as a pipeline, whenever the model value changes. Each function is called, in turn, passing the value through to the next. Used to format / convert values for display in the control and validation. - * ```js - * function formatter(value) { - * if (value) { - * return value.toUpperCase(); - * } - * } - * ngModel.$formatters.push(formatter); - * ``` + * ```js + * function formatter(value) { + * if (value) { + * return value.toUpperCase(); + * } + * } + * ngModel.$formatters.push(formatter); + * ``` * * @property {Array.} $viewChangeListeners Array of functions to execute whenever the * view value has changed. It is called with no arguments, and its return value is ignored. @@ -17164,7 +17494,12 @@ var VALID_CLASS = 'ng-valid', * Note that `contenteditable` is an HTML5 attribute, which tells the browser to let the element * contents be edited in place by the user. This will not work on older browsers. * - * + * We are using the {@link ng.service:$sce $sce} service here and include the {@link ngSanitize $sanitize} + * module to automatically remove "bad" content like inline event listener (e.g. ``). + * However, as we are using `$sce` the model can still decide to to provide unsafe content if it marks + * that content using the `$sce` service. + * + * [contenteditable] { border: 1px solid black; @@ -17178,8 +17513,8 @@ var VALID_CLASS = 'ng-valid', - angular.module('customControl', []). - directive('contenteditable', function() { + angular.module('customControl', ['ngSanitize']). + directive('contenteditable', ['$sce', function($sce) { return { restrict: 'A', // only activate on element attribute require: '?ngModel', // get a hold of NgModelController @@ -17188,7 +17523,7 @@ var VALID_CLASS = 'ng-valid', // Specify how UI should be updated ngModel.$render = function() { - element.html(ngModel.$viewValue || ''); + element.html($sce.getTrustedHtml(ngModel.$viewValue || '')); }; // Listen for change events to enable binding @@ -17209,7 +17544,7 @@ var VALID_CLASS = 'ng-valid', } } }; - }); + }]); @@ -17323,7 +17658,7 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$ * This method should be called by validators - i.e. the parser or formatter functions. * * @param {string} validationErrorKey Name of the validator. the `validationErrorKey` will assign - * to `$error[validationErrorKey]=isValid` so that it is available for data-binding. + * to `$error[validationErrorKey]=!isValid` so that it is available for data-binding. * The `validationErrorKey` should be in camelCase and will get converted into dash-case * for class name. Example: `myError` will result in `ng-valid-my-error` and `ng-invalid-my-error` * class and can be bound to as `{{someForm.someControl.$error.myError}}` . @@ -17526,12 +17861,13 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$ * * * @example - * + * Update input to see transitions when valid/invalid. Integer is a valid value. - + @@ -17590,17 +17926,18 @@ var ngModelDirective = function() { * in input value. * * @example - * + * * * - *
+ *
* * *
@@ -17681,14 +18018,15 @@ var requiredDirective = function() { * specified in form `/something/` then the value will be converted into a regular expression. * * @example - + -
+ List: Required! @@ -17780,15 +18118,16 @@ var CONSTANT_VALUE_REGEXP = /^(true|false|\d+)$/; * of the `input` element * * @example - + - +

Which is your favorite?

+
Enter name:
Hello !
@@ -17883,14 +18223,19 @@ var ngValueDirective = function() { */ -var ngBindDirective = ngDirective(function(scope, element, attr) { - element.addClass('ng-binding').data('$binding', attr.ngBind); - scope.$watch(attr.ngBind, function ngBindWatchAction(value) { - // We are purposefully using == here rather than === because we want to - // catch when value is "null or undefined" - // jshint -W041 - element.text(value == undefined ? '' : value); - }); +var ngBindDirective = ngDirective({ + compile: function(templateElement) { + templateElement.addClass('ng-binding'); + return function (scope, element, attr) { + element.data('$binding', attr.ngBind); + scope.$watch(attr.ngBind, function ngBindWatchAction(value) { + // We are purposefully using == here rather than === because we want to + // catch when value is "null or undefined" + // jshint -W041 + element.text(value == undefined ? '' : value); + }); + }; + } }); @@ -17912,15 +18257,16 @@ var ngBindDirective = ngDirective(function(scope, element, attr) { * * @example * Try it here: enter text in text box and watch the greeting change. - + -
+
Salutation:
Name:

@@ -17976,22 +18322,21 @@ var ngBindTemplateDirective = ['$interpolate', function($interpolate) {
  * @param {expression} ngBindHtml {@link guide/expression Expression} to evaluate.
  *
  * @example
-   Try it here: enter text in text box and watch the greeting change.
 
-   
+   
      
-       
+

- angular.module('ngBindHtmlExample', ['ngSanitize']) - - .controller('ngBindHtmlCtrl', ['$scope', function ngBindHtmlCtrl($scope) { - $scope.myHTML = - 'I am an HTMLstring with links! and other stuff'; - }]); + angular.module('bindHtmlExample', ['ngSanitize']) + .controller('ExampleController', ['$scope', function($scope) { + $scope.myHTML = + 'I am an HTMLstring with ' + + '
links! and other stuff'; + }]); @@ -18003,15 +18348,24 @@ var ngBindTemplateDirective = ['$interpolate', function($interpolate) { */ var ngBindHtmlDirective = ['$sce', '$parse', function($sce, $parse) { - return function(scope, element, attr) { - element.addClass('ng-binding').data('$binding', attr.ngBindHtml); + return { + compile: function (tElement) { + tElement.addClass('ng-binding'); - var parsed = $parse(attr.ngBindHtml); - function getStringValue() { return (parsed(scope) || '').toString(); } + return function (scope, element, attr) { + element.data('$binding', attr.ngBindHtml); - scope.$watch(getStringValue, function ngBindHtmlWatchAction(value) { - element.html($sce.getTrustedHtml(parsed(scope)) || ''); - }); + var parsed = $parse(attr.ngBindHtml); + + function getStringValue() { + return (parsed(scope) || '').toString(); + } + + scope.$watch(getStringValue, function ngBindHtmlWatchAction(value) { + element.html($sce.getTrustedHtml(parsed(scope)) || ''); + }); + }; + } }; }]; @@ -18034,7 +18388,7 @@ function classDirective(name, selector) { scope.$watch('$index', function($index, old$index) { // jshint bitwise: false var mod = $index & 1; - if (mod !== old$index & 1) { + if (mod !== (old$index & 1)) { var classes = arrayClasses(scope.$eval(attr[name])); mod === selector ? addClasses(classes) : @@ -18093,7 +18447,7 @@ function classDirective(name, selector) { updateClasses(oldClasses, newClasses); } } - oldVal = copy(newVal); + oldVal = shallowCopy(newVal); } } }; @@ -18121,7 +18475,7 @@ function classDirective(name, selector) { var classes = [], i = 0; forEach(classVal, function(v, k) { if (v) { - classes.push(k); + classes = classes.concat(k.split(' ')); } }); return classes; @@ -18446,7 +18800,7 @@ var ngCloakDirective = ngDirective({ * * MVC components in angular: * - * * Model — The Model is scope properties; scopes are attached to the DOM where scope properties + * * Model — Models are the properties of a scope; scopes are attached to the DOM where scope properties * are accessed through bindings. * * View — The template (HTML with data bindings) that is rendered into the View. * * Controller — The `ngController` directive specifies a Controller class; the class contains business @@ -18467,165 +18821,192 @@ var ngCloakDirective = ngDirective({ * @example * Here is a simple form for editing user contact information. Adding, removing, clearing, and * greeting are methods declared on the controller (see source tab). These methods can - * easily be called from the angular markup. Notice that the scope becomes the `this` for the - * controller's instance. This allows for easy access to the view data from the controller. Also - * notice that any changes to the data are automatically reflected in the View without the need - * for a manual update. The example is shown in two different declaration styles you may use - * according to preference. - - - -
- Name: - [ greet ]
- Contact: -
    -
  • - - - [ clear - | X ] -
  • -
  • [ add ]
  • -
-
-
- - it('should check controller as', function() { - var container = element(by.id('ctrl-as-exmpl')); - - expect(container.findElement(by.model('settings.name')) - .getAttribute('value')).toBe('John Smith'); - - var firstRepeat = - container.findElement(by.repeater('contact in settings.contacts').row(0)); - var secondRepeat = - container.findElement(by.repeater('contact in settings.contacts').row(1)); - - expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value')) - .toBe('408 555 1212'); - expect(secondRepeat.findElement(by.model('contact.value')).getAttribute('value')) - .toBe('john.smith@example.org'); - - firstRepeat.findElement(by.linkText('clear')).click(); - - expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value')) - .toBe(''); - - container.findElement(by.linkText('add')).click(); - - expect(container.findElement(by.repeater('contact in settings.contacts').row(2)) - .findElement(by.model('contact.value')) - .getAttribute('value')) - .toBe('yourname@example.org'); - }); - -
- - - -
- Name: - [ greet ]
- Contact: -
    -
  • - - - [ clear - | X ] -
  • -
  • [ add ]
  • -
-
-
- - it('should check controller', function() { - var container = element(by.id('ctrl-exmpl')); - - expect(container.findElement(by.model('name')) - .getAttribute('value')).toBe('John Smith'); - - var firstRepeat = - container.findElement(by.repeater('contact in contacts').row(0)); - var secondRepeat = - container.findElement(by.repeater('contact in contacts').row(1)); - - expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value')) - .toBe('408 555 1212'); - expect(secondRepeat.findElement(by.model('contact.value')).getAttribute('value')) - .toBe('john.smith@example.org'); - - firstRepeat.findElement(by.linkText('clear')).click(); - - expect(firstRepeat.findElement(by.model('contact.value')).getAttribute('value')) - .toBe(''); - - container.findElement(by.linkText('add')).click(); - - expect(container.findElement(by.repeater('contact in contacts').row(2)) - .findElement(by.model('contact.value')) - .getAttribute('value')) - .toBe('yourname@example.org'); - }); - -
+ * easily be called from the angular markup. Any changes to the data are automatically reflected + * in the View without the need for a manual update. + * + * Two different declaration styles are included below: + * + * * one binds methods and properties directly onto the controller using `this`: + * `ng-controller="SettingsController1 as settings"` + * * one injects `$scope` into the controller: + * `ng-controller="SettingsController2"` + * + * The second option is more common in the Angular community, and is generally used in boilerplates + * and in this guide. However, there are advantages to binding properties directly to the controller + * and avoiding scope. + * + * * Using `controller as` makes it obvious which controller you are accessing in the template when + * multiple controllers apply to an element. + * * If you are writing your controllers as classes you have easier access to the properties and + * methods, which will appear on the scope, from inside the controller code. + * * Since there is always a `.` in the bindings, you don't have to worry about prototypal + * inheritance masking primitives. + * + * This example demonstrates the `controller as` syntax. + * + * + * + *
+ * Name: + * [ greet ]
+ * Contact: + *
    + *
  • + * + * + * [ clear + * | X ] + *
  • + *
  • [ add ]
  • + *
+ *
+ *
+ * + * angular.module('controllerAsExample', []) + * .controller('SettingsController1', SettingsController1); + * + * function SettingsController1() { + * this.name = "John Smith"; + * this.contacts = [ + * {type: 'phone', value: '408 555 1212'}, + * {type: 'email', value: 'john.smith@example.org'} ]; + * } + * + * SettingsController1.prototype.greet = function() { + * alert(this.name); + * }; + * + * SettingsController1.prototype.addContact = function() { + * this.contacts.push({type: 'email', value: 'yourname@example.org'}); + * }; + * + * SettingsController1.prototype.removeContact = function(contactToRemove) { + * var index = this.contacts.indexOf(contactToRemove); + * this.contacts.splice(index, 1); + * }; + * + * SettingsController1.prototype.clearContact = function(contact) { + * contact.type = 'phone'; + * contact.value = ''; + * }; + * + * + * it('should check controller as', function() { + * var container = element(by.id('ctrl-as-exmpl')); + * expect(container.element(by.model('settings.name')) + * .getAttribute('value')).toBe('John Smith'); + * + * var firstRepeat = + * container.element(by.repeater('contact in settings.contacts').row(0)); + * var secondRepeat = + * container.element(by.repeater('contact in settings.contacts').row(1)); + * + * expect(firstRepeat.element(by.model('contact.value')).getAttribute('value')) + * .toBe('408 555 1212'); + * + * expect(secondRepeat.element(by.model('contact.value')).getAttribute('value')) + * .toBe('john.smith@example.org'); + * + * firstRepeat.element(by.linkText('clear')).click(); + * + * expect(firstRepeat.element(by.model('contact.value')).getAttribute('value')) + * .toBe(''); + * + * container.element(by.linkText('add')).click(); + * + * expect(container.element(by.repeater('contact in settings.contacts').row(2)) + * .element(by.model('contact.value')) + * .getAttribute('value')) + * .toBe('yourname@example.org'); + * }); + * + *
+ * + * This example demonstrates the "attach to `$scope`" style of controller. + * + * + * + *
+ * Name: + * [ greet ]
+ * Contact: + *
    + *
  • + * + * + * [ clear + * | X ] + *
  • + *
  • [ add ]
  • + *
+ *
+ *
+ * + * angular.module('controllerExample', []) + * .controller('SettingsController2', ['$scope', SettingsController2]); + * + * function SettingsController2($scope) { + * $scope.name = "John Smith"; + * $scope.contacts = [ + * {type:'phone', value:'408 555 1212'}, + * {type:'email', value:'john.smith@example.org'} ]; + * + * $scope.greet = function() { + * alert($scope.name); + * }; + * + * $scope.addContact = function() { + * $scope.contacts.push({type:'email', value:'yourname@example.org'}); + * }; + * + * $scope.removeContact = function(contactToRemove) { + * var index = $scope.contacts.indexOf(contactToRemove); + * $scope.contacts.splice(index, 1); + * }; + * + * $scope.clearContact = function(contact) { + * contact.type = 'phone'; + * contact.value = ''; + * }; + * } + * + * + * it('should check controller', function() { + * var container = element(by.id('ctrl-exmpl')); + * + * expect(container.element(by.model('name')) + * .getAttribute('value')).toBe('John Smith'); + * + * var firstRepeat = + * container.element(by.repeater('contact in contacts').row(0)); + * var secondRepeat = + * container.element(by.repeater('contact in contacts').row(1)); + * + * expect(firstRepeat.element(by.model('contact.value')).getAttribute('value')) + * .toBe('408 555 1212'); + * expect(secondRepeat.element(by.model('contact.value')).getAttribute('value')) + * .toBe('john.smith@example.org'); + * + * firstRepeat.element(by.linkText('clear')).click(); + * + * expect(firstRepeat.element(by.model('contact.value')).getAttribute('value')) + * .toBe(''); + * + * container.element(by.linkText('add')).click(); + * + * expect(container.element(by.repeater('contact in contacts').row(2)) + * .element(by.model('contact.value')) + * .getAttribute('value')) + * .toBe('yourname@example.org'); + * }); + * + *
*/ var ngControllerDirective = [function() { @@ -18647,8 +19028,10 @@ var ngControllerDirective = [function() { * This is necessary when developing things like Google Chrome Extensions. * * CSP forbids apps to use `eval` or `Function(string)` generated functions (among other things). - * For us to be compatible, we just need to implement the "getterFn" in $parse without violating - * any of these restrictions. + * For Angular to be CSP compatible there are only two things that we need to do differently: + * + * - don't use `Function` constructor to generate optimized value getters + * - don't inject custom stylesheet into the document * * AngularJS uses `Function(string)` generated functions as a speed optimization. Applying the `ngCsp` * directive will cause Angular to use CSP compatibility mode. When this mode is on AngularJS will @@ -18659,7 +19042,18 @@ var ngControllerDirective = [function() { * includes some CSS rules (e.g. {@link ng.directive:ngCloak ngCloak}). * To make those directives work in CSP mode, include the `angular-csp.css` manually. * - * In order to use this feature put the `ngCsp` directive on the root element of the application. + * Angular tries to autodetect if CSP is active and automatically turn on the CSP-safe mode. This + * autodetection however triggers a CSP error to be logged in the console: + * + * ``` + * Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of + * script in the following Content Security Policy directive: "default-src 'self'". Note that + * 'script-src' was not explicitly set, so 'default-src' is used as a fallback. + * ``` + * + * This error is harmless but annoying. To prevent the error from showing up, put the `ngCsp` + * directive on the root element of the application or on the `angular.js` script tag, whichever + * appears first in the html document. * * *Note: This directive is only available in the `ng-csp` and `data-ng-csp` attribute form.* * @@ -18674,9 +19068,9 @@ var ngControllerDirective = [function() { ``` */ -// ngCsp is not implemented as a proper directive any more, because we need it be processed while we bootstrap -// the system (before $parse is instantiated), for this reason we just have a csp() fn that looks for ng-csp attribute -// anywhere in the current doc +// ngCsp is not implemented as a proper directive any more, because we need it be processed while we +// bootstrap the system (before $parse is instantiated), for this reason we just have +// the csp.isActive() fn that looks for ng-csp attribute anywhere in the current doc /** * @ngdoc directive @@ -18697,7 +19091,9 @@ var ngControllerDirective = [function() { - count: {{count}} + + count: {{count}} +
it('should check ng-click', function() { @@ -18715,19 +19111,32 @@ var ngControllerDirective = [function() { * Events that are handled via these handler are always configured not to propagate further. */ var ngEventDirectives = {}; + +// For events that might fire synchronously during DOM manipulation +// we need to execute their event handlers asynchronously using $evalAsync, +// so that they are not executed in an inconsistent state. +var forceAsyncEvents = { + 'blur': true, + 'focus': true +}; forEach( 'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste'.split(' '), - function(name) { - var directiveName = directiveNormalize('ng-' + name); - ngEventDirectives[directiveName] = ['$parse', function($parse) { + function(eventName) { + var directiveName = directiveNormalize('ng-' + eventName); + ngEventDirectives[directiveName] = ['$parse', '$rootScope', function($parse, $rootScope) { return { compile: function($element, attr) { var fn = $parse(attr[directiveName]); - return function(scope, element, attr) { - element.on(lowercase(name), function(event) { - scope.$apply(function() { + return function ngEventHandler(scope, element) { + element.on(eventName, function(event) { + var callback = function() { fn(scope, {$event:event}); - }); + }; + if (forceAsyncEvents[eventName] && $rootScope.$$phase) { + scope.$evalAsync(callback); + } else { + scope.$apply(callback); + } }); }; } @@ -18940,8 +19349,13 @@ forEach( * @example - - key up count: {{count}} +

Typing in the input box below updates the key count

+ key up count: {{count}} + +

Typing in the input box below updates the keycode

+ +

event keyCode: {{ event.keyCode }}

+

event altKey: {{ event.altKey }}

*/ @@ -18980,27 +19394,35 @@ forEach( * server and reloading the current page), but only if the form does not contain `action`, * `data-action`, or `x-action` attributes. * + *
+ * **Warning:** Be careful not to cause "double-submission" by using both the `ngClick` and + * `ngSubmit` handlers together. See the + * {@link form#submitting-a-form-and-preventing-the-default-action `form` directive documentation} + * for a detailed discussion of when `ngSubmit` may be triggered. + *
+ * * @element form * @priority 0 * @param {expression} ngSubmit {@link guide/expression Expression} to eval. * ({@link guide/expression#-event- Event object is available as `$event`}) * * @example - + - + Enter text and hit enter: @@ -19012,7 +19434,7 @@ forEach( expect(element(by.binding('list')).getText()).toBe('list=[]'); element(by.css('#submit')).click(); expect(element(by.binding('list')).getText()).toContain('hello'); - expect(element(by.input('text')).getAttribute('value')).toBe(''); + expect(element(by.model('text')).getAttribute('value')).toBe(''); }); it('should ignore empty strings', function() { expect(element(by.binding('list')).getText()).toBe('list=[]'); @@ -19031,6 +19453,10 @@ forEach( * @description * Specify custom behavior on focus event. * + * Note: As the `focus` event is executed synchronously when calling `input.focus()` + * AngularJS executes the expression using `scope.$evalAsync` if the event is fired + * during an `$apply` to ensure a consistent state. + * * @element window, input, select, textarea, a * @priority 0 * @param {expression} ngFocus {@link guide/expression Expression} to evaluate upon @@ -19047,6 +19473,14 @@ forEach( * @description * Specify custom behavior on blur event. * + * A [blur event](https://developer.mozilla.org/en-US/docs/Web/Events/blur) fires when + * an element has lost focus. + * + * Note: As the `blur` event is executed synchronously also during DOM manipulations + * (e.g. removing a focussed input), + * AngularJS executes the expression using `scope.$evalAsync` if the event is fired + * during an `$apply` to ensure a consistent state. + * * @element window, input, select, textarea, a * @priority 0 * @param {expression} ngBlur {@link guide/expression Expression} to evaluate upon @@ -19213,7 +19647,7 @@ var ngIfDirective = ['$animate', function($animate) { clone[clone.length++] = document.createComment(' end ngIf: ' + $attr.ngIf + ' '); // Note: We only need the first/last node of the cloned nodes. // However, we need to keep the reference to the jqlite wrapper as it might be changed later - // by a directive with templateUrl when it's template arrives. + // by a directive with templateUrl when its template arrives. block = { clone: clone }; @@ -19285,9 +19719,9 @@ var ngIfDirective = ['$animate', function($animate) { * - Otherwise enable scrolling only if the expression evaluates to truthy value. * * @example - + -
+
@@ -19299,12 +19733,13 @@ var ngIfDirective = ['$animate', function($animate) {
- function Ctrl($scope) { - $scope.templates = - [ { name: 'template1.html', url: 'template1.html'}, - { name: 'template2.html', url: 'template2.html'} ]; - $scope.template = $scope.templates[0]; - } + angular.module('includeExample', ['ngAnimate']) + .controller('ExampleController', ['$scope', function($scope) { + $scope.templates = + [ { name: 'template1.html', url: 'template1.html'}, + { name: 'template2.html', url: 'template2.html'} ]; + $scope.template = $scope.templates[0]; + }]); Content of template1.html @@ -19367,7 +19802,7 @@ var ngIfDirective = ['$animate', function($animate) { return; } templateSelect.click(); - templateSelect.element.all(by.css('option')).get(2).click(); + templateSelect.all(by.css('option')).get(2).click(); expect(includeElem.getText()).toMatch(/Content of template2.html/); }); @@ -19377,7 +19812,7 @@ var ngIfDirective = ['$animate', function($animate) { return; } templateSelect.click(); - templateSelect.element.all(by.css('option')).get(0).click(); + templateSelect.all(by.css('option')).get(0).click(); expect(includeElem.isPresent()).toBe(false); }); @@ -19529,14 +19964,15 @@ var ngIncludeFillContentDirective = ['$compile', * @param {expression} ngInit {@link guide/expression Expression} to eval. * * @example - + -
+
list[ {{outerIndex}} ][ {{innerIndex}} ] = {{value}}; @@ -19676,7 +20112,7 @@ var ngNonBindableDirective = ngDirective({ terminal: true, priority: 1000 }); * When one person, perhaps John, views the document, "John is viewing" will be shown. * When three people view the document, no explicit number rule is found, so * an offset of 2 is taken off 3, and Angular uses 1 to decide the plural category. - * In this case, plural category 'one' is matched and "John, Marry and one other person are viewing" + * In this case, plural category 'one' is matched and "John, Mary and one other person are viewing" * is shown. * * Note that when you specify offsets, you must provide explicit number rules for @@ -19689,16 +20125,17 @@ var ngNonBindableDirective = ngDirective({ terminal: true, priority: 1000 }); * @param {number=} offset Offset to deduct from the total number. * * @example - + -
+
Person 1:
Person 2:
Number of People:
@@ -19912,7 +20349,7 @@ var ngPluralizeDirective = ['$locale', '$interpolate', function($locale, $interp * mapped to the same DOM element, which is not possible.) Filters should be applied to the expression, * before specifying a tracking expression. * - * For example: `item in items` is equivalent to `item in items track by $id(item)'. This implies that the DOM elements + * For example: `item in items` is equivalent to `item in items track by $id(item)`. This implies that the DOM elements * will be associated by item identity in the array. * * For example: `item in items track by $id(item)`. A built in `$id()` function can be used to assign a unique @@ -20124,8 +20561,9 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) { if (block && block.scope) lastBlockMap[block.id] = block; }); // This is a duplicate and we need to throw an error - throw ngRepeatMinErr('dupes', "Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}", - expression, trackById); + throw ngRepeatMinErr('dupes', + "Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}, Duplicate value: {2}", + expression, trackById, toJson(value)); } else { // new never before seen block nextBlockOrder[index] = { id: trackById }; @@ -20190,7 +20628,7 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) { block.scope = childScope; // Note: We only need the first/last node of the cloned nodes. // However, we need to keep the reference to the jqlite wrapper as it might be changed later - // by a directive with templateUrl when it's template arrives. + // by a directive with templateUrl when its template arrives. block.clone = clone; nextBlockMap[block.id] = block; }); @@ -20216,8 +20654,8 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) { * * @description * The `ngShow` directive shows or hides the given HTML element based on the expression - * provided to the ngShow attribute. The element is shown or hidden by removing or adding - * the `ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined + * provided to the `ngShow` attribute. The element is shown or hidden by removing or adding + * the `.ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined * in AngularJS and sets the display style to none (using an !important flag). * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}). * @@ -20229,13 +20667,18 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) { *
* ``` * - * When the ngShow expression evaluates to false then the ng-hide CSS class is added to the class attribute - * on the element causing it to become hidden. When true, the ng-hide CSS class is removed + * When the `ngShow` expression evaluates to false then the `.ng-hide` CSS class is added to the class attribute + * on the element causing it to become hidden. When true, the `.ng-hide` CSS class is removed * from the element causing the element not to appear hidden. * + *
+ * **Note:** Here is a list of values that ngShow will consider as a falsy value (case insensitive):
+ * "f" / "0" / "false" / "no" / "n" / "[]" + *
+ * * ## Why is !important used? * - * You may be wondering why !important is used for the .ng-hide CSS class. This is because the `.ng-hide` selector + * You may be wondering why !important is used for the `.ng-hide` CSS class. This is because the `.ng-hide` selector * can be easily overridden by heavier selectors. For example, something as simple * as changing the display style on a HTML list item would make hidden elements appear visible. * This also becomes a bigger issue when dealing with CSS frameworks. @@ -20244,30 +20687,25 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) { * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the * styling to change how to hide an element then it is just a matter of using !important in their own CSS code. * - * ### Overriding .ng-hide + * ### Overriding `.ng-hide` + * + * By default, the `.ng-hide` class will style the element with `display:none!important`. If you wish to change + * the hide behavior with ngShow/ngHide then this can be achieved by restating the styles for the `.ng-hide` + * class in CSS: * - * If you wish to change the hide behavior with ngShow/ngHide then this can be achieved by - * restating the styles for the .ng-hide class in CSS: * ```css * .ng-hide { - * //!annotate CSS Specificity|Not to worry, this will override the AngularJS default... - * display:block!important; - * * //this is just another form of hiding an element + * display:block!important; * position:absolute; * top:-9999px; * left:-9999px; * } * ``` * - * Just remember to include the important flag so the CSS override will function. + * By default you don't need to override in CSS anything and the animations will work around the display style. * - *
- * **Note:** Here is a list of values that ngShow will consider as a falsy value (case insensitive):
- * "f" / "0" / "false" / "no" / "n" / "[]" - *
- * - * ## A note about animations with ngShow + * ## A note about animations with `ngShow` * * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression * is true and false. This system works like the animation system present with ngClass except that @@ -20280,7 +20718,6 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) { * // * .my-element.ng-hide-add, .my-element.ng-hide-remove { * transition:0.5s linear all; - * display:block!important; * } * * .my-element.ng-hide-add { ... } @@ -20289,9 +20726,12 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) { * .my-element.ng-hide-remove.ng-hide-remove-active { ... } * ``` * + * Keep in mind that, as of AngularJS version 1.2.17 (and 1.3.0-beta.11), there is no need to change the display + * property to block during animation states--ngAnimate will handle the style toggling automatically for you. + * * @animations - * addClass: .ng-hide - happens after the ngShow expression evaluates to a truthy value and the just before contents are set to visible - * removeClass: .ng-hide - happens after the ngShow expression evaluates to a non truthy value and just before the contents are set to hidden + * addClass: `.ng-hide` - happens after the `ngShow` expression evaluates to a truthy value and the just before contents are set to visible + * removeClass: `.ng-hide` - happens after the `ngShow` expression evaluates to a non truthy value and just before the contents are set to hidden * * @element ANY * @param {expression} ngShow If the {@link guide/expression expression} is truthy @@ -20328,11 +20768,6 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) { background:white; } - .animate-show.ng-hide-add, - .animate-show.ng-hide-remove { - display:block!important; - } - .animate-show.ng-hide { line-height:0; opacity:0; @@ -20376,26 +20811,31 @@ var ngShowDirective = ['$animate', function($animate) { * * @description * The `ngHide` directive shows or hides the given HTML element based on the expression - * provided to the ngHide attribute. The element is shown or hidden by removing or adding + * provided to the `ngHide` attribute. The element is shown or hidden by removing or adding * the `ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined * in AngularJS and sets the display style to none (using an !important flag). * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}). * * ```html * - *
+ *
* * - *
+ *
* ``` * - * When the ngHide expression evaluates to true then the .ng-hide CSS class is added to the class attribute - * on the element causing it to become hidden. When false, the ng-hide CSS class is removed + * When the `.ngHide` expression evaluates to true then the `.ng-hide` CSS class is added to the class attribute + * on the element causing it to become hidden. When false, the `.ng-hide` CSS class is removed * from the element causing the element not to appear hidden. * + *
+ * **Note:** Here is a list of values that ngHide will consider as a falsy value (case insensitive):
+ * "f" / "0" / "false" / "no" / "n" / "[]" + *
+ * * ## Why is !important used? * - * You may be wondering why !important is used for the .ng-hide CSS class. This is because the `.ng-hide` selector + * You may be wondering why !important is used for the `.ng-hide` CSS class. This is because the `.ng-hide` selector * can be easily overridden by heavier selectors. For example, something as simple * as changing the display style on a HTML list item would make hidden elements appear visible. * This also becomes a bigger issue when dealing with CSS frameworks. @@ -20404,35 +20844,29 @@ var ngShowDirective = ['$animate', function($animate) { * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the * styling to change how to hide an element then it is just a matter of using !important in their own CSS code. * - * ### Overriding .ng-hide + * ### Overriding `.ng-hide` + * + * By default, the `.ng-hide` class will style the element with `display:none!important`. If you wish to change + * the hide behavior with ngShow/ngHide then this can be achieved by restating the styles for the `.ng-hide` + * class in CSS: * - * If you wish to change the hide behavior with ngShow/ngHide then this can be achieved by - * restating the styles for the .ng-hide class in CSS: * ```css * .ng-hide { - * //!annotate CSS Specificity|Not to worry, this will override the AngularJS default... - * display:block!important; - * * //this is just another form of hiding an element + * display:block!important; * position:absolute; * top:-9999px; * left:-9999px; * } * ``` * - * Just remember to include the important flag so the CSS override will function. + * By default you don't need to override in CSS anything and the animations will work around the display style. * - *
- * **Note:** Here is a list of values that ngHide will consider as a falsy value (case insensitive):
- * "f" / "0" / "false" / "no" / "n" / "[]" - *
- * - * ## A note about animations with ngHide + * ## A note about animations with `ngHide` * * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression - * is true and false. This system works like the animation system present with ngClass, except that - * you must also include the !important flag to override the display property so - * that you can perform an animation when the element is hidden during the time of the animation. + * is true and false. This system works like the animation system present with ngClass, except that the `.ng-hide` + * CSS class is added and removed for you instead of your own CSS class. * * ```css * // @@ -20440,7 +20874,6 @@ var ngShowDirective = ['$animate', function($animate) { * // * .my-element.ng-hide-add, .my-element.ng-hide-remove { * transition:0.5s linear all; - * display:block!important; * } * * .my-element.ng-hide-add { ... } @@ -20449,9 +20882,12 @@ var ngShowDirective = ['$animate', function($animate) { * .my-element.ng-hide-remove.ng-hide-remove-active { ... } * ``` * + * Keep in mind that, as of AngularJS version 1.2.17 (and 1.3.0-beta.11), there is no need to change the display + * property to block during animation states--ngAnimate will handle the style toggling automatically for you. + * * @animations - * removeClass: .ng-hide - happens after the ngHide expression evaluates to a truthy value and just before the contents are set to hidden - * addClass: .ng-hide - happens after the ngHide expression evaluates to a non truthy value and just before the contents are set to visible + * removeClass: `.ng-hide` - happens after the `ngHide` expression evaluates to a truthy value and just before the contents are set to hidden + * addClass: `.ng-hide` - happens after the `ngHide` expression evaluates to a non truthy value and just before the contents are set to visible * * @element ANY * @param {expression} ngHide If the {@link guide/expression expression} is truthy then @@ -20488,11 +20924,6 @@ var ngShowDirective = ['$animate', function($animate) { background:white; } - .animate-hide.ng-hide-add, - .animate-hide.ng-hide-remove { - display:block!important; - } - .animate-hide.ng-hide { line-height:0; opacity:0; @@ -20538,14 +20969,20 @@ var ngHideDirective = ['$animate', function($animate) { * The `ngStyle` directive allows you to set CSS style on an HTML element conditionally. * * @element ANY - * @param {expression} ngStyle {@link guide/expression Expression} which evals to an - * object whose keys are CSS style names and values are corresponding values for those CSS - * keys. + * @param {expression} ngStyle + * + * {@link guide/expression Expression} which evals to an + * object whose keys are CSS style names and values are corresponding values for those CSS + * keys. + * + * Since some CSS style names are not valid keys for an object, they must be quoted. + * See the 'background-color' style in the example below. * * @example - + +
Sample Text @@ -20561,7 +20998,7 @@ var ngHideDirective = ['$animate', function($animate) { it('should check ng-style', function() { expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)'); - element(by.css('input[value=set]')).click(); + element(by.css('input[value=\'set color\']')).click(); expect(colorSpan.getCssValue('color')).toBe('rgba(255, 0, 0, 1)'); element(by.css('input[value=clear]')).click(); expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)'); @@ -20633,9 +21070,9 @@ var ngStyleDirective = ngDirective(function(scope, element, attr) { * * * @example - + -
+
selection={{selection}} @@ -20649,10 +21086,11 @@ var ngStyleDirective = ngDirective(function(scope, element, attr) {
- function Ctrl($scope) { - $scope.items = ['settings', 'home', 'other']; - $scope.selection = $scope.items[0]; - } + angular.module('switchExample', ['ngAnimate']) + .controller('ExampleController', ['$scope', function($scope) { + $scope.items = ['settings', 'home', 'other']; + $scope.selection = $scope.items[0]; + }]); .animate-switch-container { @@ -20695,11 +21133,11 @@ var ngStyleDirective = ngDirective(function(scope, element, attr) { expect(switchElem.getText()).toMatch(/Settings Div/); }); it('should change to home', function() { - select.element.all(by.css('option')).get(1).click(); + select.all(by.css('option')).get(1).click(); expect(switchElem.getText()).toMatch(/Home Span/); }); it('should select default', function() { - select.element.all(by.css('option')).get(2).click(); + select.all(by.css('option')).get(2).click(); expect(switchElem.getText()).toMatch(/default/); }); @@ -20716,37 +21154,29 @@ var ngSwitchDirective = ['$animate', function($animate) { }], link: function(scope, element, attr, ngSwitchController) { var watchExpr = attr.ngSwitch || attr.on, - selectedTranscludes, - selectedElements, - previousElements, + selectedTranscludes = [], + selectedElements = [], + previousElements = [], selectedScopes = []; scope.$watch(watchExpr, function ngSwitchWatchAction(value) { - var i, ii = selectedScopes.length; - if(ii > 0) { - if(previousElements) { - for (i = 0; i < ii; i++) { - previousElements[i].remove(); - } - previousElements = null; - } + var i, ii; + for (i = 0, ii = previousElements.length; i < ii; ++i) { + previousElements[i].remove(); + } + previousElements.length = 0; - previousElements = []; - for (i= 0; i + -
+


{{text}} @@ -20979,21 +21408,22 @@ var ngOptionsMinErr = minErr('ngOptions'); * `value` variable (e.g. `value.propertyName`). * * @example - + -
+
  • Name: @@ -21030,7 +21460,7 @@ var ngOptionsMinErr = minErr('ngOptions'); it('should check ng-options', function() { expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('red'); - element.all(by.select('myColor')).first().click(); + element.all(by.model('myColor')).first().click(); element.all(by.css('select[ng-model="myColor"] option')).first().click(); expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('black'); element(by.css('.nullable select[ng-model="myColor"]')).click(); @@ -21190,7 +21620,7 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) { // we need to work of an array, so we need to see if anything was inserted/removed scope.$watch(function selectMultipleWatch() { if (!equals(lastView, ctrl.$viewValue)) { - lastView = copy(ctrl.$viewValue); + lastView = shallowCopy(ctrl.$viewValue); ctrl.$render(); } }); @@ -21301,21 +21731,50 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) { value = valueFn(scope, locals); } } - // Update the null option's selected property here so $render cleans it up correctly - if (optionGroupsCache[0].length > 1) { - if (optionGroupsCache[0][1].id !== key) { - optionGroupsCache[0][1].selected = false; - } - } } ctrl.$setViewValue(value); + render(); }); }); ctrl.$render = render; - // TODO(vojta): can't we optimize this ? - scope.$watch(render); + scope.$watchCollection(valuesFn, render); + scope.$watchCollection(function () { + var locals = {}, + values = valuesFn(scope); + if (values) { + var toDisplay = new Array(values.length); + for (var i = 0, ii = values.length; i < ii; i++) { + locals[valueName] = values[i]; + toDisplay[i] = displayFn(scope, locals); + } + return toDisplay; + } + }, render); + + if ( multiple ) { + scope.$watchCollection(function() { return ctrl.$modelValue; }, render); + } + + function getSelectedSet() { + var selectedSet = false; + if (multiple) { + var modelValue = ctrl.$modelValue; + if (trackFn && isArray(modelValue)) { + selectedSet = new HashMap([]); + var locals = {}; + for (var trackIndex = 0; trackIndex < modelValue.length; trackIndex++) { + locals[valueName] = modelValue[trackIndex]; + selectedSet.put(trackFn(scope, locals), modelValue[trackIndex]); + } + } else { + selectedSet = new HashMap(modelValue); + } + } + return selectedSet; + } + function render() { // Temporary location for the option groups before we render them @@ -21333,22 +21792,11 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) { groupIndex, index, locals = {}, selected, - selectedSet = false, // nothing is selected yet + selectedSet = getSelectedSet(), lastElement, element, label; - if (multiple) { - if (trackFn && isArray(modelValue)) { - selectedSet = new HashMap([]); - for (var trackIndex = 0; trackIndex < modelValue.length; trackIndex++) { - locals[valueName] = modelValue[trackIndex]; - selectedSet.put(trackFn(scope, locals), modelValue[trackIndex]); - } - } else { - selectedSet = new HashMap(modelValue); - } - } // We now build up the list of options we need (we merge later) for (index = 0; length = keys.length, index < length; index++) { @@ -21444,8 +21892,14 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) { lastElement.val(existingOption.id = option.id); } // lastElement.prop('selected') provided by jQuery has side-effects - if (existingOption.selected !== option.selected) { + if (lastElement[0].selected !== option.selected) { lastElement.prop('selected', (existingOption.selected = option.selected)); + if (msie) { + // See #7692 + // The selected item wouldn't visually update on IE without this. + // Tested on Win7: IE9, IE10 and IE11. Future IEs should be tested as well + lastElement.prop('selected', existingOption.selected); + } } } else { // grow elements @@ -21460,6 +21914,7 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) { // rather then the element. (element = optionTemplate.clone()) .val(option.id) + .prop('selected', option.selected) .attr('selected', option.selected) .text(option.label); } @@ -21566,4 +22021,4 @@ var styleDirective = valueFn({ })(window, document); -!window.angular.$$csp() && window.angular.element(document).find('head').prepend(''); \ No newline at end of file +!window.angular.$$csp() && window.angular.element(document).find('head').prepend(''); \ No newline at end of file diff --git a/bower_components/angular/angular.min.js b/bower_components/angular/angular.min.js new file mode 100644 index 000000000..508f59a99 --- /dev/null +++ b/bower_components/angular/angular.min.js @@ -0,0 +1,216 @@ +/* + AngularJS v1.2.25 + (c) 2010-2014 Google, Inc. http://angularjs.org + License: MIT +*/ +(function(W,X,t){'use strict';function D(b){return function(){var a=arguments[0],c,a="["+(b?b+":":"")+a+"] http://errors.angularjs.org/1.2.25/"+(b?b+"/":"")+a;for(c=1;c").append(b).html();try{return 3===b[0].nodeType?M(c):c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+M(b)})}catch(d){return M(c)}}function dc(b){try{return decodeURIComponent(b)}catch(a){}}function ec(b){var a={},c,d;r((b||"").split("&"),function(b){b&&(c=b.replace(/\+/g,"%20").split("="),d=dc(c[0]),z(d)&&(b=z(c[1])?dc(c[1]):!0,kb.call(a,d)?I(a[d])?a[d].push(b):a[d]=[a[d],b]:a[d]=b))});return a}function Cb(b){var a= +[];r(b,function(b,d){I(b)?r(b,function(b){a.push(Ca(d,!0)+(!0===b?"":"="+Ca(b,!0)))}):a.push(Ca(d,!0)+(!0===b?"":"="+Ca(b,!0)))});return a.length?a.join("&"):""}function lb(b){return Ca(b,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function Ca(b,a){return encodeURIComponent(b).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,a?"%20":"+")}function Xc(b,a){function c(a){a&&d.push(a)}var d=[b],e,f,g=["ng:app","ng-app","x-ng-app", +"data-ng-app"],k=/\sng[:\-]app(:\s*([\w\d_]+);?)?\s/;r(g,function(a){g[a]=!0;c(X.getElementById(a));a=a.replace(":","\\:");b.querySelectorAll&&(r(b.querySelectorAll("."+a),c),r(b.querySelectorAll("."+a+"\\:"),c),r(b.querySelectorAll("["+a+"]"),c))});r(d,function(a){if(!e){var b=k.exec(" "+a.className+" ");b?(e=a,f=(b[2]||"").replace(/\s+/g,",")):r(a.attributes,function(b){!e&&g[b.name]&&(e=a,f=b.value)})}});e&&a(e,f?[f]:[])}function fc(b,a){var c=function(){b=v(b);if(b.injector()){var c=b[0]===X? +"document":ia(b);throw Ta("btstrpd",c.replace(//,">"));}a=a||[];a.unshift(["$provide",function(a){a.value("$rootElement",b)}]);a.unshift("ng");c=gc(a);c.invoke(["$rootScope","$rootElement","$compile","$injector","$animate",function(a,b,c,d,e){a.$apply(function(){b.data("$injector",d);c(b)(a)})}]);return c},d=/^NG_DEFER_BOOTSTRAP!/;if(W&&!d.test(W.name))return c();W.name=W.name.replace(d,"");Va.resumeBootstrap=function(b){r(b,function(b){a.push(b)});c()}}function mb(b,a){a= +a||"_";return b.replace(Yc,function(b,d){return(d?a:"")+b.toLowerCase()})}function Db(b,a,c){if(!b)throw Ta("areq",a||"?",c||"required");return b}function Wa(b,a,c){c&&I(b)&&(b=b[b.length-1]);Db(P(b),a,"not a function, got "+(b&&"object"===typeof b?b.constructor.name||"Object":typeof b));return b}function Da(b,a){if("hasOwnProperty"===b)throw Ta("badname",a);}function hc(b,a,c){if(!a)return b;a=a.split(".");for(var d,e=b,f=a.length,g=0;g 
"+e[1]+a.replace(me,"<$1>")+e[2];d.removeChild(d.firstChild);for(a=e[0];a--;)d=d.lastChild;a=0;for(e=d.childNodes.length;a=Q?(c.preventDefault=null,c.stopPropagation=null,c.isDefaultPrevented=null):(delete c.preventDefault,delete c.stopPropagation,delete c.isDefaultPrevented)};c.elem=b;return c}function Ka(b,a){var c=typeof b,d;"function"==c||"object"==c&&null!==b?"function"==typeof(d= +b.$$hashKey)?d=b.$$hashKey():d===t&&(d=b.$$hashKey=(a||hb)()):d=b;return c+":"+d}function bb(b,a){if(a){var c=0;this.nextUid=function(){return++c}}r(b,this.put,this)}function sc(b){var a,c;"function"===typeof b?(a=b.$inject)||(a=[],b.length&&(c=b.toString().replace(pe,""),c=c.match(qe),r(c[1].split(re),function(b){b.replace(se,function(b,c,d){a.push(d)})})),b.$inject=a):I(b)?(c=b.length-1,Wa(b[c],"fn"),a=b.slice(0,c)):Wa(b,"fn",!0);return a}function gc(b){function a(a){return function(b,c){if(T(b))r(b, +$b(a));else return a(b,c)}}function c(a,b){Da(a,"service");if(P(b)||I(b))b=n.instantiate(b);if(!b.$get)throw cb("pget",a);return l[a+k]=b}function d(a,b){return c(a,{$get:b})}function e(a){var b=[],c,d,f,k;r(a,function(a){if(!h.get(a)){h.put(a,!0);try{if(A(a))for(c=Ya(a),b=b.concat(e(c.requires)).concat(c._runBlocks),d=c._invokeQueue,f=0,k=d.length;f 4096 bytes)!"));else{if(m.cookie!== +da)for(da=m.cookie,d=da.split("; "),O={},f=0;fh&&this.remove(p.key),b},get:function(a){if(h").parent()[0])});var f=K(a,b,a,c,d,e);ca(a,"ng-scope");return function(b,c,d,e){Db(b,"scope");var g=c?La.clone.call(a):a;r(d,function(a,b){g.data("$"+b+"Controller",a)});d=0;for(var m=g.length;darguments.length&& +(b=a,a=t);M&&(c=da);return p(a,b,c)}var u,L,w,O,x,C,da={},rb;u=c===f?d:ha(d,new Ob(v(f),d.$attr));L=u.$$element;if(K){var Na=/^\s*([@=&])(\??)\s*(\w*)\s*$/;C=e.$new(!0);!H||H!==K&&H!==K.$$originalDirective?L.data("$isolateScopeNoTemplate",C):L.data("$isolateScope",C);ca(L,"ng-isolate-scope");r(K.scope,function(a,c){var d=a.match(Na)||[],f=d[3]||c,g="?"==d[2],d=d[1],m,l,n,p;C.$$isolateBindings[c]=d+f;switch(d){case "@":u.$observe(f,function(a){C[c]=a});u.$$observers[f].$$scope=e;u[f]&&(C[c]=b(u[f])(e)); +break;case "=":if(g&&!u[f])break;l=q(u[f]);p=l.literal?Aa:function(a,b){return a===b||a!==a&&b!==b};n=l.assign||function(){m=C[c]=l(e);throw ja("nonassign",u[f],K.name);};m=C[c]=l(e);C.$watch(function(){var a=l(e);p(a,C[c])||(p(a,m)?n(e,a=C[c]):C[c]=a);return m=a},null,l.literal);break;case "&":l=q(u[f]);C[c]=function(a){return l(e,a)};break;default:throw ja("iscp",K.name,c,a);}})}rb=p&&E;R&&r(R,function(a){var b={$scope:a===K||a.$$isolateScope?C:e,$element:L,$attrs:u,$transclude:rb},c;x=a.controller; +"@"==x&&(x=u[a.name]);c=s(x,b);da[a.name]=c;M||L.data("$"+a.name+"Controller",c);a.controllerAs&&(b.$scope[a.controllerAs]=c)});g=0;for(w=m.length;gG.priority)break;if(V=G.scope)O=O||G,G.templateUrl||(db("new/isolated scope",K,G,Z),T(V)&&(K=G));D=G.name;!G.templateUrl&&G.controller&&(V=G.controller,R=R||{},db("'"+D+"' controller",R[D],G,Z),R[D]=G);if(V=G.transclude)y=!0,G.$$tlb|| +(db("transclusion",fa,G,Z),fa=G),"element"==V?(M=!0,u=G.priority,V=Z,Z=d.$$element=v(X.createComment(" "+D+": "+d[D]+" ")),c=Z[0],Na(f,Ba.call(V,0),c),S=w(V,e,u,g&&g.name,{nonTlbTranscludeDirective:fa})):(V=v(Kb(c)).contents(),Z.empty(),S=w(V,e));if(G.template)if(J=!0,db("template",H,G,Z),H=G,V=P(G.template)?G.template(Z,d):G.template,V=W(V),G.replace){g=G;V=Ib.test(V)?v(aa(V)):[];c=V[0];if(1!=V.length||1!==c.nodeType)throw ja("tplrt",D,"");Na(f,Z,c);qa={$attr:{}};V=da(c,[],qa);var $=a.splice(Fa+ +1,a.length-(Fa+1));K&&z(V);a=a.concat(V).concat($);F(d,qa);qa=a.length}else Z.html(V);if(G.templateUrl)J=!0,db("template",H,G,Z),H=G,G.replace&&(g=G),N=ue(a.splice(Fa,a.length-Fa),Z,d,f,y&&S,m,n,{controllerDirectives:R,newIsolateScopeDirective:K,templateDirective:H,nonTlbTranscludeDirective:fa}),qa=a.length;else if(G.compile)try{Q=G.compile(Z,d,S),P(Q)?E(null,Q,U,Y):Q&&E(Q.pre,Q.post,U,Y)}catch(ve){l(ve,ia(Z))}G.terminal&&(N.terminal=!0,u=Math.max(u,G.priority))}N.scope=O&&!0===O.scope;N.transcludeOnThisElement= +y;N.templateOnThisElement=J;N.transclude=S;p.hasElementTranscludeDirective=M;return N}function z(a){for(var b=0,c=a.length;bp.priority)&&-1!=p.restrict.indexOf(f)&&(q&&(p=bc(p,{$$start:q,$$end:n})),b.push(p),h=p)}catch(E){l(E)}}return h}function F(a,b){var c=b.$attr,d=a.$attr,e=a.$$element;r(a,function(d,e){"$"!= +e.charAt(0)&&(b[e]&&b[e]!==d&&(d+=("style"===e?";":" ")+b[e]),a.$set(e,d,!0,c[e]))});r(b,function(b,f){"class"==f?(ca(e,b),a["class"]=(a["class"]?a["class"]+" ":"")+b):"style"==f?(e.attr("style",e.attr("style")+";"+b),a.style=(a.style?a.style+";":"")+b):"$"==f.charAt(0)||a.hasOwnProperty(f)||(a[f]=b,d[f]=c[f])})}function ue(a,b,c,d,e,f,g,h){var m=[],l,q,s=b[0],u=a.shift(),E=J({},u,{templateUrl:null,transclude:null,replace:null,$$originalDirective:u}),N=P(u.templateUrl)?u.templateUrl(b,c):u.templateUrl; +b.empty();n.get(B.getTrustedResourceUrl(N),{cache:p}).success(function(n){var p,B;n=W(n);if(u.replace){n=Ib.test(n)?v(aa(n)):[];p=n[0];if(1!=n.length||1!==p.nodeType)throw ja("tplrt",u.name,N);n={$attr:{}};Na(d,b,p);var w=da(p,[],n);T(u.scope)&&z(w);a=w.concat(a);F(c,n)}else p=s,b.html(n);a.unshift(E);l=H(a,p,c,e,b,u,f,g,h);r(d,function(a,c){a==p&&(d[c]=b[0])});for(q=K(b[0].childNodes,e);m.length;){n=m.shift();B=m.shift();var R=m.shift(),x=m.shift(),w=b[0];if(B!==s){var C=B.className;h.hasElementTranscludeDirective&& +u.replace||(w=Kb(p));Na(R,v(B),w);ca(v(w),C)}B=l.transcludeOnThisElement?O(n,l.transclude,x):x;l(q,n,w,d,B)}m=null}).error(function(a,b,c,d){throw ja("tpload",d.url);});return function(a,b,c,d,e){a=e;m?(m.push(b),m.push(c),m.push(d),m.push(a)):(l.transcludeOnThisElement&&(a=O(b,l.transclude,e)),l(q,b,c,d,a))}}function y(a,b){var c=b.priority-a.priority;return 0!==c?c:a.name!==b.name?a.namea.status?d:n.reject(d)}var c={method:"get",transformRequest:e.transformRequest,transformResponse:e.transformResponse},d=function(a){var b=e.headers,c=J({},a.headers),d,f,b=J({},b.common,b[M(a.method)]); +a:for(d in b){a=M(d);for(f in c)if(M(f)===a)continue a;c[d]=b[d]}(function(a){var b;r(a,function(c,d){P(c)&&(b=c(),null!=b?a[d]=b:delete a[d])})})(c);return c}(a);J(c,a);c.headers=d;c.method=Ia(c.method);var f=[function(a){d=a.headers;var c=xc(a.data,wc(d),a.transformRequest);y(c)&&r(d,function(a,b){"content-type"===M(b)&&delete d[b]});y(a.withCredentials)&&!y(e.withCredentials)&&(a.withCredentials=e.withCredentials);return s(a,c,d).then(b,b)},t],g=n.when(c);for(r(B,function(a){(a.request||a.requestError)&& +f.unshift(a.request,a.requestError);(a.response||a.responseError)&&f.push(a.response,a.responseError)});f.length;){a=f.shift();var m=f.shift(),g=g.then(a,m)}g.success=function(a){g.then(function(b){a(b.data,b.status,b.headers,c)});return g};g.error=function(a){g.then(null,function(b){a(b.data,b.status,b.headers,c)});return g};return g}function s(c,f,g){function h(a,b,c,e){x&&(200<=a&&300>a?x.put(v,[a,b,vc(c),e]):x.remove(v));p(b,a,c,e);d.$$phase||d.$apply()}function p(a,b,d,e){b=Math.max(b,0);(200<= +b&&300>b?B.resolve:B.reject)({data:a,status:b,headers:wc(d),config:c,statusText:e})}function s(){var a=Ra(q.pendingRequests,c);-1!==a&&q.pendingRequests.splice(a,1)}var B=n.defer(),r=B.promise,x,H,v=E(c.url,c.params);q.pendingRequests.push(c);r.then(s,s);!c.cache&&!e.cache||(!1===c.cache||"GET"!==c.method&&"JSONP"!==c.method)||(x=T(c.cache)?c.cache:T(e.cache)?e.cache:u);if(x)if(H=x.get(v),z(H)){if(H&&P(H.then))return H.then(s,s),H;I(H)?p(H[1],H[0],ha(H[2]),H[3]):p(H,200,{},"OK")}else x.put(v,r);y(H)&& +((H=Pb(c.url)?b.cookies()[c.xsrfCookieName||e.xsrfCookieName]:t)&&(g[c.xsrfHeaderName||e.xsrfHeaderName]=H),a(c.method,v,f,h,g,c.timeout,c.withCredentials,c.responseType));return r}function E(a,b){if(!b)return a;var c=[];Tc(b,function(a,b){null===a||y(a)||(I(a)||(a=[a]),r(a,function(a){T(a)&&(a=ta(a)?a.toISOString():na(a));c.push(Ca(b)+"="+Ca(a))}))});0=Q&&(!b.match(/^(get|post|head|put|delete|options)$/i)|| +!W.XMLHttpRequest))return new W.ActiveXObject("Microsoft.XMLHTTP");if(W.XMLHttpRequest)return new W.XMLHttpRequest;throw D("$httpBackend")("noxhr");}function Vd(){this.$get=["$browser","$window","$document",function(b,a,c){return ye(b,xe,b.defer,a.angular.callbacks,c[0])}]}function ye(b,a,c,d,e){function f(a,b,c){var f=e.createElement("script"),g=null;f.type="text/javascript";f.src=a;f.async=!0;g=function(a){$a(f,"load",g);$a(f,"error",g);e.body.removeChild(f);f=null;var k=-1,s="unknown";a&&("load"!== +a.type||d[b].called||(a={type:"error"}),s=a.type,k="error"===a.type?404:200);c&&c(k,s)};sb(f,"load",g);sb(f,"error",g);8>=Q&&(f.onreadystatechange=function(){A(f.readyState)&&/loaded|complete/.test(f.readyState)&&(f.onreadystatechange=null,g({type:"load"}))});e.body.appendChild(f);return g}var g=-1;return function(e,m,h,l,n,p,q,s){function E(){B=g;R&&R();w&&w.abort()}function u(a,d,e,f,g){K&&c.cancel(K);R=w=null;0===d&&(d=e?200:"file"==ua(m).protocol?404:0);a(1223===d?204:d,e,f,g||"");b.$$completeOutstandingRequest(F)} +var B;b.$$incOutstandingRequestCount();m=m||b.url();if("jsonp"==M(e)){var N="_"+(d.counter++).toString(36);d[N]=function(a){d[N].data=a;d[N].called=!0};var R=f(m.replace("JSON_CALLBACK","angular.callbacks."+N),N,function(a,b){u(l,a,d[N].data,"",b);d[N]=F})}else{var w=a(e);w.open(e,m,!0);r(n,function(a,b){z(a)&&w.setRequestHeader(b,a)});w.onreadystatechange=function(){if(w&&4==w.readyState){var a=null,b=null,c="";B!==g&&(a=w.getAllResponseHeaders(),b="response"in w?w.response:w.responseText);B===g&& +10>Q||(c=w.statusText);u(l,B||w.status,b,a,c)}};q&&(w.withCredentials=!0);if(s)try{w.responseType=s}catch(ca){if("json"!==s)throw ca;}w.send(h||null)}if(0=k&&(n.resolve(q),l(p.$$intervalId),delete e[p.$$intervalId]);s||b.$apply()},g);e[p.$$intervalId]=n;return p}var e={};d.cancel= +function(b){return b&&b.$$intervalId in e?(e[b.$$intervalId].reject("canceled"),a.clearInterval(b.$$intervalId),delete e[b.$$intervalId],!0):!1};return d}]}function bd(){this.$get=function(){return{id:"en-us",NUMBER_FORMATS:{DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{minInt:1,minFrac:0,maxFrac:3,posPre:"",posSuf:"",negPre:"-",negSuf:"",gSize:3,lgSize:3},{minInt:1,minFrac:2,maxFrac:2,posPre:"\u00a4",posSuf:"",negPre:"(\u00a4",negSuf:")",gSize:3,lgSize:3}],CURRENCY_SYM:"$"},DATETIME_FORMATS:{MONTH:"January February March April May June July August September October November December".split(" "), +SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),AMPMS:["AM","PM"],medium:"MMM d, y h:mm:ss a","short":"M/d/yy h:mm a",fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",mediumDate:"MMM d, y",shortDate:"M/d/yy",mediumTime:"h:mm:ss a",shortTime:"h:mm a"},pluralCat:function(b){return 1===b?"one":"other"}}}}function Qb(b){b=b.split("/");for(var a=b.length;a--;)b[a]= +lb(b[a]);return b.join("/")}function zc(b,a,c){b=ua(b,c);a.$$protocol=b.protocol;a.$$host=b.hostname;a.$$port=U(b.port)||ze[b.protocol]||null}function Ac(b,a,c){var d="/"!==b.charAt(0);d&&(b="/"+b);b=ua(b,c);a.$$path=decodeURIComponent(d&&"/"===b.pathname.charAt(0)?b.pathname.substring(1):b.pathname);a.$$search=ec(b.search);a.$$hash=decodeURIComponent(b.hash);a.$$path&&"/"!=a.$$path.charAt(0)&&(a.$$path="/"+a.$$path)}function ra(b,a){if(0===a.indexOf(b))return a.substr(b.length)}function eb(b){var a= +b.indexOf("#");return-1==a?b:b.substr(0,a)}function Rb(b){return b.substr(0,eb(b).lastIndexOf("/")+1)}function Bc(b,a){this.$$html5=!0;a=a||"";var c=Rb(b);zc(b,this,b);this.$$parse=function(a){var e=ra(c,a);if(!A(e))throw Sb("ipthprfx",a,c);Ac(e,this,b);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=Cb(this.$$search),b=this.$$hash?"#"+lb(this.$$hash):"";this.$$url=Qb(this.$$path)+(a?"?"+a:"")+b;this.$$absUrl=c+this.$$url.substr(1)};this.$$rewrite=function(d){var e; +if((e=ra(b,d))!==t)return d=e,(e=ra(a,e))!==t?c+(ra("/",e)||e):b+d;if((e=ra(c,d))!==t)return c+e;if(c==d+"/")return c}}function Tb(b,a){var c=Rb(b);zc(b,this,b);this.$$parse=function(d){var e=ra(b,d)||ra(c,d),e="#"==e.charAt(0)?ra(a,e):this.$$html5?e:"";if(!A(e))throw Sb("ihshprfx",d,a);Ac(e,this,b);d=this.$$path;var f=/^\/[A-Z]:(\/.*)/;0===e.indexOf(b)&&(e=e.replace(b,""));f.exec(e)||(d=(e=f.exec(d))?e[1]:d);this.$$path=d;this.$$compose()};this.$$compose=function(){var c=Cb(this.$$search),e=this.$$hash? +"#"+lb(this.$$hash):"";this.$$url=Qb(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+(this.$$url?a+this.$$url:"")};this.$$rewrite=function(a){if(eb(b)==eb(a))return a}}function Ub(b,a){this.$$html5=!0;Tb.apply(this,arguments);var c=Rb(b);this.$$rewrite=function(d){var e;if(b==eb(d))return d;if(e=ra(c,d))return b+a+e;if(c===d+"/")return c};this.$$compose=function(){var c=Cb(this.$$search),e=this.$$hash?"#"+lb(this.$$hash):"";this.$$url=Qb(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+a+this.$$url}}function tb(b){return function(){return this[b]}} +function Cc(b,a){return function(c){if(y(c))return this[b];this[b]=a(c);this.$$compose();return this}}function Wd(){var b="",a=!1;this.hashPrefix=function(a){return z(a)?(b=a,this):b};this.html5Mode=function(b){return z(b)?(a=b,this):a};this.$get=["$rootScope","$browser","$sniffer","$rootElement",function(c,d,e,f){function g(a){c.$broadcast("$locationChangeSuccess",k.absUrl(),a)}var k,m,h=d.baseHref(),l=d.url(),n;a?(n=l.substring(0,l.indexOf("/",l.indexOf("//")+2))+(h||"/"),m=e.history?Bc:Ub):(n= +eb(l),m=Tb);k=new m(n,"#"+b);k.$$parse(k.$$rewrite(l));var p=/^\s*(javascript|mailto):/i;f.on("click",function(a){if(!a.ctrlKey&&!a.metaKey&&2!=a.which){for(var e=v(a.target);"a"!==M(e[0].nodeName);)if(e[0]===f[0]||!(e=e.parent())[0])return;var g=e.prop("href");T(g)&&"[object SVGAnimatedString]"===g.toString()&&(g=ua(g.animVal).href);if(!p.test(g)){if(m===Ub){var h=e.attr("href")||e.attr("xlink:href");if(h&&0>h.indexOf("://"))if(g="#"+b,"/"==h[0])g=n+g+h;else if("#"==h[0])g=n+g+(k.path()||"/")+h; +else{var l=k.path().split("/"),h=h.split("/");2!==l.length||l[1]||(l.length=1);for(var q=0;qe?Dc(d[0],d[1],d[2],d[3],d[4],c,a):function(b,f){var g=0,k;do k=Dc(d[g++],d[g++],d[g++],d[g++],d[g++],c,a)(b,f),f=t,b=k;while(ga)for(b in h++,e)e.hasOwnProperty(b)&&!d.hasOwnProperty(b)&&(r--,delete e[b])}else e!==d&&(e=d,h++);return h},function(){n?(n=!1,b(d,d,c)):b(d,g,c);if(k)if(T(d))if(Pa(d)){g=Array(d.length);for(var a=0;at&&(v=4-t,O[v]||(O[v]=[]),C=P(d.exp)?"fn: "+(d.exp.name||d.exp.toString()): +d.exp,C+="; newVal: "+na(f)+"; oldVal: "+na(k),O[v].push(C));else if(d===c){w=!1;break a}}catch(z){p.$$phase=null,e(z)}if(!(h=K.$$childHead||K!==this&&K.$$nextSibling))for(;K!==this&&!(h=K.$$nextSibling);)K=K.$parent}while(K=h);if((w||l.length)&&!t--)throw p.$$phase=null,a("infdig",b,na(O));}while(w||l.length);for(p.$$phase=null;r.length;)try{r.shift()()}catch(A){e(A)}},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;this!==p&&(r(this.$$listenerCount, +Bb(null,l,this)),a.$$childHead==this&&(a.$$childHead=this.$$nextSibling),a.$$childTail==this&&(a.$$childTail=this.$$prevSibling),this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling),this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling),this.$parent=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=this.$root=null,this.$$listeners={},this.$$watchers=this.$$asyncQueue=this.$$postDigestQueue=[],this.$destroy=this.$digest=this.$apply=F,this.$on= +this.$watch=function(){return F})}},$eval:function(a,b){return f(a)(this,b)},$evalAsync:function(a){p.$$phase||p.$$asyncQueue.length||g.defer(function(){p.$$asyncQueue.length&&p.$digest()});this.$$asyncQueue.push({scope:this,expression:a})},$$postDigest:function(a){this.$$postDigestQueue.push(a)},$apply:function(a){try{return m("$apply"),this.$eval(a)}catch(b){e(b)}finally{p.$$phase=null;try{p.$digest()}catch(c){throw e(c),c;}}},$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]= +c=[]);c.push(b);var d=this;do d.$$listenerCount[a]||(d.$$listenerCount[a]=0),d.$$listenerCount[a]++;while(d=d.$parent);var e=this;return function(){c[Ra(c,b)]=null;l(e,1,a)}},$emit:function(a,b){var c=[],d,f=this,g=!1,k={name:a,targetScope:f,stopPropagation:function(){g=!0},preventDefault:function(){k.defaultPrevented=!0},defaultPrevented:!1},h=[k].concat(Ba.call(arguments,1)),l,m;do{d=f.$$listeners[a]||c;k.currentScope=f;l=0;for(m=d.length;lc.msieDocumentMode)throw xa("iequirks");var e=ha(ga);e.isEnabled=function(){return b};e.trustAs=d.trustAs;e.getTrusted=d.getTrusted;e.valueOf=d.valueOf;b||(e.trustAs=e.getTrusted=function(a,b){return b}, +e.valueOf=Qa);e.parseAs=function(b,c){var d=a(c);return d.literal&&d.constant?d:function(a,c){return e.getTrusted(b,d(a,c))}};var f=e.parseAs,g=e.getTrusted,k=e.trustAs;r(ga,function(a,b){var c=M(b);e[Za("parse_as_"+c)]=function(b){return f(a,b)};e[Za("get_trusted_"+c)]=function(b){return g(a,b)};e[Za("trust_as_"+c)]=function(b){return k(a,b)}});return e}]}function ce(){this.$get=["$window","$document",function(b,a){var c={},d=U((/android (\d+)/.exec(M((b.navigator||{}).userAgent))||[])[1]),e=/Boxee/i.test((b.navigator|| +{}).userAgent),f=a[0]||{},g=f.documentMode,k,m=/^(Moz|webkit|O|ms)(?=[A-Z])/,h=f.body&&f.body.style,l=!1,n=!1;if(h){for(var p in h)if(l=m.exec(p)){k=l[0];k=k.substr(0,1).toUpperCase()+k.substr(1);break}k||(k="WebkitOpacity"in h&&"webkit");l=!!("transition"in h||k+"Transition"in h);n=!!("animation"in h||k+"Animation"in h);!d||l&&n||(l=A(f.body.style.webkitTransition),n=A(f.body.style.webkitAnimation))}return{history:!(!b.history||!b.history.pushState||4>d||e),hashchange:"onhashchange"in b&&(!g||7< +g),hasEvent:function(a){if("input"==a&&9==Q)return!1;if(y(c[a])){var b=f.createElement("div");c[a]="on"+a in b}return c[a]},csp:Xa(),vendorPrefix:k,transitions:l,animations:n,android:d,msie:Q,msieDocumentMode:g}}]}function ee(){this.$get=["$rootScope","$browser","$q","$exceptionHandler",function(b,a,c,d){function e(e,k,m){var h=c.defer(),l=h.promise,n=z(m)&&!m;k=a.defer(function(){try{h.resolve(e())}catch(a){h.reject(a),d(a)}finally{delete f[l.$$timeoutId]}n||b.$apply()},k);l.$$timeoutId=k;f[k]=h; +return l}var f={};e.cancel=function(b){return b&&b.$$timeoutId in f?(f[b.$$timeoutId].reject("canceled"),delete f[b.$$timeoutId],a.defer.cancel(b.$$timeoutId)):!1};return e}]}function ua(b,a){var c=b;Q&&(Y.setAttribute("href",c),c=Y.href);Y.setAttribute("href",c);return{href:Y.href,protocol:Y.protocol?Y.protocol.replace(/:$/,""):"",host:Y.host,search:Y.search?Y.search.replace(/^\?/,""):"",hash:Y.hash?Y.hash.replace(/^#/,""):"",hostname:Y.hostname,port:Y.port,pathname:"/"===Y.pathname.charAt(0)?Y.pathname: +"/"+Y.pathname}}function Pb(b){b=A(b)?ua(b):b;return b.protocol===Hc.protocol&&b.host===Hc.host}function fe(){this.$get=ba(W)}function mc(b){function a(d,e){if(T(d)){var f={};r(d,function(b,c){f[c]=a(c,b)});return f}return b.factory(d+c,e)}var c="Filter";this.register=a;this.$get=["$injector",function(a){return function(b){return a.get(b+c)}}];a("currency",Ic);a("date",Jc);a("filter",Ce);a("json",De);a("limitTo",Ee);a("lowercase",Fe);a("number",Kc);a("orderBy",Lc);a("uppercase",Ge)}function Ce(){return function(b, +a,c){if(!I(b))return b;var d=typeof c,e=[];e.check=function(a){for(var b=0;bb;b=Math.abs(b);var g=b+"",k="",m=[],h=!1;if(-1!==g.indexOf("e")){var l=g.match(/([\d\.]+)e(-?)(\d+)/);l&&"-"==l[2]&& +l[3]>e+1?(g="0",b=0):(k=g,h=!0)}if(h)0b)&&(k=b.toFixed(e));else{g=(g.split(Nc)[1]||"").length;y(e)&&(e=Math.min(Math.max(a.minFrac,g),a.maxFrac));b=+(Math.round(+(b.toString()+"e"+e)).toString()+"e"+-e);0===b&&(f=!1);b=(""+b).split(Nc);g=b[0];b=b[1]||"";var l=0,n=a.lgSize,p=a.gSize;if(g.length>=n+p)for(l=g.length-n,h=0;hb&&(d="-",b=-b);for(b=""+b;b.length-c)e+=c;0===e&&-12==c&&(e=12);return Xb(e,a,d)}}function vb(b,a){return function(c,d){var e=c["get"+b](),f=Ia(a?"SHORT"+b:b);return d[f][e]}}function Jc(b){function a(a){var b;if(b=a.match(c)){a=new Date(0);var f=0,g=0,k=b[8]? +a.setUTCFullYear:a.setFullYear,m=b[8]?a.setUTCHours:a.setHours;b[9]&&(f=U(b[9]+b[10]),g=U(b[9]+b[11]));k.call(a,U(b[1]),U(b[2])-1,U(b[3]));f=U(b[4]||0)-f;g=U(b[5]||0)-g;k=U(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));m.call(a,f,g,k,b)}return a}var c=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(c,e){var f="",g=[],k,m;e=e||"mediumDate";e=b.DATETIME_FORMATS[e]||e;A(c)&&(c=He.test(c)?U(c):a(c));ib(c)&&(c=new Date(c)); +if(!ta(c))return c;for(;e;)(m=Ie.exec(e))?(g=g.concat(Ba.call(m,1)),e=g.pop()):(g.push(e),e=null);r(g,function(a){k=Je[a];f+=k?k(c,b.DATETIME_FORMATS):a.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return f}}function De(){return function(b){return na(b,!0)}}function Ee(){return function(b,a){if(!I(b)&&!A(b))return b;a=Infinity===Math.abs(Number(a))?Number(a):U(a);if(A(b))return a?0<=a?b.slice(0,a):b.slice(a,b.length):"";var c=[],d,e;a>b.length?a=b.length:a<-b.length&&(a=-b.length);0a||37<=a&&40>=a)||q()});if(e.hasEvent("paste"))a.on("paste cut",q)}a.on("change",n);d.$render=function(){a.val(d.$isEmpty(d.$viewValue)?"":d.$viewValue)};var s=c.ngPattern;s&&((e=s.match(/^\/(.*)\/([gim]*)$/))?(s=RegExp(e[1],e[2]),e=function(a){return sa(d, +"pattern",d.$isEmpty(a)||s.test(a),a)}):e=function(c){var e=b.$eval(s);if(!e||!e.test)throw D("ngPattern")("noregexp",s,e,ia(a));return sa(d,"pattern",d.$isEmpty(c)||e.test(c),c)},d.$formatters.push(e),d.$parsers.push(e));if(c.ngMinlength){var r=U(c.ngMinlength);e=function(a){return sa(d,"minlength",d.$isEmpty(a)||a.length>=r,a)};d.$parsers.push(e);d.$formatters.push(e)}if(c.ngMaxlength){var u=U(c.ngMaxlength);e=function(a){return sa(d,"maxlength",d.$isEmpty(a)||a.length<=u,a)};d.$parsers.push(e); +d.$formatters.push(e)}}function Yb(b,a){b="ngClass"+b;return["$animate",function(c){function d(a,b){var c=[],d=0;a:for(;dQ?function(b){b=b.nodeName?b:b[0];return b.scopeName&&"HTML"!=b.scopeName?Ia(b.scopeName+":"+b.nodeName):b.nodeName}:function(b){return b.nodeName?b.nodeName:b[0].nodeName};var Xa=function(){if(z(Xa.isActive_))return Xa.isActive_;var b=!(!X.querySelector("[ng-csp]")&&!X.querySelector("[data-ng-csp]")); +if(!b)try{new Function("")}catch(a){b=!0}return Xa.isActive_=b},Yc=/[A-Z]/g,ad={full:"1.2.25",major:1,minor:2,dot:25,codeName:"hypnotic-gesticulation"};S.expando="ng339";var ab=S.cache={},ne=1,sb=W.document.addEventListener?function(b,a,c){b.addEventListener(a,c,!1)}:function(b,a,c){b.attachEvent("on"+a,c)},$a=W.document.removeEventListener?function(b,a,c){b.removeEventListener(a,c,!1)}:function(b,a,c){b.detachEvent("on"+a,c)};S._data=function(b){return this.cache[b[this.expando]]||{}};var ie=/([\:\-\_]+(.))/g, +je=/^moz([A-Z])/,Hb=D("jqLite"),ke=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,Ib=/<|&#?\w+;/,le=/<([\w:]+)/,me=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ea={option:[1,'"],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ea.optgroup=ea.option;ea.tbody=ea.tfoot=ea.colgroup=ea.caption=ea.thead;ea.th= +ea.td;var La=S.prototype={ready:function(b){function a(){c||(c=!0,b())}var c=!1;"complete"===X.readyState?setTimeout(a):(this.on("DOMContentLoaded",a),S(W).on("load",a))},toString:function(){var b=[];r(this,function(a){b.push(""+a)});return"["+b.join(", ")+"]"},eq:function(b){return 0<=b?v(this[b]):v(this[this.length+b])},length:0,push:Me,sort:[].sort,splice:[].splice},qb={};r("multiple selected checked disabled readOnly required open".split(" "),function(b){qb[M(b)]=b});var rc={};r("input select option textarea button form details".split(" "), +function(b){rc[Ia(b)]=!0});r({data:Mb,removeData:Lb},function(b,a){S[a]=b});r({data:Mb,inheritedData:pb,scope:function(b){return v.data(b,"$scope")||pb(b.parentNode||b,["$isolateScope","$scope"])},isolateScope:function(b){return v.data(b,"$isolateScope")||v.data(b,"$isolateScopeNoTemplate")},controller:oc,injector:function(b){return pb(b,"$injector")},removeAttr:function(b,a){b.removeAttribute(a)},hasClass:Nb,css:function(b,a,c){a=Za(a);if(z(c))b.style[a]=c;else{var d;8>=Q&&(d=b.currentStyle&&b.currentStyle[a], +""===d&&(d="auto"));d=d||b.style[a];8>=Q&&(d=""===d?t:d);return d}},attr:function(b,a,c){var d=M(a);if(qb[d])if(z(c))c?(b[a]=!0,b.setAttribute(a,d)):(b[a]=!1,b.removeAttribute(d));else return b[a]||(b.attributes.getNamedItem(a)||F).specified?d:t;else if(z(c))b.setAttribute(a,c);else if(b.getAttribute)return b=b.getAttribute(a,2),null===b?t:b},prop:function(b,a,c){if(z(c))b[a]=c;else return b[a]},text:function(){function b(b,d){var e=a[b.nodeType];if(y(d))return e?b[e]:"";b[e]=d}var a=[];9>Q?(a[1]= +"innerText",a[3]="nodeValue"):a[1]=a[3]="textContent";b.$dv="";return b}(),val:function(b,a){if(y(a)){if("SELECT"===Ma(b)&&b.multiple){var c=[];r(b.options,function(a){a.selected&&c.push(a.value||a.text)});return 0===c.length?null:c}return b.value}b.value=a},html:function(b,a){if(y(a))return b.innerHTML;for(var c=0,d=b.childNodes;c":function(a,c,d,e){return d(a,c)>e(a,c)},"<=":function(a,c,d,e){return d(a,c)<=e(a,c)},">=":function(a,c,d,e){return d(a,c)>=e(a,c)},"&&":function(a,c,d,e){return d(a,c)&&e(a,c)},"||":function(a,c,d,e){return d(a,c)||e(a,c)},"&":function(a,c,d,e){return d(a,c)&e(a,c)},"|":function(a,c,d,e){return e(a,c)(a,c,d(a,c))},"!":function(a,c,d){return!d(a,c)}},Re={n:"\n",f:"\f",r:"\r", +t:"\t",v:"\v","'":"'",'"':'"'},Wb=function(a){this.options=a};Wb.prototype={constructor:Wb,lex:function(a){this.text=a;this.index=0;this.ch=t;this.lastCh=":";for(this.tokens=[];this.index=a},isWhitespace:function(a){return" "===a||"\r"===a||"\t"===a||"\n"===a||"\v"===a||"\u00a0"===a},isIdent:function(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,c,d){d=d||this.index;c=z(c)?"s "+c+"-"+this.index+" ["+ +this.text.substring(c,d)+"]":" "+d;throw la("lexerr",a,c,this.text);},readNumber:function(){for(var a="",c=this.index;this.index","<=",">="))a=this.binaryFn(a,c.fn,this.relational());return a},additive:function(){for(var a=this.multiplicative(),c;c=this.expect("+","-");)a=this.binaryFn(a,c.fn,this.multiplicative());return a},multiplicative:function(){for(var a=this.unary(),c;c=this.expect("*","/","%");)a=this.binaryFn(a,c.fn,this.unary());return a},unary:function(){var a;return this.expect("+")?this.primary():(a=this.expect("-"))?this.binaryFn(fb.ZERO,a.fn, +this.unary()):(a=this.expect("!"))?this.unaryFn(a.fn,this.unary()):this.primary()},fieldAccess:function(a){var c=this,d=this.expect().text,e=Ec(d,this.options,this.text);return J(function(c,d,k){return e(k||a(c,d))},{assign:function(e,g,k){(k=a(e,k))||a.assign(e,k={});return ub(k,d,g,c.text,c.options)}})},objectIndex:function(a){var c=this,d=this.expression();this.consume("]");return J(function(e,f){var g=a(e,f),k=d(e,f),m;ka(k,c.text);if(!g)return t;(g=va(g[k],c.text))&&(g.then&&c.options.unwrapPromises)&& +(m=g,"$$v"in g||(m.$$v=t,m.then(function(a){m.$$v=a})),g=g.$$v);return g},{assign:function(e,f,g){var k=ka(d(e,g),c.text);(g=va(a(e,g),c.text))||a.assign(e,g={});return g[k]=f}})},functionCall:function(a,c){var d=[];if(")"!==this.peekToken().text){do d.push(this.expression());while(this.expect(","))}this.consume(")");var e=this;return function(f,g){for(var k=[],m=c?c(f,g):f,h=0;ha.getHours()?c.AMPMS[0]:c.AMPMS[1]},Z:function(a){a=-1*a.getTimezoneOffset();return a=(0<=a?"+":"")+(Xb(Math[0< +a?"floor":"ceil"](a/60),2)+Xb(Math.abs(a%60),2))}},Ie=/((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z))(.*)/,He=/^\-?\d+$/;Jc.$inject=["$locale"];var Fe=ba(M),Ge=ba(Ia);Lc.$inject=["$parse"];var dd=ba({restrict:"E",compile:function(a,c){8>=Q&&(c.href||c.name||c.$set("href",""),a.append(X.createComment("IE fix")));if(!c.href&&!c.xlinkHref&&!c.name)return function(a,c){var f="[object SVGAnimatedString]"===za.call(c.prop("href"))?"xlink:href":"href";c.on("click",function(a){c.attr(f)|| +a.preventDefault()})}}}),Fb={};r(qb,function(a,c){if("multiple"!=a){var d=pa("ng-"+c);Fb[d]=function(){return{priority:100,link:function(a,f,g){a.$watch(g[d],function(a){g.$set(c,!!a)})}}}}});r(["src","srcset","href"],function(a){var c=pa("ng-"+a);Fb[c]=function(){return{priority:99,link:function(d,e,f){var g=a,k=a;"href"===a&&"[object SVGAnimatedString]"===za.call(e.prop("href"))&&(k="xlinkHref",f.$attr[k]="xlink:href",g=null);f.$observe(c,function(c){c?(f.$set(k,c),Q&&g&&e.prop(g,f[k])):"href"=== +a&&f.$set(k,null)})}}}});var yb={$addControl:F,$removeControl:F,$setValidity:F,$setDirty:F,$setPristine:F};Oc.$inject=["$element","$attrs","$scope","$animate"];var Rc=function(a){return["$timeout",function(c){return{name:"form",restrict:a?"EAC":"E",controller:Oc,compile:function(){return{pre:function(a,e,f,g){if(!f.action){var k=function(a){a.preventDefault?a.preventDefault():a.returnValue=!1};sb(e[0],"submit",k);e.on("$destroy",function(){c(function(){$a(e[0],"submit",k)},0,!1)})}var m=e.parent().controller("form"), +h=f.name||f.ngForm;h&&ub(a,h,g,h);if(m)e.on("$destroy",function(){m.$removeControl(g);h&&ub(a,h,t,h);J(g,yb)})}}}}}]},ed=Rc(),rd=Rc(!0),Se=/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,Te=/^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,Ue=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/,Sc={text:Ab,number:function(a,c,d,e,f,g){Ab(a,c,d,e,f,g);e.$parsers.push(function(a){var c=e.$isEmpty(a);if(c||Ue.test(a))return e.$setValidity("number", +!0),""===a?null:c?a:parseFloat(a);e.$setValidity("number",!1);return t});Ke(e,"number",Ve,null,e.$$validityState);e.$formatters.push(function(a){return e.$isEmpty(a)?"":""+a});d.min&&(a=function(a){var c=parseFloat(d.min);return sa(e,"min",e.$isEmpty(a)||a>=c,a)},e.$parsers.push(a),e.$formatters.push(a));d.max&&(a=function(a){var c=parseFloat(d.max);return sa(e,"max",e.$isEmpty(a)||a<=c,a)},e.$parsers.push(a),e.$formatters.push(a));e.$formatters.push(function(a){return sa(e,"number",e.$isEmpty(a)|| +ib(a),a)})},url:function(a,c,d,e,f,g){Ab(a,c,d,e,f,g);a=function(a){return sa(e,"url",e.$isEmpty(a)||Se.test(a),a)};e.$formatters.push(a);e.$parsers.push(a)},email:function(a,c,d,e,f,g){Ab(a,c,d,e,f,g);a=function(a){return sa(e,"email",e.$isEmpty(a)||Te.test(a),a)};e.$formatters.push(a);e.$parsers.push(a)},radio:function(a,c,d,e){y(d.name)&&c.attr("name",hb());c.on("click",function(){c[0].checked&&a.$apply(function(){e.$setViewValue(d.value)})});e.$render=function(){c[0].checked=d.value==e.$viewValue}; +d.$observe("value",e.$render)},checkbox:function(a,c,d,e){var f=d.ngTrueValue,g=d.ngFalseValue;A(f)||(f=!0);A(g)||(g=!1);c.on("click",function(){a.$apply(function(){e.$setViewValue(c[0].checked)})});e.$render=function(){c[0].checked=e.$viewValue};e.$isEmpty=function(a){return a!==f};e.$formatters.push(function(a){return a===f});e.$parsers.push(function(a){return a?f:g})},hidden:F,button:F,submit:F,reset:F,file:F},Ve=["badInput"],jc=["$browser","$sniffer",function(a,c){return{restrict:"E",require:"?ngModel", +link:function(d,e,f,g){g&&(Sc[M(f.type)]||Sc.text)(d,e,f,g,c,a)}}}],wb="ng-valid",xb="ng-invalid",Oa="ng-pristine",zb="ng-dirty",We=["$scope","$exceptionHandler","$attrs","$element","$parse","$animate",function(a,c,d,e,f,g){function k(a,c){c=c?"-"+mb(c,"-"):"";g.removeClass(e,(a?xb:wb)+c);g.addClass(e,(a?wb:xb)+c)}this.$modelValue=this.$viewValue=Number.NaN;this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$pristine=!0;this.$dirty=!1;this.$valid=!0;this.$invalid=!1;this.$name= +d.name;var m=f(d.ngModel),h=m.assign;if(!h)throw D("ngModel")("nonassign",d.ngModel,ia(e));this.$render=F;this.$isEmpty=function(a){return y(a)||""===a||null===a||a!==a};var l=e.inheritedData("$formController")||yb,n=0,p=this.$error={};e.addClass(Oa);k(!0);this.$setValidity=function(a,c){p[a]!==!c&&(c?(p[a]&&n--,n||(k(!0),this.$valid=!0,this.$invalid=!1)):(k(!1),this.$invalid=!0,this.$valid=!1,n++),p[a]=!c,k(c,a),l.$setValidity(a,c,this))};this.$setPristine=function(){this.$dirty=!1;this.$pristine= +!0;g.removeClass(e,zb);g.addClass(e,Oa)};this.$setViewValue=function(d){this.$viewValue=d;this.$pristine&&(this.$dirty=!0,this.$pristine=!1,g.removeClass(e,Oa),g.addClass(e,zb),l.$setDirty());r(this.$parsers,function(a){d=a(d)});this.$modelValue!==d&&(this.$modelValue=d,h(a,d),r(this.$viewChangeListeners,function(a){try{a()}catch(d){c(d)}}))};var q=this;a.$watch(function(){var c=m(a);if(q.$modelValue!==c){var d=q.$formatters,e=d.length;for(q.$modelValue=c;e--;)c=d[e](c);q.$viewValue!==c&&(q.$viewValue= +c,q.$render())}return c})}],Gd=function(){return{require:["ngModel","^?form"],controller:We,link:function(a,c,d,e){var f=e[0],g=e[1]||yb;g.$addControl(f);a.$on("$destroy",function(){g.$removeControl(f)})}}},Id=ba({require:"ngModel",link:function(a,c,d,e){e.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}),kc=function(){return{require:"?ngModel",link:function(a,c,d,e){if(e){d.required=!0;var f=function(a){if(d.required&&e.$isEmpty(a))e.$setValidity("required",!1);else return e.$setValidity("required", +!0),a};e.$formatters.push(f);e.$parsers.unshift(f);d.$observe("required",function(){f(e.$viewValue)})}}}},Hd=function(){return{require:"ngModel",link:function(a,c,d,e){var f=(a=/\/(.*)\//.exec(d.ngList))&&RegExp(a[1])||d.ngList||",";e.$parsers.push(function(a){if(!y(a)){var c=[];a&&r(a.split(f),function(a){a&&c.push(aa(a))});return c}});e.$formatters.push(function(a){return I(a)?a.join(", "):t});e.$isEmpty=function(a){return!a||!a.length}}}},Xe=/^(true|false|\d+)$/,Jd=function(){return{priority:100, +compile:function(a,c){return Xe.test(c.ngValue)?function(a,c,f){f.$set("value",a.$eval(f.ngValue))}:function(a,c,f){a.$watch(f.ngValue,function(a){f.$set("value",a)})}}}},jd=ya({compile:function(a){a.addClass("ng-binding");return function(a,d,e){d.data("$binding",e.ngBind);a.$watch(e.ngBind,function(a){d.text(a==t?"":a)})}}}),ld=["$interpolate",function(a){return function(c,d,e){c=a(d.attr(e.$attr.ngBindTemplate));d.addClass("ng-binding").data("$binding",c);e.$observe("ngBindTemplate",function(a){d.text(a)})}}], +kd=["$sce","$parse",function(a,c){return{compile:function(d){d.addClass("ng-binding");return function(d,f,g){f.data("$binding",g.ngBindHtml);var k=c(g.ngBindHtml);d.$watch(function(){return(k(d)||"").toString()},function(c){f.html(a.getTrustedHtml(k(d))||"")})}}}}],md=Yb("",!0),od=Yb("Odd",0),nd=Yb("Even",1),pd=ya({compile:function(a,c){c.$set("ngCloak",t);a.removeClass("ng-cloak")}}),qd=[function(){return{scope:!0,controller:"@",priority:500}}],lc={},Ye={blur:!0,focus:!0};r("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "), +function(a){var c=pa("ng-"+a);lc[c]=["$parse","$rootScope",function(d,e){return{compile:function(f,g){var k=d(g[c]);return function(c,d){d.on(a,function(d){var f=function(){k(c,{$event:d})};Ye[a]&&e.$$phase?c.$evalAsync(f):c.$apply(f)})}}}}]});var td=["$animate",function(a){return{transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(c,d,e,f,g){var k,m,h;c.$watch(e.ngIf,function(f){Ua(f)?m||(m=c.$new(),g(m,function(c){c[c.length++]=X.createComment(" end ngIf: "+e.ngIf+ +" ");k={clone:c};a.enter(c,d.parent(),d)})):(h&&(h.remove(),h=null),m&&(m.$destroy(),m=null),k&&(h=Eb(k.clone),a.leave(h,function(){h=null}),k=null))})}}}],ud=["$http","$templateCache","$anchorScroll","$animate","$sce",function(a,c,d,e,f){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:Va.noop,compile:function(g,k){var m=k.ngInclude||k.src,h=k.onload||"",l=k.autoscroll;return function(g,k,q,r,E){var u=0,t,v,R,w=function(){v&&(v.remove(),v=null);t&&(t.$destroy(),t=null); +R&&(e.leave(R,function(){v=null}),v=R,R=null)};g.$watch(f.parseAsResourceUrl(m),function(f){var m=function(){!z(l)||l&&!g.$eval(l)||d()},q=++u;f?(a.get(f,{cache:c}).success(function(a){if(q===u){var c=g.$new();r.template=a;a=E(c,function(a){w();e.enter(a,null,k,m)});t=c;R=a;t.$emit("$includeContentLoaded");g.$eval(h)}}).error(function(){q===u&&w()}),g.$emit("$includeContentRequested")):(w(),r.template=null)})}}}}],Kd=["$compile",function(a){return{restrict:"ECA",priority:-400,require:"ngInclude", +link:function(c,d,e,f){d.html(f.template);a(d.contents())(c)}}}],vd=ya({priority:450,compile:function(){return{pre:function(a,c,d){a.$eval(d.ngInit)}}}}),wd=ya({terminal:!0,priority:1E3}),xd=["$locale","$interpolate",function(a,c){var d=/{}/g;return{restrict:"EA",link:function(e,f,g){var k=g.count,m=g.$attr.when&&f.attr(g.$attr.when),h=g.offset||0,l=e.$eval(m)||{},n={},p=c.startSymbol(),q=c.endSymbol(),s=/^when(Minus)?(.+)$/;r(g,function(a,c){s.test(c)&&(l[M(c.replace("when","").replace("Minus","-"))]= +f.attr(g.$attr[c]))});r(l,function(a,e){n[e]=c(a.replace(d,p+k+"-"+h+q))});e.$watch(function(){var c=parseFloat(e.$eval(k));if(isNaN(c))return"";c in l||(c=a.pluralCat(c-h));return n[c](e,f,!0)},function(a){f.text(a)})}}}],yd=["$parse","$animate",function(a,c){var d=D("ngRepeat");return{transclude:"element",priority:1E3,terminal:!0,$$tlb:!0,link:function(e,f,g,k,m){var h=g.ngRepeat,l=h.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?\s*$/),n,p,q,s,t,u,B={$id:Ka};if(!l)throw d("iexp", +h);g=l[1];k=l[2];(l=l[3])?(n=a(l),p=function(a,c,d){u&&(B[u]=a);B[t]=c;B.$index=d;return n(e,B)}):(q=function(a,c){return Ka(c)},s=function(a){return a});l=g.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/);if(!l)throw d("iidexp",g);t=l[3]||l[1];u=l[2];var z={};e.$watchCollection(k,function(a){var g,k,l=f[0],n,B={},C,x,H,A,F,D,y,I=[];if(Pa(a))D=a,F=p||q;else{F=p||s;D=[];for(H in a)a.hasOwnProperty(H)&&"$"!=H.charAt(0)&&D.push(H);D.sort()}C=D.length;k=I.length=D.length;for(g=0;gx;)t.pop().element.remove()}for(;y.length>L;)y.pop()[0].element.remove()}var h;if(!(h=s.match(d)))throw Ze("iexp",s,ia(f));var l=c(h[2]||h[1]),m=h[4]||h[6],n=h[5],p=c(h[3]||""),r=c(h[2]?h[1]:m),u=c(h[7]),v=h[8]?c(h[8]):null,y=[[{element:f, +label:""}]];E&&(a(E)(e),E.removeClass("ng-scope"),E.remove());f.empty();f.on("change",function(){e.$apply(function(){var a,c=u(e)||[],d={},h,l,p,s,w,z,x;if(q)for(l=[],s=0,z=y.length;s@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide{display:none !important;}ng\\:form{display:block;}.ng-animate-block-transitions{transition:0s all!important;-webkit-transition:0s all!important;}.ng-hide-add-active,.ng-hide-remove{display:block!important;}'); +//# sourceMappingURL=angular.min.js.map diff --git a/bower_components/angular/angular.min.js.gzip b/bower_components/angular/angular.min.js.gzip new file mode 100644 index 0000000000000000000000000000000000000000..ea092d1bf55f5b0bb14f2cb91572ee95d2f1a77a GIT binary patch literal 39789 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 literal 0 HcmV?d00001 diff --git a/bower_components/angular/angular.min.js.map b/bower_components/angular/angular.min.js.map new file mode 100644 index 000000000..576144318 --- /dev/null +++ b/bower_components/angular/angular.min.js.map @@ -0,0 +1,8 @@ +{ +"version":3, +"file":"angular.min.js", +"lineCount":215, +"mappings":"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", +"sources":["angular.js"], +"names":["window","document","undefined","minErr","isArrayLike","obj","isWindow","length","nodeType","isString","isArray","forEach","iterator","context","key","isFunction","hasOwnProperty","call","sortedKeys","keys","push","sort","forEachSorted","i","reverseParams","iteratorFn","value","nextUid","index","uid","digit","charCodeAt","join","String","fromCharCode","unshift","setHashKey","h","$$hashKey","extend","dst","arguments","int","str","parseInt","inherit","parent","extra","noop","identity","$","valueFn","isUndefined","isDefined","isObject","isNumber","isDate","toString","isRegExp","location","alert","setInterval","isElement","node","nodeName","prop","attr","find","map","results","list","indexOf","array","arrayRemove","splice","copy","source","destination","stackSource","stackDest","$evalAsync","$watch","ngMinErr","result","Date","getTime","RegExp","match","lastIndex","shallowCopy","src","charAt","equals","o1","o2","t1","t2","isNaN","keySet","bind","self","fn","curryArgs","slice","startIndex","apply","concat","toJsonReplacer","val","toJson","pretty","JSON","stringify","fromJson","json","parse","toBoolean","v","lowercase","startingTag","element","jqLite","clone","empty","e","elemHtml","append","html","TEXT_NODE","replace","tryDecodeURIComponent","decodeURIComponent","parseKeyValue","keyValue","key_value","split","toKeyValue","parts","arrayValue","encodeUriQuery","encodeUriSegment","pctEncodeSpaces","encodeURIComponent","angularInit","bootstrap","elements","appElement","module","names","NG_APP_CLASS_REGEXP","name","getElementById","querySelectorAll","exec","className","attributes","modules","doBootstrap","injector","tag","$provide","createInjector","invoke","scope","compile","animate","$apply","data","NG_DEFER_BOOTSTRAP","test","angular","resumeBootstrap","angular.resumeBootstrap","extraModules","snake_case","separator","SNAKE_CASE_REGEXP","letter","pos","toLowerCase","assertArg","arg","reason","assertArgFn","acceptArrayAnnotation","constructor","assertNotHasOwnProperty","getter","path","bindFnToScope","lastInstance","len","getBlockElements","nodes","startNode","endNode","nextSibling","setupModuleLoader","$injectorMinErr","$$minErr","factory","requires","configFn","invokeLater","provider","method","insertMethod","invokeQueue","moduleInstance","runBlocks","config","run","block","publishExternalAPI","version","uppercase","csp","angularModule","$LocaleProvider","ngModule","$$SanitizeUriProvider","$CompileProvider","directive","htmlAnchorDirective","inputDirective","formDirective","scriptDirective","selectDirective","styleDirective","optionDirective","ngBindDirective","ngBindHtmlDirective","ngBindTemplateDirective","ngClassDirective","ngClassEvenDirective","ngClassOddDirective","ngCloakDirective","ngControllerDirective","ngFormDirective","ngHideDirective","ngIfDirective","ngIncludeDirective","ngInitDirective","ngNonBindableDirective","ngPluralizeDirective","ngRepeatDirective","ngShowDirective","ngStyleDirective","ngSwitchDirective","ngSwitchWhenDirective","ngSwitchDefaultDirective","ngOptionsDirective","ngTranscludeDirective","ngModelDirective","ngListDirective","ngChangeDirective","requiredDirective","ngValueDirective","ngIncludeFillContentDirective","ngAttributeAliasDirectives","ngEventDirectives","$AnchorScrollProvider","$AnimateProvider","$BrowserProvider","$CacheFactoryProvider","$ControllerProvider","$DocumentProvider","$ExceptionHandlerProvider","$FilterProvider","$InterpolateProvider","$IntervalProvider","$HttpProvider","$HttpBackendProvider","$LocationProvider","$LogProvider","$ParseProvider","$RootScopeProvider","$QProvider","$SceProvider","$SceDelegateProvider","$SnifferProvider","$TemplateCacheProvider","$TimeoutProvider","$WindowProvider","$$RAFProvider","$$AsyncCallbackProvider","camelCase","SPECIAL_CHARS_REGEXP","_","offset","toUpperCase","MOZ_HACK_REGEXP","jqLitePatchJQueryRemove","dispatchThis","filterElems","getterIfNoArguments","removePatch","param","filter","fireEvent","set","setIndex","setLength","childIndex","children","shift","triggerHandler","childLength","jQuery","originalJqFn","$original","JQLite","trim","jqLiteMinErr","parsed","SINGLE_TAG_REGEXP","fragment","createDocumentFragment","HTML_REGEXP","tmp","appendChild","createElement","TAG_NAME_REGEXP","wrap","wrapMap","_default","innerHTML","XHTML_TAG_REGEXP","removeChild","firstChild","lastChild","j","jj","childNodes","textContent","createTextNode","jqLiteAddNodes","jqLiteClone","cloneNode","jqLiteDealoc","jqLiteRemoveData","jqLiteOff","type","unsupported","events","jqLiteExpandoStore","handle","eventHandler","removeEventListenerFn","expandoId","ng339","expandoStore","jqCache","$destroy","jqId","jqLiteData","isSetter","keyDefined","isSimpleGetter","jqLiteHasClass","selector","getAttribute","jqLiteRemoveClass","cssClasses","setAttribute","cssClass","jqLiteAddClass","existingClasses","root","jqLiteController","jqLiteInheritedData","documentElement","ii","parentNode","host","jqLiteEmpty","getBooleanAttrName","booleanAttr","BOOLEAN_ATTR","BOOLEAN_ELEMENTS","createEventHandler","event","preventDefault","event.preventDefault","returnValue","stopPropagation","event.stopPropagation","cancelBubble","target","srcElement","defaultPrevented","prevent","isDefaultPrevented","event.isDefaultPrevented","eventHandlersCopy","msie","elem","hashKey","nextUidFn","objType","HashMap","isolatedUid","this.nextUid","put","annotate","$inject","fnText","STRIP_COMMENTS","argDecl","FN_ARGS","FN_ARG_SPLIT","FN_ARG","all","underscore","last","modulesToLoad","supportObject","delegate","provider_","providerInjector","instantiate","$get","providerCache","providerSuffix","factoryFn","loadModules","moduleFn","loadedModules","get","_runBlocks","_invokeQueue","invokeArgs","message","stack","createInternalInjector","cache","getService","serviceName","INSTANTIATING","err","locals","args","Type","Constructor","returnedValue","prototype","instance","has","service","$injector","constant","instanceCache","decorator","decorFn","origProvider","orig$get","origProvider.$get","origInstance","instanceInjector","servicename","autoScrollingEnabled","disableAutoScrolling","this.disableAutoScrolling","$window","$location","$rootScope","getFirstAnchor","scroll","hash","elm","scrollIntoView","getElementsByName","scrollTo","autoScrollWatch","autoScrollWatchAction","$$rAF","$timeout","supported","Browser","$log","$sniffer","completeOutstandingRequest","outstandingRequestCount","outstandingRequestCallbacks","pop","error","startPoller","interval","setTimeout","check","pollFns","pollFn","pollTimeout","fireUrlChange","newLocation","lastBrowserUrl","url","urlChangeListeners","listener","rawDocument","history","clearTimeout","pendingDeferIds","isMock","$$completeOutstandingRequest","$$incOutstandingRequestCount","self.$$incOutstandingRequestCount","notifyWhenNoOutstandingRequests","self.notifyWhenNoOutstandingRequests","callback","addPollFn","self.addPollFn","href","baseElement","self.url","replaceState","pushState","urlChangeInit","onUrlChange","self.onUrlChange","on","hashchange","$$checkUrlChange","baseHref","self.baseHref","lastCookies","lastCookieString","cookiePath","cookies","self.cookies","cookieLength","cookie","escape","warn","cookieArray","unescape","substring","defer","self.defer","delay","timeoutId","cancel","self.defer.cancel","deferId","$document","this.$get","cacheFactory","cacheId","options","refresh","entry","freshEnd","staleEnd","n","link","p","nextEntry","prevEntry","caches","size","stats","capacity","Number","MAX_VALUE","lruHash","lruEntry","remove","removeAll","destroy","info","cacheFactory.info","cacheFactory.get","$cacheFactory","$$sanitizeUriProvider","hasDirectives","Suffix","COMMENT_DIRECTIVE_REGEXP","CLASS_DIRECTIVE_REGEXP","EVENT_HANDLER_ATTR_REGEXP","this.directive","registerDirective","directiveFactory","$exceptionHandler","directives","priority","require","controller","restrict","aHrefSanitizationWhitelist","this.aHrefSanitizationWhitelist","regexp","imgSrcSanitizationWhitelist","this.imgSrcSanitizationWhitelist","$interpolate","$http","$templateCache","$parse","$controller","$sce","$animate","$$sanitizeUri","$compileNodes","transcludeFn","maxPriority","ignoreDirective","previousCompileContext","nodeValue","compositeLinkFn","compileNodes","safeAddClass","publicLinkFn","cloneConnectFn","transcludeControllers","parentBoundTranscludeFn","$linkNode","JQLitePrototype","eq","$element","addClass","nodeList","$rootElement","childLinkFn","childScope","childBoundTranscludeFn","nodeListLength","stableNodeList","Array","linkFns","nodeLinkFn","$new","transcludeOnThisElement","createBoundTranscludeFn","transclude","templateOnThisElement","attrs","linkFnFound","Attributes","collectDirectives","applyDirectivesToNode","$$element","terminal","previousBoundTranscludeFn","boundTranscludeFn","transcludedScope","cloneFn","controllers","scopeCreated","$$transcluded","attrsMap","$attr","addDirective","directiveNormalize","nodeName_","isNgAttr","nAttrs","attrStartName","attrEndName","specified","ngAttrName","NG_ATTR_BINDING","substr","directiveNName","nName","addAttrInterpolateDirective","addTextInterpolateDirective","byPriority","groupScan","attrStart","attrEnd","depth","hasAttribute","$compileMinErr","groupElementsLinkFnWrapper","linkFn","compileNode","templateAttrs","jqCollection","originalReplaceDirective","preLinkFns","postLinkFns","addLinkFns","pre","post","directiveName","newIsolateScopeDirective","$$isolateScope","cloneAndAnnotateFn","getControllers","elementControllers","retrievalMethod","optional","linkNode","controllersBoundTransclude","cloneAttachFn","hasElementTranscludeDirective","isolateScope","LOCAL_REGEXP","templateDirective","$$originalDirective","definition","scopeName","attrName","mode","lastValue","parentGet","parentSet","compare","$$isolateBindings","$observe","$$observers","$$scope","literal","a","b","assign","parentValueWatch","parentValue","controllerDirectives","controllerInstance","controllerAs","$scope","scopeToChild","template","templateUrl","terminalPriority","newScopeDirective","nonTlbTranscludeDirective","hasTranscludeDirective","hasTemplate","$compileNode","$template","childTranscludeFn","$$start","$$end","directiveValue","assertNoDuplicate","$$tlb","createComment","replaceWith","replaceDirective","contents","denormalizeTemplate","newTemplateAttrs","templateDirectives","unprocessedDirectives","markDirectivesAsIsolate","mergeTemplateAttributes","compileTemplateUrl","Math","max","tDirectives","startAttrName","endAttrName","srcAttr","dstAttr","$set","tAttrs","linkQueue","afterTemplateNodeLinkFn","afterTemplateChildLinkFn","beforeTemplateCompileNode","origAsyncDirective","derivedSyncDirective","getTrustedResourceUrl","success","content","tempTemplateAttrs","beforeTemplateLinkNode","linkRootElement","oldClasses","response","code","headers","delayedNodeLinkFn","ignoreChildLinkFn","rootElement","diff","what","previousDirective","text","interpolateFn","textInterpolateCompileFn","templateNode","hasCompileParent","textInterpolateLinkFn","bindings","interpolateFnWatchAction","getTrustedContext","attrNormalizedName","HTML","RESOURCE_URL","attrInterpolatePreLinkFn","$$inter","newValue","oldValue","$updateClass","elementsToRemove","newNode","firstElementToRemove","removeCount","j2","replaceChild","expando","k","kk","annotation","$addClass","classVal","$removeClass","removeClass","newClasses","toAdd","tokenDifference","toRemove","setClass","writeAttr","booleanKey","removeAttr","listeners","startSymbol","endSymbol","PREFIX_REGEXP","str1","str2","values","tokens1","tokens2","token","CNTRL_REG","register","this.register","expression","identifier","exception","cause","parseHeaders","line","headersGetter","headersObj","transformData","fns","JSON_START","JSON_END","PROTECTION_PREFIX","CONTENT_TYPE_APPLICATION_JSON","defaults","d","interceptorFactories","interceptors","responseInterceptorFactories","responseInterceptors","$httpBackend","$browser","$q","requestConfig","transformResponse","resp","status","reject","transformRequest","mergeHeaders","defHeaders","reqHeaders","defHeaderName","reqHeaderName","common","lowercaseDefHeaderName","execHeaders","headerContent","headerFn","header","chain","serverRequest","reqData","withCredentials","sendReq","then","promise","when","reversedInterceptors","interceptor","request","requestError","responseError","thenFn","rejectFn","promise.success","promise.error","done","headersString","statusText","resolvePromise","$$phase","deferred","resolve","removePendingReq","idx","pendingRequests","cachedResp","buildUrl","params","defaultCache","xsrfValue","urlIsSameOrigin","xsrfCookieName","xsrfHeaderName","timeout","responseType","toISOString","interceptorFactory","responseFn","createShortMethods","createShortMethodsWithData","createXhr","XMLHttpRequest","ActiveXObject","createHttpBackend","callbacks","$browserDefer","jsonpReq","callbackId","script","async","body","called","addEventListenerFn","onreadystatechange","script.onreadystatechange","readyState","ABORTED","timeoutRequest","jsonpDone","xhr","abort","completeRequest","urlResolve","protocol","counter","open","setRequestHeader","xhr.onreadystatechange","responseHeaders","getAllResponseHeaders","responseText","send","this.startSymbol","this.endSymbol","mustHaveExpression","trustedContext","endIndex","hasInterpolation","startSymbolLength","exp","endSymbolLength","$interpolateMinErr","part","getTrusted","valueOf","newErr","$interpolate.startSymbol","$interpolate.endSymbol","count","invokeApply","clearInterval","iteration","skipApply","$$intervalId","tick","notify","intervals","interval.cancel","short","pluralCat","num","encodePath","segments","parseAbsoluteUrl","absoluteUrl","locationObj","appBase","parsedUrl","$$protocol","$$host","hostname","$$port","port","DEFAULT_PORTS","parseAppUrl","relativeUrl","prefixed","$$path","pathname","$$search","search","$$hash","beginsWith","begin","whole","stripHash","stripFile","lastIndexOf","LocationHtml5Url","basePrefix","$$html5","appBaseNoFile","$$parse","this.$$parse","pathUrl","$locationMinErr","$$compose","this.$$compose","$$url","$$absUrl","$$rewrite","this.$$rewrite","appUrl","prevAppUrl","LocationHashbangUrl","hashPrefix","withoutBaseUrl","withoutHashUrl","windowsFilePathExp","firstPathSegmentMatch","LocationHashbangInHtml5Url","locationGetter","property","locationGetterSetter","preprocess","html5Mode","this.hashPrefix","prefix","this.html5Mode","afterLocationChange","oldUrl","$broadcast","absUrl","LocationMode","initialUrl","IGNORE_URI_REGEXP","ctrlKey","metaKey","which","absHref","animVal","rewrittenUrl","newUrl","$digest","changeCounter","$locationWatch","currentReplace","$$replace","debug","debugEnabled","this.debugEnabled","flag","formatError","Error","sourceURL","consoleLog","console","logFn","log","hasApply","arg1","arg2","ensureSafeMemberName","fullExpression","$parseMinErr","ensureSafeObject","Object","setter","setValue","fullExp","propertyObj","unwrapPromises","promiseWarning","$$v","cspSafeGetterFn","key0","key1","key2","key3","key4","cspSafePromiseEnabledGetter","pathVal","cspSafeGetter","getterFn","getterFnCache","pathKeys","pathKeysLength","evaledFnGetter","Function","$parseOptions","this.unwrapPromises","logPromiseWarnings","this.logPromiseWarnings","$filter","promiseWarningCache","parsedExpression","lexer","Lexer","parser","Parser","qFactory","nextTick","exceptionHandler","defaultCallback","defaultErrback","pending","ref","createInternalRejectedPromise","progress","errback","progressback","wrappedCallback","wrappedErrback","wrappedProgressback","catch","finally","makePromise","resolved","handleCallback","isResolved","callbackOutput","promises","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","webkitCancelRequestAnimationFrame","rafSupported","raf","id","timer","TTL","$rootScopeMinErr","lastDirtyWatch","digestTtl","this.digestTtl","Scope","$id","$parent","$$watchers","$$nextSibling","$$prevSibling","$$childHead","$$childTail","$root","$$destroyed","$$asyncQueue","$$postDigestQueue","$$listeners","$$listenerCount","beginPhase","phase","compileToFn","decrementListenerCount","current","initWatchVal","isolate","child","$$childScopeClass","this.$$childScopeClass","watchExp","objectEquality","watcher","listenFn","watcher.fn","newVal","oldVal","originalFn","deregisterWatch","$watchCollection","veryOldValue","trackVeryOldValue","changeDetected","objGetter","internalArray","internalObject","initRun","oldLength","$watchCollectionWatch","newLength","bothNaN","$watchCollectionAction","watch","watchers","asyncQueue","postDigestQueue","dirty","ttl","watchLog","logIdx","logMsg","asyncTask","$eval","next","$on","this.$watch","expr","$$postDigest","namedListeners","$emit","listenerArgs","array1","currentScope","sanitizeUri","uri","isImage","regex","normalizedVal","adjustMatcher","matcher","$sceMinErr","adjustMatchers","matchers","adjustedMatchers","SCE_CONTEXTS","resourceUrlWhitelist","resourceUrlBlacklist","this.resourceUrlWhitelist","this.resourceUrlBlacklist","generateHolderType","Base","holderType","trustedValue","$$unwrapTrustedValue","this.$$unwrapTrustedValue","holderType.prototype.valueOf","holderType.prototype.toString","htmlSanitizer","trustedValueHolderBase","byType","CSS","URL","JS","trustAs","maybeTrusted","allowed","enabled","this.enabled","$sceDelegate","msieDocumentMode","sce","isEnabled","sce.isEnabled","sce.getTrusted","parseAs","sce.parseAs","sceParseAsTrusted","enumValue","lName","eventSupport","android","userAgent","navigator","boxee","documentMode","vendorPrefix","vendorRegex","bodyStyle","style","transitions","animations","webkitTransition","webkitAnimation","hasEvent","divElm","deferreds","$$timeoutId","timeout.cancel","base","urlParsingNode","requestUrl","originUrl","filters","suffix","currencyFilter","dateFilter","filterFilter","jsonFilter","limitToFilter","lowercaseFilter","numberFilter","orderByFilter","uppercaseFilter","comparator","comparatorType","predicates","predicates.check","objKey","filtered","$locale","formats","NUMBER_FORMATS","amount","currencySymbol","CURRENCY_SYM","formatNumber","PATTERNS","GROUP_SEP","DECIMAL_SEP","number","fractionSize","pattern","groupSep","decimalSep","isFinite","isNegative","abs","numStr","formatedText","hasExponent","toFixed","fractionLen","min","minFrac","maxFrac","round","fraction","lgroup","lgSize","group","gSize","negPre","posPre","negSuf","posSuf","padNumber","digits","neg","dateGetter","date","dateStrGetter","shortForm","jsonStringToDate","string","R_ISO8601_STR","tzHour","tzMin","dateSetter","setUTCFullYear","setFullYear","timeSetter","setUTCHours","setHours","m","s","ms","parseFloat","format","DATETIME_FORMATS","NUMBER_STRING","DATE_FORMATS_SPLIT","DATE_FORMATS","object","input","limit","Infinity","out","sortPredicate","reverseOrder","reverseComparator","comp","descending","v1","v2","predicate","arrayCopy","ngDirective","FormController","toggleValidCss","isValid","validationErrorKey","VALID_CLASS","INVALID_CLASS","form","parentForm","nullFormCtrl","invalidCount","errors","$error","controls","$name","ngForm","$dirty","$pristine","$valid","$invalid","$addControl","PRISTINE_CLASS","form.$addControl","control","$removeControl","form.$removeControl","queue","validationToken","$setValidity","form.$setValidity","$setDirty","form.$setDirty","DIRTY_CLASS","$setPristine","form.$setPristine","validate","ctrl","validatorName","validity","testFlags","flags","addNativeHtml5Validators","badFlags","ignoreFlags","$$hasNativeValidators","$parsers","validator","textInputType","VALIDITY_STATE_PROPERTY","placeholder","noevent","$$validityState","composing","ev","ngTrim","revalidate","$viewValue","$setViewValue","deferListener","keyCode","$render","ctrl.$render","$isEmpty","ngPattern","patternValidator","patternObj","$formatters","ngMinlength","minlength","minLengthValidator","ngMaxlength","maxlength","maxLengthValidator","classDirective","arrayDifference","arrayClasses","classes","digestClassCounts","classCounts","classesToUpdate","ngClassWatchAction","$index","old$index","mod","isActive_","active","querySelector","addEventListener","attachEvent","removeEventListener","detachEvent","_data","JQLite._data","optgroup","option","tbody","tfoot","colgroup","caption","thead","th","td","ready","trigger","fired","removeAttribute","css","currentStyle","lowercasedName","getNamedItem","ret","getText","textProp","NODE_TYPE_TEXT_PROPERTY","$dv","multiple","selected","nodeCount","onFn","eventFns","contains","compareDocumentPosition","adown","bup","eventmap","related","relatedTarget","one","off","replaceNode","insertBefore","contentDocument","prepend","wrapNode","after","newElement","toggleClass","condition","classCondition","nextElementSibling","getElementsByTagName","extraParameters","dummyEvent","handlerArgs","eventName","eventFnsCopy","arg3","unbind","$animateMinErr","$$selectors","classNameFilter","this.classNameFilter","$$classNameFilter","$$asyncCallback","enter","leave","move","add","PATH_MATCH","paramValue","CALL","APPLY","BIND","OPERATORS","null","true","false","+","-","*","/","%","^","===","!==","==","!=","<",">","<=",">=","&&","||","&","|","!","ESCAPE","lex","ch","lastCh","tokens","is","readString","peek","readNumber","isIdent","readIdent","isWhitespace","ch2","ch3","fn2","fn3","throwError","chars","was","isExpOperator","start","end","colStr","peekCh","ident","lastDot","peekIndex","methodName","quote","rawString","hex","rep","ZERO","statements","primary","expect","filterChain","consume","arrayDeclaration","functionCall","objectIndex","fieldAccess","msg","peekToken","e1","e2","e3","e4","t","unaryFn","right","ternaryFn","left","middle","binaryFn","statement","argsFn","fnInvoke","assignment","ternary","logicalOR","logicalAND","equality","relational","additive","multiplicative","unary","field","o","indexFn","contextGetter","fnPtr","elementFns","allConstant","elementFn","keyValues","ampmGetter","getHours","AMPMS","timeZoneGetter","zone","getTimezoneOffset","paddedZone","xlinkHref","propName","normalized","ngBooleanAttrWatchAction","formDirectiveFactory","isNgForm","formElement","action","preventDefaultListener","parentFormCtrl","alias","URL_REGEXP","EMAIL_REGEXP","NUMBER_REGEXP","inputType","numberInputType","numberBadFlags","minValidator","maxValidator","urlInputType","urlValidator","emailInputType","emailValidator","radioInputType","checked","checkboxInputType","trueValue","ngTrueValue","falseValue","ngFalseValue","ctrl.$isEmpty","NgModelController","$modelValue","NaN","$viewChangeListeners","ngModelGet","ngModel","ngModelSet","this.$isEmpty","inheritedData","this.$setValidity","this.$setPristine","this.$setViewValue","ngModelWatch","formatters","ctrls","modelCtrl","formCtrl","ngChange","required","ngList","viewValue","CONSTANT_VALUE_REGEXP","tpl","tplAttr","ngValue","ngValueConstantLink","ngValueLink","valueWatchAction","templateElement","ngBind","ngBindWatchAction","ngBindTemplate","tElement","ngBindHtml","getStringValue","ngBindHtmlWatchAction","getTrustedHtml","forceAsyncEvents","ngEventHandler","$transclude","previousElements","ngIf","ngIfWatchAction","$anchorScroll","srcExp","ngInclude","onloadExp","onload","autoScrollExp","autoscroll","previousElement","currentElement","cleanupLastIncludeContent","parseAsResourceUrl","ngIncludeWatchAction","afterAnimation","thisChangeId","newScope","$compile","ngInit","BRACE","numberExp","whenExp","whens","whensExpFns","isWhen","attributeName","ngPluralizeWatch","ngPluralizeWatchAction","ngRepeatMinErr","ngRepeat","trackByExpGetter","trackByIdExpFn","trackByIdArrayFn","trackByIdObjFn","valueIdentifier","keyIdentifier","hashFnLocals","lhs","rhs","trackByExp","lastBlockMap","ngRepeatAction","collection","previousNode","nextNode","nextBlockMap","arrayLength","trackByIdFn","collectionKeys","nextBlockOrder","trackById","$first","$last","$middle","$odd","$even","ngShow","ngShowWatchAction","ngHide","ngHideWatchAction","ngStyle","ngStyleWatchAction","newStyles","oldStyles","ngSwitchController","cases","selectedTranscludes","selectedElements","selectedScopes","ngSwitch","ngSwitchWatchAction","change","selectedTransclude","selectedScope","caseElement","anchor","ngSwitchWhen","$attrs","ngOptionsMinErr","NG_OPTIONS_REGEXP","nullModelCtrl","optionsMap","ngModelCtrl","unknownOption","databound","init","self.init","ngModelCtrl_","nullOption_","unknownOption_","addOption","self.addOption","removeOption","self.removeOption","hasOption","renderUnknownOption","self.renderUnknownOption","unknownVal","self.hasOption","setupAsSingle","selectElement","selectCtrl","ngModelCtrl.$render","emptyOption","setupAsMultiple","lastView","items","selectMultipleWatch","setupAsOptions","render","optionGroups","optionGroupNames","optionGroupName","optionGroup","existingParent","existingOptions","existingOption","modelValue","valuesFn","keyName","groupIndex","selectedSet","trackFn","trackIndex","valueName","lastElement","groupByFn","modelCast","label","displayFn","nullOption","groupLength","optionGroupsCache","optGroupTemplate","optionTemplate","optionsExp","track","optionElement","toDisplay","ngOptions","ngModelCtrl.$isEmpty","nullSelectCtrl","selectCtrlName","interpolateWatchAction","$$csp"] +} diff --git a/bower_components/angular/bower.json b/bower_components/angular/bower.json new file mode 100644 index 000000000..3f17b3c4a --- /dev/null +++ b/bower_components/angular/bower.json @@ -0,0 +1,7 @@ +{ + "name": "angular", + "version": "1.2.25", + "main": "./angular.js", + "dependencies": { + } +} diff --git a/package.json b/package.json index fcb618454..4256ada4b 100644 --- a/package.json +++ b/package.json @@ -58,10 +58,11 @@ "grunt-run": "~0.2.2", "grunt-s3": "~0.2.0-alpha.3", "grunt-saucelabs": "~8.2.0", + "jquery": "~2.1.1", "js-yaml": "~2.1.3", "load-grunt-config": "~0.7.0", "load-grunt-tasks": "~0.2.0", - "mocha": "^1.21.3", + "mocha": "~1.21.4", "mocha-lcov-reporter": "0.0.1", "moment": "~2.4.0", "nock": "~0.28.3", diff --git a/test/utils/jquery.js b/test/utils/jquery.js deleted file mode 100644 index 12e0f9a95..000000000 --- a/test/utils/jquery.js +++ /dev/null @@ -1,9789 +0,0 @@ -/*! - * jQuery JavaScript Library v1.10.2 - * http://jquery.com/ - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * - * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: 2013-07-03T13:48Z - */ -(function( window, undefined ) { - -// Can't do this because several apps including ASP.NET trace -// the stack via arguments.caller.callee and Firefox dies if -// you try to trace through "use strict" call chains. (#13335) -// Support: Firefox 18+ -//"use strict"; -var - // The deferred used on DOM ready - readyList, - - // A central reference to the root jQuery(document) - rootjQuery, - - // Support: IE<10 - // For `typeof xmlNode.method` instead of `xmlNode.method !== undefined` - core_strundefined = typeof undefined, - - // Use the correct document accordingly with window argument (sandbox) - location = window.location, - document = window.document, - docElem = document.documentElement, - - // Map over jQuery in case of overwrite - _jQuery = window.jQuery, - - // Map over the $ in case of overwrite - _$ = window.$, - - // [[Class]] -> type pairs - class2type = {}, - - // List of deleted data cache ids, so we can reuse them - core_deletedIds = [], - - core_version = "1.10.2", - - // Save a reference to some core methods - core_concat = core_deletedIds.concat, - core_push = core_deletedIds.push, - core_slice = core_deletedIds.slice, - core_indexOf = core_deletedIds.indexOf, - core_toString = class2type.toString, - core_hasOwn = class2type.hasOwnProperty, - core_trim = core_version.trim, - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - // The jQuery object is actually just the init constructor 'enhanced' - return new jQuery.fn.init( selector, context, rootjQuery ); - }, - - // Used for matching numbers - core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, - - // Used for splitting on whitespace - core_rnotwhite = /\S+/g, - - // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE) - rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, - - // A simple way to check for HTML strings - // Prioritize #id over to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) - rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, - - // Match a standalone tag - rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, - - // JSON RegExp - rvalidchars = /^[\],:{}\s]*$/, - rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, - rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g, - rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g, - - // Matches dashed string for camelizing - rmsPrefix = /^-ms-/, - rdashAlpha = /-([\da-z])/gi, - - // Used by jQuery.camelCase as callback to replace() - fcamelCase = function( all, letter ) { - return letter.toUpperCase(); - }, - - // The ready event handler - completed = function( event ) { - - // readyState === "complete" is good enough for us to call the dom ready in oldIE - if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) { - detach(); - jQuery.ready(); - } - }, - // Clean-up method for dom ready events - detach = function() { - if ( document.addEventListener ) { - document.removeEventListener( "DOMContentLoaded", completed, false ); - window.removeEventListener( "load", completed, false ); - - } else { - document.detachEvent( "onreadystatechange", completed ); - window.detachEvent( "onload", completed ); - } - }; - -jQuery.fn = jQuery.prototype = { - // The current version of jQuery being used - jquery: core_version, - - constructor: jQuery, - init: function( selector, context, rootjQuery ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = rquickExpr.exec( selector ); - } - - // Match html or make sure no context is specified for #id - if ( match && (match[1] || !context) ) { - - // HANDLE: $(html) -> $(array) - if ( match[1] ) { - context = context instanceof jQuery ? context[0] : context; - - // scripts is true for back-compat - jQuery.merge( this, jQuery.parseHTML( - match[1], - context && context.nodeType ? context.ownerDocument || context : document, - true - ) ); - - // HANDLE: $(html, props) - if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { - for ( match in context ) { - // Properties of context are called as methods if possible - if ( jQuery.isFunction( this[ match ] ) ) { - this[ match ]( context[ match ] ); - - // ...and otherwise set as attributes - } else { - this.attr( match, context[ match ] ); - } - } - } - - return this; - - // HANDLE: $(#id) - } else { - elem = document.getElementById( match[2] ); - - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - if ( elem && elem.parentNode ) { - // Handle the case where IE and Opera return items - // by name instead of ID - if ( elem.id !== match[2] ) { - return rootjQuery.find( selector ); - } - - // Otherwise, we inject the element directly into the jQuery object - this.length = 1; - this[0] = elem; - } - - this.context = document; - this.selector = selector; - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || rootjQuery ).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(DOMElement) - } else if ( selector.nodeType ) { - this.context = this[0] = selector; - this.length = 1; - return this; - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( jQuery.isFunction( selector ) ) { - return rootjQuery.ready( selector ); - } - - if ( selector.selector !== undefined ) { - this.selector = selector.selector; - this.context = selector.context; - } - - return jQuery.makeArray( selector, this ); - }, - - // Start with an empty selector - selector: "", - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return core_slice.call( this ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - return num == null ? - - // Return a 'clean' array - this.toArray() : - - // Return just the object - ( num < 0 ? this[ this.length + num ] : this[ num ] ); - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - ret.context = this.context; - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - // (You can seed the arguments with an array of args, but this is - // only used internally.) - each: function( callback, args ) { - return jQuery.each( this, callback, args ); - }, - - ready: function( fn ) { - // Add the callback - jQuery.ready.promise().done( fn ); - - return this; - }, - - slice: function() { - return this.pushStack( core_slice.apply( this, arguments ) ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - eq: function( i ) { - var len = this.length, - j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map(this, function( elem, i ) { - return callback.call( elem, i, elem ); - })); - }, - - end: function() { - return this.prevObject || this.constructor(null); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: core_push, - sort: [].sort, - splice: [].splice -}; - -// Give the init function the jQuery prototype for later instantiation -jQuery.fn.init.prototype = jQuery.fn; - -jQuery.extend = jQuery.fn.extend = function() { - var src, copyIsArray, copy, name, options, clone, - target = arguments[0] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - target = arguments[1] || {}; - // skip the boolean and the target - i = 2; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !jQuery.isFunction(target) ) { - target = {}; - } - - // extend jQuery itself if only one argument is passed - if ( length === i ) { - target = this; - --i; - } - - for ( ; i < length; i++ ) { - // Only deal with non-null/undefined values - if ( (options = arguments[ i ]) != null ) { - // Extend the base object - for ( name in options ) { - src = target[ name ]; - copy = options[ name ]; - - // Prevent never-ending loop - if ( target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { - if ( copyIsArray ) { - copyIsArray = false; - clone = src && jQuery.isArray(src) ? src : []; - - } else { - clone = src && jQuery.isPlainObject(src) ? src : {}; - } - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend({ - // Unique for each copy of jQuery on the page - // Non-digits removed to match rinlinejQuery - expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ), - - noConflict: function( deep ) { - if ( window.$ === jQuery ) { - window.$ = _$; - } - - if ( deep && window.jQuery === jQuery ) { - window.jQuery = _jQuery; - } - - return jQuery; - }, - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Hold (or release) the ready event - holdReady: function( hold ) { - if ( hold ) { - jQuery.readyWait++; - } else { - jQuery.ready( true ); - } - }, - - // Handle when the DOM is ready - ready: function( wait ) { - - // Abort if there are pending holds or we're already ready - if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { - return; - } - - // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). - if ( !document.body ) { - return setTimeout( jQuery.ready ); - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - - // Trigger any bound ready events - if ( jQuery.fn.trigger ) { - jQuery( document ).trigger("ready").off("ready"); - } - }, - - // See test/unit/core.js for details concerning isFunction. - // Since version 1.3, DOM methods and functions like alert - // aren't supported. They return false on IE (#2968). - isFunction: function( obj ) { - return jQuery.type(obj) === "function"; - }, - - isArray: Array.isArray || function( obj ) { - return jQuery.type(obj) === "array"; - }, - - isWindow: function( obj ) { - /* jshint eqeqeq: false */ - return obj != null && obj == obj.window; - }, - - isNumeric: function( obj ) { - return !isNaN( parseFloat(obj) ) && isFinite( obj ); - }, - - type: function( obj ) { - if ( obj == null ) { - return String( obj ); - } - return typeof obj === "object" || typeof obj === "function" ? - class2type[ core_toString.call(obj) ] || "object" : - typeof obj; - }, - - isPlainObject: function( obj ) { - var key; - - // Must be an Object. - // Because of IE, we also have to check the presence of the constructor property. - // Make sure that DOM nodes and window objects don't pass through, as well - if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { - return false; - } - - try { - // Not own constructor property must be Object - if ( obj.constructor && - !core_hasOwn.call(obj, "constructor") && - !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { - return false; - } - } catch ( e ) { - // IE8,9 Will throw exceptions on certain host objects #9897 - return false; - } - - // Support: IE<9 - // Handle iteration over inherited properties before own properties. - if ( jQuery.support.ownLast ) { - for ( key in obj ) { - return core_hasOwn.call( obj, key ); - } - } - - // Own properties are enumerated firstly, so to speed up, - // if last one is own, then all properties are own. - for ( key in obj ) {} - - return key === undefined || core_hasOwn.call( obj, key ); - }, - - isEmptyObject: function( obj ) { - var name; - for ( name in obj ) { - return false; - } - return true; - }, - - error: function( msg ) { - throw new Error( msg ); - }, - - // data: string of html - // context (optional): If specified, the fragment will be created in this context, defaults to document - // keepScripts (optional): If true, will include scripts passed in the html string - parseHTML: function( data, context, keepScripts ) { - if ( !data || typeof data !== "string" ) { - return null; - } - if ( typeof context === "boolean" ) { - keepScripts = context; - context = false; - } - context = context || document; - - var parsed = rsingleTag.exec( data ), - scripts = !keepScripts && []; - - // Single tag - if ( parsed ) { - return [ context.createElement( parsed[1] ) ]; - } - - parsed = jQuery.buildFragment( [ data ], context, scripts ); - if ( scripts ) { - jQuery( scripts ).remove(); - } - return jQuery.merge( [], parsed.childNodes ); - }, - - parseJSON: function( data ) { - // Attempt to parse using the native JSON parser first - if ( window.JSON && window.JSON.parse ) { - return window.JSON.parse( data ); - } - - if ( data === null ) { - return data; - } - - if ( typeof data === "string" ) { - - // Make sure leading/trailing whitespace is removed (IE can't handle it) - data = jQuery.trim( data ); - - if ( data ) { - // Make sure the incoming data is actual JSON - // Logic borrowed from http://json.org/json2.js - if ( rvalidchars.test( data.replace( rvalidescape, "@" ) - .replace( rvalidtokens, "]" ) - .replace( rvalidbraces, "")) ) { - - return ( new Function( "return " + data ) )(); - } - } - } - - jQuery.error( "Invalid JSON: " + data ); - }, - - // Cross-browser xml parsing - parseXML: function( data ) { - var xml, tmp; - if ( !data || typeof data !== "string" ) { - return null; - } - try { - if ( window.DOMParser ) { // Standard - tmp = new DOMParser(); - xml = tmp.parseFromString( data , "text/xml" ); - } else { // IE - xml = new ActiveXObject( "Microsoft.XMLDOM" ); - xml.async = "false"; - xml.loadXML( data ); - } - } catch( e ) { - xml = undefined; - } - if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { - jQuery.error( "Invalid XML: " + data ); - } - return xml; - }, - - noop: function() {}, - - // Evaluates a script in a global context - // Workarounds based on findings by Jim Driscoll - // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context - globalEval: function( data ) { - if ( data && jQuery.trim( data ) ) { - // We use execScript on Internet Explorer - // We use an anonymous function so that context is window - // rather than jQuery in Firefox - ( window.execScript || function( data ) { - window[ "eval" ].call( window, data ); - } )( data ); - } - }, - - // Convert dashed to camelCase; used by the css and data modules - // Microsoft forgot to hump their vendor prefix (#9572) - camelCase: function( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); - }, - - nodeName: function( elem, name ) { - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - }, - - // args is for internal usage only - each: function( obj, callback, args ) { - var value, - i = 0, - length = obj.length, - isArray = isArraylike( obj ); - - if ( args ) { - if ( isArray ) { - for ( ; i < length; i++ ) { - value = callback.apply( obj[ i ], args ); - - if ( value === false ) { - break; - } - } - } else { - for ( i in obj ) { - value = callback.apply( obj[ i ], args ); - - if ( value === false ) { - break; - } - } - } - - // A special, fast, case for the most common use of each - } else { - if ( isArray ) { - for ( ; i < length; i++ ) { - value = callback.call( obj[ i ], i, obj[ i ] ); - - if ( value === false ) { - break; - } - } - } else { - for ( i in obj ) { - value = callback.call( obj[ i ], i, obj[ i ] ); - - if ( value === false ) { - break; - } - } - } - } - - return obj; - }, - - // Use native String.trim function wherever possible - trim: core_trim && !core_trim.call("\uFEFF\xA0") ? - function( text ) { - return text == null ? - "" : - core_trim.call( text ); - } : - - // Otherwise use our own trimming functionality - function( text ) { - return text == null ? - "" : - ( text + "" ).replace( rtrim, "" ); - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArraylike( Object(arr) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - core_push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - var len; - - if ( arr ) { - if ( core_indexOf ) { - return core_indexOf.call( arr, elem, i ); - } - - len = arr.length; - i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; - - for ( ; i < len; i++ ) { - // Skip accessing in sparse arrays - if ( i in arr && arr[ i ] === elem ) { - return i; - } - } - } - - return -1; - }, - - merge: function( first, second ) { - var l = second.length, - i = first.length, - j = 0; - - if ( typeof l === "number" ) { - for ( ; j < l; j++ ) { - first[ i++ ] = second[ j ]; - } - } else { - while ( second[j] !== undefined ) { - first[ i++ ] = second[ j++ ]; - } - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, inv ) { - var retVal, - ret = [], - i = 0, - length = elems.length; - inv = !!inv; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - retVal = !!callback( elems[ i ], i ); - if ( inv !== retVal ) { - ret.push( elems[ i ] ); - } - } - - return ret; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var value, - i = 0, - length = elems.length, - isArray = isArraylike( elems ), - ret = []; - - // Go through the array, translating each of the items to their - if ( isArray ) { - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret[ ret.length ] = value; - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret[ ret.length ] = value; - } - } - } - - // Flatten any nested arrays - return core_concat.apply( [], ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // Bind a function to a context, optionally partially applying any - // arguments. - proxy: function( fn, context ) { - var args, proxy, tmp; - - if ( typeof context === "string" ) { - tmp = fn[ context ]; - context = fn; - fn = tmp; - } - - // Quick check to determine if target is callable, in the spec - // this throws a TypeError, but we will just return undefined. - if ( !jQuery.isFunction( fn ) ) { - return undefined; - } - - // Simulated bind - args = core_slice.call( arguments, 2 ); - proxy = function() { - return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) ); - }; - - // Set the guid of unique handler to the same of original handler, so it can be removed - proxy.guid = fn.guid = fn.guid || jQuery.guid++; - - return proxy; - }, - - // Multifunctional method to get and set values of a collection - // The value/s can optionally be executed if it's a function - access: function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - length = elems.length, - bulk = key == null; - - // Sets many values - if ( jQuery.type( key ) === "object" ) { - chainable = true; - for ( i in key ) { - jQuery.access( elems, fn, i, key[i], true, emptyGet, raw ); - } - - // Sets one value - } else if ( value !== undefined ) { - chainable = true; - - if ( !jQuery.isFunction( value ) ) { - raw = true; - } - - if ( bulk ) { - // Bulk operations run against the entire set - if ( raw ) { - fn.call( elems, value ); - fn = null; - - // ...except when executing function values - } else { - bulk = fn; - fn = function( elem, key, value ) { - return bulk.call( jQuery( elem ), value ); - }; - } - } - - if ( fn ) { - for ( ; i < length; i++ ) { - fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); - } - } - } - - return chainable ? - elems : - - // Gets - bulk ? - fn.call( elems ) : - length ? fn( elems[0], key ) : emptyGet; - }, - - now: function() { - return ( new Date() ).getTime(); - }, - - // A method for quickly swapping in/out CSS properties to get correct calculations. - // Note: this method belongs to the css module but it's needed here for the support module. - // If support gets modularized, this method should be moved back to the css module. - swap: function( elem, options, callback, args ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.apply( elem, args || [] ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; - } -}); - -jQuery.ready.promise = function( obj ) { - if ( !readyList ) { - - readyList = jQuery.Deferred(); - - // Catch cases where $(document).ready() is called after the browser event has already occurred. - // we once tried to use readyState "interactive" here, but it caused issues like the one - // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 - if ( document.readyState === "complete" ) { - // Handle it asynchronously to allow scripts the opportunity to delay ready - setTimeout( jQuery.ready ); - - // Standards-based browsers support DOMContentLoaded - } else if ( document.addEventListener ) { - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed, false ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed, false ); - - // If IE event model is used - } else { - // Ensure firing before onload, maybe late but safe also for iframes - document.attachEvent( "onreadystatechange", completed ); - - // A fallback to window.onload, that will always work - window.attachEvent( "onload", completed ); - - // If IE and not a frame - // continually check to see if the document is ready - var top = false; - - try { - top = window.frameElement == null && document.documentElement; - } catch(e) {} - - if ( top && top.doScroll ) { - (function doScrollCheck() { - if ( !jQuery.isReady ) { - - try { - // Use the trick by Diego Perini - // http://javascript.nwbox.com/IEContentLoaded/ - top.doScroll("left"); - } catch(e) { - return setTimeout( doScrollCheck, 50 ); - } - - // detach all dom ready events - detach(); - - // and execute any waiting functions - jQuery.ready(); - } - })(); - } - } - } - return readyList.promise( obj ); -}; - -// Populate the class2type map -jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -}); - -function isArraylike( obj ) { - var length = obj.length, - type = jQuery.type( obj ); - - if ( jQuery.isWindow( obj ) ) { - return false; - } - - if ( obj.nodeType === 1 && length ) { - return true; - } - - return type === "array" || type !== "function" && - ( length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj ); -} - -// All jQuery objects should point back to these -rootjQuery = jQuery(document); -/*! - * Sizzle CSS Selector Engine v1.10.2 - * http://sizzlejs.com/ - * - * Copyright 2013 jQuery Foundation, Inc. and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: 2013-07-03 - */ -(function( window, undefined ) { - -var i, - support, - cachedruns, - Expr, - getText, - isXML, - compile, - outermostContext, - sortInput, - - // Local document vars - setDocument, - document, - docElem, - documentIsHTML, - rbuggyQSA, - rbuggyMatches, - matches, - contains, - - // Instance-specific data - expando = "sizzle" + -(new Date()), - preferredDoc = window.document, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - hasDuplicate = false, - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - return 0; - } - return 0; - }, - - // General-purpose constants - strundefined = typeof undefined, - MAX_NEGATIVE = 1 << 31, - - // Instance methods - hasOwn = ({}).hasOwnProperty, - arr = [], - pop = arr.pop, - push_native = arr.push, - push = arr.push, - slice = arr.slice, - // Use a stripped-down indexOf if we can't use a native one - indexOf = arr.indexOf || function( elem ) { - var i = 0, - len = this.length; - for ( ; i < len; i++ ) { - if ( this[i] === elem ) { - return i; - } - } - return -1; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", - - // Regular expressions - - // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace - whitespace = "[\\x20\\t\\r\\n\\f]", - // http://www.w3.org/TR/css3-syntax/#characters - characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", - - // Loosely modeled on CSS identifier characters - // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors - // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier - identifier = characterEncoding.replace( "w", "w#" ), - - // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + - "*(?:([*^$|!~]?=)" + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]", - - // Prefer arguments quoted, - // then not containing pseudos/brackets, - // then attribute selectors/non-parenthetical expressions, - // then anything else - // These preferences are here to reduce the number of selectors - // needing tokenize in the PSEUDO preFilter - pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)", - - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), - - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), - - rsibling = new RegExp( whitespace + "*[+~]" ), - rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*)" + whitespace + "*\\]", "g" ), - - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - "ID": new RegExp( "^#(" + characterEncoding + ")" ), - "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), - "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), - "ATTR": new RegExp( "^" + attributes ), - "PSEUDO": new RegExp( "^" + pseudos ), - "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + - "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + - "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), - // For use in libraries implementing .is() - // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + - whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) - }, - - rnative = /^[^{]+\{\s*\[native \w/, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - rescape = /'|\\/g, - - // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), - funescape = function( _, escaped, escapedWhitespace ) { - var high = "0x" + escaped - 0x10000; - // NaN means non-codepoint - // Support: Firefox - // Workaround erroneous numeric interpretation of +"0x" - return high !== high || escapedWhitespace ? - escaped : - // BMP codepoint - high < 0 ? - String.fromCharCode( high + 0x10000 ) : - // Supplemental Plane codepoint (surrogate pair) - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }; - -// Optimize for push.apply( _, NodeList ) -try { - push.apply( - (arr = slice.call( preferredDoc.childNodes )), - preferredDoc.childNodes - ); - // Support: Android<4.0 - // Detect silently failing push.apply - arr[ preferredDoc.childNodes.length ].nodeType; -} catch ( e ) { - push = { apply: arr.length ? - - // Leverage slice if possible - function( target, els ) { - push_native.apply( target, slice.call(els) ); - } : - - // Support: IE<9 - // Otherwise append directly - function( target, els ) { - var j = target.length, - i = 0; - // Can't trust NodeList.length - while ( (target[j++] = els[i++]) ) {} - target.length = j - 1; - } - }; -} - -function Sizzle( selector, context, results, seed ) { - var match, elem, m, nodeType, - // QSA vars - i, groups, old, nid, newContext, newSelector; - - if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { - setDocument( context ); - } - - context = context || document; - results = results || []; - - if ( !selector || typeof selector !== "string" ) { - return results; - } - - if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { - return []; - } - - if ( documentIsHTML && !seed ) { - - // Shortcuts - if ( (match = rquickExpr.exec( selector )) ) { - // Speed-up: Sizzle("#ID") - if ( (m = match[1]) ) { - if ( nodeType === 9 ) { - elem = context.getElementById( m ); - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - if ( elem && elem.parentNode ) { - // Handle the case where IE, Opera, and Webkit return items - // by name instead of ID - if ( elem.id === m ) { - results.push( elem ); - return results; - } - } else { - return results; - } - } else { - // Context is not a document - if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && - contains( context, elem ) && elem.id === m ) { - results.push( elem ); - return results; - } - } - - // Speed-up: Sizzle("TAG") - } else if ( match[2] ) { - push.apply( results, context.getElementsByTagName( selector ) ); - return results; - - // Speed-up: Sizzle(".CLASS") - } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) { - push.apply( results, context.getElementsByClassName( m ) ); - return results; - } - } - - // QSA path - if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { - nid = old = expando; - newContext = context; - newSelector = nodeType === 9 && selector; - - // qSA works strangely on Element-rooted queries - // We can work around this by specifying an extra ID on the root - // and working up from there (Thanks to Andrew Dupont for the technique) - // IE 8 doesn't work on object elements - if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { - groups = tokenize( selector ); - - if ( (old = context.getAttribute("id")) ) { - nid = old.replace( rescape, "\\$&" ); - } else { - context.setAttribute( "id", nid ); - } - nid = "[id='" + nid + "'] "; - - i = groups.length; - while ( i-- ) { - groups[i] = nid + toSelector( groups[i] ); - } - newContext = rsibling.test( selector ) && context.parentNode || context; - newSelector = groups.join(","); - } - - if ( newSelector ) { - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch(qsaError) { - } finally { - if ( !old ) { - context.removeAttribute("id"); - } - } - } - } - } - - // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); -} - -/** - * Create key-value caches of limited size - * @returns {Function(string, Object)} Returns the Object data after storing it on itself with - * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) - * deleting the oldest entry - */ -function createCache() { - var keys = []; - - function cache( key, value ) { - // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) - if ( keys.push( key += " " ) > Expr.cacheLength ) { - // Only keep the most recent entries - delete cache[ keys.shift() ]; - } - return (cache[ key ] = value); - } - return cache; -} - -/** - * Mark a function for special use by Sizzle - * @param {Function} fn The function to mark - */ -function markFunction( fn ) { - fn[ expando ] = true; - return fn; -} - -/** - * Support testing using an element - * @param {Function} fn Passed the created div and expects a boolean result - */ -function assert( fn ) { - var div = document.createElement("div"); - - try { - return !!fn( div ); - } catch (e) { - return false; - } finally { - // Remove from its parent by default - if ( div.parentNode ) { - div.parentNode.removeChild( div ); - } - // release memory in IE - div = null; - } -} - -/** - * Adds the same handler for all of the specified attrs - * @param {String} attrs Pipe-separated list of attributes - * @param {Function} handler The method that will be applied - */ -function addHandle( attrs, handler ) { - var arr = attrs.split("|"), - i = attrs.length; - - while ( i-- ) { - Expr.attrHandle[ arr[i] ] = handler; - } -} - -/** - * Checks document order of two siblings - * @param {Element} a - * @param {Element} b - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b - */ -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && a.nodeType === 1 && b.nodeType === 1 && - ( ~b.sourceIndex || MAX_NEGATIVE ) - - ( ~a.sourceIndex || MAX_NEGATIVE ); - - // Use IE sourceIndex if available on both nodes - if ( diff ) { - return diff; - } - - // Check if b follows a - if ( cur ) { - while ( (cur = cur.nextSibling) ) { - if ( cur === b ) { - return -1; - } - } - } - - return a ? 1 : -1; -} - -/** - * Returns a function to use in pseudos for input types - * @param {String} type - */ -function createInputPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for buttons - * @param {String} type - */ -function createButtonPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return (name === "input" || name === "button") && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for positionals - * @param {Function} fn - */ -function createPositionalPseudo( fn ) { - return markFunction(function( argument ) { - argument = +argument; - return markFunction(function( seed, matches ) { - var j, - matchIndexes = fn( [], seed.length, argument ), - i = matchIndexes.length; - - // Match elements found at the specified indexes - while ( i-- ) { - if ( seed[ (j = matchIndexes[i]) ] ) { - seed[j] = !(matches[j] = seed[j]); - } - } - }); - }); -} - -/** - * Detect xml - * @param {Element|Object} elem An element or a document - */ -isXML = Sizzle.isXML = function( elem ) { - // documentElement is verified for cases where it doesn't yet exist - // (such as loading iframes in IE - #4833) - var documentElement = elem && (elem.ownerDocument || elem).documentElement; - return documentElement ? documentElement.nodeName !== "HTML" : false; -}; - -// Expose support vars for convenience -support = Sizzle.support = {}; - -/** - * Sets document-related variables once based on the current document - * @param {Element|Object} [doc] An element or document object to use to set the document - * @returns {Object} Returns the current document - */ -setDocument = Sizzle.setDocument = function( node ) { - var doc = node ? node.ownerDocument || node : preferredDoc, - parent = doc.defaultView; - - // If no document and documentElement is available, return - if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { - return document; - } - - // Set our document - document = doc; - docElem = doc.documentElement; - - // Support tests - documentIsHTML = !isXML( doc ); - - // Support: IE>8 - // If iframe document is assigned to "document" variable and if iframe has been reloaded, - // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936 - // IE6-8 do not support the defaultView property so parent will be undefined - if ( parent && parent.attachEvent && parent !== parent.top ) { - parent.attachEvent( "onbeforeunload", function() { - setDocument(); - }); - } - - /* Attributes - ---------------------------------------------------------------------- */ - - // Support: IE<8 - // Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans) - support.attributes = assert(function( div ) { - div.className = "i"; - return !div.getAttribute("className"); - }); - - /* getElement(s)By* - ---------------------------------------------------------------------- */ - - // Check if getElementsByTagName("*") returns only elements - support.getElementsByTagName = assert(function( div ) { - div.appendChild( doc.createComment("") ); - return !div.getElementsByTagName("*").length; - }); - - // Check if getElementsByClassName can be trusted - support.getElementsByClassName = assert(function( div ) { - div.innerHTML = "
"; - - // Support: Safari<4 - // Catch class over-caching - div.firstChild.className = "i"; - // Support: Opera<10 - // Catch gEBCN failure to find non-leading classes - return div.getElementsByClassName("i").length === 2; - }); - - // Support: IE<10 - // Check if getElementById returns elements by name - // The broken getElementById methods don't pick up programatically-set names, - // so use a roundabout getElementsByName test - support.getById = assert(function( div ) { - docElem.appendChild( div ).id = expando; - return !doc.getElementsByName || !doc.getElementsByName( expando ).length; - }); - - // ID find and filter - if ( support.getById ) { - Expr.find["ID"] = function( id, context ) { - if ( typeof context.getElementById !== strundefined && documentIsHTML ) { - var m = context.getElementById( id ); - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - return m && m.parentNode ? [m] : []; - } - }; - Expr.filter["ID"] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - return elem.getAttribute("id") === attrId; - }; - }; - } else { - // Support: IE6/7 - // getElementById is not reliable as a find shortcut - delete Expr.find["ID"]; - - Expr.filter["ID"] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); - return node && node.value === attrId; - }; - }; - } - - // Tag - Expr.find["TAG"] = support.getElementsByTagName ? - function( tag, context ) { - if ( typeof context.getElementsByTagName !== strundefined ) { - return context.getElementsByTagName( tag ); - } - } : - function( tag, context ) { - var elem, - tmp = [], - i = 0, - results = context.getElementsByTagName( tag ); - - // Filter out possible comments - if ( tag === "*" ) { - while ( (elem = results[i++]) ) { - if ( elem.nodeType === 1 ) { - tmp.push( elem ); - } - } - - return tmp; - } - return results; - }; - - // Class - Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { - if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) { - return context.getElementsByClassName( className ); - } - }; - - /* QSA/matchesSelector - ---------------------------------------------------------------------- */ - - // QSA and matchesSelector support - - // matchesSelector(:active) reports false when true (IE9/Opera 11.5) - rbuggyMatches = []; - - // qSa(:focus) reports false when true (Chrome 21) - // We allow this because of a bug in IE8/9 that throws an error - // whenever `document.activeElement` is accessed on an iframe - // So, we allow :focus to pass through QSA all the time to avoid the IE error - // See http://bugs.jquery.com/ticket/13378 - rbuggyQSA = []; - - if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) { - // Build QSA regex - // Regex strategy adopted from Diego Perini - assert(function( div ) { - // Select is set to empty string on purpose - // This is to test IE's treatment of not explicitly - // setting a boolean content attribute, - // since its presence should be enough - // http://bugs.jquery.com/ticket/12359 - div.innerHTML = ""; - - // Support: IE8 - // Boolean attributes and "value" are not treated correctly - if ( !div.querySelectorAll("[selected]").length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); - } - - // Webkit/Opera - :checked should return selected option elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - // IE8 throws error here and will not see later tests - if ( !div.querySelectorAll(":checked").length ) { - rbuggyQSA.push(":checked"); - } - }); - - assert(function( div ) { - - // Support: Opera 10-12/IE8 - // ^= $= *= and empty values - // Should not select anything - // Support: Windows 8 Native Apps - // The type attribute is restricted during .innerHTML assignment - var input = doc.createElement("input"); - input.setAttribute( "type", "hidden" ); - div.appendChild( input ).setAttribute( "t", "" ); - - if ( div.querySelectorAll("[t^='']").length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); - } - - // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) - // IE8 throws error here and will not see later tests - if ( !div.querySelectorAll(":enabled").length ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Opera 10-11 does not throw on post-comma invalid pseudos - div.querySelectorAll("*,:x"); - rbuggyQSA.push(",.*:"); - }); - } - - if ( (support.matchesSelector = rnative.test( (matches = docElem.webkitMatchesSelector || - docElem.mozMatchesSelector || - docElem.oMatchesSelector || - docElem.msMatchesSelector) )) ) { - - assert(function( div ) { - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9) - support.disconnectedMatch = matches.call( div, "div" ); - - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( div, "[s!='']:x" ); - rbuggyMatches.push( "!=", pseudos ); - }); - } - - rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); - rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); - - /* Contains - ---------------------------------------------------------------------- */ - - // Element contains another - // Purposefully does not implement inclusive descendent - // As in, an element does not contain itself - contains = rnative.test( docElem.contains ) || docElem.compareDocumentPosition ? - function( a, b ) { - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && ( - adown.contains ? - adown.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - )); - } : - function( a, b ) { - if ( b ) { - while ( (b = b.parentNode) ) { - if ( b === a ) { - return true; - } - } - } - return false; - }; - - /* Sorting - ---------------------------------------------------------------------- */ - - // Document order sorting - sortOrder = docElem.compareDocumentPosition ? - function( a, b ) { - - // Flag for duplicate removal - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - var compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b ); - - if ( compare ) { - // Disconnected nodes - if ( compare & 1 || - (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { - - // Choose the first element that is related to our preferred document - if ( a === doc || contains(preferredDoc, a) ) { - return -1; - } - if ( b === doc || contains(preferredDoc, b) ) { - return 1; - } - - // Maintain original order - return sortInput ? - ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : - 0; - } - - return compare & 4 ? -1 : 1; - } - - // Not directly comparable, sort on existence of method - return a.compareDocumentPosition ? -1 : 1; - } : - function( a, b ) { - var cur, - i = 0, - aup = a.parentNode, - bup = b.parentNode, - ap = [ a ], - bp = [ b ]; - - // Exit early if the nodes are identical - if ( a === b ) { - hasDuplicate = true; - return 0; - - // Parentless nodes are either documents or disconnected - } else if ( !aup || !bup ) { - return a === doc ? -1 : - b === doc ? 1 : - aup ? -1 : - bup ? 1 : - sortInput ? - ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : - 0; - - // If the nodes are siblings, we can do a quick check - } else if ( aup === bup ) { - return siblingCheck( a, b ); - } - - // Otherwise we need full lists of their ancestors for comparison - cur = a; - while ( (cur = cur.parentNode) ) { - ap.unshift( cur ); - } - cur = b; - while ( (cur = cur.parentNode) ) { - bp.unshift( cur ); - } - - // Walk down the tree looking for a discrepancy - while ( ap[i] === bp[i] ) { - i++; - } - - return i ? - // Do a sibling check if the nodes have a common ancestor - siblingCheck( ap[i], bp[i] ) : - - // Otherwise nodes in our document sort first - ap[i] === preferredDoc ? -1 : - bp[i] === preferredDoc ? 1 : - 0; - }; - - return doc; -}; - -Sizzle.matches = function( expr, elements ) { - return Sizzle( expr, null, null, elements ); -}; - -Sizzle.matchesSelector = function( elem, expr ) { - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } - - // Make sure that attribute selectors are quoted - expr = expr.replace( rattributeQuotes, "='$1']" ); - - if ( support.matchesSelector && documentIsHTML && - ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && - ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { - - try { - var ret = matches.call( elem, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || support.disconnectedMatch || - // As well, disconnected nodes are said to be in a document - // fragment in IE 9 - elem.document && elem.document.nodeType !== 11 ) { - return ret; - } - } catch(e) {} - } - - return Sizzle( expr, document, null, [elem] ).length > 0; -}; - -Sizzle.contains = function( context, elem ) { - // Set document vars if needed - if ( ( context.ownerDocument || context ) !== document ) { - setDocument( context ); - } - return contains( context, elem ); -}; - -Sizzle.attr = function( elem, name ) { - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } - - var fn = Expr.attrHandle[ name.toLowerCase() ], - // Don't get fooled by Object.prototype properties (jQuery #13807) - val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? - fn( elem, name, !documentIsHTML ) : - undefined; - - return val === undefined ? - support.attributes || !documentIsHTML ? - elem.getAttribute( name ) : - (val = elem.getAttributeNode(name)) && val.specified ? - val.value : - null : - val; -}; - -Sizzle.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); -}; - -/** - * Document sorting and removing duplicates - * @param {ArrayLike} results - */ -Sizzle.uniqueSort = function( results ) { - var elem, - duplicates = [], - j = 0, - i = 0; - - // Unless we *know* we can detect duplicates, assume their presence - hasDuplicate = !support.detectDuplicates; - sortInput = !support.sortStable && results.slice( 0 ); - results.sort( sortOrder ); - - if ( hasDuplicate ) { - while ( (elem = results[i++]) ) { - if ( elem === results[ i ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - results.splice( duplicates[ j ], 1 ); - } - } - - return results; -}; - -/** - * Utility function for retrieving the text value of an array of DOM nodes - * @param {Array|Element} elem - */ -getText = Sizzle.getText = function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - // If no nodeType, this is expected to be an array - for ( ; (node = elem[i]); i++ ) { - // Do not traverse comment nodes - ret += getText( node ); - } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - // Use textContent for elements - // innerText usage removed for consistency of new lines (see #11153) - if ( typeof elem.textContent === "string" ) { - return elem.textContent; - } else { - // Traverse its children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - ret += getText( elem ); - } - } - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - // Do not include comment or processing instruction nodes - - return ret; -}; - -Expr = Sizzle.selectors = { - - // Can be adjusted by the user - cacheLength: 50, - - createPseudo: markFunction, - - match: matchExpr, - - attrHandle: {}, - - find: {}, - - relative: { - ">": { dir: "parentNode", first: true }, - " ": { dir: "parentNode" }, - "+": { dir: "previousSibling", first: true }, - "~": { dir: "previousSibling" } - }, - - preFilter: { - "ATTR": function( match ) { - match[1] = match[1].replace( runescape, funescape ); - - // Move the given value to match[3] whether quoted or unquoted - match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape ); - - if ( match[2] === "~=" ) { - match[3] = " " + match[3] + " "; - } - - return match.slice( 0, 4 ); - }, - - "CHILD": function( match ) { - /* matches from matchExpr["CHILD"] - 1 type (only|nth|...) - 2 what (child|of-type) - 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) - 4 xn-component of xn+y argument ([+-]?\d*n|) - 5 sign of xn-component - 6 x of xn-component - 7 sign of y-component - 8 y of y-component - */ - match[1] = match[1].toLowerCase(); - - if ( match[1].slice( 0, 3 ) === "nth" ) { - // nth-* requires argument - if ( !match[3] ) { - Sizzle.error( match[0] ); - } - - // numeric x and y parameters for Expr.filter.CHILD - // remember that false/true cast respectively to 0/1 - match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); - match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); - - // other types prohibit arguments - } else if ( match[3] ) { - Sizzle.error( match[0] ); - } - - return match; - }, - - "PSEUDO": function( match ) { - var excess, - unquoted = !match[5] && match[2]; - - if ( matchExpr["CHILD"].test( match[0] ) ) { - return null; - } - - // Accept quoted arguments as-is - if ( match[3] && match[4] !== undefined ) { - match[2] = match[4]; - - // Strip excess characters from unquoted arguments - } else if ( unquoted && rpseudo.test( unquoted ) && - // Get excess from tokenize (recursively) - (excess = tokenize( unquoted, true )) && - // advance to the next closing parenthesis - (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { - - // excess is a negative index - match[0] = match[0].slice( 0, excess ); - match[2] = unquoted.slice( 0, excess ); - } - - // Return only captures needed by the pseudo filter method (type and argument) - return match.slice( 0, 3 ); - } - }, - - filter: { - - "TAG": function( nodeNameSelector ) { - var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); - return nodeNameSelector === "*" ? - function() { return true; } : - function( elem ) { - return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; - }; - }, - - "CLASS": function( className ) { - var pattern = classCache[ className + " " ]; - - return pattern || - (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && - classCache( className, function( elem ) { - return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" ); - }); - }, - - "ATTR": function( name, operator, check ) { - return function( elem ) { - var result = Sizzle.attr( elem, name ); - - if ( result == null ) { - return operator === "!="; - } - if ( !operator ) { - return true; - } - - result += ""; - - return operator === "=" ? result === check : - operator === "!=" ? result !== check : - operator === "^=" ? check && result.indexOf( check ) === 0 : - operator === "*=" ? check && result.indexOf( check ) > -1 : - operator === "$=" ? check && result.slice( -check.length ) === check : - operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : - operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : - false; - }; - }, - - "CHILD": function( type, what, argument, first, last ) { - var simple = type.slice( 0, 3 ) !== "nth", - forward = type.slice( -4 ) !== "last", - ofType = what === "of-type"; - - return first === 1 && last === 0 ? - - // Shortcut for :nth-*(n) - function( elem ) { - return !!elem.parentNode; - } : - - function( elem, context, xml ) { - var cache, outerCache, node, diff, nodeIndex, start, - dir = simple !== forward ? "nextSibling" : "previousSibling", - parent = elem.parentNode, - name = ofType && elem.nodeName.toLowerCase(), - useCache = !xml && !ofType; - - if ( parent ) { - - // :(first|last|only)-(child|of-type) - if ( simple ) { - while ( dir ) { - node = elem; - while ( (node = node[ dir ]) ) { - if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { - return false; - } - } - // Reverse direction for :only-* (if we haven't yet done so) - start = dir = type === "only" && !start && "nextSibling"; - } - return true; - } - - start = [ forward ? parent.firstChild : parent.lastChild ]; - - // non-xml :nth-child(...) stores cache data on `parent` - if ( forward && useCache ) { - // Seek `elem` from a previously-cached index - outerCache = parent[ expando ] || (parent[ expando ] = {}); - cache = outerCache[ type ] || []; - nodeIndex = cache[0] === dirruns && cache[1]; - diff = cache[0] === dirruns && cache[2]; - node = nodeIndex && parent.childNodes[ nodeIndex ]; - - while ( (node = ++nodeIndex && node && node[ dir ] || - - // Fallback to seeking `elem` from the start - (diff = nodeIndex = 0) || start.pop()) ) { - - // When found, cache indexes on `parent` and break - if ( node.nodeType === 1 && ++diff && node === elem ) { - outerCache[ type ] = [ dirruns, nodeIndex, diff ]; - break; - } - } - - // Use previously-cached element index if available - } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { - diff = cache[1]; - - // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...) - } else { - // Use the same loop as above to seek `elem` from the start - while ( (node = ++nodeIndex && node && node[ dir ] || - (diff = nodeIndex = 0) || start.pop()) ) { - - if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { - // Cache the index of each encountered element - if ( useCache ) { - (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; - } - - if ( node === elem ) { - break; - } - } - } - } - - // Incorporate the offset, then check against cycle size - diff -= last; - return diff === first || ( diff % first === 0 && diff / first >= 0 ); - } - }; - }, - - "PSEUDO": function( pseudo, argument ) { - // pseudo-class names are case-insensitive - // http://www.w3.org/TR/selectors/#pseudo-classes - // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters - // Remember that setFilters inherits from pseudos - var args, - fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || - Sizzle.error( "unsupported pseudo: " + pseudo ); - - // The user may use createPseudo to indicate that - // arguments are needed to create the filter function - // just as Sizzle does - if ( fn[ expando ] ) { - return fn( argument ); - } - - // But maintain support for old signatures - if ( fn.length > 1 ) { - args = [ pseudo, pseudo, "", argument ]; - return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? - markFunction(function( seed, matches ) { - var idx, - matched = fn( seed, argument ), - i = matched.length; - while ( i-- ) { - idx = indexOf.call( seed, matched[i] ); - seed[ idx ] = !( matches[ idx ] = matched[i] ); - } - }) : - function( elem ) { - return fn( elem, 0, args ); - }; - } - - return fn; - } - }, - - pseudos: { - // Potentially complex pseudos - "not": markFunction(function( selector ) { - // Trim the selector passed to compile - // to avoid treating leading and trailing - // spaces as combinators - var input = [], - results = [], - matcher = compile( selector.replace( rtrim, "$1" ) ); - - return matcher[ expando ] ? - markFunction(function( seed, matches, context, xml ) { - var elem, - unmatched = matcher( seed, null, xml, [] ), - i = seed.length; - - // Match elements unmatched by `matcher` - while ( i-- ) { - if ( (elem = unmatched[i]) ) { - seed[i] = !(matches[i] = elem); - } - } - }) : - function( elem, context, xml ) { - input[0] = elem; - matcher( input, null, xml, results ); - return !results.pop(); - }; - }), - - "has": markFunction(function( selector ) { - return function( elem ) { - return Sizzle( selector, elem ).length > 0; - }; - }), - - "contains": markFunction(function( text ) { - return function( elem ) { - return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; - }; - }), - - // "Whether an element is represented by a :lang() selector - // is based solely on the element's language value - // being equal to the identifier C, - // or beginning with the identifier C immediately followed by "-". - // The matching of C against the element's language value is performed case-insensitively. - // The identifier C does not have to be a valid language name." - // http://www.w3.org/TR/selectors/#lang-pseudo - "lang": markFunction( function( lang ) { - // lang value must be a valid identifier - if ( !ridentifier.test(lang || "") ) { - Sizzle.error( "unsupported lang: " + lang ); - } - lang = lang.replace( runescape, funescape ).toLowerCase(); - return function( elem ) { - var elemLang; - do { - if ( (elemLang = documentIsHTML ? - elem.lang : - elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { - - elemLang = elemLang.toLowerCase(); - return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; - } - } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); - return false; - }; - }), - - // Miscellaneous - "target": function( elem ) { - var hash = window.location && window.location.hash; - return hash && hash.slice( 1 ) === elem.id; - }, - - "root": function( elem ) { - return elem === docElem; - }, - - "focus": function( elem ) { - return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); - }, - - // Boolean properties - "enabled": function( elem ) { - return elem.disabled === false; - }, - - "disabled": function( elem ) { - return elem.disabled === true; - }, - - "checked": function( elem ) { - // In CSS3, :checked should return both checked and selected elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - var nodeName = elem.nodeName.toLowerCase(); - return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); - }, - - "selected": function( elem ) { - // Accessing this property makes selected-by-default - // options in Safari work properly - if ( elem.parentNode ) { - elem.parentNode.selectedIndex; - } - - return elem.selected === true; - }, - - // Contents - "empty": function( elem ) { - // http://www.w3.org/TR/selectors/#empty-pseudo - // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)), - // not comment, processing instructions, or others - // Thanks to Diego Perini for the nodeName shortcut - // Greater than "@" means alpha characters (specifically not starting with "#" or "?") - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) { - return false; - } - } - return true; - }, - - "parent": function( elem ) { - return !Expr.pseudos["empty"]( elem ); - }, - - // Element/input types - "header": function( elem ) { - return rheader.test( elem.nodeName ); - }, - - "input": function( elem ) { - return rinputs.test( elem.nodeName ); - }, - - "button": function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === "button" || name === "button"; - }, - - "text": function( elem ) { - var attr; - // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) - // use getAttribute instead to test this case - return elem.nodeName.toLowerCase() === "input" && - elem.type === "text" && - ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type ); - }, - - // Position-in-collection - "first": createPositionalPseudo(function() { - return [ 0 ]; - }), - - "last": createPositionalPseudo(function( matchIndexes, length ) { - return [ length - 1 ]; - }), - - "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { - return [ argument < 0 ? argument + length : argument ]; - }), - - "even": createPositionalPseudo(function( matchIndexes, length ) { - var i = 0; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "odd": createPositionalPseudo(function( matchIndexes, length ) { - var i = 1; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; --i >= 0; ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; ++i < length; ) { - matchIndexes.push( i ); - } - return matchIndexes; - }) - } -}; - -Expr.pseudos["nth"] = Expr.pseudos["eq"]; - -// Add button/input type pseudos -for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { - Expr.pseudos[ i ] = createInputPseudo( i ); -} -for ( i in { submit: true, reset: true } ) { - Expr.pseudos[ i ] = createButtonPseudo( i ); -} - -// Easy API for creating new setFilters -function setFilters() {} -setFilters.prototype = Expr.filters = Expr.pseudos; -Expr.setFilters = new setFilters(); - -function tokenize( selector, parseOnly ) { - var matched, match, tokens, type, - soFar, groups, preFilters, - cached = tokenCache[ selector + " " ]; - - if ( cached ) { - return parseOnly ? 0 : cached.slice( 0 ); - } - - soFar = selector; - groups = []; - preFilters = Expr.preFilter; - - while ( soFar ) { - - // Comma and first run - if ( !matched || (match = rcomma.exec( soFar )) ) { - if ( match ) { - // Don't consume trailing commas as valid - soFar = soFar.slice( match[0].length ) || soFar; - } - groups.push( tokens = [] ); - } - - matched = false; - - // Combinators - if ( (match = rcombinators.exec( soFar )) ) { - matched = match.shift(); - tokens.push({ - value: matched, - // Cast descendant combinators to space - type: match[0].replace( rtrim, " " ) - }); - soFar = soFar.slice( matched.length ); - } - - // Filters - for ( type in Expr.filter ) { - if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || - (match = preFilters[ type ]( match ))) ) { - matched = match.shift(); - tokens.push({ - value: matched, - type: type, - matches: match - }); - soFar = soFar.slice( matched.length ); - } - } - - if ( !matched ) { - break; - } - } - - // Return the length of the invalid excess - // if we're just parsing - // Otherwise, throw an error or return tokens - return parseOnly ? - soFar.length : - soFar ? - Sizzle.error( selector ) : - // Cache the tokens - tokenCache( selector, groups ).slice( 0 ); -} - -function toSelector( tokens ) { - var i = 0, - len = tokens.length, - selector = ""; - for ( ; i < len; i++ ) { - selector += tokens[i].value; - } - return selector; -} - -function addCombinator( matcher, combinator, base ) { - var dir = combinator.dir, - checkNonElements = base && dir === "parentNode", - doneName = done++; - - return combinator.first ? - // Check against closest ancestor/preceding element - function( elem, context, xml ) { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - return matcher( elem, context, xml ); - } - } - } : - - // Check against all ancestor/preceding elements - function( elem, context, xml ) { - var data, cache, outerCache, - dirkey = dirruns + " " + doneName; - - // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching - if ( xml ) { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - if ( matcher( elem, context, xml ) ) { - return true; - } - } - } - } else { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - outerCache = elem[ expando ] || (elem[ expando ] = {}); - if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) { - if ( (data = cache[1]) === true || data === cachedruns ) { - return data === true; - } - } else { - cache = outerCache[ dir ] = [ dirkey ]; - cache[1] = matcher( elem, context, xml ) || cachedruns; - if ( cache[1] === true ) { - return true; - } - } - } - } - } - }; -} - -function elementMatcher( matchers ) { - return matchers.length > 1 ? - function( elem, context, xml ) { - var i = matchers.length; - while ( i-- ) { - if ( !matchers[i]( elem, context, xml ) ) { - return false; - } - } - return true; - } : - matchers[0]; -} - -function condense( unmatched, map, filter, context, xml ) { - var elem, - newUnmatched = [], - i = 0, - len = unmatched.length, - mapped = map != null; - - for ( ; i < len; i++ ) { - if ( (elem = unmatched[i]) ) { - if ( !filter || filter( elem, context, xml ) ) { - newUnmatched.push( elem ); - if ( mapped ) { - map.push( i ); - } - } - } - } - - return newUnmatched; -} - -function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { - if ( postFilter && !postFilter[ expando ] ) { - postFilter = setMatcher( postFilter ); - } - if ( postFinder && !postFinder[ expando ] ) { - postFinder = setMatcher( postFinder, postSelector ); - } - return markFunction(function( seed, results, context, xml ) { - var temp, i, elem, - preMap = [], - postMap = [], - preexisting = results.length, - - // Get initial elements from seed or context - elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), - - // Prefilter to get matcher input, preserving a map for seed-results synchronization - matcherIn = preFilter && ( seed || !selector ) ? - condense( elems, preMap, preFilter, context, xml ) : - elems, - - matcherOut = matcher ? - // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, - postFinder || ( seed ? preFilter : preexisting || postFilter ) ? - - // ...intermediate processing is necessary - [] : - - // ...otherwise use results directly - results : - matcherIn; - - // Find primary matches - if ( matcher ) { - matcher( matcherIn, matcherOut, context, xml ); - } - - // Apply postFilter - if ( postFilter ) { - temp = condense( matcherOut, postMap ); - postFilter( temp, [], context, xml ); - - // Un-match failing elements by moving them back to matcherIn - i = temp.length; - while ( i-- ) { - if ( (elem = temp[i]) ) { - matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); - } - } - } - - if ( seed ) { - if ( postFinder || preFilter ) { - if ( postFinder ) { - // Get the final matcherOut by condensing this intermediate into postFinder contexts - temp = []; - i = matcherOut.length; - while ( i-- ) { - if ( (elem = matcherOut[i]) ) { - // Restore matcherIn since elem is not yet a final match - temp.push( (matcherIn[i] = elem) ); - } - } - postFinder( null, (matcherOut = []), temp, xml ); - } - - // Move matched elements from seed to results to keep them synchronized - i = matcherOut.length; - while ( i-- ) { - if ( (elem = matcherOut[i]) && - (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { - - seed[temp] = !(results[temp] = elem); - } - } - } - - // Add elements to results, through postFinder if defined - } else { - matcherOut = condense( - matcherOut === results ? - matcherOut.splice( preexisting, matcherOut.length ) : - matcherOut - ); - if ( postFinder ) { - postFinder( null, results, matcherOut, xml ); - } else { - push.apply( results, matcherOut ); - } - } - }); -} - -function matcherFromTokens( tokens ) { - var checkContext, matcher, j, - len = tokens.length, - leadingRelative = Expr.relative[ tokens[0].type ], - implicitRelative = leadingRelative || Expr.relative[" "], - i = leadingRelative ? 1 : 0, - - // The foundational matcher ensures that elements are reachable from top-level context(s) - matchContext = addCombinator( function( elem ) { - return elem === checkContext; - }, implicitRelative, true ), - matchAnyContext = addCombinator( function( elem ) { - return indexOf.call( checkContext, elem ) > -1; - }, implicitRelative, true ), - matchers = [ function( elem, context, xml ) { - return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( - (checkContext = context).nodeType ? - matchContext( elem, context, xml ) : - matchAnyContext( elem, context, xml ) ); - } ]; - - for ( ; i < len; i++ ) { - if ( (matcher = Expr.relative[ tokens[i].type ]) ) { - matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; - } else { - matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); - - // Return special upon seeing a positional matcher - if ( matcher[ expando ] ) { - // Find the next relative operator (if any) for proper handling - j = ++i; - for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[j].type ] ) { - break; - } - } - return setMatcher( - i > 1 && elementMatcher( matchers ), - i > 1 && toSelector( - // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) - ).replace( rtrim, "$1" ), - matcher, - i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), - j < len && toSelector( tokens ) - ); - } - matchers.push( matcher ); - } - } - - return elementMatcher( matchers ); -} - -function matcherFromGroupMatchers( elementMatchers, setMatchers ) { - // A counter to specify which element is currently being matched - var matcherCachedRuns = 0, - bySet = setMatchers.length > 0, - byElement = elementMatchers.length > 0, - superMatcher = function( seed, context, xml, results, expandContext ) { - var elem, j, matcher, - setMatched = [], - matchedCount = 0, - i = "0", - unmatched = seed && [], - outermost = expandContext != null, - contextBackup = outermostContext, - // We must always have either seed elements or context - elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ), - // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1); - - if ( outermost ) { - outermostContext = context !== document && context; - cachedruns = matcherCachedRuns; - } - - // Add elements passing elementMatchers directly to results - // Keep `i` a string if there are no elements so `matchedCount` will be "00" below - for ( ; (elem = elems[i]) != null; i++ ) { - if ( byElement && elem ) { - j = 0; - while ( (matcher = elementMatchers[j++]) ) { - if ( matcher( elem, context, xml ) ) { - results.push( elem ); - break; - } - } - if ( outermost ) { - dirruns = dirrunsUnique; - cachedruns = ++matcherCachedRuns; - } - } - - // Track unmatched elements for set filters - if ( bySet ) { - // They will have gone through all possible matchers - if ( (elem = !matcher && elem) ) { - matchedCount--; - } - - // Lengthen the array for every element, matched or not - if ( seed ) { - unmatched.push( elem ); - } - } - } - - // Apply set filters to unmatched elements - matchedCount += i; - if ( bySet && i !== matchedCount ) { - j = 0; - while ( (matcher = setMatchers[j++]) ) { - matcher( unmatched, setMatched, context, xml ); - } - - if ( seed ) { - // Reintegrate element matches to eliminate the need for sorting - if ( matchedCount > 0 ) { - while ( i-- ) { - if ( !(unmatched[i] || setMatched[i]) ) { - setMatched[i] = pop.call( results ); - } - } - } - - // Discard index placeholder values to get only actual matches - setMatched = condense( setMatched ); - } - - // Add matches to results - push.apply( results, setMatched ); - - // Seedless set matches succeeding multiple successful matchers stipulate sorting - if ( outermost && !seed && setMatched.length > 0 && - ( matchedCount + setMatchers.length ) > 1 ) { - - Sizzle.uniqueSort( results ); - } - } - - // Override manipulation of globals by nested matchers - if ( outermost ) { - dirruns = dirrunsUnique; - outermostContext = contextBackup; - } - - return unmatched; - }; - - return bySet ? - markFunction( superMatcher ) : - superMatcher; -} - -compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) { - var i, - setMatchers = [], - elementMatchers = [], - cached = compilerCache[ selector + " " ]; - - if ( !cached ) { - // Generate a function of recursive functions that can be used to check each element - if ( !group ) { - group = tokenize( selector ); - } - i = group.length; - while ( i-- ) { - cached = matcherFromTokens( group[i] ); - if ( cached[ expando ] ) { - setMatchers.push( cached ); - } else { - elementMatchers.push( cached ); - } - } - - // Cache the compiled function - cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); - } - return cached; -}; - -function multipleContexts( selector, contexts, results ) { - var i = 0, - len = contexts.length; - for ( ; i < len; i++ ) { - Sizzle( selector, contexts[i], results ); - } - return results; -} - -function select( selector, context, results, seed ) { - var i, tokens, token, type, find, - match = tokenize( selector ); - - if ( !seed ) { - // Try to minimize operations if there is only one group - if ( match.length === 1 ) { - - // Take a shortcut and set the context if the root selector is an ID - tokens = match[0] = match[0].slice( 0 ); - if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && - support.getById && context.nodeType === 9 && documentIsHTML && - Expr.relative[ tokens[1].type ] ) { - - context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; - if ( !context ) { - return results; - } - selector = selector.slice( tokens.shift().value.length ); - } - - // Fetch a seed set for right-to-left matching - i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; - while ( i-- ) { - token = tokens[i]; - - // Abort if we hit a combinator - if ( Expr.relative[ (type = token.type) ] ) { - break; - } - if ( (find = Expr.find[ type ]) ) { - // Search, expanding context for leading sibling combinators - if ( (seed = find( - token.matches[0].replace( runescape, funescape ), - rsibling.test( tokens[0].type ) && context.parentNode || context - )) ) { - - // If seed is empty or no tokens remain, we can return early - tokens.splice( i, 1 ); - selector = seed.length && toSelector( tokens ); - if ( !selector ) { - push.apply( results, seed ); - return results; - } - - break; - } - } - } - } - } - - // Compile and execute a filtering function - // Provide `match` to avoid retokenization if we modified the selector above - compile( selector, match )( - seed, - context, - !documentIsHTML, - results, - rsibling.test( selector ) - ); - return results; -} - -// One-time assignments - -// Sort stability -support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; - -// Support: Chrome<14 -// Always assume duplicates if they aren't passed to the comparison function -support.detectDuplicates = hasDuplicate; - -// Initialize against the default document -setDocument(); - -// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) -// Detached nodes confoundingly follow *each other* -support.sortDetached = assert(function( div1 ) { - // Should return 1, but returns 4 (following) - return div1.compareDocumentPosition( document.createElement("div") ) & 1; -}); - -// Support: IE<8 -// Prevent attribute/property "interpolation" -// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !assert(function( div ) { - div.innerHTML = ""; - return div.firstChild.getAttribute("href") === "#" ; -}) ) { - addHandle( "type|href|height|width", function( elem, name, isXML ) { - if ( !isXML ) { - return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); - } - }); -} - -// Support: IE<9 -// Use defaultValue in place of getAttribute("value") -if ( !support.attributes || !assert(function( div ) { - div.innerHTML = ""; - div.firstChild.setAttribute( "value", "" ); - return div.firstChild.getAttribute( "value" ) === ""; -}) ) { - addHandle( "value", function( elem, name, isXML ) { - if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { - return elem.defaultValue; - } - }); -} - -// Support: IE<9 -// Use getAttributeNode to fetch booleans when getAttribute lies -if ( !assert(function( div ) { - return div.getAttribute("disabled") == null; -}) ) { - addHandle( booleans, function( elem, name, isXML ) { - var val; - if ( !isXML ) { - return (val = elem.getAttributeNode( name )) && val.specified ? - val.value : - elem[ name ] === true ? name.toLowerCase() : null; - } - }); -} - -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; -jQuery.expr[":"] = jQuery.expr.pseudos; -jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; - - -})( window ); -// String to Object options format cache -var optionsCache = {}; - -// Convert String-formatted options into Object-formatted ones and store in cache -function createOptions( options ) { - var object = optionsCache[ options ] = {}; - jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) { - object[ flag ] = true; - }); - return object; -} - -/* - * Create a callback list using the following parameters: - * - * options: an optional list of space-separated options that will change how - * the callback list behaves or a more traditional option object - * - * By default a callback list will act like an event callback list and can be - * "fired" multiple times. - * - * Possible options: - * - * once: will ensure the callback list can only be fired once (like a Deferred) - * - * memory: will keep track of previous values and will call any callback added - * after the list has been fired right away with the latest "memorized" - * values (like a Deferred) - * - * unique: will ensure a callback can only be added once (no duplicate in the list) - * - * stopOnFalse: interrupt callings when a callback returns false - * - */ -jQuery.Callbacks = function( options ) { - - // Convert options from String-formatted to Object-formatted if needed - // (we check in cache first) - options = typeof options === "string" ? - ( optionsCache[ options ] || createOptions( options ) ) : - jQuery.extend( {}, options ); - - var // Flag to know if list is currently firing - firing, - // Last fire value (for non-forgettable lists) - memory, - // Flag to know if list was already fired - fired, - // End of the loop when firing - firingLength, - // Index of currently firing callback (modified by remove if needed) - firingIndex, - // First callback to fire (used internally by add and fireWith) - firingStart, - // Actual callback list - list = [], - // Stack of fire calls for repeatable lists - stack = !options.once && [], - // Fire callbacks - fire = function( data ) { - memory = options.memory && data; - fired = true; - firingIndex = firingStart || 0; - firingStart = 0; - firingLength = list.length; - firing = true; - for ( ; list && firingIndex < firingLength; firingIndex++ ) { - if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { - memory = false; // To prevent further calls using add - break; - } - } - firing = false; - if ( list ) { - if ( stack ) { - if ( stack.length ) { - fire( stack.shift() ); - } - } else if ( memory ) { - list = []; - } else { - self.disable(); - } - } - }, - // Actual Callbacks object - self = { - // Add a callback or a collection of callbacks to the list - add: function() { - if ( list ) { - // First, we save the current length - var start = list.length; - (function add( args ) { - jQuery.each( args, function( _, arg ) { - var type = jQuery.type( arg ); - if ( type === "function" ) { - if ( !options.unique || !self.has( arg ) ) { - list.push( arg ); - } - } else if ( arg && arg.length && type !== "string" ) { - // Inspect recursively - add( arg ); - } - }); - })( arguments ); - // Do we need to add the callbacks to the - // current firing batch? - if ( firing ) { - firingLength = list.length; - // With memory, if we're not firing then - // we should call right away - } else if ( memory ) { - firingStart = start; - fire( memory ); - } - } - return this; - }, - // Remove a callback from the list - remove: function() { - if ( list ) { - jQuery.each( arguments, function( _, arg ) { - var index; - while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { - list.splice( index, 1 ); - // Handle firing indexes - if ( firing ) { - if ( index <= firingLength ) { - firingLength--; - } - if ( index <= firingIndex ) { - firingIndex--; - } - } - } - }); - } - return this; - }, - // Check if a given callback is in the list. - // If no argument is given, return whether or not list has callbacks attached. - has: function( fn ) { - return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length ); - }, - // Remove all callbacks from the list - empty: function() { - list = []; - firingLength = 0; - return this; - }, - // Have the list do nothing anymore - disable: function() { - list = stack = memory = undefined; - return this; - }, - // Is it disabled? - disabled: function() { - return !list; - }, - // Lock the list in its current state - lock: function() { - stack = undefined; - if ( !memory ) { - self.disable(); - } - return this; - }, - // Is it locked? - locked: function() { - return !stack; - }, - // Call all callbacks with the given context and arguments - fireWith: function( context, args ) { - if ( list && ( !fired || stack ) ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - if ( firing ) { - stack.push( args ); - } else { - fire( args ); - } - } - return this; - }, - // Call all the callbacks with the given arguments - fire: function() { - self.fireWith( this, arguments ); - return this; - }, - // To know if the callbacks have already been called at least once - fired: function() { - return !!fired; - } - }; - - return self; -}; -jQuery.extend({ - - Deferred: function( func ) { - var tuples = [ - // action, add listener, listener list, final state - [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], - [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], - [ "notify", "progress", jQuery.Callbacks("memory") ] - ], - state = "pending", - promise = { - state: function() { - return state; - }, - always: function() { - deferred.done( arguments ).fail( arguments ); - return this; - }, - then: function( /* fnDone, fnFail, fnProgress */ ) { - var fns = arguments; - return jQuery.Deferred(function( newDefer ) { - jQuery.each( tuples, function( i, tuple ) { - var action = tuple[ 0 ], - fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; - // deferred[ done | fail | progress ] for forwarding actions to newDefer - deferred[ tuple[1] ](function() { - var returned = fn && fn.apply( this, arguments ); - if ( returned && jQuery.isFunction( returned.promise ) ) { - returned.promise() - .done( newDefer.resolve ) - .fail( newDefer.reject ) - .progress( newDefer.notify ); - } else { - newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); - } - }); - }); - fns = null; - }).promise(); - }, - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - return obj != null ? jQuery.extend( obj, promise ) : promise; - } - }, - deferred = {}; - - // Keep pipe for back-compat - promise.pipe = promise.then; - - // Add list-specific methods - jQuery.each( tuples, function( i, tuple ) { - var list = tuple[ 2 ], - stateString = tuple[ 3 ]; - - // promise[ done | fail | progress ] = list.add - promise[ tuple[1] ] = list.add; - - // Handle state - if ( stateString ) { - list.add(function() { - // state = [ resolved | rejected ] - state = stateString; - - // [ reject_list | resolve_list ].disable; progress_list.lock - }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); - } - - // deferred[ resolve | reject | notify ] - deferred[ tuple[0] ] = function() { - deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); - return this; - }; - deferred[ tuple[0] + "With" ] = list.fireWith; - }); - - // Make the deferred a promise - promise.promise( deferred ); - - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - - // All done! - return deferred; - }, - - // Deferred helper - when: function( subordinate /* , ..., subordinateN */ ) { - var i = 0, - resolveValues = core_slice.call( arguments ), - length = resolveValues.length, - - // the count of uncompleted subordinates - remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, - - // the master Deferred. If resolveValues consist of only a single Deferred, just use that. - deferred = remaining === 1 ? subordinate : jQuery.Deferred(), - - // Update function for both resolve and progress values - updateFunc = function( i, contexts, values ) { - return function( value ) { - contexts[ i ] = this; - values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value; - if( values === progressValues ) { - deferred.notifyWith( contexts, values ); - } else if ( !( --remaining ) ) { - deferred.resolveWith( contexts, values ); - } - }; - }, - - progressValues, progressContexts, resolveContexts; - - // add listeners to Deferred subordinates; treat others as resolved - if ( length > 1 ) { - progressValues = new Array( length ); - progressContexts = new Array( length ); - resolveContexts = new Array( length ); - for ( ; i < length; i++ ) { - if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { - resolveValues[ i ].promise() - .done( updateFunc( i, resolveContexts, resolveValues ) ) - .fail( deferred.reject ) - .progress( updateFunc( i, progressContexts, progressValues ) ); - } else { - --remaining; - } - } - } - - // if we're not waiting on anything, resolve the master - if ( !remaining ) { - deferred.resolveWith( resolveContexts, resolveValues ); - } - - return deferred.promise(); - } -}); -jQuery.support = (function( support ) { - - var all, a, input, select, fragment, opt, eventName, isSupported, i, - div = document.createElement("div"); - - // Setup - div.setAttribute( "className", "t" ); - div.innerHTML = "
a"; - - // Finish early in limited (non-browser) environments - all = div.getElementsByTagName("*") || []; - a = div.getElementsByTagName("a")[ 0 ]; - if ( !a || !a.style || !all.length ) { - return support; - } - - // First batch of tests - select = document.createElement("select"); - opt = select.appendChild( document.createElement("option") ); - input = div.getElementsByTagName("input")[ 0 ]; - - a.style.cssText = "top:1px;float:left;opacity:.5"; - - // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) - support.getSetAttribute = div.className !== "t"; - - // IE strips leading whitespace when .innerHTML is used - support.leadingWhitespace = div.firstChild.nodeType === 3; - - // Make sure that tbody elements aren't automatically inserted - // IE will insert them into empty tables - support.tbody = !div.getElementsByTagName("tbody").length; - - // Make sure that link elements get serialized correctly by innerHTML - // This requires a wrapper element in IE - support.htmlSerialize = !!div.getElementsByTagName("link").length; - - // Get the style information from getAttribute - // (IE uses .cssText instead) - support.style = /top/.test( a.getAttribute("style") ); - - // Make sure that URLs aren't manipulated - // (IE normalizes it by default) - support.hrefNormalized = a.getAttribute("href") === "/a"; - - // Make sure that element opacity exists - // (IE uses filter instead) - // Use a regex to work around a WebKit issue. See #5145 - support.opacity = /^0.5/.test( a.style.opacity ); - - // Verify style float existence - // (IE uses styleFloat instead of cssFloat) - support.cssFloat = !!a.style.cssFloat; - - // Check the default checkbox/radio value ("" on WebKit; "on" elsewhere) - support.checkOn = !!input.value; - - // Make sure that a selected-by-default option has a working selected property. - // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) - support.optSelected = opt.selected; - - // Tests for enctype support on a form (#6743) - support.enctype = !!document.createElement("form").enctype; - - // Makes sure cloning an html5 element does not cause problems - // Where outerHTML is undefined, this still works - support.html5Clone = document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav>"; - - // Will be defined later - support.inlineBlockNeedsLayout = false; - support.shrinkWrapBlocks = false; - support.pixelPosition = false; - support.deleteExpando = true; - support.noCloneEvent = true; - support.reliableMarginRight = true; - support.boxSizingReliable = true; - - // Make sure checked status is properly cloned - input.checked = true; - support.noCloneChecked = input.cloneNode( true ).checked; - - // Make sure that the options inside disabled selects aren't marked as disabled - // (WebKit marks them as disabled) - select.disabled = true; - support.optDisabled = !opt.disabled; - - // Support: IE<9 - try { - delete div.test; - } catch( e ) { - support.deleteExpando = false; - } - - // Check if we can trust getAttribute("value") - input = document.createElement("input"); - input.setAttribute( "value", "" ); - support.input = input.getAttribute( "value" ) === ""; - - // Check if an input maintains its value after becoming a radio - input.value = "t"; - input.setAttribute( "type", "radio" ); - support.radioValue = input.value === "t"; - - // #11217 - WebKit loses check when the name is after the checked attribute - input.setAttribute( "checked", "t" ); - input.setAttribute( "name", "t" ); - - fragment = document.createDocumentFragment(); - fragment.appendChild( input ); - - // Check if a disconnected checkbox will retain its checked - // value of true after appended to the DOM (IE6/7) - support.appendChecked = input.checked; - - // WebKit doesn't clone checked state correctly in fragments - support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE<9 - // Opera does not clone events (and typeof div.attachEvent === undefined). - // IE9-10 clones events bound via attachEvent, but they don't trigger with .click() - if ( div.attachEvent ) { - div.attachEvent( "onclick", function() { - support.noCloneEvent = false; - }); - - div.cloneNode( true ).click(); - } - - // Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event) - // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP) - for ( i in { submit: true, change: true, focusin: true }) { - div.setAttribute( eventName = "on" + i, "t" ); - - support[ i + "Bubbles" ] = eventName in window || div.attributes[ eventName ].expando === false; - } - - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - // Support: IE<9 - // Iteration over object's inherited properties before its own. - for ( i in jQuery( support ) ) { - break; - } - support.ownLast = i !== "0"; - - // Run tests that need a body at doc ready - jQuery(function() { - var container, marginDiv, tds, - divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;", - body = document.getElementsByTagName("body")[0]; - - if ( !body ) { - // Return for frameset docs that don't have a body - return; - } - - container = document.createElement("div"); - container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px"; - - body.appendChild( container ).appendChild( div ); - - // Support: IE8 - // Check if table cells still have offsetWidth/Height when they are set - // to display:none and there are still other visible table cells in a - // table row; if so, offsetWidth/Height are not reliable for use when - // determining if an element has been hidden directly using - // display:none (it is still safe to use offsets if a parent element is - // hidden; don safety goggles and see bug #4512 for more information). - div.innerHTML = "
t
"; - tds = div.getElementsByTagName("td"); - tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none"; - isSupported = ( tds[ 0 ].offsetHeight === 0 ); - - tds[ 0 ].style.display = ""; - tds[ 1 ].style.display = "none"; - - // Support: IE8 - // Check if empty table cells still have offsetWidth/Height - support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); - - // Check box-sizing and margin behavior. - div.innerHTML = ""; - div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;"; - - // Workaround failing boxSizing test due to offsetWidth returning wrong value - // with some non-1 values of body zoom, ticket #13543 - jQuery.swap( body, body.style.zoom != null ? { zoom: 1 } : {}, function() { - support.boxSizing = div.offsetWidth === 4; - }); - - // Use window.getComputedStyle because jsdom on node.js will break without it. - if ( window.getComputedStyle ) { - support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%"; - support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px"; - - // Check if div with explicit width and no margin-right incorrectly - // gets computed margin-right based on width of container. (#3333) - // Fails in WebKit before Feb 2011 nightlies - // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right - marginDiv = div.appendChild( document.createElement("div") ); - marginDiv.style.cssText = div.style.cssText = divReset; - marginDiv.style.marginRight = marginDiv.style.width = "0"; - div.style.width = "1px"; - - support.reliableMarginRight = - !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight ); - } - - if ( typeof div.style.zoom !== core_strundefined ) { - // Support: IE<8 - // Check if natively block-level elements act like inline-block - // elements when setting their display to 'inline' and giving - // them layout - div.innerHTML = ""; - div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1"; - support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); - - // Support: IE6 - // Check if elements with layout shrink-wrap their children - div.style.display = "block"; - div.innerHTML = "
"; - div.firstChild.style.width = "5px"; - support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); - - if ( support.inlineBlockNeedsLayout ) { - // Prevent IE 6 from affecting layout for positioned elements #11048 - // Prevent IE from shrinking the body in IE 7 mode #12869 - // Support: IE<8 - body.style.zoom = 1; - } - } - - body.removeChild( container ); - - // Null elements to avoid leaks in IE - container = div = tds = marginDiv = null; - }); - - // Null elements to avoid leaks in IE - all = select = fragment = opt = a = input = null; - - return support; -})({}); - -var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/, - rmultiDash = /([A-Z])/g; - -function internalData( elem, name, data, pvt /* Internal Use Only */ ){ - if ( !jQuery.acceptData( elem ) ) { - return; - } - - var ret, thisCache, - internalKey = jQuery.expando, - - // We have to handle DOM nodes and JS objects differently because IE6-7 - // can't GC object references properly across the DOM-JS boundary - isNode = elem.nodeType, - - // Only DOM nodes need the global jQuery cache; JS object data is - // attached directly to the object so GC can occur automatically - cache = isNode ? jQuery.cache : elem, - - // Only defining an ID for JS objects if its cache already exists allows - // the code to shortcut on the same path as a DOM node with no cache - id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; - - // Avoid doing any more work than we need to when trying to get data on an - // object that has no data at all - if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) { - return; - } - - if ( !id ) { - // Only DOM nodes need a new unique ID for each element since their data - // ends up in the global cache - if ( isNode ) { - id = elem[ internalKey ] = core_deletedIds.pop() || jQuery.guid++; - } else { - id = internalKey; - } - } - - if ( !cache[ id ] ) { - // Avoid exposing jQuery metadata on plain JS objects when the object - // is serialized using JSON.stringify - cache[ id ] = isNode ? {} : { toJSON: jQuery.noop }; - } - - // An object can be passed to jQuery.data instead of a key/value pair; this gets - // shallow copied over onto the existing cache - if ( typeof name === "object" || typeof name === "function" ) { - if ( pvt ) { - cache[ id ] = jQuery.extend( cache[ id ], name ); - } else { - cache[ id ].data = jQuery.extend( cache[ id ].data, name ); - } - } - - thisCache = cache[ id ]; - - // jQuery data() is stored in a separate object inside the object's internal data - // cache in order to avoid key collisions between internal data and user-defined - // data. - if ( !pvt ) { - if ( !thisCache.data ) { - thisCache.data = {}; - } - - thisCache = thisCache.data; - } - - if ( data !== undefined ) { - thisCache[ jQuery.camelCase( name ) ] = data; - } - - // Check for both converted-to-camel and non-converted data property names - // If a data property was specified - if ( typeof name === "string" ) { - - // First Try to find as-is property data - ret = thisCache[ name ]; - - // Test for null|undefined property data - if ( ret == null ) { - - // Try to find the camelCased property - ret = thisCache[ jQuery.camelCase( name ) ]; - } - } else { - ret = thisCache; - } - - return ret; -} - -function internalRemoveData( elem, name, pvt ) { - if ( !jQuery.acceptData( elem ) ) { - return; - } - - var thisCache, i, - isNode = elem.nodeType, - - // See jQuery.data for more information - cache = isNode ? jQuery.cache : elem, - id = isNode ? elem[ jQuery.expando ] : jQuery.expando; - - // If there is already no cache entry for this object, there is no - // purpose in continuing - if ( !cache[ id ] ) { - return; - } - - if ( name ) { - - thisCache = pvt ? cache[ id ] : cache[ id ].data; - - if ( thisCache ) { - - // Support array or space separated string names for data keys - if ( !jQuery.isArray( name ) ) { - - // try the string as a key before any manipulation - if ( name in thisCache ) { - name = [ name ]; - } else { - - // split the camel cased version by spaces unless a key with the spaces exists - name = jQuery.camelCase( name ); - if ( name in thisCache ) { - name = [ name ]; - } else { - name = name.split(" "); - } - } - } else { - // If "name" is an array of keys... - // When data is initially created, via ("key", "val") signature, - // keys will be converted to camelCase. - // Since there is no way to tell _how_ a key was added, remove - // both plain key and camelCase key. #12786 - // This will only penalize the array argument path. - name = name.concat( jQuery.map( name, jQuery.camelCase ) ); - } - - i = name.length; - while ( i-- ) { - delete thisCache[ name[i] ]; - } - - // If there is no data left in the cache, we want to continue - // and let the cache object itself get destroyed - if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) { - return; - } - } - } - - // See jQuery.data for more information - if ( !pvt ) { - delete cache[ id ].data; - - // Don't destroy the parent cache unless the internal data object - // had been the only thing left in it - if ( !isEmptyDataObject( cache[ id ] ) ) { - return; - } - } - - // Destroy the cache - if ( isNode ) { - jQuery.cleanData( [ elem ], true ); - - // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) - /* jshint eqeqeq: false */ - } else if ( jQuery.support.deleteExpando || cache != cache.window ) { - /* jshint eqeqeq: true */ - delete cache[ id ]; - - // When all else fails, null - } else { - cache[ id ] = null; - } -} - -jQuery.extend({ - cache: {}, - - // The following elements throw uncatchable exceptions if you - // attempt to add expando properties to them. - noData: { - "applet": true, - "embed": true, - // Ban all objects except for Flash (which handle expandos) - "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" - }, - - hasData: function( elem ) { - elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; - return !!elem && !isEmptyDataObject( elem ); - }, - - data: function( elem, name, data ) { - return internalData( elem, name, data ); - }, - - removeData: function( elem, name ) { - return internalRemoveData( elem, name ); - }, - - // For internal use only. - _data: function( elem, name, data ) { - return internalData( elem, name, data, true ); - }, - - _removeData: function( elem, name ) { - return internalRemoveData( elem, name, true ); - }, - - // A method for determining if a DOM node can handle the data expando - acceptData: function( elem ) { - // Do not set data on non-element because it will not be cleared (#8335). - if ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) { - return false; - } - - var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ]; - - // nodes accept data unless otherwise specified; rejection can be conditional - return !noData || noData !== true && elem.getAttribute("classid") === noData; - } -}); - -jQuery.fn.extend({ - data: function( key, value ) { - var attrs, name, - data = null, - i = 0, - elem = this[0]; - - // Special expections of .data basically thwart jQuery.access, - // so implement the relevant behavior ourselves - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = jQuery.data( elem ); - - if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { - attrs = elem.attributes; - for ( ; i < attrs.length; i++ ) { - name = attrs[i].name; - - if ( name.indexOf("data-") === 0 ) { - name = jQuery.camelCase( name.slice(5) ); - - dataAttr( elem, name, data[ name ] ); - } - } - jQuery._data( elem, "parsedAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each(function() { - jQuery.data( this, key ); - }); - } - - return arguments.length > 1 ? - - // Sets one value - this.each(function() { - jQuery.data( this, key, value ); - }) : - - // Gets one value - // Try to fetch any internally stored data first - elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null; - }, - - removeData: function( key ) { - return this.each(function() { - jQuery.removeData( this, key ); - }); - } -}); - -function dataAttr( elem, key, data ) { - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - - var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); - - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = data === "true" ? true : - data === "false" ? false : - data === "null" ? null : - // Only convert to a number if it doesn't change the string - +data + "" === data ? +data : - rbrace.test( data ) ? jQuery.parseJSON( data ) : - data; - } catch( e ) {} - - // Make sure we set the data so it isn't changed later - jQuery.data( elem, key, data ); - - } else { - data = undefined; - } - } - - return data; -} - -// checks a cache object for emptiness -function isEmptyDataObject( obj ) { - var name; - for ( name in obj ) { - - // if the public data object is empty, the private is still empty - if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { - continue; - } - if ( name !== "toJSON" ) { - return false; - } - } - - return true; -} -jQuery.extend({ - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = jQuery._data( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || jQuery.isArray(data) ) { - queue = jQuery._data( elem, type, jQuery.makeArray(data) ); - } else { - queue.push( data ); - } - } - return queue || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - startLength = queue.length, - fn = queue.shift(), - hooks = jQuery._queueHooks( elem, type ), - next = function() { - jQuery.dequeue( elem, type ); - }; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } - - if ( fn ) { - - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - // clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } - - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, - - // not intended for public consumption - generates a queueHooks object, or returns the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return jQuery._data( elem, key ) || jQuery._data( elem, key, { - empty: jQuery.Callbacks("once memory").add(function() { - jQuery._removeData( elem, type + "queue" ); - jQuery._removeData( elem, key ); - }) - }); - } -}); - -jQuery.fn.extend({ - queue: function( type, data ) { - var setter = 2; - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - setter--; - } - - if ( arguments.length < setter ) { - return jQuery.queue( this[0], type ); - } - - return data === undefined ? - this : - this.each(function() { - var queue = jQuery.queue( this, type, data ); - - // ensure a hooks for this queue - jQuery._queueHooks( this, type ); - - if ( type === "fx" && queue[0] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - }); - }, - dequeue: function( type ) { - return this.each(function() { - jQuery.dequeue( this, type ); - }); - }, - // Based off of the plugin by Clint Helfers, with permission. - // http://blindsignals.com/index.php/2009/07/jquery-delay/ - delay: function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; - - return this.queue( type, function( next, hooks ) { - var timeout = setTimeout( next, time ); - hooks.stop = function() { - clearTimeout( timeout ); - }; - }); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, obj ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; - - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; - - while( i-- ) { - tmp = jQuery._data( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -}); -var nodeHook, boolHook, - rclass = /[\t\r\n\f]/g, - rreturn = /\r/g, - rfocusable = /^(?:input|select|textarea|button|object)$/i, - rclickable = /^(?:a|area)$/i, - ruseDefault = /^(?:checked|selected)$/i, - getSetAttribute = jQuery.support.getSetAttribute, - getSetInput = jQuery.support.input; - -jQuery.fn.extend({ - attr: function( name, value ) { - return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each(function() { - jQuery.removeAttr( this, name ); - }); - }, - - prop: function( name, value ) { - return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - name = jQuery.propFix[ name ] || name; - return this.each(function() { - // try/catch handles cases where IE balks (such as removing a property on window) - try { - this[ name ] = undefined; - delete this[ name ]; - } catch( e ) {} - }); - }, - - addClass: function( value ) { - var classes, elem, cur, clazz, j, - i = 0, - len = this.length, - proceed = typeof value === "string" && value; - - if ( jQuery.isFunction( value ) ) { - return this.each(function( j ) { - jQuery( this ).addClass( value.call( this, j, this.className ) ); - }); - } - - if ( proceed ) { - // The disjunction here is for better compressibility (see removeClass) - classes = ( value || "" ).match( core_rnotwhite ) || []; - - for ( ; i < len; i++ ) { - elem = this[ i ]; - cur = elem.nodeType === 1 && ( elem.className ? - ( " " + elem.className + " " ).replace( rclass, " " ) : - " " - ); - - if ( cur ) { - j = 0; - while ( (clazz = classes[j++]) ) { - if ( cur.indexOf( " " + clazz + " " ) < 0 ) { - cur += clazz + " "; - } - } - elem.className = jQuery.trim( cur ); - - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classes, elem, cur, clazz, j, - i = 0, - len = this.length, - proceed = arguments.length === 0 || typeof value === "string" && value; - - if ( jQuery.isFunction( value ) ) { - return this.each(function( j ) { - jQuery( this ).removeClass( value.call( this, j, this.className ) ); - }); - } - if ( proceed ) { - classes = ( value || "" ).match( core_rnotwhite ) || []; - - for ( ; i < len; i++ ) { - elem = this[ i ]; - // This expression is here for better compressibility (see addClass) - cur = elem.nodeType === 1 && ( elem.className ? - ( " " + elem.className + " " ).replace( rclass, " " ) : - "" - ); - - if ( cur ) { - j = 0; - while ( (clazz = classes[j++]) ) { - // Remove *all* instances - while ( cur.indexOf( " " + clazz + " " ) >= 0 ) { - cur = cur.replace( " " + clazz + " ", " " ); - } - } - elem.className = value ? jQuery.trim( cur ) : ""; - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value; - - if ( typeof stateVal === "boolean" && type === "string" ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } - - if ( jQuery.isFunction( value ) ) { - return this.each(function( i ) { - jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); - }); - } - - return this.each(function() { - if ( type === "string" ) { - // toggle individual class names - var className, - i = 0, - self = jQuery( this ), - classNames = value.match( core_rnotwhite ) || []; - - while ( (className = classNames[ i++ ]) ) { - // check each className given, space separated list - if ( self.hasClass( className ) ) { - self.removeClass( className ); - } else { - self.addClass( className ); - } - } - - // Toggle whole class name - } else if ( type === core_strundefined || type === "boolean" ) { - if ( this.className ) { - // store className if set - jQuery._data( this, "__className__", this.className ); - } - - // If the element has a class name or if we're passed "false", - // then remove the whole classname (if there was one, the above saved it). - // Otherwise bring back whatever was previously saved (if anything), - // falling back to the empty string if nothing was stored. - this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; - } - }); - }, - - hasClass: function( selector ) { - var className = " " + selector + " ", - i = 0, - l = this.length; - for ( ; i < l; i++ ) { - if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) { - return true; - } - } - - return false; - }, - - val: function( value ) { - var ret, hooks, isFunction, - elem = this[0]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; - - if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { - return ret; - } - - ret = elem.value; - - return typeof ret === "string" ? - // handle most common string cases - ret.replace(rreturn, "") : - // handle cases where value is null/undef or number - ret == null ? "" : ret; - } - - return; - } - - isFunction = jQuery.isFunction( value ); - - return this.each(function( i ) { - var val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( isFunction ) { - val = value.call( this, i, jQuery( this ).val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - } else if ( typeof val === "number" ) { - val += ""; - } else if ( jQuery.isArray( val ) ) { - val = jQuery.map(val, function ( value ) { - return value == null ? "" : value + ""; - }); - } - - hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - }); - } -}); - -jQuery.extend({ - valHooks: { - option: { - get: function( elem ) { - // Use proper attribute retrieval(#6932, #12072) - var val = jQuery.find.attr( elem, "value" ); - return val != null ? - val : - elem.text; - } - }, - select: { - get: function( elem ) { - var value, option, - options = elem.options, - index = elem.selectedIndex, - one = elem.type === "select-one" || index < 0, - values = one ? null : [], - max = one ? index + 1 : options.length, - i = index < 0 ? - max : - one ? index : 0; - - // Loop through all the selected options - for ( ; i < max; i++ ) { - option = options[ i ]; - - // oldIE doesn't update selected after form reset (#2551) - if ( ( option.selected || i === index ) && - // Don't return options that are disabled or in a disabled optgroup - ( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) && - ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - }, - - set: function( elem, value ) { - var optionSet, option, - options = elem.options, - values = jQuery.makeArray( value ), - i = options.length; - - while ( i-- ) { - option = options[ i ]; - if ( (option.selected = jQuery.inArray( jQuery(option).val(), values ) >= 0) ) { - optionSet = true; - } - } - - // force browsers to behave consistently when non-matching value is set - if ( !optionSet ) { - elem.selectedIndex = -1; - } - return values; - } - } - }, - - attr: function( elem, name, value ) { - var hooks, ret, - nType = elem.nodeType; - - // don't get/set attributes on text, comment and attribute nodes - if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === core_strundefined ) { - return jQuery.prop( elem, name, value ); - } - - // All attributes are lowercase - // Grab necessary hook if one is defined - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - name = name.toLowerCase(); - hooks = jQuery.attrHooks[ name ] || - ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook ); - } - - if ( value !== undefined ) { - - if ( value === null ) { - jQuery.removeAttr( elem, name ); - - } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { - return ret; - - } else { - elem.setAttribute( name, value + "" ); - return value; - } - - } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { - return ret; - - } else { - ret = jQuery.find.attr( elem, name ); - - // Non-existent attributes return null, we normalize to undefined - return ret == null ? - undefined : - ret; - } - }, - - removeAttr: function( elem, value ) { - var name, propName, - i = 0, - attrNames = value && value.match( core_rnotwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( (name = attrNames[i++]) ) { - propName = jQuery.propFix[ name ] || name; - - // Boolean attributes get special treatment (#10870) - if ( jQuery.expr.match.bool.test( name ) ) { - // Set corresponding property to false - if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) { - elem[ propName ] = false; - // Support: IE<9 - // Also clear defaultChecked/defaultSelected (if appropriate) - } else { - elem[ jQuery.camelCase( "default-" + name ) ] = - elem[ propName ] = false; - } - - // See #9699 for explanation of this approach (setting first, then removal) - } else { - jQuery.attr( elem, name, "" ); - } - - elem.removeAttribute( getSetAttribute ? name : propName ); - } - } - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { - // Setting the type on a radio button after the value resets the value in IE6-9 - // Reset value to default in case type is set after value during creation - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - } - }, - - propFix: { - "for": "htmlFor", - "class": "className" - }, - - prop: function( elem, name, value ) { - var ret, hooks, notxml, - nType = elem.nodeType; - - // don't get/set properties on text, comment and attribute nodes - if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); - - if ( notxml ) { - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ? - ret : - ( elem[ name ] = value ); - - } else { - return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ? - ret : - elem[ name ]; - } - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set - // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - // Use proper attribute retrieval(#12072) - var tabindex = jQuery.find.attr( elem, "tabindex" ); - - return tabindex ? - parseInt( tabindex, 10 ) : - rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? - 0 : - -1; - } - } - } -}); - -// Hooks for boolean attributes -boolHook = { - set: function( elem, value, name ) { - if ( value === false ) { - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) { - // IE<8 needs the *property* name - elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name ); - - // Use defaultChecked and defaultSelected for oldIE - } else { - elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true; - } - - return name; - } -}; -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { - var getter = jQuery.expr.attrHandle[ name ] || jQuery.find.attr; - - jQuery.expr.attrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ? - function( elem, name, isXML ) { - var fn = jQuery.expr.attrHandle[ name ], - ret = isXML ? - undefined : - /* jshint eqeqeq: false */ - (jQuery.expr.attrHandle[ name ] = undefined) != - getter( elem, name, isXML ) ? - - name.toLowerCase() : - null; - jQuery.expr.attrHandle[ name ] = fn; - return ret; - } : - function( elem, name, isXML ) { - return isXML ? - undefined : - elem[ jQuery.camelCase( "default-" + name ) ] ? - name.toLowerCase() : - null; - }; -}); - -// fix oldIE attroperties -if ( !getSetInput || !getSetAttribute ) { - jQuery.attrHooks.value = { - set: function( elem, value, name ) { - if ( jQuery.nodeName( elem, "input" ) ) { - // Does not return so that setAttribute is also used - elem.defaultValue = value; - } else { - // Use nodeHook if defined (#1954); otherwise setAttribute is fine - return nodeHook && nodeHook.set( elem, value, name ); - } - } - }; -} - -// IE6/7 do not support getting/setting some attributes with get/setAttribute -if ( !getSetAttribute ) { - - // Use this for any attribute in IE6/7 - // This fixes almost every IE6/7 issue - nodeHook = { - set: function( elem, value, name ) { - // Set the existing or create a new attribute node - var ret = elem.getAttributeNode( name ); - if ( !ret ) { - elem.setAttributeNode( - (ret = elem.ownerDocument.createAttribute( name )) - ); - } - - ret.value = value += ""; - - // Break association with cloned elements by also using setAttribute (#9646) - return name === "value" || value === elem.getAttribute( name ) ? - value : - undefined; - } - }; - jQuery.expr.attrHandle.id = jQuery.expr.attrHandle.name = jQuery.expr.attrHandle.coords = - // Some attributes are constructed with empty-string values when not defined - function( elem, name, isXML ) { - var ret; - return isXML ? - undefined : - (ret = elem.getAttributeNode( name )) && ret.value !== "" ? - ret.value : - null; - }; - jQuery.valHooks.button = { - get: function( elem, name ) { - var ret = elem.getAttributeNode( name ); - return ret && ret.specified ? - ret.value : - undefined; - }, - set: nodeHook.set - }; - - // Set contenteditable to false on removals(#10429) - // Setting to empty string throws an error as an invalid value - jQuery.attrHooks.contenteditable = { - set: function( elem, value, name ) { - nodeHook.set( elem, value === "" ? false : value, name ); - } - }; - - // Set width and height to auto instead of 0 on empty string( Bug #8150 ) - // This is for removals - jQuery.each([ "width", "height" ], function( i, name ) { - jQuery.attrHooks[ name ] = { - set: function( elem, value ) { - if ( value === "" ) { - elem.setAttribute( name, "auto" ); - return value; - } - } - }; - }); -} - - -// Some attributes require a special call on IE -// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !jQuery.support.hrefNormalized ) { - // href/src property should get the full normalized URL (#10299/#12915) - jQuery.each([ "href", "src" ], function( i, name ) { - jQuery.propHooks[ name ] = { - get: function( elem ) { - return elem.getAttribute( name, 4 ); - } - }; - }); -} - -if ( !jQuery.support.style ) { - jQuery.attrHooks.style = { - get: function( elem ) { - // Return undefined in the case of empty string - // Note: IE uppercases css property names, but if we were to .toLowerCase() - // .cssText, that would destroy case senstitivity in URL's, like in "background" - return elem.style.cssText || undefined; - }, - set: function( elem, value ) { - return ( elem.style.cssText = value + "" ); - } - }; -} - -// Safari mis-reports the default selected property of an option -// Accessing the parent's selectedIndex property fixes it -if ( !jQuery.support.optSelected ) { - jQuery.propHooks.selected = { - get: function( elem ) { - var parent = elem.parentNode; - - if ( parent ) { - parent.selectedIndex; - - // Make sure that it also works with optgroups, see #5701 - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - return null; - } - }; -} - -jQuery.each([ - "tabIndex", - "readOnly", - "maxLength", - "cellSpacing", - "cellPadding", - "rowSpan", - "colSpan", - "useMap", - "frameBorder", - "contentEditable" -], function() { - jQuery.propFix[ this.toLowerCase() ] = this; -}); - -// IE6/7 call enctype encoding -if ( !jQuery.support.enctype ) { - jQuery.propFix.enctype = "encoding"; -} - -// Radios and checkboxes getter/setter -jQuery.each([ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - set: function( elem, value ) { - if ( jQuery.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); - } - } - }; - if ( !jQuery.support.checkOn ) { - jQuery.valHooks[ this ].get = function( elem ) { - // Support: Webkit - // "" is returned instead of "on" if a value isn't specified - return elem.getAttribute("value") === null ? "on" : elem.value; - }; - } -}); -var rformElems = /^(?:input|select|textarea)$/i, - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|contextmenu)|click/, - rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - global: {}, - - add: function( elem, types, handler, data, selector ) { - var tmp, events, t, handleObjIn, - special, eventHandle, handleObj, - handlers, type, namespaces, origType, - elemData = jQuery._data( elem ); - - // Don't attach events to noData or text/comment nodes (but allow plain objects) - if ( !elemData ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !(events = elemData.events) ) { - events = elemData.events = {}; - } - if ( !(eventHandle = elemData.handle) ) { - eventHandle = elemData.handle = function( e ) { - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ? - jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : - undefined; - }; - // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events - eventHandle.elem = elem; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( core_rnotwhite ) || [""]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[t] ) || []; - type = origType = tmp[1]; - namespaces = ( tmp[2] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend({ - type: type, - origType: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join(".") - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !(handlers = events[ type ]) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener/attachEvent if the special events handler returns false - if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - // Bind the global event handler to the element - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle, false ); - - } else if ( elem.attachEvent ) { - elem.attachEvent( "on" + type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - // Nullify elem to prevent memory leaks in IE - elem = null; - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - var j, handleObj, tmp, - origCount, t, events, - special, handlers, type, - namespaces, origType, - elemData = jQuery.hasData( elem ) && jQuery._data( elem ); - - if ( !elemData || !(events = elemData.events) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( core_rnotwhite ) || [""]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[t] ) || []; - type = origType = tmp[1]; - namespaces = ( tmp[2] || "" ).split( "." ).sort(); - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector ? special.delegateType : special.bindType ) || type; - handlers = events[ type ] || []; - tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( origCount && !handlers.length ) { - if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - delete elemData.handle; - - // removeData also checks for emptiness and clears the expando if empty - // so use it instead of delete - jQuery._removeData( elem, "events" ); - } - }, - - trigger: function( event, data, elem, onlyHandlers ) { - var handle, ontype, cur, - bubbleType, special, tmp, i, - eventPath = [ elem || document ], - type = core_hasOwn.call( event, "type" ) ? event.type : event, - namespaces = core_hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; - - cur = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf(".") >= 0 ) { - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split("."); - type = namespaces.shift(); - namespaces.sort(); - } - ontype = type.indexOf(":") < 0 && "on" + type; - - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join("."); - event.namespace_re = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : - null; - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === (elem.ownerDocument || document) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { - - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) { - event.preventDefault(); - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) && - jQuery.acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name name as the event. - // Can't use an .isFunction() check here because IE6/7 fails that test. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - try { - elem[ type ](); - } catch ( e ) { - // IE<9 dies on focus/blur to hidden element (#1486,#12518) - // only reproducible on winXP IE8 native, not IE9 in IE8 mode - } - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - dispatch: function( event ) { - - // Make a writable jQuery.Event from the native event object - event = jQuery.event.fix( event ); - - var i, ret, handleObj, matched, j, - handlerQueue = [], - args = core_slice.call( arguments ), - handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[0] = event; - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) { - - // Triggered event must either 1) have no namespace, or - // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). - if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) - .apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( (event.result = ret) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - handlers: function( event, handlers ) { - var sel, handleObj, matches, i, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - // Black-hole SVG instance trees (#13180) - // Avoid non-left-click bubbling in Firefox (#3861) - if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { - - /* jshint eqeqeq: false */ - for ( ; cur != this; cur = cur.parentNode || this ) { - /* jshint eqeqeq: true */ - - // Don't check non-elements (#13208) - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) { - matches = []; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (#13203) - sel = handleObj.selector + " "; - - if ( matches[ sel ] === undefined ) { - matches[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) >= 0 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matches[ sel ] ) { - matches.push( handleObj ); - } - } - if ( matches.length ) { - handlerQueue.push({ elem: cur, handlers: matches }); - } - } - } - } - - // Add the remaining (directly-bound) handlers - if ( delegateCount < handlers.length ) { - handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); - } - - return handlerQueue; - }, - - fix: function( event ) { - if ( event[ jQuery.expando ] ) { - return event; - } - - // Create a writable copy of the event object and normalize some properties - var i, prop, copy, - type = event.type, - originalEvent = event, - fixHook = this.fixHooks[ type ]; - - if ( !fixHook ) { - this.fixHooks[ type ] = fixHook = - rmouseEvent.test( type ) ? this.mouseHooks : - rkeyEvent.test( type ) ? this.keyHooks : - {}; - } - copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; - - event = new jQuery.Event( originalEvent ); - - i = copy.length; - while ( i-- ) { - prop = copy[ i ]; - event[ prop ] = originalEvent[ prop ]; - } - - // Support: IE<9 - // Fix target property (#1925) - if ( !event.target ) { - event.target = originalEvent.srcElement || document; - } - - // Support: Chrome 23+, Safari? - // Target should not be a text node (#504, #13143) - if ( event.target.nodeType === 3 ) { - event.target = event.target.parentNode; - } - - // Support: IE<9 - // For mouse/key events, metaKey==false if it's undefined (#3368, #11328) - event.metaKey = !!event.metaKey; - - return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; - }, - - // Includes some event props shared by KeyEvent and MouseEvent - props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), - - fixHooks: {}, - - keyHooks: { - props: "char charCode key keyCode".split(" "), - filter: function( event, original ) { - - // Add which for key events - if ( event.which == null ) { - event.which = original.charCode != null ? original.charCode : original.keyCode; - } - - return event; - } - }, - - mouseHooks: { - props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), - filter: function( event, original ) { - var body, eventDoc, doc, - button = original.button, - fromElement = original.fromElement; - - // Calculate pageX/Y if missing and clientX/Y available - if ( event.pageX == null && original.clientX != null ) { - eventDoc = event.target.ownerDocument || document; - doc = eventDoc.documentElement; - body = eventDoc.body; - - event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); - event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); - } - - // Add relatedTarget, if necessary - if ( !event.relatedTarget && fromElement ) { - event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - // Note: button is not normalized, so don't use it - if ( !event.which && button !== undefined ) { - event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); - } - - return event; - } - }, - - special: { - load: { - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - focus: { - // Fire native event if possible so blur/focus sequence is correct - trigger: function() { - if ( this !== safeActiveElement() && this.focus ) { - try { - this.focus(); - return false; - } catch ( e ) { - // Support: IE<9 - // If we error on focus to hidden element (#1486, #12518), - // let .trigger() run the handlers - } - } - }, - delegateType: "focusin" - }, - blur: { - trigger: function() { - if ( this === safeActiveElement() && this.blur ) { - this.blur(); - return false; - } - }, - delegateType: "focusout" - }, - click: { - // For checkbox, fire native event so checked state will be right - trigger: function() { - if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) { - this.click(); - return false; - } - }, - - // For cross-browser consistency, don't fire native .click() on links - _default: function( event ) { - return jQuery.nodeName( event.target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Even when returnValue equals to undefined Firefox will still show alert - if ( event.result !== undefined ) { - event.originalEvent.returnValue = event.result; - } - } - } - }, - - simulate: function( type, elem, event, bubble ) { - // Piggyback on a donor event to simulate a different one. - // Fake originalEvent to avoid donor's stopPropagation, but if the - // simulated event prevents default then we do the same on the donor. - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true, - originalEvent: {} - } - ); - if ( bubble ) { - jQuery.event.trigger( e, null, elem ); - } else { - jQuery.event.dispatch.call( elem, e ); - } - if ( e.isDefaultPrevented() ) { - event.preventDefault(); - } - } -}; - -jQuery.removeEvent = document.removeEventListener ? - function( elem, type, handle ) { - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle, false ); - } - } : - function( elem, type, handle ) { - var name = "on" + type; - - if ( elem.detachEvent ) { - - // #8545, #7054, preventing memory leaks for custom events in IE6-8 - // detachEvent needed property on element, by name of that event, to properly expose it to GC - if ( typeof elem[ name ] === core_strundefined ) { - elem[ name ] = null; - } - - elem.detachEvent( name, handle ); - } - }; - -jQuery.Event = function( src, props ) { - // Allow instantiation without the 'new' keyword - if ( !(this instanceof jQuery.Event) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || - src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || jQuery.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - if ( !e ) { - return; - } - - // If preventDefault exists, run it on the original event - if ( e.preventDefault ) { - e.preventDefault(); - - // Support: IE - // Otherwise set the returnValue property of the original event to false - } else { - e.returnValue = false; - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - if ( !e ) { - return; - } - // If stopPropagation exists, run it on the original event - if ( e.stopPropagation ) { - e.stopPropagation(); - } - - // Support: IE - // Set the cancelBubble property of the original event to true - e.cancelBubble = true; - }, - stopImmediatePropagation: function() { - this.isImmediatePropagationStopped = returnTrue; - this.stopPropagation(); - } -}; - -// Create mouseenter/leave events using mouseover/out and event-time checks -jQuery.each({ - mouseenter: "mouseover", - mouseleave: "mouseout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // For mousenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || (related !== target && !jQuery.contains( target, related )) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; -}); - -// IE submit delegation -if ( !jQuery.support.submitBubbles ) { - - jQuery.event.special.submit = { - setup: function() { - // Only need this for delegated form submit events - if ( jQuery.nodeName( this, "form" ) ) { - return false; - } - - // Lazy-add a submit handler when a descendant form may potentially be submitted - jQuery.event.add( this, "click._submit keypress._submit", function( e ) { - // Node name check avoids a VML-related crash in IE (#9807) - var elem = e.target, - form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; - if ( form && !jQuery._data( form, "submitBubbles" ) ) { - jQuery.event.add( form, "submit._submit", function( event ) { - event._submit_bubble = true; - }); - jQuery._data( form, "submitBubbles", true ); - } - }); - // return undefined since we don't need an event listener - }, - - postDispatch: function( event ) { - // If form was submitted by the user, bubble the event up the tree - if ( event._submit_bubble ) { - delete event._submit_bubble; - if ( this.parentNode && !event.isTrigger ) { - jQuery.event.simulate( "submit", this.parentNode, event, true ); - } - } - }, - - teardown: function() { - // Only need this for delegated form submit events - if ( jQuery.nodeName( this, "form" ) ) { - return false; - } - - // Remove delegated handlers; cleanData eventually reaps submit handlers attached above - jQuery.event.remove( this, "._submit" ); - } - }; -} - -// IE change delegation and checkbox/radio fix -if ( !jQuery.support.changeBubbles ) { - - jQuery.event.special.change = { - - setup: function() { - - if ( rformElems.test( this.nodeName ) ) { - // IE doesn't fire change on a check/radio until blur; trigger it on click - // after a propertychange. Eat the blur-change in special.change.handle. - // This still fires onchange a second time for check/radio after blur. - if ( this.type === "checkbox" || this.type === "radio" ) { - jQuery.event.add( this, "propertychange._change", function( event ) { - if ( event.originalEvent.propertyName === "checked" ) { - this._just_changed = true; - } - }); - jQuery.event.add( this, "click._change", function( event ) { - if ( this._just_changed && !event.isTrigger ) { - this._just_changed = false; - } - // Allow triggered, simulated change events (#11500) - jQuery.event.simulate( "change", this, event, true ); - }); - } - return false; - } - // Delegated event; lazy-add a change handler on descendant inputs - jQuery.event.add( this, "beforeactivate._change", function( e ) { - var elem = e.target; - - if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) { - jQuery.event.add( elem, "change._change", function( event ) { - if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { - jQuery.event.simulate( "change", this.parentNode, event, true ); - } - }); - jQuery._data( elem, "changeBubbles", true ); - } - }); - }, - - handle: function( event ) { - var elem = event.target; - - // Swallow native change events from checkbox/radio, we already triggered them above - if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { - return event.handleObj.handler.apply( this, arguments ); - } - }, - - teardown: function() { - jQuery.event.remove( this, "._change" ); - - return !rformElems.test( this.nodeName ); - } - }; -} - -// Create "bubbling" focus and blur events -if ( !jQuery.support.focusinBubbles ) { - jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler while someone wants focusin/focusout - var attaches = 0, - handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - if ( attaches++ === 0 ) { - document.addEventListener( orig, handler, true ); - } - }, - teardown: function() { - if ( --attaches === 0 ) { - document.removeEventListener( orig, handler, true ); - } - } - }; - }); -} - -jQuery.fn.extend({ - - on: function( types, selector, data, fn, /*INTERNAL*/ one ) { - var type, origFn; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - this.on( type, selector, data, types[ type ], one ); - } - return this; - } - - if ( data == null && fn == null ) { - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return this; - } - - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return this.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - }); - }, - one: function( types, selector, data, fn ) { - return this.on( types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each(function() { - jQuery.event.remove( this, types, fn, selector ); - }); - }, - - trigger: function( type, data ) { - return this.each(function() { - jQuery.event.trigger( type, data, this ); - }); - }, - triggerHandler: function( type, data ) { - var elem = this[0]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -}); -var isSimple = /^.[^:#\[\.,]*$/, - rparentsprev = /^(?:parents|prev(?:Until|All))/, - rneedsContext = jQuery.expr.match.needsContext, - // methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.fn.extend({ - find: function( selector ) { - var i, - ret = [], - self = this, - len = self.length; - - if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter(function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - }) ); - } - - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, self[ i ], ret ); - } - - // Needed because $( selector, context ) becomes $( context ).find( selector ) - ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); - ret.selector = this.selector ? this.selector + " " + selector : selector; - return ret; - }, - - has: function( target ) { - var i, - targets = jQuery( target, this ), - len = targets.length; - - return this.filter(function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( this, targets[i] ) ) { - return true; - } - } - }); - }, - - not: function( selector ) { - return this.pushStack( winnow(this, selector || [], true) ); - }, - - filter: function( selector ) { - return this.pushStack( winnow(this, selector || [], false) ); - }, - - is: function( selector ) { - return !!winnow( - this, - - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - typeof selector === "string" && rneedsContext.test( selector ) ? - jQuery( selector ) : - selector || [], - false - ).length; - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - ret = [], - pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? - jQuery( selectors, context || this.context ) : - 0; - - for ( ; i < l; i++ ) { - for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) { - // Always skip document fragments - if ( cur.nodeType < 11 && (pos ? - pos.index(cur) > -1 : - - // Don't pass non-elements to Sizzle - cur.nodeType === 1 && - jQuery.find.matchesSelector(cur, selectors)) ) { - - cur = ret.push( cur ); - break; - } - } - } - - return this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret ); - }, - - // Determine the position of an element within - // the matched set of elements - index: function( elem ) { - - // No argument, return index in parent - if ( !elem ) { - return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1; - } - - // index in selector - if ( typeof elem === "string" ) { - return jQuery.inArray( this[0], jQuery( elem ) ); - } - - // Locate the position of the desired element - return jQuery.inArray( - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[0] : elem, this ); - }, - - add: function( selector, context ) { - var set = typeof selector === "string" ? - jQuery( selector, context ) : - jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), - all = jQuery.merge( this.get(), set ); - - return this.pushStack( jQuery.unique(all) ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter(selector) - ); - } -}); - -function sibling( cur, dir ) { - do { - cur = cur[ dir ]; - } while ( cur && cur.nodeType !== 1 ); - - return cur; -} - -jQuery.each({ - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return jQuery.dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, i, until ) { - return jQuery.dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return sibling( elem, "nextSibling" ); - }, - prev: function( elem ) { - return sibling( elem, "previousSibling" ); - }, - nextAll: function( elem ) { - return jQuery.dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return jQuery.dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, i, until ) { - return jQuery.dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, i, until ) { - return jQuery.dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); - }, - children: function( elem ) { - return jQuery.sibling( elem.firstChild ); - }, - contents: function( elem ) { - return jQuery.nodeName( elem, "iframe" ) ? - elem.contentDocument || elem.contentWindow.document : - jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var ret = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - ret = jQuery.filter( selector, ret ); - } - - if ( this.length > 1 ) { - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - ret = jQuery.unique( ret ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - ret = ret.reverse(); - } - } - - return this.pushStack( ret ); - }; -}); - -jQuery.extend({ - filter: function( expr, elems, not ) { - var elem = elems[ 0 ]; - - if ( not ) { - expr = ":not(" + expr + ")"; - } - - return elems.length === 1 && elem.nodeType === 1 ? - jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : - jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { - return elem.nodeType === 1; - })); - }, - - dir: function( elem, dir, until ) { - var matched = [], - cur = elem[ dir ]; - - while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { - if ( cur.nodeType === 1 ) { - matched.push( cur ); - } - cur = cur[dir]; - } - return matched; - }, - - sibling: function( n, elem ) { - var r = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - r.push( n ); - } - } - - return r; - } -}); - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, not ) { - if ( jQuery.isFunction( qualifier ) ) { - return jQuery.grep( elements, function( elem, i ) { - /* jshint -W018 */ - return !!qualifier.call( elem, i, elem ) !== not; - }); - - } - - if ( qualifier.nodeType ) { - return jQuery.grep( elements, function( elem ) { - return ( elem === qualifier ) !== not; - }); - - } - - if ( typeof qualifier === "string" ) { - if ( isSimple.test( qualifier ) ) { - return jQuery.filter( qualifier, elements, not ); - } - - qualifier = jQuery.filter( qualifier, elements ); - } - - return jQuery.grep( elements, function( elem ) { - return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not; - }); -} -function createSafeFragment( document ) { - var list = nodeNames.split( "|" ), - safeFrag = document.createDocumentFragment(); - - if ( safeFrag.createElement ) { - while ( list.length ) { - safeFrag.createElement( - list.pop() - ); - } - } - return safeFrag; -} - -var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + - "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", - rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, - rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"), - rleadingWhitespace = /^\s+/, - rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, - rtagName = /<([\w:]+)/, - rtbody = /\s*$/g, - - // We have to close these tags to support XHTML (#13200) - wrapMap = { - option: [ 1, "" ], - legend: [ 1, "
", "
" ], - area: [ 1, "", "" ], - param: [ 1, "", "" ], - thead: [ 1, "", "
" ], - tr: [ 2, "", "
" ], - col: [ 2, "", "
" ], - td: [ 3, "", "
" ], - - // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, - // unless wrapped in a div with non-breaking characters in front of it. - _default: jQuery.support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X
", "
" ] - }, - safeFragment = createSafeFragment( document ), - fragmentDiv = safeFragment.appendChild( document.createElement("div") ); - -wrapMap.optgroup = wrapMap.option; -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -jQuery.fn.extend({ - text: function( value ) { - return jQuery.access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); - }, null, value, arguments.length ); - }, - - append: function() { - return this.domManip( arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - }); - }, - - prepend: function() { - return this.domManip( arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - }); - }, - - before: function() { - return this.domManip( arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - }); - }, - - after: function() { - return this.domManip( arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - }); - }, - - // keepData is for internal use only--do not document - remove: function( selector, keepData ) { - var elem, - elems = selector ? jQuery.filter( selector, this ) : this, - i = 0; - - for ( ; (elem = elems[i]) != null; i++ ) { - - if ( !keepData && elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem ) ); - } - - if ( elem.parentNode ) { - if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { - setGlobalEval( getAll( elem, "script" ) ); - } - elem.parentNode.removeChild( elem ); - } - } - - return this; - }, - - empty: function() { - var elem, - i = 0; - - for ( ; (elem = this[i]) != null; i++ ) { - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - } - - // Remove any remaining nodes - while ( elem.firstChild ) { - elem.removeChild( elem.firstChild ); - } - - // If this is a select, ensure that it displays empty (#12336) - // Support: IE<9 - if ( elem.options && jQuery.nodeName( elem, "select" ) ) { - elem.options.length = 0; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map( function () { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - }); - }, - - html: function( value ) { - return jQuery.access( this, function( value ) { - var elem = this[0] || {}, - i = 0, - l = this.length; - - if ( value === undefined ) { - return elem.nodeType === 1 ? - elem.innerHTML.replace( rinlinejQuery, "" ) : - undefined; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - ( jQuery.support.htmlSerialize || !rnoshimcache.test( value ) ) && - ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && - !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) { - - value = value.replace( rxhtmlTag, "<$1>" ); - - try { - for (; i < l; i++ ) { - // Remove element nodes and prevent memory leaks - elem = this[i] || {}; - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch(e) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var - // Snapshot the DOM in case .domManip sweeps something relevant into its fragment - args = jQuery.map( this, function( elem ) { - return [ elem.nextSibling, elem.parentNode ]; - }), - i = 0; - - // Make the changes, replacing each context element with the new content - this.domManip( arguments, function( elem ) { - var next = args[ i++ ], - parent = args[ i++ ]; - - if ( parent ) { - // Don't use the snapshot next if it has moved (#13810) - if ( next && next.parentNode !== parent ) { - next = this.nextSibling; - } - jQuery( this ).remove(); - parent.insertBefore( elem, next ); - } - // Allow new content to include elements from the context set - }, true ); - - // Force removal if there was no new content (e.g., from empty arguments) - return i ? this : this.remove(); - }, - - detach: function( selector ) { - return this.remove( selector, true ); - }, - - domManip: function( args, callback, allowIntersection ) { - - // Flatten any nested arrays - args = core_concat.apply( [], args ); - - var first, node, hasScripts, - scripts, doc, fragment, - i = 0, - l = this.length, - set = this, - iNoClone = l - 1, - value = args[0], - isFunction = jQuery.isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) { - return this.each(function( index ) { - var self = set.eq( index ); - if ( isFunction ) { - args[0] = value.call( this, index, self.html() ); - } - self.domManip( args, callback, allowIntersection ); - }); - } - - if ( l ) { - fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, !allowIntersection && this ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - if ( first ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( this[i], node, i ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) { - - if ( node.src ) { - // Hope ajax is available... - jQuery._evalUrl( node.src ); - } else { - jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) ); - } - } - } - } - - // Fix #11809: Avoid leaking memory - fragment = first = null; - } - } - - return this; - } -}); - -// Support: IE<8 -// Manipulating tables requires a tbody -function manipulationTarget( elem, content ) { - return jQuery.nodeName( elem, "table" ) && - jQuery.nodeName( content.nodeType === 1 ? content : content.firstChild, "tr" ) ? - - elem.getElementsByTagName("tbody")[0] || - elem.appendChild( elem.ownerDocument.createElement("tbody") ) : - elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = (jQuery.find.attr( elem, "type" ) !== null) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - var match = rscriptTypeMasked.exec( elem.type ); - if ( match ) { - elem.type = match[1]; - } else { - elem.removeAttribute("type"); - } - return elem; -} - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var elem, - i = 0; - for ( ; (elem = elems[i]) != null; i++ ) { - jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) ); - } -} - -function cloneCopyEvent( src, dest ) { - - if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { - return; - } - - var type, i, l, - oldData = jQuery._data( src ), - curData = jQuery._data( dest, oldData ), - events = oldData.events; - - if ( events ) { - delete curData.handle; - curData.events = {}; - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - - // make the cloned public data object a copy from the original - if ( curData.data ) { - curData.data = jQuery.extend( {}, curData.data ); - } -} - -function fixCloneNodeIssues( src, dest ) { - var nodeName, e, data; - - // We do not need to do anything for non-Elements - if ( dest.nodeType !== 1 ) { - return; - } - - nodeName = dest.nodeName.toLowerCase(); - - // IE6-8 copies events bound via attachEvent when using cloneNode. - if ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) { - data = jQuery._data( dest ); - - for ( e in data.events ) { - jQuery.removeEvent( dest, e, data.handle ); - } - - // Event data gets referenced instead of copied if the expando gets copied too - dest.removeAttribute( jQuery.expando ); - } - - // IE blanks contents when cloning scripts, and tries to evaluate newly-set text - if ( nodeName === "script" && dest.text !== src.text ) { - disableScript( dest ).text = src.text; - restoreScript( dest ); - - // IE6-10 improperly clones children of object elements using classid. - // IE10 throws NoModificationAllowedError if parent is null, #12132. - } else if ( nodeName === "object" ) { - if ( dest.parentNode ) { - dest.outerHTML = src.outerHTML; - } - - // This path appears unavoidable for IE9. When cloning an object - // element in IE9, the outerHTML strategy above is not sufficient. - // If the src has innerHTML and the destination does not, - // copy the src.innerHTML into the dest.innerHTML. #10324 - if ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) { - dest.innerHTML = src.innerHTML; - } - - } else if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) { - // IE6-8 fails to persist the checked state of a cloned checkbox - // or radio button. Worse, IE6-7 fail to give the cloned element - // a checked appearance if the defaultChecked value isn't also set - - dest.defaultChecked = dest.checked = src.checked; - - // IE6-7 get confused and end up setting the value of a cloned - // checkbox/radio button to an empty string instead of "on" - if ( dest.value !== src.value ) { - dest.value = src.value; - } - - // IE6-8 fails to return the selected option to the default selected - // state when cloning options - } else if ( nodeName === "option" ) { - dest.defaultSelected = dest.selected = src.defaultSelected; - - // IE6-8 fails to set the defaultValue to the correct value when - // cloning other types of input fields - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -jQuery.each({ - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - i = 0, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone(true); - jQuery( insert[i] )[ original ]( elems ); - - // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() - core_push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -}); - -function getAll( context, tag ) { - var elems, elem, - i = 0, - found = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || "*" ) : - typeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || "*" ) : - undefined; - - if ( !found ) { - for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) { - if ( !tag || jQuery.nodeName( elem, tag ) ) { - found.push( elem ); - } else { - jQuery.merge( found, getAll( elem, tag ) ); - } - } - } - - return tag === undefined || tag && jQuery.nodeName( context, tag ) ? - jQuery.merge( [ context ], found ) : - found; -} - -// Used in buildFragment, fixes the defaultChecked property -function fixDefaultChecked( elem ) { - if ( manipulation_rcheckableType.test( elem.type ) ) { - elem.defaultChecked = elem.checked; - } -} - -jQuery.extend({ - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var destElements, node, clone, i, srcElements, - inPage = jQuery.contains( elem.ownerDocument, elem ); - - if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { - clone = elem.cloneNode( true ); - - // IE<=8 does not properly clone detached, unknown element nodes - } else { - fragmentDiv.innerHTML = elem.outerHTML; - fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); - } - - if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) && - (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { - - // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - // Fix all IE cloning issues - for ( i = 0; (node = srcElements[i]) != null; ++i ) { - // Ensure that the destination node is not null; Fixes #9587 - if ( destElements[i] ) { - fixCloneNodeIssues( node, destElements[i] ); - } - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0; (node = srcElements[i]) != null; i++ ) { - cloneCopyEvent( node, destElements[i] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - destElements = srcElements = node = null; - - // Return the cloned set - return clone; - }, - - buildFragment: function( elems, context, scripts, selection ) { - var j, elem, contains, - tmp, tag, tbody, wrap, - l = elems.length, - - // Ensure a safe fragment - safe = createSafeFragment( context ), - - nodes = [], - i = 0; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( jQuery.type( elem ) === "object" ) { - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || safe.appendChild( context.createElement("div") ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - - tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1>" ) + wrap[2]; - - // Descend through wrappers to the right content - j = wrap[0]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Manually add leading whitespace removed by IE - if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { - nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) ); - } - - // Remove IE's autoinserted from table fragments - if ( !jQuery.support.tbody ) { - - // String was a , *may* have spurious - elem = tag === "table" && !rtbody.test( elem ) ? - tmp.firstChild : - - // String was a bare or - wrap[1] === "
" && !rtbody.test( elem ) ? - tmp : - 0; - - j = elem && elem.childNodes.length; - while ( j-- ) { - if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) { - elem.removeChild( tbody ); - } - } - } - - jQuery.merge( nodes, tmp.childNodes ); - - // Fix #12392 for WebKit and IE > 9 - tmp.textContent = ""; - - // Fix #12392 for oldIE - while ( tmp.firstChild ) { - tmp.removeChild( tmp.firstChild ); - } - - // Remember the top-level container for proper cleanup - tmp = safe.lastChild; - } - } - } - - // Fix #11356: Clear elements from fragment - if ( tmp ) { - safe.removeChild( tmp ); - } - - // Reset defaultChecked for any radios and checkboxes - // about to be appended to the DOM in IE 6/7 (#8060) - if ( !jQuery.support.appendChecked ) { - jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked ); - } - - i = 0; - while ( (elem = nodes[ i++ ]) ) { - - // #4087 - If origin and destination elements are the same, and this is - // that element, do not do anything - if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { - continue; - } - - contains = jQuery.contains( elem.ownerDocument, elem ); - - // Append to fragment - tmp = getAll( safe.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( contains ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( (elem = tmp[ j++ ]) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - tmp = null; - - return safe; - }, - - cleanData: function( elems, /* internal */ acceptData ) { - var elem, type, id, data, - i = 0, - internalKey = jQuery.expando, - cache = jQuery.cache, - deleteExpando = jQuery.support.deleteExpando, - special = jQuery.event.special; - - for ( ; (elem = elems[i]) != null; i++ ) { - - if ( acceptData || jQuery.acceptData( elem ) ) { - - id = elem[ internalKey ]; - data = id && cache[ id ]; - - if ( data ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - - // Remove cache only if it was not already removed by jQuery.event.remove - if ( cache[ id ] ) { - - delete cache[ id ]; - - // IE does not allow us to delete expando properties from nodes, - // nor does it have a removeAttribute function on Document nodes; - // we must handle all of these cases - if ( deleteExpando ) { - delete elem[ internalKey ]; - - } else if ( typeof elem.removeAttribute !== core_strundefined ) { - elem.removeAttribute( internalKey ); - - } else { - elem[ internalKey ] = null; - } - - core_deletedIds.push( id ); - } - } - } - } - }, - - _evalUrl: function( url ) { - return jQuery.ajax({ - url: url, - type: "GET", - dataType: "script", - async: false, - global: false, - "throws": true - }); - } -}); -jQuery.fn.extend({ - wrapAll: function( html ) { - if ( jQuery.isFunction( html ) ) { - return this.each(function(i) { - jQuery(this).wrapAll( html.call(this, i) ); - }); - } - - if ( this[0] ) { - // The elements to wrap the target around - var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true); - - if ( this[0].parentNode ) { - wrap.insertBefore( this[0] ); - } - - wrap.map(function() { - var elem = this; - - while ( elem.firstChild && elem.firstChild.nodeType === 1 ) { - elem = elem.firstChild; - } - - return elem; - }).append( this ); - } - - return this; - }, - - wrapInner: function( html ) { - if ( jQuery.isFunction( html ) ) { - return this.each(function(i) { - jQuery(this).wrapInner( html.call(this, i) ); - }); - } - - return this.each(function() { - var self = jQuery( this ), - contents = self.contents(); - - if ( contents.length ) { - contents.wrapAll( html ); - - } else { - self.append( html ); - } - }); - }, - - wrap: function( html ) { - var isFunction = jQuery.isFunction( html ); - - return this.each(function(i) { - jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html ); - }); - }, - - unwrap: function() { - return this.parent().each(function() { - if ( !jQuery.nodeName( this, "body" ) ) { - jQuery( this ).replaceWith( this.childNodes ); - } - }).end(); - } -}); -var iframe, getStyles, curCSS, - ralpha = /alpha\([^)]*\)/i, - ropacity = /opacity\s*=\s*([^)]*)/, - rposition = /^(top|right|bottom|left)$/, - // swappable if display is none or starts with table except "table", "table-cell", or "table-caption" - // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rmargin = /^margin/, - rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ), - rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ), - rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ), - elemdisplay = { BODY: "block" }, - - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: 0, - fontWeight: 400 - }, - - cssExpand = [ "Top", "Right", "Bottom", "Left" ], - cssPrefixes = [ "Webkit", "O", "Moz", "ms" ]; - -// return a css property mapped to a potentially vendor prefixed property -function vendorPropName( style, name ) { - - // shortcut for names that are not vendor prefixed - if ( name in style ) { - return name; - } - - // check for vendor prefixed names - var capName = name.charAt(0).toUpperCase() + name.slice(1), - origName = name, - i = cssPrefixes.length; - - while ( i-- ) { - name = cssPrefixes[ i ] + capName; - if ( name in style ) { - return name; - } - } - - return origName; -} - -function isHidden( elem, el ) { - // isHidden might be called from jQuery#filter function; - // in that case, element will be second argument - elem = el || elem; - return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); -} - -function showHide( elements, show ) { - var display, elem, hidden, - values = [], - index = 0, - length = elements.length; - - for ( ; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - - values[ index ] = jQuery._data( elem, "olddisplay" ); - display = elem.style.display; - if ( show ) { - // Reset the inline display of this element to learn if it is - // being hidden by cascaded rules or not - if ( !values[ index ] && display === "none" ) { - elem.style.display = ""; - } - - // Set elements which have been overridden with display: none - // in a stylesheet to whatever the default browser style is - // for such an element - if ( elem.style.display === "" && isHidden( elem ) ) { - values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) ); - } - } else { - - if ( !values[ index ] ) { - hidden = isHidden( elem ); - - if ( display && display !== "none" || !hidden ) { - jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) ); - } - } - } - } - - // Set the display of most of the elements in a second loop - // to avoid the constant reflow - for ( index = 0; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - if ( !show || elem.style.display === "none" || elem.style.display === "" ) { - elem.style.display = show ? values[ index ] || "" : "none"; - } - } - - return elements; -} - -jQuery.fn.extend({ - css: function( name, value ) { - return jQuery.access( this, function( elem, name, value ) { - var len, styles, - map = {}, - i = 0; - - if ( jQuery.isArray( name ) ) { - styles = getStyles( elem ); - len = name.length; - - for ( ; i < len; i++ ) { - map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); - } - - return map; - } - - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }, name, value, arguments.length > 1 ); - }, - show: function() { - return showHide( this, true ); - }, - hide: function() { - return showHide( this ); - }, - toggle: function( state ) { - if ( typeof state === "boolean" ) { - return state ? this.show() : this.hide(); - } - - return this.each(function() { - if ( isHidden( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - }); - } -}); - -jQuery.extend({ - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity" ); - return ret === "" ? "1" : ret; - } - } - } - }, - - // Don't automatically add "px" to these possibly-unitless properties - cssNumber: { - "columnCount": true, - "fillOpacity": true, - "fontWeight": true, - "lineHeight": true, - "opacity": true, - "order": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true - }, - - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: { - // normalize float css property - "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat" - }, - - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } - - // Make sure that we're working with the right name - var ret, type, hooks, - origName = jQuery.camelCase( name ), - style = elem.style; - - name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) ); - - // gets hook for the prefixed version - // followed by the unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // convert relative number strings (+= or -=) to relative numbers. #7345 - if ( type === "string" && (ret = rrelNum.exec( value )) ) { - value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) ); - // Fixes bug #9237 - type = "number"; - } - - // Make sure that NaN and null values aren't set. See: #7116 - if ( value == null || type === "number" && isNaN( value ) ) { - return; - } - - // If a number was passed in, add 'px' to the (except for certain CSS properties) - if ( type === "number" && !jQuery.cssNumber[ origName ] ) { - value += "px"; - } - - // Fixes #8908, it can be done more correctly by specifing setters in cssHooks, - // but it would mean to define eight (for every problematic property) identical functions - if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) { - style[ name ] = "inherit"; - } - - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) { - - // Wrapped to prevent IE from throwing errors when 'invalid' values are provided - // Fixes bug #5509 - try { - style[ name ] = value; - } catch(e) {} - } - - } else { - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) { - return ret; - } - - // Otherwise just get the value from the style object - return style[ name ]; - } - }, - - css: function( elem, name, extra, styles ) { - var num, val, hooks, - origName = jQuery.camelCase( name ); - - // Make sure that we're working with the right name - name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) ); - - // gets hook for the prefixed version - // followed by the unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks ) { - val = hooks.get( elem, true, extra ); - } - - // Otherwise, if a way to get the computed value exists, use that - if ( val === undefined ) { - val = curCSS( elem, name, styles ); - } - - //convert "normal" to computed value - if ( val === "normal" && name in cssNormalTransform ) { - val = cssNormalTransform[ name ]; - } - - // Return, converting to number if forced or a qualifier was provided and val looks numeric - if ( extra === "" || extra ) { - num = parseFloat( val ); - return extra === true || jQuery.isNumeric( num ) ? num || 0 : val; - } - return val; - } -}); - -// NOTE: we've included the "window" in window.getComputedStyle -// because jsdom on node.js will break without it. -if ( window.getComputedStyle ) { - getStyles = function( elem ) { - return window.getComputedStyle( elem, null ); - }; - - curCSS = function( elem, name, _computed ) { - var width, minWidth, maxWidth, - computed = _computed || getStyles( elem ), - - // getPropertyValue is only needed for .css('filter') in IE9, see #12537 - ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined, - style = elem.style; - - if ( computed ) { - - if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { - ret = jQuery.style( elem, name ); - } - - // A tribute to the "awesome hack by Dean Edwards" - // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right - // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels - // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values - if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) { - - // Remember the original values - width = style.width; - minWidth = style.minWidth; - maxWidth = style.maxWidth; - - // Put in the new values to get a computed value out - style.minWidth = style.maxWidth = style.width = ret; - ret = computed.width; - - // Revert the changed values - style.width = width; - style.minWidth = minWidth; - style.maxWidth = maxWidth; - } - } - - return ret; - }; -} else if ( document.documentElement.currentStyle ) { - getStyles = function( elem ) { - return elem.currentStyle; - }; - - curCSS = function( elem, name, _computed ) { - var left, rs, rsLeft, - computed = _computed || getStyles( elem ), - ret = computed ? computed[ name ] : undefined, - style = elem.style; - - // Avoid setting ret to empty string here - // so we don't default to auto - if ( ret == null && style && style[ name ] ) { - ret = style[ name ]; - } - - // From the awesome hack by Dean Edwards - // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 - - // If we're not dealing with a regular pixel number - // but a number that has a weird ending, we need to convert it to pixels - // but not position css attributes, as those are proportional to the parent element instead - // and we can't measure the parent instead because it might trigger a "stacking dolls" problem - if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) { - - // Remember the original values - left = style.left; - rs = elem.runtimeStyle; - rsLeft = rs && rs.left; - - // Put in the new values to get a computed value out - if ( rsLeft ) { - rs.left = elem.currentStyle.left; - } - style.left = name === "fontSize" ? "1em" : ret; - ret = style.pixelLeft + "px"; - - // Revert the changed values - style.left = left; - if ( rsLeft ) { - rs.left = rsLeft; - } - } - - return ret === "" ? "auto" : ret; - }; -} - -function setPositiveNumber( elem, value, subtract ) { - var matches = rnumsplit.exec( value ); - return matches ? - // Guard against undefined "subtract", e.g., when used as in cssHooks - Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) : - value; -} - -function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { - var i = extra === ( isBorderBox ? "border" : "content" ) ? - // If we already have the right measurement, avoid augmentation - 4 : - // Otherwise initialize for horizontal or vertical properties - name === "width" ? 1 : 0, - - val = 0; - - for ( ; i < 4; i += 2 ) { - // both box models exclude margin, so add it if we want it - if ( extra === "margin" ) { - val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); - } - - if ( isBorderBox ) { - // border-box includes padding, so remove it if we want content - if ( extra === "content" ) { - val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } - - // at this point, extra isn't border nor margin, so remove border - if ( extra !== "margin" ) { - val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } else { - // at this point, extra isn't content, so add padding - val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - - // at this point, extra isn't content nor padding, so add border - if ( extra !== "padding" ) { - val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } - } - - return val; -} - -function getWidthOrHeight( elem, name, extra ) { - - // Start with offset property, which is equivalent to the border-box value - var valueIsBorderBox = true, - val = name === "width" ? elem.offsetWidth : elem.offsetHeight, - styles = getStyles( elem ), - isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; - - // some non-html elements return undefined for offsetWidth, so check for null/undefined - // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 - // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 - if ( val <= 0 || val == null ) { - // Fall back to computed then uncomputed css if necessary - val = curCSS( elem, name, styles ); - if ( val < 0 || val == null ) { - val = elem.style[ name ]; - } - - // Computed unit is not pixels. Stop here and return. - if ( rnumnonpx.test(val) ) { - return val; - } - - // we need the check for style in case a browser which returns unreliable values - // for getComputedStyle silently falls back to the reliable elem.style - valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] ); - - // Normalize "", auto, and prepare for extra - val = parseFloat( val ) || 0; - } - - // use the active box-sizing model to add/subtract irrelevant styles - return ( val + - augmentWidthOrHeight( - elem, - name, - extra || ( isBorderBox ? "border" : "content" ), - valueIsBorderBox, - styles - ) - ) + "px"; -} - -// Try to determine the default display value of an element -function css_defaultDisplay( nodeName ) { - var doc = document, - display = elemdisplay[ nodeName ]; - - if ( !display ) { - display = actualDisplay( nodeName, doc ); - - // If the simple way fails, read from inside an iframe - if ( display === "none" || !display ) { - // Use the already-created iframe if possible - iframe = ( iframe || - jQuery("