You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by br...@apache.org on 2014/01/06 21:25:49 UTC
[09/13] git commit: Updating Angular to 1.2.3 release
Updating Angular to 1.2.3 release
Project: http://git-wip-us.apache.org/repos/asf/cordova-app-harness/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-app-harness/commit/9c3b3ee1
Tree: http://git-wip-us.apache.org/repos/asf/cordova-app-harness/tree/9c3b3ee1
Diff: http://git-wip-us.apache.org/repos/asf/cordova-app-harness/diff/9c3b3ee1
Branch: refs/heads/master
Commit: 9c3b3ee1888bfc91abae151b3181752f23edf8f0
Parents: 82f00ef
Author: Braden Shepherdson <br...@gmail.com>
Authored: Tue Dec 3 11:48:12 2013 -0800
Committer: Braden Shepherdson <br...@gmail.com>
Committed: Mon Jan 6 15:24:12 2014 -0500
----------------------------------------------------------------------
www/cdvah/js/libs/angular-route.js | 297 ++-
www/cdvah/js/libs/angular.js | 4031 ++++++++++++++++++++-----------
2 files changed, 2750 insertions(+), 1578 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-app-harness/blob/9c3b3ee1/www/cdvah/js/libs/angular-route.js
----------------------------------------------------------------------
diff --git a/www/cdvah/js/libs/angular-route.js b/www/cdvah/js/libs/angular-route.js
index d0c4cd5..532d1e7 100644
--- a/www/cdvah/js/libs/angular-route.js
+++ b/www/cdvah/js/libs/angular-route.js
@@ -1,34 +1,27 @@
/**
- * @license AngularJS v1.2.0rc1
- * (c) 2010-2012 Google, Inc. http://angularjs.org
+ * @license AngularJS v1.2.3
+ * (c) 2010-2014 Google, Inc. http://angularjs.org
* License: MIT
*/
(function(window, angular, undefined) {'use strict';
-var copy = angular.copy,
- equals = angular.equals,
- extend = angular.extend,
- forEach = angular.forEach,
- isDefined = angular.isDefined,
- isFunction = angular.isFunction,
- isString = angular.isString,
- jqLite = angular.element,
- noop = angular.noop,
- toJson = angular.toJson;
-
-
-function inherit(parent, extra) {
- return extend(new (extend(function() {}, {prototype:parent}))(), extra);
-}
-
/**
* @ngdoc overview
* @name ngRoute
* @description
*
- * Module that provides routing and deeplinking services and directives for angular apps.
+ * # 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`.
+ *
+ * {@installModule route}
+ *
+ * <div doc-module-components="ngRoute"></div>
*/
-
+ /* global -ngRouteModule */
var ngRouteModule = angular.module('ngRoute', ['ng']).
provider('$route', $RouteProvider);
@@ -39,9 +32,19 @@ var ngRouteModule = angular.module('ngRoute', ['ng']).
*
* @description
*
- * Used for configuring routes. See {@link ngRoute.$route $route} for an example.
+ * 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(){
+ function inherit(parent, extra) {
+ return angular.extend(new (angular.extend(function() {}, {prototype:parent}))(), extra);
+ }
+
var routes = {};
/**
@@ -57,8 +60,8 @@ function $RouteProvider(){
* * `path` can contain named groups starting with a colon (`: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 (`:name*`).
- * All characters are eagerly stored in `$routeParams` under the given `name`
+ * * `path` can contain named groups starting with a colon and ending with a star (`: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 (`:name?`).
*
@@ -74,9 +77,9 @@ function $RouteProvider(){
*
* 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.
+ * - `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=}` – A controller alias name. 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
@@ -98,17 +101,22 @@ function $RouteProvider(){
* `$location.path()` by applying the current route
*
* - `resolve` - `{Object.<string, function>=}` - An optional map of dependencies which should
- * be injected into the controller. If any of these dependencies are promises, they will be
- * resolved and converted to a value before the controller is instantiated and the
- * `$routeChangeSuccess` event is fired. The map object is:
+ * 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. 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 api/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.
+ * 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.
*
* - `redirectTo` – {(string|function())=} – value to update
* {@link ng.$location $location} path with and trigger route redirection.
@@ -123,8 +131,8 @@ function $RouteProvider(){
* The custom `redirectTo` function is expected to return a string which will be used
* to update `$location.path()` and `$location.search()`.
*
- * - `[reloadOnSearch=true]` - {boolean=} - reload route when only $location.search()
- * changes.
+ * - `[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.
@@ -140,7 +148,7 @@ function $RouteProvider(){
* Adds a new route definition to the `$route` service.
*/
this.when = function(path, route) {
- routes[path] = extend(
+ routes[path] = angular.extend(
{reloadOnSearch: true},
route,
path && pathRegExp(path, route)
@@ -149,10 +157,10 @@ function $RouteProvider(){
// create redirection for trailing slashes
if (path) {
var redirectPath = (path[path.length-1] == '/')
- ? path.substr(0, path.length-1)
- : path +'/';
+ ? path.substr(0, path.length-1)
+ : path +'/';
- routes[redirectPath] = extend(
+ routes[redirectPath] = angular.extend(
{redirectTo: path},
pathRegExp(redirectPath, route)
);
@@ -191,7 +199,9 @@ function $RouteProvider(){
+ (optional ? '' : slash)
+ '(?:'
+ (optional ? slash : '')
- + (star && '(.+)?' || '([^/]+)?') + ')'
+ + (star && '(.+?)' || '([^/]+)')
+ + (optional || '')
+ + ')'
+ (optional || '');
})
.replace(/([\/$\*])/g, '\\$1');
@@ -218,8 +228,15 @@ function $RouteProvider(){
};
- this.$get = ['$rootScope', '$location', '$routeParams', '$q', '$injector', '$http', '$templateCache', '$sce',
- function( $rootScope, $location, $routeParams, $q, $injector, $http, $templateCache, $sce) {
+ this.$get = ['$rootScope',
+ '$location',
+ '$routeParams',
+ '$q',
+ '$injector',
+ '$http',
+ '$templateCache',
+ '$sce',
+ function($rootScope, $location, $routeParams, $q, $injector, $http, $templateCache, $sce) {
/**
* @ngdoc object
@@ -241,13 +258,16 @@ function $RouteProvider(){
* @property {Array.<Object>} routes Array of all configured routes.
*
* @description
- * Is used for deep-linking URLs to controllers and views (HTML partials).
+ * `$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 {@link ngRoute.directive:ngView ngView}
- * directive and the {@link ngRoute.$routeParams $routeParams} service.
+ * 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
@@ -256,7 +276,7 @@ function $RouteProvider(){
Note that this example is using {@link ng.directive:script inlined templates}
to get it working on jsfiddle as well.
- <example module="ngView" deps="angular-route.js">
+ <example module="ngViewExample" deps="angular-route.js">
<file name="index.html">
<div ng-controller="MainCntl">
Choose:
@@ -289,7 +309,9 @@ function $RouteProvider(){
</file>
<file name="script.js">
- angular.module('ngView', ['ngRoute']).config(function($routeProvider, $locationProvider) {
+ angular.module('ngViewExample', ['ngRoute'])
+
+ .config(function($routeProvider, $locationProvider) {
$routeProvider.when('/Book/:bookId', {
templateUrl: 'book.html',
controller: BookCntl,
@@ -358,6 +380,7 @@ function $RouteProvider(){
* defined in `resolve` route property. Once all of the dependencies are resolved
* `$routeChangeSuccess` is fired.
*
+ * @param {Object} angularEvent Synthetic event object.
* @param {Route} next Future route information.
* @param {Route} current Current route information.
*/
@@ -374,7 +397,8 @@ function $RouteProvider(){
*
* @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.
+ * @param {Route|Undefined} previous Previous route information, or undefined if current is
+ * first route entered.
*/
/**
@@ -385,6 +409,7 @@ function $RouteProvider(){
* @description
* Broadcasted if any of the 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 Rejection of the promise. Usually the error of the failed promise.
@@ -449,13 +474,12 @@ function $RouteProvider(){
var m = route.regexp.exec(on);
if (!m) return null;
- var N = 0;
for (var i = 1, len = m.length; i < len; ++i) {
var key = keys[i - 1];
var val = 'string' == typeof m[i]
- ? decodeURIComponent(m[i])
- : m[i];
+ ? decodeURIComponent(m[i])
+ : m[i];
if (key && val) {
params[key.name] = val;
@@ -469,9 +493,10 @@ function $RouteProvider(){
last = $route.current;
if (next && last && next.$$route === last.$$route
- && equals(next.pathParams, last.pathParams) && !next.reloadOnSearch && !forceReload) {
+ && angular.equals(next.pathParams, last.pathParams)
+ && !next.reloadOnSearch && !forceReload) {
last.params = next.params;
- copy(last.params, $routeParams);
+ angular.copy(last.params, $routeParams);
$rootScope.$broadcast('$routeUpdate', last);
} else if (next || last) {
forceReload = false;
@@ -479,7 +504,7 @@ function $RouteProvider(){
$route.current = next;
if (next) {
if (next.redirectTo) {
- if (isString(next.redirectTo)) {
+ if (angular.isString(next.redirectTo)) {
$location.path(interpolate(next.redirectTo, next.params)).search(next.params)
.replace();
} else {
@@ -492,29 +517,30 @@ function $RouteProvider(){
$q.when(next).
then(function() {
if (next) {
- var locals = extend({}, next.resolve),
+ var locals = angular.extend({}, next.resolve),
template, templateUrl;
- forEach(locals, function(value, key) {
- locals[key] = isString(value) ? $injector.get(value) : $injector.invoke(value);
+ angular.forEach(locals, function(value, key) {
+ locals[key] = angular.isString(value) ?
+ $injector.get(value) : $injector.invoke(value);
});
- if (isDefined(template = next.template)) {
- if (isFunction(template)) {
+ if (angular.isDefined(template = next.template)) {
+ if (angular.isFunction(template)) {
template = template(next.params);
}
- } else if (isDefined(templateUrl = next.templateUrl)) {
- if (isFunction(templateUrl)) {
+ } else if (angular.isDefined(templateUrl = next.templateUrl)) {
+ if (angular.isFunction(templateUrl)) {
templateUrl = templateUrl(next.params);
}
templateUrl = $sce.getTrustedResourceUrl(templateUrl);
- if (isDefined(templateUrl)) {
+ if (angular.isDefined(templateUrl)) {
next.loadedTemplateUrl = templateUrl;
template = $http.get(templateUrl, {cache: $templateCache}).
then(function(response) { return response.data; });
}
}
- if (isDefined(template)) {
+ if (angular.isDefined(template)) {
locals['$template'] = template;
}
return $q.all(locals);
@@ -525,7 +551,7 @@ function $RouteProvider(){
if (next == $route.current) {
if (next) {
next.locals = locals;
- copy(next.params, $routeParams);
+ angular.copy(next.params, $routeParams);
}
$rootScope.$broadcast('$routeChangeSuccess', next, last);
}
@@ -544,10 +570,10 @@ function $RouteProvider(){
function parseRoute() {
// Match a route
var params, match;
- forEach(routes, function(route, path) {
+ angular.forEach(routes, function(route, path) {
if (!match && (params = switchRouteMatcher($location.path(), route))) {
match = inherit(route, {
- params: extend({}, $location.search(), params),
+ params: angular.extend({}, $location.search(), params),
pathParams: params});
match.$$route = route;
}
@@ -561,8 +587,8 @@ function $RouteProvider(){
*/
function interpolate(string, params) {
var result = [];
- forEach((string||'').split(':'), function(segment, i) {
- if (i == 0) {
+ angular.forEach((string||'').split(':'), function(segment, i) {
+ if (i === 0) {
result.push(segment);
} else {
var segmentMatch = segment.match(/(\w+)(.*)/);
@@ -586,9 +612,13 @@ ngRouteModule.provider('$routeParams', $RouteParamsProvider);
* @requires $route
*
* @description
- * Current set of route parameters. The route parameters are a combination of the
- * {@link ng.$location $location} `search()`, and `path()`. The `path` parameters
- * are extracted when the {@link ngRoute.$route $route} path is matched.
+ * 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#methods_search `search()`} and {@link ng.$location#methods_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.
*
@@ -613,6 +643,8 @@ function $RouteParamsProvider() {
this.$get = function() { return {}; };
}
+ngRouteModule.directive('ngView', ngViewFactory);
+
/**
* @ngdoc directive
* @name ngRoute.directive:ngView
@@ -625,6 +657,8 @@ function $RouteParamsProvider() {
* 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
* enter - animation is used to bring new content into the browser.
* leave - animation is used to animate existing content away.
@@ -632,6 +666,7 @@ function $RouteParamsProvider() {
* The enter and leave animation occur concurrently.
*
* @scope
+ * @priority 400
* @example
<example module="ngViewExample" deps="angular-route.js" animations="true">
<file name="index.html">
@@ -643,8 +678,8 @@ function $RouteParamsProvider() {
<a href="Book/Gatsby/ch/4?key=value">Gatsby: Ch4</a> |
<a href="Book/Scarlet">Scarlet Letter</a><br/>
- <div class="example-animate-container">
- <div ng-view class="view-example"></div>
+ <div class="view-animate-container">
+ <div ng-view class="view-animate"></div>
</div>
<hr />
@@ -672,7 +707,9 @@ function $RouteParamsProvider() {
</file>
<file name="animations.css">
- .example-animate-container {
+ .view-animate-container {
+ position:relative;
+ height:100px!important;
position:relative;
background:white;
border:1px solid black;
@@ -680,14 +717,12 @@ function $RouteParamsProvider() {
overflow:hidden;
}
- .example-animate-container > div {
+ .view-animate {
padding:10px;
}
- .view-example.ng-enter, .view-example.ng-leave {
+ .view-animate.ng-enter, .view-animate.ng-leave {
-webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 1.5s;
- -moz-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 1.5s;
- -o-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 1.5s;
transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 1.5s;
display:block;
@@ -702,39 +737,33 @@ function $RouteParamsProvider() {
padding:10px;
}
- .example-animate-container {
- position:relative;
- height:100px;
- }
-
- .view-example.ng-enter {
+ .view-animate.ng-enter {
left:100%;
}
- .view-example.ng-enter.ng-enter-active {
+ .view-animate.ng-enter.ng-enter-active {
left:0;
}
-
- .view-example.ng-leave { }
- .view-example.ng-leave.ng-leave-active {
+ .view-animate.ng-leave.ng-leave-active {
left:-100%;
}
</file>
<file name="script.js">
- angular.module('ngViewExample', ['ngRoute', 'ngAnimate'], function($routeProvider, $locationProvider) {
- $routeProvider.when('/Book/:bookId', {
- templateUrl: 'book.html',
- controller: BookCntl,
- controllerAs: 'book'
- });
- $routeProvider.when('/Book/:bookId/ch/:chapterId', {
- templateUrl: 'chapter.html',
- controller: ChapterCntl,
- controllerAs: 'chapter'
- });
-
- // configure html5 to get links working on jsfiddle
- $locationProvider.html5Mode(true);
+ angular.module('ngViewExample', ['ngRoute', 'ngAnimate'],
+ function($routeProvider, $locationProvider) {
+ $routeProvider.when('/Book/:bookId', {
+ templateUrl: 'book.html',
+ controller: BookCntl,
+ controllerAs: 'book'
+ });
+ $routeProvider.when('/Book/:bookId/ch/:chapterId', {
+ templateUrl: 'chapter.html',
+ controller: ChapterCntl,
+ controllerAs: 'chapter'
+ });
+
+ // configure html5 to get links working on jsfiddle
+ $locationProvider.html5Mode(true);
});
function MainCntl($route, $routeParams, $location) {
@@ -780,22 +809,18 @@ function $RouteParamsProvider() {
* @description
* Emitted every time the ngView content is reloaded.
*/
-var NG_VIEW_PRIORITY = 500;
-var ngViewDirective = ['$route', '$anchorScroll', '$compile', '$controller', '$animate',
- function($route, $anchorScroll, $compile, $controller, $animate) {
+ngViewFactory.$inject = ['$route', '$anchorScroll', '$compile', '$controller', '$animate'];
+function ngViewFactory( $route, $anchorScroll, $compile, $controller, $animate) {
return {
restrict: 'ECA',
terminal: true,
- priority: NG_VIEW_PRIORITY,
- compile: function(element, attr) {
- var onloadExp = attr.onload || '';
-
- element.html('');
- var anchor = jqLite(document.createComment(' ngView '));
- element.replaceWith(anchor);
-
- return function(scope) {
- var currentScope, currentElement;
+ priority: 400,
+ transclude: 'element',
+ link: function(scope, $element, attr, ctrl, $transclude) {
+ var currentScope,
+ currentElement,
+ autoScrollExp = attr.autoscroll,
+ onloadExp = attr.onload || '';
scope.$on('$routeChangeSuccess', update);
update();
@@ -816,45 +841,51 @@ var ngViewDirective = ['$route', '$anchorScroll', '$compile', '$controller', '$a
template = locals && locals.$template;
if (template) {
- cleanupLastView();
+ var newScope = scope.$new();
+
+ // 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, angular.noop);
+ clone.html(template);
+ $animate.enter(clone, null, currentElement || $element, function onNgViewEnter () {
+ if (angular.isDefined(autoScrollExp)
+ && (!autoScrollExp || scope.$eval(autoScrollExp))) {
+ $anchorScroll();
+ }
+ });
- currentScope = scope.$new();
- currentElement = element.clone();
- currentElement.html(template);
- $animate.enter(currentElement, null, anchor);
+ cleanupLastView();
- var link = $compile(currentElement, false, NG_VIEW_PRIORITY - 1),
+ var link = $compile(clone.contents()),
current = $route.current;
+ currentScope = current.scope = newScope;
+ currentElement = clone;
+
if (current.controller) {
locals.$scope = currentScope;
var controller = $controller(current.controller, locals);
if (current.controllerAs) {
currentScope[current.controllerAs] = controller;
}
- currentElement.data('$ngControllerController', controller);
- currentElement.children().data('$ngControllerController', controller);
+ clone.data('$ngControllerController', controller);
+ clone.children().data('$ngControllerController', controller);
}
- current.scope = currentScope;
-
link(currentScope);
-
currentScope.$emit('$viewContentLoaded');
currentScope.$eval(onloadExp);
-
- // $anchorScroll might listen on event...
- $anchorScroll();
} else {
cleanupLastView();
}
}
- }
}
};
-}];
-
-ngRouteModule.directive('ngView', ngViewDirective);
+}
})(window, window.angular);