Commit Graph

3246 Commits

Author SHA1 Message Date
Miško Hevery 9bd9590767 refactor(ivy): change styling to use programmatic API on updates (#34804)
Previously we would write to class/style as strings `element.className` and `element.style.cssText`. Turns out that approach is good for initial render but not good for updates. Updates using this approach are problematic because we have to check to see if there was an out of bound write to style and than perform reconciliation. This also requires the browser to bring up CSS parser which is expensive.

Another problem with old approach is that we had to queue the DOM writes and flush them twice. Once on element advance instruction and once in `hostBindings`. The double flushing is expensive but it also means that a directive can observe that styles are not yet written (they are written after directive executes.)

The new approach uses `element.classList.add/remove` and `element.style.setProperty/removeProperty` API for updates only (it continues to use `element.className` and `element.style.cssText` for initial render as it is cheaper.) The other change is that the styling changes are applied immediately (no queueing). This means that it is the instruction which computes priority. In some circumstances it may result in intermediate writes which are than overwritten with new value. (This should be rare)

Overall this change deletes most of the previous code and replaces it with new simplified implement. The simplification results in code savings.

PR Close #34804
2020-01-24 12:23:19 -08:00
Miško Hevery 5aabe93abe refactor(ivy): Switch styling to new reconcile algorithm (#34616)
NOTE: This change must be reverted with previous deletes so that it code remains in build-able state.

This change deletes old styling code and replaces it with a simplified styling algorithm.

The mental model for the new algorithm is:
- Create a linked list of styling bindings in the order of priority. All styling bindings ere executed in compiled order and than a linked list of bindings is created in priority order.
- Flush the style bindings at the end of `advance()` instruction. This implies that there are two flush events. One at the end of template `advance` instruction in the template. Second one at the end of `hostBindings` `advance` instruction when processing host bindings (if any).
- Each binding instructions effectively updates the string to represent the string at that location. Because most of the bindings are additive, this is a cheap strategy in most cases. In rare cases the strategy requires removing tokens from the styling up to this point. (We expect that to be rare case)S Because, the bindings are presorted in the order of priority, it is safe to resume the processing of the concatenated string from the last change binding.

PR Close #34616
2020-01-24 12:23:00 -08:00
Miško Hevery 2961bf06c6 refactor(ivy): move `hostVars`/`hostAttrs` from instruction to `DirectiveDef` (#34683)
This change moves information from instructions to declarative position:
- `ɵɵallocHostVars(vars)` => `DirectiveDef.hostVars`
- `ɵɵelementHostAttrs(attrs)` => `DirectiveDef.hostAttrs`

When merging directives it is necessary to know about `hostVars` and `hostAttrs`. Before this change the information was stored in the `hostBindings` function. This was problematic, because in order to get to the information the `hostBindings` would have to be executed. In order for `hostBindings` to be executed the directives would have to be instantiated. This means that the directive instantiation would happen before we had knowledge about the `hostAttrs` and as a result the directive could observe in the constructor that not all of the `hostAttrs` have been applied. This further complicates the runtime as we have to apply `hostAttrs` in parts over many invocations.

`ɵɵallocHostVars` was unnecessarily complicated because it would have to update the `LView` (and Blueprint) while existing directives are already executing. By moving it out of `hostBindings` function we can access it statically and we can create correct `LView` (and Blueprint) in a single pass.

This change only changes how the instructions are generated, but does not change the runtime much. (We cheat by emulating the old behavior by calling `ɵɵallocHostVars` and `ɵɵelementHostAttrs`) Subsequent change will refactor the runtime to take advantage of the static information.

PR Close #34683
2020-01-24 12:22:10 -08:00
Alex Rickabaugh 0c8d085666 fix(ivy): use any for generic context checks when !strictTemplates (#34649)
Previously, the template type-checker would always construct a generic
template context type with correct bounds, even when strictTemplates was
disabled. This meant that type-checking of expressions involving that type
was stricter than View Engine.

This commit introduces a 'strictContextGenerics' flag which behaves
similarly to other 'strictTemplates' flags, and switches the inference of
generic type parameters on the component context based on the value of this
flag.

PR Close #34649
2020-01-23 10:31:48 -08:00
Andrew Kushnir 92c411f86d docs: update payload size limits for angular.io application (#34913)
This commit increases payload size limits for angular.io application that triggered an error after merging another commit (00f13cc074). The goal of this commit is to bring master back to a "green" state and separate investigation is required to identify the root cause for size increase.

PR Close #34913
2020-01-22 15:01:01 -08:00
Aravind 1be5b69174 docs: fix typo on router guide (#34911)
closes #34907
PR Close #34911
2020-01-22 14:32:56 -08:00
Sonu Kapoor f49b45832c build(docs-infra): always specify a landing file for StackBlitz projects (#34553)
The StackBlitz API (which we use to generate StackBlitz projects on the
fly, when a user clicks on a live example link in the docs) allows
specifying the file to open in the editor by passing a query param. If
no file is specified, StackBlitz opens a default one. In the past, it
used to be `main.ts` and nowadays it seems to be `app.component.ts`.

StackBlitz builder, the tool that we use to generate the StackBlitz
projects, allows specifying the primary file by setting the `file`
property in the corresponding `stackblitz.json`.

Previously, if the `file` property was not set, StackBlitz builder would
not specify a file, thus falling back on StackBlitz's default behavior.
This was not great, because the default behavior may change unexpectedly
is the future to something that is less useful for our users.

This commit change StackBlitz builder to always specify a primary file.
If no file is specified in `stackblitz.json`, the builder will look
for the first file that exists in the example from a list of predefined
files.

Partially addresses #22357.

PR Close #34553
2020-01-22 13:45:23 -08:00
Sonu Kapoor 77c53559d0 build(docs-infra): specify more relevant landing files for StackBlitz projects (#34553)
The StackBlitz API (which we use to generate StackBlitz projects on the
fly, when a user clicks on a live example link in the docs) allows
specifying the file to open in the editor by passing a query param. If
no file is specified, StackBlitz opens a default one.

This commit specifies relevant landing files for some of the examples to
make it easier to engage with the examples more quickly, and to see what
the example is attempting to demonstrate.

Fixes #22357.

PR Close #34553
2020-01-22 13:45:23 -08:00
Judy Bogart 13ce3756c2 docs: add differential loading term to glossary (#34884)
PR Close #34884
2020-01-22 13:37:35 -08:00
ajitsinghkaler 61ad50d40a docs: add message on click of hero in toh-4 (#34496)
First we used a messages array to display messages toh-4 but it dsplayed only one message added additional messages on click of a hero

Fixes #28739

PR Close #34496
2020-01-22 14:42:55 -05:00
Sonu Kapoor e7cf37d99f docs: clarify where the `async` utility function is coming from (#34876)
inside the `beforeEach` for out testing guide.

Fixes #34833

PR Close #34876
2020-01-22 14:40:17 -05:00
George Kalpakas 2954a14c3d ci(docs-infra): do not output build progress for e2e tests on CI (#34840)
When running the e2e tests on CI, it is desirable that the build
progress is not logged, because that clutters the logs and makes it
difficult to get to the useful info in case of failures.

The previous config to achieve that doesn't work any more.

This commit update the `ci` configuration for e2e tests to suppress
build progress logging.

PR Close #34840
2020-01-22 14:37:32 -05:00
Kapunahele Wong a3b2d6735a build(docs-infra): add auto-link-filter for generic words (#34835)
Fixes #34794

PR Close #34835
2020-01-21 15:08:01 -05:00
Sonu Kapoor def4127bf1 fix(docs-infra): convert hard-coded `comparing-observables` examples into a proper mini-app (#34327)
Previously, the examples in the `comparing-observables` guide were hard-coded.
This made it impossible to test them and verify they are correct.

This commit fixes this by converting them into a proper mini-app. In a
subsequent commit, tests will be added to verify that the source code
works as expected (and guard against regressions).

Fixes #31024

PR Close #34327
2020-01-21 13:14:46 -05:00
Sonu Kapoor 15ae924035 fix(docs-infra): convert hard-coded `cli-builder` examples into a proper mini-app (#34362)
Previously, the examples in the `cli-builder` guide were hard-coded.
This made it impossible to test them and verify they are correct.

This commit fixes this by converting them into a proper mini-app. In a
subsequent commit, tests will be added to verify that the source code
works as expected (and guard against regressions).

Fixes #34314

PR Close #34362
2020-01-21 13:12:18 -05:00
Kristina Gocheva b04c3cce09 docs: fix logging upon search in example tutorial (#34806)
When no errors are thrown but empty array is returned we should log different message.

PR Close #34806
2020-01-21 13:08:15 -05:00
ajitsinghkaler fae5c521d8 docs: change docs for get request return object type checking (#34845)
earlier in the docs it was told that adding typescript's type checking make json response typed so changed docs to say that it adds all typescipt capabilities during compile time

Fixes #34746

PR Close #34845
2020-01-21 13:03:31 -05:00
ajitsinghkaler 4dbc871169 docs(core): fix typo in dependency injection guide (interactive --> interacting) (#34853)
Fixes #34852

PR Close #34853
2020-01-21 13:03:04 -05:00
ajitsinghkaler 2694a3b734 docs(core): add missing quote in dependency injection provider guide (#34854)
Add closing double quote in HTML `class` attribute in dependency
injection provider guide.

Fixes #34851

PR Close #34854
2020-01-21 13:02:29 -05:00
Filipe Silva 27b9eb5e38 build: use CLI rc.8 (#34788)
PR Close #34788
2020-01-17 13:42:41 -05:00
Pete Bacon Darwin 3102dc8344 docs: do not add auto-code-links to observables example (#34797)
Fixes #34793

PR Close #34797
2020-01-16 12:06:25 -05:00
Filipe Silva dcdaa921d8 build(docs-infra): use typescript 3.7 (#33717)
PR Close #33717
2020-01-14 16:42:22 -08:00
Filipe Silva f5a4de7428 test(docs-infra): compile only app for examples with no e2e (#33717)
With TS 3.7, these examples were running into the error below (e.g. on https://circleci.com/gh/angular/angular/574906#tests/containers/0):

```
============== AIO example output for: /home/circleci/ng/aio/content/examples/observables/
running: yarn tsc --project ./
$ /home/circleci/ng/aio/content/examples/observables/node_modules/.bin/tsc --project ./
../../../tools/examples/shared/node_modules/protractor/built/index.d.ts(5,10): error TS2440: Import declaration conflicts with local declaration of 'PluginConfig'.
../../../tools/examples/shared/node_modules/protractor/built/index.d.ts(5,24): error TS2440: Import declaration conflicts with local declaration of 'ProtractorPlugin'.
error Command failed with exit code 2.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
completed: yarn tsc --project ./
```

This happened because of https://github.com/angular/protractor/issues/5348.

It's unclear why this typings problem does not affect `ng e2e` runs, and only affects `tsc` runs.

For now it seems sensible to alter the tests to compile only the app and not the e2e, since the intent of 2cc954d5a5 was never to verify the correctness of the e2e in the first place.

We still need a release of protractor that supports TS 3.7 though, but at least it doesn't seem to block our update proper.

PR Close #33717
2020-01-14 16:42:22 -08:00
George Kalpakas d863526ca9 docs: replace non-breaking with regular spaces in `resources.json` (#34772)
By using non-breaking spaces, the description of Amexio UI components
was overflowing its container in the "Resources" page.

PR Close #34772
2020-01-14 13:33:25 -08:00
GavinMK ec147bd839 docs: remove old contributors (#34486)
PR Close #34486
2020-01-14 10:28:24 -08:00
GavinMK fa63c2160c docs: update Alex Eagle and Wassim Chegham collaborator status (#34486)
PR Close #34486
2020-01-14 10:28:23 -08:00
GavinMK b188b8c3ba docs: add Manu Murthy to Angular team (#34486)
PR Close #34486
2020-01-14 10:28:23 -08:00
GavinMK 3fada8d100 docs: add Andrew Scott to Angular team (#34486)
PR Close #34486
2020-01-14 10:28:23 -08:00
GavinMK 475d07c72b docs: add Jules Kremer to Angular team (#34486)
PR Close #34486
2020-01-14 10:28:23 -08:00
Pete Bacon Darwin 58f10026c4 docs: add deprecation info about default currency code (#32584)
In v10 the default currency code will be taken from the
current locale, rather than simply defaulting to `USD`.

PR Close #32584
2020-01-13 09:57:06 -08:00
ajitsinghkaler ebcd59ae4f docs: replace from class hero to interface with accordance with # 344022 (#34294)
Fixes #21186

PR Close #34294
2020-01-13 07:25:19 -08:00
Adam 55037d1107 build: bump year (#34651)
PR Close #34651
2020-01-13 07:21:43 -08:00
mikef afc88074cd docs: correct full stop position in providers section (#34712)
Correct the position of the full stop at the end of the limiting provider scope with components paragraph.

PR Close #34712
2020-01-13 07:20:24 -08:00
George Kalpakas 0b9c4245f9 refactor(docs-infra): simplify Firebase redirect config (#34726)
This simplifies the Firebase redirect config, removing a redundant
pattern (`/api/http`) which is covered by the previous pattern and
dropping an unused named captured segment (`:rest*`).

This change does not affect the redirection behavior for the deployed
apps, but allows the Firebase hosting emulator to work correctly.
(See [here][1] for more info.)

NOTE: Although we are not currently using the Firebase emulator for
      development/testing, we might want to use it in the future.

[1]: https://github.com/firebase/superstatic/issues/231#issuecomment-573034515

PR Close #34726
2020-01-13 07:19:29 -08:00
ajitsinghkaler f6dee72a88 docs: add note that when ngOnInit not used (#34619)
In some examples ngOnInit was missing added note to tell when it is missing.

Fixes #34562

PR Close #34619
2020-01-10 14:40:52 -08:00
Judy Bogart 475ffd67f5 docs: move ngcc def from page to glossary (#34196)
PR Close #34196
2020-01-10 08:38:53 -08:00
Judy Bogart efdf347f9c docs: apply standard header case convention (#34196)
PR Close #34196
2020-01-10 08:38:53 -08:00
George Kalpakas b3441eea4c ci(docs-infra): do not deploy Firebase Realtime Database rules (#34696)
Currently, the angular.io projects do not use Firebase's Realtime
Database and therefore we only need to configure and deploy changes for
`hosting`.

This commit removes the unused Realtime Database related configs and
files.

PR Close #34696
2020-01-10 08:22:38 -08:00
Kara Erickson 9c5510b28e docs(ivy): document breaking change with <select> and binding order (#34709)
Closes #34470

PR Close #34709
2020-01-09 15:13:56 -08:00
Do Nhu Vy 97c3e9d59f docs: Change screenshot to new Angular 9 app UI (#33998)
PR Close #33998
2020-01-09 13:45:11 -08:00
arturovt 99cc7cdc15 docs: fix non-working example in the `Observables` section (#34705)
PR Close #34705
2020-01-09 13:27:15 -08:00
Sam Julien 0083443050 docs: add note on importing AppRoutingModule (#34710)
Fixes #21207

PR Close #34710
2020-01-09 13:26:42 -08:00
Kara Erickson 9f65b787d0 docs: deprecate undecorated base classes that use Angular features (#34668)
PR Close #34668
2020-01-08 15:08:53 -08:00
ghiscoding efbb147f65 docs: add Angular-Slickgrid library to the list of resources (#34656)
PR Close #34656
2020-01-08 15:06:44 -08:00
Sonu Kapoor 02baaa4813 docs: clarifies how the service is injected (#34638)
There was some confusion about how the service will be injected in the sentence with the `new` keyword. This PR should hopefully clear the confusion.

Fixes #34612

PR Close #34638
2020-01-08 15:06:09 -08:00
dependabot[bot] 8942b7106d build(docs-infra): bump handlebars from 4.0.12 to 4.5.3 in /aio/tools/examples/shared (#34585)
Bumps [handlebars](https://github.com/wycats/handlebars.js) from 4.0.12 to 4.5.3.
- [Release notes](https://github.com/wycats/handlebars.js/releases)
- [Changelog](https://github.com/wycats/handlebars.js/blob/master/release-notes.md)
- [Commits](https://github.com/wycats/handlebars.js/compare/v4.0.12...v4.5.3)

Signed-off-by: dependabot[bot] <support@github.com>

PR Close #34585
2020-01-08 15:03:12 -08:00
dependabot[bot] bcf55b0b4c build(docs-infra): bump handlebars from 4.1.2 to 4.5.3 in /aio (#34583)
Bumps [handlebars](https://github.com/wycats/handlebars.js) from 4.1.2 to 4.5.3.
- [Release notes](https://github.com/wycats/handlebars.js/releases)
- [Changelog](https://github.com/wycats/handlebars.js/blob/master/release-notes.md)
- [Commits](https://github.com/wycats/handlebars.js/compare/v4.1.2...v4.5.3)

Signed-off-by: dependabot[bot] <support@github.com>

PR Close #34583
2020-01-08 15:02:42 -08:00
George Kalpakas 39bf104a03 build: update `firebase-tools` to the latest version (#34682)
This fixes `Server Error. certificate has expired` errors that cause AIO
deployment to fail.
(Example CI failure: https://circleci.com/gh/angular/angular/578227)

PR Close #34682
2020-01-08 13:21:35 -08:00
Alex Rickabaugh b3398eee61 build: update firebase-tools to the latest version (#34667)
This should fix an expired certificate that is breaking AIO deployment jobs
on CircleCI.

PR Close #34667
2020-01-08 10:02:20 -08:00
Alan Agius 8f389361ec docs: replace lazy loading import syntax parameter name (#34599)
We replace `mod` with `m` to be in line with what the CLI generates.

PR Close #34599
2020-01-07 10:44:12 -08:00