summaryrefslogtreecommitdiffstats
path: root/third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/architecture-examples/angularjs/node_modules/angular-route
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/architecture-examples/angularjs/node_modules/angular-route')
-rw-r--r--third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/architecture-examples/angularjs/node_modules/angular-route/angular-route.js1229
-rw-r--r--third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/architecture-examples/angularjs/node_modules/angular-route/angular-route.min.js17
-rw-r--r--third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/architecture-examples/angularjs/node_modules/angular-route/angular-route.min.js.map8
3 files changed, 1254 insertions, 0 deletions
diff --git a/third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/architecture-examples/angularjs/node_modules/angular-route/angular-route.js b/third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/architecture-examples/angularjs/node_modules/angular-route/angular-route.js
new file mode 100644
index 0000000000..a6c9158549
--- /dev/null
+++ b/third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/architecture-examples/angularjs/node_modules/angular-route/angular-route.js
@@ -0,0 +1,1229 @@
+/**
+ * @license AngularJS v1.6.5
+ * (c) 2010-2017 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+(function(window, angular) {'use strict';
+
+/* global shallowCopy: true */
+
+/**
+ * Creates a shallow copy of an object, an array or a primitive.
+ *
+ * Assumes that there are no proto properties for objects.
+ */
+function shallowCopy(src, dst) {
+ if (isArray(src)) {
+ dst = dst || [];
+
+ for (var i = 0, ii = src.length; i < ii; i++) {
+ dst[i] = src[i];
+ }
+ } else if (isObject(src)) {
+ dst = dst || {};
+
+ for (var key in src) {
+ if (!(key.charAt(0) === '$' && key.charAt(1) === '$')) {
+ dst[key] = src[key];
+ }
+ }
+ }
+
+ return dst || src;
+}
+
+/* global shallowCopy: false */
+
+// `isArray` and `isObject` are necessary for `shallowCopy()` (included via `src/shallowCopy.js`).
+// They are initialized inside the `$RouteProvider`, to ensure `window.angular` is available.
+var isArray;
+var isObject;
+var isDefined;
+var noop;
+
+/**
+ * @ngdoc module
+ * @name ngRoute
+ * @description
+ *
+ * # ngRoute
+ *
+ * The `ngRoute` module provides routing and deeplinking services and directives for angular apps.
+ *
+ * ## Example
+ * See {@link ngRoute.$route#example $route} for an example of configuring and using `ngRoute`.
+ *
+ *
+ * <div doc-module-components="ngRoute"></div>
+ */
+/* global -ngRouteModule */
+var ngRouteModule = angular.
+ module('ngRoute', []).
+ info({ angularVersion: '1.6.5' }).
+ provider('$route', $RouteProvider).
+ // Ensure `$route` will be instantiated in time to capture the initial `$locationChangeSuccess`
+ // event (unless explicitly disabled). This is necessary in case `ngView` is included in an
+ // asynchronously loaded template.
+ run(instantiateRoute);
+var $routeMinErr = angular.$$minErr('ngRoute');
+var isEagerInstantiationEnabled;
+
+
+/**
+ * @ngdoc provider
+ * @name $routeProvider
+ * @this
+ *
+ * @description
+ *
+ * Used for configuring routes.
+ *
+ * ## Example
+ * See {@link ngRoute.$route#example $route} for an example of configuring and using `ngRoute`.
+ *
+ * ## Dependencies
+ * Requires the {@link ngRoute `ngRoute`} module to be installed.
+ */
+function $RouteProvider() {
+ isArray = angular.isArray;
+ isObject = angular.isObject;
+ isDefined = angular.isDefined;
+ noop = angular.noop;
+
+ function inherit(parent, extra) {
+ return angular.extend(Object.create(parent), extra);
+ }
+
+ var routes = {};
+
+ /**
+ * @ngdoc method
+ * @name $routeProvider#when
+ *
+ * @param {string} path Route path (matched against `$location.path`). If `$location.path`
+ * contains redundant trailing slash or is missing one, the route will still match and the
+ * `$location.path` will be updated to add or drop the trailing slash to exactly match the
+ * route definition.
+ *
+ * * `path` can contain named groups starting with a colon: e.g. `:name`. All characters up
+ * to the next slash are matched and stored in `$routeParams` under the given `name`
+ * when the route matches.
+ * * `path` can contain named groups starting with a colon and ending with a star:
+ * e.g.`:name*`. All characters are eagerly stored in `$routeParams` under the given `name`
+ * when the route matches.
+ * * `path` can contain optional named groups with a question mark: e.g.`:name?`.
+ *
+ * For example, routes like `/color/:color/largecode/:largecode*\/edit` will match
+ * `/color/brown/largecode/code/with/slashes/edit` and extract:
+ *
+ * * `color: brown`
+ * * `largecode: code/with/slashes`.
+ *
+ *
+ * @param {Object} route Mapping information to be assigned to `$route.current` on route
+ * match.
+ *
+ * Object properties:
+ *
+ * - `controller` – `{(string|Function)=}` – Controller fn that should be associated with
+ * newly created scope or the name of a {@link angular.Module#controller registered
+ * controller} if passed as a string.
+ * - `controllerAs` – `{string=}` – An identifier name for a reference to the controller.
+ * If present, the controller will be published to scope under the `controllerAs` name.
+ * - `template` – `{(string|Function)=}` – html template as a string or a function that
+ * returns an html template as a string which should be used by {@link
+ * ngRoute.directive:ngView ngView} or {@link ng.directive:ngInclude ngInclude} directives.
+ * This property takes precedence over `templateUrl`.
+ *
+ * If `template` is a function, it will be called with the following parameters:
+ *
+ * - `{Array.<Object>}` - route parameters extracted from the current
+ * `$location.path()` by applying the current route
+ *
+ * One of `template` or `templateUrl` is required.
+ *
+ * - `templateUrl` – `{(string|Function)=}` – path or function that returns a path to an html
+ * template that should be used by {@link ngRoute.directive:ngView ngView}.
+ *
+ * If `templateUrl` is a function, it will be called with the following parameters:
+ *
+ * - `{Array.<Object>}` - route parameters extracted from the current
+ * `$location.path()` by applying the current route
+ *
+ * One of `templateUrl` or `template` is required.
+ *
+ * - `resolve` - `{Object.<string, Function>=}` - An optional map of dependencies which should
+ * be injected into the controller. If any of these dependencies are promises, the router
+ * will wait for them all to be resolved or one to be rejected before the controller is
+ * instantiated.
+ * If all the promises are resolved successfully, the values of the resolved promises are
+ * injected and {@link ngRoute.$route#$routeChangeSuccess $routeChangeSuccess} event is
+ * fired. If any of the promises are rejected the
+ * {@link ngRoute.$route#$routeChangeError $routeChangeError} event is fired.
+ * For easier access to the resolved dependencies from the template, the `resolve` map will
+ * be available on the scope of the route, under `$resolve` (by default) or a custom name
+ * specified by the `resolveAs` property (see below). This can be particularly useful, when
+ * working with {@link angular.Module#component components} as route templates.<br />
+ * <div class="alert alert-warning">
+ * **Note:** If your scope already contains a property with this name, it will be hidden
+ * or overwritten. Make sure, you specify an appropriate name for this property, that
+ * does not collide with other properties on the scope.
+ * </div>
+ * The map object is:
+ *
+ * - `key` – `{string}`: a name of a dependency to be injected into the controller.
+ * - `factory` - `{string|Function}`: If `string` then it is an alias for a service.
+ * Otherwise if function, then it is {@link auto.$injector#invoke injected}
+ * and the return value is treated as the dependency. If the result is a promise, it is
+ * resolved before its value is injected into the controller. Be aware that
+ * `ngRoute.$routeParams` will still refer to the previous route within these resolve
+ * functions. Use `$route.current.params` to access the new route parameters, instead.
+ *
+ * - `resolveAs` - `{string=}` - The name under which the `resolve` map will be available on
+ * the scope of the route. If omitted, defaults to `$resolve`.
+ *
+ * - `redirectTo` – `{(string|Function)=}` – value to update
+ * {@link ng.$location $location} path with and trigger route redirection.
+ *
+ * If `redirectTo` is a function, it will be called with the following parameters:
+ *
+ * - `{Object.<string>}` - route parameters extracted from the current
+ * `$location.path()` by applying the current route templateUrl.
+ * - `{string}` - current `$location.path()`
+ * - `{Object}` - current `$location.search()`
+ *
+ * The custom `redirectTo` function is expected to return a string which will be used
+ * to update `$location.url()`. If the function throws an error, no further processing will
+ * take place and the {@link ngRoute.$route#$routeChangeError $routeChangeError} event will
+ * be fired.
+ *
+ * Routes that specify `redirectTo` will not have their controllers, template functions
+ * or resolves called, the `$location` will be changed to the redirect url and route
+ * processing will stop. The exception to this is if the `redirectTo` is a function that
+ * returns `undefined`. In this case the route transition occurs as though there was no
+ * redirection.
+ *
+ * - `resolveRedirectTo` – `{Function=}` – a function that will (eventually) return the value
+ * to update {@link ng.$location $location} URL with and trigger route redirection. In
+ * contrast to `redirectTo`, dependencies can be injected into `resolveRedirectTo` and the
+ * return value can be either a string or a promise that will be resolved to a string.
+ *
+ * Similar to `redirectTo`, if the return value is `undefined` (or a promise that gets
+ * resolved to `undefined`), no redirection takes place and the route transition occurs as
+ * though there was no redirection.
+ *
+ * If the function throws an error or the returned promise gets rejected, no further
+ * processing will take place and the
+ * {@link ngRoute.$route#$routeChangeError $routeChangeError} event will be fired.
+ *
+ * `redirectTo` takes precedence over `resolveRedirectTo`, so specifying both on the same
+ * route definition, will cause the latter to be ignored.
+ *
+ * - `[reloadOnSearch=true]` - `{boolean=}` - reload route when only `$location.search()`
+ * or `$location.hash()` changes.
+ *
+ * If the option is set to `false` and url in the browser changes, then
+ * `$routeUpdate` event is broadcasted on the root scope.
+ *
+ * - `[caseInsensitiveMatch=false]` - `{boolean=}` - match routes without being case sensitive
+ *
+ * If the option is set to `true`, then the particular route can be matched without being
+ * case sensitive
+ *
+ * @returns {Object} self
+ *
+ * @description
+ * Adds a new route definition to the `$route` service.
+ */
+ this.when = function(path, route) {
+ //copy original route object to preserve params inherited from proto chain
+ var routeCopy = shallowCopy(route);
+ if (angular.isUndefined(routeCopy.reloadOnSearch)) {
+ routeCopy.reloadOnSearch = true;
+ }
+ if (angular.isUndefined(routeCopy.caseInsensitiveMatch)) {
+ routeCopy.caseInsensitiveMatch = this.caseInsensitiveMatch;
+ }
+ routes[path] = angular.extend(
+ routeCopy,
+ path && pathRegExp(path, routeCopy)
+ );
+
+ // create redirection for trailing slashes
+ if (path) {
+ var redirectPath = (path[path.length - 1] === '/')
+ ? path.substr(0, path.length - 1)
+ : path + '/';
+
+ routes[redirectPath] = angular.extend(
+ {redirectTo: path},
+ pathRegExp(redirectPath, routeCopy)
+ );
+ }
+
+ return this;
+ };
+
+ /**
+ * @ngdoc property
+ * @name $routeProvider#caseInsensitiveMatch
+ * @description
+ *
+ * A boolean property indicating if routes defined
+ * using this provider should be matched using a case insensitive
+ * algorithm. Defaults to `false`.
+ */
+ this.caseInsensitiveMatch = false;
+
+ /**
+ * @param path {string} path
+ * @param opts {Object} options
+ * @return {?Object}
+ *
+ * @description
+ * Normalizes the given path, returning a regular expression
+ * and the original path.
+ *
+ * Inspired by pathRexp in visionmedia/express/lib/utils.js.
+ */
+ function pathRegExp(path, opts) {
+ var insensitive = opts.caseInsensitiveMatch,
+ ret = {
+ originalPath: path,
+ regexp: path
+ },
+ keys = ret.keys = [];
+
+ path = path
+ .replace(/([().])/g, '\\$1')
+ .replace(/(\/)?:(\w+)(\*\?|[?*])?/g, function(_, slash, key, option) {
+ var optional = (option === '?' || option === '*?') ? '?' : null;
+ var star = (option === '*' || option === '*?') ? '*' : null;
+ keys.push({ name: key, optional: !!optional });
+ slash = slash || '';
+ return ''
+ + (optional ? '' : slash)
+ + '(?:'
+ + (optional ? slash : '')
+ + (star && '(.+?)' || '([^/]+)')
+ + (optional || '')
+ + ')'
+ + (optional || '');
+ })
+ .replace(/([/$*])/g, '\\$1');
+
+ ret.regexp = new RegExp('^' + path + '$', insensitive ? 'i' : '');
+ return ret;
+ }
+
+ /**
+ * @ngdoc method
+ * @name $routeProvider#otherwise
+ *
+ * @description
+ * Sets route definition that will be used on route change when no other route definition
+ * is matched.
+ *
+ * @param {Object|string} params Mapping information to be assigned to `$route.current`.
+ * If called with a string, the value maps to `redirectTo`.
+ * @returns {Object} self
+ */
+ this.otherwise = function(params) {
+ if (typeof params === 'string') {
+ params = {redirectTo: params};
+ }
+ this.when(null, params);
+ return this;
+ };
+
+ /**
+ * @ngdoc method
+ * @name $routeProvider#eagerInstantiationEnabled
+ * @kind function
+ *
+ * @description
+ * Call this method as a setter to enable/disable eager instantiation of the
+ * {@link ngRoute.$route $route} service upon application bootstrap. You can also call it as a
+ * getter (i.e. without any arguments) to get the current value of the
+ * `eagerInstantiationEnabled` flag.
+ *
+ * Instantiating `$route` early is necessary for capturing the initial
+ * {@link ng.$location#$locationChangeStart $locationChangeStart} event and navigating to the
+ * appropriate route. Usually, `$route` is instantiated in time by the
+ * {@link ngRoute.ngView ngView} directive. Yet, in cases where `ngView` is included in an
+ * asynchronously loaded template (e.g. in another directive's template), the directive factory
+ * might not be called soon enough for `$route` to be instantiated _before_ the initial
+ * `$locationChangeSuccess` event is fired. Eager instantiation ensures that `$route` is always
+ * instantiated in time, regardless of when `ngView` will be loaded.
+ *
+ * The default value is true.
+ *
+ * **Note**:<br />
+ * You may want to disable the default behavior when unit-testing modules that depend on
+ * `ngRoute`, in order to avoid an unexpected request for the default route's template.
+ *
+ * @param {boolean=} enabled - If provided, update the internal `eagerInstantiationEnabled` flag.
+ *
+ * @returns {*} The current value of the `eagerInstantiationEnabled` flag if used as a getter or
+ * itself (for chaining) if used as a setter.
+ */
+ isEagerInstantiationEnabled = true;
+ this.eagerInstantiationEnabled = function eagerInstantiationEnabled(enabled) {
+ if (isDefined(enabled)) {
+ isEagerInstantiationEnabled = enabled;
+ return this;
+ }
+
+ return isEagerInstantiationEnabled;
+ };
+
+
+ this.$get = ['$rootScope',
+ '$location',
+ '$routeParams',
+ '$q',
+ '$injector',
+ '$templateRequest',
+ '$sce',
+ '$browser',
+ function($rootScope, $location, $routeParams, $q, $injector, $templateRequest, $sce, $browser) {
+
+ /**
+ * @ngdoc service
+ * @name $route
+ * @requires $location
+ * @requires $routeParams
+ *
+ * @property {Object} current Reference to the current route definition.
+ * The route definition contains:
+ *
+ * - `controller`: The controller constructor as defined in the route definition.
+ * - `locals`: A map of locals which is used by {@link ng.$controller $controller} service for
+ * controller instantiation. The `locals` contain
+ * the resolved values of the `resolve` map. Additionally the `locals` also contain:
+ *
+ * - `$scope` - The current route scope.
+ * - `$template` - The current route template HTML.
+ *
+ * The `locals` will be assigned to the route scope's `$resolve` property. You can override
+ * the property name, using `resolveAs` in the route definition. See
+ * {@link ngRoute.$routeProvider $routeProvider} for more info.
+ *
+ * @property {Object} routes Object with all route configuration Objects as its properties.
+ *
+ * @description
+ * `$route` is used for deep-linking URLs to controllers and views (HTML partials).
+ * It watches `$location.url()` and tries to map the path to an existing route definition.
+ *
+ * Requires the {@link ngRoute `ngRoute`} module to be installed.
+ *
+ * You can define routes through {@link ngRoute.$routeProvider $routeProvider}'s API.
+ *
+ * The `$route` service is typically used in conjunction with the
+ * {@link ngRoute.directive:ngView `ngView`} directive and the
+ * {@link ngRoute.$routeParams `$routeParams`} service.
+ *
+ * @example
+ * This example shows how changing the URL hash causes the `$route` to match a route against the
+ * URL, and the `ngView` pulls in the partial.
+ *
+ * <example name="$route-service" module="ngRouteExample"
+ * deps="angular-route.js" fixBase="true">
+ * <file name="index.html">
+ * <div ng-controller="MainController">
+ * Choose:
+ * <a href="Book/Moby">Moby</a> |
+ * <a href="Book/Moby/ch/1">Moby: Ch1</a> |
+ * <a href="Book/Gatsby">Gatsby</a> |
+ * <a href="Book/Gatsby/ch/4?key=value">Gatsby: Ch4</a> |
+ * <a href="Book/Scarlet">Scarlet Letter</a><br/>
+ *
+ * <div ng-view></div>
+ *
+ * <hr />
+ *
+ * <pre>$location.path() = {{$location.path()}}</pre>
+ * <pre>$route.current.templateUrl = {{$route.current.templateUrl}}</pre>
+ * <pre>$route.current.params = {{$route.current.params}}</pre>
+ * <pre>$route.current.scope.name = {{$route.current.scope.name}}</pre>
+ * <pre>$routeParams = {{$routeParams}}</pre>
+ * </div>
+ * </file>
+ *
+ * <file name="book.html">
+ * controller: {{name}}<br />
+ * Book Id: {{params.bookId}}<br />
+ * </file>
+ *
+ * <file name="chapter.html">
+ * controller: {{name}}<br />
+ * Book Id: {{params.bookId}}<br />
+ * Chapter Id: {{params.chapterId}}
+ * </file>
+ *
+ * <file name="script.js">
+ * angular.module('ngRouteExample', ['ngRoute'])
+ *
+ * .controller('MainController', function($scope, $route, $routeParams, $location) {
+ * $scope.$route = $route;
+ * $scope.$location = $location;
+ * $scope.$routeParams = $routeParams;
+ * })
+ *
+ * .controller('BookController', function($scope, $routeParams) {
+ * $scope.name = 'BookController';
+ * $scope.params = $routeParams;
+ * })
+ *
+ * .controller('ChapterController', function($scope, $routeParams) {
+ * $scope.name = 'ChapterController';
+ * $scope.params = $routeParams;
+ * })
+ *
+ * .config(function($routeProvider, $locationProvider) {
+ * $routeProvider
+ * .when('/Book/:bookId', {
+ * templateUrl: 'book.html',
+ * controller: 'BookController',
+ * resolve: {
+ * // I will cause a 1 second delay
+ * delay: function($q, $timeout) {
+ * var delay = $q.defer();
+ * $timeout(delay.resolve, 1000);
+ * return delay.promise;
+ * }
+ * }
+ * })
+ * .when('/Book/:bookId/ch/:chapterId', {
+ * templateUrl: 'chapter.html',
+ * controller: 'ChapterController'
+ * });
+ *
+ * // configure html5 to get links working on jsfiddle
+ * $locationProvider.html5Mode(true);
+ * });
+ *
+ * </file>
+ *
+ * <file name="protractor.js" type="protractor">
+ * it('should load and compile correct template', function() {
+ * element(by.linkText('Moby: Ch1')).click();
+ * var content = element(by.css('[ng-view]')).getText();
+ * expect(content).toMatch(/controller: ChapterController/);
+ * expect(content).toMatch(/Book Id: Moby/);
+ * expect(content).toMatch(/Chapter Id: 1/);
+ *
+ * element(by.partialLinkText('Scarlet')).click();
+ *
+ * content = element(by.css('[ng-view]')).getText();
+ * expect(content).toMatch(/controller: BookController/);
+ * expect(content).toMatch(/Book Id: Scarlet/);
+ * });
+ * </file>
+ * </example>
+ */
+
+ /**
+ * @ngdoc event
+ * @name $route#$routeChangeStart
+ * @eventType broadcast on root scope
+ * @description
+ * Broadcasted before a route change. At this point the route services starts
+ * resolving all of the dependencies needed for the route change to occur.
+ * Typically this involves fetching the view template as well as any dependencies
+ * defined in `resolve` route property. Once all of the dependencies are resolved
+ * `$routeChangeSuccess` is fired.
+ *
+ * The route change (and the `$location` change that triggered it) can be prevented
+ * by calling `preventDefault` method of the event. See {@link ng.$rootScope.Scope#$on}
+ * for more details about event object.
+ *
+ * @param {Object} angularEvent Synthetic event object.
+ * @param {Route} next Future route information.
+ * @param {Route} current Current route information.
+ */
+
+ /**
+ * @ngdoc event
+ * @name $route#$routeChangeSuccess
+ * @eventType broadcast on root scope
+ * @description
+ * Broadcasted after a route change has happened successfully.
+ * The `resolve` dependencies are now available in the `current.locals` property.
+ *
+ * {@link ngRoute.directive:ngView ngView} listens for the directive
+ * to instantiate the controller and render the view.
+ *
+ * @param {Object} angularEvent Synthetic event object.
+ * @param {Route} current Current route information.
+ * @param {Route|Undefined} previous Previous route information, or undefined if current is
+ * first route entered.
+ */
+
+ /**
+ * @ngdoc event
+ * @name $route#$routeChangeError
+ * @eventType broadcast on root scope
+ * @description
+ * Broadcasted if a redirection function fails or any redirection or resolve promises are
+ * rejected.
+ *
+ * @param {Object} angularEvent Synthetic event object
+ * @param {Route} current Current route information.
+ * @param {Route} previous Previous route information.
+ * @param {Route} rejection The thrown error or the rejection reason of the promise. Usually
+ * the rejection reason is the error that caused the promise to get rejected.
+ */
+
+ /**
+ * @ngdoc event
+ * @name $route#$routeUpdate
+ * @eventType broadcast on root scope
+ * @description
+ * The `reloadOnSearch` property has been set to false, and we are reusing the same
+ * instance of the Controller.
+ *
+ * @param {Object} angularEvent Synthetic event object
+ * @param {Route} current Current/previous route information.
+ */
+
+ var forceReload = false,
+ preparedRoute,
+ preparedRouteIsUpdateOnly,
+ $route = {
+ routes: routes,
+
+ /**
+ * @ngdoc method
+ * @name $route#reload
+ *
+ * @description
+ * Causes `$route` service to reload the current route even if
+ * {@link ng.$location $location} hasn't changed.
+ *
+ * As a result of that, {@link ngRoute.directive:ngView ngView}
+ * creates new scope and reinstantiates the controller.
+ */
+ reload: function() {
+ forceReload = true;
+
+ var fakeLocationEvent = {
+ defaultPrevented: false,
+ preventDefault: function fakePreventDefault() {
+ this.defaultPrevented = true;
+ forceReload = false;
+ }
+ };
+
+ $rootScope.$evalAsync(function() {
+ prepareRoute(fakeLocationEvent);
+ if (!fakeLocationEvent.defaultPrevented) commitRoute();
+ });
+ },
+
+ /**
+ * @ngdoc method
+ * @name $route#updateParams
+ *
+ * @description
+ * Causes `$route` service to update the current URL, replacing
+ * current route parameters with those specified in `newParams`.
+ * Provided property names that match the route's path segment
+ * definitions will be interpolated into the location's path, while
+ * remaining properties will be treated as query params.
+ *
+ * @param {!Object<string, string>} newParams mapping of URL parameter names to values
+ */
+ updateParams: function(newParams) {
+ if (this.current && this.current.$$route) {
+ newParams = angular.extend({}, this.current.params, newParams);
+ $location.path(interpolate(this.current.$$route.originalPath, newParams));
+ // interpolate modifies newParams, only query params are left
+ $location.search(newParams);
+ } else {
+ throw $routeMinErr('norout', 'Tried updating route when with no current route');
+ }
+ }
+ };
+
+ $rootScope.$on('$locationChangeStart', prepareRoute);
+ $rootScope.$on('$locationChangeSuccess', commitRoute);
+
+ return $route;
+
+ /////////////////////////////////////////////////////
+
+ /**
+ * @param on {string} current url
+ * @param route {Object} route regexp to match the url against
+ * @return {?Object}
+ *
+ * @description
+ * Check if the route matches the current url.
+ *
+ * Inspired by match in
+ * visionmedia/express/lib/router/router.js.
+ */
+ function switchRouteMatcher(on, route) {
+ var keys = route.keys,
+ params = {};
+
+ if (!route.regexp) return null;
+
+ var m = route.regexp.exec(on);
+ if (!m) return null;
+
+ for (var i = 1, len = m.length; i < len; ++i) {
+ var key = keys[i - 1];
+
+ var val = m[i];
+
+ if (key && val) {
+ params[key.name] = val;
+ }
+ }
+ return params;
+ }
+
+ function prepareRoute($locationEvent) {
+ var lastRoute = $route.current;
+
+ preparedRoute = parseRoute();
+ preparedRouteIsUpdateOnly = preparedRoute && lastRoute && preparedRoute.$$route === lastRoute.$$route
+ && angular.equals(preparedRoute.pathParams, lastRoute.pathParams)
+ && !preparedRoute.reloadOnSearch && !forceReload;
+
+ if (!preparedRouteIsUpdateOnly && (lastRoute || preparedRoute)) {
+ if ($rootScope.$broadcast('$routeChangeStart', preparedRoute, lastRoute).defaultPrevented) {
+ if ($locationEvent) {
+ $locationEvent.preventDefault();
+ }
+ }
+ }
+ }
+
+ function commitRoute() {
+ var lastRoute = $route.current;
+ var nextRoute = preparedRoute;
+
+ if (preparedRouteIsUpdateOnly) {
+ lastRoute.params = nextRoute.params;
+ angular.copy(lastRoute.params, $routeParams);
+ $rootScope.$broadcast('$routeUpdate', lastRoute);
+ } else if (nextRoute || lastRoute) {
+ forceReload = false;
+ $route.current = nextRoute;
+
+ var nextRoutePromise = $q.resolve(nextRoute);
+
+ $browser.$$incOutstandingRequestCount();
+
+ nextRoutePromise.
+ then(getRedirectionData).
+ then(handlePossibleRedirection).
+ then(function(keepProcessingRoute) {
+ return keepProcessingRoute && nextRoutePromise.
+ then(resolveLocals).
+ then(function(locals) {
+ // after route change
+ if (nextRoute === $route.current) {
+ if (nextRoute) {
+ nextRoute.locals = locals;
+ angular.copy(nextRoute.params, $routeParams);
+ }
+ $rootScope.$broadcast('$routeChangeSuccess', nextRoute, lastRoute);
+ }
+ });
+ }).catch(function(error) {
+ if (nextRoute === $route.current) {
+ $rootScope.$broadcast('$routeChangeError', nextRoute, lastRoute, error);
+ }
+ }).finally(function() {
+ // Because `commitRoute()` is called from a `$rootScope.$evalAsync` block (see
+ // `$locationWatch`), this `$$completeOutstandingRequest()` call will not cause
+ // `outstandingRequestCount` to hit zero. This is important in case we are redirecting
+ // to a new route which also requires some asynchronous work.
+
+ $browser.$$completeOutstandingRequest(noop);
+ });
+ }
+ }
+
+ function getRedirectionData(route) {
+ var data = {
+ route: route,
+ hasRedirection: false
+ };
+
+ if (route) {
+ if (route.redirectTo) {
+ if (angular.isString(route.redirectTo)) {
+ data.path = interpolate(route.redirectTo, route.params);
+ data.search = route.params;
+ data.hasRedirection = true;
+ } else {
+ var oldPath = $location.path();
+ var oldSearch = $location.search();
+ var newUrl = route.redirectTo(route.pathParams, oldPath, oldSearch);
+
+ if (angular.isDefined(newUrl)) {
+ data.url = newUrl;
+ data.hasRedirection = true;
+ }
+ }
+ } else if (route.resolveRedirectTo) {
+ return $q.
+ resolve($injector.invoke(route.resolveRedirectTo)).
+ then(function(newUrl) {
+ if (angular.isDefined(newUrl)) {
+ data.url = newUrl;
+ data.hasRedirection = true;
+ }
+
+ return data;
+ });
+ }
+ }
+
+ return data;
+ }
+
+ function handlePossibleRedirection(data) {
+ var keepProcessingRoute = true;
+
+ if (data.route !== $route.current) {
+ keepProcessingRoute = false;
+ } else if (data.hasRedirection) {
+ var oldUrl = $location.url();
+ var newUrl = data.url;
+
+ if (newUrl) {
+ $location.
+ url(newUrl).
+ replace();
+ } else {
+ newUrl = $location.
+ path(data.path).
+ search(data.search).
+ replace().
+ url();
+ }
+
+ if (newUrl !== oldUrl) {
+ // Exit out and don't process current next value,
+ // wait for next location change from redirect
+ keepProcessingRoute = false;
+ }
+ }
+
+ return keepProcessingRoute;
+ }
+
+ function resolveLocals(route) {
+ if (route) {
+ var locals = angular.extend({}, route.resolve);
+ angular.forEach(locals, function(value, key) {
+ locals[key] = angular.isString(value) ?
+ $injector.get(value) :
+ $injector.invoke(value, null, null, key);
+ });
+ var template = getTemplateFor(route);
+ if (angular.isDefined(template)) {
+ locals['$template'] = template;
+ }
+ return $q.all(locals);
+ }
+ }
+
+ function getTemplateFor(route) {
+ var template, templateUrl;
+ if (angular.isDefined(template = route.template)) {
+ if (angular.isFunction(template)) {
+ template = template(route.params);
+ }
+ } else if (angular.isDefined(templateUrl = route.templateUrl)) {
+ if (angular.isFunction(templateUrl)) {
+ templateUrl = templateUrl(route.params);
+ }
+ if (angular.isDefined(templateUrl)) {
+ route.loadedTemplateUrl = $sce.valueOf(templateUrl);
+ template = $templateRequest(templateUrl);
+ }
+ }
+ return template;
+ }
+
+ /**
+ * @returns {Object} the current active route, by matching it against the URL
+ */
+ function parseRoute() {
+ // Match a route
+ var params, match;
+ angular.forEach(routes, function(route, path) {
+ if (!match && (params = switchRouteMatcher($location.path(), route))) {
+ match = inherit(route, {
+ params: angular.extend({}, $location.search(), params),
+ pathParams: params});
+ match.$$route = route;
+ }
+ });
+ // No route matched; fallback to "otherwise" route
+ return match || routes[null] && inherit(routes[null], {params: {}, pathParams:{}});
+ }
+
+ /**
+ * @returns {string} interpolation of the redirect path with the parameters
+ */
+ function interpolate(string, params) {
+ var result = [];
+ angular.forEach((string || '').split(':'), function(segment, i) {
+ if (i === 0) {
+ result.push(segment);
+ } else {
+ var segmentMatch = segment.match(/(\w+)(?:[?*])?(.*)/);
+ var key = segmentMatch[1];
+ result.push(params[key]);
+ result.push(segmentMatch[2] || '');
+ delete params[key];
+ }
+ });
+ return result.join('');
+ }
+ }];
+}
+
+instantiateRoute.$inject = ['$injector'];
+function instantiateRoute($injector) {
+ if (isEagerInstantiationEnabled) {
+ // Instantiate `$route`
+ $injector.get('$route');
+ }
+}
+
+ngRouteModule.provider('$routeParams', $RouteParamsProvider);
+
+
+/**
+ * @ngdoc service
+ * @name $routeParams
+ * @requires $route
+ * @this
+ *
+ * @description
+ * The `$routeParams` service allows you to retrieve the current set of route parameters.
+ *
+ * Requires the {@link ngRoute `ngRoute`} module to be installed.
+ *
+ * The route parameters are a combination of {@link ng.$location `$location`}'s
+ * {@link ng.$location#search `search()`} and {@link ng.$location#path `path()`}.
+ * The `path` parameters are extracted when the {@link ngRoute.$route `$route`} path is matched.
+ *
+ * In case of parameter name collision, `path` params take precedence over `search` params.
+ *
+ * The service guarantees that the identity of the `$routeParams` object will remain unchanged
+ * (but its properties will likely change) even when a route change occurs.
+ *
+ * Note that the `$routeParams` are only updated *after* a route change completes successfully.
+ * This means that you cannot rely on `$routeParams` being correct in route resolve functions.
+ * Instead you can use `$route.current.params` to access the new route's parameters.
+ *
+ * @example
+ * ```js
+ * // Given:
+ * // URL: http://server.com/index.html#/Chapter/1/Section/2?search=moby
+ * // Route: /Chapter/:chapterId/Section/:sectionId
+ * //
+ * // Then
+ * $routeParams ==> {chapterId:'1', sectionId:'2', search:'moby'}
+ * ```
+ */
+function $RouteParamsProvider() {
+ this.$get = function() { return {}; };
+}
+
+ngRouteModule.directive('ngView', ngViewFactory);
+ngRouteModule.directive('ngView', ngViewFillContentFactory);
+
+
+/**
+ * @ngdoc directive
+ * @name ngView
+ * @restrict ECA
+ *
+ * @description
+ * # Overview
+ * `ngView` is a directive that complements the {@link ngRoute.$route $route} service by
+ * including the rendered template of the current route into the main layout (`index.html`) file.
+ * Every time the current route changes, the included view changes with it according to the
+ * configuration of the `$route` service.
+ *
+ * Requires the {@link ngRoute `ngRoute`} module to be installed.
+ *
+ * @animations
+ * | Animation | Occurs |
+ * |----------------------------------|-------------------------------------|
+ * | {@link ng.$animate#enter enter} | when the new element is inserted to the DOM |
+ * | {@link ng.$animate#leave leave} | when the old element is removed from to the DOM |
+ *
+ * The enter and leave animation occur concurrently.
+ *
+ * @scope
+ * @priority 400
+ * @param {string=} onload Expression to evaluate whenever the view updates.
+ *
+ * @param {string=} autoscroll Whether `ngView` should call {@link ng.$anchorScroll
+ * $anchorScroll} to scroll the viewport after the view is updated.
+ *
+ * - If the attribute is not set, disable scrolling.
+ * - If the attribute is set without value, enable scrolling.
+ * - Otherwise enable scrolling only if the `autoscroll` attribute value evaluated
+ * as an expression yields a truthy value.
+ * @example
+ <example name="ngView-directive" module="ngViewExample"
+ deps="angular-route.js;angular-animate.js"
+ animations="true" fixBase="true">
+ <file name="index.html">
+ <div ng-controller="MainCtrl as main">
+ Choose:
+ <a href="Book/Moby">Moby</a> |
+ <a href="Book/Moby/ch/1">Moby: Ch1</a> |
+ <a href="Book/Gatsby">Gatsby</a> |
+ <a href="Book/Gatsby/ch/4?key=value">Gatsby: Ch4</a> |
+ <a href="Book/Scarlet">Scarlet Letter</a><br/>
+
+ <div class="view-animate-container">
+ <div ng-view class="view-animate"></div>
+ </div>
+ <hr />
+
+ <pre>$location.path() = {{main.$location.path()}}</pre>
+ <pre>$route.current.templateUrl = {{main.$route.current.templateUrl}}</pre>
+ <pre>$route.current.params = {{main.$route.current.params}}</pre>
+ <pre>$routeParams = {{main.$routeParams}}</pre>
+ </div>
+ </file>
+
+ <file name="book.html">
+ <div>
+ controller: {{book.name}}<br />
+ Book Id: {{book.params.bookId}}<br />
+ </div>
+ </file>
+
+ <file name="chapter.html">
+ <div>
+ controller: {{chapter.name}}<br />
+ Book Id: {{chapter.params.bookId}}<br />
+ Chapter Id: {{chapter.params.chapterId}}
+ </div>
+ </file>
+
+ <file name="animations.css">
+ .view-animate-container {
+ position:relative;
+ height:100px!important;
+ background:white;
+ border:1px solid black;
+ height:40px;
+ overflow:hidden;
+ }
+
+ .view-animate {
+ padding:10px;
+ }
+
+ .view-animate.ng-enter, .view-animate.ng-leave {
+ transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 1.5s;
+
+ display:block;
+ width:100%;
+ border-left:1px solid black;
+
+ position:absolute;
+ top:0;
+ left:0;
+ right:0;
+ bottom:0;
+ padding:10px;
+ }
+
+ .view-animate.ng-enter {
+ left:100%;
+ }
+ .view-animate.ng-enter.ng-enter-active {
+ left:0;
+ }
+ .view-animate.ng-leave.ng-leave-active {
+ left:-100%;
+ }
+ </file>
+
+ <file name="script.js">
+ angular.module('ngViewExample', ['ngRoute', 'ngAnimate'])
+ .config(['$routeProvider', '$locationProvider',
+ function($routeProvider, $locationProvider) {
+ $routeProvider
+ .when('/Book/:bookId', {
+ templateUrl: 'book.html',
+ controller: 'BookCtrl',
+ controllerAs: 'book'
+ })
+ .when('/Book/:bookId/ch/:chapterId', {
+ templateUrl: 'chapter.html',
+ controller: 'ChapterCtrl',
+ controllerAs: 'chapter'
+ });
+
+ $locationProvider.html5Mode(true);
+ }])
+ .controller('MainCtrl', ['$route', '$routeParams', '$location',
+ function MainCtrl($route, $routeParams, $location) {
+ this.$route = $route;
+ this.$location = $location;
+ this.$routeParams = $routeParams;
+ }])
+ .controller('BookCtrl', ['$routeParams', function BookCtrl($routeParams) {
+ this.name = 'BookCtrl';
+ this.params = $routeParams;
+ }])
+ .controller('ChapterCtrl', ['$routeParams', function ChapterCtrl($routeParams) {
+ this.name = 'ChapterCtrl';
+ this.params = $routeParams;
+ }]);
+
+ </file>
+
+ <file name="protractor.js" type="protractor">
+ it('should load and compile correct template', function() {
+ element(by.linkText('Moby: Ch1')).click();
+ var content = element(by.css('[ng-view]')).getText();
+ expect(content).toMatch(/controller: ChapterCtrl/);
+ expect(content).toMatch(/Book Id: Moby/);
+ expect(content).toMatch(/Chapter Id: 1/);
+
+ element(by.partialLinkText('Scarlet')).click();
+
+ content = element(by.css('[ng-view]')).getText();
+ expect(content).toMatch(/controller: BookCtrl/);
+ expect(content).toMatch(/Book Id: Scarlet/);
+ });
+ </file>
+ </example>
+ */
+
+
+/**
+ * @ngdoc event
+ * @name ngView#$viewContentLoaded
+ * @eventType emit on the current ngView scope
+ * @description
+ * Emitted every time the ngView content is reloaded.
+ */
+ngViewFactory.$inject = ['$route', '$anchorScroll', '$animate'];
+function ngViewFactory($route, $anchorScroll, $animate) {
+ return {
+ restrict: 'ECA',
+ terminal: true,
+ priority: 400,
+ transclude: 'element',
+ link: function(scope, $element, attr, ctrl, $transclude) {
+ var currentScope,
+ currentElement,
+ previousLeaveAnimation,
+ autoScrollExp = attr.autoscroll,
+ onloadExp = attr.onload || '';
+
+ scope.$on('$routeChangeSuccess', update);
+ update();
+
+ function cleanupLastView() {
+ if (previousLeaveAnimation) {
+ $animate.cancel(previousLeaveAnimation);
+ previousLeaveAnimation = null;
+ }
+
+ if (currentScope) {
+ currentScope.$destroy();
+ currentScope = null;
+ }
+ if (currentElement) {
+ previousLeaveAnimation = $animate.leave(currentElement);
+ previousLeaveAnimation.done(function(response) {
+ if (response !== false) previousLeaveAnimation = null;
+ });
+ currentElement = null;
+ }
+ }
+
+ function update() {
+ var locals = $route.current && $route.current.locals,
+ template = locals && locals.$template;
+
+ if (angular.isDefined(template)) {
+ var newScope = scope.$new();
+ var current = $route.current;
+
+ // Note: This will also link all children of ng-view that were contained in the original
+ // html. If that content contains controllers, ... they could pollute/change the scope.
+ // However, using ng-view on an element with additional content does not make sense...
+ // Note: We can't remove them in the cloneAttchFn of $transclude as that
+ // function is called before linking the content, which would apply child
+ // directives to non existing elements.
+ var clone = $transclude(newScope, function(clone) {
+ $animate.enter(clone, null, currentElement || $element).done(function onNgViewEnter(response) {
+ if (response !== false && angular.isDefined(autoScrollExp)
+ && (!autoScrollExp || scope.$eval(autoScrollExp))) {
+ $anchorScroll();
+ }
+ });
+ cleanupLastView();
+ });
+
+ currentElement = clone;
+ currentScope = current.scope = newScope;
+ currentScope.$emit('$viewContentLoaded');
+ currentScope.$eval(onloadExp);
+ } else {
+ cleanupLastView();
+ }
+ }
+ }
+ };
+}
+
+// This directive is called during the $transclude call of the first `ngView` directive.
+// It will replace and compile the content of the element with the loaded template.
+// We need this directive so that the element content is already filled when
+// the link function of another directive on the same element as ngView
+// is called.
+ngViewFillContentFactory.$inject = ['$compile', '$controller', '$route'];
+function ngViewFillContentFactory($compile, $controller, $route) {
+ return {
+ restrict: 'ECA',
+ priority: -400,
+ link: function(scope, $element) {
+ var current = $route.current,
+ locals = current.locals;
+
+ $element.html(locals.$template);
+
+ var link = $compile($element.contents());
+
+ if (current.controller) {
+ locals.$scope = scope;
+ var controller = $controller(current.controller, locals);
+ if (current.controllerAs) {
+ scope[current.controllerAs] = controller;
+ }
+ $element.data('$ngControllerController', controller);
+ $element.children().data('$ngControllerController', controller);
+ }
+ scope[current.resolveAs || '$resolve'] = locals;
+
+ link(scope);
+ }
+ };
+}
+
+
+})(window, window.angular);
diff --git a/third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/architecture-examples/angularjs/node_modules/angular-route/angular-route.min.js b/third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/architecture-examples/angularjs/node_modules/angular-route/angular-route.min.js
new file mode 100644
index 0000000000..4d94fc80e9
--- /dev/null
+++ b/third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/architecture-examples/angularjs/node_modules/angular-route/angular-route.min.js
@@ -0,0 +1,17 @@
+/*
+ AngularJS v1.6.5
+ (c) 2010-2017 Google, Inc. http://angularjs.org
+ License: MIT
+*/
+(function(J,d){'use strict';function A(d){k&&d.get("$route")}function B(t,u,g){return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",link:function(a,f,b,c,m){function v(){l&&(g.cancel(l),l=null);n&&(n.$destroy(),n=null);p&&(l=g.leave(p),l.done(function(a){!1!==a&&(l=null)}),p=null)}function E(){var b=t.current&&t.current.locals;if(d.isDefined(b&&b.$template)){var b=a.$new(),c=t.current;p=m(b,function(b){g.enter(b,null,p||f).done(function(b){!1===b||!d.isDefined(w)||w&&!a.$eval(w)||u()});
+v()});n=c.scope=b;n.$emit("$viewContentLoaded");n.$eval(k)}else v()}var n,p,l,w=b.autoscroll,k=b.onload||"";a.$on("$routeChangeSuccess",E);E()}}}function C(d,k,g){return{restrict:"ECA",priority:-400,link:function(a,f){var b=g.current,c=b.locals;f.html(c.$template);var m=d(f.contents());if(b.controller){c.$scope=a;var v=k(b.controller,c);b.controllerAs&&(a[b.controllerAs]=v);f.data("$ngControllerController",v);f.children().data("$ngControllerController",v)}a[b.resolveAs||"$resolve"]=c;m(a)}}}var x,
+y,F,G,z=d.module("ngRoute",[]).info({angularVersion:"1.6.5"}).provider("$route",function(){function t(a,f){return d.extend(Object.create(a),f)}function u(a,d){var b=d.caseInsensitiveMatch,c={originalPath:a,regexp:a},g=c.keys=[];a=a.replace(/([().])/g,"\\$1").replace(/(\/)?:(\w+)(\*\?|[?*])?/g,function(a,b,d,c){a="?"===c||"*?"===c?"?":null;c="*"===c||"*?"===c?"*":null;g.push({name:d,optional:!!a});b=b||"";return""+(a?"":b)+"(?:"+(a?b:"")+(c&&"(.+?)"||"([^/]+)")+(a||"")+")"+(a||"")}).replace(/([/$*])/g,
+"\\$1");c.regexp=new RegExp("^"+a+"$",b?"i":"");return c}x=d.isArray;y=d.isObject;F=d.isDefined;G=d.noop;var g={};this.when=function(a,f){var b;b=void 0;if(x(f)){b=b||[];for(var c=0,m=f.length;c<m;c++)b[c]=f[c]}else if(y(f))for(c in b=b||{},f)if("$"!==c.charAt(0)||"$"!==c.charAt(1))b[c]=f[c];b=b||f;d.isUndefined(b.reloadOnSearch)&&(b.reloadOnSearch=!0);d.isUndefined(b.caseInsensitiveMatch)&&(b.caseInsensitiveMatch=this.caseInsensitiveMatch);g[a]=d.extend(b,a&&u(a,b));a&&(c="/"===a[a.length-1]?a.substr(0,
+a.length-1):a+"/",g[c]=d.extend({redirectTo:a},u(c,b)));return this};this.caseInsensitiveMatch=!1;this.otherwise=function(a){"string"===typeof a&&(a={redirectTo:a});this.when(null,a);return this};k=!0;this.eagerInstantiationEnabled=function(a){return F(a)?(k=a,this):k};this.$get=["$rootScope","$location","$routeParams","$q","$injector","$templateRequest","$sce","$browser",function(a,f,b,c,m,k,u,n){function p(e){var h=q.current;(y=(s=C())&&h&&s.$$route===h.$$route&&d.equals(s.pathParams,h.pathParams)&&
+!s.reloadOnSearch&&!D)||!h&&!s||a.$broadcast("$routeChangeStart",s,h).defaultPrevented&&e&&e.preventDefault()}function l(){var e=q.current,h=s;if(y)e.params=h.params,d.copy(e.params,b),a.$broadcast("$routeUpdate",e);else if(h||e){D=!1;q.current=h;var H=c.resolve(h);n.$$incOutstandingRequestCount();H.then(w).then(z).then(function(c){return c&&H.then(A).then(function(c){h===q.current&&(h&&(h.locals=c,d.copy(h.params,b)),a.$broadcast("$routeChangeSuccess",h,e))})}).catch(function(b){h===q.current&&a.$broadcast("$routeChangeError",
+h,e,b)}).finally(function(){n.$$completeOutstandingRequest(G)})}}function w(e){var a={route:e,hasRedirection:!1};if(e)if(e.redirectTo)if(d.isString(e.redirectTo))a.path=x(e.redirectTo,e.params),a.search=e.params,a.hasRedirection=!0;else{var b=f.path(),g=f.search();e=e.redirectTo(e.pathParams,b,g);d.isDefined(e)&&(a.url=e,a.hasRedirection=!0)}else if(e.resolveRedirectTo)return c.resolve(m.invoke(e.resolveRedirectTo)).then(function(e){d.isDefined(e)&&(a.url=e,a.hasRedirection=!0);return a});return a}
+function z(a){var b=!0;if(a.route!==q.current)b=!1;else if(a.hasRedirection){var d=f.url(),c=a.url;c?f.url(c).replace():c=f.path(a.path).search(a.search).replace().url();c!==d&&(b=!1)}return b}function A(a){if(a){var b=d.extend({},a.resolve);d.forEach(b,function(a,e){b[e]=d.isString(a)?m.get(a):m.invoke(a,null,null,e)});a=B(a);d.isDefined(a)&&(b.$template=a);return c.all(b)}}function B(a){var b,c;d.isDefined(b=a.template)?d.isFunction(b)&&(b=b(a.params)):d.isDefined(c=a.templateUrl)&&(d.isFunction(c)&&
+(c=c(a.params)),d.isDefined(c)&&(a.loadedTemplateUrl=u.valueOf(c),b=k(c)));return b}function C(){var a,b;d.forEach(g,function(c,g){var r;if(r=!b){var k=f.path();r=c.keys;var m={};if(c.regexp)if(k=c.regexp.exec(k)){for(var l=1,n=k.length;l<n;++l){var p=r[l-1],q=k[l];p&&q&&(m[p.name]=q)}r=m}else r=null;else r=null;r=a=r}r&&(b=t(c,{params:d.extend({},f.search(),a),pathParams:a}),b.$$route=c)});return b||g[null]&&t(g[null],{params:{},pathParams:{}})}function x(a,b){var c=[];d.forEach((a||"").split(":"),
+function(a,d){if(0===d)c.push(a);else{var e=a.match(/(\w+)(?:[?*])?(.*)/),f=e[1];c.push(b[f]);c.push(e[2]||"");delete b[f]}});return c.join("")}var D=!1,s,y,q={routes:g,reload:function(){D=!0;var b={defaultPrevented:!1,preventDefault:function(){this.defaultPrevented=!0;D=!1}};a.$evalAsync(function(){p(b);b.defaultPrevented||l()})},updateParams:function(a){if(this.current&&this.current.$$route)a=d.extend({},this.current.params,a),f.path(x(this.current.$$route.originalPath,a)),f.search(a);else throw I("norout");
+}};a.$on("$locationChangeStart",p);a.$on("$locationChangeSuccess",l);return q}]}).run(A),I=d.$$minErr("ngRoute"),k;A.$inject=["$injector"];z.provider("$routeParams",function(){this.$get=function(){return{}}});z.directive("ngView",B);z.directive("ngView",C);B.$inject=["$route","$anchorScroll","$animate"];C.$inject=["$compile","$controller","$route"]})(window,window.angular);
+//# sourceMappingURL=angular-route.min.js.map
diff --git a/third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/architecture-examples/angularjs/node_modules/angular-route/angular-route.min.js.map b/third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/architecture-examples/angularjs/node_modules/angular-route/angular-route.min.js.map
new file mode 100644
index 0000000000..6078bb1ebf
--- /dev/null
+++ b/third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/architecture-examples/angularjs/node_modules/angular-route/angular-route.min.js.map
@@ -0,0 +1,8 @@
+{
+"version":3,
+"file":"angular-route.min.js",
+"lineCount":16,
+"mappings":"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",
+"sources":["angular-route.js"],
+"names":["window","angular","instantiateRoute","$injector","isEagerInstantiationEnabled","get","ngViewFactory","$route","$anchorScroll","$animate","restrict","terminal","priority","transclude","link","scope","$element","attr","ctrl","$transclude","cleanupLastView","previousLeaveAnimation","cancel","currentScope","$destroy","currentElement","leave","done","response","update","locals","current","isDefined","$template","newScope","$new","clone","enter","onNgViewEnter","autoScrollExp","$eval","$emit","onloadExp","autoscroll","onload","$on","ngViewFillContentFactory","$compile","$controller","html","contents","controller","$scope","controllerAs","data","children","resolveAs","isArray","isObject","noop","ngRouteModule","module","info","angularVersion","provider","$RouteProvider","inherit","parent","extra","extend","Object","create","pathRegExp","path","opts","insensitive","caseInsensitiveMatch","ret","originalPath","regexp","keys","replace","_","slash","key","option","optional","star","push","name","RegExp","routes","when","this.when","route","routeCopy","dst","i","ii","length","charAt","isUndefined","reloadOnSearch","redirectPath","substr","redirectTo","otherwise","this.otherwise","params","eagerInstantiationEnabled","this.eagerInstantiationEnabled","enabled","$get","$rootScope","$location","$routeParams","$q","$templateRequest","$sce","$browser","prepareRoute","$locationEvent","lastRoute","preparedRouteIsUpdateOnly","preparedRoute","parseRoute","$$route","equals","pathParams","forceReload","$broadcast","defaultPrevented","preventDefault","commitRoute","nextRoute","copy","nextRoutePromise","resolve","$$incOutstandingRequestCount","then","getRedirectionData","handlePossibleRedirection","keepProcessingRoute","resolveLocals","catch","error","finally","$$completeOutstandingRequest","hasRedirection","isString","interpolate","search","oldPath","oldSearch","newUrl","url","resolveRedirectTo","invoke","oldUrl","forEach","value","template","getTemplateFor","all","templateUrl","isFunction","loadedTemplateUrl","valueOf","match","m","exec","on","len","val","string","result","split","segment","segmentMatch","join","reload","fakeLocationEvent","fakePreventDefault","$evalAsync","updateParams","newParams","$routeMinErr","run","$$minErr","$inject","$RouteParamsProvider","this.$get","directive"]
+}