From 5498a3578972cd00a58322f8fd3698d33bef87cd Mon Sep 17 00:00:00 2001 From: Dario Piotrowicz Date: Thu, 23 Dec 2021 11:28:40 +0100 Subject: [PATCH] refactor(docs-infra): fix template eslint issues in aio examples (#44557) the aio examples have various eslint issues regarding template rules, those are currently turned off and TODO comments have been added to them in the examples eslintrc, fix such issues and remove the respective TODO comments this also includes examples refactoring to use buttons for better accessibility, this change tries to make the smallest amound of changes to the examples' behaviors and designs/UI PR Close #44557 --- aio/content/examples/.eslintrc.json | 8 +-- .../src/app/app.component.html | 2 +- .../src/app/movie-list.component.html | 1 + .../src/app/hero-list-auto.component.html | 10 +-- .../app/hero-list-enter-leave.component.ts | 8 +-- .../src/app/hero-list-groups.component.ts | 13 ++-- .../src/app/hero-list-page.component.css | 65 ++++++++++++++----- .../src/app/hero-list-page.component.html | 2 +- .../src/app/hero-list.component.1.html | 5 +- .../src/app/hero-list.component.html | 6 +- .../architecture/src/assets/architecture.css | 14 +++- .../src/app/app.component.css | 61 +++++++++++------ .../src/app/app.component.html | 16 +++-- .../event-binding/src/app/app.component.html | 5 ++ .../item-detail/item-detail.component.html | 2 +- .../e2e/src/app.e2e-spec.ts | 2 +- .../src/app/hero-tax-return.component.html | 4 +- .../src/app/heroes-list.component.ts | 12 +++- .../http/src/app/heroes/heroes.component.css | 23 ++++--- .../http/src/app/heroes/heroes.component.html | 4 +- .../i18n/doc-files/app.component.html | 4 +- .../examples/i18n/src/app/app.component.html | 2 +- .../interpolation/src/app/app.component.html | 4 +- .../src/app/app.component.html | 24 +++---- .../src/app/do-check-parent.component.html | 2 +- .../observables-in-angular/src/main.ts | 2 +- .../examples/pipes/src/app/app.component.html | 36 ++++------ .../src/app/app.component.html | 6 +- .../reactive-forms/e2e/src/app.e2e-spec.ts | 10 +-- .../reactive-forms/src/app/app.component.css | 3 +- .../reactive-forms/src/app/app.component.html | 4 +- .../admin-dashboard.component.2.html | 5 -- .../admin-dashboard.component.html | 2 +- .../src/app/app.component.ts | 6 +- .../src/05-04/app/heroes/heroes.component.css | 48 ++++++++++++-- .../05-04/app/heroes/heroes.component.html | 7 +- .../src/app/app.component.html | 32 +++++---- .../src/app/hero-detail.component.ts | 4 +- .../src/app/sizer.component.ts | 2 +- .../dashboard/dashboard-hero.component.css | 1 + .../app/dashboard/dashboard-hero.component.ts | 4 +- .../examples/testing/src/app/demo/demo.ts | 2 +- .../src/app/hero/hero-detail.component.html | 2 +- .../src/app/hero/hero-list.component.css | 61 ++++++++++------- .../src/app/hero/hero-list.component.html | 9 +-- .../src/app/hero/hero-list.component.spec.ts | 8 +-- .../examples/toh-pt2/e2e/src/app.e2e-spec.ts | 10 +-- .../src/app/heroes/heroes.component.1.html | 3 +- .../src/app/heroes/heroes.component.css | 39 +++++++---- .../src/app/heroes/heroes.component.html | 11 ++-- .../examples/toh-pt3/e2e/src/app.e2e-spec.ts | 10 +-- .../src/app/heroes/heroes.component.css | 38 ++++++++--- .../src/app/heroes/heroes.component.html | 9 +-- .../examples/toh-pt4/e2e/src/app.e2e-spec.ts | 8 +-- .../src/app/heroes/heroes.component.css | 36 ++++++---- .../src/app/heroes/heroes.component.html | 9 +-- .../src/app/heroes/heroes.component.css | 2 +- .../src/app/heroes/heroes.component.css | 3 +- .../two-way-binding/e2e/src/app.e2e-spec.ts | 8 +-- .../src/app/sizer/sizer.component.html | 2 +- .../universal/e2e/src/app.e2e-spec.ts | 5 +- .../src/app/heroes/heroes.component.css | 9 ++- .../app/downgrade-io/hero-detail.component.ts | 2 +- .../downgrade-static/hero-detail.component.ts | 2 +- .../phone-detail/phone-detail.template.html | 4 +- .../phone-detail/phone-detail.template.html | 9 +-- .../phone-detail/phone-detail.template.html | 9 +-- aio/content/guide/architecture-components.md | 6 +- aio/content/guide/binding-syntax.md | 2 +- aio/content/tutorial/toh-pt2.md | 19 ++++-- 70 files changed, 501 insertions(+), 307 deletions(-) delete mode 100644 aio/content/examples/router/src/app/admin/admin-dashboard/admin-dashboard.component.2.html diff --git a/aio/content/examples/.eslintrc.json b/aio/content/examples/.eslintrc.json index b1b25254dc0..e77999f90ac 100644 --- a/aio/content/examples/.eslintrc.json +++ b/aio/content/examples/.eslintrc.json @@ -13,12 +13,12 @@ "plugin:@angular-eslint/template/recommended" ], "rules": { - "@angular-eslint/template/accessibility-alt-text": "off", // TODO: Fix the code violating this rule and enable it. - "@angular-eslint/template/accessibility-elements-content": "off", // TODO: Fix the code violating this rule and enable it. - "@angular-eslint/template/accessibility-label-has-associated-control": "off", // TODO: Fix the code violating this rule and enable it. + "@angular-eslint/template/accessibility-alt-text": "error", + "@angular-eslint/template/accessibility-elements-content": "error", + "@angular-eslint/template/accessibility-label-has-associated-control": "error", "@angular-eslint/template/accessibility-table-scope": "error", "@angular-eslint/template/accessibility-valid-aria": "error", - "@angular-eslint/template/click-events-have-key-events": "off", // TODO: Fix the code violating this rule and enable it. + "@angular-eslint/template/click-events-have-key-events": "error", "@angular-eslint/template/eqeqeq": "off", "@angular-eslint/template/mouse-events-have-key-events": "error", "@angular-eslint/template/no-autofocus": "error", diff --git a/aio/content/examples/ajs-quick-reference/src/app/app.component.html b/aio/content/examples/ajs-quick-reference/src/app/app.component.html index 82eaf9339b2..25f5c72ecf2 100644 --- a/aio/content/examples/ajs-quick-reference/src/app/app.component.html +++ b/aio/content/examples/ajs-quick-reference/src/app/app.component.html @@ -51,7 +51,7 @@

- +
diff --git a/aio/content/examples/ajs-quick-reference/src/app/movie-list.component.html b/aio/content/examples/ajs-quick-reference/src/app/movie-list.component.html index e1ee6d62c5a..e7d736eba0c 100644 --- a/aio/content/examples/ajs-quick-reference/src/app/movie-list.component.html +++ b/aio/content/examples/ajs-quick-reference/src/app/movie-list.component.html @@ -61,6 +61,7 @@ [style.height.px]="50" [style.margin.px]="2" [src]="movie.imageurl" + [alt]="movie.title" [title]="movie.title"> {{movie.title}} diff --git a/aio/content/examples/animations/src/app/hero-list-auto.component.html b/aio/content/examples/animations/src/app/hero-list-auto.component.html index bb99794f0c0..72624e54858 100644 --- a/aio/content/examples/animations/src/app/hero-list-auto.component.html +++ b/aio/content/examples/animations/src/app/hero-list-auto.component.html @@ -1,9 +1,9 @@ \ No newline at end of file + diff --git a/aio/content/examples/animations/src/app/hero-list-enter-leave.component.ts b/aio/content/examples/animations/src/app/hero-list-enter-leave.component.ts index 769bb6db303..a867c5edb90 100644 --- a/aio/content/examples/animations/src/app/hero-list-enter-leave.component.ts +++ b/aio/content/examples/animations/src/app/hero-list-enter-leave.component.ts @@ -19,11 +19,11 @@ import { Hero } from './hero'; template: ` `, diff --git a/aio/content/examples/animations/src/app/hero-list-groups.component.ts b/aio/content/examples/animations/src/app/hero-list-groups.component.ts index a07cd813208..f08e2fa7da5 100644 --- a/aio/content/examples/animations/src/app/hero-list-groups.component.ts +++ b/aio/content/examples/animations/src/app/hero-list-groups.component.ts @@ -19,12 +19,11 @@ import { Hero } from './hero'; selector: 'app-hero-list-groups', template: ` `, @@ -33,7 +32,7 @@ import { Hero } from './hero'; animations: [ trigger('flyInOut', [ state('in', style({ - width: 120, + width: '*', transform: 'translateX(0)', opacity: 1 })), transition(':enter', [ @@ -41,7 +40,7 @@ import { Hero } from './hero'; group([ animate('0.3s 0.1s ease', style({ transform: 'translateX(0)', - width: 120 + width: '*' })), animate('0.3s ease', style({ opacity: 1 diff --git a/aio/content/examples/animations/src/app/hero-list-page.component.css b/aio/content/examples/animations/src/app/hero-list-page.component.css index 3a3e603cbce..d06d58bf148 100644 --- a/aio/content/examples/animations/src/app/hero-list-page.component.css +++ b/aio/content/examples/animations/src/app/hero-list-page.component.css @@ -1,25 +1,56 @@ .heroes { + margin: 0 0 2em 0; list-style-type: none; padding: 0; + width: 15em; } .heroes li { - overflow:hidden; - margin: .5em 0; + display: flex; + align-items: center; + width: 100%; + overflow: hidden; } -.heroes li > .inner { - cursor: pointer; +.heroes .inner { + flex: 1; background-color: #EEE; - padding: .3rem 0; - height: 1.6rem; + margin: .5em; + padding: 0; border-radius: 4px; + display: flex; + align-items: stretch; } -.heroes li:hover > .inner { - color: black; - background-color: #DDD; - transform: translateX(.1em); +.heroes button.inner { + cursor: pointer; + font-size: inherit; +} + +.heroes button.inner:hover { + color: #2c3a41; + background-color: #e6e6e6; + left: .1em; +} + +.heroes button.inner:active { + background-color: #525252; + color: #fafafa; +} + +.heroes button.inner.selected { + background-color: black; + color: white; +} + +.heroes button.inner.selected:hover { + background-color: #505050; + color: white; +} + +.heroes button.inner.selected:active { + background-color: black; + color: white; } .heroes .badge { @@ -27,17 +58,17 @@ font-size: small; color: white; padding: 0.8em 0.7em 0 0.7em; - background-color: #3d5157; - position: relative; - left: -1px; - top: -4px; - height: 1.8em; - min-width: 16px; - text-align: right; + background-color: #405061; + line-height: 1em; margin-right: .8em; border-radius: 4px 0 0 4px; } +.heroes .name { + min-width: max-content; + padding: 0.5rem 0; +} + label { display: block; padding-bottom: .5rem; diff --git a/aio/content/examples/animations/src/app/hero-list-page.component.html b/aio/content/examples/animations/src/app/hero-list-page.component.html index d8b718e597e..b6b2af8e426 100644 --- a/aio/content/examples/animations/src/app/hero-list-page.component.html +++ b/aio/content/examples/animations/src/app/hero-list-page.component.html @@ -11,7 +11,7 @@
  • {{ hero.id }} - {{ hero.name }} + {{ hero.name }}
  • diff --git a/aio/content/examples/architecture/src/app/hero-list.component.1.html b/aio/content/examples/architecture/src/app/hero-list.component.1.html index 9533a287bc7..dd62ae56cdb 100644 --- a/aio/content/examples/architecture/src/app/hero-list.component.1.html +++ b/aio/content/examples/architecture/src/app/hero-list.component.1.html @@ -1,7 +1,8 @@ -
  • {{hero.name}}
  • -
  • + diff --git a/aio/content/examples/architecture/src/app/hero-list.component.html b/aio/content/examples/architecture/src/app/hero-list.component.html index a14717ca7f6..e673ba18a8b 100644 --- a/aio/content/examples/architecture/src/app/hero-list.component.html +++ b/aio/content/examples/architecture/src/app/hero-list.component.html @@ -3,8 +3,10 @@

    Select a hero from the list to see details.

    diff --git a/aio/content/examples/architecture/src/assets/architecture.css b/aio/content/examples/architecture/src/assets/architecture.css index 8fd83cfd935..9e8651ad075 100644 --- a/aio/content/examples/architecture/src/assets/architecture.css +++ b/aio/content/examples/architecture/src/assets/architecture.css @@ -4,13 +4,21 @@ ul { li { list-style-type: none; - padding: 1rem; - background-color: aliceblue; border: 1px solid #444; margin-bottom: .5rem; + display: flex; } -li:hover { +li button { + background-color: aliceblue; + flex: 1; + padding: 1rem; + margin: 0; + text-align: left; + border-radius: 0; +} + +li button:hover, li button:active { background-color: #444; color: white; cursor: pointer; diff --git a/aio/content/examples/docs-style-guide/src/app/app.component.css b/aio/content/examples/docs-style-guide/src/app/app.component.css index cc999f8458a..64a67e026fa 100644 --- a/aio/content/examples/docs-style-guide/src/app/app.component.css +++ b/aio/content/examples/docs-style-guide/src/app/app.component.css @@ -7,45 +7,68 @@ } /* #enddocregion heroes */ +.heroes { + margin: 0 0 2em 0; + list-style-type: none; + padding: 0; + width: 15em; +} .heroes li { + display: flex; +} + +.heroes button { + flex: 1; cursor: pointer; position: relative; left: 0; background-color: #EEE; margin: .5em; - padding: .3em 0; + padding: 0; height: 1.6em; border-radius: 4px; + display: flex; + align-items: stretch; + height: 1.8em; } -.heroes li.selected:hover { - background-color: #BBD8DC !important; - color: white; -} -.heroes li:hover { - color: #607D8B; - background-color: #DDD; + +.heroes button:hover { + color: #2c3a41; + background-color: #e6e6e6; left: .1em; } -.heroes .text { - position: relative; - top: -3px; + +.heroes button:active { + background-color: #525252; + color: #fafafa; } + +.heroes button.selected { + background-color: black; + color: white; +} + +.heroes button.selected:hover { + background-color: #505050; + color: white; +} + +.heroes button.selected:active { + background-color: black; + color: white; +} + .heroes .badge { display: inline-block; font-size: small; color: white; padding: 0.8em 0.7em 0 0.7em; - background-color: #607D8B; + background-color: #405061; line-height: 1em; - position: relative; - left: -1px; - top: -4px; - height: 1.8em; margin-right: .8em; border-radius: 4px 0 0 4px; } -.selected { - background-color: #CFD8DC !important; - color: white; +.heroes .name { + align-self: center; } diff --git a/aio/content/examples/docs-style-guide/src/app/app.component.html b/aio/content/examples/docs-style-guide/src/app/app.component.html index 9a96640214c..c0ca206e5cd 100644 --- a/aio/content/examples/docs-style-guide/src/app/app.component.html +++ b/aio/content/examples/docs-style-guide/src/app/app.component.html @@ -1,17 +1,19 @@

    {{title}}

    My Heroes

    {{selectedHero.name}} details!

    -
    {{selectedHero.id}}
    +
    id: {{selectedHero.id}}
    - - +
    diff --git a/aio/content/examples/event-binding/src/app/app.component.html b/aio/content/examples/event-binding/src/app/app.component.html index f5387f6f2ab..c9b4f6a9235 100644 --- a/aio/content/examples/event-binding/src/app/app.component.html +++ b/aio/content/examples/event-binding/src/app/app.component.html @@ -34,6 +34,9 @@

    Click to see event target class:

    + + +
    Click me (parent)
    Click me too! (child)
    @@ -47,3 +50,5 @@
    + + diff --git a/aio/content/examples/event-binding/src/app/item-detail/item-detail.component.html b/aio/content/examples/event-binding/src/app/item-detail/item-detail.component.html index 0cd2c197207..314d4a902c0 100644 --- a/aio/content/examples/event-binding/src/app/item-detail/item-detail.component.html +++ b/aio/content/examples/event-binding/src/app/item-detail/item-detail.component.html @@ -1,7 +1,7 @@

    This is the ItemDetailComponent

    - + {{item.name}} {{ item.name }} diff --git a/aio/content/examples/hierarchical-dependency-injection/e2e/src/app.e2e-spec.ts b/aio/content/examples/hierarchical-dependency-injection/e2e/src/app.e2e-spec.ts index 438adeb81b7..ccf31b92f7d 100644 --- a/aio/content/examples/hierarchical-dependency-injection/e2e/src/app.e2e-spec.ts +++ b/aio/content/examples/hierarchical-dependency-injection/e2e/src/app.e2e-spec.ts @@ -10,7 +10,7 @@ describe('Hierarchical dependency injection', () => { income: '', // queries - heroEl: element.all(by.css('app-heroes-list li')).get(0), // first hero + heroEl: element.all(by.css('app-heroes-list li button')).get(0), // first hero heroCardEl: element(by.css('app-heroes-list app-hero-tax-return')), // first hero tax-return taxReturnNameEl: element.all(by.css('app-heroes-list app-hero-tax-return #name')).get(0), incomeInputEl: element.all(by.css('app-heroes-list app-hero-tax-return input')).get(0), diff --git a/aio/content/examples/hierarchical-dependency-injection/src/app/hero-tax-return.component.html b/aio/content/examples/hierarchical-dependency-injection/src/app/hero-tax-return.component.html index ebf2dcbaaa7..50bbff9ab46 100644 --- a/aio/content/examples/hierarchical-dependency-injection/src/app/hero-tax-return.component.html +++ b/aio/content/examples/hierarchical-dependency-injection/src/app/hero-tax-return.component.html @@ -2,7 +2,7 @@
    {{message}}
    {{taxReturn.name}} - + TID: {{taxReturn.tid}}
    - + Tax: {{taxReturn.tax}}
    diff --git a/aio/content/examples/hierarchical-dependency-injection/src/app/heroes-list.component.ts b/aio/content/examples/hierarchical-dependency-injection/src/app/heroes-list.component.ts index 093e8a0dac7..1a0f852b9a3 100644 --- a/aio/content/examples/hierarchical-dependency-injection/src/app/heroes-list.component.ts +++ b/aio/content/examples/hierarchical-dependency-injection/src/app/heroes-list.component.ts @@ -11,8 +11,8 @@ import { HeroesService } from './heroes.service';

    Hero Tax Returns

      -
    • {{hero.name}} +
    • +
    `, - styles: [ 'li {cursor: pointer;}' ] + styles: [` + li button { + font-size: inherit; + margin: 0.3rem; + padding: 0.5rem; + } + `] }) export class HeroesListComponent { heroes: Observable; diff --git a/aio/content/examples/http/src/app/heroes/heroes.component.css b/aio/content/examples/http/src/app/heroes/heroes.component.css index a728e26746f..d5a402a0397 100644 --- a/aio/content/examples/http/src/app/heroes/heroes.component.css +++ b/aio/content/examples/http/src/app/heroes/heroes.component.css @@ -9,21 +9,20 @@ } .heroes li { - position: relative; + display: flex; + width: 100%; } .heroes li:hover { left: .1em; } -.heroes a { +.heroes button.delete { color: black; display: block; font-size: 1.2rem; background-color: #eee; - margin: .5em 0; - padding: .5em 0; - border-radius: 4px; + border-radius: 0 4px 4px 0; } .heroes a:hover { @@ -40,8 +39,18 @@ border-radius: 4px 0 0 4px; } +.heroes button.edit { + flex: 1; + text-align: left; + padding: 0; + margin-right: 0; + display: flex; + align-items: center; + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + button.delete { - position: absolute; right: -8px; top: 5px; background-color: gray; @@ -53,6 +62,4 @@ button.delete { .heroes input { max-width: 12rem; padding: .25rem; - position: absolute; - top: 8px; } diff --git a/aio/content/examples/http/src/app/heroes/heroes.component.html b/aio/content/examples/http/src/app/heroes/heroes.component.html index bc470badae7..4d7d602e032 100644 --- a/aio/content/examples/http/src/app/heroes/heroes.component.html +++ b/aio/content/examples/http/src/app/heroes/heroes.component.html @@ -14,7 +14,7 @@
    • - +
    • diff --git a/aio/content/examples/i18n/doc-files/app.component.html b/aio/content/examples/i18n/doc-files/app.component.html index 5e7db6b4b26..1e5da1744cc 100644 --- a/aio/content/examples/i18n/doc-files/app.component.html +++ b/aio/content/examples/i18n/doc-files/app.component.html @@ -27,11 +27,11 @@ - +Angular logo

      Hello

      Good bye

      - \ No newline at end of file + diff --git a/aio/content/examples/i18n/src/app/app.component.html b/aio/content/examples/i18n/src/app/app.component.html index f7b68a9f761..4ccad73250f 100644 --- a/aio/content/examples/i18n/src/app/app.component.html +++ b/aio/content/examples/i18n/src/app/app.component.html @@ -10,7 +10,7 @@
      - +Angular logo
      diff --git a/aio/content/examples/interpolation/src/app/app.component.html b/aio/content/examples/interpolation/src/app/app.component.html index 4a0ed186f28..f9540c31d2a 100644 --- a/aio/content/examples/interpolation/src/app/app.component.html +++ b/aio/content/examples/interpolation/src/app/app.component.html @@ -11,7 +11,7 @@

      {{title}}

      -
      +
      item

      Evaluating template expressions

      @@ -35,7 +35,7 @@

      Component context, properties of app.component.ts:

      {{recommended}}

      - + item 2
    diff --git a/aio/content/examples/lifecycle-hooks/src/app/app.component.html b/aio/content/examples/lifecycle-hooks/src/app/app.component.html index 93309da4fd9..c0fb2da8ffc 100644 --- a/aio/content/examples/lifecycle-hooks/src/app/app.component.html +++ b/aio/content/examples/lifecycle-hooks/src/app/app.component.html @@ -1,5 +1,4 @@ - -

    Lifecycle Hooks

    +

    Lifecycle Hooks

    Peek-a-boo: (most) lifecycle hooks Spy: directive with OnInit & OnDestroy OnChanges @@ -8,36 +7,29 @@ AfterContentInit & AfterContentChecked Counter: OnChanges + Spy directive - - + back to top
    - - + back to top
    - - + back to top
    - - + back to top
    - - + back to top
    - - + back to top
    - - + back to top diff --git a/aio/content/examples/lifecycle-hooks/src/app/do-check-parent.component.html b/aio/content/examples/lifecycle-hooks/src/app/do-check-parent.component.html index c29c6fb7a79..334c1f83dd8 100644 --- a/aio/content/examples/lifecycle-hooks/src/app/do-check-parent.component.html +++ b/aio/content/examples/lifecycle-hooks/src/app/do-check-parent.component.html @@ -1,5 +1,5 @@

    {{title}}

    -