diff --git a/docs/config/services/deployments/production.js b/docs/config/services/deployments/production.js index 7a8cace0d53e..a37c127df593 100644 --- a/docs/config/services/deployments/production.js +++ b/docs/config/services/deployments/production.js @@ -15,7 +15,7 @@ var cdnUrl = googleCdnUrl + versionInfo.cdnVersion; // docs.angularjs.org and code.angularjs.org need them. var versionPath = versionInfo.currentVersion.isSnapshot ? 'snapshot' : - (versionInfo.currentVersion.version || versionInfo.currentVersion.version); + versionInfo.currentVersion.version; var examplesDependencyPath = angularCodeUrl + versionPath + '/'; module.exports = function productionDeployment(getVersion) { diff --git a/docs/content/tutorial/index.ngdoc b/docs/content/tutorial/index.ngdoc index 823f91d7634d..aa16e0837810 100644 --- a/docs/content/tutorial/index.ngdoc +++ b/docs/content/tutorial/index.ngdoc @@ -64,7 +64,7 @@ a few git commands. ### Install Git -You can download and install Git from http://git-scm.com/download. Once installed, you should have +You can download and install Git from https://git-scm.com/download. Once installed, you should have access to the `git` command line tool. The main commands that you will need to use are: * `git clone ...`: Clone a remote repository onto your local machine. @@ -99,8 +99,8 @@ The tutorial instructions, from now on, assume you are running all commands from ### Install Node.js -If you want to run the preconfigured local web server and the test tools then you will also need -[Node.js v4+][node]. +In order to install dependencies (such as the test tools and AngularJS itself) and run the +preconfigured local web server, you will also need [Node.js v6+][node]. You can download a Node.js installer for your operating system from https://nodejs.org/en/download/. @@ -125,22 +125,25 @@ npm --version [Node Version Manager (nvm)][nvm] or [Node Version Manager (nvm) for Windows][nvm-windows]. -Once you have Node.js installed on your machine, you can download the tool dependencies by running: +By installing Node.js, you also get [npm][npm], which is a command line executable for downloading +and managing Node.js packages. We use it to download the AngularJS framework as well as development +and testing tools. + +Once you have Node.js installed on your machine, you can download these dependencies by running: ``` npm install ``` -This command reads angular-phonecat's `package.json` file and downloads the following tools into the -`node_modules` directory: +This command reads angular-phonecat's `package.json` file and downloads the following dependencies +into the `node_modules` directory: -* [Bower][bower] - client-side code package manager * [Http-Server][http-server] - simple local static web server * [Karma][karma] - unit test runner * [Protractor][protractor] - end-to-end (E2E) test runner -Running `npm install` will also automatically use bower to download the AngularJS framework into the -`app/bower_components` directory. +Running `npm install` will also automatically copy the AngularJS framework and other dependencies +necessary for our app to work into the `app/lib/` directory.
Note the angular-phonecat project is setup to install and run these utilities via npm scripts. @@ -160,23 +163,23 @@ tasks that you will need while developing: ### Install Helper Tools (optional) -The Bower, Http-Server, Karma and Protractor modules are also executables, which can be installed -globally and run directly from a terminal/command prompt. You don't need to do this to follow the -tutorial, but if you decide you do want to run them directly, you can install these modules globally -using, `sudo npm install -g ...`. +The Http-Server, Karma and Protractor modules are also executables, which can be installed globally +and run directly from a terminal/command prompt. You don't need to do this to follow the tutorial, +but if you decide you do want to run them directly, you can install these modules globally using, +`sudo npm install --global ...`. -For instance, to install the Bower command line executable you would do: +For instance, to install the `http-server` command line executable you would do: ``` -sudo npm install -g bower +sudo npm install --global http-server ``` -_(Omit the sudo if running on Windows)_ +_(Omit the sudo if running on Windows.)_ -Then you can run the bower tool directly, such as: +Then you can run the `http-server` tool directly, such as: ``` -bower install +http-server ./app ``` @@ -278,6 +281,45 @@ It is good to run the E2E tests whenever you make changes to the HTML views or w the application as a whole is executing correctly. It is very common to run E2E tests before pushing a new commit of changes to a remote repository. +
+

+ Each version of Protractor is compatible with specific browser versions. If you are reading this + some time in the future, it is possible that the specified Protractor version is no longer + compatible with the latest version of Chrome that you are using. +

+

+ If that is the case, you can try upgrading Protractor to newer version. For instructions on how + to upgrade dependencies see [Updating dependencies](tutorial/#updating-dependencies). +

+
+ + +### Updating dependencies + +In order to avoid surprises, all dependencies listed in `package.json` are pinned to specific +versions (this is what the [package-lock.json][package-lock] file is about). This ensures that the +same version of a dependency is installed every time. + +Since all dependencies are acquired via npm, you can use the same tool to easily update them as +well (although you probably don't need to for the purpose of this tutorial). Simply run the +preconfigured script: + +``` +npm run update-deps +``` + +This will update all packages to the latest version that satisfy their version ranges (as specified +in `package.json`) and also copy the necessary files into `app/lib/`. For example, if `package.json` +contains `"some-package": "1.2.x"`, it will be updated to the latest 1.2.x version (e.g. 1.2.99), +but not to 1.3.x (e.g. 1.3.0). + +If you want to update a dependency to a version newer than what the specificed range would permit, +you can change the version range in `package.json` and then run `npm run update-deps` as usual. + +
+ See [here][semver-ranges] for more info on the various version range formats. +
+ ### Common Issues @@ -324,14 +366,16 @@ Now that you have set up your local machine, let's get started with the tutorial [angular-phonecat]: https://github.com/angular/angular-phonecat -[bower]: http://bower.io/ -[git]: http://git-scm.com/ +[git]: https://git-scm.com/ [http-server]: https://github.com/nodeapps/http-server [jdk]: https://en.wikipedia.org/wiki/Java_Development_Kit -[jdk-download]: http://www.oracle.com/technetwork/java/javase/downloads/index.html +[jdk-download]: https://www.oracle.com/technetwork/java/javase/downloads/index.html [karma]: https://karma-runner.github.io/ -[node]: http://nodejs.org/ +[node]: https://nodejs.org/ +[npm]: https://www.npmjs.com/ [nvm]: https://github.com/creationix/nvm [nvm-windows]: https://github.com/coreybutler/nvm-windows +[package-lock]: https://docs.npmjs.com/files/package-lock.json [protractor]: https://github.com/angular/protractor -[selenium]: http://docs.seleniumhq.org/ +[selenium]: https://docs.seleniumhq.org/ +[semver-ranges]: https://docs.npmjs.com/misc/semver#ranges diff --git a/docs/content/tutorial/step_00.ngdoc b/docs/content/tutorial/step_00.ngdoc index 4aca8850cfe6..c09f5d38dbbd 100644 --- a/docs/content/tutorial/step_00.ngdoc +++ b/docs/content/tutorial/step_00.ngdoc @@ -51,8 +51,8 @@ The code contains some key AngularJS elements that we will need as we progress. My HTML File - - + + @@ -84,7 +84,7 @@ For more info on `ngApp`, check out the {@link ngApp API Reference}. **`angular.js` script tag:** ```html - + ``` This code downloads the `angular.js` script which registers a callback that will be executed by the @@ -154,8 +154,8 @@ and one static binding, and our model is empty. That will soon change! Most of the files in your working directory come from the [angular-seed project][angular-seed], which is typically used to bootstrap new AngularJS projects. The seed project is pre-configured to -install the AngularJS framework (via `bower` into the `app/bower_components/` directory) and tools -for developing and testing a typical web application (via `npm`). +install the AngularJS framework (via `npm` into the `app/lib/` directory) and tools for developing +and testing a typical web application (via `npm`). For the purposes of this tutorial, we modified the angular-seed with the following changes: @@ -163,7 +163,7 @@ For the purposes of this tutorial, we modified the angular-seed with the followi * Removed unused dependencies. * Added phone images to `app/img/phones/`. * Added phone data files (JSON) to `app/phones/`. -* Added a dependency on [Bootstrap](http://getbootstrap.com) in the `bower.json` file. +* Added a dependency on [Bootstrap][bootstrap-3.3] in the `package.json` file. ## Experiments @@ -186,3 +186,4 @@ Now let's go to {@link step_01 step 1} and add some content to the web app. [angular-seed]: https://github.com/angular/angular-seed +[bootstrap-3.3]: https://getbootstrap.com/docs/3.3 diff --git a/docs/content/tutorial/step_02.ngdoc b/docs/content/tutorial/step_02.ngdoc index 6b4a54388b3c..226ab7d71ffe 100644 --- a/docs/content/tutorial/step_02.ngdoc +++ b/docs/content/tutorial/step_02.ngdoc @@ -33,7 +33,7 @@ The view is constructed by AngularJS from this template. ... - + @@ -317,7 +317,7 @@ by utilizing components. -[jasmine-docs]: http://jasmine.github.io/2.4/introduction.html -[jasmine-home]: http://jasmine.github.io/ +[jasmine-docs]: https://jasmine.github.io/api/3.3/global +[jasmine-home]: https://jasmine.github.io/ [karma]: https://karma-runner.github.io/ -[mvc-pattern]: http://en.wikipedia.org/wiki/Model–View–Controller +[mvc-pattern]: https://en.wikipedia.org/wiki/Model–View–Controller diff --git a/docs/content/tutorial/step_03.ngdoc b/docs/content/tutorial/step_03.ngdoc index e7a16de54bd0..ab8179b849a8 100644 --- a/docs/content/tutorial/step_03.ngdoc +++ b/docs/content/tutorial/step_03.ngdoc @@ -120,7 +120,7 @@ acquired skill. ... - + @@ -277,7 +277,7 @@ files, so it remains easy to locate as our application grows. [case-styles]: https://en.wikipedia.org/wiki/Letter_case#Special_case_styles -[jasmine-docs]: http://jasmine.github.io/2.4/introduction.html -[jasmine-home]: http://jasmine.github.io/ +[jasmine-docs]: https://jasmine.github.io/api/3.3/global +[jasmine-home]: https://jasmine.github.io/ [karma]: https://karma-runner.github.io/ -[mvc-pattern]: http://en.wikipedia.org/wiki/Model–View–Controller +[mvc-pattern]: https://en.wikipedia.org/wiki/Model–View–Controller diff --git a/docs/content/tutorial/step_07.ngdoc b/docs/content/tutorial/step_07.ngdoc index 4b0d0e64aaaa..c0ef13d2497a 100644 --- a/docs/content/tutorial/step_07.ngdoc +++ b/docs/content/tutorial/step_07.ngdoc @@ -8,8 +8,8 @@ Enough of building an app with three phones in a hard-coded dataset! Let's fetch a larger dataset from our server using one of AngularJS's built-in {@link guide/services services} called -{@link ng.$http $http}. We will use AngularJS's {@link guide/di dependency injection (DI)} to provide -the service to the `phoneList` component's controller. +{@link ng.$http $http}. We will use AngularJS's {@link guide/di dependency injection (DI)} to +provide the service to the `phoneList` component's controller. * There is now a list of 20 phones, loaded from the server. diff --git a/docs/content/tutorial/step_08.ngdoc b/docs/content/tutorial/step_08.ngdoc index 5707ea4d9902..1e4623a09a9d 100644 --- a/docs/content/tutorial/step_08.ngdoc +++ b/docs/content/tutorial/step_08.ngdoc @@ -47,10 +47,10 @@ URLs point to the `app/img/phones/` directory. ... @@ -83,7 +83,7 @@ HTTP request to an invalid location. query.sendKeys('nexus'); element.all(by.css('.phones li a')).first().click(); - expect(browser.getLocationAbsUrl()).toBe('/phones/nexus-s'); + expect(browser.getCurrentUrl()).toContain('index.html#!/phones/nexus-s'); }); ... @@ -110,8 +110,9 @@ You can now rerun `npm run protractor` to see the tests run. ## Summary -Now that you have added phone images and links, go to {@link step_09 step 9} to learn about AngularJS -layout templates and how AngularJS makes it easy to create applications that have multiple views. +Now that you have added phone images and links, go to {@link step_09 step 9} to learn about +AngularJS layout templates and how AngularJS makes it easy to create applications that have +multiple views. diff --git a/docs/content/tutorial/step_09.ngdoc b/docs/content/tutorial/step_09.ngdoc index da1e92a7dfc6..a6d3d7c652e1 100644 --- a/docs/content/tutorial/step_09.ngdoc +++ b/docs/content/tutorial/step_09.ngdoc @@ -23,49 +23,33 @@ has multiple views by adding routing, using an AngularJS module called {@link ng The routing functionality added in this step is provided by AngularJS in the `ngRoute` module, which is distributed separately from the core AngularJS framework. -Since we are using [Bower][bower] to install client-side dependencies, this step updates the -`bower.json` configuration file to include the new dependency: +Since we are using [npm][npm] to install client-side dependencies, this step updates the +`package.json` configuration file to include the new dependency:
-**`bower.json`:** +**`package.json`:** ```json { "name": "angular-phonecat", - "description": "A starter project for AngularJS", - "version": "0.0.0", - "homepage": "https://github.com/angular/angular-phonecat", - "license": "MIT", - "private": true, + ... "dependencies": { - "angular": "1.5.x", - "angular-mocks": "1.5.x", - "angular-route": "1.5.x", + "angular": "1.7.x", + "angular-route": "1.7.x", "bootstrap": "3.3.x" - } + }, + ... } ``` -The new dependency `"angular-route": "1.5.x"` tells bower to install a version of the angular-route -module that is compatible with version 1.5.x of AngularJS. We must tell bower to download and install +The new dependency `"angular-route": "1.7.x"` tells npm to install a version of the angular-route +module that is compatible with version 1.7.x of AngularJS. We must tell npm to download and install this dependency. ``` npm install ``` -
- **Note:** If you have bower installed globally, you can run `bower install`, but for this project - we have preconfigured `npm install` to run bower for us. -
- -
- **Warning:** If a new version of AngularJS has been released since you last ran `npm install`, then - you may have a problem with the `bower install` due to a conflict between the versions of - angular.js that need to be installed. If you run into this issue, simply delete your - `app/bower_components` directory and then run `npm install`. -
- ## Multiple Views, Routing and Layout Templates @@ -127,8 +111,8 @@ service, the `$routeProvider` exposes APIs that allow you to define routes for y
AngularJS modules solve the problem of removing global variables from the application and provide a -way of configuring the injector. As opposed to AMD or require.js modules, AngularJS modules don't try -to solve the problem of script load ordering or lazy script fetching. These goals are totally +way of configuring the injector. As opposed to AMD or require.js modules, AngularJS modules don't +try to solve the problem of script load ordering or lazy script fetching. These goals are totally independent and both module systems can live side-by-side and fulfill their goals. To deepen your understanding on AngularJS's DI, see [Understanding Dependency Injection][wiki-di]. @@ -146,8 +130,8 @@ into the layout template. This makes it a perfect fit for our `index.html` templ ```html ... - - + + ... @@ -203,10 +187,8 @@ code, we put it into a separate file and used the `.config` suffix. ```js angular. module('phonecatApp'). - config(['$locationProvider', '$routeProvider', - function config($locationProvider, $routeProvider) { - $locationProvider.hashPrefix('!'); - + config(['$routeProvider', + function config($routeProvider) { $routeProvider. when('/phones', { template: '' @@ -226,18 +208,6 @@ the corresponding services. Here, we use the {@link ngRoute.$routeProvider#otherwise $routeProvider.otherwise()} methods to define our application routes. -
-

- We also used {@link $locationProvider#hashPrefix $locationProvider.hashPrefix()} to set the - hash-prefix to `!`. This prefix will appear in the links to our client-side routes, right after - the hash (`#`) symbol and before the actual path (e.g. `index.html#!/some/path`). -

-

- Setting a prefix is not necessary, but it is considered a good practice (for reasons that are - outside the scope of this tutorial). `!` is the most commonly used prefix. -

-
- Our routes are defined as follows: * `when('/phones')`: Determines the view that will be shown, when the URL hash fragment is @@ -261,6 +231,25 @@ the route declaration — `'/phones/:phoneId'` — as a template that is matched URL. All variables defined with the `:` prefix are extracted into the (injectable) {@link ngRoute.$routeParams $routeParams} object. +
+

+ You may have noticed, that — while the configured route paths start with `/` (e.g. + `/phones`) — the URLs used in templates start with `#!/` (e.g. `#!/phones`). +

+

+ Without getting into much detail, AngularJS (by default) uses the hash part of the URL (i.e. + what comes after the hash (`#`) symbol) to determine the current route. In addition to that, you + can also specify a {@link $locationProvider#hashPrefix hash-prefix} (`!` by default) that needs + to appear after the hash symbol in order for AngularJS to consider the value an "AngularJS path" + and process it (for example, try to match it to a route). +

+

+ You can find out more about how all this works in the [Using $location](guide/$location) section + of the Developer Guide. But all you need to know for now, is that the URLs to our various routes + should be prefixed with `#!`. +

+
+ ## The `phoneDetail` Component @@ -345,8 +334,8 @@ any modification. ```js files: [ - 'bower_components/angular/angular.js', - 'bower_components/angular-route/angular-route.js', + 'lib/angular/angular.js', + 'lib/angular-route/angular-route.js', ... ], ``` @@ -363,7 +352,7 @@ various URLs and verifying that the correct view was rendered. it('should redirect `index.html` to `index.html#!/phones', function() { browser.get('index.html'); - expect(browser.getLocationAbsUrl()).toBe('/phones'); + expect(browser.getCurrentUrl()).toContain('index.html#!/phones'); }); ... @@ -424,6 +413,6 @@ With the routing set up and the phone list view implemented, we are ready to go -[bower]: http://bower.io [deep-linking]: https://en.wikipedia.org/wiki/Deep_linking +[npm]: https://www.npmjs.com/ [wiki-di]: https://github.com/angular/angular.js/wiki/Understanding-Dependency-Injection diff --git a/docs/content/tutorial/step_13.ngdoc b/docs/content/tutorial/step_13.ngdoc index 2ad46e2c9459..9a09f417a238 100644 --- a/docs/content/tutorial/step_13.ngdoc +++ b/docs/content/tutorial/step_13.ngdoc @@ -21,50 +21,34 @@ In this step, we will change the way our application fetches data. The RESTful functionality is provided by AngularJS in the {@link ngResource ngResource} module, which is distributed separately from the core AngularJS framework. -Since we are using [Bower][bower] to install client-side dependencies, this step updates the -`bower.json` configuration file to include the new dependency: +Since we are using [npm][npm] to install client-side dependencies, this step updates the +`package.json` configuration file to include the new dependency:
-**`bower.json`:** +**`package.json`:** -``` +```json { "name": "angular-phonecat", - "description": "A starter project for AngularJS", - "version": "0.0.0", - "homepage": "https://github.com/angular/angular-phonecat", - "license": "MIT", - "private": true, + ... "dependencies": { - "angular": "1.5.x", - "angular-mocks": "1.5.x", - "angular-resource": "1.5.x", - "angular-route": "1.5.x", + "angular": "1.7.x", + "angular-resource": "1.7.x", + "angular-route": "1.7.x", "bootstrap": "3.3.x" - } + }, + ... } ``` -The new dependency `"angular-resource": "1.5.x"` tells bower to install a version of the -angular-resource module that is compatible with version 1.5.x of AngularJS. We must tell bower to +The new dependency `"angular-resource": "1.7.x"` tells npm to install a version of the +angular-resource module that is compatible with version 1.7.x of AngularJS. We must tell npm to download and install this dependency. ``` npm install ``` -
- **Note:** If you have bower installed globally, you can run `bower install`, but for this project - we have preconfigured `npm install` to run bower for us. -
- -
- **Warning:** If a new version of AngularJS has been released since you last ran `npm install`, then - you may have a problem with the `bower install` due to a conflict between the versions of - angular.js that need to be installed. If you run into this issue, simply delete your - `app/bower_components` directory and then run `npm install`. -
- ## Service @@ -129,7 +113,7 @@ need to load the `angular-resource.js` file, which contains the `ngResource` mod ```html ... - + ... @@ -141,9 +125,10 @@ need to load the `angular-resource.js` file, which contains the `ngResource` mod ## Component Controllers We can now simplify our component controllers (`PhoneListController` and `PhoneDetailController`) by -factoring out the lower-level `$http` service, replacing it with the new `Phone` service. AngularJS's -`$resource` service is easier to use than `$http` for interacting with data sources exposed as -RESTful resources. It is also easier now to understand what the code in our controllers is doing. +factoring out the lower-level `$http` service, replacing it with the new `Phone` service. +AngularJS's `$resource` service is easier to use than `$http` for interacting with data sources +exposed as RESTful resources. It is also easier now to understand what the code in our controllers +is doing.
**`app/phone-list/phone-list.module.js`:** @@ -240,8 +225,8 @@ Karma configuration file with angular-resource. ```js files: [ - 'bower_components/angular/angular.js', - 'bower_components/angular-resource/angular-resource.js', + 'lib/angular/angular.js', + 'lib/angular-resource/angular-resource.js', ... ], ``` @@ -319,6 +304,6 @@ Now that we have seen how to build a custom service as a RESTful client, we are -[bower]: http://bower.io/ [jasmine-equality]: https://jasmine.github.io/2.4/custom_equality.html +[npm]: https://www.npmjs.com/ [restful]: https://en.wikipedia.org/wiki/Representational_State_Transfer diff --git a/docs/content/tutorial/step_14.ngdoc b/docs/content/tutorial/step_14.ngdoc index 40667717ebee..f7b09777ae02 100644 --- a/docs/content/tutorial/step_14.ngdoc +++ b/docs/content/tutorial/step_14.ngdoc @@ -22,59 +22,43 @@ the template code we created earlier. ## Dependencies The animation functionality is provided by AngularJS in the `ngAnimate` module, which is distributed -separately from the core AngularJS framework. In addition we will use [jQuery][jquery] in this project -to do extra JavaScript animations. +separately from the core AngularJS framework. In addition we will use [jQuery][jquery] in this +project to do extra JavaScript animations. -Since we are using [Bower][bower] to install client-side dependencies, this step updates the -`bower.json` configuration file to include the new dependencies: +Since we are using [npm][npm] to install client-side dependencies, this step updates the +`package.json` configuration file to include the new dependencies:
-**`bower.json`:** +**`package.json`:** -``` +```json { "name": "angular-phonecat", - "description": "A starter project for AngularJS", - "version": "0.0.0", - "homepage": "https://github.com/angular/angular-phonecat", - "license": "MIT", - "private": true, + ... "dependencies": { - "angular": "1.5.x", - "angular-animate": "1.5.x", - "angular-mocks": "1.5.x", - "angular-resource": "1.5.x", - "angular-route": "1.5.x", + "angular": "1.7.x", + "angular-animate": "1.7.x", + "angular-resource": "1.7.x", + "angular-route": "1.7.x", "bootstrap": "3.3.x", - "jquery": "3.2.x" - } + "jquery": "3.3.x" + }, + ... } ``` -* `"angular-animate": "1.5.x"` tells bower to install a version of the angular-animate module that - is compatible with version 1.5.x of AngularJS. -* `"jquery": "3.2.x"` tells bower to install the latest patch release of the 3.2 version of jQuery. - Note that this is not an AngularJS library; it is the standard jQuery library. We can use bower to +* `"angular-animate": "1.7.x"` tells npm to install a version of the angular-animate module that + is compatible with version 1.7.x of AngularJS. +* `"jquery": "3.3.x"` tells npm to install the latest patch release of the 3.3 version of jQuery. + Note that this is not an AngularJS library; it is the standard jQuery library. We can use npm to install a wide range of 3rd party libraries. -Now, we must tell bower to download and install these dependencies. +Now, we must tell npm to download and install these dependencies. ``` npm install ``` -
- **Note:** If you have bower installed globally, you can run `bower install`, but for this project - we have preconfigured `npm install` to run bower for us. -
- -
- **Warning:** If a new version of AngularJS has been released since you last ran `npm install`, then - you may have a problem with the `bower install` due to a conflict between the versions of - angular.js that need to be installed. If you run into this issue, simply delete your - `app/bower_components` directory and then run `npm install`. -
- ## How Animations work with `ngAnimate` @@ -101,12 +85,12 @@ code necessary to make your application "animation aware". ... - + ... - + @@ -115,8 +99,8 @@ code necessary to make your application "animation aware". ```
- **Important:** Be sure to use jQuery version 2.1 or newer, when using AngularJS 1.5 or newer; jQuery 1.x is - not officially supported. + **Important:** Be sure to use jQuery version 2.1 or newer, when using AngularJS 1.5 or newer; + jQuery 1.x is not officially supported. In order for AngularJS to detect jQuery and take advantage of it, make sure to include `jquery.js` before `angular.js`.
@@ -556,9 +540,9 @@ There you have it! We have created a web application in a relatively short amoun -[bower]: http://bower.io/ -[caniuse-css-animation]: http://caniuse.com/#feat=css-animation -[caniuse-css-transitions]: http://caniuse.com/#feat=css-transitions +[caniuse-css-animation]: https://caniuse.com/#feat=css-animation +[caniuse-css-transitions]: https://caniuse.com/#feat=css-transitions [jquery]: https://jquery.com/ -[jquery-animate]: https://api.jquery.com/animate/ +[jquery-animate]: https://api.jquery.com/animate [mdn-animations]: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Animations/Using_CSS_animations +[npm]: https://www.npmjs.com/ diff --git a/docs/content/tutorial/the_end.ngdoc b/docs/content/tutorial/the_end.ngdoc index 84dc09246c8a..6b5e3fe94122 100644 --- a/docs/content/tutorial/the_end.ngdoc +++ b/docs/content/tutorial/the_end.ngdoc @@ -22,5 +22,5 @@ If you have questions or feedback or just want to say "hi", please post a messag [angular-seed]: https://github.com/angular/angular-seed [gitter]: https://gitter.im/angular/angular.js -[irc]: http://webchat.freenode.net/?channels=angularjs&uio=d4 +[irc]: https://webchat.freenode.net/?channels=angularjs&uio=d4 [mailing-list]: https://groups.google.com/forum/#!forum/angular diff --git a/src/ng/q.js b/src/ng/q.js index 3bfc61386295..2bc9d03aa005 100644 --- a/src/ng/q.js +++ b/src/ng/q.js @@ -683,5 +683,11 @@ function markQStateExceptionHandled(state) { state.pur = true; } function markQExceptionHandled(q) { - markQStateExceptionHandled(q.$$state); + // Built-in `$q` promises will always have a `$$state` property. This check is to allow + // overwriting `$q` with a different promise library (e.g. Bluebird + angular-bluebird-promises). + // (Currently, this is the only method that might be called with a promise, even if it is not + // created by the built-in `$q`.) + if (q.$$state) { + markQStateExceptionHandled(q.$$state); + } } diff --git a/test/e2e/tests/base-tag.spec.js b/test/e2e/tests/base-tag.spec.js index 4fdca58ffcf6..5bddf040c11e 100644 --- a/test/e2e/tests/base-tag.spec.js +++ b/test/e2e/tests/base-tag.spec.js @@ -7,7 +7,7 @@ describe('SCE URL policy when base tags are present', function() { it('allows the page URL (location.href)', function() { - expectToBeTrusted(browser.getLocationAbsUrl(), true); + expectToBeTrusted(browser.getCurrentUrl(), true); }); it('blocks off-origin URLs', function() {