Compare commits
34 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| df41fc79f1 | |||
| 04080affa8 | |||
| 5bfef634d8 | |||
| 05c65be8ac | |||
| 876b8c7607 | |||
| 5d112c232a | |||
| 4736479c12 | |||
| 8e637dd6ac | |||
| 4110e57daf | |||
| 48e9ac68ff | |||
| e44b9961c6 | |||
| 67861ef7cd | |||
| d04f07df97 | |||
| 35633ccbbe | |||
| 8e53378cb9 | |||
| 474af907ad | |||
| e107bcdf6b | |||
| 71d197f262 | |||
| 4f12307708 | |||
| 9784f99a90 | |||
| fcb354a18f | |||
| 945271ac3f | |||
| 11f8c69e91 | |||
| c9cb05dacd | |||
| 6f0d32a871 | |||
| c4bf0c45a3 | |||
| 52bb5b7e74 | |||
| b1838492f2 | |||
| d7c7b24f8d | |||
| f9e6aceefe | |||
| 3ac2877507 | |||
| 8ae4c8217b | |||
| c043ba145f | |||
| 2a7b80223d |
+64
-10
@@ -28,7 +28,7 @@ executors:
|
||||
type: string
|
||||
default: medium
|
||||
docker:
|
||||
- image: circleci/node:12.16.3@sha256:8fe514dae7585bbee1c64bf5a6cd4dcdf393316b5c87565b47e31014872c8860
|
||||
- image: circleci/node:14.16.1@sha256:b094e85848b43209ca83d9bb114d406fe62c75cb73b18c9d8eb1a9c6462c97d4
|
||||
resource_class: << parameters.resource_class >>
|
||||
working_directory: ~/ng
|
||||
cloud-sdk:
|
||||
@@ -52,6 +52,17 @@ var-filter-run-always: &run-always
|
||||
tags:
|
||||
only: /v1\.\d+\.\d.*/
|
||||
|
||||
# Filter to run a job when code might need to be deployed - i.e. on builds for the `master` branch.
|
||||
# (Further checks are needed to determine whether a deployment is actually needed, but these are not
|
||||
# possible via filters.)
|
||||
var-filter-run-on-master: &run-on-master
|
||||
filters:
|
||||
branches:
|
||||
only:
|
||||
- master
|
||||
tags:
|
||||
ignore: /.*/
|
||||
|
||||
# Filter to run a job when code/docs might need to be deployed - i.e. on tagged builds and on builds
|
||||
# for master and `v1.*.x` branches.
|
||||
# (Further checks are needed to determine whether a deployment is actually needed, but these are not
|
||||
@@ -346,13 +357,13 @@ jobs:
|
||||
paths:
|
||||
- ./ng
|
||||
|
||||
# The `deploy-code` job should only run when all of these conditions are true for the build:
|
||||
# The `deploy-code-files` job should only run when all of these conditions are true for the build:
|
||||
# - It is for the `angular/angular.js` repository (not a fork).
|
||||
# - It is not for a pull request.
|
||||
# - It is for a tag or the master branch or the stable branch(*).
|
||||
#
|
||||
# *: The stable branch is the one that has the value `latest` in `package.json > distTag`.
|
||||
deploy-code:
|
||||
deploy-code-files:
|
||||
executor:
|
||||
name: cloud-sdk
|
||||
steps:
|
||||
@@ -360,7 +371,7 @@ jobs:
|
||||
- custom_attach_workspace
|
||||
- init_environment
|
||||
- skip_unless_tag_or_master_or_stable_branch
|
||||
- run: ls deploy/code
|
||||
- run: ls scripts/code.angularjs.org-firebase/deploy
|
||||
- run:
|
||||
name: Authenticate and configure Docker
|
||||
command: |
|
||||
@@ -369,7 +380,35 @@ jobs:
|
||||
- run:
|
||||
name: Sync files to code.angularjs.org
|
||||
command: |
|
||||
gsutil -m rsync -r deploy/code gs://code-angularjs-org-338b8.appspot.com
|
||||
gsutil -m rsync -r scripts/code.angularjs.org-firebase/deploy gs://code-angularjs-org-338b8.appspot.com
|
||||
|
||||
# The `deploy-code-firebase` job should only run when all of these conditions are true for the build:
|
||||
# - It is for the `angular/angular.js` repository (not a fork).
|
||||
# - It is not for a pull request.
|
||||
# - It is for the master branch.
|
||||
# (This is enforced via job filters, so we don't need to a step to check it here.)
|
||||
deploy-code-firebase:
|
||||
executor:
|
||||
name: default-executor
|
||||
steps:
|
||||
- skip_on_pr_and_fork_builds
|
||||
- custom_attach_workspace
|
||||
- init_environment
|
||||
# Install dependencies for Firebase functions to prevent parsing errors during deployment.
|
||||
# See https://github.com/angular/angular.js/pull/16453.
|
||||
- run:
|
||||
name: Install dependencies in `scripts/code.angularjs.org-firebase/functions/`.
|
||||
working_directory: scripts/code.angularjs.org-firebase/functions
|
||||
command: yarn install --frozen-lockfile --ignore-engines --non-interactive
|
||||
- run:
|
||||
name: Deploy to Firebase from `scripts/code.angularjs.org-firebase/`.
|
||||
working_directory: scripts/code.angularjs.org-firebase
|
||||
command: |
|
||||
# Do not use `yarn firebase` as that causes the Firebase CLI to look for `firebase.json`
|
||||
# in the root directory, even if run from inside `scripts/code.angularjs.org-firebase/`.
|
||||
firebase=$(yarn bin)/firebase
|
||||
$firebase use
|
||||
$firebase deploy --message "Commit:\ $CI_COMMIT" --non-interactive --token "$FIREBASE_TOKEN"
|
||||
|
||||
# The `deploy-docs` job should only run when all of these conditions are true for the build:
|
||||
# - It is for the `angular/angular.js` repository (not a fork).
|
||||
@@ -385,10 +424,21 @@ jobs:
|
||||
- custom_attach_workspace
|
||||
- init_environment
|
||||
- skip_unless_stable_branch
|
||||
# Install dependencies for Firebase functions to prevent parsing errors during deployment
|
||||
# See https://github.com/angular/angular.js/pull/16453
|
||||
- run: yarn --cwd scripts/docs.angularjs.org-firebase/functions --ignore-engines
|
||||
- run: yarn firebase deploy --message "Commit:\ $CI_COMMIT" --non-interactive --only hosting --project "docs-angularjs-org-9p2" --token "$FIREBASE_TOKEN"
|
||||
# Install dependencies for Firebase functions to prevent parsing errors during deployment.
|
||||
# See https://github.com/angular/angular.js/pull/16453.
|
||||
- run:
|
||||
name: Install dependencies in `scripts/docs.angularjs.org-firebase/functions/`.
|
||||
working_directory: scripts/docs.angularjs.org-firebase/functions
|
||||
command: yarn install --frozen-lockfile --ignore-engines --non-interactive
|
||||
- run:
|
||||
name: Deploy to Firebase from `scripts/docs.angularjs.org-firebase/`.
|
||||
working_directory: scripts/docs.angularjs.org-firebase
|
||||
command: |
|
||||
# Do not use `yarn firebase` as that causes the Firebase CLI to look for `firebase.json`
|
||||
# in the root directory, even if run from inside `scripts/docs.angularjs.org-firebase/`.
|
||||
firebase=$(yarn bin)/firebase
|
||||
$firebase use
|
||||
$firebase deploy --message "Commit:\ $CI_COMMIT" --non-interactive --token "$FIREBASE_TOKEN"
|
||||
|
||||
workflows:
|
||||
version: 2
|
||||
@@ -445,10 +495,14 @@ workflows:
|
||||
- e2e-test-jquery-1
|
||||
- e2e-test-jquery-2a
|
||||
- e2e-test-jquery-2b
|
||||
- deploy-code:
|
||||
- deploy-code-files:
|
||||
<<: *run-on-tags-and-master-and-version-branches
|
||||
requires:
|
||||
- prepare-deployment
|
||||
- deploy-code-firebase:
|
||||
<<: *run-on-master
|
||||
requires:
|
||||
- prepare-deployment
|
||||
- deploy-docs:
|
||||
<<: *run-on-version-branches
|
||||
requires:
|
||||
|
||||
+2
-2
@@ -1,5 +1,4 @@
|
||||
/build/
|
||||
/deploy/
|
||||
/benchpress-build/
|
||||
.DS_Store
|
||||
gen_docs.disable
|
||||
@@ -23,5 +22,6 @@ npm-debug.log
|
||||
.vscode
|
||||
*.log
|
||||
*.stackdump
|
||||
scripts/code.angularjs.org-firebase/deploy
|
||||
scripts/docs.angularjs.org-firebase/deploy
|
||||
scripts/docs.angularjs.org-firebase/functions/content
|
||||
/firebase.json
|
||||
|
||||
+17
-8
@@ -1,12 +1,21 @@
|
||||
**AngularJS support has officially ended as of January 2022.
|
||||
[See what ending support means](https://docs.angularjs.org/misc/version-support-status)
|
||||
and [read the end of life announcement](https://goo.gle/angularjs-end-of-life).**
|
||||
|
||||
**Visit [angular.io](https://angular.io) for the actively supported Angular.**
|
||||
|
||||
<a name="1.8.3"></a>
|
||||
# 1.8.3 ultimate-farewell (2022-04-07)
|
||||
|
||||
One final release of AngularJS in order to update package README files on npm.
|
||||
|
||||
<a name="1.8.2"></a>
|
||||
# 1.8.2 meteoric-mining (2020-10-21)
|
||||
|
||||
## Bug Fixes
|
||||
- **$sceDelegate:** ensure that `resourceUrlWhitelist()` is identical `trustedResourceUrlList()`
|
||||
- **$sceDelegate:** ensure that `resourceUrlWhitelist()` is identical to `trustedResourceUrlList()`
|
||||
([e41f01](https://github.com/angular/angular.js/commit/e41f018959934bfbf982ba996cd654b1fce88d43),
|
||||
[#17090](https://github.com/angular/angular.js/issues/17090))
|
||||
- **$sanitize:** do not trigger CSP alert/report in Firefox and Chrome
|
||||
([2fab3d](https://github.com/angular/angular.js/commit/2fab3d4e00f4fe35bfa3cf255160cb97404baf24))
|
||||
|
||||
|
||||
<a name="1.8.1"></a>
|
||||
@@ -28,15 +37,15 @@
|
||||
## Deprecation Notices
|
||||
|
||||
- Deprecated ~~`$compileProvider.aHrefSanitizationWhitelist`~~.
|
||||
It is now [aHrefSanitizationTrustedUrlList](https://docs.angularjs.org/api/ng/provider/$compileProvider#aHrefSanitizationTrustedUrlList)`.
|
||||
It is now [`aHrefSanitizationTrustedUrlList`](https://docs.angularjs.org/api/ng/provider/$compileProvider#aHrefSanitizationTrustedUrlList).
|
||||
- Deprecated ~~`$compileProvider.imgSrcSanitizationWhitelist`~~.
|
||||
It is now [imgSrcSanitizationTrustedUrlList](https://docs.angularjs.org/api/ng/provider/$compileProvider#imgSrcSanitizationTrustedUrlList).
|
||||
It is now [`imgSrcSanitizationTrustedUrlList`](https://docs.angularjs.org/api/ng/provider/$compileProvider#imgSrcSanitizationTrustedUrlList).
|
||||
- Deprecated ~~`$httpProvider.xsrfWhitelistedOrigins`~~.
|
||||
It is now [xsrfTrustedOrigins](https://docs.angularjs.org/api/ng/provider/$httpProvider#xsrfTrustedOrigins).
|
||||
It is now [`xsrfTrustedOrigins`](https://docs.angularjs.org/api/ng/provider/$httpProvider#xsrfTrustedOrigins).
|
||||
- Deprecated ~~`$sceDelegateProvider.resourceUrlWhitelist`~~.
|
||||
It is now [trustedResourceUrlList](https://docs.angularjs.org/api/ng/provider/$sceDelegateProvider#trustedResourceUrlList).
|
||||
It is now [`trustedResourceUrlList`](https://docs.angularjs.org/api/ng/provider/$sceDelegateProvider#trustedResourceUrlList).
|
||||
- Deprecated ~~`$sceDelegateProvider.resourceUrlBlacklist`~~.
|
||||
It is now [bannedResourceUrlList](https://docs.angularjs.org/api/ng/provider/$sceDelegateProvider#bannedResourceUrlList).
|
||||
It is now [`bannedResourceUrlList`](https://docs.angularjs.org/api/ng/provider/$sceDelegateProvider#bannedResourceUrlList).
|
||||
|
||||
For the purposes of backward compatibility, the previous symbols are aliased to their new symbol.
|
||||
|
||||
|
||||
+9
-9
@@ -14,6 +14,7 @@ var semver = require('semver');
|
||||
var exec = require('shelljs').exec;
|
||||
var pkg = require(__dirname + '/package.json');
|
||||
|
||||
var codeScriptFolder = util.codeScriptFolder;
|
||||
var docsScriptFolder = util.docsScriptFolder;
|
||||
|
||||
// Node.js version checks
|
||||
@@ -166,9 +167,9 @@ module.exports = function(grunt) {
|
||||
build: ['build'],
|
||||
tmp: ['tmp'],
|
||||
deploy: [
|
||||
'deploy/docs',
|
||||
'deploy/code',
|
||||
docsScriptFolder + '/functions/html'
|
||||
codeScriptFolder + '/deploy',
|
||||
docsScriptFolder + '/deploy',
|
||||
docsScriptFolder + '/functions/content'
|
||||
]
|
||||
},
|
||||
|
||||
@@ -372,7 +373,7 @@ module.exports = function(grunt) {
|
||||
{
|
||||
cwd: 'build',
|
||||
src: '**',
|
||||
dest: 'deploy/code/' + deployVersion + '/',
|
||||
dest: codeScriptFolder + '/deploy/' + deployVersion + '/',
|
||||
expand: true
|
||||
}
|
||||
]
|
||||
@@ -382,19 +383,19 @@ module.exports = function(grunt) {
|
||||
// The source files are needed by the embedded examples in the docs app.
|
||||
{
|
||||
src: ['build/angular*.{js,js.map,min.js}', 'build/sitemap.xml'],
|
||||
dest: 'deploy/docs/',
|
||||
dest: docsScriptFolder + '/deploy/',
|
||||
expand: true,
|
||||
flatten: true
|
||||
},
|
||||
{
|
||||
cwd: 'build/docs',
|
||||
src: ['**', '!ptore2e/**', '!index*.html'],
|
||||
dest: 'deploy/docs/',
|
||||
dest: docsScriptFolder + '/deploy/',
|
||||
expand: true
|
||||
},
|
||||
{
|
||||
src: 'build/docs/index-production.html',
|
||||
dest: 'deploy/docs/index.html'
|
||||
dest: docsScriptFolder + '/deploy/index.html'
|
||||
},
|
||||
{
|
||||
src: 'build/docs/index-production.html',
|
||||
@@ -403,7 +404,7 @@ module.exports = function(grunt) {
|
||||
{
|
||||
cwd: 'build/docs',
|
||||
src: 'partials/**',
|
||||
dest: docsScriptFolder + '/functions/content',
|
||||
dest: docsScriptFolder + '/functions/content/',
|
||||
expand: true
|
||||
}
|
||||
]
|
||||
@@ -517,7 +518,6 @@ module.exports = function(grunt) {
|
||||
]);
|
||||
grunt.registerTask('prepareDeploy', [
|
||||
'copy:deployFirebaseCode',
|
||||
'firebaseDocsJsonForCI',
|
||||
'copy:deployFirebaseDocs'
|
||||
]);
|
||||
grunt.registerTask('default', ['package']);
|
||||
|
||||
@@ -14,9 +14,11 @@ piece of cake. Best of all? It makes development fun!
|
||||
|
||||
--------------------
|
||||
|
||||
**On July 1, 2018 AngularJS entered a 3 year Long Term Support period:** [Find out more](https://docs.angularjs.org/misc/version-support-status)
|
||||
**AngularJS support has officially ended as of January 2022.
|
||||
[See what ending support means](https://docs.angularjs.org/misc/version-support-status)
|
||||
and [read the end of life announcement](https://goo.gle/angularjs-end-of-life).**
|
||||
|
||||
**Looking for the new Angular? Go here:** https://github.com/angular/angular
|
||||
**Visit [angular.io](https://angular.io) for the actively supported Angular.**
|
||||
|
||||
--------------------
|
||||
|
||||
@@ -55,11 +57,12 @@ component in an interconnected way like a well-oiled machine. AngularJS is JavaS
|
||||
and done right. (Well it is not really MVC, read on, to understand what this means.)
|
||||
|
||||
#### MVC, no, MV* done the right way!
|
||||
MVC, short for Model-View-Controller, is a design pattern, i.e. how the code should be organized and
|
||||
how the different parts of an application separated for proper readability and debugging. Model is
|
||||
the data and the database. View is the user interface and what the user sees. Controller is the main
|
||||
link between Model and View. These are the three pillars of major programming frameworks present on
|
||||
the market today. On the other hand AngularJS works on MV*, short for Model-View-_Whatever_. The
|
||||
[MVC](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller), short for
|
||||
Model-View-Controller, is a design pattern, i.e. how the code should be organized and how the
|
||||
different parts of an application separated for proper readability and debugging. Model is the data
|
||||
and the database. View is the user interface and what the user sees. Controller is the main link
|
||||
between Model and View. These are the three pillars of major programming frameworks present on the
|
||||
market today. On the other hand AngularJS works on MV*, short for Model-View-_Whatever_. The
|
||||
_Whatever_ is AngularJS's way of telling that you may create any kind of linking between the Model
|
||||
and the View here.
|
||||
|
||||
|
||||
+10
-14
@@ -2,19 +2,15 @@
|
||||
|
||||
## Supported Versions
|
||||
|
||||
**AngularJS support has officially ended as of January 2022.**
|
||||
[See what ending support means](https://docs.angularjs.org/misc/version-support-status)
|
||||
and [read the end of life announcement](https://goo.gle/angularjs-end-of-life).
|
||||
|
||||
Visit [angular.io](https://angular.io) for the actively supported Angular.
|
||||
|
||||
| Version | Supported | Status | Comments |
|
||||
| ----------- | ------------------ | --------------------- | ------------------------------------ |
|
||||
| 1.8.x | :white_check_mark: | Long Term Support | See [Long Term Support policy][0] |
|
||||
| 1.3.x-1.7.x | :x: | | |
|
||||
| 1.2.x | :warning: | Security patches only | Last version to provide IE 8 support |
|
||||
| <1.2.0 | :x: | | |
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
Email us at [security@angularjs.org](mailto:security@angularjs.org) to report any potential security issues in AngularJS.
|
||||
|
||||
Please [use the latest AngularJS possible](https://docs.angularjs.org/guide/security#use-the-latest-angularjs-possible)
|
||||
and keep in mind the guidance around AngularJS'
|
||||
[expression language](https://docs.angularjs.org/guide/security#angularjs-templates-and-expressions).
|
||||
|
||||
[0]: https://docs.angularjs.org/misc/version-support-status#long-term-support
|
||||
| 1.8.x | :x: | All support ended | |
|
||||
| 1.3.x-1.7.x | :x: | All support ended | |
|
||||
| 1.2.x | :x: | All support ended | Last version to provide IE 8 support |
|
||||
| <1.2.0 | :x: | All support ended | |
|
||||
|
||||
@@ -478,10 +478,10 @@ iframe.example {
|
||||
#navbar-sub {
|
||||
padding-top: 10px;
|
||||
padding-bottom: 5px;
|
||||
background: rgba(245,245,245,0.88);
|
||||
background: rgba(245,245,245,1);
|
||||
box-shadow: 0 0 2px #999;
|
||||
z-index: 1028;
|
||||
top: 83px;
|
||||
top: 57px;
|
||||
}
|
||||
|
||||
.main-body-grid {
|
||||
@@ -982,7 +982,7 @@ toc-container > div > toc-tree > ul > li > toc-tree > ul > li toc-tree > ul li {
|
||||
|
||||
#navbar-sub {
|
||||
position: relative;
|
||||
top: 17px;
|
||||
top: 0;
|
||||
margin-top: 80px;
|
||||
padding-bottom: 0;
|
||||
margin-bottom: 0;
|
||||
|
||||
@@ -142,21 +142,18 @@
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<nav id="navbar-notice" class="navbar navbar-fixed-top">
|
||||
<div class="navbar-inner">
|
||||
<div class="container">
|
||||
<p class="site-notice visible-phone">
|
||||
This site refers to AngularJS (v1.x). <a href="https://angular.io/">Go to the latest Angular</a>.
|
||||
</p>
|
||||
<p class="site-notice visible-desktop">
|
||||
This site and all of its contents are referring to AngularJS (version 1.x),
|
||||
if you are looking for the latest Angular, please visit <a href="https://angular.io/">angular.io</a>.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<nav id="navbar-sub" class="sup-header navbar navbar-fixed-top" scroll-y-offset-element ng-cloak>
|
||||
<div class="container main-grid main-header-grid">
|
||||
<p class="site-notice">
|
||||
AngularJS support has officially ended as of January 2022.
|
||||
<a href="https://docs.angularjs.org/misc/version-support-status">
|
||||
See what ending support means
|
||||
</a> and
|
||||
<a href="https://goo.gle/angularjs-end-of-life">
|
||||
read the end of life announcement</a>.<br>
|
||||
Visit <a href="https://angular.io">angular.io</a> for the actively supported
|
||||
Angular.
|
||||
</p>
|
||||
<div class="grid-left">
|
||||
<version-picker></version-picker>
|
||||
</div>
|
||||
|
||||
@@ -3,9 +3,12 @@
|
||||
@description
|
||||
|
||||
# AngularJS API Docs
|
||||
|
||||
<div class="alert alert-warning">
|
||||
**On July 1, 2018 AngularJS entered a 3 year Long Term Support period:** [Find out more](misc/version-support-status).
|
||||
AngularJS support has officially ended as of January 2022.
|
||||
[See what ending support means](https://docs.angularjs.org/misc/version-support-status)
|
||||
and [read the end of life announcement](https://goo.gle/angularjs-end-of-life).
|
||||
|
||||
Visit [angular.io](https://angular.io) for the actively supported Angular.
|
||||
</div>
|
||||
|
||||
## Welcome to the AngularJS API docs page.
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
Occurs when an expression is trying to assign a value to a non-assignable expression.
|
||||
|
||||
This can happen if the left side of an assigment is not a valid reference to a variable
|
||||
This can happen if the left side of an assignment is not a valid reference to a variable
|
||||
or property. E.g. In the following snippet `1+2` is not assignable.
|
||||
|
||||
```
|
||||
|
||||
@@ -4,58 +4,26 @@
|
||||
|
||||
# Version Support Status
|
||||
|
||||
This page describes the support status of the significant versions of AngularJS.
|
||||
**AngularJS support has officially ended as of January 2022.**
|
||||
|
||||
<div class="alert alert-info">
|
||||
On July 1, 2018 AngularJS entered a 3 year Long Term Support period.<br />
|
||||
<br />
|
||||
_**UPDATE (2020-07-27):**_<br />
|
||||
_Due to COVID-19 affecting teams migrating from AngularJS, we are extending the LTS by six months
|
||||
(until December 31, 2021)._
|
||||
</div>
|
||||
Visit [angular.io](https://angular.io) for the actively supported Angular.
|
||||
|
||||
Any version branch not shown in the following table (e.g. 1.7.x) is no longer being developed.
|
||||
## What does end of support mean?
|
||||
|
||||
<table class="dev-status table table-bordered">
|
||||
<thead>
|
||||
<tr><th>Version</th><th>Status</th><th>Comments</th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="security">
|
||||
<td><span>1.2.x</span></td>
|
||||
<td>Security patches only</td>
|
||||
<td>Last version to provide IE 8 support</td>
|
||||
</tr>
|
||||
<tr class="stable">
|
||||
<td><span>1.8.x</span></td>
|
||||
<td>Long Term Support</td>
|
||||
<td>See {@link version-support-status#long-term-support Long Term Support} section below.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
The code will remain accessible on [GitHub](https://github.com/angular/angular.js),
|
||||
[npm](https://www.npmjs.com/package/angular),
|
||||
[Bower](https://github.com/angular/bower-angular), and
|
||||
[Release archive](https://code.angularjs.org/1.8.2).
|
||||
This website will remain here indefinitely.
|
||||
|
||||
### Long Term Support
|
||||
The GitHub repository will be in an archived state, meaning that no new issues or pull requests
|
||||
can be submitted.
|
||||
|
||||
On July 1st 2018, AngularJS entered a Long Term Support period.
|
||||
See https://goo.gle/angularjs-end-of-life for the full details.
|
||||
|
||||
We now focus exclusively on providing fixes to bugs that satisfy at least one of the following criteria:
|
||||
|
||||
* A security flaw is detected in the 1.8.x branch of the framework
|
||||
* One of the major browsers releases a version that will cause current production applications using AngularJS 1.8.x to stop working
|
||||
* The jQuery library releases a version that will cause current production applications using AngularJS 1.8.x to stop working.
|
||||
|
||||
AngularJS 1.2.x will get a new version if and only if a new severe security issue is discovered.
|
||||
|
||||
|
||||
|
||||
### Blog Post
|
||||
|
||||
You can read more about these plans in our [blog post announcement](https://blog.angular.io/stable-angularjs-and-long-term-support-7e077635ee9c).
|
||||
|
||||
### Extended Long Term Support
|
||||
|
||||
If you need support for AngularJS beyond December 2021, you should consider:
|
||||
|
||||
* [XLTS.dev](https://angularjs.xlts.dev)
|
||||
### Extended Long Term Support
|
||||
|
||||
If you need extended support for AngularJS, you should consider:
|
||||
|
||||
* [XLTS.dev](https://xlts.dev/angularjs)
|
||||
* [OpenLogic](https://www.openlogic.com/solutions/angularjs-support-and-services)
|
||||
|
||||
+5
-16
@@ -7,10 +7,12 @@ var spawn = require('npm-run').spawn;
|
||||
|
||||
var CSP_CSS_HEADER = '/* Include this file in your html if you are using the CSP mode. */\n\n';
|
||||
|
||||
const docsScriptFolder = 'scripts/docs.angularjs.org-firebase';
|
||||
|
||||
module.exports = {
|
||||
|
||||
codeScriptFolder: 'scripts/code.angularjs.org-firebase',
|
||||
|
||||
docsScriptFolder: 'scripts/docs.angularjs.org-firebase',
|
||||
|
||||
startKarma: function(config, singleRun, done) {
|
||||
var browsers = grunt.option('browsers');
|
||||
var reporters = grunt.option('reporters');
|
||||
@@ -301,19 +303,6 @@ module.exports = {
|
||||
}
|
||||
next();
|
||||
};
|
||||
},
|
||||
|
||||
docsScriptFolder,
|
||||
|
||||
// Our Firebase projects are in subfolders, but the firebase tool expects them in the root,
|
||||
// so we need to modify the upload folder path and copy the file into the root
|
||||
firebaseDocsJsonForCI: function() {
|
||||
var fileName = docsScriptFolder + '/firebase.json';
|
||||
var json = grunt.file.readJSON(fileName);
|
||||
|
||||
(json.hosting || (json.hosting = {})).public = 'deploy/docs';
|
||||
(json.functions || (json.functions = {})).source = docsScriptFolder + '/functions';
|
||||
|
||||
grunt.file.write('firebase.json', JSON.stringify(json));
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
+5
-5
@@ -27,7 +27,7 @@
|
||||
"changez": "^2.1.1",
|
||||
"changez-angular": "^2.1.2",
|
||||
"cheerio": "^0.17.0",
|
||||
"commitizen": "^2.3.0",
|
||||
"commitizen": "^4.2.4",
|
||||
"commitplease": "^2.7.10",
|
||||
"cross-spawn": "^4.0.0",
|
||||
"cz-conventional-changelog": "1.1.4",
|
||||
@@ -35,10 +35,10 @@
|
||||
"dgeni-packages": "^0.26.5",
|
||||
"eslint-plugin-promise": "^3.6.0",
|
||||
"event-stream": "~3.1.0",
|
||||
"firebase-tools": "^8.3.0",
|
||||
"firebase-tools": "^9.3.0",
|
||||
"glob": "^6.0.1",
|
||||
"google-code-prettify": "1.0.1",
|
||||
"grunt": "^1.0.1",
|
||||
"grunt": "^1.4.1",
|
||||
"grunt-bump": "^0.8.0",
|
||||
"grunt-cli": "^1.2.0",
|
||||
"grunt-contrib-clean": "^1.0.0",
|
||||
@@ -55,7 +55,7 @@
|
||||
"gulp-foreach": "0.0.1",
|
||||
"gulp-rename": "^1.2.0",
|
||||
"gulp-sourcemaps": "^1.2.2",
|
||||
"gulp-uglify": "^1.0.1",
|
||||
"gulp-uglify": "^3.0.2",
|
||||
"gulp-util": "^3.0.1",
|
||||
"jasmine-core": "^2.8.0",
|
||||
"jasmine-node": "^2.0.0",
|
||||
@@ -76,7 +76,7 @@
|
||||
"karma-script-launcher": "1.0.0",
|
||||
"karma-spec-reporter": "0.0.32",
|
||||
"load-grunt-tasks": "^3.5.0",
|
||||
"lodash": "~4.17.19",
|
||||
"lodash": "~4.17.21",
|
||||
"log4js": "^0.6.27",
|
||||
"lunr": "^0.7.2",
|
||||
"marked": "~0.3.0",
|
||||
|
||||
@@ -10,13 +10,13 @@ config.sauceKey = process.env.SAUCE_ACCESS_KEY;
|
||||
config.multiCapabilities = [
|
||||
capabilitiesForSauceLabs({
|
||||
browserName: 'chrome',
|
||||
platform: 'OS X 10.14',
|
||||
version: '81'
|
||||
platform: 'OS X 10.15',
|
||||
version: '91'
|
||||
}),
|
||||
capabilitiesForSauceLabs({
|
||||
browserName: 'firefox',
|
||||
platform: 'OS X 10.14',
|
||||
version: '76'
|
||||
platform: 'OS X 10.15',
|
||||
version: '85'
|
||||
})
|
||||
];
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
|
||||
const functions = require('firebase-functions');
|
||||
const {Storage} = require('@google-cloud/storage');
|
||||
const path = require('path');
|
||||
|
||||
const storage = new Storage();
|
||||
const gcsBucketId = `${process.env.GCLOUD_PROJECT}.appspot.com`;
|
||||
@@ -41,13 +40,13 @@ function sendStoredFile(request, response) {
|
||||
return getDirectoryListing('/').catch(sendErrorResponse);
|
||||
}
|
||||
|
||||
downloadSource = path.join.apply(null, filePathSegments);
|
||||
downloadSource = filePathSegments.join('/');
|
||||
|
||||
downloadAndSend(downloadSource).catch(error => {
|
||||
if (isDocsPath && error.code === 404) {
|
||||
fileName = 'index.html';
|
||||
filePathSegments = [version, 'docs', fileName];
|
||||
downloadSource = path.join.apply(null, filePathSegments);
|
||||
downloadSource = filePathSegments.join('/');
|
||||
|
||||
return downloadAndSend(downloadSource);
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -2,12 +2,12 @@
|
||||
"name": "functions-firebase-code.angularjs.org",
|
||||
"description": "Cloud Functions to serve files from gcs to code.angularjs.org",
|
||||
"engines": {
|
||||
"node": "10"
|
||||
"node": "14"
|
||||
},
|
||||
"dependencies": {
|
||||
"@google-cloud/storage": "^4.7.0",
|
||||
"firebase-admin": "^8.10.0",
|
||||
"firebase-functions": "^3.6.0"
|
||||
"@google-cloud/storage": "^5.8.5",
|
||||
"firebase-admin": "^9.9.0",
|
||||
"firebase-functions": "^3.14.1"
|
||||
},
|
||||
"private": true
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,15 +1,15 @@
|
||||
Firebase for code.angularjs.org
|
||||
===============================
|
||||
|
||||
This folder contains the Google Firebase scripts for the code.angularjs.org setup.
|
||||
This folder contains the Google Firebase scripts for the `code.angularjs.org` setup.
|
||||
|
||||
firebase.json contains the rewrite rules that route every subdirectory request to the cloud function
|
||||
in functions/index.js that serves the docs from the Firebase Google Cloud Storage bucket.
|
||||
`firebase.json` contains the rewrite rules that route every subdirectory request to the cloud function in `functions/index.js` that serves the docs from the Firebase Google Cloud Storage bucket.
|
||||
|
||||
functions/index.js also contains a rule that deletes outdated build zip files
|
||||
from the snapshot and snapshot-stable folders when new zip files are uploaded.
|
||||
`functions/index.js` also contains a rule that deletes outdated build zip files from the snapshot and snapshot-stable folders when new zip files are uploaded.
|
||||
|
||||
The deployment to the Google Cloud Storage bucket happens automatically via CI.
|
||||
See the .circleci/config.yml file in the repository root.
|
||||
See `/scripts/docs.angularjs.org-firebase/readme.firebase.code.md` for the Firebase deployment to `docs.angularjs.org`.
|
||||
|
||||
See /readme.firebase.docs.md for the firebase deployment to docs.angularjs.org
|
||||
# Continuous integration
|
||||
|
||||
The code is deployed to Google Firebase hosting and functions as well as to the Google Cloud Storage bucket automatically via CI.
|
||||
See `.circleci/config.yml` for the complete deployment config and build steps.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"hosting": {
|
||||
"public": "../../deploy/docs",
|
||||
"public": "deploy",
|
||||
"redirects": [
|
||||
{
|
||||
"source": "/error/:namespace\\::error*",
|
||||
|
||||
@@ -2,23 +2,23 @@
|
||||
"name": "functions",
|
||||
"description": "Cloud Functions for Firebase",
|
||||
"engines": {
|
||||
"node": "10"
|
||||
},
|
||||
"node": "14"
|
||||
},
|
||||
"scripts": {
|
||||
"lint": "eslint .",
|
||||
"serve": "firebase serve --only functions",
|
||||
"shell": "firebase experimental:functions:shell",
|
||||
"serve": "firebase emulators:start --only functions",
|
||||
"shell": "firebase functions:shell",
|
||||
"start": "npm run shell",
|
||||
"deploy": "firebase deploy --only functions",
|
||||
"logs": "firebase functions:log"
|
||||
},
|
||||
"dependencies": {
|
||||
"firebase-admin": "^8.10.0",
|
||||
"firebase-functions": "^3.6.0"
|
||||
"firebase-admin": "^9.9.0",
|
||||
"firebase-functions": "^3.14.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"eslint": "^4.12.0",
|
||||
"eslint-plugin-promise": "^3.6.0"
|
||||
"eslint": "^7.28.0",
|
||||
"eslint-plugin-promise": "^5.1.0"
|
||||
},
|
||||
"private": true
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,28 +1,26 @@
|
||||
Firebase for docs.angularjs.org
|
||||
===============================
|
||||
|
||||
This folder contains the Google Firebase scripts for the `docs.angularjs.org` setup.
|
||||
|
||||
See `/scripts/code.angularjs.org-firebase/readme.firebase.code.md` for the Firebase deployment to `code.angularjs.org`.
|
||||
|
||||
# Continuous integration
|
||||
|
||||
The docs are deployed to Google Firebase hosting via a CI deployment config, which expects
|
||||
firebase.json to be in the repository root, which is done by a Grunt task
|
||||
(`firebaseDocsJsonForCI` which is included in `prepareDeploy`).
|
||||
The `firebaseDocsJsonForCI` task modifies the paths in the `firebase.json` and copies it to the
|
||||
repository root.
|
||||
The docs are deployed to Google Firebase hosting and functions automatically via CI.
|
||||
|
||||
See .circleci/config.yml for the complete deployment config and build steps.
|
||||
See `.circleci/config.yml` for the complete deployment config and build steps.
|
||||
|
||||
# Serving locally:
|
||||
|
||||
- Run `cd scripts/docs.angularjs.org-firebase`.
|
||||
This changes the current working directory.
|
||||
|
||||
- Run `yarn grunt package`.
|
||||
This builds the files that will be deployed.
|
||||
|
||||
- Run `yarn grunt prepareDeploy`.
|
||||
This copies docs content files into deploy/docs and the partials for Search Engine AJAX
|
||||
Crawling into ./functions/content.
|
||||
It also moves the firebase.json file to the root folder, where the firebase-cli expects it
|
||||
This copies docs content files into `./deploy` and the partials for Search Engine AJAX Crawling into `./functions/content`.
|
||||
|
||||
- Run `firebase serve --only functions,hosting`
|
||||
Creates a server at localhost:5000 that serves from deploy/docs and uses the local function
|
||||
|
||||
See /scripts/code.angularjs.org-firebase/readme.firebase.code.md for the firebase deployment to
|
||||
code.angularjs.org
|
||||
- Run `$(yarn bin)/firebase emulators:start` (or `..\..\node_modules\.bin\firebase emulators:start` on Windows).
|
||||
Creates a server at http://localhost:5000 that serves from `./deploy` and uses the local function.
|
||||
|
||||
+2
-2
@@ -1900,7 +1900,7 @@ function $ParseProvider() {
|
||||
|
||||
var useInputs = parsedExpression.inputs && !exp.inputs;
|
||||
|
||||
// Propogate the literal/inputs/constant attributes
|
||||
// Propagate the literal/inputs/constant attributes
|
||||
// ... but not oneTime since we are handling it
|
||||
oneTimeWatch.literal = parsedExpression.literal;
|
||||
oneTimeWatch.constant = parsedExpression.constant;
|
||||
@@ -1987,7 +1987,7 @@ function $ParseProvider() {
|
||||
fn.$$intercepted = parsedExpression;
|
||||
fn.$$interceptor = interceptorFn;
|
||||
|
||||
// Propogate the literal/oneTime/constant attributes
|
||||
// Propagate the literal/oneTime/constant attributes
|
||||
fn.literal = parsedExpression.literal;
|
||||
fn.oneTime = parsedExpression.oneTime;
|
||||
fn.constant = parsedExpression.constant;
|
||||
|
||||
+6
-1
@@ -1793,7 +1793,12 @@ describe('angular', function() {
|
||||
} else if (/Chrome\//.test(userAgent)) {
|
||||
protocol = 'chrome-extension:';
|
||||
} else if (/Safari\//.test(userAgent)) {
|
||||
protocol = 'safari-extension:';
|
||||
// On iOS, Safari versions <15 recognize `safari-extension:`, while versions >=15 only
|
||||
// recognize `chrome-extension:`.
|
||||
// (On macOS, Safari v15 recognizes both protocols, so it is fine to use either.)
|
||||
var majorVersionMatch = /Version\/(\d+)/.exec(userAgent);
|
||||
var majorVersion = majorVersionMatch ? parseInt(majorVersionMatch[1], 10) : 0;
|
||||
protocol = (majorVersion < 15) ? 'safari-extension:' : 'chrome-extension:';
|
||||
} else {
|
||||
protocol = 'browserext:'; // Upcoming standard scheme.
|
||||
}
|
||||
|
||||
@@ -1271,10 +1271,10 @@ describe('input', function() {
|
||||
var inputElm = helper.compileInput('<input type="datetime-local" ng-model="breakMe"/>');
|
||||
|
||||
$rootScope.$apply(function() {
|
||||
$rootScope.breakMe = new Date(2009, 0, 6, 16, 25, 0);
|
||||
$rootScope.breakMe = new Date(2009, 0, 6, 16, 25, 1, 337);
|
||||
});
|
||||
|
||||
expect(inputElm.val()).toBe('2009-01-06T16:25:00.000');
|
||||
expect(inputElm.val()).toBe('2009-01-06T16:25:01.337');
|
||||
|
||||
//set to text for browsers with datetime-local validation.
|
||||
inputElm[0].setAttribute('type', 'text');
|
||||
@@ -1324,32 +1324,32 @@ describe('input', function() {
|
||||
it('should use UTC if specified in the options', function() {
|
||||
var inputElm = helper.compileInput('<input type="datetime-local" ng-model="value" ng-model-options="{timezone: \'UTC\'}" />');
|
||||
|
||||
helper.changeInputValueTo('2000-01-01T01:02');
|
||||
expect(+$rootScope.value).toBe(Date.UTC(2000, 0, 1, 1, 2, 0));
|
||||
helper.changeInputValueTo('2000-01-01T01:02:03.456');
|
||||
expect(+$rootScope.value).toBe(Date.UTC(2000, 0, 1, 1, 2, 3, 456));
|
||||
|
||||
$rootScope.$apply(function() {
|
||||
$rootScope.value = new Date(Date.UTC(2001, 0, 1, 1, 2, 0));
|
||||
$rootScope.value = new Date(Date.UTC(2001, 0, 1, 1, 2, 3, 456));
|
||||
});
|
||||
expect(inputElm.val()).toBe('2001-01-01T01:02:00.000');
|
||||
expect(inputElm.val()).toBe('2001-01-01T01:02:03.456');
|
||||
});
|
||||
|
||||
|
||||
it('should be possible to override the timezone', function() {
|
||||
var inputElm = helper.compileInput('<input type="datetime-local" ng-model="value" ng-model-options="{timezone: \'UTC\'}" />');
|
||||
|
||||
helper.changeInputValueTo('2000-01-01T01:02');
|
||||
expect(+$rootScope.value).toBe(Date.UTC(2000, 0, 1, 1, 2, 0));
|
||||
helper.changeInputValueTo('2000-01-01T01:02:03.456');
|
||||
expect(+$rootScope.value).toBe(Date.UTC(2000, 0, 1, 1, 2, 3, 456));
|
||||
|
||||
inputElm.controller('ngModel').$overrideModelOptions({timezone: '+0500'});
|
||||
$rootScope.$apply(function() {
|
||||
$rootScope.value = new Date(Date.UTC(2001, 0, 1, 1, 2, 0));
|
||||
$rootScope.value = new Date(Date.UTC(2001, 0, 1, 1, 2, 3, 456));
|
||||
});
|
||||
expect(inputElm.val()).toBe('2001-01-01T06:02:00.000');
|
||||
expect(inputElm.val()).toBe('2001-01-01T06:02:03.456');
|
||||
|
||||
inputElm.controller('ngModel').$overrideModelOptions({timezone: 'UTC'});
|
||||
|
||||
helper.changeInputValueTo('2000-01-01T01:02');
|
||||
expect(+$rootScope.value).toBe(Date.UTC(2000, 0, 1, 1, 2, 0));
|
||||
helper.changeInputValueTo('2000-01-01T01:02:03.456');
|
||||
expect(+$rootScope.value).toBe(Date.UTC(2000, 0, 1, 1, 2, 3, 456));
|
||||
});
|
||||
|
||||
|
||||
@@ -1360,13 +1360,13 @@ describe('input', function() {
|
||||
var inputElm = helper.compileInput(
|
||||
'<input type="datetime-local" ng-model="value" ng-model-options="' + ngModelOptions + '" />');
|
||||
|
||||
helper.changeInputValueTo('2000-01-01T06:02');
|
||||
expect(+$rootScope.value).toBe(Date.UTC(2000, 0, 1, 1, 2, 0));
|
||||
helper.changeInputValueTo('2000-01-01T06:02:03.456');
|
||||
expect(+$rootScope.value).toBe(Date.UTC(2000, 0, 1, 1, 2, 3, 456));
|
||||
|
||||
$rootScope.$apply(function() {
|
||||
$rootScope.value = new Date(Date.UTC(2001, 0, 1, 1, 2, 0));
|
||||
$rootScope.value = new Date(Date.UTC(2001, 0, 1, 1, 2, 3, 456));
|
||||
});
|
||||
expect(inputElm.val()).toBe('2001-01-01T06:02:00.000');
|
||||
expect(inputElm.val()).toBe('2001-01-01T06:02:03.456');
|
||||
}
|
||||
);
|
||||
|
||||
@@ -1401,13 +1401,13 @@ describe('input', function() {
|
||||
it('should allow to specify the seconds', function() {
|
||||
var inputElm = helper.compileInput('<input type="datetime-local" ng-model="value"" />');
|
||||
|
||||
helper.changeInputValueTo('2000-01-01T01:02:03');
|
||||
expect(+$rootScope.value).toBe(+new Date(2000, 0, 1, 1, 2, 3));
|
||||
helper.changeInputValueTo('2000-01-01T01:02:03.456');
|
||||
expect(+$rootScope.value).toBe(+new Date(2000, 0, 1, 1, 2, 3, 456));
|
||||
|
||||
$rootScope.$apply(function() {
|
||||
$rootScope.value = new Date(2001, 0, 1, 1, 2, 3);
|
||||
$rootScope.value = new Date(2001, 0, 1, 1, 2, 3, 456);
|
||||
});
|
||||
expect(inputElm.val()).toBe('2001-01-01T01:02:03.000');
|
||||
expect(inputElm.val()).toBe('2001-01-01T01:02:03.456');
|
||||
});
|
||||
|
||||
|
||||
@@ -1425,13 +1425,13 @@ describe('input', function() {
|
||||
it('should allow four or more digits in year', function() {
|
||||
var inputElm = helper.compileInput('<input type="datetime-local" ng-model="value" />');
|
||||
|
||||
helper.changeInputValueTo('10123-01-01T01:02');
|
||||
expect(+$rootScope.value).toBe(+new Date(10123, 0, 1, 1, 2, 0));
|
||||
helper.changeInputValueTo('10123-01-01T01:02:03.456');
|
||||
expect(+$rootScope.value).toBe(+new Date(10123, 0, 1, 1, 2, 3, 456));
|
||||
|
||||
$rootScope.$apply(function() {
|
||||
$rootScope.value = new Date(20456, 1, 1, 1, 2, 0);
|
||||
$rootScope.value = new Date(20456, 1, 1, 1, 2, 3, 456);
|
||||
});
|
||||
expect(inputElm.val()).toBe('20456-02-01T01:02:00.000');
|
||||
expect(inputElm.val()).toBe('20456-02-01T01:02:03.456');
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user