vendor/assets/javascripts/angular-scenario.js in angularjs-rails-1.2.7 vs vendor/assets/javascripts/angular-scenario.js in angularjs-rails-1.2.9

- old
+ new

@@ -9788,11 +9788,11 @@ } })( window ); /** - * @license AngularJS v1.2.7 + * @license AngularJS v1.2.9 * (c) 2010-2014 Google, Inc. http://angularjs.org * License: MIT */ (function(window, document){ var _jQuery = window.jQuery.noConflict(true); @@ -9858,11 +9858,11 @@ return arg; } return match; }); - message = message + '\nhttp://errors.angularjs.org/1.2.7/' + + message = message + '\nhttp://errors.angularjs.org/1.2.9/' + (module ? module + '/' : '') + code; for (i = 2; i < arguments.length; i++) { message = message + (i == 2 ? '?' : '&') + 'p' + (i-2) + '=' + encodeURIComponent(stringify(arguments[i])); } @@ -10061,11 +10061,12 @@ * Invokes the `iterator` function once for each item in `obj` collection, which can be either an * object or an array. The `iterator` function is invoked with `iterator(value, key)`, where `value` * is the value of an object property or an array element and `key` is the object property key or * array element index. Specifying a `context` for the function is optional. * - * Note: this function was previously known as `angular.foreach`. + * It is worth nothing that `.forEach` does not iterate over inherited properties because it filters + * using the `hasOwnProperty` method. * <pre> var values = {name: 'misko', gender: 'male'}; var log = []; angular.forEach(values, function(value, key){ @@ -11623,15 +11624,15 @@ * - `minor` – `{number}` – Minor version number, such as "9". * - `dot` – `{number}` – Dot version number, such as "18". * - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat". */ var version = { - full: '1.2.7', // all of these placeholder strings will be replaced by grunt's + full: '1.2.9', // all of these placeholder strings will be replaced by grunt's major: 1, // package task minor: 2, - dot: 7, - codeName: 'emoji-clairvoyance' + dot: 9, + codeName: 'enchanted-articulacy' }; function publishExternalAPI(angular){ extend(angular, { @@ -13189,32 +13190,37 @@ * instance. * This is short for registering a service where its provider's `$get` property is the service * constructor function that will be used to instantiate the service instance. * * You should use {@link AUTO.$provide#methods_service $provide.service(class)} if you define your service - * as a type/class. This is common when using {@link http://coffeescript.org CoffeeScript}. + * as a type/class. * * @param {string} name The name of the instance. * @param {Function} constructor A class (constructor function) that will be instantiated. * @returns {Object} registered provider instance * * @example * Here is an example of registering a service using - * {@link AUTO.$provide#methods_service $provide.service(class)} that is defined as a CoffeeScript class. + * {@link AUTO.$provide#methods_service $provide.service(class)}. * <pre> - * class Ping - * constructor: (@$http) -> - * send: () => - * @$http.get('/ping') - * - * $provide.service('ping', ['$http', Ping]) + * $provide.service('ping', ['$http', function($http) { + * var Ping = function() { + * this.$http = $http; + * }; + * + * Ping.prototype.send = function() { + * return this.$http.get('/ping'); + * }; + * + * return Ping; + * }]); * </pre> * You would then inject and use this service like this: * <pre> - * someModule.controller 'Ctrl', ['ping', (ping) -> - * ping.send() - * ] + * someModule.controller('Ctrl', ['ping', function(ping) { + * ping.send(); + * }]); * </pre> */ /** @@ -16438,11 +16444,11 @@ * @description * Set DOM element attribute value. * * * @param {string} name Normalized element attribute name of the property to modify. The name is - * revers translated using the {@link ng.$compile.directive.Attributes#$attr $attr} + * reverse-translated using the {@link ng.$compile.directive.Attributes#$attr $attr} * property to the original name. * @param {string} value Value to set the attribute to. The value can be an interpolated string. */ @@ -16576,12 +16582,11 @@ * @ngdoc object * @name ng.$document * @requires $window * * @description - * A {@link angular.element jQuery (lite)}-wrapped reference to the browser's `window.document` - * element. + * A {@link angular.element jQuery or jqLite} wrapper for the browser's `window.document` object. */ function $DocumentProvider(){ this.$get = ['$window', function(window){ return jqLite(window.document); }]; @@ -16736,13 +16741,13 @@ // default headers headers: { common: { 'Accept': 'application/json, text/plain, */*' }, - post: CONTENT_TYPE_APPLICATION_JSON, - put: CONTENT_TYPE_APPLICATION_JSON, - patch: CONTENT_TYPE_APPLICATION_JSON + post: copy(CONTENT_TYPE_APPLICATION_JSON), + put: copy(CONTENT_TYPE_APPLICATION_JSON), + patch: copy(CONTENT_TYPE_APPLICATION_JSON) }, xsrfCookieName: 'XSRF-TOKEN', xsrfHeaderName: 'X-XSRF-TOKEN' }; @@ -16916,11 +16921,19 @@ * objects. To add headers for an HTTP method other than POST or PUT, simply add a new object * with the lowercased HTTP method name as the key, e.g. * `$httpProvider.defaults.headers.get = { 'My-Header' : 'value' }. * * The defaults can also be set at runtime via the `$http.defaults` object in the same - * fashion. In addition, you can supply a `headers` property in the config object passed when + * fashion. For example: + * + * ``` + * module.run(function($http) { + * $http.defaults.headers.common.Authentication = 'Basic YmVlcDpib29w' + * }); + * ``` + * + * In addition, you can supply a `headers` property in the config object passed when * calling `$http(config)`, which overrides the defaults without changing them globally. * * * # Transforming Requests and Responses * @@ -16940,11 +16953,13 @@ * To globally augment or override the default transforms, modify the * `$httpProvider.defaults.transformRequest` and `$httpProvider.defaults.transformResponse` * properties. These properties are by default an array of transform functions, which allows you * to `push` or `unshift` a new transformation function into the transformation chain. You can * also decide to completely override any default transformations by assigning your - * transformation functions to these properties directly without the array wrapper. + * transformation functions to these properties directly without the array wrapper. These defaults + * are again available on the $http factory at run-time, which may be useful if you have run-time + * services you wish to be involved in your transformations. * * Similarly, to locally override the request/response transforms, augment the * `transformRequest` and/or `transformResponse` properties of the configuration object passed * into `$http`. * @@ -17154,11 +17169,12 @@ * making up its own tokens). We recommend that the token is a digest of your site's * authentication cookie with a {@link https://en.wikipedia.org/wiki/Salt_(cryptography) salt} * for added security. * * The name of the headers can be specified using the xsrfHeaderName and xsrfCookieName - * properties of either $httpProvider.defaults, or the per-request config object. + * properties of either $httpProvider.defaults at config-time, $http.defaults at run-time, + * or the per-request config object. * * * @param {object} config Object describing the request to be made and how it should be * processed. The object has following properties: * @@ -17717,11 +17733,11 @@ if (callbacks[callbackId].data) { completeRequest(callback, 200, callbacks[callbackId].data); } else { completeRequest(callback, status || -2); } - delete callbacks[callbackId]; + callbacks[callbackId] = angular.noop; }); } else { var xhr = createXhr(method); @@ -17734,11 +17750,11 @@ // In IE6 and 7, this might be called synchronously when xhr.send below is called and the // response is in the cache. the promise api will ensure that to the app code the api is // always async xhr.onreadystatechange = function() { - // onreadystatechange might by called multiple times with readyState === 4 on mobile webkit caused by + // onreadystatechange might get called multiple times with readyState === 4 on mobile webkit caused by // xhrs that are resolved while the app is in the background (see #5426). // since calling completeRequest sets the `xhr` variable to null, we just check if it's not null before // continuing // // we can't set xhr.onreadystatechange to undefined or delete it because that breaks IE8 (method=PATCH) and @@ -17747,15 +17763,16 @@ var responseHeaders = null, response = null; if(status !== ABORTED) { responseHeaders = xhr.getAllResponseHeaders(); - response = xhr.responseType ? xhr.response : xhr.responseText; + + // responseText is the old-school way of retrieving response (supported by IE8 & 9) + // response/responseType properties were introduced in XHR Level2 spec (supported by IE10) + response = ('response' in xhr) ? xhr.response : xhr.responseText; } - // responseText is the old-school way of retrieving response (supported by IE8 & 9) - // response/responseType properties were introduced in XHR Level2 spec (supported by IE10) completeRequest(callback, status || xhr.status, response, responseHeaders); } @@ -17784,18 +17801,18 @@ jsonpDone && jsonpDone(); xhr && xhr.abort(); } function completeRequest(callback, status, response, headersString) { - var protocol = urlResolve(url).protocol; - // cancel timeout and subsequent timeout promise resolution timeoutId && $browserDefer.cancel(timeoutId); jsonpDone = xhr = null; - // fix status code for file protocol (it's always 0) - status = (protocol == 'file' && status === 0) ? (response ? 200 : 404) : status; + // fix status code when it is 0 (0 status is undocumented). + // Occurs when accessing file resources. + // On Android 4.1 stock browser it occurs while retrieving files from application cache. + status = (status === 0) ? (response ? 200 : 404) : status; // normalize IE bug (http://bugs.jquery.com/ticket/1450) status = status == 1223 ? 204 : status; callback(status, response, headersString); @@ -18905,11 +18922,11 @@ * @eventType broadcast on root scope * @description * Broadcasted before a URL will change. This change can be prevented by calling * `preventDefault` method of the event. See {@link ng.$rootScope.Scope#$on} for more * details about event object. Upon successful change - * {@link ng.$location#$locationChangeSuccess $locationChangeSuccess} is fired. + * {@link ng.$location#events_$locationChangeSuccess $locationChangeSuccess} is fired. * * @param {Object} angularEvent Synthetic event object. * @param {string} newUrl New URL * @param {string=} oldUrl URL that was before it was changed. */ @@ -20096,20 +20113,24 @@ var pathVal = (locals && locals.hasOwnProperty(key0)) ? locals : scope; if (pathVal == null) return pathVal; pathVal = pathVal[key0]; - if (pathVal == null) return key1 ? undefined : pathVal; + if (!key1) return pathVal; + if (pathVal == null) return undefined; pathVal = pathVal[key1]; - if (pathVal == null) return key2 ? undefined : pathVal; + if (!key2) return pathVal; + if (pathVal == null) return undefined; pathVal = pathVal[key2]; - if (pathVal == null) return key3 ? undefined : pathVal; + if (!key3) return pathVal; + if (pathVal == null) return undefined; pathVal = pathVal[key3]; - if (pathVal == null) return key4 ? undefined : pathVal; + if (!key4) return pathVal; + if (pathVal == null) return undefined; pathVal = pathVal[key4]; return pathVal; } : function cspSafePromiseEnabledGetter(scope, locals) { @@ -20126,48 +20147,52 @@ promise.$$v = undefined; promise.then(function(val) { promise.$$v = val; }); } pathVal = pathVal.$$v; } - if (pathVal == null) return key1 ? undefined : pathVal; + if (!key1) return pathVal; + if (pathVal == null) return undefined; pathVal = pathVal[key1]; if (pathVal && pathVal.then) { promiseWarning(fullExp); if (!("$$v" in pathVal)) { promise = pathVal; promise.$$v = undefined; promise.then(function(val) { promise.$$v = val; }); } pathVal = pathVal.$$v; } - if (pathVal == null) return key2 ? undefined : pathVal; + if (!key2) return pathVal; + if (pathVal == null) return undefined; pathVal = pathVal[key2]; if (pathVal && pathVal.then) { promiseWarning(fullExp); if (!("$$v" in pathVal)) { promise = pathVal; promise.$$v = undefined; promise.then(function(val) { promise.$$v = val; }); } pathVal = pathVal.$$v; } - if (pathVal == null) return key3 ? undefined : pathVal; + if (!key3) return pathVal; + if (pathVal == null) return undefined; pathVal = pathVal[key3]; if (pathVal && pathVal.then) { promiseWarning(fullExp); if (!("$$v" in pathVal)) { promise = pathVal; promise.$$v = undefined; promise.then(function(val) { promise.$$v = val; }); } pathVal = pathVal.$$v; } - if (pathVal == null) return key4 ? undefined : pathVal; + if (!key4) return pathVal; + if (pathVal == null) return undefined; pathVal = pathVal[key4]; if (pathVal && pathVal.then) { promiseWarning(fullExp); if (!("$$v" in pathVal)) { promise = pathVal; @@ -21161,11 +21186,11 @@ child.$$asyncQueue = this.$$asyncQueue; child.$$postDigestQueue = this.$$postDigestQueue; } else { ChildScope = function() {}; // should be anonymous; This is so that when the minifier munges // the name it does not become random set of chars. This will then show up as class - // name in the debugger. + // name in the web inspector. ChildScope.prototype = this; child = new ChildScope(); child.$id = nextUid(); } child['this'] = child; @@ -21262,11 +21287,11 @@ } ); // No digest has been run so the counter will be zero expect(scope.foodCounter).toEqual(0); - // Run the digest but since food has not changed cout will still be zero + // Run the digest but since food has not changed count will still be zero scope.$digest(); expect(scope.foodCounter).toEqual(0); // Update food and run digest. Now the counter will increment food = 'cheeseburger'; @@ -21607,11 +21632,11 @@ } } while ((current = next)); // `break traverseScopesLoop;` takes us to here - if(dirty && !(ttl--)) { + if((dirty || asyncQueue.length) && !(ttl--)) { clearPhase(); throw $rootScopeMinErr('infdig', '{0} $digest() iterations reached. Aborting!\n' + 'Watchers fired in the last 5 iterations: {1}', TTL, toJson(watchLog)); @@ -22458,11 +22483,11 @@ * If the passed parameter is not a value that had been returned by {@link * ng.$sceDelegate#methods_trustAs `$sceDelegate.trustAs`}, returns it as-is. * * @param {*} value The result of a prior {@link ng.$sceDelegate#methods_trustAs `$sceDelegate.trustAs`} * call or anything else. - * @returns {*} The value the was originally provided to {@link ng.$sceDelegate#methods_trustAs + * @returns {*} The `value` that was originally provided to {@link ng.$sceDelegate#methods_trustAs * `$sceDelegate.trustAs`} if `value` is the result of such a call. Otherwise, returns * `value` unchanged. */ function valueOf(maybeTrusted) { if (maybeTrusted instanceof trustedValueHolderBase) { @@ -23685,12 +23710,12 @@ * @param {string|Object|function()} expression The predicate to be used for selecting items from * `array`. * * Can be one of: * - * - `string`: Predicate that results in a substring match using the value of `expression` - * string. All strings or objects with string properties in `array` that contain this string + * - `string`: The string is evaluated as an expression and the resulting value is used for substring match against + * the contents of the `array`. All strings or objects with string properties in `array` that contain this string * will be returned. The predicate can be negated by prefixing the string with `!`. * * - `Object`: A pattern object can be used to filter specific properties on objects contained * by `array`. For example `{name:"M", phone:"1"}` predicate will return an array of items * which have property `name` containing "M" and property `phone` containing "1". A special @@ -23844,27 +23869,16 @@ expression = {$:expression}; // jshint -W086 case "object": // jshint +W086 for (var key in expression) { - if (key == '$') { - (function() { - if (!expression[key]) return; - var path = key; - predicates.push(function(value) { - return search(value, expression[path]); - }); - })(); - } else { - (function() { - if (typeof(expression[key]) == 'undefined') { return; } - var path = key; - predicates.push(function(value) { - return search(getter(value,path), expression[path]); - }); - })(); - } + (function(path) { + if (typeof expression[path] == 'undefined') return; + predicates.push(function(value) { + return search(path == '$' ? value : getter(value, path), expression[path]); + }); + })(key); } break; case 'function': predicates.push(expression); break; @@ -24981,16 +24995,14 @@ var normalized = directiveNormalize('ng-' + attrName); ngAttributeAliasDirectives[normalized] = function() { return { priority: 100, - compile: function() { - return function(scope, element, attr) { - scope.$watch(attr[normalized], function ngBooleanAttrWatchAction(value) { - attr.$set(attrName, !!value); - }); - }; + link: function(scope, element, attr) { + scope.$watch(attr[normalized], function ngBooleanAttrWatchAction(value) { + attr.$set(attrName, !!value); + }); } }; }; }); @@ -25266,14 +25278,14 @@ * attribute of input elements using interpolation, you have to wrap each set of repeated inputs in an * `ngForm` directive and nest these in an outer `form` element. * * * # CSS classes - * - `ng-valid` Is set if the form is valid. - * - `ng-invalid` Is set if the form is invalid. - * - `ng-pristine` Is set if the form is pristine. - * - `ng-dirty` Is set if the form is dirty. + * - `ng-valid` is set if the form is valid. + * - `ng-invalid` is set if the form is invalid. + * - `ng-pristine` is set if the form is pristine. + * - `ng-dirty` is set if the form is dirty. * * * # Submitting a form and preventing the default action * * Since the role of forms in client-side Angular applications is different than in classical @@ -25786,10 +25798,16 @@ 'button': noop, 'submit': noop, 'reset': noop }; +// A helper function to call $setValidity and return the value / undefined, +// a pattern that is repeated a lot in the input validation logic. +function validate(ctrl, validatorName, validity, value){ + ctrl.$setValidity(validatorName, validity); + return validity ? value : undefined; +} function textInputType(scope, element, attr, ctrl, $sniffer, $browser) { // In composition mode, users are still inputing intermediate text buffer, // hold the listener until composition is done. // More about composition events: https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent @@ -25870,37 +25888,30 @@ // pattern validator var pattern = attr.ngPattern, patternValidator, match; - var validate = function(regexp, value) { - if (ctrl.$isEmpty(value) || regexp.test(value)) { - ctrl.$setValidity('pattern', true); - return value; - } else { - ctrl.$setValidity('pattern', false); - return undefined; - } - }; - if (pattern) { + var validateRegex = function(regexp, value) { + return validate(ctrl, 'pattern', ctrl.$isEmpty(value) || regexp.test(value), value); + }; match = pattern.match(/^\/(.*)\/([gim]*)$/); if (match) { pattern = new RegExp(match[1], match[2]); patternValidator = function(value) { - return validate(pattern, value); + return validateRegex(pattern, value); }; } else { patternValidator = function(value) { var patternObj = scope.$eval(pattern); if (!patternObj || !patternObj.test) { throw minErr('ngPattern')('noregexp', 'Expected {0} to be a RegExp but was {1}. Element: {2}', pattern, patternObj, startingTag(element)); } - return validate(patternObj, value); + return validateRegex(patternObj, value); }; } ctrl.$formatters.push(patternValidator); ctrl.$parsers.push(patternValidator); @@ -25908,34 +25919,22 @@ // min length validator if (attr.ngMinlength) { var minlength = int(attr.ngMinlength); var minLengthValidator = function(value) { - if (!ctrl.$isEmpty(value) && value.length < minlength) { - ctrl.$setValidity('minlength', false); - return undefined; - } else { - ctrl.$setValidity('minlength', true); - return value; - } + return validate(ctrl, 'minlength', ctrl.$isEmpty(value) || value.length >= minlength, value); }; ctrl.$parsers.push(minLengthValidator); ctrl.$formatters.push(minLengthValidator); } // max length validator if (attr.ngMaxlength) { var maxlength = int(attr.ngMaxlength); var maxLengthValidator = function(value) { - if (!ctrl.$isEmpty(value) && value.length > maxlength) { - ctrl.$setValidity('maxlength', false); - return undefined; - } else { - ctrl.$setValidity('maxlength', true); - return value; - } + return validate(ctrl, 'maxlength', ctrl.$isEmpty(value) || value.length <= maxlength, value); }; ctrl.$parsers.push(maxLengthValidator); ctrl.$formatters.push(maxLengthValidator); } @@ -25960,79 +25959,48 @@ }); if (attr.min) { var minValidator = function(value) { var min = parseFloat(attr.min); - if (!ctrl.$isEmpty(value) && value < min) { - ctrl.$setValidity('min', false); - return undefined; - } else { - ctrl.$setValidity('min', true); - return value; - } + return validate(ctrl, 'min', ctrl.$isEmpty(value) || value >= min, value); }; ctrl.$parsers.push(minValidator); ctrl.$formatters.push(minValidator); } if (attr.max) { var maxValidator = function(value) { var max = parseFloat(attr.max); - if (!ctrl.$isEmpty(value) && value > max) { - ctrl.$setValidity('max', false); - return undefined; - } else { - ctrl.$setValidity('max', true); - return value; - } + return validate(ctrl, 'max', ctrl.$isEmpty(value) || value <= max, value); }; ctrl.$parsers.push(maxValidator); ctrl.$formatters.push(maxValidator); } ctrl.$formatters.push(function(value) { - - if (ctrl.$isEmpty(value) || isNumber(value)) { - ctrl.$setValidity('number', true); - return value; - } else { - ctrl.$setValidity('number', false); - return undefined; - } + return validate(ctrl, 'number', ctrl.$isEmpty(value) || isNumber(value), value); }); } function urlInputType(scope, element, attr, ctrl, $sniffer, $browser) { textInputType(scope, element, attr, ctrl, $sniffer, $browser); var urlValidator = function(value) { - if (ctrl.$isEmpty(value) || URL_REGEXP.test(value)) { - ctrl.$setValidity('url', true); - return value; - } else { - ctrl.$setValidity('url', false); - return undefined; - } + return validate(ctrl, 'url', ctrl.$isEmpty(value) || URL_REGEXP.test(value), value); }; ctrl.$formatters.push(urlValidator); ctrl.$parsers.push(urlValidator); } function emailInputType(scope, element, attr, ctrl, $sniffer, $browser) { textInputType(scope, element, attr, ctrl, $sniffer, $browser); var emailValidator = function(value) { - if (ctrl.$isEmpty(value) || EMAIL_REGEXP.test(value)) { - ctrl.$setValidity('email', true); - return value; - } else { - ctrl.$setValidity('email', false); - return undefined; - } + return validate(ctrl, 'email', ctrl.$isEmpty(value) || EMAIL_REGEXP.test(value), value); }; ctrl.$formatters.push(emailValidator); ctrl.$parsers.push(emailValidator); } @@ -27632,17 +27600,17 @@ <button ng-click="count = count + 1" ng-init="count=0"> Increment </button> count: {{count}} </doc:source> - <doc:scenario> + <doc:protractor> it('should check ng-click', function() { - expect(binding('count')).toBe('0'); - element('.doc-example-live :button').click(); - expect(binding('count')).toBe('1'); + expect(element(by.binding('count')).getText()).toMatch('0'); + element(by.css('.doc-example-live button')).click(); + expect(element(by.binding('count')).getText()).toMatch('1'); }); - </doc:scenario> + </doc:protractor> </doc:example> */ /* * A directive that allows creation of custom onclick handlers that are defined as angular * expressions and are compiled and executed within the current scope. @@ -28717,10 +28685,12 @@ * | `$middle` | {@type boolean} | true if the repeated element is between the first and last in the iterator. | * | `$last` | {@type boolean} | true if the repeated element is last in the iterator. | * | `$even` | {@type boolean} | true if the iterator position `$index` is even (otherwise false). | * | `$odd` | {@type boolean} | true if the iterator position `$index` is odd (otherwise false). | * + * Creating aliases for these properties is possible with {@link api/ng.directive:ngInit `ngInit`}. + * This may be useful when, for instance, nesting ngRepeats. * * # Special repeat start and end points * To repeat a series of elements instead of just one parent element, ngRepeat (as well as other ng directives) supports extending * the range of the repeater by defining explicit start and end points by using **ng-repeat-start** and **ng-repeat-end** respectively. * The **ng-repeat-start** directive works the same as **ng-repeat**, but will repeat all the HTML code (including the tag it's defined on) @@ -29599,15 +29569,13 @@ var ngSwitchWhenDirective = ngDirective({ transclude: 'element', priority: 800, require: '^ngSwitch', - compile: function(element, attrs) { - return function(scope, element, attr, ctrl, $transclude) { - ctrl.cases['!' + attrs.ngSwitchWhen] = (ctrl.cases['!' + attrs.ngSwitchWhen] || []); - ctrl.cases['!' + attrs.ngSwitchWhen].push({ transclude: $transclude, element: element }); - }; + link: function(scope, element, attrs, ctrl, $transclude) { + ctrl.cases['!' + attrs.ngSwitchWhen] = (ctrl.cases['!' + attrs.ngSwitchWhen] || []); + ctrl.cases['!' + attrs.ngSwitchWhen].push({ transclude: $transclude, element: element }); } }); var ngSwitchDefaultDirective = ngDirective({ transclude: 'element', @@ -29698,14 +29666,18 @@ * @ngdoc directive * @name ng.directive:script * @restrict E * * @description - * Load content of a script tag, with type `text/ng-template`, into `$templateCache`, so that the - * template can be used by `ngInclude`, `ngView` or directive templates. + * Load the content of a `<script>` element into {@link api/ng.$templateCache `$templateCache`}, so that the + * template can be used by {@link api/ng.directive:ngInclude `ngInclude`}, + * {@link api/ngRoute.directive:ngView `ngView`}, or {@link guide/directive directives}. The type of the + * `<script>` element must be specified as `text/ng-template`, and a cache name for the template must be + * assigned through the element's `id`, which can then be used as a directive's `templateUrl`. * - * @param {'text/ng-template'} type must be set to `'text/ng-template'` + * @param {'text/ng-template'} type Must be set to `'text/ng-template'`. + * @param {string} id Cache name of the template. * * @example <doc:example> <doc:source> <script type="text/ng-template" id="/tpl.html"> @@ -29865,11 +29837,11 @@ */ var ngOptionsDirective = valueFn({ terminal: true }); // jshint maxlen: false var selectDirective = ['$compile', '$parse', function($compile, $parse) { - //0000111110000000000022220000000000000000000000333300000000000000444444444444444000000000555555555555555000000066666666666666600000000000000007777000000000000000000088888 - var NG_OPTIONS_REGEXP = /^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+(.*?)(?:\s+track\s+by\s+(.*?))?$/, + //000011111111110000000000022222222220000000000000000000003333333333000000000000004444444444444440000000005555555555555550000000666666666666666000000000000000777777777700000000000000000008888888888 + var NG_OPTIONS_REGEXP = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/, nullModelCtrl = {$setViewValue: noop}; // jshint maxlen: 100 return { restrict: 'E', \ No newline at end of file