From 62d16a8968758909b8d27ab0d1d6318691fa58c7 Mon Sep 17 00:00:00 2001 From: Ward Bell Date: Mon, 26 Sep 2016 13:52:57 -0700 Subject: [PATCH 01/11] docs(architecture): remove reference to directives in component metadata (#2481) --- public/docs/ts/latest/guide/architecture.jade | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/public/docs/ts/latest/guide/architecture.jade b/public/docs/ts/latest/guide/architecture.jade index 1d15deffd1..c41f8cb8a2 100644 --- a/public/docs/ts/latest/guide/architecture.jade +++ b/public/docs/ts/latest/guide/architecture.jade @@ -252,7 +252,7 @@ block ts-decorator Here are a few of the possible `@Component` configuration options: :marked - - `moduleId: module.id`: sets the base for module-relative loading of the `templateUrl`. + - `moduleId`: sets the source of the base address (`module.id`) for module-relative URLs such as the `templateUrl`. - `selector`: CSS selector that tells Angular to create and insert an instance of this component where it finds a `` tag in *parent* HTML. @@ -261,11 +261,6 @@ block ts-decorator - `templateUrl`: module-relative address of this component's HTML template, shown [above](#templates). - - `directives`: !{_array} of the components or directives that *this* template requires. - In the last line of `hero-list.component.html`, Angular inserts a `HeroDetailComponent` - in the space indicated by `` tags. - Angular does so only if `HeroDetailComponent` is in this `directives` !{_array}. - - `providers`: !{_array} of **dependency injection providers** for services that the component requires. This is one way to tell Angular that the component's constructor requires a `HeroService` so it can get the list of heroes to display. From 2b7fb868908527ba9fecb2e2c549143694aad363 Mon Sep 17 00:00:00 2001 From: John Papa Date: Tue, 27 Sep 2016 03:58:10 -0400 Subject: [PATCH 02/11] docs(style-guide): remove rc relics and update for ngmodules (#2463) --- public/docs/_examples/style-guide/e2e-spec.ts | 7 - .../style-guide/ts/02-05/app/app.component.ts | 11 + .../ts/{04-14 => 02-05}/app/app.module.ts | 16 +- .../_examples/style-guide/ts/02-05/main.ts | 8 + .../style-guide/ts/02-08/app/app.module.ts | 4 +- .../style-guide/ts/02-08/app/shared/index.ts | 1 + .../app/shared/input-highlight.directive.ts | 10 + .../style-guide/ts/03-01/app/app.component.ts | 2 +- .../exception.service.avoid.ts | 0 .../app/{shared => core}/exception.service.ts | 0 .../ts/03-01/app/{shared => core}/index.ts | 0 .../style-guide/ts/03-01/app/index.ts | 2 +- .../style-guide/ts/03-02/app/app.component.ts | 2 +- .../app/{shared => core}/data.service.ts | 0 .../ts/03-02/app/{shared => core}/index.ts | 0 .../style-guide/ts/03-02/app/index.ts | 2 +- .../style-guide/ts/03-03/app/app.component.ts | 2 +- .../hero-collector.service.avoid.ts | 0 .../hero-collector.service.ts | 0 .../app/{shared => core}/hero.model.avoid.ts | 0 .../03-03/app/{shared => core}/hero.model.ts | 0 .../ts/03-03/app/{shared => core}/index.ts | 0 .../style-guide/ts/03-03/app/index.ts | 2 +- .../style-guide/ts/03-04/app/app.component.ts | 2 +- .../ts/03-04/app/{shared => core}/index.ts | 0 .../{shared => core}/toast.service.avoid.ts | 12 +- .../app/{shared => core}/toast.service.ts | 0 .../style-guide/ts/03-04/app/index.ts | 2 +- .../style-guide/ts/03-06/app/app.component.ts | 2 +- .../app/{shared => core}/exception.service.ts | 0 .../ts/03-06/app/{shared => core}/index.ts | 0 .../app/{shared => core}/spinner/index.ts | 0 .../spinner/spinner.component.ts | 0 .../spinner/spinner.service.ts | 0 .../03-06/app/{shared => core}/toast/index.ts | 0 .../app/core}/toast/toast.component.ts | 0 .../{shared => core}/toast/toast.service.ts | 0 .../app/heroes/shared/hero.service.avoid.ts | 2 +- .../03-06/app/heroes/shared/hero.service.ts | 2 +- .../style-guide/ts/03-06/app/index.ts | 2 +- .../03-06/app/shared/toast/toast.component.ts | 2 +- .../ts/{04-14 => 04-08}/app/app.component.ts | 1 + .../style-guide/ts/04-08/app/app.module.ts | 28 + .../ts/04-08/app/heroes/heroes.component.html | 1 + .../app/heroes/heroes.component.ts | 20 +- .../style-guide/ts/04-10/app/app.component.ts | 3 +- .../style-guide/ts/04-10/app/app.module.ts | 12 +- .../app/heroes/heroes.component.avoid.ts | 26 - .../ts/04-10/app/heroes/heroes.component.html | 7 + .../ts/04-10/app/heroes/heroes.component.ts | 29 +- .../style-guide/ts/04-10/app/shared/config.ts | 6 - .../ts/04-10/app/shared/entity.service.ts | 4 - .../ts/04-10/app/shared/exception.service.ts | 4 - .../filter-text/filter-text.component.ts | 12 +- .../shared/filter-text/filter-text.service.ts | 23 +- .../ts/04-10/app/shared/filter-text/index.ts | 3 - .../style-guide/ts/04-10/app/shared/index.ts | 12 - .../ts/04-10/app/shared/init-caps.pipe.ts | 3 +- .../ts/04-10/app/shared/modal/index.ts | 3 - .../04-10/app/shared/modal/modal.component.ts | 14 - .../04-10/app/shared/modal/modal.service.ts | 6 - .../ts/04-10/app/shared/nav/index.ts | 2 - .../ts/04-10/app/shared/nav/nav.component.ts | 17 - .../ts/04-10/app/shared/shared.module.ts | 32 +- .../ts/04-10/app/shared/spinner/index.ts | 3 - .../app/shared/spinner/spinner.component.ts | 16 - .../app/shared/spinner/spinner.service.ts | 12 - .../ts/04-10/app/shared/toast/index.ts | 3 - .../04-10/app/shared/toast/toast.service.ts | 6 - .../style-guide/ts/04-11/app/app.component.ts | 12 + .../style-guide/ts/04-11/app/app.module.ts | 30 + .../ts/04-11/app/core/core.module.ts | 19 + .../style-guide/ts/04-11/app/core/index.ts | 5 + .../ts/04-11/app/core/logger.service.ts | 13 + .../ts/04-11/app/core/nav/nav.component.css | 63 ++ .../ts/04-11/app/core/nav/nav.component.html | 14 + .../ts/04-11/app/core/nav/nav.component.ts | 20 + .../ts/04-11/app/core/rxjs-extensions.ts | 7 + .../app/core/spinner/spinner.component.css | 21 + .../app/core/spinner/spinner.component.html | 2 + .../app/core/spinner/spinner.component.ts | 36 + .../04-11/app/core/spinner/spinner.service.ts | 24 + .../ts/04-11/app/heroes/heroes.component.html | 12 + .../ts/04-11/app/heroes/heroes.component.ts | 41 + .../style-guide/ts/04-12/app/app.component.ts | 11 + .../style-guide/ts/04-12/app/app.module.ts | 30 + .../ts/04-12/app/core/core.module.ts | 21 + .../style-guide/ts/04-12/app/core/index.ts | 3 + .../ts/04-12/app/core/logger.service.ts | 13 + .../ts/04-12/app/core/module-import-guard.ts | 6 + .../ts/04-12/app/core/nav/nav.component.css | 63 ++ .../ts/04-12/app/core/nav/nav.component.html | 14 + .../ts/04-12/app/core/nav/nav.component.ts | 20 + .../ts/04-12/app/heroes/heroes.component.html | 12 + .../ts/04-12/app/heroes/heroes.component.ts | 33 + .../ts/04-13/app/app.component.avoid.ts | 11 - .../style-guide/ts/04-13/app/heroes/index.ts | 2 - .../ts/04-14/app/heroes/heroes.component.css | 28 - .../ts/04-14/app/heroes/heroes.component.html | 12 - .../style-guide/ts/04-14/app/heroes/index.ts | 2 - .../ts/04-14/app/heroes/shared/hero.model.ts | 5 - .../ts/04-14/app/heroes/shared/index.ts | 1 - .../style-guide/ts/04-14/app/index.ts | 3 - .../style-guide/ts/04-14/app/shared/index.ts | 1 - .../ts/04-14/app/shared/logger.service.ts | 9 - .../style-guide/ts/06-03/app/app.component.ts | 4 +- .../style-guide/ts/06-03/app/app.module.ts | 4 +- .../style-guide/ts/06-03/app/shared/index.ts | 1 + .../app/shared/validator.directive.avoid.ts | 20 - .../06-03/app/shared/validator.directive.ts | 2 - .../06-03/app/shared/validator2.directive.ts | 16 + .../style-guide/ts/app/app.routes.ts | 50 - .../docs/_examples/style-guide/ts/app/main.ts | 11 +- .../style-guide/ts/systemjs.custom.js | 20 +- public/docs/ts/latest/guide/style-guide.jade | 954 ++++++++++++------ public/resources/css/module/_style-guide.scss | 5 + 116 files changed, 1401 insertions(+), 708 deletions(-) create mode 100644 public/docs/_examples/style-guide/ts/02-05/app/app.component.ts rename public/docs/_examples/style-guide/ts/{04-14 => 02-05}/app/app.module.ts (52%) create mode 100644 public/docs/_examples/style-guide/ts/02-05/main.ts create mode 100644 public/docs/_examples/style-guide/ts/02-08/app/shared/input-highlight.directive.ts rename public/docs/_examples/style-guide/ts/03-01/app/{shared => core}/exception.service.avoid.ts (100%) rename public/docs/_examples/style-guide/ts/03-01/app/{shared => core}/exception.service.ts (100%) rename public/docs/_examples/style-guide/ts/03-01/app/{shared => core}/index.ts (100%) rename public/docs/_examples/style-guide/ts/03-02/app/{shared => core}/data.service.ts (100%) rename public/docs/_examples/style-guide/ts/03-02/app/{shared => core}/index.ts (100%) rename public/docs/_examples/style-guide/ts/03-03/app/{shared => core}/hero-collector.service.avoid.ts (100%) rename public/docs/_examples/style-guide/ts/03-03/app/{shared => core}/hero-collector.service.ts (100%) rename public/docs/_examples/style-guide/ts/03-03/app/{shared => core}/hero.model.avoid.ts (100%) rename public/docs/_examples/style-guide/ts/03-03/app/{shared => core}/hero.model.ts (100%) rename public/docs/_examples/style-guide/ts/03-03/app/{shared => core}/index.ts (100%) rename public/docs/_examples/style-guide/ts/03-04/app/{shared => core}/index.ts (100%) rename public/docs/_examples/style-guide/ts/03-04/app/{shared => core}/toast.service.avoid.ts (65%) rename public/docs/_examples/style-guide/ts/03-04/app/{shared => core}/toast.service.ts (100%) rename public/docs/_examples/style-guide/ts/03-06/app/{shared => core}/exception.service.ts (100%) rename public/docs/_examples/style-guide/ts/03-06/app/{shared => core}/index.ts (100%) rename public/docs/_examples/style-guide/ts/03-06/app/{shared => core}/spinner/index.ts (100%) rename public/docs/_examples/style-guide/ts/03-06/app/{shared => core}/spinner/spinner.component.ts (100%) rename public/docs/_examples/style-guide/ts/03-06/app/{shared => core}/spinner/spinner.service.ts (100%) rename public/docs/_examples/style-guide/ts/03-06/app/{shared => core}/toast/index.ts (100%) rename public/docs/_examples/style-guide/ts/{04-10/app/shared => 03-06/app/core}/toast/toast.component.ts (100%) rename public/docs/_examples/style-guide/ts/03-06/app/{shared => core}/toast/toast.service.ts (100%) rename public/docs/_examples/style-guide/ts/{04-14 => 04-08}/app/app.component.ts (91%) create mode 100644 public/docs/_examples/style-guide/ts/04-08/app/app.module.ts create mode 100644 public/docs/_examples/style-guide/ts/04-08/app/heroes/heroes.component.html rename public/docs/_examples/style-guide/ts/{04-14 => 04-08}/app/heroes/heroes.component.ts (54%) delete mode 100644 public/docs/_examples/style-guide/ts/04-10/app/heroes/heroes.component.avoid.ts delete mode 100644 public/docs/_examples/style-guide/ts/04-10/app/shared/config.ts delete mode 100644 public/docs/_examples/style-guide/ts/04-10/app/shared/entity.service.ts delete mode 100644 public/docs/_examples/style-guide/ts/04-10/app/shared/exception.service.ts delete mode 100644 public/docs/_examples/style-guide/ts/04-10/app/shared/filter-text/index.ts delete mode 100644 public/docs/_examples/style-guide/ts/04-10/app/shared/index.ts delete mode 100644 public/docs/_examples/style-guide/ts/04-10/app/shared/modal/index.ts delete mode 100644 public/docs/_examples/style-guide/ts/04-10/app/shared/modal/modal.component.ts delete mode 100644 public/docs/_examples/style-guide/ts/04-10/app/shared/modal/modal.service.ts delete mode 100644 public/docs/_examples/style-guide/ts/04-10/app/shared/nav/index.ts delete mode 100644 public/docs/_examples/style-guide/ts/04-10/app/shared/nav/nav.component.ts delete mode 100644 public/docs/_examples/style-guide/ts/04-10/app/shared/spinner/index.ts delete mode 100644 public/docs/_examples/style-guide/ts/04-10/app/shared/spinner/spinner.component.ts delete mode 100644 public/docs/_examples/style-guide/ts/04-10/app/shared/spinner/spinner.service.ts delete mode 100644 public/docs/_examples/style-guide/ts/04-10/app/shared/toast/index.ts delete mode 100644 public/docs/_examples/style-guide/ts/04-10/app/shared/toast/toast.service.ts create mode 100644 public/docs/_examples/style-guide/ts/04-11/app/app.component.ts create mode 100644 public/docs/_examples/style-guide/ts/04-11/app/app.module.ts create mode 100644 public/docs/_examples/style-guide/ts/04-11/app/core/core.module.ts create mode 100644 public/docs/_examples/style-guide/ts/04-11/app/core/index.ts create mode 100644 public/docs/_examples/style-guide/ts/04-11/app/core/logger.service.ts create mode 100644 public/docs/_examples/style-guide/ts/04-11/app/core/nav/nav.component.css create mode 100644 public/docs/_examples/style-guide/ts/04-11/app/core/nav/nav.component.html create mode 100644 public/docs/_examples/style-guide/ts/04-11/app/core/nav/nav.component.ts create mode 100644 public/docs/_examples/style-guide/ts/04-11/app/core/rxjs-extensions.ts create mode 100644 public/docs/_examples/style-guide/ts/04-11/app/core/spinner/spinner.component.css create mode 100644 public/docs/_examples/style-guide/ts/04-11/app/core/spinner/spinner.component.html create mode 100644 public/docs/_examples/style-guide/ts/04-11/app/core/spinner/spinner.component.ts create mode 100644 public/docs/_examples/style-guide/ts/04-11/app/core/spinner/spinner.service.ts create mode 100644 public/docs/_examples/style-guide/ts/04-11/app/heroes/heroes.component.html create mode 100644 public/docs/_examples/style-guide/ts/04-11/app/heroes/heroes.component.ts create mode 100644 public/docs/_examples/style-guide/ts/04-12/app/app.component.ts create mode 100644 public/docs/_examples/style-guide/ts/04-12/app/app.module.ts create mode 100644 public/docs/_examples/style-guide/ts/04-12/app/core/core.module.ts create mode 100644 public/docs/_examples/style-guide/ts/04-12/app/core/index.ts create mode 100644 public/docs/_examples/style-guide/ts/04-12/app/core/logger.service.ts create mode 100644 public/docs/_examples/style-guide/ts/04-12/app/core/module-import-guard.ts create mode 100644 public/docs/_examples/style-guide/ts/04-12/app/core/nav/nav.component.css create mode 100644 public/docs/_examples/style-guide/ts/04-12/app/core/nav/nav.component.html create mode 100644 public/docs/_examples/style-guide/ts/04-12/app/core/nav/nav.component.ts create mode 100644 public/docs/_examples/style-guide/ts/04-12/app/heroes/heroes.component.html create mode 100644 public/docs/_examples/style-guide/ts/04-12/app/heroes/heroes.component.ts delete mode 100644 public/docs/_examples/style-guide/ts/04-13/app/app.component.avoid.ts delete mode 100644 public/docs/_examples/style-guide/ts/04-13/app/heroes/index.ts delete mode 100644 public/docs/_examples/style-guide/ts/04-14/app/heroes/heroes.component.css delete mode 100644 public/docs/_examples/style-guide/ts/04-14/app/heroes/heroes.component.html delete mode 100644 public/docs/_examples/style-guide/ts/04-14/app/heroes/index.ts delete mode 100644 public/docs/_examples/style-guide/ts/04-14/app/heroes/shared/hero.model.ts delete mode 100644 public/docs/_examples/style-guide/ts/04-14/app/heroes/shared/index.ts delete mode 100644 public/docs/_examples/style-guide/ts/04-14/app/index.ts delete mode 100644 public/docs/_examples/style-guide/ts/04-14/app/shared/index.ts delete mode 100644 public/docs/_examples/style-guide/ts/04-14/app/shared/logger.service.ts delete mode 100644 public/docs/_examples/style-guide/ts/06-03/app/shared/validator.directive.avoid.ts create mode 100644 public/docs/_examples/style-guide/ts/06-03/app/shared/validator2.directive.ts diff --git a/public/docs/_examples/style-guide/e2e-spec.ts b/public/docs/_examples/style-guide/e2e-spec.ts index 8066df6e7b..2809e65e44 100644 --- a/public/docs/_examples/style-guide/e2e-spec.ts +++ b/public/docs/_examples/style-guide/e2e-spec.ts @@ -77,13 +77,6 @@ describe('Style Guide', function () { expect(div.getText()).toBe('This is heroes component'); }); - it('04-14', function () { - browser.get('#/04-14'); - - let h2 = element(by.tagName('sg-app > toh-heroes > div > h2')); - expect(h2.getText()).toBe('My Heroes'); - }); - it('05-02', function () { browser.get('#/05-02'); diff --git a/public/docs/_examples/style-guide/ts/02-05/app/app.component.ts b/public/docs/_examples/style-guide/ts/02-05/app/app.component.ts new file mode 100644 index 0000000000..268a2f940b --- /dev/null +++ b/public/docs/_examples/style-guide/ts/02-05/app/app.component.ts @@ -0,0 +1,11 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + moduleId: module.id, + selector: 'toh-app', + template: ` + Tour of Heroes + ` +}) +export class AppComponent { } diff --git a/public/docs/_examples/style-guide/ts/04-14/app/app.module.ts b/public/docs/_examples/style-guide/ts/02-05/app/app.module.ts similarity index 52% rename from public/docs/_examples/style-guide/ts/04-14/app/app.module.ts rename to public/docs/_examples/style-guide/ts/02-05/app/app.module.ts index a9377ce9d6..306ec125e0 100644 --- a/public/docs/_examples/style-guide/ts/04-14/app/app.module.ts +++ b/public/docs/_examples/style-guide/ts/02-05/app/app.module.ts @@ -1,19 +1,23 @@ +// #docplaster +// #docregion import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { RouterModule } from '@angular/router'; import { AppComponent } from './app.component'; -import { HeroesComponent } from './heroes'; @NgModule({ imports: [ BrowserModule, - RouterModule.forChild([{ path: '04-14', component: AppComponent }]) + // #enddocregion + RouterModule.forChild([{ path: '02-05', component: AppComponent }]) + // #docregion ], declarations: [ - AppComponent, - HeroesComponent + AppComponent ], - exports: [ AppComponent ] + exports: [ AppComponent ], + bootstrap: [ AppComponent ] }) -export class AppModule {} +export class AppModule { } +// #enddocregion diff --git a/public/docs/_examples/style-guide/ts/02-05/main.ts b/public/docs/_examples/style-guide/ts/02-05/main.ts new file mode 100644 index 0000000000..6c32161f84 --- /dev/null +++ b/public/docs/_examples/style-guide/ts/02-05/main.ts @@ -0,0 +1,8 @@ +// #docregion +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule) + .then(success => console.log(`Bootstrap success`)) + .catch(err => console.error(err)); diff --git a/public/docs/_examples/style-guide/ts/02-08/app/app.module.ts b/public/docs/_examples/style-guide/ts/02-08/app/app.module.ts index a86c713d4f..e840cc50a5 100644 --- a/public/docs/_examples/style-guide/ts/02-08/app/app.module.ts +++ b/public/docs/_examples/style-guide/ts/02-08/app/app.module.ts @@ -2,7 +2,8 @@ import { NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; import { AppComponent } from './app.component'; -import { ValidateDirective } from './shared'; +import { InputHighlightDirective, + ValidateDirective } from './shared'; @NgModule({ imports: [ @@ -10,6 +11,7 @@ import { ValidateDirective } from './shared'; ], declarations: [ AppComponent, + InputHighlightDirective, ValidateDirective ], exports: [ AppComponent ] diff --git a/public/docs/_examples/style-guide/ts/02-08/app/shared/index.ts b/public/docs/_examples/style-guide/ts/02-08/app/shared/index.ts index 2534dc7b6d..b844b75492 100644 --- a/public/docs/_examples/style-guide/ts/02-08/app/shared/index.ts +++ b/public/docs/_examples/style-guide/ts/02-08/app/shared/index.ts @@ -1 +1,2 @@ +export * from './input-highlight.directive'; export * from './validate.directive'; diff --git a/public/docs/_examples/style-guide/ts/02-08/app/shared/input-highlight.directive.ts b/public/docs/_examples/style-guide/ts/02-08/app/shared/input-highlight.directive.ts new file mode 100644 index 0000000000..e9033a9627 --- /dev/null +++ b/public/docs/_examples/style-guide/ts/02-08/app/shared/input-highlight.directive.ts @@ -0,0 +1,10 @@ +// #docregion +import { Directive, ElementRef, Renderer } from '@angular/core'; + +@Directive({ selector: 'input'}) +/** Highlight the attached input text element in blue */ +export class InputHighlightDirective { + constructor(renderer: Renderer, el: ElementRef) { + renderer.setElementStyle(el.nativeElement, 'backgroundColor', 'powderblue'); + } +} diff --git a/public/docs/_examples/style-guide/ts/03-01/app/app.component.ts b/public/docs/_examples/style-guide/ts/03-01/app/app.component.ts index 20bedca7d5..cb9479d2d9 100644 --- a/public/docs/_examples/style-guide/ts/03-01/app/app.component.ts +++ b/public/docs/_examples/style-guide/ts/03-01/app/app.component.ts @@ -1,6 +1,6 @@ import { Component, OnInit } from '@angular/core'; -import { ExceptionService } from './shared'; +import { ExceptionService } from './core'; @Component({ selector: 'sg-app', diff --git a/public/docs/_examples/style-guide/ts/03-01/app/shared/exception.service.avoid.ts b/public/docs/_examples/style-guide/ts/03-01/app/core/exception.service.avoid.ts similarity index 100% rename from public/docs/_examples/style-guide/ts/03-01/app/shared/exception.service.avoid.ts rename to public/docs/_examples/style-guide/ts/03-01/app/core/exception.service.avoid.ts diff --git a/public/docs/_examples/style-guide/ts/03-01/app/shared/exception.service.ts b/public/docs/_examples/style-guide/ts/03-01/app/core/exception.service.ts similarity index 100% rename from public/docs/_examples/style-guide/ts/03-01/app/shared/exception.service.ts rename to public/docs/_examples/style-guide/ts/03-01/app/core/exception.service.ts diff --git a/public/docs/_examples/style-guide/ts/03-01/app/shared/index.ts b/public/docs/_examples/style-guide/ts/03-01/app/core/index.ts similarity index 100% rename from public/docs/_examples/style-guide/ts/03-01/app/shared/index.ts rename to public/docs/_examples/style-guide/ts/03-01/app/core/index.ts diff --git a/public/docs/_examples/style-guide/ts/03-01/app/index.ts b/public/docs/_examples/style-guide/ts/03-01/app/index.ts index ebe5c92f03..e120e2dbfd 100644 --- a/public/docs/_examples/style-guide/ts/03-01/app/index.ts +++ b/public/docs/_examples/style-guide/ts/03-01/app/index.ts @@ -1,2 +1,2 @@ -export * from './shared'; +export * from './core'; export * from './app.component'; diff --git a/public/docs/_examples/style-guide/ts/03-02/app/app.component.ts b/public/docs/_examples/style-guide/ts/03-02/app/app.component.ts index cb62984849..132ea54c85 100644 --- a/public/docs/_examples/style-guide/ts/03-02/app/app.component.ts +++ b/public/docs/_examples/style-guide/ts/03-02/app/app.component.ts @@ -1,6 +1,6 @@ import { Component } from '@angular/core'; -import { heroesUrl, mockHeroes, VILLAINS_URL } from './shared'; +import { heroesUrl, mockHeroes, VILLAINS_URL } from './core'; @Component({ selector: 'sg-app', diff --git a/public/docs/_examples/style-guide/ts/03-02/app/shared/data.service.ts b/public/docs/_examples/style-guide/ts/03-02/app/core/data.service.ts similarity index 100% rename from public/docs/_examples/style-guide/ts/03-02/app/shared/data.service.ts rename to public/docs/_examples/style-guide/ts/03-02/app/core/data.service.ts diff --git a/public/docs/_examples/style-guide/ts/03-02/app/shared/index.ts b/public/docs/_examples/style-guide/ts/03-02/app/core/index.ts similarity index 100% rename from public/docs/_examples/style-guide/ts/03-02/app/shared/index.ts rename to public/docs/_examples/style-guide/ts/03-02/app/core/index.ts diff --git a/public/docs/_examples/style-guide/ts/03-02/app/index.ts b/public/docs/_examples/style-guide/ts/03-02/app/index.ts index ebe5c92f03..e120e2dbfd 100644 --- a/public/docs/_examples/style-guide/ts/03-02/app/index.ts +++ b/public/docs/_examples/style-guide/ts/03-02/app/index.ts @@ -1,2 +1,2 @@ -export * from './shared'; +export * from './core'; export * from './app.component'; diff --git a/public/docs/_examples/style-guide/ts/03-03/app/app.component.ts b/public/docs/_examples/style-guide/ts/03-03/app/app.component.ts index 2bab2c3c47..3ca522bc45 100644 --- a/public/docs/_examples/style-guide/ts/03-03/app/app.component.ts +++ b/public/docs/_examples/style-guide/ts/03-03/app/app.component.ts @@ -1,6 +1,6 @@ import { Component, OnInit } from '@angular/core'; -import { Hero, HeroCollectorService } from './shared'; +import { Hero, HeroCollectorService } from './core'; @Component({ selector: 'sg-app', diff --git a/public/docs/_examples/style-guide/ts/03-03/app/shared/hero-collector.service.avoid.ts b/public/docs/_examples/style-guide/ts/03-03/app/core/hero-collector.service.avoid.ts similarity index 100% rename from public/docs/_examples/style-guide/ts/03-03/app/shared/hero-collector.service.avoid.ts rename to public/docs/_examples/style-guide/ts/03-03/app/core/hero-collector.service.avoid.ts diff --git a/public/docs/_examples/style-guide/ts/03-03/app/shared/hero-collector.service.ts b/public/docs/_examples/style-guide/ts/03-03/app/core/hero-collector.service.ts similarity index 100% rename from public/docs/_examples/style-guide/ts/03-03/app/shared/hero-collector.service.ts rename to public/docs/_examples/style-guide/ts/03-03/app/core/hero-collector.service.ts diff --git a/public/docs/_examples/style-guide/ts/03-03/app/shared/hero.model.avoid.ts b/public/docs/_examples/style-guide/ts/03-03/app/core/hero.model.avoid.ts similarity index 100% rename from public/docs/_examples/style-guide/ts/03-03/app/shared/hero.model.avoid.ts rename to public/docs/_examples/style-guide/ts/03-03/app/core/hero.model.avoid.ts diff --git a/public/docs/_examples/style-guide/ts/03-03/app/shared/hero.model.ts b/public/docs/_examples/style-guide/ts/03-03/app/core/hero.model.ts similarity index 100% rename from public/docs/_examples/style-guide/ts/03-03/app/shared/hero.model.ts rename to public/docs/_examples/style-guide/ts/03-03/app/core/hero.model.ts diff --git a/public/docs/_examples/style-guide/ts/03-03/app/shared/index.ts b/public/docs/_examples/style-guide/ts/03-03/app/core/index.ts similarity index 100% rename from public/docs/_examples/style-guide/ts/03-03/app/shared/index.ts rename to public/docs/_examples/style-guide/ts/03-03/app/core/index.ts diff --git a/public/docs/_examples/style-guide/ts/03-03/app/index.ts b/public/docs/_examples/style-guide/ts/03-03/app/index.ts index ebe5c92f03..e120e2dbfd 100644 --- a/public/docs/_examples/style-guide/ts/03-03/app/index.ts +++ b/public/docs/_examples/style-guide/ts/03-03/app/index.ts @@ -1,2 +1,2 @@ -export * from './shared'; +export * from './core'; export * from './app.component'; diff --git a/public/docs/_examples/style-guide/ts/03-04/app/app.component.ts b/public/docs/_examples/style-guide/ts/03-04/app/app.component.ts index d7da5134bc..555c9e9441 100644 --- a/public/docs/_examples/style-guide/ts/03-04/app/app.component.ts +++ b/public/docs/_examples/style-guide/ts/03-04/app/app.component.ts @@ -1,6 +1,6 @@ import { Component, OnInit } from '@angular/core'; -import { ToastService } from './shared'; +import { ToastService } from './core'; @Component({ selector: 'sg-app', diff --git a/public/docs/_examples/style-guide/ts/03-04/app/shared/index.ts b/public/docs/_examples/style-guide/ts/03-04/app/core/index.ts similarity index 100% rename from public/docs/_examples/style-guide/ts/03-04/app/shared/index.ts rename to public/docs/_examples/style-guide/ts/03-04/app/core/index.ts diff --git a/public/docs/_examples/style-guide/ts/03-04/app/shared/toast.service.avoid.ts b/public/docs/_examples/style-guide/ts/03-04/app/core/toast.service.avoid.ts similarity index 65% rename from public/docs/_examples/style-guide/ts/03-04/app/shared/toast.service.avoid.ts rename to public/docs/_examples/style-guide/ts/03-04/app/core/toast.service.avoid.ts index 0f3a7c25ea..e2e21b8e4c 100644 --- a/public/docs/_examples/style-guide/ts/03-04/app/shared/toast.service.avoid.ts +++ b/public/docs/_examples/style-guide/ts/03-04/app/core/toast.service.avoid.ts @@ -8,19 +8,19 @@ import { Injectable } from '@angular/core'; export class ToastService { message: string; - private _toastCount: number; + private toastCount: number; hide() { - this._toastCount--; - this._log(); + this.toastCount--; + this.log(); } show() { - this._toastCount++; - this._log(); + this.toastCount++; + this.log(); } - private _log() { + private log() { console.log(this.message); } } diff --git a/public/docs/_examples/style-guide/ts/03-04/app/shared/toast.service.ts b/public/docs/_examples/style-guide/ts/03-04/app/core/toast.service.ts similarity index 100% rename from public/docs/_examples/style-guide/ts/03-04/app/shared/toast.service.ts rename to public/docs/_examples/style-guide/ts/03-04/app/core/toast.service.ts diff --git a/public/docs/_examples/style-guide/ts/03-04/app/index.ts b/public/docs/_examples/style-guide/ts/03-04/app/index.ts index ebe5c92f03..e120e2dbfd 100644 --- a/public/docs/_examples/style-guide/ts/03-04/app/index.ts +++ b/public/docs/_examples/style-guide/ts/03-04/app/index.ts @@ -1,2 +1,2 @@ -export * from './shared'; +export * from './core'; export * from './app.component'; diff --git a/public/docs/_examples/style-guide/ts/03-06/app/app.component.ts b/public/docs/_examples/style-guide/ts/03-06/app/app.component.ts index 17822c8a3e..0cf424afd7 100644 --- a/public/docs/_examples/style-guide/ts/03-06/app/app.component.ts +++ b/public/docs/_examples/style-guide/ts/03-06/app/app.component.ts @@ -1,7 +1,7 @@ import { Component, OnInit } from '@angular/core'; import { Hero, HeroService } from './heroes'; -import { ExceptionService, SpinnerService, ToastService } from './shared'; +import { ExceptionService, SpinnerService, ToastService } from './core'; @Component({ moduleId: module.id, diff --git a/public/docs/_examples/style-guide/ts/03-06/app/shared/exception.service.ts b/public/docs/_examples/style-guide/ts/03-06/app/core/exception.service.ts similarity index 100% rename from public/docs/_examples/style-guide/ts/03-06/app/shared/exception.service.ts rename to public/docs/_examples/style-guide/ts/03-06/app/core/exception.service.ts diff --git a/public/docs/_examples/style-guide/ts/03-06/app/shared/index.ts b/public/docs/_examples/style-guide/ts/03-06/app/core/index.ts similarity index 100% rename from public/docs/_examples/style-guide/ts/03-06/app/shared/index.ts rename to public/docs/_examples/style-guide/ts/03-06/app/core/index.ts diff --git a/public/docs/_examples/style-guide/ts/03-06/app/shared/spinner/index.ts b/public/docs/_examples/style-guide/ts/03-06/app/core/spinner/index.ts similarity index 100% rename from public/docs/_examples/style-guide/ts/03-06/app/shared/spinner/index.ts rename to public/docs/_examples/style-guide/ts/03-06/app/core/spinner/index.ts diff --git a/public/docs/_examples/style-guide/ts/03-06/app/shared/spinner/spinner.component.ts b/public/docs/_examples/style-guide/ts/03-06/app/core/spinner/spinner.component.ts similarity index 100% rename from public/docs/_examples/style-guide/ts/03-06/app/shared/spinner/spinner.component.ts rename to public/docs/_examples/style-guide/ts/03-06/app/core/spinner/spinner.component.ts diff --git a/public/docs/_examples/style-guide/ts/03-06/app/shared/spinner/spinner.service.ts b/public/docs/_examples/style-guide/ts/03-06/app/core/spinner/spinner.service.ts similarity index 100% rename from public/docs/_examples/style-guide/ts/03-06/app/shared/spinner/spinner.service.ts rename to public/docs/_examples/style-guide/ts/03-06/app/core/spinner/spinner.service.ts diff --git a/public/docs/_examples/style-guide/ts/03-06/app/shared/toast/index.ts b/public/docs/_examples/style-guide/ts/03-06/app/core/toast/index.ts similarity index 100% rename from public/docs/_examples/style-guide/ts/03-06/app/shared/toast/index.ts rename to public/docs/_examples/style-guide/ts/03-06/app/core/toast/index.ts diff --git a/public/docs/_examples/style-guide/ts/04-10/app/shared/toast/toast.component.ts b/public/docs/_examples/style-guide/ts/03-06/app/core/toast/toast.component.ts similarity index 100% rename from public/docs/_examples/style-guide/ts/04-10/app/shared/toast/toast.component.ts rename to public/docs/_examples/style-guide/ts/03-06/app/core/toast/toast.component.ts diff --git a/public/docs/_examples/style-guide/ts/03-06/app/shared/toast/toast.service.ts b/public/docs/_examples/style-guide/ts/03-06/app/core/toast/toast.service.ts similarity index 100% rename from public/docs/_examples/style-guide/ts/03-06/app/shared/toast/toast.service.ts rename to public/docs/_examples/style-guide/ts/03-06/app/core/toast/toast.service.ts diff --git a/public/docs/_examples/style-guide/ts/03-06/app/heroes/shared/hero.service.avoid.ts b/public/docs/_examples/style-guide/ts/03-06/app/heroes/shared/hero.service.avoid.ts index 6c15ba46bd..bb02f3a9ae 100644 --- a/public/docs/_examples/style-guide/ts/03-06/app/heroes/shared/hero.service.avoid.ts +++ b/public/docs/_examples/style-guide/ts/03-06/app/heroes/shared/hero.service.avoid.ts @@ -2,7 +2,7 @@ // #docregion example /* avoid */ -import { ExceptionService, SpinnerService, ToastService } from '../../shared'; +import { ExceptionService, SpinnerService, ToastService } from '../../core'; import { Http, Response } from '@angular/http'; import { Injectable } from '@angular/core'; import { Hero } from './hero.model'; diff --git a/public/docs/_examples/style-guide/ts/03-06/app/heroes/shared/hero.service.ts b/public/docs/_examples/style-guide/ts/03-06/app/heroes/shared/hero.service.ts index 817fdbead1..a1711e0fe4 100644 --- a/public/docs/_examples/style-guide/ts/03-06/app/heroes/shared/hero.service.ts +++ b/public/docs/_examples/style-guide/ts/03-06/app/heroes/shared/hero.service.ts @@ -4,7 +4,7 @@ import { Injectable } from '@angular/core'; import { Http, Response } from '@angular/http'; import { Hero } from './hero.model'; -import { ExceptionService, SpinnerService, ToastService } from '../../shared'; +import { ExceptionService, SpinnerService, ToastService } from '../../core'; // #enddocregion example @Injectable() diff --git a/public/docs/_examples/style-guide/ts/03-06/app/index.ts b/public/docs/_examples/style-guide/ts/03-06/app/index.ts index 251d78ac56..cf861e261a 100644 --- a/public/docs/_examples/style-guide/ts/03-06/app/index.ts +++ b/public/docs/_examples/style-guide/ts/03-06/app/index.ts @@ -1,3 +1,3 @@ export * from './heroes'; -export * from './shared'; +export * from './core'; export * from './app.component'; diff --git a/public/docs/_examples/style-guide/ts/03-06/app/shared/toast/toast.component.ts b/public/docs/_examples/style-guide/ts/03-06/app/shared/toast/toast.component.ts index dd0bba5eba..e1c1ae6665 100644 --- a/public/docs/_examples/style-guide/ts/03-06/app/shared/toast/toast.component.ts +++ b/public/docs/_examples/style-guide/ts/03-06/app/shared/toast/toast.component.ts @@ -1,6 +1,6 @@ import { Component, OnInit } from '@angular/core'; -import { ToastService } from './toast.service'; +import { ToastService } from '../../core'; @Component({ selector: 'toh-toast', diff --git a/public/docs/_examples/style-guide/ts/04-14/app/app.component.ts b/public/docs/_examples/style-guide/ts/04-08/app/app.component.ts similarity index 91% rename from public/docs/_examples/style-guide/ts/04-14/app/app.component.ts rename to public/docs/_examples/style-guide/ts/04-08/app/app.component.ts index 0e43893f7f..fdd8e6ef56 100644 --- a/public/docs/_examples/style-guide/ts/04-14/app/app.component.ts +++ b/public/docs/_examples/style-guide/ts/04-08/app/app.component.ts @@ -1,3 +1,4 @@ +// #docregion import { Component } from '@angular/core'; @Component({ diff --git a/public/docs/_examples/style-guide/ts/04-08/app/app.module.ts b/public/docs/_examples/style-guide/ts/04-08/app/app.module.ts new file mode 100644 index 0000000000..e24bf2c038 --- /dev/null +++ b/public/docs/_examples/style-guide/ts/04-08/app/app.module.ts @@ -0,0 +1,28 @@ +// #docplaster +// #docregion +// #docregion example +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +// #enddocregion example +import { RouterModule } from '@angular/router'; +// #docregion example + +import { AppComponent } from './app.component'; +import { HeroesComponent } from './heroes/heroes.component'; + +@NgModule({ + imports: [ + BrowserModule, +// #enddocregion example + RouterModule.forChild([{ path: '04-08', component: AppComponent }]) +// #docregion example + ], + declarations: [ + AppComponent, + HeroesComponent + ], + exports: [ AppComponent ], + entryComponents: [ AppComponent ] +}) +export class AppModule {} +// #enddocregion example diff --git a/public/docs/_examples/style-guide/ts/04-08/app/heroes/heroes.component.html b/public/docs/_examples/style-guide/ts/04-08/app/heroes/heroes.component.html new file mode 100644 index 0000000000..1244e68a4a --- /dev/null +++ b/public/docs/_examples/style-guide/ts/04-08/app/heroes/heroes.component.html @@ -0,0 +1 @@ +
This is heroes component
diff --git a/public/docs/_examples/style-guide/ts/04-14/app/heroes/heroes.component.ts b/public/docs/_examples/style-guide/ts/04-08/app/heroes/heroes.component.ts similarity index 54% rename from public/docs/_examples/style-guide/ts/04-14/app/heroes/heroes.component.ts rename to public/docs/_examples/style-guide/ts/04-08/app/heroes/heroes.component.ts index e12f8af5d9..b3a76ff120 100644 --- a/public/docs/_examples/style-guide/ts/04-14/app/heroes/heroes.component.ts +++ b/public/docs/_examples/style-guide/ts/04-08/app/heroes/heroes.component.ts @@ -1,21 +1,21 @@ +// #docplaster // #docregion +// #docregion example import { Component, OnInit } from '@angular/core'; -import { Hero } from './shared'; -// #docregion example -import { Logger } from '../shared'; -// #enddocregion example - @Component({ + // #enddocregion example moduleId: module.id, + // #docregion example selector: 'toh-heroes', - templateUrl: 'heroes.component.html', - styleUrls: ['heroes.component.css'], - providers: [Logger] + templateUrl: 'heroes.component.html' }) export class HeroesComponent implements OnInit { - heroes: Hero[]; - selectedHero: Hero; + // #enddocregion example + // #docregion example + constructor() { } ngOnInit() { } } +// #enddocregion example + diff --git a/public/docs/_examples/style-guide/ts/04-10/app/app.component.ts b/public/docs/_examples/style-guide/ts/04-10/app/app.component.ts index aef486d9a2..fdd8e6ef56 100644 --- a/public/docs/_examples/style-guide/ts/04-10/app/app.component.ts +++ b/public/docs/_examples/style-guide/ts/04-10/app/app.component.ts @@ -5,5 +5,4 @@ import { Component } from '@angular/core'; selector: 'sg-app', template: '' }) -export class AppComponent { - } +export class AppComponent { } diff --git a/public/docs/_examples/style-guide/ts/04-10/app/app.module.ts b/public/docs/_examples/style-guide/ts/04-10/app/app.module.ts index dec8d2c6f2..78106657ad 100644 --- a/public/docs/_examples/style-guide/ts/04-10/app/app.module.ts +++ b/public/docs/_examples/style-guide/ts/04-10/app/app.module.ts @@ -1,8 +1,13 @@ +// #docplaster +// #docregion +// #docregion example import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; -import { RouterModule } from '@angular/router'; +// #enddocregion example +import { RouterModule } from '@angular/router'; +// #docregion example -import { AppComponent } from './app.component'; +import { AppComponent } from './app.component'; import { HeroesComponent } from './heroes/heroes.component'; import { SharedModule } from './shared/shared.module'; @@ -10,7 +15,9 @@ import { SharedModule } from './shared/shared.module'; imports: [ BrowserModule, SharedModule, +// #enddocregion example RouterModule.forChild([{ path: '04-10', component: AppComponent }]) +// #docregion example ], declarations: [ AppComponent, @@ -20,3 +27,4 @@ import { SharedModule } from './shared/shared.module'; entryComponents: [ AppComponent ] }) export class AppModule {} +// #enddocregion example diff --git a/public/docs/_examples/style-guide/ts/04-10/app/heroes/heroes.component.avoid.ts b/public/docs/_examples/style-guide/ts/04-10/app/heroes/heroes.component.avoid.ts deleted file mode 100644 index 2d10e7b3c3..0000000000 --- a/public/docs/_examples/style-guide/ts/04-10/app/heroes/heroes.component.avoid.ts +++ /dev/null @@ -1,26 +0,0 @@ -/* tslint:disable:no-unused-variable */ -// #docregion -// #docregion example -/* avoid */ - -import { Component, OnInit } from '@angular/core'; - -import { CONFIG } from '../shared/config'; -import { EntityService } from '../shared/entity.service'; -import { ExceptionService } from '../shared/exception.service'; -import { FilterTextComponent } from '../shared/filter-text/filter-text.component'; -import { InitCapsPipe } from '../shared/init-caps.pipe'; -import { SpinnerService } from '../shared/spinner/spinner.service'; -import { ToastService } from '../shared/toast/toast.service'; - -@Component({ - selector: 'toh-heroes', - templateUrl: 'app/+heroes/heroes.component.html' -}) -export class HeroesComponent implements OnInit { - constructor() { } - - ngOnInit() { } -} -// #enddocregion example - diff --git a/public/docs/_examples/style-guide/ts/04-10/app/heroes/heroes.component.html b/public/docs/_examples/style-guide/ts/04-10/app/heroes/heroes.component.html index 1244e68a4a..170f76aee1 100644 --- a/public/docs/_examples/style-guide/ts/04-10/app/heroes/heroes.component.html +++ b/public/docs/_examples/style-guide/ts/04-10/app/heroes/heroes.component.html @@ -1 +1,8 @@ +
This is heroes component
+
    +
  • + {{hero.name}} +
  • +
+ diff --git a/public/docs/_examples/style-guide/ts/04-10/app/heroes/heroes.component.ts b/public/docs/_examples/style-guide/ts/04-10/app/heroes/heroes.component.ts index 1443a5b445..14eb56a7f0 100644 --- a/public/docs/_examples/style-guide/ts/04-10/app/heroes/heroes.component.ts +++ b/public/docs/_examples/style-guide/ts/04-10/app/heroes/heroes.component.ts @@ -3,29 +3,36 @@ // #docregion example import { Component, OnInit } from '@angular/core'; -import { - CONFIG, - EntityService, - ExceptionService, - SpinnerService, - ToastService -} from '../shared'; +import { FilterTextService } from '../shared/filter-text/filter-text.service'; @Component({ // #enddocregion example moduleId: module.id, - providers: [EntityService, ExceptionService, SpinnerService, ToastService], // #docregion example selector: 'toh-heroes', templateUrl: 'heroes.component.html' }) export class HeroesComponent implements OnInit { // #enddocregion example - urls = CONFIG.baseUrls; // #docregion example - constructor() { } + filteredHeroes: any[] = []; - ngOnInit() { } + constructor(private filterService: FilterTextService) { } + + heroes = [ + { id: 1, name: 'Windstorm' }, + { id: 2, name: 'Bombasto' }, + { id: 3, name: 'Magneta' }, + { id: 4, name: 'Tornado' } + ]; + + filterChanged(searchText: string) { + this.filteredHeroes = this.filterService.filter(searchText, ['id', 'name'], this.heroes); + } + + ngOnInit() { + this.filteredHeroes = this.heroes; + } } // #enddocregion example diff --git a/public/docs/_examples/style-guide/ts/04-10/app/shared/config.ts b/public/docs/_examples/style-guide/ts/04-10/app/shared/config.ts deleted file mode 100644 index cf7281ecf1..0000000000 --- a/public/docs/_examples/style-guide/ts/04-10/app/shared/config.ts +++ /dev/null @@ -1,6 +0,0 @@ -export let CONFIG = { - baseUrls: { - heroes: 'api/heroes.json', - villains: 'api/villains.json' - } -}; diff --git a/public/docs/_examples/style-guide/ts/04-10/app/shared/entity.service.ts b/public/docs/_examples/style-guide/ts/04-10/app/shared/entity.service.ts deleted file mode 100644 index 2d2a13db6d..0000000000 --- a/public/docs/_examples/style-guide/ts/04-10/app/shared/entity.service.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { Injectable } from '@angular/core'; - -@Injectable() -export class EntityService { } diff --git a/public/docs/_examples/style-guide/ts/04-10/app/shared/exception.service.ts b/public/docs/_examples/style-guide/ts/04-10/app/shared/exception.service.ts deleted file mode 100644 index 7180c88e6b..0000000000 --- a/public/docs/_examples/style-guide/ts/04-10/app/shared/exception.service.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { Injectable } from '@angular/core'; - -@Injectable() -export class ExceptionService { } diff --git a/public/docs/_examples/style-guide/ts/04-10/app/shared/filter-text/filter-text.component.ts b/public/docs/_examples/style-guide/ts/04-10/app/shared/filter-text/filter-text.component.ts index 8b058c7ba7..e23987d2f0 100644 --- a/public/docs/_examples/style-guide/ts/04-10/app/shared/filter-text/filter-text.component.ts +++ b/public/docs/_examples/style-guide/ts/04-10/app/shared/filter-text/filter-text.component.ts @@ -1,19 +1,27 @@ +// #docregion import { Component, EventEmitter, Output } from '@angular/core'; @Component({ moduleId: module.id, selector: 'toh-filter-text', - template: '
filter
' + template: '' }) export class FilterTextComponent { @Output() changed: EventEmitter; + filter: string; - constructor() { } + constructor() { + this.changed = new EventEmitter(); + } clear() { + this.filter = ''; } filterChanged(event: any) { + event.preventDefault(); + console.log(`Filter Changed: ${this.filter}`); + this.changed.emit(this.filter); } } diff --git a/public/docs/_examples/style-guide/ts/04-10/app/shared/filter-text/filter-text.service.ts b/public/docs/_examples/style-guide/ts/04-10/app/shared/filter-text/filter-text.service.ts index 9c8cc0ce3f..87978e10e5 100644 --- a/public/docs/_examples/style-guide/ts/04-10/app/shared/filter-text/filter-text.service.ts +++ b/public/docs/_examples/style-guide/ts/04-10/app/shared/filter-text/filter-text.service.ts @@ -1,11 +1,30 @@ +// #docregion import { Injectable } from '@angular/core'; @Injectable() -export class FilterService { - constructor() { } +export class FilterTextService { + constructor() { + console.log('Created an instance of FilterTextService'); + } filter(data: string, props: Array, originalList: Array) { let filteredList: any[]; + if (data && props && originalList) { + data = data.toLowerCase(); + let filtered = originalList.filter(item => { + let match = false; + for (let prop of props) { + if (item[prop].toString().toLowerCase().indexOf(data) > -1) { + match = true; + break; + } + }; + return match; + }); + filteredList = filtered; + } else { + filteredList = originalList; + } return filteredList; } } diff --git a/public/docs/_examples/style-guide/ts/04-10/app/shared/filter-text/index.ts b/public/docs/_examples/style-guide/ts/04-10/app/shared/filter-text/index.ts deleted file mode 100644 index 4641503ec4..0000000000 --- a/public/docs/_examples/style-guide/ts/04-10/app/shared/filter-text/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -// #docregion -export * from './filter-text.component'; -export * from './filter-text.service'; diff --git a/public/docs/_examples/style-guide/ts/04-10/app/shared/index.ts b/public/docs/_examples/style-guide/ts/04-10/app/shared/index.ts deleted file mode 100644 index e4f31e4c62..0000000000 --- a/public/docs/_examples/style-guide/ts/04-10/app/shared/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -// #docregion -// #docregion example -export * from './config'; -export * from './entity.service'; -export * from './exception.service'; -export * from './filter-text'; -export * from './init-caps.pipe'; -export * from './modal'; -export * from './nav'; -export * from './spinner'; -export * from './toast'; -// #enddocregion example diff --git a/public/docs/_examples/style-guide/ts/04-10/app/shared/init-caps.pipe.ts b/public/docs/_examples/style-guide/ts/04-10/app/shared/init-caps.pipe.ts index a7bd0c6521..5019bcb234 100644 --- a/public/docs/_examples/style-guide/ts/04-10/app/shared/init-caps.pipe.ts +++ b/public/docs/_examples/style-guide/ts/04-10/app/shared/init-caps.pipe.ts @@ -1,8 +1,7 @@ +// #docregion import { Pipe, PipeTransform } from '@angular/core'; @Pipe({ name: 'initCaps' }) export class InitCapsPipe implements PipeTransform { transform = (value: string) => value; } - - diff --git a/public/docs/_examples/style-guide/ts/04-10/app/shared/modal/index.ts b/public/docs/_examples/style-guide/ts/04-10/app/shared/modal/index.ts deleted file mode 100644 index 03bebd34d4..0000000000 --- a/public/docs/_examples/style-guide/ts/04-10/app/shared/modal/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -// #docregion -export * from './modal.component'; -export * from './modal.service'; diff --git a/public/docs/_examples/style-guide/ts/04-10/app/shared/modal/modal.component.ts b/public/docs/_examples/style-guide/ts/04-10/app/shared/modal/modal.component.ts deleted file mode 100644 index ab62348e10..0000000000 --- a/public/docs/_examples/style-guide/ts/04-10/app/shared/modal/modal.component.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Component, OnInit } from '@angular/core'; - -import { ModalService } from './modal.service'; - -@Component({ - moduleId: module.id, - selector: 'toh-modal-confirm', - template: '
modal
' -}) -export class ModalComponent implements OnInit { - constructor(modalService: ModalService) { } - - ngOnInit() { } -} diff --git a/public/docs/_examples/style-guide/ts/04-10/app/shared/modal/modal.service.ts b/public/docs/_examples/style-guide/ts/04-10/app/shared/modal/modal.service.ts deleted file mode 100644 index d5fad3a815..0000000000 --- a/public/docs/_examples/style-guide/ts/04-10/app/shared/modal/modal.service.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Injectable } from '@angular/core'; - -@Injectable() -export class ModalService { - activate: (message?: string, title?: string) => Promise; -} diff --git a/public/docs/_examples/style-guide/ts/04-10/app/shared/nav/index.ts b/public/docs/_examples/style-guide/ts/04-10/app/shared/nav/index.ts deleted file mode 100644 index 4236f3e9e1..0000000000 --- a/public/docs/_examples/style-guide/ts/04-10/app/shared/nav/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -// #docregion -export * from './nav.component'; diff --git a/public/docs/_examples/style-guide/ts/04-10/app/shared/nav/nav.component.ts b/public/docs/_examples/style-guide/ts/04-10/app/shared/nav/nav.component.ts deleted file mode 100644 index 97d6313cf3..0000000000 --- a/public/docs/_examples/style-guide/ts/04-10/app/shared/nav/nav.component.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { Component, OnInit } from '@angular/core'; - -import { ModalService } from '../'; - -@Component({ - moduleId: module.id, - selector: 'toh-nav', - template: '
nav
' -}) -export class NavComponent implements OnInit { - - ngOnInit() { } - - constructor(private modalService: ModalService) { } - - resetDb() { } -} diff --git a/public/docs/_examples/style-guide/ts/04-10/app/shared/shared.module.ts b/public/docs/_examples/style-guide/ts/04-10/app/shared/shared.module.ts index 6500b28330..6160abcc84 100644 --- a/public/docs/_examples/style-guide/ts/04-10/app/shared/shared.module.ts +++ b/public/docs/_examples/style-guide/ts/04-10/app/shared/shared.module.ts @@ -1,20 +1,24 @@ +// #docregion import { NgModule } from '@angular/core'; -import { BrowserModule } from '@angular/platform-browser'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; -import { FilterTextComponent, - InitCapsPipe, - ModalComponent, - NavComponent, - SpinnerComponent } from './'; - -const declarations = [ - FilterTextComponent, InitCapsPipe, ModalComponent, - NavComponent, SpinnerComponent, -]; +import { FilterTextComponent } from './filter-text/filter-text.component'; +import { FilterTextService } from './filter-text/filter-text.service'; +import { InitCapsPipe } from './init-caps.pipe'; @NgModule({ - imports: [ BrowserModule ], - declarations: declarations, - exports: declarations + imports: [CommonModule, FormsModule], + declarations: [ + FilterTextComponent, + InitCapsPipe + ], + providers: [FilterTextService], + exports: [ + CommonModule, + FormsModule, + FilterTextComponent, + InitCapsPipe + ] }) export class SharedModule { } diff --git a/public/docs/_examples/style-guide/ts/04-10/app/shared/spinner/index.ts b/public/docs/_examples/style-guide/ts/04-10/app/shared/spinner/index.ts deleted file mode 100644 index 1d619300c0..0000000000 --- a/public/docs/_examples/style-guide/ts/04-10/app/shared/spinner/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -// #docregion -export * from './spinner.component'; -export * from './spinner.service'; diff --git a/public/docs/_examples/style-guide/ts/04-10/app/shared/spinner/spinner.component.ts b/public/docs/_examples/style-guide/ts/04-10/app/shared/spinner/spinner.component.ts deleted file mode 100644 index 1fd2a01500..0000000000 --- a/public/docs/_examples/style-guide/ts/04-10/app/shared/spinner/spinner.component.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Component, OnDestroy, OnInit } from '@angular/core'; - -import { SpinnerService } from './spinner.service'; - -@Component({ - selector: 'toh-spinner', - template: '
spinner
' -}) - -export class SpinnerComponent implements OnDestroy, OnInit { - constructor(private spinnerService: SpinnerService) { } - - ngOnInit() { } - - ngOnDestroy() { } -} diff --git a/public/docs/_examples/style-guide/ts/04-10/app/shared/spinner/spinner.service.ts b/public/docs/_examples/style-guide/ts/04-10/app/shared/spinner/spinner.service.ts deleted file mode 100644 index ad5d2ed6e0..0000000000 --- a/public/docs/_examples/style-guide/ts/04-10/app/shared/spinner/spinner.service.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Injectable } from '@angular/core'; - -export interface ISpinnerState { } - -@Injectable() -export class SpinnerService { - spinnerState: any; - - show() { } - - hide() { } -} diff --git a/public/docs/_examples/style-guide/ts/04-10/app/shared/toast/index.ts b/public/docs/_examples/style-guide/ts/04-10/app/shared/toast/index.ts deleted file mode 100644 index 01b41aff98..0000000000 --- a/public/docs/_examples/style-guide/ts/04-10/app/shared/toast/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -// #docregion -export * from './toast.component'; -export * from './toast.service'; diff --git a/public/docs/_examples/style-guide/ts/04-10/app/shared/toast/toast.service.ts b/public/docs/_examples/style-guide/ts/04-10/app/shared/toast/toast.service.ts deleted file mode 100644 index e92e75ee45..0000000000 --- a/public/docs/_examples/style-guide/ts/04-10/app/shared/toast/toast.service.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Injectable } from '@angular/core'; - -@Injectable() -export class ToastService { - activate: (message?: string, title?: string) => void; -} diff --git a/public/docs/_examples/style-guide/ts/04-11/app/app.component.ts b/public/docs/_examples/style-guide/ts/04-11/app/app.component.ts new file mode 100644 index 0000000000..693619a982 --- /dev/null +++ b/public/docs/_examples/style-guide/ts/04-11/app/app.component.ts @@ -0,0 +1,12 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'toh-app', + template: ` + + + + ` +}) +export class AppComponent { } diff --git a/public/docs/_examples/style-guide/ts/04-11/app/app.module.ts b/public/docs/_examples/style-guide/ts/04-11/app/app.module.ts new file mode 100644 index 0000000000..ef3c156bcf --- /dev/null +++ b/public/docs/_examples/style-guide/ts/04-11/app/app.module.ts @@ -0,0 +1,30 @@ +// #docplaster +// #docregion +// #docregion example +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +// #enddocregion example +import { RouterModule } from '@angular/router'; +// #docregion example + +import { AppComponent } from './app.component'; +import { HeroesComponent } from './heroes/heroes.component'; +import { CoreModule } from './core/core.module'; + +@NgModule({ + imports: [ + BrowserModule, + CoreModule, +// #enddocregion example + RouterModule.forChild([{ path: '04-11', component: AppComponent }]) +// #docregion example + ], + declarations: [ + AppComponent, + HeroesComponent + ], + exports: [ AppComponent ], + entryComponents: [ AppComponent ] +}) +export class AppModule {} +// #enddocregion example diff --git a/public/docs/_examples/style-guide/ts/04-11/app/core/core.module.ts b/public/docs/_examples/style-guide/ts/04-11/app/core/core.module.ts new file mode 100644 index 0000000000..4ba5c79a14 --- /dev/null +++ b/public/docs/_examples/style-guide/ts/04-11/app/core/core.module.ts @@ -0,0 +1,19 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +import { LoggerService } from './logger.service'; +import { NavComponent } from './nav/nav.component'; +import { SpinnerComponent } from './spinner/spinner.component'; +import { SpinnerService } from './spinner/spinner.service'; + +@NgModule({ + imports: [ + CommonModule // we use ngFor + ], +  exports: [NavComponent, SpinnerComponent], +  declarations: [NavComponent, SpinnerComponent], + providers: [LoggerService, SpinnerService] +}) +export class CoreModule { } + diff --git a/public/docs/_examples/style-guide/ts/04-11/app/core/index.ts b/public/docs/_examples/style-guide/ts/04-11/app/core/index.ts new file mode 100644 index 0000000000..7d2092f804 --- /dev/null +++ b/public/docs/_examples/style-guide/ts/04-11/app/core/index.ts @@ -0,0 +1,5 @@ +// #docregion +export * from './logger.service'; +export * from './rxjs-extensions'; +export * from './spinner/spinner.service'; +export * from './nav/nav.component'; diff --git a/public/docs/_examples/style-guide/ts/04-11/app/core/logger.service.ts b/public/docs/_examples/style-guide/ts/04-11/app/core/logger.service.ts new file mode 100644 index 0000000000..9c7080f07a --- /dev/null +++ b/public/docs/_examples/style-guide/ts/04-11/app/core/logger.service.ts @@ -0,0 +1,13 @@ +// #docregion +import { Injectable } from '@angular/core'; + +@Injectable() +export class LoggerService { + log(msg: string) { + console.log(msg); + } + + error(msg: string) { + console.error(msg); + } +} diff --git a/public/docs/_examples/style-guide/ts/04-11/app/core/nav/nav.component.css b/public/docs/_examples/style-guide/ts/04-11/app/core/nav/nav.component.css new file mode 100644 index 0000000000..c7903fd25c --- /dev/null +++ b/public/docs/_examples/style-guide/ts/04-11/app/core/nav/nav.component.css @@ -0,0 +1,63 @@ +/*#docregion*/ +.mdl-layout__header { + display: flex; + position: fixed; + background-color: #222; +} + +.nav-link { + padding: 0 1em; + width: 100px; + color: rgba(255,255,255,.6); + text-align: center; + text-decoration: none; +} + +.nav-link.router-link-active { + color: rgba(255,255,255, 1); +} + +.nav-link.router-link-active::after { + height: 3px; + width: 100%; + display: block; + content: " "; + bottom: 0; + left: 0; + position: inherit; + background: rgb(83,109,254); +} + +.md-title-icon > i { + background-image: url("assets/ng.png"); + background-repeat: no-repeat; + background-position: center center; + padding: 1em 2em; +} + +.mdl-layout__header-row { + height: 56px; + padding: 0 16px 0 72px; + padding-left: 8px; + background-color: #673AB7; + background: #0033FF; + background-color: #222; +} + +#reset-button { + position: fixed; + right: 2em; + top: 1em; +} + +@media (max-width: 480px) { + #reset-button { + display: none + } +} + +@media (max-width: 320px) { + a.nav-link { + font-size: 12px; + } +} diff --git a/public/docs/_examples/style-guide/ts/04-11/app/core/nav/nav.component.html b/public/docs/_examples/style-guide/ts/04-11/app/core/nav/nav.component.html new file mode 100644 index 0000000000..b3c7e441e0 --- /dev/null +++ b/public/docs/_examples/style-guide/ts/04-11/app/core/nav/nav.component.html @@ -0,0 +1,14 @@ + +
+
+

Tour of Heroes

+
+ +
+
diff --git a/public/docs/_examples/style-guide/ts/04-11/app/core/nav/nav.component.ts b/public/docs/_examples/style-guide/ts/04-11/app/core/nav/nav.component.ts new file mode 100644 index 0000000000..ba8796251b --- /dev/null +++ b/public/docs/_examples/style-guide/ts/04-11/app/core/nav/nav.component.ts @@ -0,0 +1,20 @@ +// #docregion +import { Component, OnInit } from '@angular/core'; + +@Component({ + moduleId: module.id, + selector: 'toh-nav', + templateUrl: 'nav.component.html', + styleUrls: ['nav.component.css'], +}) +export class NavComponent implements OnInit { + menuItems = [ + 'Heroes', + 'Villains', + 'Other' + ]; + + ngOnInit() { } + + constructor() { } +} diff --git a/public/docs/_examples/style-guide/ts/04-11/app/core/rxjs-extensions.ts b/public/docs/_examples/style-guide/ts/04-11/app/core/rxjs-extensions.ts new file mode 100644 index 0000000000..870dd7af2b --- /dev/null +++ b/public/docs/_examples/style-guide/ts/04-11/app/core/rxjs-extensions.ts @@ -0,0 +1,7 @@ +// #docregion +import 'rxjs/add/operator/catch'; +import 'rxjs/add/operator/do'; +import 'rxjs/add/operator/finally'; +import 'rxjs/add/operator/map'; +import 'rxjs/add/operator/mergeMap'; +import 'rxjs/add/observable/of'; diff --git a/public/docs/_examples/style-guide/ts/04-11/app/core/spinner/spinner.component.css b/public/docs/_examples/style-guide/ts/04-11/app/core/spinner/spinner.component.css new file mode 100644 index 0000000000..afad0fe8e3 --- /dev/null +++ b/public/docs/_examples/style-guide/ts/04-11/app/core/spinner/spinner.component.css @@ -0,0 +1,21 @@ +/*#docregion*/ +.spinner { + position: absolute; + left: 7em; + top: 20em; + position: absolute; + background-color: blue; + height: .3em; + width: 6em; + margin:-60px 0 0 -60px; + -webkit-animation:spin 4s linear infinite; + -moz-animation:spin 4s linear infinite; + animation:spin 4s linear infinite; +} +@-moz-keyframes spin { 100% { -moz-transform: rotate(360deg); } } +@-webkit-keyframes spin { 100% { -webkit-transform: rotate(360deg); } } +@keyframes spin { 100% { -webkit-transform: rotate(360deg); transform:rotate(360deg); } } + +.spinner-hidden { + display:none; +} diff --git a/public/docs/_examples/style-guide/ts/04-11/app/core/spinner/spinner.component.html b/public/docs/_examples/style-guide/ts/04-11/app/core/spinner/spinner.component.html new file mode 100644 index 0000000000..a07e3378c0 --- /dev/null +++ b/public/docs/_examples/style-guide/ts/04-11/app/core/spinner/spinner.component.html @@ -0,0 +1,2 @@ + +
diff --git a/public/docs/_examples/style-guide/ts/04-11/app/core/spinner/spinner.component.ts b/public/docs/_examples/style-guide/ts/04-11/app/core/spinner/spinner.component.ts new file mode 100644 index 0000000000..7260eb8d88 --- /dev/null +++ b/public/docs/_examples/style-guide/ts/04-11/app/core/spinner/spinner.component.ts @@ -0,0 +1,36 @@ +// #docregion +import { Component, OnDestroy, OnInit } from '@angular/core'; +import { Subscription } from 'rxjs/Subscription'; + +import { LoggerService } from '../logger.service'; +import { SpinnerState, SpinnerService } from './spinner.service'; + +@Component({ + moduleId: module.id, + selector: 'toh-spinner', + templateUrl: 'spinner.component.html', + styleUrls: ['spinner.component.css'] +}) +export class SpinnerComponent implements OnDestroy, OnInit { + visible = false; + + private spinnerStateChanged: Subscription; + + constructor( + private loggerService: LoggerService, + private spinnerService: SpinnerService + ) { } + + ngOnInit() { + console.log(this.visible); + this.spinnerStateChanged = this.spinnerService.spinnerState + .subscribe((state: SpinnerState) => { + this.visible = state.show; + this.loggerService.log(`visible=${this.visible}`); + }); + } + + ngOnDestroy() { + this.spinnerStateChanged.unsubscribe(); + } +} diff --git a/public/docs/_examples/style-guide/ts/04-11/app/core/spinner/spinner.service.ts b/public/docs/_examples/style-guide/ts/04-11/app/core/spinner/spinner.service.ts new file mode 100644 index 0000000000..85e366c43e --- /dev/null +++ b/public/docs/_examples/style-guide/ts/04-11/app/core/spinner/spinner.service.ts @@ -0,0 +1,24 @@ +// #docregion +import { Injectable } from '@angular/core'; +import { Subject } from 'rxjs/Subject'; + +export interface SpinnerState { + show: boolean; +} + +@Injectable() +export class SpinnerService { + private spinnerSubject = new Subject(); + + spinnerState = this.spinnerSubject.asObservable(); + + constructor() { } + + show() { + this.spinnerSubject.next({ show: true }); + } + + hide() { + this.spinnerSubject.next({ show: false }); + } +} diff --git a/public/docs/_examples/style-guide/ts/04-11/app/heroes/heroes.component.html b/public/docs/_examples/style-guide/ts/04-11/app/heroes/heroes.component.html new file mode 100644 index 0000000000..9035a4b8ff --- /dev/null +++ b/public/docs/_examples/style-guide/ts/04-11/app/heroes/heroes.component.html @@ -0,0 +1,12 @@ + +
+ + + +
    +
  • + {{hero.name}} +
  • +
+ +
diff --git a/public/docs/_examples/style-guide/ts/04-11/app/heroes/heroes.component.ts b/public/docs/_examples/style-guide/ts/04-11/app/heroes/heroes.component.ts new file mode 100644 index 0000000000..b15d2dc8bc --- /dev/null +++ b/public/docs/_examples/style-guide/ts/04-11/app/heroes/heroes.component.ts @@ -0,0 +1,41 @@ +// #docplaster +// #docregion +// #docregion example +import { Component } from '@angular/core'; + +import { LoggerService } from '../core/logger.service'; +import { SpinnerService } from '../core/spinner/spinner.service'; + +@Component({ + // #enddocregion example + moduleId: module.id, + // #docregion example + selector: 'toh-heroes', + templateUrl: 'heroes.component.html' +}) +export class HeroesComponent { + // #enddocregion example + // #docregion example + heroes: any[]; + + constructor( + private loggerService: LoggerService, + private spinnerService: SpinnerService + ) { } + + getHeroes() { + this.loggerService.log(`Getting heroes`); + this.spinnerService.show(); + setTimeout(() => { + this.heroes = [ + { id: 1, name: 'Windstorm' }, + { id: 2, name: 'Bombasto' }, + { id: 3, name: 'Magneta' }, + { id: 4, name: 'Tornado' } + ]; + this.loggerService.log(`We have ${HeroesComponent.length} heroes`); + this.spinnerService.hide(); + }, 2000); + } +} +// #enddocregion example diff --git a/public/docs/_examples/style-guide/ts/04-12/app/app.component.ts b/public/docs/_examples/style-guide/ts/04-12/app/app.component.ts new file mode 100644 index 0000000000..dc85b06e9f --- /dev/null +++ b/public/docs/_examples/style-guide/ts/04-12/app/app.component.ts @@ -0,0 +1,11 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'toh-app', + template: ` + + + ` +}) +export class AppComponent { } diff --git a/public/docs/_examples/style-guide/ts/04-12/app/app.module.ts b/public/docs/_examples/style-guide/ts/04-12/app/app.module.ts new file mode 100644 index 0000000000..7c9fb44182 --- /dev/null +++ b/public/docs/_examples/style-guide/ts/04-12/app/app.module.ts @@ -0,0 +1,30 @@ +// #docplaster +// #docregion +// #docregion example +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +// #enddocregion example +import { RouterModule } from '@angular/router'; +// #docregion example + +import { AppComponent } from './app.component'; +import { HeroesComponent } from './heroes/heroes.component'; +import { CoreModule } from './core/core.module'; + +@NgModule({ + imports: [ + BrowserModule, + CoreModule, +// #enddocregion example + RouterModule.forChild([{ path: '04-12', component: AppComponent }]) +// #docregion example + ], + declarations: [ + AppComponent, + HeroesComponent + ], + exports: [ AppComponent ], + entryComponents: [ AppComponent ] +}) +export class AppModule {} +// #enddocregion example diff --git a/public/docs/_examples/style-guide/ts/04-12/app/core/core.module.ts b/public/docs/_examples/style-guide/ts/04-12/app/core/core.module.ts new file mode 100644 index 0000000000..069141bf2a --- /dev/null +++ b/public/docs/_examples/style-guide/ts/04-12/app/core/core.module.ts @@ -0,0 +1,21 @@ +// #docregion +import { NgModule, Optional, SkipSelf } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +import { LoggerService } from './logger.service'; +import { NavComponent } from './nav/nav.component'; +import { throwIfAlreadyLoaded } from './module-import-guard'; + +@NgModule({ + imports: [ + CommonModule // we use ngFor + ], +  exports: [NavComponent], +  declarations: [NavComponent], + providers: [LoggerService] +}) +export class CoreModule { + constructor( @Optional() @SkipSelf() parentModule: CoreModule) { + throwIfAlreadyLoaded(parentModule, 'CoreModule'); + } +} diff --git a/public/docs/_examples/style-guide/ts/04-12/app/core/index.ts b/public/docs/_examples/style-guide/ts/04-12/app/core/index.ts new file mode 100644 index 0000000000..8768b77f41 --- /dev/null +++ b/public/docs/_examples/style-guide/ts/04-12/app/core/index.ts @@ -0,0 +1,3 @@ +// #docregion +export * from './logger.service'; +export * from './nav/nav.component'; diff --git a/public/docs/_examples/style-guide/ts/04-12/app/core/logger.service.ts b/public/docs/_examples/style-guide/ts/04-12/app/core/logger.service.ts new file mode 100644 index 0000000000..9c7080f07a --- /dev/null +++ b/public/docs/_examples/style-guide/ts/04-12/app/core/logger.service.ts @@ -0,0 +1,13 @@ +// #docregion +import { Injectable } from '@angular/core'; + +@Injectable() +export class LoggerService { + log(msg: string) { + console.log(msg); + } + + error(msg: string) { + console.error(msg); + } +} diff --git a/public/docs/_examples/style-guide/ts/04-12/app/core/module-import-guard.ts b/public/docs/_examples/style-guide/ts/04-12/app/core/module-import-guard.ts new file mode 100644 index 0000000000..5248b15b2e --- /dev/null +++ b/public/docs/_examples/style-guide/ts/04-12/app/core/module-import-guard.ts @@ -0,0 +1,6 @@ +// #docregion +export function throwIfAlreadyLoaded(parentModule: any, moduleName: string) { + if (parentModule) { + throw new Error(`${moduleName} has already been loaded. Import Core modules in the AppModule only.`); + } +} diff --git a/public/docs/_examples/style-guide/ts/04-12/app/core/nav/nav.component.css b/public/docs/_examples/style-guide/ts/04-12/app/core/nav/nav.component.css new file mode 100644 index 0000000000..c7903fd25c --- /dev/null +++ b/public/docs/_examples/style-guide/ts/04-12/app/core/nav/nav.component.css @@ -0,0 +1,63 @@ +/*#docregion*/ +.mdl-layout__header { + display: flex; + position: fixed; + background-color: #222; +} + +.nav-link { + padding: 0 1em; + width: 100px; + color: rgba(255,255,255,.6); + text-align: center; + text-decoration: none; +} + +.nav-link.router-link-active { + color: rgba(255,255,255, 1); +} + +.nav-link.router-link-active::after { + height: 3px; + width: 100%; + display: block; + content: " "; + bottom: 0; + left: 0; + position: inherit; + background: rgb(83,109,254); +} + +.md-title-icon > i { + background-image: url("assets/ng.png"); + background-repeat: no-repeat; + background-position: center center; + padding: 1em 2em; +} + +.mdl-layout__header-row { + height: 56px; + padding: 0 16px 0 72px; + padding-left: 8px; + background-color: #673AB7; + background: #0033FF; + background-color: #222; +} + +#reset-button { + position: fixed; + right: 2em; + top: 1em; +} + +@media (max-width: 480px) { + #reset-button { + display: none + } +} + +@media (max-width: 320px) { + a.nav-link { + font-size: 12px; + } +} diff --git a/public/docs/_examples/style-guide/ts/04-12/app/core/nav/nav.component.html b/public/docs/_examples/style-guide/ts/04-12/app/core/nav/nav.component.html new file mode 100644 index 0000000000..b3c7e441e0 --- /dev/null +++ b/public/docs/_examples/style-guide/ts/04-12/app/core/nav/nav.component.html @@ -0,0 +1,14 @@ + +
+
+

Tour of Heroes

+
+ +
+
diff --git a/public/docs/_examples/style-guide/ts/04-12/app/core/nav/nav.component.ts b/public/docs/_examples/style-guide/ts/04-12/app/core/nav/nav.component.ts new file mode 100644 index 0000000000..ba8796251b --- /dev/null +++ b/public/docs/_examples/style-guide/ts/04-12/app/core/nav/nav.component.ts @@ -0,0 +1,20 @@ +// #docregion +import { Component, OnInit } from '@angular/core'; + +@Component({ + moduleId: module.id, + selector: 'toh-nav', + templateUrl: 'nav.component.html', + styleUrls: ['nav.component.css'], +}) +export class NavComponent implements OnInit { + menuItems = [ + 'Heroes', + 'Villains', + 'Other' + ]; + + ngOnInit() { } + + constructor() { } +} diff --git a/public/docs/_examples/style-guide/ts/04-12/app/heroes/heroes.component.html b/public/docs/_examples/style-guide/ts/04-12/app/heroes/heroes.component.html new file mode 100644 index 0000000000..9035a4b8ff --- /dev/null +++ b/public/docs/_examples/style-guide/ts/04-12/app/heroes/heroes.component.html @@ -0,0 +1,12 @@ + +
+ + + +
    +
  • + {{hero.name}} +
  • +
+ +
diff --git a/public/docs/_examples/style-guide/ts/04-12/app/heroes/heroes.component.ts b/public/docs/_examples/style-guide/ts/04-12/app/heroes/heroes.component.ts new file mode 100644 index 0000000000..ee60b88178 --- /dev/null +++ b/public/docs/_examples/style-guide/ts/04-12/app/heroes/heroes.component.ts @@ -0,0 +1,33 @@ +// #docplaster +// #docregion +// #docregion example +import { Component } from '@angular/core'; + +import { LoggerService } from '../core/logger.service'; + +@Component({ + // #enddocregion example + moduleId: module.id, + // #docregion example + selector: 'toh-heroes', + templateUrl: 'heroes.component.html' +}) +export class HeroesComponent { + // #enddocregion example + // #docregion example + heroes: any[]; + + constructor(private loggerService: LoggerService) { } + + getHeroes() { + this.loggerService.log(`Getting heroes`); + this.heroes = [ + { id: 1, name: 'Windstorm' }, + { id: 2, name: 'Bombasto' }, + { id: 3, name: 'Magneta' }, + { id: 4, name: 'Tornado' } + ]; + this.loggerService.log(`We have ${HeroesComponent.length} heroes`); + } +} +// #enddocregion example diff --git a/public/docs/_examples/style-guide/ts/04-13/app/app.component.avoid.ts b/public/docs/_examples/style-guide/ts/04-13/app/app.component.avoid.ts deleted file mode 100644 index dc96beac4c..0000000000 --- a/public/docs/_examples/style-guide/ts/04-13/app/app.component.avoid.ts +++ /dev/null @@ -1,11 +0,0 @@ -// #docregion -import { Component } from '@angular/core'; - -// #docregion example -import { HeroesComponent } from './heroes'; -// #enddocregion example - -@Component({ - selector: 'toh-app' -}) -export class AppComponent {} diff --git a/public/docs/_examples/style-guide/ts/04-13/app/heroes/index.ts b/public/docs/_examples/style-guide/ts/04-13/app/heroes/index.ts deleted file mode 100644 index 45d52e8c70..0000000000 --- a/public/docs/_examples/style-guide/ts/04-13/app/heroes/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -// Needed for the .avoid code to compile -export const HeroesComponent = 42; diff --git a/public/docs/_examples/style-guide/ts/04-14/app/heroes/heroes.component.css b/public/docs/_examples/style-guide/ts/04-14/app/heroes/heroes.component.css deleted file mode 100644 index 82f0c1d0ab..0000000000 --- a/public/docs/_examples/style-guide/ts/04-14/app/heroes/heroes.component.css +++ /dev/null @@ -1,28 +0,0 @@ -/* #docregion */ -.heroes { - margin: 0 0 2em 0; list-style-type: none; padding: 0; width: 15em; -} -.heroes li { - cursor: pointer; - position: relative; - left: 0; - background-color: #EEE; - margin: .5em; - padding: .3em 0; - height: 1.6em; - border-radius: 4px; -} -.heroes .badge { - display: inline-block; - font-size: small; - color: white; - padding: 0.8em 0.7em 0 0.7em; - background-color: #607D8B; - line-height: 1em; - position: relative; - left: -1px; - top: -4px; - height: 1.8em; - margin-right: .8em; - border-radius: 4px 0 0 4px; -} diff --git a/public/docs/_examples/style-guide/ts/04-14/app/heroes/heroes.component.html b/public/docs/_examples/style-guide/ts/04-14/app/heroes/heroes.component.html deleted file mode 100644 index b6bf75ef1a..0000000000 --- a/public/docs/_examples/style-guide/ts/04-14/app/heroes/heroes.component.html +++ /dev/null @@ -1,12 +0,0 @@ - -
-

My Heroes

-
    -
  • - {{hero.id}} {{hero.name}} -
  • -
-
-

{{selectedHero.name | uppercase}} is my hero

-
-
diff --git a/public/docs/_examples/style-guide/ts/04-14/app/heroes/index.ts b/public/docs/_examples/style-guide/ts/04-14/app/heroes/index.ts deleted file mode 100644 index a8d7f1d422..0000000000 --- a/public/docs/_examples/style-guide/ts/04-14/app/heroes/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './shared'; -export * from './heroes.component'; diff --git a/public/docs/_examples/style-guide/ts/04-14/app/heroes/shared/hero.model.ts b/public/docs/_examples/style-guide/ts/04-14/app/heroes/shared/hero.model.ts deleted file mode 100644 index 8f7cc205c8..0000000000 --- a/public/docs/_examples/style-guide/ts/04-14/app/heroes/shared/hero.model.ts +++ /dev/null @@ -1,5 +0,0 @@ -// #docregion -export class Hero { - id: number; - name: string; -} diff --git a/public/docs/_examples/style-guide/ts/04-14/app/heroes/shared/index.ts b/public/docs/_examples/style-guide/ts/04-14/app/heroes/shared/index.ts deleted file mode 100644 index 0dceb684c4..0000000000 --- a/public/docs/_examples/style-guide/ts/04-14/app/heroes/shared/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './hero.model'; diff --git a/public/docs/_examples/style-guide/ts/04-14/app/index.ts b/public/docs/_examples/style-guide/ts/04-14/app/index.ts deleted file mode 100644 index 251d78ac56..0000000000 --- a/public/docs/_examples/style-guide/ts/04-14/app/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './heroes'; -export * from './shared'; -export * from './app.component'; diff --git a/public/docs/_examples/style-guide/ts/04-14/app/shared/index.ts b/public/docs/_examples/style-guide/ts/04-14/app/shared/index.ts deleted file mode 100644 index 6820e22fc7..0000000000 --- a/public/docs/_examples/style-guide/ts/04-14/app/shared/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './logger.service'; diff --git a/public/docs/_examples/style-guide/ts/04-14/app/shared/logger.service.ts b/public/docs/_examples/style-guide/ts/04-14/app/shared/logger.service.ts deleted file mode 100644 index b1f8c7ff21..0000000000 --- a/public/docs/_examples/style-guide/ts/04-14/app/shared/logger.service.ts +++ /dev/null @@ -1,9 +0,0 @@ -// #docregion -import { Injectable } from '@angular/core'; - -@Injectable() -export class Logger { - - constructor() { } - -} diff --git a/public/docs/_examples/style-guide/ts/06-03/app/app.component.ts b/public/docs/_examples/style-guide/ts/06-03/app/app.component.ts index 5f4ea8dce5..0d0a7d107b 100644 --- a/public/docs/_examples/style-guide/ts/06-03/app/app.component.ts +++ b/public/docs/_examples/style-guide/ts/06-03/app/app.component.ts @@ -2,6 +2,8 @@ import { Component } from '@angular/core'; @Component({ selector: 'sg-app', - template: '' + template: ` + + ` }) export class AppComponent { } diff --git a/public/docs/_examples/style-guide/ts/06-03/app/app.module.ts b/public/docs/_examples/style-guide/ts/06-03/app/app.module.ts index 8677138eef..b19f3fdc00 100644 --- a/public/docs/_examples/style-guide/ts/06-03/app/app.module.ts +++ b/public/docs/_examples/style-guide/ts/06-03/app/app.module.ts @@ -2,7 +2,7 @@ import { NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; import { AppComponent } from './app.component'; -import { ValidatorDirective } from './shared'; +import { ValidatorDirective, Validator2Directive } from './shared'; @NgModule({ imports: [ @@ -10,7 +10,7 @@ import { ValidatorDirective } from './shared'; ], declarations: [ AppComponent, - ValidatorDirective + ValidatorDirective, Validator2Directive ], exports: [ AppComponent ] }) diff --git a/public/docs/_examples/style-guide/ts/06-03/app/shared/index.ts b/public/docs/_examples/style-guide/ts/06-03/app/shared/index.ts index 2168f8b2c6..ba25e4c458 100644 --- a/public/docs/_examples/style-guide/ts/06-03/app/shared/index.ts +++ b/public/docs/_examples/style-guide/ts/06-03/app/shared/index.ts @@ -1 +1,2 @@ export * from './validator.directive'; +export * from './validator2.directive'; diff --git a/public/docs/_examples/style-guide/ts/06-03/app/shared/validator.directive.avoid.ts b/public/docs/_examples/style-guide/ts/06-03/app/shared/validator.directive.avoid.ts deleted file mode 100644 index c9b724dc53..0000000000 --- a/public/docs/_examples/style-guide/ts/06-03/app/shared/validator.directive.avoid.ts +++ /dev/null @@ -1,20 +0,0 @@ -// #docregion -import { Directive, HostBinding, HostListener } from '@angular/core'; - -// #docregion example -/* avoid */ - -@Directive({ - selector: '[tohValidator]', - host: { - '(mouseenter)': 'onMouseEnter()', - 'attr.role': 'button' - } -}) -export class ValidatorDirective { - role = 'button'; - onMouseEnter() { - // do work - } -} -// #enddocregion example diff --git a/public/docs/_examples/style-guide/ts/06-03/app/shared/validator.directive.ts b/public/docs/_examples/style-guide/ts/06-03/app/shared/validator.directive.ts index 4271da0ef6..d9e32c017f 100644 --- a/public/docs/_examples/style-guide/ts/06-03/app/shared/validator.directive.ts +++ b/public/docs/_examples/style-guide/ts/06-03/app/shared/validator.directive.ts @@ -1,7 +1,6 @@ // #docregion import { Directive, HostBinding, HostListener } from '@angular/core'; -// #docregion example @Directive({ selector: '[tohValidator]' }) @@ -11,4 +10,3 @@ export class ValidatorDirective { // do work } } -// #enddocregion example diff --git a/public/docs/_examples/style-guide/ts/06-03/app/shared/validator2.directive.ts b/public/docs/_examples/style-guide/ts/06-03/app/shared/validator2.directive.ts new file mode 100644 index 0000000000..7936a83cb1 --- /dev/null +++ b/public/docs/_examples/style-guide/ts/06-03/app/shared/validator2.directive.ts @@ -0,0 +1,16 @@ +// #docregion +import { Directive } from '@angular/core'; + +@Directive({ + selector: '[tohValidator2]', + host: { + 'attr.role': 'button', + '(mouseenter)': 'onMouseEnter()' + } +}) +export class Validator2Directive { + role = 'button'; + onMouseEnter() { + // do work + } +} diff --git a/public/docs/_examples/style-guide/ts/app/app.routes.ts b/public/docs/_examples/style-guide/ts/app/app.routes.ts index 1fb26f08ea..bce6b4df06 100644 --- a/public/docs/_examples/style-guide/ts/app/app.routes.ts +++ b/public/docs/_examples/style-guide/ts/app/app.routes.ts @@ -1,58 +1,8 @@ import { Routes } from '@angular/router'; import { AppComponent as S0101 } from '../01-01/app'; -// import { AppComponent as S0207 } from '../02-07/app'; -// import { AppComponent as S0208 } from '../02-08/app'; -// import { AppComponent as S0301 } from '../03-01/app'; -// import { AppComponent as S0302 } from '../03-02/app'; -// import { AppComponent as S0303 } from '../03-03/app'; -// import { AppComponent as S0304 } from '../03-04/app'; -// import { AppComponent as S0305 } from '../03-05/app'; -// import { AppComponent as S0306 } from '../03-06/app'; -// import { AppComponent as S0410 } from '../04-10/app'; -// import { AppComponent as S0414 } from '../04-14/app'; -// import { AppComponent as S0502 } from '../05-02/app'; -// import { AppComponent as S0503 } from '../05-03/app'; -// import { AppComponent as S0504 } from '../05-04/app'; -// import { AppComponent as S0512 } from '../05-12/app'; -// import { AppComponent as S0513 } from '../05-13/app'; -// import { AppComponent as S0514 } from '../05-14/app'; -// import { AppComponent as S0515 } from '../05-15/app'; -// import { AppComponent as S0516 } from '../05-16/app'; -// import { AppComponent as S0517 } from '../05-17/app'; -// import { AppComponent as S0601 } from '../06-01/app'; -// import { AppComponent as S0603 } from '../06-03/app'; -// import { AppComponent as S0701 } from '../07-01/app'; -// import { AppComponent as S0703 } from '../07-03/app'; -// import { AppComponent as S0704 } from '../07-04/app'; -// import { AppComponent as S0901 } from '../09-01/app'; export const routes: Routes = [ { path: '', redirectTo: '/01-01', pathMatch: 'full' }, { path: '01-01', component: S0101 }, - // { path: '02-07', component: S0207 }, - // { path: '02-08', component: S0208 }, - // { path: '03-01', component: S0301 }, - // { path: '03-02', component: S0302 }, - // { path: '03-03', component: S0303 }, - // { path: '03-04', component: S0304 }, - // { path: '03-05', component: S0305 }, - // { path: '03-06', component: S0306 }, - ///////////////////{ path: '04-10', component: S0410 }, - // { path: '04-14', component: S0414 }, - // { path: '05-02', component: S0502 }, - // { path: '05-03', component: S0503 }, - // { path: '05-04', component: S0504 }, - // { path: '05-12', component: S0512 }, - // { path: '05-13', component: S0513 }, - // { path: '05-14', component: S0514 }, - // { path: '05-15', component: S0515 }, - // { path: '05-16', component: S0516 }, - // { path: '05-17', component: S0517 }, - // { path: '06-01', component: S0601 }, - // { path: '06-03', component: S0603 }, - // { path: '07-01', component: S0701 }, - // { path: '07-03', component: S0703 }, - // { path: '07-04', component: S0704 }, - // { path: '09-01', component: S0901 }, ]; diff --git a/public/docs/_examples/style-guide/ts/app/main.ts b/public/docs/_examples/style-guide/ts/app/main.ts index 792f873167..eef534bd4d 100644 --- a/public/docs/_examples/style-guide/ts/app/main.ts +++ b/public/docs/_examples/style-guide/ts/app/main.ts @@ -16,6 +16,7 @@ import { HeroData } from './hero-data'; import { AppComponent } from './app.component'; import * as s0101 from '../01-01/app/app.module'; +import * as s0205 from '../02-05/app/app.module'; import * as s0207 from '../02-07/app/app.module'; import * as s0208 from '../02-08/app/app.module'; import * as s0301 from '../03-01/app/app.module'; @@ -23,8 +24,10 @@ import * as s0302 from '../03-02/app/app.module'; import * as s0303 from '../03-03/app/app.module'; import * as s0304 from '../03-04/app/app.module'; import * as s0306 from '../03-06/app/app.module'; +import * as s0408 from '../04-08/app/app.module'; import * as s0410 from '../04-10/app/app.module'; -import * as s0414 from '../04-14/app/app.module'; +import * as s0411 from '../04-11/app/app.module'; +import * as s0412 from '../04-12/app/app.module'; import * as s0502 from '../05-02/app/app.module'; import * as s0503 from '../05-03/app/app.module'; import * as s0504 from '../05-04/app/app.module'; @@ -49,6 +52,7 @@ const moduleMetadata = { InMemoryWebApiModule.forRoot(HeroData), s0101.AppModule, + s0205.AppModule, s0207.AppModule, s0208.AppModule, s0301.AppModule, @@ -56,8 +60,10 @@ const moduleMetadata = { s0303.AppModule, s0304.AppModule, s0306.AppModule, + s0408.AppModule, s0410.AppModule, - s0414.AppModule, + s0411.AppModule, + s0412.AppModule, s0502.AppModule, s0503.AppModule, s0504.AppModule, @@ -74,7 +80,6 @@ const moduleMetadata = { s0704.AppModule, s0901.AppModule, - RouterModule.forRoot([ { path: '', redirectTo: '/01-01', pathMatch: 'full' } ], {/* enableTracing: true */}), diff --git a/public/docs/_examples/style-guide/ts/systemjs.custom.js b/public/docs/_examples/style-guide/ts/systemjs.custom.js index bc5a4d2eb3..8181979346 100644 --- a/public/docs/_examples/style-guide/ts/systemjs.custom.js +++ b/public/docs/_examples/style-guide/ts/systemjs.custom.js @@ -2,19 +2,23 @@ // extra local packages var packageNames = [ '01-01', '01-01/app', '01-01/app/heroes', '01-01/app/heroes/shared', + '02-05', '02-05/app', '02-07', '02-07/app', '02-07/app/heroes', '02-07/app/users', '02-08', '02-08/app', '02-08/app/shared', - '03-01', '03-01/app', '03-01/app/shared', - '03-02', '03-02/app', '03-02/app/shared', - '03-03', '03-03/app', '03-03/app/shared', - '03-04', '03-04/app', '03-04/app/shared', - '03-05', '03-05/app', '03-05/app/shared', '03-05/app/shared/spinner', '03-05/app/shared/toast', + '03-01', '03-01/app', '03-01/app/core', + '03-02', '03-02/app', '03-02/app/core', + '03-03', '03-03/app', '03-03/app/core', + '03-04', '03-04/app', '03-04/app/core', + '03-05', '03-05/app', '03-05/app/core', '03-05/app/core/spinner', '03-05/app/core/toast', '03-05/app/heroes', '03-05/app/heroes/shared', - '03-06', '03-06/app', '03-06/app/shared', '03-06/app/shared/spinner', '03-06/app/shared/toast', + '03-06', '03-06/app', '03-06/app/core', '03-06/app/core/spinner', '03-06/app/core/toast', '03-06/app/heroes', '03-06/app/heroes/shared', + '04-08', '04-08/app', '04-08/app/heroes', '04-10', '04-10/app', '04-10/app/shared', '04-10/app/heroes', '04-10/app/shared/spinner', '04-10/app/shared/toast', - '04-10/app/shared/filter-text', '04-10/app/shared/modal', '04-10/app/shared/nav', - '04-14', '04-14/app', '04-14/app/heroes', '04-14/app/heroes/shared', '04-14/app/shared', + '04-10/app/shared/filter-text', + '04-11', '04-11/app', '04-11/app/core', '04-11/app/heroes', '04-11/app/core/spinner', + '04-11/app/core/nav', + '04-12', '04-12/app', '04-12/app/core', '04-12/app/heroes', '04-12/app/core/nav', '05-02', '05-02/app', '05-02/app/heroes', '05-02/app/heroes/shared', '05-02/app/heroes/shared/hero-button', '05-03', '05-03/app', '05-03/app/heroes', '05-03/app/heroes/shared', '05-03/app/heroes/shared/hero-button', '05-04', '05-04/app', '05-04/app/heroes', '05-04/app/heroes/shared', diff --git a/public/docs/ts/latest/guide/style-guide.jade b/public/docs/ts/latest/guide/style-guide.jade index b62f43ed80..db7dd3831f 100644 --- a/public/docs/ts/latest/guide/style-guide.jade +++ b/public/docs/ts/latest/guide/style-guide.jade @@ -1,18 +1,13 @@ include ../_util-fns -.alert.is-important - :marked - We are still preparing style recommendations for the new NgModules feature - introduced in RC5 and will add it to the style guide soon. - :marked Welcome to the Angular Style Guide ## Purpose - If you are looking for an opinionated style guide for syntax, conventions, and structuring Angular applications, then step right in. - - The purpose of this style guide is to provide guidance on building Angular applications by showing the conventions we use and, more importantly, why we choose them. + Looking for an opinionated guide to Angular syntax, conventions, and application structure? + Step right in! + This style guide presents our preferred conventions and, as importantly, explains why. .l-main-section :marked @@ -27,7 +22,7 @@ include ../_util-fns **Do** is one that should always be followed. _Always_ might be a bit too strong of a word. Guidelines that literally should always be followed are extremely rare. - On the other hand, we need a really unusual case for breaking a *Do* guideline. + On the other hand, you need a really unusual case for breaking a *Do* guideline. .s-rule.consider :marked @@ -36,7 +31,7 @@ include ../_util-fns .s-rule.avoid :marked - **Avoid** indicates something we should almost never do. Code examples to *avoid* have an unmistakeable red header. + **Avoid** indicates something you should almost never do. Code examples to *avoid* have an unmistakeable red header. .l-main-section :marked @@ -55,7 +50,7 @@ a(id='toc') 1. [Single Responsibility](#single-responsibility) 1. [Naming](#naming) 1. [Coding Conventions](#coding-conventions) - 1. [Application Structure](#application-structure) + 1. [App Structure and Angular Modules](#app-structure-and-angular-modules) 1. [Components](#components) 1. [Directives](#directives) 1. [Services](#services) @@ -67,7 +62,8 @@ a(id='toc') :marked ## Single Responsibility - We apply the [Single Responsibility Principle](https://wikipedia.org/wiki/Single_responsibility_principle) to all Components, Services, and other symbols we create. This helps make our app cleaner, easier to read and maintain, and more testable. + Apply the [Single Responsibility Principle](https://wikipedia.org/wiki/Single_responsibility_principle) to all components, services, and other symbols. + This helps make the app cleaner, easier to read and maintain, and more testable. ### Rule of One #### Style 01-01 @@ -180,7 +176,7 @@ a(href="#toc") Back to top .s-why :marked - **Why?** The naming conventions should simply help us find our code faster and make it easier to understand. + **Why?** The naming conventions should simply help find desited code faster and make it easier to understand. .s-why.s-why-last :marked @@ -207,7 +203,7 @@ a(href="#toc") Back to top .s-rule.do :marked - **Do** use conventional type names including `.service`, `.component`, `.pipe`. + **Do** use conventional type names including `.service`, `.component`, `.pipe`, `.module`, `.directive`. Invent additional type names if you must but take care not to create too many. .s-why @@ -231,7 +227,7 @@ a(href="#toc") Back to top .l-main-section :marked - ### Components and Directives + ### Symbols and File Names #### Style 02-03 .s-rule.do @@ -240,23 +236,24 @@ a(href="#toc") Back to top .s-rule.do :marked - **Do** use upper camel case for symbols. Match the name of the symbol to the naming of the file. + **Do** use upper camel case for class names. Match the name of the symbol to the name of the file. .s-rule.do :marked - **Do** append the symbol name with the suffix that it represents. + **Do** append the symbol name with the conventional suffix for a thing of that type + (e.g., `Component`, `Directive`, `Module`, `Pipe`, `Service`). +.s-rule.do + :marked + **Do** use give the filename the conventional suffix for a file of that type + (e.g., `.component.ts`, `.directive.ts`, `.module.ts`, `.pipe.ts`, `.service.ts`). .s-why :marked **Why?** Provides a consistent way to quickly identify and reference assets. -.s-why - :marked - **Why?** Upper camel case is conventional for identifying objects that can be instantiated using a constructor. - .s-why.s-why-last :marked - **Why?** The `Component` suffix is more commonly used and is more explicitly descriptive. + **Why?** Upper camel case is conventional for identifying objects that can be instantiated using a constructor. - var top="vertical-align:top" table(width="100%") @@ -269,7 +266,7 @@ table(width="100%") td code-example. @Component({ ... }) - export class AppComponent {} + export class AppComponent { } td :marked app.component.ts @@ -277,7 +274,7 @@ table(width="100%") td code-example. @Component({ ... }) - export class HeroesComponent + export class HeroesComponent { } td :marked heroes.component.ts @@ -285,7 +282,7 @@ table(width="100%") td code-example. @Component({ ... }) - export class HeroListComponent + export class HeroListComponent { } td :marked hero-list.component.ts @@ -293,7 +290,7 @@ table(width="100%") td code-example. @Component({ ... }) - export class HeroDetailComponent + export class HeroDetailComponent { } td :marked hero-detail.component.ts @@ -301,10 +298,34 @@ table(width="100%") td code-example. @Directive({ ... }) - export class ValidationDirective + export class ValidationDirective { } td :marked validation.directive.ts + tr(style=top) + td + code-example. + @NgModule({ ... }) + export class AppModule + td + :marked + app.module.ts + tr(style=top) + td + code-example. + @Pipe({ name: 'initCaps' }) + export class InitCapsPipe implements PipeTransform { } + td + :marked + init-caps.pipe.ts + tr(style=top) + td + code-example. + @Injectable() + export class UserProfileService { } + td + :marked + user-profile.service.ts :marked a(href="#toc") Back to top @@ -349,7 +370,7 @@ table(width="100%") td code-example. @Injectable() - export class HeroDataService {} + export class HeroDataService { } td :marked hero-data.service.ts @@ -357,7 +378,7 @@ table(width="100%") td code-example. @Injectable() - export class CreditService {} + export class CreditService { } td :marked credit.service.ts @@ -365,7 +386,7 @@ table(width="100%") td code-example. @Injectable() - export class Logger {} + export class Logger { } td :marked logger.service.ts @@ -382,9 +403,13 @@ a(href="#toc") Back to top :marked **Do** put bootstrapping and platform logic for the app in a file named `main.ts`. +.s-rule.do + :marked + **Do** include error handling the bootstrapping logic. + .s-rule.avoid :marked - **Avoid** putting app logic in the `main.ts`. Instead consider placing it in a Component or Service. + **Avoid** putting app logic in the `main.ts`. Instead consider placing it in a component or service. .s-why :marked @@ -394,6 +419,9 @@ a(href="#toc") Back to top :marked **Why?** Follows a familiar convention from other technology platforms. ++makeExample('style-guide/ts/02-05/main.ts', '', 'main.ts') +:marked + a(href="#toc") Back to top .l-main-section @@ -403,7 +431,7 @@ a(href="#toc") Back to top .s-rule.do :marked - **Do** Use lower camel case for naming the selectors of our directives. + **Do** Use lower camel case for naming the selectors of directives. .s-why :marked @@ -422,7 +450,13 @@ a(href="#toc") Back to top .s-rule.do :marked - **Do** use a custom prefix for the selector of our components. For example, the prefix `toh` represents from **T**our **o**f **H**eroes and the prefix `admin` represents an admin feature area. + **Do** use a hyphenated, lowercase element selector value (e.g. `admin-users`). + + +.s-rule.do + :marked + **Do** use a custom prefix for a component selector. + For example, the prefix `toh` represents from **T**our **o**f **H**eroes and the prefix `admin` represents an admin feature area. .s-rule.do :marked @@ -430,15 +464,15 @@ a(href="#toc") Back to top .s-why :marked - **Why?** Prevents name collisions. + **Why?** Prevents element name collisions with components in other apps and with native HTML elements. .s-why :marked - **Why?** Makes it easier to promote and share our feature in other apps. + **Why?** Makes it easier to promote and share the component in other apps. .s-why.s-why-last :marked - **Why?** Our Components and elements are easily identified. + **Why?** Components are easy to identify in the DOM. +makeExample('style-guide/ts/02-07/app/heroes/hero.component.avoid.ts', 'example', 'app/heroes/hero.component.ts')(avoid=1) :marked @@ -458,7 +492,11 @@ a(href="#toc") Back to top .s-rule.do :marked - **Do** use a custom prefix for the selector of our directives (for instance below we use the prefix `toh` from **T**our **o**f **H**eroes). + **Do** use a custom prefix for the selector of directives (e.g, the prefix `toh` from **T**our **o**f **H**eroes). + +.s-rule.do + :marked + **Do** spell non-element selectors in lower camel case unless the selector is meant to match a native HTML attribute. .s-why :marked @@ -466,7 +504,7 @@ a(href="#toc") Back to top .s-why.s-why-last :marked - **Why?** Our Directives are easily identified. + **Why?** Directives are easily identified. +makeExample('style-guide/ts/02-08/app/shared/validate.directive.avoid.ts', 'example', 'app/shared/validate.directive.ts')(avoid=1) :marked @@ -619,6 +657,98 @@ table(width="100%") a(href="#toc") Back to top +.l-main-section +:marked + ### Angular NgModule Names + #### Style 02-12 + +.s-rule.do + :marked + **Do** append the symbol name with the suffix `Module`. + +.s-rule.do + :marked + **Do** give the file name the `.module.ts` extension. + +.s-rule.do + :marked + **Do** name the module after the feature and folder it resides in. + +.s-why + :marked + **Why?** Provides a consistent way to quickly identify and reference modules. + +.s-why + :marked + **Why?** Upper camel case is conventional for identifying objects that can be instantiated using a constructor. + +.s-why.s-why-last + :marked + **Why?** Easily identifies the module as the root of the same named feature. + +.s-rule.do + :marked + **Do** suffix a _RoutingModule_ class name with `RoutingModule`. + +.s-rule.do + :marked + **Do** end the filename of a _RoutingModule_ with `-routing.module.ts`. + +.s-why.s-why-last + :marked + **Why?** A `RoutingModule` is a module dedicated exclusively to configuring the Angular router. + A consistent class and file name convention make these modules easy to spot and verify. +- var top="vertical-align:top" +table(width="100%") + col(width="50%") + col(width="50%") + tr + th Symbol Name + th File Name + tr(style=top) + td + code-example. + @NgModule({ ... }) + export class AppModule { } + td + :marked + app.module.ts + tr(style=top) + td + code-example. + @NgModule({ ... }) + export class HeroesModule { } + td + :marked + heroes.module.ts + tr(style=top) + td + code-example. + @NgModule({ ... }) + export class VillainsModule { } + td + :marked + villains.module.ts + tr(style=top) + td + code-example. + @NgModule({ ... }) + export class AppRoutingModule { } + td + :marked + app-routing.module.ts + tr(style=top) + td + code-example. + @NgModule({ ... }) + export class HeroesRoutingModule { } + td + :marked + heroes-routing.module.ts +:marked + +a(href="#toc") Back to top + .l-main-section :marked ## Coding Conventions @@ -640,12 +770,13 @@ a(href="#toc") Back to top .s-why.s-why-last :marked - **Why?** Classes can be instantiated and construct an instance. We often use upper camel case to indicate a constructable asset. + **Why?** Classes can be instantiated and construct an instance. + By convention, upper camel case indicates a constructable asset. -+makeExample('style-guide/ts/03-01/app/shared/exception.service.avoid.ts', 'example', 'app/shared/exception.service.ts')(avoid=1) ++makeExample('style-guide/ts/03-01/app/core/exception.service.avoid.ts', 'example', 'app/shared/exception.service.ts')(avoid=1) :marked -+makeExample('style-guide/ts/03-01/app/shared/exception.service.ts', 'example', 'app/shared/exception.service.ts') ++makeExample('style-guide/ts/03-01/app/core/exception.service.ts', 'example', 'app/shared/exception.service.ts') :marked a(href="#toc") Back to top @@ -665,7 +796,7 @@ a(href="#toc") Back to top .s-why.s-why-last :marked - TypeScript helps enforce that intent by requiring immediate initialization and by + **Why?** TypeScript helps enforce that intent by requiring immediate initialization and by preventing subsequent re-assignment. .s-rule.consider @@ -689,11 +820,11 @@ a(href="#toc") Back to top .s-why.s-why-last :marked - **Why?** Although we recommend creating _new_ constants in lower camel case, - the tradition of UPPER_SNAKE_CASE remains popular and pervasive, + **Why?** The tradition of UPPER_SNAKE_CASE remains popular and pervasive, especially in third party modules. + It is rarely worth the effort to change them or the risk of breaking existing code and documentation. -+makeExample('style-guide/ts/03-02/app/shared/data.service.ts', '', 'app/shared/data.service.ts') ++makeExample('style-guide/ts/03-02/app/core/data.service.ts', '', 'app/shared/data.service.ts') :marked a(href="#toc") Back to top @@ -711,14 +842,31 @@ a(href="#toc") Back to top :marked **Consider** naming an interface without an `I` prefix. +.s-rule.consider + :marked + **Consider** using a class instead of an interface. + +.s-why + :marked + **Why?** TypeScript guidelines + discourage the "I" prefix. + +.s-why + :marked + **Why?** A class alone is less code than a _class-plus-interface_. + +.s-why + :marked + **Why?** A class can act as an interface (use `implements` instead of `extends`). + .s-why.s-why-last :marked - **Why?** When we use types, we can often simply use the class as the type. + **Why?** An interface-class can be a provider lookup token in Angular dependency injection. -+makeExample('style-guide/ts/03-03/app/shared/hero-collector.service.avoid.ts', 'example', 'app/shared/hero-collector.service.ts')(avoid=1) ++makeExample('style-guide/ts/03-03/app/core/hero-collector.service.avoid.ts', 'example', 'app/shared/hero-collector.service.ts')(avoid=1) :marked -+makeExample('style-guide/ts/03-03/app/shared/hero-collector.service.ts', 'example', 'app/shared/hero-collector.service.ts') ++makeExample('style-guide/ts/03-03/app/core/hero-collector.service.ts', 'example', 'app/shared/hero-collector.service.ts') :marked a(href="#toc") Back to top @@ -748,10 +896,10 @@ a(href="#toc") Back to top :marked **Why?** TypeScript tooling makes it easy to identify private vs public properties and methods. -+makeExample('style-guide/ts/03-04/app/shared/toast.service.avoid.ts', 'example', 'app/shared/toast.service.ts')(avoid=1) ++makeExample('style-guide/ts/03-04/app/core/toast.service.avoid.ts', 'example', 'app/shared/toast.service.ts')(avoid=1) :marked -+makeExample('style-guide/ts/03-04/app/shared/toast.service.ts', 'example', 'app/shared/toast.service.ts') ++makeExample('style-guide/ts/03-04/app/core/toast.service.ts', 'example', 'app/shared/toast.service.ts') :marked a(href="#toc") Back to top @@ -761,17 +909,17 @@ a(href="#toc") Back to top ### Import Line Spacing #### Style 03-06 -.s-rule.do +.s-rule.consider :marked - **Do** leave one empty line between third party imports and imports of code we created. + **Consider** leaving one empty line between third party imports and application imports. -.s-rule.do +.s-rule.consider :marked - **Do** list import lines alphabetized by the module. + **Consider** listing import lines alphabetized by the module. -.s-rule.do +.s-rule.consider :marked - **Do** list destructured imported assets alphabetically. + **Consider** listing destructured imported assets alphabetically. .s-why :marked @@ -791,11 +939,17 @@ a(href="#toc") Back to top .l-main-section :marked - ## Application Structure + ## App Structure and Angular Modules - Have a near term view of implementation and a long term vision. Start small but keep in mind where the app is heading down the road. + Have a near-term view of implementation and a long-term vision. Start small but keep in mind where the app is heading down the road. - All of the app's code goes in a folder named `app`. All content is 1 feature per file. Each component, service, and pipe is in its own file. All 3rd party vendor scripts are stored in another folder and not in the `app` folder. We didn't write them and we don't want them cluttering our app. Use the naming conventions for files in this guide. + All of the app's code goes in a folder named `app`. + All feature areas are in their own folder, with their own Angular module. + + All content is 1 asset per file. Each component, service, and pipe is in its own file. + All 3rd party vendor scripts are stored in another folder and not in the `app` folder. + You didn't write them and you don't want them cluttering app. + Use the naming conventions for files in this guide. a(href="#toc") Back to top @@ -806,7 +960,10 @@ a(href="#toc") Back to top .s-rule.do :marked - **Do** structure the app such that we can `L`ocate our code quickly, `I`dentify the code at a glance, keep the `F`lattest structure we can, and `T`ry to be DRY. + **Do** structure the app such that you can `L`ocate code quickly, + `I`dentify the code at a glance, + keep the `F`lattest structure you can, and + `T`ry to be DRY. .s-rule.do :marked @@ -814,7 +971,9 @@ a(href="#toc") Back to top .s-why.s-why-last :marked - **Why?** LIFT Provides a consistent structure that scales well, is modular, and makes it easier to increase developer efficiency by finding code quickly. Another way to check our app structure is to ask ourselves: How quickly can we open and work in all of the related files for a feature? + **Why?** LIFT Provides a consistent structure that scales well, is modular, and makes it easier to increase developer efficiency by finding code quickly. + To confirm your intuition about a particular structure, ask: + _can I quickly open and start work in all of the related files for this feature_? a(href="#toc") Back to top @@ -825,11 +984,15 @@ a(href="#toc") Back to top .s-rule.do :marked - **Do** make locating our code intuitive, simple and fast. + **Do** make locating code intuitive, simple and fast. .s-why.s-why-last :marked - **Why?** We find this to be super important for a project. If we cannot find the files we need to work on quickly, we will not be able to work as efficiently as possible, and the structure will need to change. We may not know the file name or where its related files are, so putting them in the most intuitive locations and near each other saves a ton of time. A descriptive folder structure can help with this. + **Why?** + To work efficiently you must be able to find files quickly, + especially when you do not know (or do not remember) the file _names_. + Keeping related files near each other in an intuitive location saves time. + A descriptive folder structure makes a world of difference to you and the people who come after you. a(href="#toc") Back to top @@ -840,7 +1003,7 @@ a(href="#toc") Back to top .s-rule.do :marked - **Do** name the file such that we instantly know what it contains and represents. + **Do** name the file such that you instantly know what it contains and represents. .s-rule.do :marked @@ -852,11 +1015,14 @@ a(href="#toc") Back to top .s-why.s-why-last :marked - **Why?** We spend less time hunting and pecking for code, and become more efficient. If this means we want longer file names, then so be it. + **Why?** Spend less time hunting and pecking for code, and become more efficient. + Longer file names are far better than _short-but-obscure_ abbreviated names. .l-sub-section :marked - There are deviations of the 1 per file rule when we have a set of very small features that are all related to each other, as they are still easily identifiable. + It may be advantageous to deviate from the _one-thing-per-file_ rule when + you have a set of small, closely-related features that are better discovered and understood + in a single file than as multiple files. Be wary of this loophole. a(href="#toc") Back to top @@ -871,11 +1037,24 @@ a(href="#toc") Back to top .s-rule.consider :marked - **Consider** creating folders when we get to seven or more files. + **Consider** creating sub-folders when a folder reaches seven or more files. -.s-why.s-why-last +.s-rule.consider :marked - **Why?** Nobody wants to search seven levels of folders to find a file. In a folder structure there is no hard and fast number rule, but when a folder has seven to ten files, that may be time to create subfolders. We base it on our comfort level. Use a flatter structure until there is an obvious value (to help the rest of LIFT) in creating a new folder. + **Consider** configuring the IDE to hide distracting, irrelevant files such as generated `.js` and `.js.map` files. + +s-why.s-why-last + :marked + **Why?** No one wants to search for a file through seven levels of folders. + A flat structure is easy to scan. + + On the other hand, + psychologists believe + that humans start to struggle when the number of adjacent interesting things exceeds nine. + So when a folder has ten or more files, it may be time to create subfolders. + + Base your decision on your comfort level. + Use a flatter structure until there is an obvious value to creating a new folder. a(href="#toc") Back to top @@ -890,11 +1069,14 @@ a(href="#toc") Back to top .s-rule.avoid :marked - **Avoid** being so DRY that we sacrifice readability. + **Avoid** being so DRY that you sacrifice readability. .s-why.s-why-last :marked - **Why?** Being DRY is important, but not crucial if it sacrifices the others in LIFT, which is why we call it T-DRY. We don’t want to type `hero-view.component.html` for a view because, well, it’s obviously a view. If it is not obvious or by convention, then we name it. + **Why?** Being DRY is important, but not crucial if it sacrifices the other elements of LIFT. + That's why its calle _T-DRY_. + For example, it's redundant to name a component, `hero-view.component.html` because a component is obviously a view. + But if something is not obvious or departs from a convention, then spell it out. a(href="#toc") Back to top @@ -917,43 +1099,69 @@ a(href="#toc") Back to top .s-rule.consider :marked - **Consider** creating a folder for each component including its `.ts`, `.html`, `.css` and `.spec` file. + **Consider** creating a folder for a component when is has multiple accompanying files (`.ts`, `.html`, `.css` and `.spec`). .s-why :marked - **Why?** Helps us keep the app structure small and easy to maintain in the early stages, while being easy to evolve as the app grows. + **Why?** Helps keep the app structure small and easy to maintain in the early stages, while being easy to evolve as the app grows. .s-why.s-why-last :marked **Why?** Components often have four files (e.g. `*.html`, `*.css`, `*.ts`, and `*.spec.ts`) and can clutter a folder quickly. -.example-title Overall Folder and File Structure +a(id='file-tree') +:marked + Folder and File Structure + .filetree .file src .children .file app .children + .file core + .children + .file core.module.ts + .file exception.service.ts|spec.ts + .file user-profile.service.ts|spec.ts .file heroes .children .file hero .children .file hero.component.ts|html|css|spec.ts - .file index.ts .file hero-list .children .file hero-list.component.ts|html|css|spec.ts - .file index.ts .file shared .children + .file hero-button.component.ts|html|css|spec.ts .file hero.model.ts .file hero.service.ts|spec.ts - .file index.ts .file heroes.component.ts|html|css|spec.ts - .file index.ts + .file heroes.module.ts + .file heroes-routing.module.ts .file shared .children - .file ... + .file shared.module.ts + .file init-caps.pipe.ts|spec.ts + .file text-filter.component.ts|spec.ts + .file text-filter.service.ts|spec.ts + .file villains + .children + .file villain + .children + .file ... + .file villain-list + .children + .file ... + .file shared + .children + .file ... + .file villains.component.ts|html|css|spec.ts + .file villains.module.ts + .file villains-routing.module.ts .file app.component.ts|html|css|spec.ts + .file app.module.ts + .file app-routing.module.ts .file main.ts .file index.html .file ... @@ -961,78 +1169,21 @@ a(href="#toc") Back to top .l-sub-section :marked - While we prefer our Components to be in their own dedicated folder, another option for small apps is to keep Components flat (not in a dedicated folder). This adds up to four files to the existing folder, but also reduces the folder nesting. Be consistent. + While components in dedicated folder are widely preferred, + another option for small apps is to keep components flat (not in a dedicated folder). + This adds up to four files to the existing folder, but also reduces the folder nesting. + Whatever you choose, be consistent. a(href="#toc") Back to top .l-main-section :marked - ### Shared Folder + ### Folders-by-Feature Structure #### Style 04-07 .s-rule.do :marked - **Do** put all shared files within a component feature in a `shared` folder. - -.s-rule.consider - :marked - **Consider** creating a folder for each component including its `.ts`, `.html`, `.css` and `.spec` file. - -.s-why - :marked - **Why?** Separates shared files from the components within a feature. - -.s-why.s-why-last - :marked - **Why?** Makes it easier to locate shared files within a component feature. - -.example-title Shared Folder -.filetree - .file src - .children - .file app - .children - .file heroes - .children - .file hero - .children - .file ... - .file hero-list - .children - .file ... - .file shared - .children - .file hero-button - .children - .file ... - .file hero.model.ts - .file hero.service.ts|spec.ts - .file index.ts - .file heroes.component.ts|html|css|spec.ts - .file index.ts - .file shared - .children - .file exception.service.ts|spec.ts - .file index.ts - .file nav - .children - .file ... - .file app.component.ts|html|css|spec.ts - .file main.ts - .file index.html - .file ... -:marked - -a(href="#toc") Back to top - -.l-main-section -:marked - ### Folders-by-Feature Structure - #### Style 04-08 - -.s-rule.do - :marked - **Do** create folders named for the feature they represent. + **Do** create folders named for the feature area they represent. .s-why :marked @@ -1046,202 +1197,346 @@ a(href="#toc") Back to top :marked **Why?** Helps reduce the app from becoming cluttered through organizing the content and keeping them aligned with the LIFT guidelines. -.s-why.s-why-last +.s-why :marked - **Why?** When there are a lot of files (e.g. 10+) locating them is easier with a consistent folder structures and more difficult in flat structures. - -:marked - Below is an example of a small app with folders per component. - -.example-title Folders per Component -.filetree - .file src - .children - .file app - .children - .file heroes - .children - .file hero - .children - .file ... - .file hero-list - .children - .file ... - .file shared - .children - .file ... - .file heroes.component.ts|html|css|spec.ts - .file index.ts - .file villains - .children - .file villain - .children - .file ... - .file villain-list - .children - .file ... - .file shared - .children - .file ... - .file villains.component.ts|html|css|spec.ts - .file index.ts - .file shared - .children - .file nav - .children - .file ... - .file ... - .file app.component.ts|html|css|spec.ts - .file main.ts - .file index.html - .file ... -:marked - -a(href="#toc") Back to top - -.l-main-section -:marked - ### Layout Components - #### Style 04-09 + **Why?** When there are a lot of files (e.g. 10+), locating them is easier with a consistent folder structure and more difficult in a flat structure. .s-rule.do :marked - **Do** put components that define the overall layout in a `shared` folder. - -.s-rule.do - :marked - **Do** put shared layout components in their own folder, under the `shared` folder. + **Do** create an Angular module for each feature area. .s-why :marked - **Why?** We need a place to host our layout for our app. Our navigation bar, footer, and other aspects of the app that are needed for the entire app. + **Why?** Angular modules make it easy to lazy load routable features. .s-why.s-why-last :marked - **Why?** Organizes all layout in a consistent place re-used throughout the application. + **Why?** Angular modules make it easier to isolate, test, and re-use features. -.example-title Folder for Layout Components -.filetree - .file src - .children - .file app - .children - .file heroes - .children - .file ... - .file shared - .children - .file nav - .children - .file index.ts - .file nav.component.ts|html|css|spec.ts - .file footer - .children - .file index.ts - .file footer.component.ts|html|css|spec.ts - .file index.ts - .file ... - .file app.component.ts|html|css|spec.ts - .file main.ts - .file index.html - .file ... +.file-tree-reference + a(href="#file-tree") Refer here to this Folder and File Structure example + +a(href="#toc") Back to top + :marked + +.l-main-section +:marked + ### App Root Module + #### Style 04-08 + +.s-rule.do + :marked + **Do** create an Angular module at the root of the application. + +.s-why + :marked + **Why?** Every app requires at least one Angular module. + +.s-rule.consider + :marked + **Consider** naming the root module `app.module.ts`. + +.s-why.s-why-last + :marked + **Why?** Makes it easier to locate and identify the root module. + ++makeExample('style-guide/ts/04-08/app/app.module.ts', 'example', 'app/app.module.ts') :marked a(href="#toc") Back to top .l-main-section :marked - ### Create and Import Barrels + ### Feature Modules + #### Style 04-09 +.s-rule.do + + :marked + **Do** create an Angular module for all distinct features in an application (e.g. `Heroes` feature). + +.s-rule.do + :marked + **Do** place the feature module in the same named folder as the feature area (.e.g `app/heroes`). + +.s-rule.do + :marked + **Do** name the feature module file reflecting the name of the feature area and folder (e.g. `app/heroes/heroes.module.ts`) + +.s-rule.do + :marked + **Do** name the feature module symbol reflecting the name of the feature area, folder, and file (e.g. `app/heroes/heroes.module.ts` defines `HeroesModule`) + +.s-why + :marked + **Why?** A feature module can expose or hide its implementation from other modules. + +.s-why + :marked + **Why?** A feature module identifies distinct sets of related components that comprise the feature area. + +.s-why + :marked + **Why?** A feature module can easily be routed to both eagerly and lazily. + +.s-why + :marked + **Why?** A feature module defines clear boundaries between specific functionality and other application features. + +.s-why + :marked + **Why?** A feature module helps clarify and make it easier to assign development responsibilities to different teams. + +.s-why.s-why-last + :marked + **Why?** A feature module can easily be isolated for testing. + +a(href="#toc") Back to top + +.l-main-section +:marked + ### Shared Feature Module #### Style 04-10 -.s-rule.consider +.s-rule.do :marked - **Consider** creating a file that imports, aggregates, and re-exports items. We call this technique a **barrel**. + **Do** create a feature module named `SharedModule` in a `shared` folder (e.g. `app/shared/shared.module.ts` defines `SharedModule`). -.s-rule.consider +.s-rule.do :marked - **Consider** naming this barrel file `index.ts`. + **Do** put common components, directives and pipes that will be used throughout the application by other feature modules in the `SharedModule`, where those assets are expected to share a new instance of themselves (not singletons). + +.s-rule.do + :marked + **Do** import all modules required by the assets in the `SharedModule` (e.g. `CommonModule` and `FormsModule`). .s-why :marked - **Why?** A barrel aggregates many imports into a single import. + **Why?** `SharedModule` will contain components, directives and pipes that may need features from another common module (e.g. `ngFor` in `CommonModule`). + +.s-rule.do + :marked + **Do** declare all components, directives, and pipes in the `SharedModule`. + +.s-rule.do + :marked + **Do** export all symbols that from the `SharedModule` that other feature modules need to use. .s-why :marked - **Why?** A barrel reduces the number of imports a file may need. - + **Why?** `SharedModule` exists to make commonly used components, directives and pipes available for use in the templates of components in many other modules. + +.s-rule.avoid + :marked + **Avoid** specifying app-wide singleton providers in a `SharedModule`. Intentional singletons are OK. Take care. + .s-why :marked - **Why?** A barrel provides a consistent pattern to import everything exported in the barrel from a folder. - -.s-why - :marked - **Why?** This is consistent with a pattern from Node, which imports the index.js|ts file from a folder. + **Why?** A lazy loaded feature module that imports that shared module will make its own copy of the service and likely have undesireable results. .s-why.s-why-last :marked - **Why?** A barrel shortens import statements. + **Why?** You don't want each module to have its own separate instance of singleton services. + Yet there is a real danger of that happening if the `SharedModule` provides a service. -+makeTabs( - `style-guide/ts/04-10/app/shared/index.ts, - style-guide/ts/04-10/app/shared/filter-text/index.ts, - style-guide/ts/04-10/app/shared/modal/index.ts, - style-guide/ts/04-10/app/shared/nav/index.ts, - style-guide/ts/04-10/app/shared/spinner/index.ts, - style-guide/ts/04-10/app/shared/toast/index.ts`, - `example,,,,,`, - `app/shared/index.ts, - app/shared/filter-text/index.ts, - app/shared/modal/index.ts, - app/shared/nav/index.ts, - app/shared/spinner/index.ts, - app/shared/toast/index.ts`) -:marked - -.example-title Folder Barrels .filetree .file src .children .file app .children - .file dashboard - .children - .file ... - .file index.ts - .file heroes - .children - .file ... - .file index.ts .file shared .children - .file nav - .children - .file ... - .file index.ts - .file search - .children - .file ... - .file index.ts - .file ... - .file index.ts + .file shared.module.ts + .file init-caps.pipe.ts|spec.ts + .file text-filter.component.ts|spec.ts + .file text-filter.service.ts|spec.ts .file app.component.ts|html|css|spec.ts + .file app.module.ts + .file app-routing.module.ts .file main.ts .file index.html .file ... :marked -+makeExample('style-guide/ts/04-10/app/heroes/heroes.component.avoid.ts', 'example', 'app/heroes/heroes.component.ts')(avoid=1) -:marked - -+makeExample('style-guide/ts/04-10/app/heroes/heroes.component.ts', 'example', 'app/heroes/heroes.component.ts') ++makeTabs( + `style-guide/ts/04-10/app/shared/shared.module.ts, + style-guide/ts/04-10/app/shared/init-caps.pipe.ts, + style-guide/ts/04-10/app/shared/filter-text/filter-text.component.ts, + style-guide/ts/04-10/app/shared/filter-text/filter-text.service.ts, + style-guide/ts/04-10/app/heroes/heroes.component.ts, + style-guide/ts/04-10/app/heroes/heroes.component.html, + `, + `,,,`, + `app/shared/shared.module.ts, + app/shared/init-caps.pipe.ts, + app/shared/filter-text/filter-text.component.ts, + app/shared/filter-text/filter-text.service.ts, + app/heroes/heroes.component.ts, + app/heroes/heroes.component.html, + `) :marked a(href="#toc") Back to top .l-main-section :marked - ### Lazy Loaded Folders + ### Core Feature Module #### Style 04-11 + +.s-rule.do + :marked + **Do** collect single-use classes and hiding their gory details inside `CoreModule`. A simplified root `AppModule` imports `CoreModule` in its capacity as orchestrator of the application as a whole. + +.s-rule.do + :marked + **Do** create a feature module named `CoreModule` in a `core` folder (e.g. `app/core/core.module.ts` defines `CoreModule`). + +.s-rule.do + :marked + **Do** put a singleton service whose instance wil be shared throughout the application in the `CoreModule` (e.g. `ExceptionService` and `LoggerService`). + +.s-rule.do + :marked + **Do** import all modules required by the assets in the `CoreModule` (e.g. `CommonModule` and `FormsModule`). + +.s-why + :marked + **Why?** `CoreModule` provides one or more singleton services. Angular registers the providers with the app root injector, making a singleton instance of each service available to any component that needs them, whether that component is eagerly or lazily loaded. + +.s-why + :marked + **Why?** `CoreModule` will contain singleton services. When a lazy loaded module imports these, it will get a new instance and not the intended app-wide singleton. + +.s-rule.do + :marked + **Do** gather application-wide, single use components in the `CoreModule`. + Import it once (in the `AppModule`) when the app starts and never import it anywhere else. (e.g. `NavComponent` and `SpinnerComponent`). + +.s-why + :marked + **Why?** Real world apps can have several single-use components (e.g., spinners, message toasts, and modal dialogs) that appear only in the `AppComponent` template. + They are not imported elsewhere so they're not shared in that sense. + Yet they're too big and messy to leave loose in the root folder. + +.s-rule.avoid + :marked + **Avoid** importing the `CoreModule` anywhere except in the `AppModule`. + +.s-why + :marked + **Why?** A lazily loaded feature module that directly imports the `CoreModule` will make its own copy of services and likely have undesireable results. + +.s-why + :marked + **Why?** An eagerly loaded feature module already has access to the `AppModule`'s injector, and thus the `CoreModule`'s services. + +.s-rule.do + :marked + **Do** export all symbols that from the `CoreModule` that the `AppModule` will import and make available for other feature modules to use. + +.s-why + :marked + **Why?** `CoreModule` exists to make commonly used singleton services available for use in the many other modules. + +.s-why.s-why-last + :marked + **Why?** You wnat the entire app to use the one, singleton instance. + You don't want each module to have its own separate instance of singleton services. + Yet there is a real danger of that happening accidentally if the `CoreModule` provides a service. + + +.filetree + .file src + .children + .file app + .children + .file core + .children + .file core.module.ts + .file logger.service.ts|spec.ts + .file nav + .children + .file nav.component.ts|html|css|spec.ts + .file spinner + .children + .file spinner.component.ts|html|css|spec.ts + .file spinner.service.ts|spec.ts + .file app.component.ts|html|css|spec.ts + .file app.module.ts + .file app-routing.module.ts + .file main.ts + .file index.html + .file ... +:marked + ++makeTabs( + ` + style-guide/ts/04-11/app/app.module.ts, + style-guide/ts/04-11/app/core/core.module.ts, + style-guide/ts/04-11/app/core/logger.service.ts, + style-guide/ts/04-11/app/core/nav/nav.component.ts, + style-guide/ts/04-11/app/core/nav/nav.component.html, + style-guide/ts/04-11/app/core/spinner/spinner.component.ts, + style-guide/ts/04-11/app/core/spinner/spinner.component.html, + style-guide/ts/04-11/app/core/spinner/spinner.service.ts + `, + `example,,,,,,,`, + ` + app/app.module.ts, + app/core/core.module.ts, + app/core/logger.service.ts, + app/core/nav/nav.component.ts, + app/core/nav/nav.component.html, + app/core/spinner/spinner.component.ts, + app/core/spinner/spinner.component.html, + app/core/spinner/spinner.service.ts + `) +:marked + +.l-sub-section + :marked + `AppModule` is a little smaller because many app/root classes have moved to other modules. + `AppModule` is stable because you will add future components and providers to other modules, not this one. + `AppModule` delegates to imported modules rather than doing work. + `AppModule` is focused on its main task, orchestrating the app as a whole. + +a(href="#toc") Back to top + +.l-main-section +:marked + ### Prevent Reimport of Core Module + #### Style 04-12 + Only the root `AppModule` should import the `CoreModule`. + +.s-rule.do + :marked + **Do** guard against reimporting of `CoreModule` and fail fast by adding guard logic. + +.s-why.s-why + :marked + **Why?** Guards against reimporting of the `CoreModule`. + +.s-why.s-why-last + :marked + **Why?** Guards against creating multiple instances of assets intended to be singletons. + ++makeTabs( + ` + style-guide/ts/04-12/app/core/module-import-guard.ts, + style-guide/ts/04-12/app/core/core.module.ts + `, + `,`, + ` + app/core/module-import-guard, + app/core/core.module.ts + `) +:marked + +a(href="#toc") Back to top + +.l-main-section +:marked + ### Lazy Loaded Folders + #### Style 04-13 A distinct application feature or workflow may be *lazy loaded* or *loaded on demand* rather than when the application starts. .s-rule.do @@ -1257,8 +1552,8 @@ a(href="#toc") Back to top .l-main-section :marked - ### Never Directly Import Lazy Loaded Folders - #### Style 04-13 + ### Never Directly Import Lazy Loaded Folders + #### Style 04-14 .s-rule.avoid :marked @@ -1266,28 +1561,7 @@ a(href="#toc") Back to top .s-why.s-why-last :marked - **Why?** Directly importing and using a module loads it immediately when our intention is to load it on demand. - -+makeExample('style-guide/ts/04-13/app/app.component.avoid.ts', 'example', 'app/app.component.ts')(avoid=1) -:marked - -a(href="#toc") Back to top - -.l-main-section -:marked - ### Lazy Loaded Folders May Import From a Parent - #### Style 04-14 - -.s-rule.do - :marked - **Do** allow lazy loaded modules to import a module from a parent folder. - -.s-why.s-why-last - :marked - **Why?** A parent module has already been loaded by the time the lazy loaded module imports it. - -+makeExample('style-guide/ts/04-14/app/heroes/heroes.component.ts', 'example', 'app/heroes/heroes.component.ts') -:marked + **Why?** Directly importing and using a module will load it immediately when the intention is to load it on demand. a(href="#toc") Back to top @@ -1295,12 +1569,12 @@ a(href="#toc") Back to top :marked ## Components - ### Components Selector Naming + ### Component Selector Naming #### Style 05-02 .s-rule.do :marked - **Do** use `kebab-case` for naming the element selectors of our components. + **Do** use _dashed-case_ or _kebab-case_ for naming the element selectors of components. .s-why.s-why-last :marked @@ -1326,15 +1600,16 @@ a(href="#toc") Back to top .s-rule.do :marked - **Do** define Components as elements via the selector. + **Do** define components as elements via the selector. .s-why :marked - **Why?** Components have templates containing HTML and optional Angular template syntax. They are most associated with putting content on a page, and thus are more closely aligned with elements. + **Why?** components have templates containing HTML and optional Angular template syntax. They are most associated with putting content on a page, and thus are more closely aligned with elements. .s-why :marked - **Why?** Components are derived from Directives, and thus their selectors can be elements, attributes, or other selectors. Defining the selector as an element provides consistency for components that represent content with a template. + **Why?** A component represents a visual element on the page. + Defining the selector as an HTML element tag is consistent with native HTML elements and WebComponents. .s-why.s-why-last :marked @@ -1367,11 +1642,11 @@ a(href="#toc") Back to top .s-rule.do :marked - **Do** name the template file `[component-name].component.html`, where [component-name] is our component name. + **Do** name the template file `[component-name].component.html`, where [component-name] is the component name. .s-rule.do :marked - **Do** name the style file `[component-name].component.css`, where [component-name] is our component name. + **Do** name the style file `[component-name].component.css`, where [component-name] is the component name. .s-why :marked @@ -1415,7 +1690,10 @@ a(href="#toc") Back to top .s-why :marked - **Why?** If we ever need to rename the property or event name associated to [`@Input`](https://angular.io/docs/ts/latest/api/core/index/Input-var.html) or [`@Output`](https://angular.io/docs/ts/latest/api/core/index/Output-var.html) we can modify it on a single place. + **Why?** If you ever need to rename the property or event name associated to + [`@Input`](https://angular.io/docs/ts/latest/api/core/index/Input-var.html) or + [`@Output`](https://angular.io/docs/ts/latest/api/core/index/Output-var.html) + you can modify it on a single place. .s-why :marked @@ -1477,7 +1755,8 @@ a(href="#toc") Back to top .s-why.s-why-last :marked - **Why?** Placing members in a consistent sequence makes it easy to read and helps we instantly identify which members of the component serve which purpose. + **Why?** Placing members in a consistent sequence makes it easy to read and + helps instantly identify which members of the component serve which purpose. +makeExample('style-guide/ts/05-14/app/shared/toast/toast.component.avoid.ts', 'example', 'app/shared/toast/toast.component.ts')(avoid=1) :marked @@ -1535,7 +1814,7 @@ a(href="#toc") Back to top .s-rule.do :marked - **Do** name our event handler methods with the prefix `on` followed by the event name. + **Do** name event handler methods with the prefix `on` followed by the event name. .s-why :marked @@ -1568,11 +1847,11 @@ a(href="#toc") Back to top .s-rule.do :marked - **Do** put presentation logic in the Component class, and not in the template. + **Do** put presentation logic in the component class, and not in the template. .s-why :marked - **Why?** Logic will be contained in one place (the Component class) instead of being spread in two places. + **Why?** Logic will be contained in one place (the component class) instead of being spread in two places. .s-why.s-why-last :marked @@ -1622,22 +1901,31 @@ a(href="#toc") Back to top ### Use HostListener and HostBinding Class Decorators #### Style 06-03 +.s-rule.consider + :marked + **Consider** preferring the `@HostListener` and `@HostBinding` to the + `host` property of the `@Directive` and `@Component` decorators. + .s-rule.do :marked - **Do** use @HostListener and @HostBinding instead of the host property of the @Directive and @Component decorators: - -.s-why - :marked - **Why?** The property or method name associated with @HostBinding or respectively @HostListener should be modified only in a single place - in the directive's class. In contrast if we use host we need to modify both the property declaration inside the controller, and the metadata associated to the directive. + **Do** be consistent in your choice. .s-why.s-why-last :marked - **Why?** The metadata declaration attached to the directive is shorter and thus more readable. + **Why?** The property associated with `@HostBinding` or the method associated with `@HostListener` + can be modified only in a single place - in the directive's class. + If you use the `host` metadata property, you must modify both the property declaration inside the controller, + and the metadata associated with the directive. -+makeExample('style-guide/ts/06-03/app/shared/validator.directive.avoid.ts', 'example', 'app/shared/validator.directive.ts')(avoid=1) ++makeExample('style-guide/ts/06-03/app/shared/validator.directive.ts', '', 'app/shared/validator.directive.ts') :marked + Compare with the less preferred `host` metadata alternative. -+makeExample('style-guide/ts/06-03/app/shared/validator.directive.ts', 'example', 'app/shared/validator.directive.ts') +.s-why.s-why-last + :marked + **Why?** The `host` metadata is only one term to remember and doesn't require extra ES imports. + ++makeExample('style-guide/ts/06-03/app/shared/validator2.directive.ts', '', 'app/shared/validator2.directive.ts') :marked a(href="#toc") Back to top @@ -1646,7 +1934,7 @@ a(href="#toc") Back to top :marked ## Services - ### Services are Singletons in Same Injector + ### Services are Singletons within an Injector #### Style 07-01 .s-rule.do @@ -1685,7 +1973,7 @@ a(href="#toc") Back to top .s-why.s-why-last :marked - **Why?** When a service has multiple responsibilities, every Component or Service that injects it now carries the weight of them all. + **Why?** When a service has multiple responsibilities, every component or service that injects it now carries the weight of them all. a(href="#toc") Back to top @@ -1735,7 +2023,7 @@ a(href="#toc") Back to top .s-why :marked - **Why?** The Angular DI mechanism resolves all the dependencies of our services based on their types declared with the services' constructors. + **Why?** The Angular DI mechanism resolves all dependencies of services based on their types declared with the services' constructors. .s-why.s-why-last :marked @@ -1797,8 +2085,8 @@ a(href="#toc") Back to top .s-why.s-why-last :marked - **Why?** We get strong typing for the method signatures. - The compiler and editor can call our attention to misspellings. + **Why?** Strongly-typed method signatures. + The compiler and editor can call out misspellings. +makeExample('style-guide/ts/09-01/app/heroes/shared/hero-button/hero-button.component.avoid.ts', 'example', 'app/heroes/shared/hero-button/hero-button.component.ts')(avoid=1) :marked diff --git a/public/resources/css/module/_style-guide.scss b/public/resources/css/module/_style-guide.scss index 1ac9dd564b..4aa267f3a0 100644 --- a/public/resources/css/module/_style-guide.scss +++ b/public/resources/css/module/_style-guide.scss @@ -44,3 +44,8 @@ table tr code-example .prettyprint { margin-bottom: 0; } + +.file-tree-reference { + margin-bottom: 20px; + margin-top: 20px; +} From e82f28b84465af89b22fcb79532f3c5c5120df93 Mon Sep 17 00:00:00 2001 From: Alireza Mirian Date: Tue, 27 Sep 2016 11:29:45 +0330 Subject: [PATCH 03/11] fix(guide/form): fix a typo (#2483) --- public/docs/ts/latest/guide/forms.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/docs/ts/latest/guide/forms.jade b/public/docs/ts/latest/guide/forms.jade index d1e746f46b..5d1377005b 100644 --- a/public/docs/ts/latest/guide/forms.jade +++ b/public/docs/ts/latest/guide/forms.jade @@ -208,7 +208,7 @@ code-example(format=""). :marked .l-sub-section :marked - There is only one changes: + There is only one change: 1. The `template` is simply the new element tag identified by the component's `selector` property. This will display the hero form when the application component is loaded. From 66c630df997e88001e67157e460d59504ea46862 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Rodr=C3=ADguez?= Date: Tue, 27 Sep 2016 09:22:38 +0100 Subject: [PATCH 04/11] docs(upgrade): update to latest release + tweaks (#2460) --- .../ts/app/1-2-hybrid-bootstrap/app.module.ts | 21 +- .../upgrade_adapter.ts | 15 +- .../ts/app/1-to-2-projection/app.module.ts | 10 +- .../app/1-to-2-providers/upgrade_adapter.ts | 18 +- .../ts/app/2-to-1-providers/app.module.ts | 2 - .../app/2-to-1-providers/upgrade_adapter.ts | 18 +- .../container.component.ts | 6 +- .../2-to-1-transclusion/upgrade_adapter.ts | 19 +- .../ts/app/downgrade-io/app.module.ts | 12 +- .../ts/app/downgrade-static/app.module.ts | 13 +- .../ts/app/upgrade-io/container.component.ts | 6 +- .../ts/app/upgrade-io/upgrade_adapter.ts | 19 +- .../app/upgrade-static/container.component.ts | 6 +- .../ts/app/upgrade-static/upgrade_adapter.ts | 22 +- .../ts/index-1-2-hybrid-bootstrap.html | 3 - ...x-1-2-hybrid-shared-adapter-bootstrap.html | 3 - .../ts/index-1-to-2-projection.html | 3 - .../ts/index-1-to-2-providers.html | 3 - .../ts/index-2-to-1-providers.html | 3 - .../ts/index-2-to-1-transclusion.html | 3 - .../ts/index-downgrade-io.html | 3 - .../ts/index-downgrade-static.html | 3 - .../upgrade-adapter/ts/index-upgrade-io.html | 3 - .../ts/index-upgrade-static.html | 3 - .../ts/app/app.module.ng1.ts | 11 + .../ts/app/app.module.ts | 59 ++- .../app/core/checkmark/checkmark.pipe.spec.ts | 18 +- .../ts/app/core/checkmark/checkmark.pipe.ts | 2 - .../ts/app/core/phone/phone.service.spec.ts | 42 +- .../ts/app/img/phones/dell-venue.0.jpg | Bin 0 -> 22965 bytes .../phones/droid-2-global-by-motorola.0.jpg | Bin 0 -> 16729 bytes .../img/phones/droid-pro-by-motorola.0.jpg | Bin 0 -> 38713 bytes .../ts/app/img/phones/lg-axis.0.jpg | Bin 0 -> 40932 bytes .../phones/motorola-bravo-with-motoblur.0.jpg | Bin 0 -> 28478 bytes .../phones/motorola-charm-with-motoblur.0.jpg | Bin 0 -> 40906 bytes .../phones/motorola-defy-with-motoblur.0.jpg | Bin 0 -> 31971 bytes .../app/img/phones/samsung-galaxy-tab.0.jpg | Bin 0 -> 28506 bytes .../ts/app/img/phones/samsung-gem.0.jpg | Bin 0 -> 27422 bytes .../samsung-mesmerize-a-galaxy-s-phone.0.jpg | Bin 0 -> 28199 bytes .../samsung-showcase-a-galaxy-s-phone.0.jpg | Bin 0 -> 28199 bytes .../ts/app/img/phones/samsung-transform.0.jpg | Bin 0 -> 26408 bytes .../ts/app/img/phones/sanyo-zio.0.jpg | Bin 0 -> 27210 bytes .../ts/app/img/phones/t-mobile-g2.0.jpg | Bin 0 -> 27371 bytes .../app/img/phones/t-mobile-mytouch-4g.0.jpg | Bin 0 -> 28678 bytes .../upgrade-phonecat-2-hybrid/ts/app/main.ts | 21 +- .../phone-detail.component.spec.ts | 59 ++- .../phone-detail/phone-detail.component.ts | 3 +- .../phone-list/phone-list.component.spec.ts | 100 ++-- .../ts/app/phone-list/phone-list.component.ts | 28 +- .../upgrade-phonecat-2-hybrid/ts/index.html | 2 +- .../ts/karma-test-shim.1.js | 78 ++- .../ts/karma.conf.ng1.js | 3 +- .../ts/systemjs.config.1.js | 94 ++-- .../{e2e-spec.ts.disabled => e2e-spec.ts} | 0 .../ts/app/app-routing.module.ts | 23 + .../ts/app/app.component.ts | 11 +- .../ts/app/app.module.ts | 34 ++ .../app/core/checkmark/checkmark.pipe.spec.ts | 21 +- .../ts/app/core/phone/phone.service.spec.ts | 30 +- .../ts/app/img/phones/dell-venue.0.jpg | Bin 0 -> 22965 bytes .../phones/droid-2-global-by-motorola.0.jpg | Bin 0 -> 16729 bytes .../img/phones/droid-pro-by-motorola.0.jpg | Bin 0 -> 38713 bytes .../ts/app/img/phones/lg-axis.0.jpg | Bin 0 -> 40932 bytes .../phones/motorola-bravo-with-motoblur.0.jpg | Bin 0 -> 28478 bytes .../phones/motorola-charm-with-motoblur.0.jpg | Bin 0 -> 40906 bytes .../phones/motorola-defy-with-motoblur.0.jpg | Bin 0 -> 31971 bytes .../app/img/phones/samsung-galaxy-tab.0.jpg | Bin 0 -> 28506 bytes .../ts/app/img/phones/samsung-gem.0.jpg | Bin 0 -> 27422 bytes .../samsung-mesmerize-a-galaxy-s-phone.0.jpg | Bin 0 -> 28199 bytes .../samsung-showcase-a-galaxy-s-phone.0.jpg | Bin 0 -> 28199 bytes .../ts/app/img/phones/samsung-transform.0.jpg | Bin 0 -> 26408 bytes .../ts/app/img/phones/sanyo-zio.0.jpg | Bin 0 -> 27210 bytes .../ts/app/img/phones/t-mobile-g2.0.jpg | Bin 0 -> 27371 bytes .../app/img/phones/t-mobile-mytouch-4g.0.jpg | Bin 0 -> 28678 bytes .../upgrade-phonecat-3-final/ts/app/main.ts | 25 +- .../phone-detail.component.spec.ts | 64 +-- .../phone-detail/phone-detail.component.ts | 20 +- .../phone-list/phone-list.component.spec.ts | 111 ++--- .../ts/app/phone-list/phone-list.component.ts | 31 +- .../app/phone-list/phone-list.template.html | 4 +- .../ts/karma.conf.ng1.js | 3 +- .../ts/systemjs.config.1.js | 94 ++-- public/docs/ts/latest/guide/upgrade.jade | 444 +++++++++--------- 83 files changed, 903 insertions(+), 749 deletions(-) create mode 100644 public/docs/_examples/upgrade-phonecat-2-hybrid/ts/app/app.module.ng1.ts create mode 100644 public/docs/_examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/dell-venue.0.jpg create mode 100644 public/docs/_examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/droid-2-global-by-motorola.0.jpg create mode 100644 public/docs/_examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/droid-pro-by-motorola.0.jpg create mode 100644 public/docs/_examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/lg-axis.0.jpg create mode 100644 public/docs/_examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-bravo-with-motoblur.0.jpg create mode 100644 public/docs/_examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-charm-with-motoblur.0.jpg create mode 100644 public/docs/_examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-defy-with-motoblur.0.jpg create mode 100644 public/docs/_examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/samsung-galaxy-tab.0.jpg create mode 100644 public/docs/_examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/samsung-gem.0.jpg create mode 100644 public/docs/_examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/samsung-mesmerize-a-galaxy-s-phone.0.jpg create mode 100644 public/docs/_examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/samsung-showcase-a-galaxy-s-phone.0.jpg create mode 100644 public/docs/_examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/samsung-transform.0.jpg create mode 100644 public/docs/_examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/sanyo-zio.0.jpg create mode 100644 public/docs/_examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/t-mobile-g2.0.jpg create mode 100644 public/docs/_examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/t-mobile-mytouch-4g.0.jpg rename public/docs/_examples/upgrade-phonecat-3-final/{e2e-spec.ts.disabled => e2e-spec.ts} (100%) create mode 100644 public/docs/_examples/upgrade-phonecat-3-final/ts/app/app-routing.module.ts create mode 100644 public/docs/_examples/upgrade-phonecat-3-final/ts/app/app.module.ts create mode 100644 public/docs/_examples/upgrade-phonecat-3-final/ts/app/img/phones/dell-venue.0.jpg create mode 100644 public/docs/_examples/upgrade-phonecat-3-final/ts/app/img/phones/droid-2-global-by-motorola.0.jpg create mode 100644 public/docs/_examples/upgrade-phonecat-3-final/ts/app/img/phones/droid-pro-by-motorola.0.jpg create mode 100644 public/docs/_examples/upgrade-phonecat-3-final/ts/app/img/phones/lg-axis.0.jpg create mode 100644 public/docs/_examples/upgrade-phonecat-3-final/ts/app/img/phones/motorola-bravo-with-motoblur.0.jpg create mode 100644 public/docs/_examples/upgrade-phonecat-3-final/ts/app/img/phones/motorola-charm-with-motoblur.0.jpg create mode 100644 public/docs/_examples/upgrade-phonecat-3-final/ts/app/img/phones/motorola-defy-with-motoblur.0.jpg create mode 100644 public/docs/_examples/upgrade-phonecat-3-final/ts/app/img/phones/samsung-galaxy-tab.0.jpg create mode 100644 public/docs/_examples/upgrade-phonecat-3-final/ts/app/img/phones/samsung-gem.0.jpg create mode 100644 public/docs/_examples/upgrade-phonecat-3-final/ts/app/img/phones/samsung-mesmerize-a-galaxy-s-phone.0.jpg create mode 100644 public/docs/_examples/upgrade-phonecat-3-final/ts/app/img/phones/samsung-showcase-a-galaxy-s-phone.0.jpg create mode 100644 public/docs/_examples/upgrade-phonecat-3-final/ts/app/img/phones/samsung-transform.0.jpg create mode 100644 public/docs/_examples/upgrade-phonecat-3-final/ts/app/img/phones/sanyo-zio.0.jpg create mode 100644 public/docs/_examples/upgrade-phonecat-3-final/ts/app/img/phones/t-mobile-g2.0.jpg create mode 100644 public/docs/_examples/upgrade-phonecat-3-final/ts/app/img/phones/t-mobile-mytouch-4g.0.jpg diff --git a/public/docs/_examples/upgrade-adapter/ts/app/1-2-hybrid-bootstrap/app.module.ts b/public/docs/_examples/upgrade-adapter/ts/app/1-2-hybrid-bootstrap/app.module.ts index b4926d8c69..6ac76407b1 100644 --- a/public/docs/_examples/upgrade-adapter/ts/app/1-2-hybrid-bootstrap/app.module.ts +++ b/public/docs/_examples/upgrade-adapter/ts/app/1-2-hybrid-bootstrap/app.module.ts @@ -1,18 +1,29 @@ declare var angular: any; +// #docregion ngmodule +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; + +@NgModule({ + imports: [ BrowserModule ] +}) +export class AppModule {} +// #enddocregion ngmodule +angular.module('heroApp', []) + .controller('MainCtrl', function() { + this.message = 'Hello world'; + }); + // #docregion bootstrap import { UpgradeAdapter } from '@angular/upgrade'; // #enddocregion bootstrap -angular.module('heroApp', []) - .controller('MainCtrl', function() { - this.message = 'Hello world'; - }); +// This blank is expected to trigger the docplaster // #docregion bootstrap -const upgradeAdapter = new UpgradeAdapter(); +const upgradeAdapter = new UpgradeAdapter(AppModule); upgradeAdapter.bootstrap(document.body, ['heroApp'], {strictDi: true}); // #enddocregion bootstrap diff --git a/public/docs/_examples/upgrade-adapter/ts/app/1-2-hybrid-shared-adapter-bootstrap/upgrade_adapter.ts b/public/docs/_examples/upgrade-adapter/ts/app/1-2-hybrid-shared-adapter-bootstrap/upgrade_adapter.ts index f6066f9109..6ccaa31b9c 100644 --- a/public/docs/_examples/upgrade-adapter/ts/app/1-2-hybrid-shared-adapter-bootstrap/upgrade_adapter.ts +++ b/public/docs/_examples/upgrade-adapter/ts/app/1-2-hybrid-shared-adapter-bootstrap/upgrade_adapter.ts @@ -1,3 +1,16 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; + +@NgModule({ + imports: [ BrowserModule ] +}) +export class AppModule {} + +angular.module('heroApp', []) + .controller('MainCtrl', function() { + this.message = 'Hello world'; + }); + // #docregion import { UpgradeAdapter } from '@angular/upgrade'; -export const upgradeAdapter = new UpgradeAdapter(); +export const upgradeAdapter = new UpgradeAdapter(AppModule); diff --git a/public/docs/_examples/upgrade-adapter/ts/app/1-to-2-projection/app.module.ts b/public/docs/_examples/upgrade-adapter/ts/app/1-to-2-projection/app.module.ts index ad48568e09..5daeb671e3 100644 --- a/public/docs/_examples/upgrade-adapter/ts/app/1-to-2-projection/app.module.ts +++ b/public/docs/_examples/upgrade-adapter/ts/app/1-to-2-projection/app.module.ts @@ -1,10 +1,18 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; import { UpgradeAdapter } from '@angular/upgrade'; import { MainController } from './main.controller'; import { HeroDetailComponent } from './hero-detail.component'; +@NgModule({ + imports: [ BrowserModule ], + declarations: [ HeroDetailComponent ] +}) +export class AppModule {} + declare var angular: any; -const upgradeAdapter = new UpgradeAdapter(); +const upgradeAdapter = new UpgradeAdapter(AppModule); angular.module('heroApp', []) .controller('MainController', MainController) diff --git a/public/docs/_examples/upgrade-adapter/ts/app/1-to-2-providers/upgrade_adapter.ts b/public/docs/_examples/upgrade-adapter/ts/app/1-to-2-providers/upgrade_adapter.ts index f6066f9109..c98ab182a8 100644 --- a/public/docs/_examples/upgrade-adapter/ts/app/1-to-2-providers/upgrade_adapter.ts +++ b/public/docs/_examples/upgrade-adapter/ts/app/1-to-2-providers/upgrade_adapter.ts @@ -1,3 +1,19 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; + +import { HeroDetailComponent } from './hero-detail.component'; + +@NgModule({ + imports: [ BrowserModule ], + declarations: [ HeroDetailComponent ] +}) +export class AppModule {} + +angular.module('heroApp', []) + .controller('MainCtrl', function() { + this.message = 'Hello world'; + }); + // #docregion import { UpgradeAdapter } from '@angular/upgrade'; -export const upgradeAdapter = new UpgradeAdapter(); +export const upgradeAdapter = new UpgradeAdapter(AppModule); diff --git a/public/docs/_examples/upgrade-adapter/ts/app/2-to-1-providers/app.module.ts b/public/docs/_examples/upgrade-adapter/ts/app/2-to-1-providers/app.module.ts index 9ab3f70e94..16b77819c5 100644 --- a/public/docs/_examples/upgrade-adapter/ts/app/2-to-1-providers/app.module.ts +++ b/public/docs/_examples/upgrade-adapter/ts/app/2-to-1-providers/app.module.ts @@ -5,8 +5,6 @@ import { upgradeAdapter } from './upgrade_adapter'; declare var angular: any; // #docregion register -upgradeAdapter.addProvider(Heroes); - angular.module('heroApp', []) .factory('heroes', upgradeAdapter.downgradeNg2Provider(Heroes)) .component('heroDetail', heroDetailComponent); diff --git a/public/docs/_examples/upgrade-adapter/ts/app/2-to-1-providers/upgrade_adapter.ts b/public/docs/_examples/upgrade-adapter/ts/app/2-to-1-providers/upgrade_adapter.ts index f6066f9109..d99d587f0f 100644 --- a/public/docs/_examples/upgrade-adapter/ts/app/2-to-1-providers/upgrade_adapter.ts +++ b/public/docs/_examples/upgrade-adapter/ts/app/2-to-1-providers/upgrade_adapter.ts @@ -1,3 +1,19 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +// #docregion ngmodule +import { Heroes } from './heroes'; + +@NgModule({ + imports: [ BrowserModule ], + providers: [ Heroes ] +}) +export class AppModule {} +// #enddocregion ngmodule +angular.module('heroApp', []) + .controller('MainCtrl', function() { + this.message = 'Hello world'; + }); + // #docregion import { UpgradeAdapter } from '@angular/upgrade'; -export const upgradeAdapter = new UpgradeAdapter(); +export const upgradeAdapter = new UpgradeAdapter(AppModule); diff --git a/public/docs/_examples/upgrade-adapter/ts/app/2-to-1-transclusion/container.component.ts b/public/docs/_examples/upgrade-adapter/ts/app/2-to-1-transclusion/container.component.ts index a468898e5f..1b740d6554 100644 --- a/public/docs/_examples/upgrade-adapter/ts/app/2-to-1-transclusion/container.component.ts +++ b/public/docs/_examples/upgrade-adapter/ts/app/2-to-1-transclusion/container.component.ts @@ -1,10 +1,7 @@ // #docregion import { Component } from '@angular/core'; -import { upgradeAdapter } from './upgrade_adapter'; import { Hero } from '../hero'; -const HeroDetail = upgradeAdapter.upgradeNg1Component('heroDetail'); - @Component({ selector: 'my-container', template: ` @@ -12,8 +9,7 @@ const HeroDetail = upgradeAdapter.upgradeNg1Component('heroDetail');

{{hero.description}}

- `, - directives: [HeroDetail] + ` }) export class ContainerComponent { hero = new Hero(1, 'Windstorm', 'Specific powers of controlling winds'); diff --git a/public/docs/_examples/upgrade-adapter/ts/app/2-to-1-transclusion/upgrade_adapter.ts b/public/docs/_examples/upgrade-adapter/ts/app/2-to-1-transclusion/upgrade_adapter.ts index f6066f9109..b0f947c8e5 100644 --- a/public/docs/_examples/upgrade-adapter/ts/app/2-to-1-transclusion/upgrade_adapter.ts +++ b/public/docs/_examples/upgrade-adapter/ts/app/2-to-1-transclusion/upgrade_adapter.ts @@ -1,3 +1,20 @@ // #docregion import { UpgradeAdapter } from '@angular/upgrade'; -export const upgradeAdapter = new UpgradeAdapter(); +import { NgModule, forwardRef } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; + +import { ContainerComponent } from './container.component'; + +export const upgradeAdapter = new UpgradeAdapter(forwardRef(() => AppModule)); +const HeroDetail = upgradeAdapter.upgradeNg1Component('heroDetail'); + +@NgModule({ + imports: [ BrowserModule ], + declarations: [ ContainerComponent, HeroDetail ] +}) +export class AppModule {} + +angular.module('heroApp', []) + .controller('MainCtrl', function() { + this.message = 'Hello world'; + }); diff --git a/public/docs/_examples/upgrade-adapter/ts/app/downgrade-io/app.module.ts b/public/docs/_examples/upgrade-adapter/ts/app/downgrade-io/app.module.ts index d9af4e0104..a09db040d1 100644 --- a/public/docs/_examples/upgrade-adapter/ts/app/downgrade-io/app.module.ts +++ b/public/docs/_examples/upgrade-adapter/ts/app/downgrade-io/app.module.ts @@ -1,11 +1,21 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; + import { MainController } from './main.controller'; // #docregion downgradecomponent import { HeroDetailComponent } from './hero-detail.component'; // #enddocregion downgradecomponent + +@NgModule({ + imports: [ BrowserModule ], + declarations: [ HeroDetailComponent ] +}) +export class AppModule {} + import { UpgradeAdapter } from '@angular/upgrade'; -const upgradeAdapter = new UpgradeAdapter(); +const upgradeAdapter = new UpgradeAdapter(AppModule); // #docregion downgradecomponent diff --git a/public/docs/_examples/upgrade-adapter/ts/app/downgrade-static/app.module.ts b/public/docs/_examples/upgrade-adapter/ts/app/downgrade-static/app.module.ts index 44935340f0..d5f173b5b5 100644 --- a/public/docs/_examples/upgrade-adapter/ts/app/downgrade-static/app.module.ts +++ b/public/docs/_examples/upgrade-adapter/ts/app/downgrade-static/app.module.ts @@ -1,10 +1,19 @@ -// #docregion downgradecomponent +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; + +// #docregion downgradecomponent, ngmodule import { HeroDetailComponent } from './hero-detail.component'; // #enddocregion downgradecomponent +@NgModule({ + imports: [ BrowserModule ], + declarations: [ HeroDetailComponent ] +}) +export class AppModule {} +// #enddocregion ngmodule import { UpgradeAdapter } from '@angular/upgrade'; -const upgradeAdapter = new UpgradeAdapter(); +const upgradeAdapter = new UpgradeAdapter(AppModule); // #docregion downgradecomponent diff --git a/public/docs/_examples/upgrade-adapter/ts/app/upgrade-io/container.component.ts b/public/docs/_examples/upgrade-adapter/ts/app/upgrade-io/container.component.ts index 0055370ea8..8d76085174 100644 --- a/public/docs/_examples/upgrade-adapter/ts/app/upgrade-io/container.component.ts +++ b/public/docs/_examples/upgrade-adapter/ts/app/upgrade-io/container.component.ts @@ -1,10 +1,7 @@ // #docregion import { Component } from '@angular/core'; -import { upgradeAdapter } from './upgrade_adapter'; import { Hero } from '../hero'; -const HeroDetail = upgradeAdapter.upgradeNg1Component('heroDetail'); - @Component({ selector: 'my-container', template: ` @@ -12,8 +9,7 @@ const HeroDetail = upgradeAdapter.upgradeNg1Component('heroDetail'); - `, - directives: [HeroDetail] + ` }) export class ContainerComponent { hero = new Hero(1, 'Windstorm'); diff --git a/public/docs/_examples/upgrade-adapter/ts/app/upgrade-io/upgrade_adapter.ts b/public/docs/_examples/upgrade-adapter/ts/app/upgrade-io/upgrade_adapter.ts index f6066f9109..b0f947c8e5 100644 --- a/public/docs/_examples/upgrade-adapter/ts/app/upgrade-io/upgrade_adapter.ts +++ b/public/docs/_examples/upgrade-adapter/ts/app/upgrade-io/upgrade_adapter.ts @@ -1,3 +1,20 @@ // #docregion import { UpgradeAdapter } from '@angular/upgrade'; -export const upgradeAdapter = new UpgradeAdapter(); +import { NgModule, forwardRef } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; + +import { ContainerComponent } from './container.component'; + +export const upgradeAdapter = new UpgradeAdapter(forwardRef(() => AppModule)); +const HeroDetail = upgradeAdapter.upgradeNg1Component('heroDetail'); + +@NgModule({ + imports: [ BrowserModule ], + declarations: [ ContainerComponent, HeroDetail ] +}) +export class AppModule {} + +angular.module('heroApp', []) + .controller('MainCtrl', function() { + this.message = 'Hello world'; + }); diff --git a/public/docs/_examples/upgrade-adapter/ts/app/upgrade-static/container.component.ts b/public/docs/_examples/upgrade-adapter/ts/app/upgrade-static/container.component.ts index ca8a93dd26..1e3ebf509b 100644 --- a/public/docs/_examples/upgrade-adapter/ts/app/upgrade-static/container.component.ts +++ b/public/docs/_examples/upgrade-adapter/ts/app/upgrade-static/container.component.ts @@ -1,16 +1,12 @@ // #docregion import { Component } from '@angular/core'; -import { upgradeAdapter } from './upgrade_adapter'; - -const HeroDetail = upgradeAdapter.upgradeNg1Component('heroDetail'); @Component({ selector: 'my-container', template: `

Tour of Heroes

- `, - directives: [HeroDetail] + ` }) export class ContainerComponent { diff --git a/public/docs/_examples/upgrade-adapter/ts/app/upgrade-static/upgrade_adapter.ts b/public/docs/_examples/upgrade-adapter/ts/app/upgrade-static/upgrade_adapter.ts index f6066f9109..c9173347bc 100644 --- a/public/docs/_examples/upgrade-adapter/ts/app/upgrade-static/upgrade_adapter.ts +++ b/public/docs/_examples/upgrade-adapter/ts/app/upgrade-static/upgrade_adapter.ts @@ -1,3 +1,23 @@ // #docregion import { UpgradeAdapter } from '@angular/upgrade'; -export const upgradeAdapter = new UpgradeAdapter(); +import { NgModule, forwardRef } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; + +import { ContainerComponent } from './container.component'; + +export const upgradeAdapter = new UpgradeAdapter(forwardRef(() => AppModule)); + +// #docregion heroupgrade +const HeroDetail = upgradeAdapter.upgradeNg1Component('heroDetail'); + +@NgModule({ + imports: [ BrowserModule ], + declarations: [ ContainerComponent, HeroDetail ] +}) +export class AppModule {} +// #enddocregion heroupgrade + +angular.module('heroApp', []) + .controller('MainCtrl', function() { + this.message = 'Hello world'; + }); diff --git a/public/docs/_examples/upgrade-adapter/ts/index-1-2-hybrid-bootstrap.html b/public/docs/_examples/upgrade-adapter/ts/index-1-2-hybrid-bootstrap.html index ff5481a40d..fc090c9eb9 100644 --- a/public/docs/_examples/upgrade-adapter/ts/index-1-2-hybrid-bootstrap.html +++ b/public/docs/_examples/upgrade-adapter/ts/index-1-2-hybrid-bootstrap.html @@ -16,9 +16,6 @@ - - - - - - - - - - - + diff --git a/public/docs/_examples/upgrade-phonecat-2-hybrid/ts/karma-test-shim.1.js b/public/docs/_examples/upgrade-phonecat-2-hybrid/ts/karma-test-shim.1.js index 31589119d2..19fcc89fe9 100644 --- a/public/docs/_examples/upgrade-phonecat-2-hybrid/ts/karma-test-shim.1.js +++ b/public/docs/_examples/upgrade-phonecat-2-hybrid/ts/karma-test-shim.1.js @@ -1,21 +1,25 @@ // #docregion // /*global jasmine, __karma__, window*/ -Error.stackTraceLimit = Infinity; +Error.stackTraceLimit = 0; // "No stacktrace"" is usually best for app testing. + +// Uncomment to get full stacktrace output. Sometimes helpful, usually not. +// Error.stackTraceLimit = Infinity; // + jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000; -__karma__.loaded = function () { -}; +var builtPath = '/base/app/'; + +__karma__.loaded = function () { }; function isJsFile(path) { return path.slice(-3) == '.js'; } function isSpecFile(path) { - return /\.spec\.js$/.test(path); + return /\.spec\.(.*\.)?js$/.test(path); } function isBuiltFile(path) { - var builtPath = '/base/app/'; return isJsFile(path) && (path.substr(0, builtPath.length) == builtPath); } @@ -25,27 +29,61 @@ var allSpecFiles = Object.keys(window.__karma__.files) System.config({ baseURL: '/base', - packageWithIndex: true // sadly, we can't use umd packages (yet?) + // Extend usual application package list with test folder + packages: { 'testing': { main: 'index.js', defaultExtension: 'js' } }, + + // Assume npm: is set in `paths` in systemjs.config + // Map the angular testing umd bundles + map: { + '@angular/core/testing': 'npm:@angular/core/bundles/core-testing.umd.js', + '@angular/common/testing': 'npm:@angular/common/bundles/common-testing.umd.js', + '@angular/compiler/testing': 'npm:@angular/compiler/bundles/compiler-testing.umd.js', + '@angular/platform-browser/testing': 'npm:@angular/platform-browser/bundles/platform-browser-testing.umd.js', + '@angular/platform-browser-dynamic/testing': 'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic-testing.umd.js', + '@angular/http/testing': 'npm:@angular/http/bundles/http-testing.umd.js', + '@angular/router/testing': 'npm:@angular/router/bundles/router-testing.umd.js', + '@angular/forms/testing': 'npm:@angular/forms/bundles/forms-testing.umd.js', + }, }); System.import('systemjs.config.js') - .then(() => Promise.all([ - System.import('@angular/core/testing'), - System.import('@angular/platform-browser-dynamic/testing') - ])) - .then((providers) => { - var coreTesting = providers[0]; + .then(importSystemJsExtras) + .then(initTestBed) + .then(initTesting); + +/** Optional SystemJS configuration extras. Keep going w/o it */ +function importSystemJsExtras(){ + return System.import('systemjs.config.extras.js') + .catch(function(reason) { + console.log( + 'Warning: System.import could not load the optional "systemjs.config.extras.js". Did you omit it by accident? Continuing without it.' + ); + console.log(reason); + }); +} + +function initTestBed(){ + return Promise.all([ + System.import('@angular/core/testing'), + System.import('@angular/platform-browser-dynamic/testing') + ]) + + .then(function (providers) { + var coreTesting = providers[0]; var browserTesting = providers[1]; + coreTesting.TestBed.initTestEnvironment( browserTesting.BrowserDynamicTestingModule, browserTesting.platformBrowserDynamicTesting()); }) - .then(function () { - // Finally, load all spec files. - // This will run the tests directly. - return Promise.all( - allSpecFiles.map(function (moduleName) { - return System.import(moduleName); - })); - }) +} + +// Import all spec files and start karma +function initTesting () { + return Promise.all( + allSpecFiles.map(function (moduleName) { + return System.import(moduleName); + }) + ) .then(__karma__.start, __karma__.error); +} diff --git a/public/docs/_examples/upgrade-phonecat-2-hybrid/ts/karma.conf.ng1.js b/public/docs/_examples/upgrade-phonecat-2-hybrid/ts/karma.conf.ng1.js index 48cc490f89..3decfbdd3e 100644 --- a/public/docs/_examples/upgrade-phonecat-2-hybrid/ts/karma.conf.ng1.js +++ b/public/docs/_examples/upgrade-phonecat-2-hybrid/ts/karma.conf.ng1.js @@ -63,11 +63,10 @@ module.exports = function(config) { frameworks: ['jasmine'], - browsers: ['Chrome', 'Firefox'], + browsers: ['Chrome'], plugins: [ 'karma-chrome-launcher', - 'karma-firefox-launcher', 'karma-jasmine' ] diff --git a/public/docs/_examples/upgrade-phonecat-2-hybrid/ts/systemjs.config.1.js b/public/docs/_examples/upgrade-phonecat-2-hybrid/ts/systemjs.config.1.js index a54f8bb20c..18b947dbb5 100644 --- a/public/docs/_examples/upgrade-phonecat-2-hybrid/ts/systemjs.config.1.js +++ b/public/docs/_examples/upgrade-phonecat-2-hybrid/ts/systemjs.config.1.js @@ -1,59 +1,47 @@ /** - * System configuration for Angular 2 samples + * System configuration for Angular samples * Adjust as necessary for your application needs. */ -(function(global) { - - // map tells the System loader where to look for things +(function (global) { // #docregion paths - var map = { - 'app': '/app', // 'dist', - - '@angular': '/node_modules/@angular', - 'angular-in-memory-web-api': '/node_modules/angular-in-memory-web-api', - 'rxjs': '/node_modules/rxjs' - }; - - var packages = { - '/app': { main: 'main.js', defaultExtension: 'js' }, - 'rxjs': { defaultExtension: 'js' }, - 'angular-in-memory-web-api': { main: 'index.js', defaultExtension: 'js' }, - }; - // #enddocregion paths - - var ngPackageNames = [ - 'common', - 'compiler', - 'core', - 'forms', - 'http', - 'platform-browser', - 'platform-browser-dynamic', - 'router', - 'router-deprecated', - 'upgrade', - ]; - - // Individual files (~300 requests): - function packIndex(pkgName) { - packages['@angular/'+pkgName] = { main: 'index.js', defaultExtension: 'js' }; - } - - // Bundled (~40 requests): - function packUmd(pkgName) { - packages['@angular/'+pkgName] = { main: '/bundles/' + pkgName + '.umd.js', defaultExtension: 'js' }; - } - - var setPackageConfig = System.packageWithIndex ? packIndex : packUmd; - - // Add package entries for angular packages - ngPackageNames.forEach(setPackageConfig); - - var config = { - map: map, - packages: packages - } - - System.config(config); + System.config({ + paths: { + // paths serve as alias + 'npm:': '/node_modules/' + }, + map: { + app: '/app', + // #enddocregion paths + // angular bundles + '@angular/core': 'npm:@angular/core/bundles/core.umd.js', + '@angular/common': 'npm:@angular/common/bundles/common.umd.js', + '@angular/compiler': 'npm:@angular/compiler/bundles/compiler.umd.js', + '@angular/platform-browser': 'npm:@angular/platform-browser/bundles/platform-browser.umd.js', + '@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js', + '@angular/http': 'npm:@angular/http/bundles/http.umd.js', + '@angular/router': 'npm:@angular/router/bundles/router.umd.js', + '@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js', + '@angular/upgrade': 'npm:@angular/upgrade/bundles/upgrade.umd.js', + // other libraries + 'rxjs': 'npm:rxjs', + 'angular-in-memory-web-api': 'npm:angular-in-memory-web-api', + // #docregion paths + }, + // #enddocregion paths + // packages tells the System loader how to load when no filename and/or no extension + packages: { + 'app': { + main: './main.js', + defaultExtension: 'js' + }, + rxjs: { + defaultExtension: 'js' + }, + 'angular-in-memory-web-api': { + main: './index.js', + defaultExtension: 'js' + } + } + }); })(this); diff --git a/public/docs/_examples/upgrade-phonecat-3-final/e2e-spec.ts.disabled b/public/docs/_examples/upgrade-phonecat-3-final/e2e-spec.ts similarity index 100% rename from public/docs/_examples/upgrade-phonecat-3-final/e2e-spec.ts.disabled rename to public/docs/_examples/upgrade-phonecat-3-final/e2e-spec.ts diff --git a/public/docs/_examples/upgrade-phonecat-3-final/ts/app/app-routing.module.ts b/public/docs/_examples/upgrade-phonecat-3-final/ts/app/app-routing.module.ts new file mode 100644 index 0000000000..16a72b069e --- /dev/null +++ b/public/docs/_examples/upgrade-phonecat-3-final/ts/app/app-routing.module.ts @@ -0,0 +1,23 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; +import { APP_BASE_HREF, HashLocationStrategy, LocationStrategy } from '@angular/common'; + +import { PhoneDetailComponent } from './phone-detail/phone-detail.component'; +import { PhoneListComponent } from './phone-list/phone-list.component'; + +const routes: Routes = [ + { path: '', redirectTo: 'phones', pathMatch: 'full' }, + { path: 'phones', component: PhoneListComponent }, + { path: 'phones/:phoneId', component: PhoneDetailComponent } +]; + +@NgModule({ + imports: [ RouterModule.forRoot(routes) ], + exports: [ RouterModule ], + providers: [ + { provide: APP_BASE_HREF, useValue: '!' }, + { provide: LocationStrategy, useClass: HashLocationStrategy }, + ] +}) +export class AppRoutingModule {} diff --git a/public/docs/_examples/upgrade-phonecat-3-final/ts/app/app.component.ts b/public/docs/_examples/upgrade-phonecat-3-final/ts/app/app.component.ts index af4e91c80f..fa4e5f7f4b 100644 --- a/public/docs/_examples/upgrade-phonecat-3-final/ts/app/app.component.ts +++ b/public/docs/_examples/upgrade-phonecat-3-final/ts/app/app.component.ts @@ -1,18 +1,9 @@ // #docregion import { Component } from '@angular/core'; -import { RouteConfig, ROUTER_DIRECTIVES } from '@angular/router-deprecated'; -import { PhoneListComponent } from './phone-list/phone-list.component'; -import { PhoneDetailComponent } from './phone-detail/phone-detail.component'; -@RouteConfig([ - {path: '/phones', name: 'Phones', component: PhoneListComponent}, - {path: '/phones/:phoneId', name: 'Phone', component: PhoneDetailComponent}, - {path: '/', redirectTo: ['Phones']} -]) @Component({ selector: 'phonecat-app', - template: '', - directives: [ROUTER_DIRECTIVES] + template: '' }) export class AppComponent { } diff --git a/public/docs/_examples/upgrade-phonecat-3-final/ts/app/app.module.ts b/public/docs/_examples/upgrade-phonecat-3-final/ts/app/app.module.ts new file mode 100644 index 0000000000..58acb5bce3 --- /dev/null +++ b/public/docs/_examples/upgrade-phonecat-3-final/ts/app/app.module.ts @@ -0,0 +1,34 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { FormsModule } from '@angular/forms'; +import { HttpModule } from '@angular/http'; + +import { AppRoutingModule } from './app-routing.module'; +import { AppComponent } from './app.component'; +import { CheckmarkPipe } from './core/checkmark/checkmark.pipe'; +import { Phone } from './core/phone/phone.service'; +import { PhoneDetailComponent } from './phone-detail/phone-detail.component'; +import { PhoneListComponent } from './phone-list/phone-list.component'; + +@NgModule({ + imports: [ + BrowserModule, + FormsModule, + HttpModule, + AppRoutingModule + ], + declarations: [ + AppComponent, + PhoneListComponent, + CheckmarkPipe, + PhoneDetailComponent + ], + providers: [ + Phone, + ], + // #docregion bootstrap + bootstrap: [ AppComponent ] + // #enddocregion bootstrap +}) +export class AppModule {} diff --git a/public/docs/_examples/upgrade-phonecat-3-final/ts/app/core/checkmark/checkmark.pipe.spec.ts b/public/docs/_examples/upgrade-phonecat-3-final/ts/app/core/checkmark/checkmark.pipe.spec.ts index b3a1c59a8d..75150500a6 100644 --- a/public/docs/_examples/upgrade-phonecat-3-final/ts/app/core/checkmark/checkmark.pipe.spec.ts +++ b/public/docs/_examples/upgrade-phonecat-3-final/ts/app/core/checkmark/checkmark.pipe.spec.ts @@ -1,21 +1,10 @@ -import { - describe, - beforeEachProviders, - it, - inject, - expect -} from '@angular/core/testing'; import { CheckmarkPipe } from './checkmark.pipe'; describe('CheckmarkPipe', function() { - beforeEachProviders(() => [CheckmarkPipe]); - - it('should convert boolean values to unicode checkmark or cross', - inject([CheckmarkPipe], function(checkmarkPipe: CheckmarkPipe) { - expect(checkmarkPipe.transform(true)).toBe('\u2713'); - expect(checkmarkPipe.transform(false)).toBe('\u2718'); - }) - ); - + it('should convert boolean values to unicode checkmark or cross', function () { + const checkmarkPipe = new CheckmarkPipe(); + expect(checkmarkPipe.transform(true)).toBe('\u2713'); + expect(checkmarkPipe.transform(false)).toBe('\u2718'); + }); }); diff --git a/public/docs/_examples/upgrade-phonecat-3-final/ts/app/core/phone/phone.service.spec.ts b/public/docs/_examples/upgrade-phonecat-3-final/ts/app/core/phone/phone.service.spec.ts index c9f511913b..e3a422965b 100644 --- a/public/docs/_examples/upgrade-phonecat-3-final/ts/app/core/phone/phone.service.spec.ts +++ b/public/docs/_examples/upgrade-phonecat-3-final/ts/app/core/phone/phone.service.spec.ts @@ -1,10 +1,4 @@ -import { - describe, - beforeEach, - beforeEachProviders, - it, - inject -} from '@angular/core/testing'; +import { inject, TestBed } from '@angular/core/testing'; import { Http, BaseRequestOptions, @@ -23,15 +17,19 @@ describe('Phone', function() { ]; let mockBackend: MockBackend; - beforeEachProviders(() => [ - Phone, - MockBackend, - BaseRequestOptions, - { provide: Http, - useFactory: (backend: MockBackend, options: BaseRequestOptions) => new Http(backend, options), - deps: [MockBackend, BaseRequestOptions] - } - ]); + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + Phone, + MockBackend, + BaseRequestOptions, + { provide: Http, + useFactory: (backend: MockBackend, options: BaseRequestOptions) => new Http(backend, options), + deps: [MockBackend, BaseRequestOptions] + } + ] + }); + }); beforeEach(inject([MockBackend, Phone], (_mockBackend_: MockBackend, _phone_: Phone) => { mockBackend = _mockBackend_; diff --git a/public/docs/_examples/upgrade-phonecat-3-final/ts/app/img/phones/dell-venue.0.jpg b/public/docs/_examples/upgrade-phonecat-3-final/ts/app/img/phones/dell-venue.0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b4cb4eb25fee5302c0a0438f7727dfd4d7dc4e74 GIT binary patch literal 22965 zcmb@tbx>T**Dg9RzyurI-QC?G1P^Y(Nr2$)7A!~zHbWr63GNo$-QAtR-5mlP-uFA_ zR^6&o-|xFsx2ON;y>`pmHNBo*y`Juu`4<=fQ&Cny761na0KmQe053}bX#fx&{-6As z5MDFl8$?6|1Vj`N27^Zj^#(2uE)EDs4S>gj17g9wbOXr$Q4$3AkG}sW z!6P6df!-hk;ZR=RTVMjeZ4C$)^@WB6<8gPj4KqLgvo7cB|SO9o9cpxGo2;sHPzk0qtVj)m*A!19Z z2jPB%{H{d8p?02FKjY?o+d<2tfk*SQ2tWhAc8UeW0!RQ3lBp@*L3_3u}g{*$IS71-DDh&{YBFr$#(vUt@yr%1Up5W+Um5&i8kTz zH+IqfS=9kM=%={ENlGh_r(#C^eu7>jB5j@Cj+=rVCa> zD0Yg&JKxdK<0Rg$75`{|#xLRDeJmc}tEO6695{ZkC-W1M}8U>CX$GVYO+#hfTn-6~1RG!c8NfI6w6Ta9)NhQ_470`@?bf3!WmG`~op) z?@xGss(a9e@}$aY(}m<6wy^E5jK@XhkiR`=U*s9!$CN)~Ja=ZF6JRd{KvrmouIkG@ zOqkP7iQbSyH!llUB#)i`#*u??f=UAZqQrI^M<3sIfZS#UugA5%P;XRw`s|v4^T}(Q z{~kE7By>NIrc9hrToqJ-tQMBWg4v({&WpKe#_n)@_SlF0$XIJef4ZjKy#F5MG;6r* z|3r0N^8!#z54KIIP}=LimKS#yDIiOwGupE&N^^wSwy&bY^Y=fk`#R-$P)HJ2Y1sc4zOSpr;~UXeU%k+2dcnhshy zToFFH8X2TIX3hl>y3wg2ky+<&gYwxXfq$=iYWGPlJE-SSpWtg*GomT47=fM2- zz~rzo=NAB6!P4I(?KgI}Six2{pfc{_D^X8-bF@SeJX}cp2!uC-AbYw<{k(M48mU7r zB)Vz$C=sy%y|E_Enx4ECj|br^DOSja=wRjvtrDLSU1S*Zr)5*wjo1HSRGZ#5>L>BS zK^_~ADi!2!Cfu-!3Scj=bV_+WZAL%QzGJYCX?wr1XmVuS0?u_(#YLd6v-pSW)r!8` z9|r;LB83M^_52?D^jarZGNgi>POiqv(UKm? z`kN4 zzlWnp{wbOPBP376U)<)S=24}aA(d+g(Y0kQKb0D?vWW_Q zEgK>j09(yKPEv#bFGl;+h4in4!>Fz=OTurrBmO9rj}8aAq1*) z$gjH(1}9fV`gT`ORf{tuZwLjA-m#4Zr)1jD(W!8Sqp_GpY1}4?0LGpxk)Ne! z|8^`8gukZ*t=!TCu!}QHR|~{eb1fWZ)pp*B6N|kwHOq)ftQZ_u%?B{4?2%lShI`6& z1R|~dMExLPt5WMCF}rkts#!naoIICvr=a^@+TwHNpF}7eN#(H!g>=N7&VoRmDAJGt z6&5vh@Z0~^*MTSa*MNRndb|MEW54CN39P8e4JA0*wmKi{(=80G+?Z@A3<$N_m}T7N zXatR<5BUUVDBk>>)D+G5Ds2Q4G5RH8;Yxu zB$Imork}TDKI#rn+|2UWAVbag!OKF=(YPkKU2Nx1LLw2G|Sc8jM(`Wz9FY+p~&ogbbj7J`x8W#+8CU^HwG2hVD5!a&nw2iJ; zY7$xa{KecO=cM%zOhpDva69cpL>d+b21Kq9LVmH68vU^m)&ufIS20_Hf-nm{0tg$N zHpoIw`bD-(y$81(JtiLUce_lB5^XkZ<5M|>1xUqyk;LZuFs`QwIri%M?@MTEokO7N zKkS;4W=BMN&_(hKi#ETj8|2~Pfm0#cB$5wHMA0kHRN_&gO!$AM&I1SiEzx<=7X=Np zvCtd?$GmvX5l0#oObhbNCy*LqmPs+bsY)6^P7E&O#+!eo;yQD$7M=VRspk=TEUHxh z;gFbAv**@3(LID$6UU1%Z^gB#PiTkB zk)k0LhCoW3DbXJ+daPn8Z1oI$5Wz_5+541pMEi3jwFgu) zpN(CtzV_`bw*(Q9)t!D--=J{^p*muWuYDuMN3ET;`)T45Hq+@Mb=RQIY#3kY&s_t% z(F}?jZ@ubo|Jj53*Hsc}NA*h_9a&b*PHL{|3YfvFC##U&2F=&KI#~J^oyF_ZsTdni z<5RUirVrSZ7@WG|MpC&l$dj%U7)d`B6HaTjb?9yGF&8T+)43aou?n7ACRB1Z!{Alm z7)Ba%XB-QxG13##JBt?s?B#64ZR%q$f*ZRm6b78yek(;P%tiXyADCdBWu=SP6&gx* zP)FB`m$V69mw)h5MyNvKJ{NLr#Gw8B0=UK-WtR0R=~&Q|mg!bu8`qfO6_14E6?vq8 z1y)F)WcS!B{u0J17qY-z8gSY(m};LWq{AcgT`+(#Y*`PK7Q$L>Qm&Qpa_3#Gm)_4R zP+mbdW53zg#8+{^x!Kb&k>&5(ZdrBZ7P;m)i@VlSU^mx%De@&=@<(k>PoyLUijgp* z$8=~Gm^Trpwa>F|rG?bfY7xgU7<8|x!SMJDm2u#=a z#&2hmzkbp6H)soHW3!)^4sMqHosbwQ^{LEBG+tdaiUO@Vm7>1dH^wNeY?-+J7P^{W zQr*8nQ)Ew~A_iJH(v>^l^?&H1NaV_rPe%O?i>C!QP@dl6&fGxB8LWyEf-ecgl(MM8 zWMScEl$)cawVpMPN)~g`q<(ZNr+h5cbG+Lg$uoM@SE3(AqC-nDd}S4#cS_waYm3uH zMFu+V%q12Y!k;JFCK&??riI#D-}{rxukGV2P2cSEp8T#iu;};a9gW)Zjv1PhJ5c(Z z*4AU!e=r|xucvx5 z-GdzNg{3lc{#oZ89McRPJ6}N{^fJ`LdtOroM7K z=P&ZsDn!+fXsfF3*Eixbd4$K3kOoQ?3WamU?{XjXl;wU`Z%;nlukJevM>5O>VfE3f zPhk^w3JiUt-7}r@*d^Cb0_i9o#k0LYLoR02W`{_WA=uKoaq^J`^lV;%Mkd-U-3fY@!Qf#BBRG6x5S=&!2O_h2;-^i2l z=c=>g#04~mmeB)G$nccnN^GicTePv;U$#(~pmDAf4P~Sb>;=H45vtNfr_1~N`@#~% z+UWYvDXFUT&NW574hN2Q^BR=rgO9q7(sWXIXeGweXOkL(yMtV%F2Y}~*Txz?0s3|4 zGn)nbrLzsGY%`7}(SJt!2{*V9O2nhZ#(?WaRWNZHa>m1gtUY!SSADmylxgDVEye%qwakA(8~ismD7myzDvQ@ zA|Ea%C>5Jje(XK0s79tUF{@-i4tHF$A*zeP%k{p3TY;QtPb>{#g-y4Sq$H6#d*%Ui zUm6n2cp#KKHAVAV3*DN-Tfvdc**W4->l)z&pzm-HU6^}Hl|{5~LiCvHQz=X%L#8)X z#<1UTt&_BF-(5E`#H0*sEj0|^|mSY z)=+-B00=lePZ_UO$UtVE{uG_RaT=Y&s=&WFqT|5H#i_cC?c>{<>LlYyNm`+BD)TS! z=Z$M!U#QhrX#HY>U|me;G?09|%|7xB#2$M;isvx+GNJ(5If_FGVD4`YPjw~8%pgj! z5u2kwBOeYdO4K4-Jj(s*KEXP9HtFw=j)^J;a<%?VAbB7@IIpb1qy%%tURETn(TR-g zy#t7bh%%_2X1HKNcL+F?pX{{*o=4iU9BCLVo3Fn4jGvPG=N3CgnML4>fKUGDeF~Sh z?TlyHlK+F7Y@ga3|BA}FuFx-+i|q!wu0CKF72|a?dNJ3K;_UGdQBo$@1TF(F%&Nx1 zo)lhz1;{kNY6c1RCpk?xH7aK!dV7QX>tP_9tB1+cyI)?A63qcGk)7)Y8?o>4wjK1) zuXN&XtSIfNB@27oM0r}Z+iF_H8dam-KHK@2Gy6q8N*_@Yr4VAJC20;0)UO?l?aO$h z;$?TVrgVM@ZmX_yk@GfUM`d?A_dTumLX_12yBOe{7Uv-tSkhI}!+ zcL9SXXx^gBzrthQP5taJ>fvXYF7x9_REv(DEs-KsQAu7<>~_!vF93EXiMXCEIO~A4;?)Jg2Lpet#Q@ zj`a<5x%&n;2JV#~*sJRQ&NCDtD&KG}_d(l+rR!rpRDMB0!7&d(b7`N3Ff5rez_erf z+L<=J9{>Cqky)G)08kM;hphrupoHhzjN?$WvilU%YC6|WB!ehPZ};TXt6)kA zFg7RbAOY6G5{j-Ci=Z)|hk(NxyuqaNXRdP{=EdY~wMI-t0z!7B3&$q|Y@Xl9gTLw} zF;}&w8$>JZQ~TkT1D_~A)o z0_|Vu`9!}_3w)Ls)}}A`Qn(j>pDh-n9q|Gvr;^z8>oNZL^94ZUe#OMaJ|E$B&DJk= z+KxMdaoyLO0~3dldLatD3wVb?-r6JGzNelh$h7FHeWq``5gEW%-O%0|=^E#6?5MHu zz%c-~e!Y<_VB!|~4o@maVjy{vRK7!~_shZViJ!X5{0qR+!(+UtcqT+!sHeWQlpW-9MJE-S7JDqU4u;CA8(TNMiY|((fG)(u05SmZ z<7EMB-R9@~MoDYx;>cE{x92RYot*;)ETpI^TSD2CTUc@0R6L>81U;Vkj(lab(g>{1 zu4yDDG$G69?A}$UZag9p*8Nrh^x$uQKh!5Bu~@BJN7PJwV=kiY0JDq!9TkHKQG(2Q zik)0j@ObtmwK?Vn(_{<>8~==me6*um9(8s?+`?9%&G3*j4rF!-5y|ssd@~`Pa4B(v zNuF^#qoU95Sfj(Q4(&QI9`~u+CwrT}i#%tJBomYSN3g#S#I+O-{)(qrt@L1~(DrOA ze#h#bTTahh$e1g>JxWilD!n02fuY#S#=Wtv@LZGOhu_oQ-pIJsO*Hnjt#OdMlbF$m z2YEWz3UF? zXX%!w>Q`T#7!RAZKXN!=m4^^biYDqGU@0xfB1WD~`7yHu>(U-WF^_;@ZSs$4>QaBP z()*ZKK?(0%+g|7J3BeQg;hx5)0B3M|Zm!CylbFTY}tHBH`doVvM7 zW-v&)yU5i?@qXBKBXjJ1zCiG-xsNL&=>;6+Nh<^YiW-4^-}`YjooQbA-5wlzN^dpF zM8#gTW?84r_(an<$u&gH-?f^;Wh;t%HbVzrG2G?7umW!ZlBD^jU~U!fprsCt-}PEk zgXWP%Sxnptel86;@lhvW&-Sql;BatjZsnU4O_5JKr$Pv2z!afTo~T{F>(M=w?bZ%u zkJJv8+uGkV5GgeK_-5?tsD9#&aiudCBu*zeLnhR(xN(d7^uZ`G&(`!GUGu=8CMT=* zZ4iUF|BtUTGkiG67KQ10QebQanpBvaG}ILW^CQUcIc{01m^4IE=}v`;_K9S&=kM$L zSbs}&xFOu{^V!tsPhMD}A)-+_lLUxjz8UB}95vv}N*5MT(514QsQp~8@Kb)$oQNw7 zheXm=mH!c^E_v}Zop>j_nXfNt1T4rfD(fkNJ{ZYd_z?o_Ban_+;SHa z-NW#C@Ko1T1F3{Tfzv3t4iRn!^gI+ z8ME-z!Kc5f;kjCFq2o(@cvuXF8p=SzG)nIN9yG_boVbrUW zt*kzf>>ndFx~{Qr&R!($tTxuBD>(c^v01$2NB~Q9U-ymt`K(7q`*1B+>y=ONoH#Yw zqL-xK;^5RBQDU#aYOI>p(Jh3UIuHvB@a`QP7AC?w$^T0cvnjt*tXS?*K!7aiE`G}Q zIZwhvrWw3{7Hc!{Jkpo)M-|(-{-LF?^1MG67^k|XHI9KJ`#Ra3s_);MwBAQ%kzE_L zQNW^Zgmg1%-hCn8dqipLd;w$``J=p7J)xSKt}4Ws?JHnPe&6^RZaNOPl;Kc%8h3_# zhKm%#Ppmi{<|e8fUg;q^(-?YQ6?16iSMJDZIrpudNQ`704eA5nE*4nrB)(KxvMxS! zsO49m4p~+lFkWZp_uvFOZ|2`n>gJcv(rtx-EDR!7s0rOuTE(NOZpyh6KXE@FXhvn=W}4rSyH&UE7lC*%M>rX zXt8;@$SeHCgP}IGlR1O$w069SwbQkPhWxvUdc-dJZ~(p>Y!?N9>ECIiul1Ei4!=wO zoQ)pamb(sXd(>&wTIo&Ke#mkCGbl+}(;X+@K?!p|Fs80ePrGOcNr>VQLNJAkzlHnI z(o$gIKPg9IKvNA*XhJh4Xg$EuKc9+qBI|Ej~Mu6U~32W3Ruk!U{FKZo}zg zI^o^A7ECL;%H5T=AwC3W)=ukl@Ty`>PiPAy%BMZr(XcuJRE^;`YO=-dR+i<->LH6W@*7UNO-E?VwQD~=5BNrv*C7N$A@|a4R z*7jwU93JoT4~QY}6lGyi^kk0;3(V~+JRB{^loV2{bM~POZ-$^$OjT9+{gW~oIt^QI z1(F<&Un1v*6b;)JLfQq~=v`;&c{;RlrTY+_@10@E34^POOXuVbtokmPv-wxy%x^;7 z?<(M1{UJ8)R^=8PmHYW#oTvkpgk)<5k7SkGiSwF2wLf)*6bh@i$K-89q7yIWA5e4A z@`xj?->^rw1B0a~kEG_)i;^59@~%t{Hy_Wc!fhm;v)rF0K?f@+-NoTvq@n5w&D3CyTnx09TO`S zin2m0FMH{t!ryx@jvhxJnEVV0Mru!mF?sAMHPN&*7Qso{J&hN|6jQ+l(vJY+t|QSg zBSIu6JmX?@+5-a}pQma)8f!AdQKKW>t1`2)@-CE}CJq{${n%y79Mo3$_>^TtOVg?Q z+adXsapPc=%u7oV=F57|A|lao5=5_p(8@;ncc%Tsw=TRFAyCv<_IB8jlZV>aZ;ooW z1Ux>Ed&c$9GH0GR)O%w>*f{bia)%f{4Q((Yx=mS&f;RMzeH($xMgpH=a_|IgGYSRw zkkJpX%FnP^3f|u8wjMpPym=duy*(Q2_uepH5Q_rfWIe5S2wT33sMn>KSV=+WP$_2` z7b7SEYf@D&@|zHF3D;sf6SlpD2Dc$kM5OP=Z^Y{kzP@K#W+?nK(<3Eav{~vWQz@J^ zg_8}YA>Z>{3g*Tr{iy%EoGMnB+VEpBP%erqCi64lo7-$`Gr*DPX4#=iv7lzbekg^z z0-5UpTXmf#9&M=~L`I03^9K6HORyghG|cU}bXc!kxWb03roW=grb+9B+47ZZ*f;rx zVE0FyKDQJl0WUT(U~2Qmn8KR(aE*=i$b0uK9$SlxZM6Puc!ZyN+X0KMr9HY^iJx+j zBW+L?KaWSSbG^72XGxiV9fi9VA2_*wU$LIa!Rx=6HEZ}7xl8^! z4^mh(%U@3np>hn#e# ztpFGA4nXiSEKr5B8eRqGfUvZ)I#Tn!o$~?UW;%-4vsspAKZw(LC7ckDx~@b{U~|bc zzl3LAZeALm$ldo-X!$GBdSB`%`B8&7U=S^Qvqop9S7=1MeXe;u{i&w|TfS}6f_3+R zLcsz~OBNqqv5xbY{wk~XaKpkOJ2)}1j8ode(xYP-4zNkJA{X4}arwOkytab%bZ0zM zt+`}-z+_`EppN>T*2>EZfvi_wUc5ry82<%u)B`$;=)35w;{93567cp~Tzp0-yXbF~ zW%Knex_Bi$Mx~N^)D&dze!3i-OJB6nHBkeiK8aF``{y_*jSNgqFMjP;{Ug3FR zF#z~q*oA8B1r1QFSNcbU$UXnrcf5ee?OjCVf9EH?LfYHYR9_v)jhn=s-G<34IaVb8 ztlboI-&bQzVd)aU6M*Bl@n1ql(!g+kBS(sz=o=x!KLRTuI}G#MH43d2br_dAkECVa z!khLt{6pOYRhP!fvzWL{>SI+krYDkHn-uP)3yBcUwfb-@!g6ye66I;5Vb$S$M_vd* zIau|}*mwgRgd8>r2@BuH%zs-Wo$Kpat2&nFP7hU(fk(I%F*zS)D? z=Oioy7z*Ax`|~yW5TX$j0C471q`NLoyg4TVy|+3B05u_T_Kh`G^$?HRwc>KO<9v(J zA|A{FPj8w`M+SPL;Y&yqn#3>PIOmF9>xm4=dC#%#wd#=l?6JVskDU*#g>zi1+6-Uc zpLpN9hWu;-*r)E=f7q*oOhVQ4j*qalX1wi1gZY0Vg@lPhxh3blie4#m zbOpxVW)g=1Ci8iIdJErHLD7rrP*?qiP-P_(zopLS4gOvE$qeLYffb*MNv;4Q0>Gf0rOzp5ez1J*Dqazu zMTMrW^l)a6o&uJu73Y#V)nzThVZXmYOW2dL;1zvw4#hm2#_PQNc1 zi6iH^WquJD_kaMC2mu>|yy;OUNf$wEmG~{9!<@u94#HUSrZ6`0eqWeBG zKPI7yo3rzVhpM^TcLT0hcPF92e~6&^Ah)N7sm*4dR}-wc-G zxFHT_!sw)S5?;4?3?T+ur~-Y)+W?h#7H+q>B!RbZ8e{B8#(a&H1zy!Q5PN z808i!SrYlY6rG9N_Dh#_B<-8-1`E^e@JoOjHh1Nb<^is@b6U_ZhlJ(HS(R-lK@Uhh=5=L4Og3N9gz;SO)9bFQSL+o7 z4#$1*55CC8BHOsf6weBGMmpS-t4!2Jig;1wx$4XX!&JJf-$@b?F$gW8Di*5F>N~^4 zzW)w@D7Zpb95#Z!#RiDZj!VnBhN(2L>W~vQi@oPlTC~o$x0_N~A)0*akeVPE*7u2$VWxp%a9LO}PAq zgzbGG>}?6Eaz%oid~-8Tj1@;FC!#)9QYhGpG3aR(`3ixocveDb$eh64vEnWmznB_} zueJD->)-fh*|SD{MDGQ8z~BI;_8S25ziAE@<(!l7A+=soTIsAkHfmN+?MYp@oDcWj!GA487CP-HScRJWCJw?+NkJ|P^N zZN4cjuvSt?CnI&+NR;u1bPpRDm6Mgl!MEj6K_E`WRtDVuyG85FqnV_+LhS= za@^Y(4gm^BxrLourh9;zl4mdD&qXa{X11W;zT+A^C+PU6LLStPEvlG0MVy7|z7tbb z_NZ*6j`lVkB<%Ik9BaD)-Btxokcgojz{#(3-aD=CnHWGfx!|=H4&Si8v8u$8@{sB> zbBcRK0H`z_>>u1MDDN+rQW&2 z-Ttw2E%mz1Xho5efKUBHYHWo}`N?Zkp`Cn>3Z(qVai)T9kYkVM@@|f(aEXc1JT-o9 zLr>&eOPV#?YzM1TlsWp+W?Vx}z=lJ0QBKYuHQUeXAJ{e|=&~%{SG-w8+PdJO4L1)~ z=nKQsSX&f{!X-$YQ|=yMw-~nL?laP5d#@UW$!P`^H3xqMxNdlw@b)~iMVA}rG4oBv z$6H&Pm%F9ZoH`t3a6hNd-P&N*bwX9sm3YACl!VuYBctACwyp>4D05jt&1wP2-%mU1 z@4oTSPoF|!ZRhvQoScM4UA~CTG`v%ti9~N}{PdU7L|sleDpnHYAs}(1-SXQ|=Hv+U z_4qH7E*oGTxPMb@_73OXvqT$ucPQ zYt?z0;-e8g#?9sHR*BX4!)t_`ONQ%V$j^hkNBxh6;fZ!hR*j6VrY@Ig^_Ag{9L#*Z zL`V=2zeA+8Xcj?oK;GlBhpwuc}Ywhjln%8xs8|KCLnK zhv>lzAT}CH&N{D}#JoyBD?c(>(R9xYyRt%+t|APAVTNg z7&ahARhVUuSyYfHpa`4fG^e!aLkH4Ay`>o1Z3PJ11pD`r)+|s{mA>uACtNa+sbTH9 z3n^ID>#A$dYK+flX{c8V=VcKZ?!iF6eFM8>S83e_A%jhJ!s!!u!NDt@!8_+t&i;OO zb))?YY6}QbNAbV5bKbNJEh2YCP@<3HPo;=3Q5QKus;9&z`j{9XCk{e^LLD@}%)MMO zgw?;D;BjeA-X`#2i$DdloL$qMQvu*zv%23Fi|Hcz7Ll#=AB;^z+3nojF*|rdzEj(N zi;7!TSn;hw7700t5W08VT*2eBE`&~K;!X@+BK!zWE605SROULfE{YA%I>vFusQ|h@ zc}O6LU>jZUR>y=p+L*(yS73AFw_?c1X0FK z#38}=-tV{iTfMpe;aqt+*q?2-ov_7MS(!WPECK)w(B1*Kbz?lVS8xhGO%X#;9>P@a z5HzP+rpwWixmY*`~_>EAS8R2U@Bo5VEwb>eE zib<%PgHs9my)@ZU&{lOt65!TzCs~%xu*O#ByUoL@MzW}gzKy;{EccU>$W5gmi>dtI zvg~OB!J+?5F#y-k^vM<^GlmDsUjWay>MsB>$8Tr)BnvX_H=cfl3>Dv_0N9AXVDg$cK;-b)5OhOO<=@Y4i~Y0M&{S9ED5`1 z?&PG^C~0|Ho0(}Svhn$oY?!WoNnsEU6cmIPKrkou!n=KbV21X8&zNknX3DSEmQqqe zNZ{jXmchlWXt@xL1L`9w(8d8s5;k7|{`g8qJv^{uysl4ujSP)X%7lKFU`H;tesKg# zGnms??r$FJNUfFF?D`}cYH?1!k22EEXJL5n^CpOsD}YGJ&BGYdWL23V=Ug7b3wh=6 ziO?CT(rXctQEIqrZ2X2Cr~$Oy#b;}GtTDZ)+K`E3#*TRLTE;+aCuxMubqMv>II_nF zPr(67Q|!%+8l6%l@Q-3;+LeSwJqR9ibV2do82UL4ttA%voRYj`Xc+64TY}eyFq3J8#+&3Xv>ev?NLD@+SK^y+1L10>vyXe z3hz1-p%&ZS?iQxPt&+m9bV{^8^7Fqi-tJ-|`4dqgR~}1A>$(+Us%t9i3K5;aqMA3y zg2sJRK)K3BZZkVW?=9=~4;k0@ERwN_F><1U&f;qOWED(d9^aF*$|jW5;Ora{y$Sbi za-7?{oMS9W1_YZovJ{LK2_hY6A14FKwra)R~JI$jUw2Up2= z3>f#u{WK5uxl7=3cpf(B6`t<7T{j_h8P{3_=?kO4i|5T$PD##2Az?c01i^TML4ks2 zD1EhCt88nXS&ug*vjyFQYQ8^v{b?3U*+`!LtctFjt=(;u{l)jR9Ckj(v$7hwmRT!5 z>^kdlYf`$ZWu$gsvXV8<@Y{++%b>xAjL?Y?x3%$uTsJ+SByn=sKb7 zlkxM&F3m)b@|Iyk&F0dsMz2yi5}b#m#sWM)_(m_r3|KZ`SwmujS5^gu!r4xhP-!A4 za8AC_vN6;rP&SuvjV5#F1yQ%P_wwc@^No~*!{))_}VqO7Xzbqf0z;W1A z@Egk494B>vLNBc==M94{kxt0>3z2sUk%gl1w30)s}_U2pILv$do5sp=b4I@fBnW^NbDj&NH6G4z&AWl9t<1 zH8r?Z*iHkovTw*umE;e&wL#&HZ^_7f9*USh`M{N{!WG?r%vk^=!g9Xbh_m&R<_e-9|yZ1OoFBpyqd3tFt<0x7S@ z9fiZsqV-DEU>3=V_#y~q7$O+@e|XiOG*-s$buu1$On%l6<2hPWRQ2D@gk;4Y#2i1@ zw1u+dEhZW4j9OY);y*%GRH##z>eT|KNOWIm3WR^X?psV^BkOf_;OfDn!ktK=+-NQ0 zKbF0dH2$AyPzsFTarObZ7XU`HD!IM1KgHGH+7zrBSS2+E5X_R86xn;0(ulC6FKnx0 z#(-tdZ^zqnxlYVv;J=z_vr8}T;~~nw;>06PSABMHuc|ve#<_zL|JZ2M!vpEbq(?DE z@-^Re88yD0*xn7xV;EnfdhM~g{S5ZxWYw+`A{(3CRj)PUGK1|JuU}>yY! zNSkhM+GusP4dc`NkqT&RgGFT2vJ+WgpviwZOU}&pwD5RqlbtETkq!Q zhNa`{fY}*$EsY+uwPxRBU@N>b31gZV*?YE9)5L_y_M30>3UCu!U?+JR8X6II z^-m5af9V?cnfX_l_{^9LRGpx~Zw|KexkqFt)W=xQVK|A^V2|gK7$+iHma>giaI1XL zAJ&%jf}&K-83iKW1(uAh;|L6=xfmVUr$8|62{#uXe)P01YP1D9Tkxr-(K~6I!ryhn z_mm8R*u1=n@gaedT0^OL{5Jaq4wzc%I+7;})(2T`E?o1YsD^ML1Ut!td~R+>P5J|0 zRSY7;s`L@h{Erq3KN19xDR{>Ua@%){xS~AYgKh}fohX9^;Q#0;b-p>_oT@b$pCtD_ zus$dvTgJZ^nB63#tn8lNN==0eiQ@?wvBh})DBhf(*sJpXYlezi|H$-1#ybOdzp><) z5nU;1%bbGz7{;7}y!3TN@4vrx_)~zaE8cXMnIC4?c{{V(aTvZDqe3; zx|mLM5*titfUrRvSs-#}TEJN^%?g2C@>OBVcl7olps}dU_A1cbi|1Yr(L6Og7750; z4|8f;y}9b1`B{`K@?3mMmx9^HtFCx*qBg(QPfR-c5e@;#lAW+uA*Fui?2Cim*I-Dgr@bn`TF@3|EF43-Ods_rOrypPrwM!vNeIJ$t> zo0BtgdETtOipBdsaSD$0gr10y0yb*w^^;4@EtNmM|5%IwGxuLEG0SSJWvP4tFfIr5 zu<)IW&s!ZDOITBp#G)PFqI4$HekpJW8KDV4X-q38!2h`mjGwR42(k2X|7vs`8;%f^ zXydCCKHzmf>+u>91RcbG7r+RAP_Vrbdj+cT1`oIXhlohz|L8@yK2~ut1U73@?6cjT zqU<4`=_AfRHNZ@;JC;Q>O?WQk|A8MW(#GDky}TRO(x`Q$w3rtF4`aR~uSVti=ICT6 z_?b*`E^zs6P^wjY& z9=aDDHw4B=64IiNKC;Zod016i+d5*r5(?VJY&!OO+MdZIBdpHfEZliWNJwYv>*D0+ z2N=raDG}q?Nx#5at~UqyhMh?9Avg?xS2BJ*B`VN)4@Jd+)rmT@A>LV7l2j?mA_1|v z8=xZ6ngc+-LL7Na{(dKc4EcHRA@k?=nrpX;xE*PhBGO(+g&^y4(0J-*hqC6H7n4&Q$XUaBbruQ8 zLQl(={R5!H53mCzIeZX(4|UF4dCVA}Vl^g5FVs?8UNl*tb6wLAZ2xD|mrF3<0Yw-bK%qF#l z#ixZivq$%hZ1KeI6n@a3oJ7A0cuP(X9T{OSn1~%c&bU<;Sd4nm{8zF6(neXA;7&>& z?n_%XX&22E?a~W?PV?Yyw_{PTYptBI3q#JE^;Je?$%;=cu$nW|lrcU>YLC3+QRKNb zH$7=GdidI>#A5V=?%L>4s@b(N=L=ww=R9#;VbL-;+WCJqa-LC5E$to;hu)+~lL#na zPy|#!0)YUcgd(B$s-gE5iu58iv>?5TLI_OgP03m9kG9sOH0mY_0%lW%h4=iX@1h>Y zGw?iSPm8Ymo3 z)XBngd_^z_%k^;=jx3Qa@k6!clYmd_9@(y377VO15>_eQ<=OqQKMz;1sFPhAXW5RG zT>khf?&heS*X727K_!(1gk6&p?RpjzyN2HX1Lj4lNhkI&T{h@0!<^MPvp@~Q5&U8UlWiFiV; z$?lV-$!Q*~|8!)d(y)jSruda01!ij3_6BKNP@m*Lty@HhO0Hd$^%#YlPK+fTX(^Ho zY8q-4Z7Wb>GPlq68q<;RyU982b#h(c{f&f9dDB2eOPp#OXLd~87=2I1>g9Mv%BNWq zm{V+KB>+IopaEvPL?a1$ss5C!pG@qrRZ7T26P)}ox z>C(?n2C03kFY9GIxovMAAC}wtl!@s=e*D!im8uSrmxjUwg4} zZ`GC>S)ns2BtH73a}PLVOrgL@Nf!24mP-FJRdxrb*sC&ZQ{8bS_mx^#447}$n}*R5ygcyPtafeQp!ELpl{ZHn z2QAtL!&BSWQ)Vh9L{?(c(!}@^p&>GqF%XiG*M5%i!ezb&>M)&>?Yw6ihH8j3DH9up-N76^ca99CPHoo>M*UFAoO#7q+lo1w}gkUzw%%zD{TBA5;rhXHMpy93+N zQo)>>j(D949!T`?=(24I{e^YzeC5-k1sU7at~G6stu*$0Z|N#oV}iruDf3{RNi_!5 z9PKzi>$de5{=qc3Y!KPT=APK9>rYX&eB$K{)i7cC=a2bL6K3bL$h3KZuWG>pKyUmm zJiQsUlmI(+O6TnE`Q4>8f)X{;av3o;=gJv32~K(DSQZ;u(dj#PJ5S#yxppQcr#1i; zI*??L`;z}>Bl2`)Ze3{C=*mkXi~IVP(l_d1+{xBp3#zPougfro{G=X*kaCGx}oF0sACp%=yaeK35by(rKg`Y*?m3N;!Ah5>Rps zW!s{zSf(Yn=Od$&+)o?Z%a3|hj~ek%w~EZ7^@2ZaXkHXWGWl+f0jT}B!5rM6Ruy+! z1&8Kq9N8sz7Xn$;;%-$HrZ}jzX)ZO&l9cFAhBgrrLQ|pb)tH(G>0V2FiYes3az6aT| zVm&n{(Uh_QJtRZA9Pb@Nxq#&VcEe+J166S<}~n8>Jt{M0;W~ z)Rmj zA+mzFZzQZ}ZL`3y=U<;X5)RDLPt|LEe+l2*TzlEo)(<2m>>suuVso!U2-z(vzAj>@ z&1_}Dd3tI-QMp~@oGm1>;mZFHEc-76660;*?n8DG?H+=J7Rmu@gtz}e+G4z|fH_P{ zjFd01NcO}mBQ~vDIr+oPRCtVwAB1Wda<*&~b6jSoPQPIAX#E`H(K!{*l!#|0-TATj z1x+;pP?BCgGE|DxVQ0kh3^S=DMl@L|=|>x`rNq}X^kz-B;myi-kq0p0k1w2b9mMnW zYkM7f;tb}F6wd0ta}X3^$!&!DqtN`nFhM8%k*H2LDfw1TNDg@nCga#= zm>Yo(&=cf=!(u0eb|Kv@*`LZ5RRlYPJoN8u*m|*Q%DDCj-Asg1$vwhnwtr7&#}6&g z;g@tapw{+Lp?uU}k}v20N!q?F5bmN_l73IY-rRoVjlf>*AUwyGC&tbd#=I~(n**jT z?kx=ewmSOY;aQxPg7#Qn*Y}~5ioqnmNsh!>sovu?-Xw|>Ic@LPqi0L~_Vsf+IMxxi z3@#0o=Nk_?CEk&=lkCjL$IYgMP{$A=z+mH}D~A>6;byCLu}hUF*}g%@yEom(C3%A+t-h&T#X-%@~CU zONCpPo)#_WCN(#lVLxhJm&g&EDT^~g2+TpR1MCUTr`^hIpwyQ7{W7i2UQ9_mu%bvMGoI+xqHxjaU5^Y_g8&7aE;LX91&1*QdLp@z(fL3 zAu`~pI=#YYPmwF(oV<6#<}l0r$WkZj&@<}1GRVpKb#(Dh@A?XynnT{sv8IL%W_al7 zT?Al2LDc`c6n$U+d^UDng?8Lzzt(tbN@!N%_s-dgtASwUF-4Z)giUGet?M4v6=W|T zP*9L;Dj8%w%JOMhwNM-s9CjGH=x_PFU$@Wvc65LgE(ww|g(B81jM{0^b;51|CnkLI zz|*Zpb#v}!6ow0=iJAc&0T_Rj;flBW63tQhv!}bk{C?-MkJ0tnJG+pZlVyfe_b-6M z?5`f#)W8mPYVbMw5gSH!@M7kX8BnrWO; z=9zo;Or0G`YKHP;L!p0JS*0Y>S?k;vAJr3D@t;q8w77J8V`my-JVV23-dK`mFq}cb zf9-{jZ-BAVt5#OjPh<*x^%H*(gKBA3o1>uV;S%?7E%^=pDpSS>LD^%a_~k-7eCnsmbqRq>J}|5_Yd% z;+&-<;aSd2p0@97bhOH}-luM(2X^urd;}P1Z%9M*O(;9A7df#6E)aw@w|RoGLl+VQ z>8dJpNb#w>vGq9sn4fKp(shy*x4lk0gj)TVu3LELKV6Aue;dEb_HYk|xLyRhODN zfT!-oiPOr$wvj6cs=L1@g=mN37`UKnZ95R4+{VczD!SLq#W7Su19FE%|MAgKi_4LE6&u8m0Q}JZ5dN|VaR>iz zEB<<;=^G0H*oppa)52_H6K(}oIA~-g{*jJ=hBLO?H?Zp^ruQV1P2J2H{fJ%#)F#Y- z7v=!*PZ<6K;4fp(I31sJ!Z=~OgOIlt>}5^%MH71jsHR)4R1``|UJuuvC;v%I zlXS^;s+4Hod+!^LaTn`WG_n>j_-{NMc6ZNS%T6_N#6m>M60@}!#NYtxBi zQ=sy+ce~ssd1-~8zKU9CLn_r^WBegRa%y|o%|NNqP40f(yW=M_Z^1Yun$hEtHdfGc$Zk!Py7nLFa4bg^J+AvIG}lsBh?br7pWu z*{j-f-hKjNH>V`X`a?v(CAz^YFZ+GP`>ZYGL8jol)Q=yJbQO=D1*(PK=IAC9Ckb1# zOil}-cI&99@2puPNA?_;^^J*_+UPvse+R};0* zr=$6t$J2LUPoK8XnfS3sOXRw)_yJ9rkS($@@*bx^d~2^)e9wD8LV?suL434}(u8J= zu!V{SkMvn{P`5Hvw1C-tO@q7CVOn2ML>wm&ra)JbRDI+Pyaoln;1GkO7M`b@1U~mV zs>|+JO5KkAly0U#UUx%@GI5A7AW1cONtA-i^1Y)OD}CkJU8{0u z`sPFWzPwV7KK}awE+Vl?sK(^wC~;;gK8n>rq<0)}e5$Mn9wB~gyk?-KyV)rG%qyjR z4~{@TkO!cFLmu4MbSvxd)6jBl2QIHE+2318a$W82_uHPDPfu46nLur7`8B^)eu_0Z z$C$6}H!j@RM?gVMG6wxIRtzQ4AypgdQmnrVi;bs1N;XBKO}J$X) zc~PXHuJvn1pm^kUCUb$e1^y`br|}sRu1}u|WBoX1AI>b}!8MORhvU}(yQ%R}8n3M~ z?l0^Iuj-~5E+ZS92`wt0pH=7BY1H4^xM16 zrUMlm^BE84-NJuJLB}XyxxVoE{RFpcHl4H5cJO0Db7`_sFZ*`qJZ1;=w6A0V_{~pM8jU z;?vpcuVtV+?XXn(K2OylBZs^Dt-IsYE||~FAn}($+o*y-mtMQjrLO0L@r?7agKmDt zuIq`EC0-~ycgikMFst*K4n|i#V1GRuGo!d6AE;T?Qe&aX8mCm*FtJfo{Jz}Np5F(8 zEkamFG-4$AS~)u>I|GHjA7Wh$4yh{3ynaM5U6-eTame}^4%`s?8QKzCbU8}6|CeYU zk^p$VJ<3D^^pKW}!gVCrUn2uD!lI!_j|6@P8QjjNrcr=LEJmqKQ!ZXuv>zjNRAz~^ z2!ys%me(}<@$k*9eLFB+!=qJ*py?}gfI;i>>f{VD<;{G=1B?hu!*y8;e9Pz>={7f|dmT%v%p;rB_O zDZD5dIW$^FJ>2B9!s2ys?{SCCw^&wfWVdn#W>AdEM8pEFH4^D2{Rco@TE(x%qGs~_ zDVib=)4!$r?&+RJW5ijp>rmaX!4+)fissZR?93{$wW>~;A<-1PVn~pUCOC=Q!tFKk z)D`CVlNd!feyjhnm^_>R)99!wGR%Fn0*d)~u_dcAQDsb$rmNL5POcbyGE#favDLc! zjHO9E!yloBwp?_^`Y3n*0r&|x)o~Zmljxp#lmoK zo7|H?jnY2=itH=SGd9DE@22p}ULt>YT{J&aC-$bCkj@`KJCCX<2j<(omewMkj{LVW zkp)Oh`ZCX3Ysue6OVQqP_Xx0|@xNrt)_+yB9|!xh@{KJNE_9f~w0=`V6%?LHZIR{k zmsdkT`{MCO%i#l7B(EfE3|N3Z)ofR1T1R*B4+Y=;JwnDNE@v$7OZEWpnZBv56`a4Z zBJc6lnZ+M~+GK7bKH-61ImG7CX&Tv&A>>xBxuBeAheC=8_$#Dr<7623coq7&Hu&p?>&0C3BJGE-NKxc{rjw<#&4>B z-e-T+`frS+;mfdp;@$|Zh7tSHH2B~4g?TkHhY%*31buzDiIhB%vEaS?M&7qB?T-IM ThO9d62%Tuj|MLH3_%r!Gua%9E literal 0 HcmV?d00001 diff --git a/public/docs/_examples/upgrade-phonecat-3-final/ts/app/img/phones/droid-2-global-by-motorola.0.jpg b/public/docs/_examples/upgrade-phonecat-3-final/ts/app/img/phones/droid-2-global-by-motorola.0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..60700a2ab38b87b9697173a9fc88cd05767d2089 GIT binary patch literal 16729 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 literal 0 HcmV?d00001 diff --git a/public/docs/_examples/upgrade-phonecat-3-final/ts/app/img/phones/droid-pro-by-motorola.0.jpg b/public/docs/_examples/upgrade-phonecat-3-final/ts/app/img/phones/droid-pro-by-motorola.0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c7710de986f51fff9fb30e91e9bc8a4a87832551 GIT binary patch literal 38713 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 literal 0 HcmV?d00001 diff --git a/public/docs/_examples/upgrade-phonecat-3-final/ts/app/img/phones/lg-axis.0.jpg b/public/docs/_examples/upgrade-phonecat-3-final/ts/app/img/phones/lg-axis.0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..55e5a23bb20e997adb5eecbfe4bfa01805068b2d GIT binary patch literal 40932 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�u0i8ny1-{m;(*foJkiSX(Zgj* zUCGX`9h@(rc$+8szE`iyEI!q<_BCPrAT%sll@I)w+NRC@B~$G1D~fg2??%++A2VzP z1PLS;4WtmlD4WgO1(CFAy9{oLF%7r=dCKN4A=drnQZJ_a&MO#GkK+^)9cb-8DtBvT+cMEq1i>aAKpy;Hjd8PgWYh51 zB#SAMk2eYjM2Z77R9(Ad<|rAQGQ6`)-lSHo`&%NCZoNV8d8CvZXl6WKNW*~&>!j2o z&(!)dXwg{H;PIFwRvjTYXKJ&s0E5IJ&Zuz zUM@7cy`LhjUCg|;<`oK`U0C4e1WG+)c1QS#cg_EF;!Ug=T*XW-gOv92GC%AUarNr) zFR1QhNZAUA9HTflP{ zQP~;pa&xMkyaSsG?p{4fnV^3FzQ_XljXoGOLqz}q^ZXLpRo?m4c_~amAq|9Un_C=E zE})iNmUd33xUXTnqtR}~!2v#YZ^d>Y@q(XPiWByiyhu0>KQrc zDo+1^q;uq53<1bgEZA^&uk77v_!66zB$28&5ATQHgM?N}!OcusWh1t2>IA;-Ii2y!_U(SH8VWi?cMyP6WbeBdSwRL#q3^TFldm(^F5N1{?J?$$NB z>e}!1xJ7gV`CGMENW9I_t$I`s%R<*-@vb+8f}ziZ$ZLGcb%JPnA311TAm_IAE!Q2x zT_vLwd%AgLuS8&}YoD}SDQR}OYDP4JMT0NBiv}0(%FBxl3=;ltoYLtg!#LyPqne9A zGj|!)fvwy7$Hjb^mQT~$Q#b1Fo}$PWD>1pVOB&zT&6strD7s4yHQ$+Jx}8V-w?;WE z><#dbDqDZDF)Ts%_&77WYyr(q%BQq#qI0g1$d7}97avo@kT~)(Lah~hNz+5KDlBsD znQjxN?t}$UJkCJ*C-o;wCzjP(ZT?I8nI775II)0$D0LXA!_?U}b=;%5tpW%Ib3!5T zkGFGHy?n2e>*=8elvp8!MloG(i$Z<~e0yv7S*aKifIZ_a?(<#2XYmO_DPG_F#7>FH zMH)Bat4<+ck6>4%><$MvlW^xn$n$T$zDxo1X`hb9dUE*4Pm`wl%tb1WeVNQ1rlxq^ z{f`j4BZ{ut@7R@bvvyO{sMBq{%ZQybCZ1EsbxYs@QEr_oiz(CI)S;-%sEj8_VmCF2 z*H>jgNcNSF*suC5y`pb^IQhd0A9yY~B=GKl(=#szrEID!+}RLY>rgskLOd1$HPBFI zI-Det9lrzQECHG>3tLX#!h!DLbV*cxW)n*cVp1A)&1iRI;_pMp^s87n6cr|DG(eHy4jWSyRR` zt9}7bYMSK4O(_pQGh=U{rt`2}ZKFMh6Uqi)wT_H(_;Z#0$#hS$9XWg%fz?#Gmy0(` ze@PeR&z+M4zA3q~9d&&M?d9H#|6s{Qf8ICW?f&9OH^{9oGe)KRD7O4N(2JvFo$XdY zPUw)`!9*2CL?_O~4Xt_KECz!ydr=bW=bnao@Pn8H$urGkN{X=8fV3k}I_rz5P}AqU z#mG|rUL~abg)dyFS^e~NS;^-g1)b6oaOupl@-naU)If%Kaz*zp>Qj49POQ@i_!vwM zL+1$k~Cb_;(rqPd0VBV3Ho5J+*-I>LAOvCR6J#7cE* zKbFJp9PMJ%SHNnvg}u54!UN#842Vk9I%C(VKZ(Wjb})e z`Nt;$`}Z;;uQrm&C+T<m``02@?H&=)EV_H(>AFq`sSYpSVzmTW#xSLZ<=Q!PgLkyupAAJZ})8@r}R4$ zsTY(OA|?cZsgtrK=6?n^HY5&UU{$BfK8Lip(Q7DG??MeZ4*Z_L?zDS;$*U54GnL7x z(pFtxVqJBlRCFluqQtKfcT~z@#TOS+?hSdfKnzTkvzIi~mm#msyGwTJmCIU{X+^-t zfYbG#&(+&C0>lnpxSSQtKw?B5JgG^KkEWNveb*lH;ii;HHhXF*P_CS5!AXsU#X$?h zIy)6vLk!_`^?^i8AH7`gODUQmZ!>eMXJjlE&!CrD+Xc5st6lqf)eur#hA%_0-?pbh z@sEoSfj2t_d635ZzZ2Q*jXG~9ruZ05#i^2ru4*VUc zq?@hl?}xbp+46zf$KIvUzo@;IwY(YUS`KBpBGajTLtZW z924mLvwj))S;Q@FVXf*fzWF1+!zK6Pvz|i%PK~!|*#DtL)IG#Z_oVLiS;#T ze@8wM|BSs&AA1plt+#FIfRBEY_XfyY0OoIt$!!S47?B)|}B&OSNg(W!Hlb6M~ruKVb5+*DZKTw(G z|5XbS1eb)wQUL`5ftF|ZTw@08>avZ3Jzr!*C9&x@EhH)06A&xixRt zcumk#gF8m4iZLc+rqn86A0|7z>JquKo9cproaY89>86%8S36PsG0_G*pNq9sPf zs8L$GC>pU!?Z%!}F-xi1o1k_GwN?!;(F$%-oTu!Hrs_iY4Hw^@;Eh(Aj=Am2!Fk96VR9bt- ztb0%YM%8Bh+%hITp44saGp|Kz3*bcXs&nUQ>qT-be)QY~|JvX5bap(a`Wea|yj1|1 zCxJZ_7B-{Snnu-?N8~!H8p0+OOKj^2Maz3ua>e=*o?|77#rJ0>DB$&&xfoDjm{lDs zTRsKnu!yxw)0UnZtYzG_q3}+Z2|xkkU1ugo2ViB2>FOyGxz;fSZ{K8j@UEhC9vFCB zCkOqjGH>I0F5<8Ha4-qyH=#KOZ-%-@ZSafwT$gm$rlVg@z6V3Ht)88pAc&!ssS6 zOhC8sQnZ~eX{sH6|BYRW>)idG%;Ag_7B*uGv%=tbChFn!M4ryRO}Fo@W%^@tekq?& znr(+{qQ>34kWby!cNTt)SM4-*pUawZo(;AgH`6{9@MO{tplZX^W>*DrB2+o67T1-t zPw$!kLZIya4S)c9T#S*|aC z8NX!Q98~ICuDaKuqF8g*I`JRCkIbpY=O>q338sW^WIN5Tm@(Cnzw4MRmmG8Ss!KKb z)&Tu5{;D;&NT3L_LiUj#rU73Dp;Se0A|MRElG+CrwiexjCtTA%*pXP8HH1#zdN$3+ z8|fRvCh}>2n)Fds=?jbc*H>uoXd5-#5H%BTsTK!AZWL-8h~JENbJw)vr~JZ12CFijz^OSSCL^vt^P+$rH-dLT0vnGrDjkDx*|GX`d+%&G68P zJ-1LMZ!gWtMhiJ zVg-eZh?y0u5nIY9GBXA02+!u}A-fjYJ+Mexvae&eV*jn1f~6DJdi3UiPlcrUHVB9@*){AfNNm@lk~M-Lp$AQ+yD8n6ya~m=8n)~YZ`Be zrP5z|e&~7U>Pm!#R8005dDLgH);;pYM6*TYY7xUznkg|`5HDI_F#7n+YNR)`X=_%~ zzIp{V523^yTc^&&s%VJtlSj5UWle00!R`~1hkvVIg`GQ&=GkpXe&GYNaF~b4Js2P% zVJ+-aO17CjLV=1C>Tz6kyd<=(RGoTxE5|Q5G+$pDOZcKlGRi(;t9mFx2Vs?tKqHSu zAxw%CzWH>v_?-Y{ojkNiuW|N~`d>?#e{}DQOr}4L4IouJv!Ys%6VoZH^!Z+Ju?Dpf zGOuz)I6i|3R9Qh3)xamhm&}Iu#FEHy@c;K5uVFH*m^&Eb);KeCj8S^L-3=tF@k&RX zrvR8v++tT^fBF3^bMH@|`t_6j&MWo`@94QU#;8N^i}zkfLD-DB(Z&pR&L-^)ma+#| zfg;w;53WvLg^kVT2v5kHNg0?C+a^_bO~@R%kps{8f|h*W@7qSN*jA4`jFR{sJFl(i zspuGe_qwJ#=qPB2!m(h}IRh_}g~)0C80O2Jw>#^9C4@$UnP00sRMnEFA;l_ojzH0x z8|8~pv5a<02IWcf*_$3wLJFYoo|q6tQ>O;qw#*k97Eua>qA%nELwZ1D!zCFmjUbps z@1_Y)ovr_#?4@hv?R3H<@g`Tn9AZRE0;S(Zwdx@w`R0ZhA&0rMcCT%nd} zFYAZDHq;(Nr}3oh`b(6jZU?ri<0O7&zS6|+Lu|ACqH7hFV+c}NnHE`>HVJWby!OVX zJfuHTDIWU@%4e)@^ZB;2L>fgipDaJs9!&%HW0DLnOmmW@(CuYt;tO|Q6T94z!{SuA zRA0q{Ff++oe#~py6Kx4}hh2gE*cn2S4YVH1Kr3V+-Yl(E)=QDR{Thvi%~hcGDcVLX}T%;?1X= z1!(nn!>qu^=KiPlK|gM92#8Qoh?oMH#2DMl<$<5&`iot@O4_~Ee868|B&4+teUj6$ zEu~VwiF(mxV|_oLA)Nge8dI}cd`k7lJTQ-UzuB}};$zeA`#3fQrTVl~IE3mbtOHcQ zAMY(o-=mW@$#@<6xTVI*xdv6?1O8CR`s@@)@ZcGQd55ooK}QxcO%){j-1mr4bg|n8^7h1SGo7{fp*i3I$C3TD!vyF4-aMVEB~@46h&sAkBq1P z^~hvt#t#3p{Sj}56l&kad4WWJ0CBOZ1XwSw2xSfq4epAiFJ~=ezSC0j;Z%sS z8=WapHBK1WbLi}x{p=vTGN$QGSIk&+F6AbM7P8{5qT-p=OTI9h8yZ+tF=c2M|Jwbr z$sx9{tbT?y&=AKP{F<~$!^DQn=_+Yp6EtP1qFPN0y6 zSnql3-hY6}z{&3w9~l?b_O-5^we+kj(H%=wCI|-S{s-`^zEKwPCOp_K%`-}pT~{^v zH#+`A*>HucALc+&KMo`Ud){JoO;p!}t1ZWqS0)MJJOhWSE_Mc@%RdPR+-Ag|NN(!M zZO{`f*XF*1%Yol^_leu@go(U)Fg{szSvHp3%*z~}ffmV?$th+-v6|ljQqByax3RG7m|^m0$#ybUpH(zqhSr`(foe{k4f;HD=MhIRypA-Z&5jTFh8g$F8HMhX&XP9H!OHGqj>T($5+dnWUBtc2iki3 z7cHnupe@R5LjaJ?_9lfyvR6KnhQGePg2!t)rgMBb-%mc@MuGbkHVfl>^#1Q2p*PPB zUq0ey_MHe@%j=?eDjB#@=+!(RG@I$nBqR?Hy5K2w>s&Q2^+KoAzMzl$!ZT*7{8Eli2qj3J;t!#OAx7o!dLQ_Zvr6n-2*KH-!P%>C z*h4b<(1eK|JgX>QPX5`4;JxUVzx40Bek&xvw~2y)duJ7bnux#0k!27yR}pJtV1nY3 z`49|$p~XHTRZ>)POAl!+FS0B`Oj4y z0)^9PoX&5ga+{!{h6pB*Cc7 zxj0NJDGf#SD>!(-r`ucqxLGgl`_;a0IP__4A~Yaj z>iquf%uly(*rwXk3w`H~c0zCR#+%LsmZy(JA;p0oy*0yu7aD@EkJ?fzEV;qP{zFJ1 zqv~;Sb$^0)%j{x(ey&4W@zqr{_q!JVn^g^%rsu_eYc>WQ{a73BSQhUJfe^gb`(z2}5lkG-;YY7Pnqk#zk zxz3UEO53*;`_9XuH=IS;>EP`|VjPq-R5VqPc@xYiL$UsdhK2;%s)4TwD_GQrnbjiX z1&cShUhdGq4=HcgbKtQQKsJnKypd$$=bgDS!)ZyspEf2Gok$bl3M5Q7&BdVX-4BPC zVtx8j5%-)a%_B5abK0g-76l9fCD7ezH z&-|CZobS3gmND`=`d}G1P^sa&5vvb1H3@X&1@}Axq1uAO1=PrZ2lUQ!BxtQb^;15J zCg|FwF=d{AT>Hu7xR|4Jw)5njeOzO=D}T0(u{^(P>N}Qp#mKhD zc7Z8RH4k{`1%dn`kO<{4$i|OQomwS-A`^_ZC+Ni3r4mg90D%$e)Q>oaWg5Ni za)9MdZ@HZars`oa7{G7pKqzlmsBRHN5M`Bkw)D)vetO?>Xnw?NUR9fli#Y(~l^3iy zjWXBgO1WlvXI=P4$YacvCy#TSx7oGrkQwm+=EMjdzXbkZ*05Bjdrw=24_?jwGhFc` z3w8t`dovr%uVvBqthdt~HhM)L*bMYoRF|Obmv&t|CC*Gey~F4VdXOhk*jFv8)TaEd z|DOS63EK?lEU)O=NZh1#Iw*6!fq(sUTD($rDJ0S#WxmFM>58+ZQwpRcIbTrwaQ6IY zwfPWK++{xNS-Z)jKZbb&s$`?S$gU~;YhLU*H)w3P8xYu^z80D@ET|#U(eHfsq%&p_#CUHY8zI{W=USwD;yHK~!$4 zl+@uUeVg7m-x-U;UH=6tsl(l*e?e5Id)bbhPuDafUiezdW0+n(k1tdM*QfXYb-P(a zW&IY2rCbq5C}Ee-$1EpSX4*08)MZI>AJ1UGzfOFH6a@+OGPO8aDOlKu)1V2}NylIR zTJ2S0pFpB^NGyo>C%kiiUbTEq-Yw$SRsc<$%Kyw)WS0Nyp5EV69sGE;`xh{FD=*_0 zs_$0OjK&YJw^^MEF{>v-d_zS@>Mry2L=4-!>02SE@4Q-GOiAv3KhsmQF)^v2cM5!u zM0sqy93sJ{#|qh@G-2JY@Tgi-@moA(=Ojvhn$CijKOsLMf?_Ex>9>PL`wF>j>S8j? z&Oc{_M*jRGlvn1%C0DAvM7nX74l3=35RPw4{**7?P=-cmSE=-FS&JQaL|4b-I|2&o zzeV(@Kz&#pcfTS0_RAqTOawups*xw=ot9j9cpkD}_G1Q*34wV>`%3}_muz`^vzXJ| zl*0WzbBXaXvkuXO=`M9s&aKX#HTD+U#(~%hltnPBNqvNhOJK1LPd4Jt;W)HStC7o; zhk_3Bva?dx#_YhxH@QQToVpOW*ZafW0Y$hjfO=*vs}4r-tXOqE>(n~K3NJ+=pY9ar zd3Ixx9F2PFM{OW7dbChpsLMJ?}E+o@VMKtxxns<%F2++Mz(E;p=?U{-9elhQa0$;KOZ@>oWH-0 z8c>aX_fyxLpaYendPrU39@1U|lf*xwf$%3p9aA-r{0ATlkgZR@=aGaCK;iea$kMRj z`pT~~hssyw6ZHh#n$Pu3&i+3pT~*GLDL($aq^+v<_-VaK zA69+yMFpRaf5eCk2~^25vd?!>rt_`&awW0SI_g1(;VUsIWGBT7)Exe5LXSR>RkGzn z@7SUv^!^~ZF|(p{0!z?{OM3jJF10x8p|zpate`ke5b!CsU2$K8t$#I7Rcbq6fwm zR8IOm^{jo$19v_3gsM5q-^A=uI9&gW4pI& zL)4CDrzjntH-P8+>8k^%c5j{%RGAsJg$v6m|5xf-xG?^Ihp_8OZfH9F4l`PQ+&-1N6 z9&a-cj~sLJWY@$<hA>ksKwWm;Z! z1@=5gnYflyGm>H4x6CingueA<_#AH_pQ)~d>c9n6A(kme=?w$^FD6;Zz@cgd3hZk{ zI!CTYEV}X8Z!fK&keE)suo4cYdS*!nz21V#APFaZq`~-H5UA9K06Y?*$w>FGF zq!%+y$Lp#3n2V6J3;SD z1C8Epzo}dW9;H$^3z4LBU0Zs@L&n%36c@9Q#RHkO| zTk{*H^(%v{GLTZ;{L~E|nbZV(PLqQ5UupRAplNQsGe}9K`5K$>OIo1ygxiQ*B_jPS zgN8t8sziF)vMK*CQGLnMMsXCf%(5riE8)-iAAm|0lj!f{m-I{%dG)lfra-Be=9s3S zzs1#4-sfiT@nW%3Gw90smbT%pXGd#ZptE<1E;}OEMfU0A&tH?wFdD}Rx2U4FrmSuR zNKGW~U%={@cgq*_T_eYGD)4{qMvi{&9v2c_i7tu=fW?!B@)jyRk#P>xU!Q?pv~BJf zpr8n^BMGPRq$9vfVMgVvPcEjw0Y_3-)))KJfiR8qZ|Iqg=k_6d)X-9W)1EVUt9-Wra;yff9+~l6+KQ>REuJa~ML2~Bzc!NbhD~P8eVf(@g;D)BG5%RS zZ~Kbz-^gjtHEevWPHVt7_IcorK>U12B|tn6^UBq zNmdKCstl6TooQ^Z+iOX_yco24Nj>a7;_C0mZ&ng!mAsK6x zeyi_Lxs$N-QNu&eREVPx4j85!#v@Et#5YOzB$AJhyvQv4nBKbG2dAON<{w9J z@J-dAZbX)QEyyj$svw8u`DCK#&EVg@j!tUC27Ia01jfD5!i2kULJjzgP5kfNi396y zI#87Q{_F}u*6|rSEnQvVH}KN!bj$(x8tm~L54C!PztiHc085m5@Rp&Jdrhv7zVlF2 zkR7p^e?1GTx%H2GYjc_h?h@(vxw{W_tqn7Y?B`SfP<~A8?}w86<^PWvh`fFP{WtqR E0Ae(9U;qFB literal 0 HcmV?d00001 diff --git a/public/docs/_examples/upgrade-phonecat-3-final/ts/app/img/phones/motorola-bravo-with-motoblur.0.jpg b/public/docs/_examples/upgrade-phonecat-3-final/ts/app/img/phones/motorola-bravo-with-motoblur.0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e452ae7e7cefc3ae4f410461b766c8a8ba946a9f GIT binary patch literal 28478 zcmb4qWmH{Fv*y7i!QJiP7F>e`JGi@RaCZ&va&Xs!OK=Gm+}+(ZK=1$ohWE~Vv+kX{ zX1+DO_n&I1uDw^U>Z+%oep`Oq2B6DGf+PV@Pyhhb`vZ7e1AGC%KtuoYz8Bc{7Y-2) z4i**;836$v@gwrbj~|dfd_Y0PL`OlzK>hFm9Tyz~3mXRq=OY>(J}x#sCN>WCKT4or z-p9bgA;G~RVWWIN!T$d)Z#@7EM5qL)1Q;kv05k>^3z>0N{Yz`|j`BTyh>VzG&0D;pzGI(z&1==J=wfX#!3vs&AkXS2ZZ??>`O!76Iu$Ed8eug8~kdO;j1n z*r{#?{##-JHV!4bit|r!{mySHAP1+INiQz-7jacJm)WbgRlr9WsP_+t!2k#Y?iA2N z03j3r3Pce^F?8sE2{AWg!rz-kcly=pU@ks?W><^yqfv5@S7?PB7IP?+7+ADTUe{X> z6iLkUYqQWeo1`vD07IAu0LkCVfjIz@tD2SY7Jpr%l_C0hOG~y1W!U@{5ivbu1`?c4 zh3LK>$PpK@JX6HK`ycD%ox3ysL{^~$VpqxNabcGH-tbRW}Q6=*sS&mh#7fin1sjQl0 z1CuvOU5sXY+wY~n+VTk#;!B%z%fQy1J)XrbLfeD6nsPf3jb-bR@`tm;MY!SGzxuNg zL|RU5t+Z)VObgB)V+t%)$P}Z_4gXVAUUnvoO4srrk}ziT@i!wKh)f)6OJ#M@3eozDlfRGgxF?wENU?)x`=OMYasCA+#p4HKqR z|4KuD0~9}% zFsBMSJ}+dY<+r8K;xiF;XTs}vDpkRT1%zj^P+Wp#^ix+f&y2r@!{d2Jt z@UU5V9$|;qi79VqcI|1_0pPH~VXL<+0>esDXrf^)$z3DM|FodQ0x=@9&iTI2-Hjd*YLSPtXM44=ilP* zUG&OI<`sB);Fk)fgw%gJhzM{D9)RJhVwK13gX{tK+!#b=7Ss4VUwuilMT1Y_%^T6z z*F$>0xHv0d_!CX6FF&BmNY7((MbZGo&;!v!$YCiEp%BIXuY#0Zf1k=Y@AJDW(FN(O zYeUgX;{lVVQH&5Tg&Nuu6aFAQy?`17_;>r8xKn3?^m5X9HbnSW$e|$&gCnrZSulrP z!UIjoyIyj#(U9z+jP9sZ!u%aRwVe5qBS(9^-{vzlX|T&+5Tn-AO%dP0)qs0j*4rR`tL%MoT)bfRyu#Xn1)bce!Jn&p~--ltTU_#Ohnv3 zt#B3-MHxIdakWQF$-(S5{?-nxQ8?6*Vl_I||SxMqL?r$^=ss4-mwu1h|b zN*v2Wf$Ra#X5Wda&xdR*%k(Dl2_RXf!h12e7vMS=1l+AJn-{?Y(vM`M(HQD%WjKkq zK36a}ncYxJ?&o2e?Dx81NHE1IyQE3cLAQlmM;*>#SJ5U$9VU$eE=1yPoffYL!imH|=u1|bTx%;R5_9I$X!ftt9e!>rN9+SQVo zxUrm5uoF#0VbMif56M45X9St&*~#WsyGzORpwzFf!+L=2O#M^u20uqmVy2W%M9SRU zX@gTJ*bk*!j;>+Ljsg7ZHu<<`_KW6L8DK~2xWI%75>dov<6kRNSuRNWGK?qk6A=bwcyF&G`epyh5W zuS$DJe*<$r;(?6xoBL1@HPJo<>bobJ6}Cb%z2~fcDP)6~LugH;IJk7M87|^Vy8GJ^ z!Dk!R+`gEvO^k{$`iey5L}#C5Rb#b`hiVRrp^uM zRGx$+a~d;djk^NlZuOlL2+i~3=WY7vy~wJNrFqO*YT1NPQBb9|wL<$S>NN}yygn;( zsLQYgYpqlYUmOi};Y(GhV_v>uQG)Nr^8FNg%?TNf5rhYeQ2?tIO!E7GM(2{Nj>BW5lJ>N4tgazp#hiXJXF%{GDWG0jK-g1IVuT^pWNId z(^6z|Nb^T6s4elCQ#Wj{m8dlv&Fa@aSk8JKgc^~_20#E`oR1HR^$rq^_{9eY``RwD z44F<}7vDEvmXEfe+{mNU1qYjdx>c1XYjCHhuPs*!iY&1(bp6wXLAlP|1J%n#clyA4pKp_-)juqom)+AqW+!2 z3n@#55@@IR?gn#!UA(R{7%PB(3>0;OFgxjE;H zwEgObGoR~YuR+s?^mnx$|EN`dxMZK)+Po+~ceu@0g$w(UhZ$)viz#m$%ocI%dc#U{ zT*i!P6q10eh17Y+10_NNwa<({$DNPqh76OWWv%0_k;BwQi{7$|!`(!0x(UKw@IJjECDnSZ=XPkr61A3{OT3>H=DKJYN0qWDfTZTSZ1J)Noze{#}`!42qw z&QS&T$<*$oSvN89%k1Y`mo#g;>HZXT;AxjhaYUjJN%Fas-!r%HplNI@Wy#Mc| zO?nxFiAurB8V9N#Oj{qV8G#Q13A-v&OnIWBWt` z$}d*qDhjMvG85agelg4Km=A0kn3Il%oR1?`fn#}WK5--qo3+t|WS7kX7XLzTE0@uW`M*{_=Mec@b>UJm1{`S_}>mKx@djpKd3!!HPA4idUFC}NZ0d#t_Ey0{mE=iUjXXx0m(o4Tl4ViIp zvGv#r{YGdATa%3scIq_Zf(OQEW-PD4sWv3unP#j8-!deJk|t!dfpAxiU8GYzBKE!& zLvVMip_Y)uFvXIwCF@Y9GR9)*yl8{z)&5e5mw~wCtQv*cICu5ZrQrvx0Kp}x^H7)! z?m>g2s1)N=VIq$9t)Xff9=A=&h)eQJ-d04&v62lzjAzIK6HFZ*LW(`@svJX@rX5AS zDc%a~WvUg`CiEY{MsSmXhzpA@XL$L5PjPr6)HEY`f(B zWI|C%;Tzb$ET=2GivL({zo2B`grgn2unlYA-MpqR-dg(e^K@Yq#q!;^bPczUTG*RS zjkd6{23gg9KX}lyH{VS%wKwtzqKr%48$c_W-Cg@5EavmaI6&~(`1k0mR|MWge8z+D zGInCi!_n*T!Gq-Zz?E3Nv#!P}CT)+Z$uK^YvNAyYx$2d$VP~rXkxMj^)GE7!^0C zz!rI)3|-`9Klk{Jm#@A70y19k8`LW^S`7Ldk#8QISk^Z%uwus`86)r0uuog{RstDz z=wY!FL>G^wYxdi*brrURz5bFFGCRA*EE-7;#*XVgTJb+vMXV*grPT+&daiQ z4)7)@rFksET{QUlxR6<=(o6qJmsqrRF)NTPuH<71$%X!DYfXauB^m^boz1NyIyhJ5 zVsAlIb=*K>&d}%1#l}}V7qd6saZAanD!Fgt1_1a`Jz82=W0uWPS`zWy5Jiw=FfD$) zVU=_?=elN_X0K?|_)u6BqGeb3Cq+Bu*HF*H;s!k zp0#sz7W8SQvJ2NRsPoz-1%vz34>k=*x}o;42~dEl6m;*bfi7A2#j>00q-$NioiK|7 z(l5UR8<1v#pxt@dC?+jMyBz@*BdAhwT+hu5LlK_Dh;5f>4Wj%X@E$c zjb`9squ$Mz7m8luDTEvN?m@hMW{++%jPg-qiUK1GL4-lR8`8(#u8|6(enMXpo-QVw z@*rAA`DxHIirKY|ZS1}$%Z^jnLxbz( z&(SZFbx9c6xLHQ6cgG*Oko!1*3z*9pDltXd<&%UeK_J+mKul3s07{|JbJY=Yrc-U} zxj@)%OSWwjTYHm7;tvyFg}N#Me+z&1AukCDaDS_{SV(`T6HCE}=DN;kA8M&%=rsUq zm-%ZEgflyHhT!XYw9JC3B-XS14zt^zB9S5|GZK9VOMa#9%#VUJiyE2t&lqB>bT>2f5ZQ4L;mOmAgS2Ku4y{{_bV_f6%0wm2yx zfq=^>4y3d*^VY5GVOb8DgTf`yh>t#V-z?ALzp`N+>U>l6q~q32aWl5w&mzyt6Zf1+ zk#{d=N=QZ|pEPav$;|p2UG<`bpqO%>Z#Y#&Mem2-*C87a&;9ry8Pf=MIF22>uAR8g zDF@E@gne2EGjDj186FvM-i2(f0KD58{28);>awU;Ha^awyE?=}aHkAk#>Ma!T}t zFuFe+g8+Z9@Xdt`>Ib0;xhPe_7g#%e{)RYt{4| z2#&bx@VhU9x{i9QnEszi7*i9O zK=}3HxM08e#*jRZ5za{kwP(h1sj&E?ur9gQ*#D^%vE|qX31J1@>bcZSKdyZeXfT0OcitIcM~VvG~lzhZX&rv z3$A%5bZKbGS4{Q65(^u38ft4CoyN0x`O^B8z=2;8|@eJ4b%kA)& z_TunoHK<@dpX9p9k5e-@uBnvhiYF(a69BPHMC)LQBul~uwU-xdlnxnZlfx<+>?bD5 zLpXQMH<@q*r%001?AkxX28qxd_J0*uRDDFX@@+Kjst?L0EPyKx& zmvDrIh57jC+4cFTLi6c2nXE6ew$!+Ql4G4(Q3~f~!8RD9hr3K;tMI{$tXkgg7EP2uIT}o@YfEi5!V6;CZQUR#S1!3g6I2()}!u5%tI=vz0|r+2b?P4WT;jmdRM)Q z2lWYgOUo)Q9q;_M@Kb5M34QhZSu(5sk%{X1wHnTFBBc!{U?_FZcNtM!$}6cK;5Ksw zk_m4i=9-E`$;!!j3ssr{QHA=xjSMEiRef`bU1%sBY(x-`Kn3pfp!#4|_lvdZI`>XC*ut^%Nzjac*)(WL?kNC$<^^Rq*JdE&f1pjg0pu zuf0S#Mc7s!hf<{}KM)(NQs5`nw){YZagJeArb(|>z5?PKIn+wev~p;~RyeVure|b? zaiibV!9uNeus^uKYjLdA_SV{70Q$OuoXEK#|9R-nSo+yNfw}ZyPcnf{SQT zduw~IG^IxQaX4TQ8v08eq)T-K{EAyQUy2FL1EuQkdG_ZPiB57#jhb}+yQf%We=i=;xC0Lv zp5f9YxD73U*)+NS8p*~qJHscJv)`atDhIPmy~=YR@j^b*l~Jxi3ToFE(?I(Mc;35l zi1rAjNjUya6HHTJ=Z1p)ViiBrjOK=gFB5TQmbwJ&1%uk^Y%yFG0Uf>n25|lOh36DL zDY+me4VIsY(AB8=YLqv1#X;fjBfh(v z1hSQz!vq*taz0Pqp^>tnCn?LA{)4|4W+)OY36zo+u%sWOCjX{U0Uuh%J}1tJh#hk- zIg08;b{IH(yNy(Qm*eIm?gGW_$)f_dpR?AQhIPPt($$8X_u;whp^5tt+?6R4)z=z2Ns^ zd;yn(Xq{{3zBQ&asz??tk!Gz@`=+O!W1na;`#_{#_OQ5boLiiHGp{XKIXCPc21@=M zW%5ez4;%k3FJH9GR4T1rBr!SGoe-RBh(ia#3Tb~`zNY7CW!sV%^|0cSF&)iF^4C!x zTm+>Fno&Ugrd|Uk5GZ-#0PjSngOJVrM|Mz0c5vp0C1xM3xF?DF8yn?D#-fsY(o;~H zA@FLrxSrA6x>;j*}ZDLd`>2_EZ83P1d)Lo zj)At5js0E`(OnU-CO?R6QLYxlg#TPaYc};<;(oDQC#JwD1&X{}w(UnnYEb=@e#Wzt(sOW5qX%75U_=`7|&WklflRPqFvTFi#af_mBaIbjQ1nJ44&Q zke8OvCDSJw%Iy^Mt`)SUs_AB}rzKcA%{a@j(m(={>c_;l!bEd_U_5q<3t&99KT(7s zvWF(3&a$6j?YPbBx~=ws%;u3(3y-B+aQcY=yP*#)ptkw4W!*UD;c%NKi- z;oY3phl8L}8lkf8_f_{-87#dttJZSPb`~Zan60_l$z|IrjLbWpjk9EHn_`7>j~Qoj zOdf(qPKwXO4Bw;2FAbyQPE<#har>o?EbI1*k|^h|Z`(^2w3dhF6(0q(<>mW@aJSQK z`PjG32Zs@udL9$G8($yT24^X7(sM7faB@}Oa;LQ$jJ2IRLwH`~L^#Q|9XaY`9svw{(5Zqg!{{HpsmWZLg) z8`X65-V%Zj#N2W)3goj_qmk%Jf6z7aKEsbU|67rh=GYz_R!pE0G0)tLzWVbD8AMtJ zt@q#0&;M)4jy}191+8kHJ*C~;NFO$Ew*cB817RH1Ofoy&Cyd}mbVEmLr{9ty!kn>n z5&6iwe+F})7_Is1=-2K|utx`U5{lNJQJPu{wt-$3ex}d{cAj@AMZbK4FSOhGM04La z0T=9;2`0QN2m|{kqIXpIZmG%qFq@$9uwhzqqS-b4*!#6mV^P9@V!S2yp6=;$CpDmH5!Q`t}5yXko`6bv?Aw1wAvU-ea^oX#<=I@!~N zF;nn$V$?gV&T&XUZO^8k6c{Rqx!A&=tp_lTLq~s5VkWF+YEei}>p>$CVoWl9P0HkM z{89P>LvjMnI$FtT`BTE|O2?B1_uC-M%{SFaH~z6ZQeLJ=TG?DDH8J(qI49F8^t_mq zV;jvTMx!Zr;ahOQL)vF=fGqr&U*hF4PQu>|{J2Qiycj%>k$qT5PQ=u3D4hbjZZiw8A{9)5t zBF6$wpEt6H^bTiu*%j26HaU*JSTQL7>R(3l6(I1(`)zzq#94nP_2KW>d`afu*W{mP z)hznpYeQXlZI%@BY9vN_R45bMBoh{}EfjE-pKOS_w1QlEte{*oc?#pCa}67^knjVz zoUn}aoxHq<)lpo9$~wDi1CFsQkVyi9*rJu6w5rH>qA0+|wEm1L;0P&Ew-l?d2LJJ9Hwu|4t=gL4Rq&L=f&-z<&B{*z@|abV--(4KUt!Uvw(Hg@C$; z798#rv2UlD7GfBwLiKk-dFb-{Smj!*a`$6le)Z`q!uvm{PH$cRX8?%oUjx=I>&KEx zNsC^G%Sfu6_x-n&-vK%`&Etgtm_O`!2DaVL6#-3Ts-&w_9E=2(dOg>iqcJHAI`w~h zX%0&cR362YbO6P4fz16pcUbv#1CAFyCYtqm+)h|Yt`+ka*co;ezGEuc+=gQFaEr;6 zN|J^BzBOh#K)#8x>-v23jOG%WUL-m!&gpIW!D2WVn?Dj69d{$RpR!ubD`b}YCV|wW zE}RDxkl5{NI}`aH9-0T@J!S^Xn8E}3#!LsPipk1tUFN0+LTetiIh!k~`4%%=hh4pq zY9+0jA7516tOYmJWakLzowc|)!_aXHPh%(6f!KkF08G*5xJRjl&hWgYH$Y_k9b@cS z{*gOqhoDix_(}HK4IZ+@&>QljhoY&{w;4GSirVC`Pt|3SlXeu2o1qogz!wN99~Uuj z@YG7sHdM%sSgk6`m_&DyceEjXLDX4VT;kDiJzk7i%{3tO)CFsMdfUuTdoKHd4d^sz z@E&Q@jXcox7P)q5JCjK^at07PBh$NU)t@@SmLoXxD`L;`%OCL1;J;A9+L0izJ*5HKuUc47NIw;0W`^OezwO}yUp^75a0XdyL_^wXS^p3*_%}+0ZqaBKM}Os^Ehd8CDVb$;rerz051qgtFS$1JT6Y2(iD@ z?he(neAUdhm*PFsnHXnRpN53qYxXqz!Z9Hcb3Rig7RaKbq0lNESLyt!@s^seP4CcT zEsw5){L$=bVF+d{*r8pff_VC?R)X#&4pKKV9XUs_Zz_ar?25sD0EwT!sI?TLlM%Te zk=?%68uMUCecohh)0Ql>$8Oke*pCsPHrG|}1A&@qjR_B0e2l9~3#kRW@D=Y^Bxe*x zyD4|9%|pLmeoBKsq3ZC6#~}RCl9!XhsqgUgJMUC4*7|%jX^i?Fg-&HPSvMS=Lz8N{2dZ z3MxOI-^!l-s7R`2DZ}km#Ek;Jph*H<&a_OmQ=o(;pw1J79k&b^XUdvvvcf!mM@VlA ze9Rn=(RylPS)|1UoywlE$+8G;srmNT+-Do=yS}a{rE4}V;2$u(S3;e1O*L%4{lv+yoQ-At;@CVty0W*tX`V4dWxw7ZVCj7;s^w8h7TC9Cjz+*Q9`CyR` zqJO0ld8~G6u=swwCo-o&_WSHp% z?rnRWQRPgDuEPg0DXNv^ZZNueY|whr-9(!%Kp#&BIutaGJE@J88-Z1%5B!)3u-V2` zxT|l#zufqxk8=*mHX)*?7Kqghzi|@doI^a$5If5kHK| zDm14Muc9MU6UlPqr(rKlD9(EApk4c^zh`hL(3l&t)S#)~yikC9jjG-`2v)z^zD6g3^HVhprw{5w>rZ7iJ`ZrNrUOnB<1J~8o6tBC@=Q)sD*=9GxT}^}!Z-B3*XKZxMo$#HM3@h`m)StYB zTUBeT`m;k%rjlibE^1-=SqxaLUo8(uZ)+9t&t*FNl*QA~=q_a%2?v~Y32<~@Blc6Q zuy=fmGSyEyltwewAzD)C)lzFDHiq)1+iJ)y<*SgJvy!@~U7p^GRNxA8pxv3!pAogL z!ok!U#RxrmNPA&2#4GBVi zYx$ec8mAR+F^zLJlPYp=fIy_&Y>SW$HeJObdG&)NT5X%S6(IL9w+@=8;LqRt-Vp^^ zwz6Ht)YGS^<&OR;-bAjSckyjNlr?I_EyrW@cQds(PswL42L9=#Ui9f!gUPljL0~Di zJu(ul_w6VyRKPqgQ9U~ot1LHWh&0_lz3I~_lG4Q~Ke~4?iEKG~AOu>eOYEVgggs4Z zeiT|?M2k4`@H2+Yd{yO#R%1wIr&V_sH;&q3r3$Wwr>AP~!N#fS`8e|tz$!>4?wDIx zPi)PeZKXanY~yE>HZXA*JbFn)xYxq-eJ(*h5T;d!YtEi4^uUhr=nc@R`l7O@a%!)Z zo6hfGemoerR1lt)Hb$IBB}J*UGN9X5K)=WMNjQrQuRo=sFO&eH@QTG6f0%+!JF{Px zgNldu2?01EW98?tJp3S4U?2qw>WCYRAzQs7OgT61t{1$Wgneu<%OYK(Hns~my+rjd z+X|pkeO|FiAK!dVNyV{0tCu?LA&vNV3`-QU>#|F~sq1xT(f*D%K50F8Tw}#MnMgL^WBE-KugiYelBGB~p zBmp5NvUdKh$?+S4l;=%unm5AS8U>m{Y)WY;5eTx^QP?&8HY6wd&xIwtV{kfn=W#uq zpJ!xJo?_hLZo8Y|dlQ!-L(?_IHrNB+Ii~5FnOt3+zmauvAmR!9n^Y?+anxdVMq6GB zWa?8Z1iRVma8e>%_u>|5GLaf-$_zrCrd-Ur6z;M58v{$irR8oGcI?Ic4TXX`{#Ros z(Pk6+tmWo1jM|I)_(lD!yqS(FC=rg(qQ?%GjoP|?G9ZnYc!Ro51!U!saeaf)>=dp( z0v5{rxwv;8NUge$L4z_s_wnu3fm@Nc&@-%W=0Dy0uDGl#~;X391zm7J>E} zk41j;`@qeYr=g+jI$+{i)b`-%0ZEjPs^?Npb2jp5yYwl;$ZNUN=d?BqNHyVOb7pNS zXSFMrTCU+{8a|6~y`|`{{`KaG_Dg@c+15mMz#135@UHNS%&tHr3`L6VT#;vZ_zhzO z)rpwJB=8mOlUEW4&@1nPgKC2`=#lt9TTt)*l>4x$7gf%ZIs7<2c{5G9jLk7rO{`0wp314 zE)R5Gk=O#IP8)>v&Q{G-1H>y!IJOuH<6&s0`4Wa~PjRcS|ZC0L&Y%)$L-U%`S z0546TD?H2W-@+N{Ygql|z|TZ0zb^KhF?d?GP4nEwK`3n{9c}%F4L2cXi&%KCb7Zq@ z)MJx847{QAPFo`~p*>erltp)xvmFAe7#tuc_QJkjaxkw$ zxwK;Ax62qfR6uT#!K+h~#MhPabDi``{9Elm-P;;nArrE^vm;QZ?)UrNWXdsOmeCB? z)5rC51s9(;Da_5`ZvbH|94uUg zE5$4y!(tcNpE_H4PSN16?DkmQpPJnsfAk$Me(1ZF{}4HQA{c}&HET!kES*_1(UiP2 z;Kc*}h6)RIsHO1iQbBKCWvR`K&qNblWUg-<%<%BC^dFi45qdxG{xYBd2IpVJsDf<} zn?tavJGP)94>F1V?on_*$}cYC7TQ0UxgD}%qgFx0gG=>I3AH)Y%f~CM))Ev2JfxNk z+P${sun}Fiav~P5mP>15;eOmjZTD0h(sBv^7*F)`>W6EV`IBKIOX80u{{{f7Dag8J zeMmBO6f{9vLt@m>R@FyT7O9}7)|kee9mczyex@=wFo}svTj6W78#CX01Gr^65FAQm zS>&J%D8wIX;uBl)QQBpykzK8mO|bCYoSN8A>5$ z6({0mjpuS@)@$SBOTpZ}{B6AG-?)H#>bUN!cfcdm1hBRIpRVitx8VMrHVc)%sjd&N zNE%ehE1YHhi6kUh-c)GnWrqezaBADW|J#8ES+F^DJ95YJePi%N#IvzLREeL1Z;^6x zSL*AWJK(xqai50e7YVEmuuD3+0sj4%h8*Wlc5lF8@RKA5PzX}B9$afEXY>gB!|WdW z)Q5cTg^HkRjKO@j@ic|xoL{_JxIN8jdr9lb-26Qx8jDsS3PMxRj7mL3mqteDiA%IJ zzw*JcnIACGz!vT7Ir`dGQ$n)t#0s9oolOod;D2%2gk%}eQR8~>L~PV?UtPs5{IKuX z9aI&JN@&=mO1;kJ*MyT%(;0HgWg8 z|45nS)`Ms^uF_zgE51AFt|r=OUB?j{RT`E$M!B`x+k53Y^;at24gBHUkX%s<_kA{a z4IUN1KB4D7MGdsVCVF+ko2znnVlAM=M=p}CV0EB5`q4#Cs=dj>pGfAJO0Km^zoFiA z74}Kx{i4=bfbI}yTa~H<{z3P;+sVh&oubT%Az?W&B4b6IgHT*$nqdjqhA6FcNyJ4T)03xwsto#5vPQZ&-cFYUU7L27#|0L7E2v&O@-{k60dZQL!YSw zc>AN~a#&9z@n7aWxh~S&0yu8WdmKq0osT!klCy&RGNouBYhtxF574d{GP6$uD!7~n zldNN>HkUjDDc>gG+JQW)`Q_z?I`pi3Cz z^L|{*Z|xVzG(8WK9uM@ke|Rc9kKJOdrltZDNFQy29tPqARBP&}Wu>Vmo0B%%vo42z z8kK$Ep3b3ah~8xKX_ufgjNMCp&E8|fs}Q0$aEcR{8IU~|iYP0YqdA?6Oa-U7I~$#~ zP6NMf`h-W$GTSlBO_wr&m80yskgQkc?GZa%kT2$S*v-t{oa7zoM{R6gcMnAK51y+7 ze6<p^s~c*{r2HY=X&RXZuc2gE)lb)P zE$UM<#K?F2TkX93MJ8T-;PqW=l%duy6{8|Ia)bVE!QG;7@(auP57H$L{_*IwkpO`YCkSEQFQz(McdrI0fL3~K?) zq*?-F9@zGJw;h$G8|bgSHQ(ZH>f%Hd=Jc8_C&DFm4X!TxN#G(x0=6*9nvx<&JNLFg)u`E#?o#GYVWYZc6mGo8RJ9f@&+j!$d)2#Qtm2;fr>{-_1jTx*`eAh{s{?J< z(Jl%^eu+xq0x|kYvfs1^noH9{oOW#{5BYgh1)n^IdX9wg&C1nMvWW2aaRCnllzP(< zzhv&9UyQ-676?&!Tm4vuKk21O11Xnr0iUl%>)3`WCTbp#y)<6gNRLZoZagyY?k-PmV z)5YiS_H8Lot5c;e`Bz7MF--t!DPJKZ5BP0e#j7|jM3S}JEXRR3;c=QwBT;g0*F4@z zkv({b)kCta=BU8U>Fbt2NV49Vr;P&{{%$Gi3BnroM6HBpf?IrrLHJoPRkoWDy*tf% zhv~LUO4At$qjpzmS~KtEmR1Xm-E3u~kIi1On2%<~qt81(S~*|eICUVzzT?TXf(o$jA*8tWK~M+R`!SkYR+yHn(Rcb@_y6uv_xr2FjwS!$wr z3g8RNK;o~*GIW%bD*_L1F6^>h7<74rzUU?a#H;^X6u4?8DrlmE~ zJTGAS_OIg8H$eL?-`z8>)!$_p*PVX{)WvyeDf#cO_-`L(t1WkzXqf(rATmyi-x%V` zM7WpnW7fGNukzUqxUQpFp$gJpni#0xeOXG*e5TTGCi3KIlr-U#7S#F7H)WbnRs*=n z%nw?yC=B9~n=7YkAEOk|=12V1Ka66sdJ6b1FJ?^DJ6R?rORELr?aUky<;%%Bs`mzv z?hl!3CJ!E^vW-=KPB!l4Lvlv?r#5gd=qY_O9@aDV@}Z(TxmWFw*1ULZXO&p+XNo~n0nqs~boqUo~g^aPP`7_O0FqoOB{ z3gPo6-&mHv`qg<*QO1;aaMgMnRk_r=h*3(% zgnwsTP8XT4FTFZ$X_ct<{|+IGnS0d9$_R@_x%>?Clpn*Vg0$;9*>qJXYc_5QUGd#S zsWDE#hAJxplyCRhLZvFBKsBt#ZJK?uzYd)FS&4jS^9puyT4tzyRE*HD1F;^lKtF36wn0* z(Rr{i$cE{7zQVRbt;E`RsX_rQ)=!T*8ZGmiALeJ8L$0$kP)hl~ zaI3tOEpOjMtN~Ri$98P!r4Jug+6y~x5QY@B%G5j!CW2^An!K%ZE3u>H?uEzKLQ>>|tZ^i7o ze5Tc8{3;t0xU!)f(tKrz)Y3Cs*|5+*->PH)C!vj-a-aguG3`lJd>(kY4Tc0su zwW$h%BMImYaE3oQ_J;z$mPRYrxnkpUyIGkgiabvFTD4xpG?cyf6BYabkqBsKbbf$F zLqrX8tWqRh_5f-P6FQI{2xG@OjX#AvJ$dF`?BzE&&|RzIb}~1vmrG=2sX5X(a>5H4 zb(U4zTh83~w4Bt8)MWQHh43~PYWgpq@Jy$G{ad5TSHk}O4d%!R(=pKBhoex%^7%13 zyN$B>yw>qy@Jsj^)>^Py6ZPI}jT744Tj*725MFZ{;UGv)HEPoVv7QLQ zYNBiqrF*;+#2nL`?K~l$yTCZyc(R2nIN0)JTGAp8_E%Py`4Zj$%{yC~rFqJ=z%$pU zkX@KbVd8g*8 z1&V1P&T9pFC%8rpcJe7UDC$|R>$)}EhgP@PIHA>L)2!NYXZ7~knbQ`{eW^x9>Z}4q zF-frX7Ai1oW5&*$k^AhmL?l-Q%7>oUDkNGCG!Qka2fFD-Dhd-l7XjVCd|Ba99DY;7 z{bGZu-OPS$!wgq4xbk-=#C5>f&qM)zo>Q!wb3?(Pt!K~Q|SpU?Z_`@Z-8aMgL9-{ZLc zlHI(Wq#Cl_dQDkl9cJQP5z@9{QZM;y3YfwYtK#m_W4vTYMFNSKndnpf8CG| zA@bABz|?M0#w&D(YGZSVQ$G3mi?&`{3z)dwxI8z>{P7u?aKK- z*;uPg9sWWKyw2vKLlffdH-MkG-nZuzLQgkG!@K-kbN!!6v0hj&`~z_6)Y>e3;U)Lt zK?bjHk4e@BVKn?Vd>c#aPkA+sk7oXxrwdLZyZ2@Ue-0*Bk+wa7+RP@aD;ygVS0v2$ z#X&)(&L|(n-dNlr*N~iMlCz~H`ny5t@{4=KK+kI}O#+ZGt(gl`z4aA7mYz?j1;lR8 zy4eZiec5})d4H94T5HaEa`oAG0vGfJ5MV&Re2g`1{pIik}|qx<)BR*ej# z;+1ljAdec-xlI!cpVM>Y2gqK;)Qd5DlgZf44YX0!0XJ@JkqLPNDx06SPd|(xaUKI!e=A{|VY_JH5=~vI7xgn`&=CWWgwJvouH~M7spnzQnw5(~C&{*ZKbmm9t(6lP4|$QI?$RCFs@Xu85LMJYhi!J3k#iP>QSk-HDLwZ>Cyn0p5=h+0zXWH% z>?=O}1z?ou6-@K`9RPZsj97dO4P?2Xsm`DXBDfs4Dt0&$%zW(rgM#UK#itnaq;wyL zs5I_dVO4LohQqz(Z-6k*a$p-ER5_|Aw+3!n9Ob`>;1hkskq+04;bjZ`#Rijh#7Ac< z^PgfR>Z7oeYi24^JV=_xfMrJRhhhMIhs~tAP&sT`bT+_05q#mQ3e)u{D z9##)JED5mW(N^ot=|JyMw)EI*WIZCNvdp1d&aO}87$4LAFxFuopZ>CD;P>VfD9|DP zv)hND_BhVHFwm$zEa!rXVhH$4+FnwG6tmJZs(n({`348vL=0w%U( zr<*>Bsu?|nu%+x_I00mj4#Ax+9~A-6d1fRx9R$#LiF|b@(2$1pq`h&EI3ufQYAq+z za=@0!2lnW6iC)Eku#u|*0AP;p$rtnUC_ghL?KC4(60HaW|0!as^6XIZBqSIlfiZ2Y zBIE6D%nyN(8O{R(mz`)$#hC^yf8=&@aW~tP?45QwIy)6aLFm$iy8@>a~fJJ35q zqA+Oo@TKIanXj;EPk7q*s{{DrtJ)pnJo4%3j7+IwG97t)zd72n#o)CQ#>Z@mHR2s9nkM5$xtwqa*Y~<~BdZ`^ ze%o>{hs;CfQIB<7`U6DbZp2;W-Tr>xj<1;p4NR81 zDavOZYJ{c?p#pSJAltHkH}sXrQ9$ahG$bF?n&F&_7}Ws}_LAt^?&&pQvzW@IYvzHSiQ-6phUB?ZyD(R6R6M_!e5~lBFYAkD zUD$3vX8J?F5D|QK)6Q-vbW>QO_o^{|6W8sQt>w_^4(@EqtFRw)ijiTS{EM7HO$sTR zPc;Q6(<)XaadFfb=zBG2zl97e(%ZGrx!Sx6D4go!ZGU?mjn^Snw_paXbAFdPw$!IX z=iB^1%k$^pj8%xSOKH{vBa-YmBWR$5ffeclOFvJmGWI2!j{359@Dlsee+~6i4U6(D zwY(bWf(A!U9_3m5)lUS0Tz#XP)-X)}0T6}XS@Um@*3*AGcOtF_Gqb`4dP>n}hYDl0 z7uF-h`FZ$DJlr{5ZOF#zlr^=EvCr=@S(XJqj5RY^kQiSiye{}Xb;5A>iwsLeHK*lA zn$RcBt+Zr|Kbdjq(QFfKp211m*#l5e*0Rnr6 z>z)(JKlVs?di-6Y=M6tH@l>&sPbH8tWxpXN4fV%B&v>cM99uXCO6*56h}h;7&9So| z(q;gmC`&ZclVyF5F{E3s>O{!}mY+8kyjgr6+#K(aS2ET$1`R6jVi=boi=wo0HGi@t zsU;j;y2BV834sh(nz~9uzUOTK$N}m%FFZXrp72CePB%Mxrg%<$2Y=p~>3%0nOq~NE z8sQ>@gfcILSxKl=&cxa@wXG>QfC)gF`@@p+10$R-&%`BC;BWIve(wn_E%(0*td)57 zz1g>+y)_)!Zx%w3wiqb-b<~98q;FEkW__8#>_Na(!d`Oa8_MheP=Kk&?^WN%I$dzt zpA4~Thls-UT(WXfw2^M?d$%9iBC5^ivEwczROr{HsAhD{RX=L!k;`^u%1K6_Zo$Pj z#x?BLr|XJl70=i7D1uNLSiYr=#77N&>T0PiN^#r}c-oyR{T)G*)A+ouf(*EuFB>yv zF~!LsF;?}x+ppx>Txt5ke*otE={RNJI6<{@Zwggb4c`oe4{FmuzKA1><=N@VixaIn zhC|z&K{fV8hLH#>|*2SB_+TZW3Yy0<_?(|@#KqU@FpohVonqk1YY4z zjszk3zIO}%LhLeuxx`ztdQ=KN30Zo|BpL8MNZ$D&KW2**kjvnE+4Fi$e+CM7#PF~5 zrWTbtx_#jv&NKNGie1s1^vGl8;&av4btS$eNWfJW6v8Jzu@Xa&u6{*yWMxA{+c92P z5QC>yM!iP2F+feIdWKrc@FbJU@}#FP`9G^vd){0NeJbSE$};S)vC9jn-B*|^JQ31i zg&v$wvgczv=W!-$8<;g==071Ih^tGn9pvM_p`Ka6@&LEd_qT((_Of;V0oa_5Vg+WO zRDRRw0qb4@b!C(OLmyl*k!gJ9Ho1`H>xw~M>xbTttJeHz zRZF91jb-%eb4CYKufUQYP}I}_72d%@_*npY&tYLHuhOeH zuzFI#KGjuMYOIA?j&W~SrDmHvsfW_XghX9;x3t?I^c$dMn#E zPq7Zq-t%B!Y(L2oLiV^tw{Og=qCmk)drpoISitMF;AFDivBqr~8a>~A$!?j_;4|95 zWc^Gx9JR69f;2Go0fD>To%MQfzRhRiLFcx#<~VWJobcE0)17JmJnXTet-L-oR0Hth znD4hQl~7YMI2*iT>`p!bHjSX4s}8KI0Gt0-xnR;R1Cs?CN}WJ(9d*WRW|9bys&tXS zQ6h_w(#D$a&h*!$V)1*gucwTXopz zyACD)mYes@;bGKQYk-3DNXT_?vAORJj0wE1ge(cMaf-7`uW$OS^;>@2Ta&}ZQc%`K z>=#$?<`o(J$4FVGJbx*w+rp~jay8UtenMl}3s)e4EVq^ffZtjkBr`6UM&}VBqeN8! z$tI3uR(tcz#ia(p#y~1Z$Q=H= z%Xra+cy3L6_I=Y8k|Mjg&tHiRJ!@PRFz=tq91UhQbVYbHQV5Ndj>4F+Aq|Jl)EF!y zIE3)z(O)Kxysm))&Pyj&uDJ>B+Uij4MI(+1uPvyn8W*YNeR@6AVgW5dbpT5#Y@GB- z>&^%&nD%JNXDi9wD9y3+V=Dc_v)+G}CffSKe#K%pWz8<^&tSWJk-@jdD|Ghbpy@m$ z>PVH`H%5$&JUDsR)nEEvbkwT?!N(sn{|!!@O0JI}RpAq;cGh1%5$iT~*<=^dA@qyM z!H&D4QL3fiHK=KS&(lm_Rf9%xmOjhS2D3%DkvkL2gaw*c+eR2|eF$_mo2Yr@hxjC$ zqkGokAzATM?@#}fbyp(G#)l{0b#g1f&p&(-GS7s>&NMUg*}IVUf?zYx*f7EGf4w{~ zV1bfY;n{l%U2zYRYk=-5Lu=A1G)mpmmm3r+Tr4AS4AKgsmBN@I+}%22&-l4B`p;eu z_-q7X00LR0Jn=Nsn*}!d!{9N$AxCcObUF+HLfkEDg%F@Racf>)sgh>V&d%N5KY&R^ z({-ghidUDb894j~ap(o>T#zum6h|Xn@rbuAu&s1+IK$b~ZMo(i zcu}+*i-YeOa14)}fRh*1De68HaTz@iUw#mJSoon%Sjgtz)c+3<|D}chhq*T9b>2L% zLt_P15xYC&p--U!9qB;XjJ6wBI_N8(nkIQ;8Jjp_u$-Z+efJQjxmq4*a4=s`$prx$ zj^iu;*7**e5{HJS(nmbuWTXW)lRj-#yrv<199uwHF{yq9^B7kXlP(}=m_&%E@SUzjWYaex zJ{nl6X~+qS`h$OpTy|DZ^E|R)Jlx@&Sl`Pre6?(8;c~#%XJ)-6gq&|+IQx{%TDvzf zpF=}63K*X1c=KRcUd9DI<(K3w{FM;WclDa;#I$%DyuW&+JK0dhvpcEoVO4r!sZBxg zg#Ak-dKsZ8a$^hqKm=^qcp^z$O?l{|x5{QHg#L|sQ$T@Zobb6xwA0Nd&ID_&H+gk@ z(&UXa6P}Uc7e0*~SE>2{8!`SRV+R6) zZto`UTiqUeVAemQKc6II7e1X0VcuS$)$G-9JjHk&%+TfQ>>+UVgKb zt(e#fdD%uzx*VoR`iYHPAkycUQaD3B&LnGlY;dGYNV&>zg>%YP;5fb^+8(Jv%i6*} zUDj|k?rpJCf}D;WNHhz z5i>JoIGazz!?q@6<$%`anw_$je!?rh)Gg8UV$>CF80vsN34Um5x%jq)DNhYtRr9ZoadA zGws78rxjQ`cET{9(wc9!Y-^#|O)ope2MFdIasC@(wUJo7&ts*ciJDwz#X%1H3z)l( zmf3GB>;tzi-J#CHYN@i+1PB7aEynZQ){4E_jHY1^*yxy#kq$-8&kOs+Nk>_TEaq1S zd#u#|Hec+!P|o50Z5L;wx<;WB)8ZR=lWEX8%|yImxY7Hd4=c|WjA7GJl_H9vdA!}0 zb{h7}n+beo;H`)i7dB7qlCZ0R{YsSJX~?sl#HD^nGuv)7Y(B*gQ|}x#OlckTRBUqC zd4#D+=Ix(v^d9eq#oi7h*wAGF^{_qmrFRUgu72FlwGx=Xp<;F~jz#7gD&KK%HE6&H zyeo#R|BQA4XbkOYXxI~Xqbs|MdOX&Zb@BRzC8;q9x)BO4q1+dEFm2g^eGYK+b-hW zg!uK;?aC*EEWL3iy&`scuwSr}lmM}j-?t2@d=+C|yWhmVMy~Z-dYQ!F;4%~Us<#RoL*v7wx=XJmZUcz^R2i+cjULUCP-a)+85{UHvXVPJ-+IAqdg~Fy z+f?ZOvPSt3+jG~2Z&;!R1q8#ut?};j6{9W^UfWy<8FwoFVxhaZxJ++|evYak)~q$- zl&w#QLxm5MziXQ>JP(M~n-UD5VY|cx=4YIM4CUdQ)LOE2`Uz2?f8AM~msQKGBu~G2 z1(ZWdxJ4Zt^e4J7C-ey9PIbdI{6H}r_v7P~1v|x*D1Q7bj~>evSp4Y-)m_P*1LaUe zq^Ouqo=`#uej67oc34A+$BV2STUj)Zfo6o2uNd+P z3E^LH=dd$AF0+a{(I(2cn{rfMl$TAEj!Dbs6e;k6QrRLSJUVV#W10tg$qfBmlX^hfXclD`scup{!t3;WOSKmYx~E0%@rNDzzI=J*GgJbWS~_oF8qE|cB!u$UwYw-MU2DU99wd#tFzF^FLsn!wpWxU(isx-g+IWF8i>-? z%;OKoGzA)^;=wUE=Uju`&Do_xD3cT{UbL)Y0P*B%Wyk|EhM0g2^jo>o!w!8?OnFt|o5QIe|^ehD$=C5-b>kbE^1PJUt2oL!c>YiN95x zl4XF$9Qmy$eE7Nu)6a7XvPTRZq@lGj{hH|IZyMhG28IJ;E$boBZCZ)YE?tPFbtlmJ zqL`zHP667Na*&L+jMOQkM1Fiy?+#ggHgr)9Xq!nAWjsq59H(3e53;to7W~-KkC*}e zVehCo@(6V&SbLJn#q(VXg9eai+f(gou3hZrCQfBlY zx6Mn-C?qgUr!HNw+&a>W#InNYZe#7|6*kZdU%hc~4t+hhf2i1;@AnwtUFq{wwH&fs zCXy>dYS#Cty6!M4-4HNgD{8$K9!+7OzU0zD(+#I;JAmq%hQBKi2h#SJ6f?qIIOm_n z*yQwFS`jLSGvJ+P8Ffd$7h`!yQt?X&T*6_`dD(*#xLX;X&D~sUQTW!h*kW(*BdpjA z6lV7D9Pe{!<6o|Qslr0#G%iRE+>J*Or7jL?L3E&-xTGJKKoX^fp=$UVp#6EntCt0V zf0hG_a1x@2=ZFl*Q^R>pxFxO#z20wpH{qv4aGs7&8W8Ga$HXHzkg|u%TAn}1?#L1` zuFc9STbrZcbxOAxX)(ofoBY73;F!da|0a@^2iz)sJ4^h|A%+y;mIkJ3uA1^UZQ(b+ z=TjpanSEY3cq-=bMEdHfu<*yw4Nd>p%lkpXy^@;Uj(5ipWRM#Gny0yBbo5&x%83ti zi>3}0`H^bUvQ$fpbx#e-;Z%%JYZ+cD2z{-3;eLCVDDaE7BKzkAvuwE zSZ8S_vZT;~of{JQo>dw0MLO}hr4d8$tq?L3r{J*?DDBsj$x%sWE-COyP64cE9E9rLtZ z%F@1lp|E4y`+y?j-|_Jp-KBE>9SJ6EW^pG_+X;UU){RB1a4d+0!TLkvH&!6^{1$zO@0U3NS>r(EMU!Sr zn>+Pso=hQ?@$0AjZw0oj)4F!DT~T9?U^;V_X0llXW}%02sM*6oU+U5Vvf&$Egxgz1 zWnI%E!UYFl&yXDCCXAvaJM?YXHq|9#4P$}n-ka2vX6*dfEdPmyg;tT07Uio)%SgBi zRB<*}+_V1cRYt5)ZWvn8bwkRnhi9T3_%ALkr`O4gT4X=B|AL%scz_Y@`<)nH%8R(`L}MAq;8km{NqB$fxh)zaTzKheRtanAp$Kac)2Vo6uWp_d)(dOn_BqTtvTN zT5xwkvFXI~=?D#)8!TIAsH%_-+98xv1rad=_-JeGJDW$I)O|$!l+`|_5EhU5jN|)E zKgl?FF_6^Ah7`Yz8*5Bf75*MOceBiOZ}*kDKy-92vB^)g=MA$tG>`Ukt}|=ms*m#Z zUyb&IlYfAFRwf#4@9~qezeFSZ8T&W!OJ<`jvXV%^blIQx6(z?yss8}n(ru55i>Awz zAn8NAKa!8*p8>B@&mr(AUUtv%x&}+d^3U5u;rw_6{6p67WN#N&G=Z{+nNiU8ScsKZ zN-&>}0X!j$P?hb_Lxe01(&;tP-&$o)DV{q!;rdkY(FJ#{V&r-DnXu*NW9k^ zgDthrD(AD(i=1tw>2rC)d0Q8TfWQw?-rs5OvQ4?~T2*m-<1hngS2|mlK4EQCvqDS2 zn}n%V@lcVO9%MO6Hn_I{hd1|B2i)F1Z*Z;-wU4qHiMu7}lPGa5RQ5`WyI^*`XnEJM zCqXiS&)r@!`urcD^R2SLr=^zGdaWwF$d3uN6X}J-WiFgt#z*(tM*-1I91|G|qIJj} z_Lsds(Ed+FS{#L4ggYbH%{+XkimFIeTZ&O$PT1Q!Yd6=*^^8UE3ia_0g<)B}b8xO0 z`1Eya{Siz4&)eaczYdRnMHiW3nq`-`Kye?hg0lhrd=W#V^r^O#Txf8R^^vp5^Z?uo zD^oH;cJW}Jf~cV`XjY>__9mQCF3##=%T%AJSh{eA+bj9UYP{$3Jx{;6^xiDsQ5s)Y z-#Y)Vb*RyD5$kp7tg*acgmpyY_g9-Mk?4e@&SJQiuQg5jc|QN1%4DMfhk2bPgcXXz z&MSf@Q6!iDK4)#pB~r$dmI=iDY|>NVx?RAjeMBQ&zPOmXXh@?IisdYX#+bkcHAqJc zfPDL*b&}ED#x}e1#MRT&6nM}-nVf@nE=@i<=tBFoHA7$Qa^2P|2KLv>v#p-{` z7FmAUIX_fusG+v?>$Ha}S>45qb_NNuWKRhQylzeb#{kE*LE7>;AxC&>>rqSh`ZS!U*YEN4ou5>{m1uV}AXG#F&>UD&np>?Y!nN~_u23)@;7 z@CebVjSM*^#E{3(p@Di(Vc9&avI1;m_}i$bsw=#2!z$>~A}YllJG%3da+Hr^ou47T zRhr02rl*u2c;jv)1N<4Dg>~8)_95G%*#+qn#hXX)eT{ItreQhfr;M%%US{WtdBP{-2^J!}3Vj_q=II?KEP@+%|JMO?& zy+ft&UU)AdMB7f1Cu(;V4&y*W%3<`MJXCekWTNgjnzkb)hg|Q<$$C{W=Q?>>t-gNs zjDu0TJ$*sjU>Q9v#>^h6bvithBUi^}KxXNF7P_8_u`i{WyTjRWCP(Eh>ZbM_<5#RI z2FaTb&I=vcH^%_gMQBo6>#MzehMp;B0z)=DPHtUb`Ysz9Ga-pFxI2}(Mh`*`n^6Uj zc?bqMgdO__zqczlh{_aJsTyoE%0%Wkw;V(07aunOKFdZpJ{zg^+d3vK(GTaG{5US& zM`kA4r^A)sKgRGcSlO1J7rnQV*}bFf;EOoao@i4kfF2w zA^cciK%T5zQOAB~DwK};juU|d;Hbzq=8IU`9Kzkp_@DE4t#2 z{NB!Qv*vbev%{PgWHiPfqpBMn17*Ja2l&>=Fl2<{y$7>5ABiP_v3ZdgVsX?fPezkb zjeZ|Z+tsGCipBRh?V_Ug+?J@>=0Onv3ZaTXs&LHr#AyIEjLJ9vG2_#HG)G)4G}x$( z;Rr)q%mQ=bN;>eOgVo;`^0hcE{suYJorx|)@$_T%m|6lg@ZSW zT(e~k0}@8f{H_q&fpH>Kl5<(xcHr7#-0;X)=vWWC7R71r=F|~2^a}pY}Ybe$dbgJ93&gcEq$60?}U|Vrxz=y_VD_lpGB}e;HveIXeCViUkN;8t5L@b z!8c{6ti!!t4UouJSL_tkA2wjf1IDf42ZDVH4wwu0MT~(}THLy0uD&Wh3@rO1CS}ka zk0U)OXv&||E9O$1GPRrwNJs-g%3=G4i?H^}GAZgFQrw344{=w=j|q8qQ3;4oWw}cy z6+D5XmAJ7PjHJA4v??;vb%y7F4Z03a#*tF|(MY^dP0*F1x87nPw-bch7iVasJUfN$ zc7d(8q%TVXwjb&6u-pnl|=N?W2Z*JT;ve*@u^cc3BGw{ChNKRJ=;uPuXHx^rX`Zp33Z{b>1b4 zAI98M?%?2N$2c~?(F_@PVV05i>?D2l1*qEWbjnB2Ux!U51k3Q|3O-V$t z=&RCQJPxd*%>=h|H`jpk{c3MLK`DJw${<#)th~)|vL!R^?ACpkEtjMCzpvPa7ZeVA z)lQ#bsJg2ea$}p2Lhe?K#97&QSBy{M!2)0S3s7=aeb}M0VrDr5)ysKF*rxbtWJp;1 z%L{^DKHzmYG@;bw7aOT++uE`HPj!X3-?Lqk>~C*m$#`*-UzV{TREDcNG$Pub=RTWG zhSSW|2p=I>*8vu{P9pBEq{%{Fk}$*KVJg&XDe0oiPY6YTZbu}B2LO9%ucw1ol)ie_ z2r(4Xx{?_@OVzer#SKsOFE2-erNA@29XTILo}#pJwT>;qehR|-p_Y5mc{>+tD7bXV zS5gz5LG9AY6ap)C!y!~6n+US_Qt>Zm+N~|vBG&EMhuRKwBI4^ED_bfORo2*@igMJg z3W_quXZk7{$}-BD!o99I8!QK8dV_S(=ltVM3^=8cW?|RMa)g@_i$pZ^fL9@;nDEpO zp(OI$2!wfFrlXM|io=%ibxp$*B)xb8x9m$#=7+nVTt&OiRh|?AVtTz*>VKM28@jWt zVN{>_32@hG`BN97Zf5sEIMUp`#E1lJb*YYOB~h;-2(Njl9F5VpgLhVPe+p9HdJ&9C zW*ZBPx;)J}vFg}qSo?abjG*x3m+|1-4_imX3^3^Qt8K!IyYw*TwD0vkwr!6 zCb0=kljvBILZY~dKgxmtL=hn3xqu_|(*Pl3&bl@E-5Lh$O+#%yaA|7?^(LW@<&u-wCDS^Zxf0g`HgS@uFs%{gN z|H}Cou^^RW9@Gq#v{+IZ`jpYmu`_E<)GC-*7v~GNt@!cKHe77VWMNW`G3K(u2!`M$ zV_H19?924Gwc$jGF~38A+xH7domGfc##nFJ0$49aNz*-kIHel?IBv`+#)tfQxiMF- z1~1tsIMCU)apzmv&^!&5oa_#?v>YxXowe2VI?Tn;hIBk;PpN!ZXZ?~77nk30JK#Kq zp4|f_B01JR86U`pAJra69%&Z?_u-~Y!cUvvSG>-;K9I6-^UbzNa^58QZ zm_M)QgHl5&o4qh-C&om!iNXzs`DxiA?aF@2fP;kh%^S)43VIx<6`klx0MYy%GZC?} zUVulj*vpDnNb}%nD)^iE$f&68lu1k;|0SMBrs;bw13U$<{2+_laMbHw=#!z( z_od(X*$G&BP@E61fPW0sQM{21*5n}?xNZ>d=(bqZ}e*yl!?I_;Qi zo>FWWwxsg9jWUx;k>YsXhS*QARU8`gr%%d+lj9nC;uY*O{ZX+IqEOzZ@LP6JcgBef5bdjc*NPQAilnyb=Rs`KtTF-B=p zrkQWz*o6`M465^{6Byhy6DgK6jJ&uA6|@Yy#E+hn5#WA?1CM_a2GL_`jhEz*p~T7E zg80O*69BvXQlRLS^&n_a=TlTm#&Y(hZoo-f{K)ECliu3Tl~U=DLV&6qx_kjtd;k_4 zY54rs-uJigwK8Char9M#7*|{2MTpD9b3>W2j2d+#+xSUUS{b?;D2?i0wN3)Ytsh4M z0Ndc?GpD+P%YsBNuW~dYP&?s;LWXe#m}!djdHUe9tz4|I^o8H|2Sk34@a`W!!QiqV zad}rSpL{m3cA~gkawidqh{%BXA08V^*=&emVzLDy~zi-9Pu6JvetLu6P>zo zZ>}lQ*xZC4yI(hhpNswFn%=Frehf(912~)nitUf4Of@+umm~Q(y$5nt`Ni`|!JL0B zfk&iB7LCOei}<0X@S;95%gk!Na1K4D%-$;-^2;Mw?P9iW>KQ9?EJ<`G+4?XK{9D|^ ziDM6Oq@lIi-+ZkKcQi-?XX0xz{{jtSlq4yATjgdvYjTj4mxp7*MF2zqX8a45a|&GN t!!Y)`QbIIGK1(=_;LFA@!V*{2WqF=ib1oZz|C~F?h5y&@kYxTX{txdb&Rl@rfykNyx}4C@2Vso>Ebg zQ<0KWkpHI>Gz^puCKd<_3q<||{|Wj3@AB9Vkl>=lpv7RIF$3r%Xc#1DkKF(R3MU5E zf8hR)f{lZVjzS4S!$Zk!iBWP43>1EB5H1-32onPhB?PcYuyL43U*VETX_=8zGQ$I7 zK@==JS(Ou$Q&a*lw}k4Nj;D}kulc3rwDt7OErJno@!2_5tb8(-?_FF!x`%WgQ?u#l z28HH!t+VsWp2#bFK%I*g1p^)9f5C!=iH?DVje`;jkO1gt=$IIoAkoI#(Fq9h zF!Y@_{8o|h@l)(npyAM2(^Ec7flh6DHbW$k377JGZ!3+z-^%1?FCI7~Fd5eCW^mP7 z1m!39V^H-&N@F}FMRkm39>9Eh1@V7-Ge~Gc=SGz`ZF-k%Ux~NV!gFIEfiBgzdDC+a zHtZ6f3A2-*KCIGFZuDtnYtC;1@VJ%QevktbyP~v$DK^fGVRLcZs7rm2fJgj#yzbqb z!xx5crqlDB2-^%>ykr_BjAq^&j%fraEq`l=wex=~5`Cpc6=n>lW%_E?u=0<+*cEaQR2w)050yH&)1EbsfXJdt$ zcaAd{dNu)|2PN+Sb$EwFZvIelRIvx+R{!6&9zxq%$M5}*z^vXHgC`_oQqwK{hf@2J zZ-=N=D9IzRl;0VVq3{Si)9_ylli5uCzQbztt$|fC705v%?@o(^hg4#emgqaghZ|fU zmifhu=R$QEq8h72t_BF5`nWjz^jeolC3Y(xfiE*S2D_@UC#%jH^be#$cf5=GKTv>2 z;#U7L4GNDbf85#^>tu@(Czs$tVL*(Xzi$vv^#S`CI`VKJ$FL0y$1HOT?=g7K{V6S0 z#TA|PD?XY+d_3kdgOTgj61^N5(OxfrG}j7{c#tw0`=jte&c~$@y4~81sGaPeGGStHR zZ`m`Xpe)B1)4rR_I#Uhr$XHsBWdnr&D$-$;)vj+p0(J`9x{M6Ga2(+w6S63rPUPRd zt9N2Ab+jku_(lF=O0XGO_h6Bg)b?uBY5S+?u)MME7MkXBtdnjbhX|zJy3VOeH_!HI z?3T2aHP$;+8UA_8*1+@qCrjBj?gbMRbImK&^uKqd*uvMQf5@>%H%U8DRyw3K$TH%l z-Yany!vJO3mMRjeegxjL81IDT$S>m?bHNL$NL!=|CKEsK5}hCMooZHG=W#J84IFA3 zZmvhWa}g5^2xI?CBo&TMqH6dlmWMkSHVGwhm?k^mnGQ`tvyT^?`hllJN9@`!9>SQM zwzQsVa!0ipS%s)P_pL=%fxh@q*<-)^)SVl$$Nnsv_{7dvoF2H%Z_IxKhV$t+}T7t0t z*AZ3r0#vx0!?o)-`odVciAFUowd~Q))_+<#O;sHR15J70T*lez}I9~jD`>;2@Zk)1`tD6v}1o=`3mt_01 zBO|jzLD!B8pasMRhy@kHF1Dd!RdUJcrQ~|oNy04`+qzma3c5y|6qXZlI;gLtuDqO9 z>{~ZYiVOXaKScvM&jLyWD|k3kZ}*2I(94U38;g0Y2QoP-g!}3$j57H?HpzZtVujEC zp$ve}bhL{fZ1S=5j(z6h6nnz7^J?}4C=3XQJwqpAl=xjPE>g4W?yX$xc=s(fI5FhS z8O}l2oZ;<3%uLxGgATfa_|!GWN0!cK5g_VN;tXpQt4Dz7!7nbF?l>-+^z|{jEZP7X zYHo);0us9LN8mTryU=S|ksq!?1IeJCkMIhRAyufGRQS?eX5u3tfExMzf9U^xpYXDi zJbJPCjStF0Yb&e^G6c)m5fMv~{p&o3Eun-i zB=^1S4QBG5$>>ntFN%NOzs9D<3f}UFkwBAdf(2-RXF?f>;-857DRmu%4BUMFAN_ zwHbHo5rJaUm+zm+ehfUmgz;$p@;z;m*Yp$utZ+i2vgXSy8k;yZ987xmmaF(9xPLr# zds#q}mik59&_$3SA=JeSw-;29WW_dWWq){C@(3t%*O3=bIb)e9aae4HZe8Kq4ZUHb z#>Wo$^C7Z{sU&RinsYZyFs~}l-DYK^F+&p6aYfbvHut&zN`DkrZ!{!e&;0^Q$)$&k z?lkLR_&!GoQw|uzD63&-glUeKe^llwR_Q6H=FpeCvWo7|Pzy6?%ewgUZBA79J)hRohGa2zNG5|Bn<`1df506`>20RddpK~x!G|~$NjIqi z`nSfmt4l)fa!TH7H4hYfH5O3)b6$2jbSlw!1XvPogwHMnjw&weXWANE+7u)OOmy6| zzuu%=>E9ad{g+-2N?!l}$x$Zn$JJDnDF0E_7Yv6BM}OS?DfRbdZcay# zjNzP%S4VS~wKEwF2!Eac`%{hzA^&RqS(^a{sw?|+{wckT2Nkw6&eiFz=8VNDJ->~C zyFs+tv!q*=i%EUhFkHJ6eHxt@twU@~0+Asx-Sc0q9yS#31{Ie?Ih}Zaj5Y9AzbS+& z;2e^tcLhEIINHvx7TqnP$=fpx-}r zvdOWDv_?T-*VPM_zxtOYvy2T037+z<K8YgOPvtmy_wCDcV`qvPRhc0}Ehj--5>4ebEw!jl+l0C>B9<<~9+9{&UXnD^m zuT5rWPEE9k#$|eMRBuZ@Ug?4rNM4xDQKZ`yVY=+FxT-Yrs# zrTj_D!MYZ&4@iz%m+2$lpV}F?+77?8(O;V~Hexd1Vl;gj0Mp&1s;rc{Zx*qTvAWDt z>gDCt<(B0y!*ZFh45X;~4ZvGy9ijv}zKx&aCa)YR>LJAi2c|~S z?Uc2G5A~^c8ed2qh3@81%oo|vID{y0Rfv6hLLQ_cBz9jAXy_l^Y`m}Z?JkIKaq+#J zSw;;f6P_kD*mE8;AT`y66t#QVv|1fe7W(aIuzdg3H!UokG_HX6qP2d(_ejMzYl$|h z9LXi*+1Q%2J@SRYvpW|Il}(Mo1`cAD*6FJp!Mj>qo8r z?$HocvDNpXnmqy|77yvgjFu8kV|Lv6jH1?$KtX9DY4a7efaSogU)zEo&DG)QBVhH< zmX4^3B9rLiDeMtQQMl*R5%1>@6f12?x?7RhE!s(Vz!p0%KYz{t z)@a{8s+87WsYbVJqV_m!|*G$s?el!&s$MA1=gCuZi03QAXc*d7-ZP z$6INCWgFVOPV7~cpPb6JXwE!wX66cUtR*h7u737m7%HYe!&JDz&#Mw6DCnW~n5m${ z*ZS2?)*{c0w0>}^m^ld&LHaaTLsXlU#uQJFt%teKnrW$1mdWek7sb+`atUGh1ThU-23x zLqt$^e9%E2F`AYj)qv}C9df`C-9 zg9;M6Qm56WpQk48;b6P+XOBBOKS3`QF_LGwsus>#BG6}IP%D=GT=6n{`OgS+r|!yV zAGbjO>0TpbB%IPIMiV(KoPRWp!Q*R!1gO>r5oqnDvh&K z*mW4nv4MTvy+65eO1kPzy2?o-A$EU&g=hE=`4!Dxc_l%e#&2Ftgk48hX4q3oc&j;< zC}pdEd>?S@fSN3*>b@5*%EyHLZ+7*+svXVC<_lb7>fd)hyarR02Eh>k75xB&D8IUh zwP|1vdE0iyF5Ox{>K~C69JUx`&UP?bh?wuvu)Q+Y(CX*_qQn|_XX^ZRGE%j_+$heA z3}6Hnjk@lhlBsps-e!x#|Lv7CD!Fm#&x(Om)?&?9-Dl=_LIjcW9a!+yIl7zBYNraEX05&hsLls$v@v2JRdZprDo}6#Zp#|#D5f@D z!W?p>T4}YbowK6V$Q-TcLr2Izm^$sa_Fgs}r;RxDH<-m@;3+g*pZdga#m} z-H?W8@@ZG8`ut!LhfK9ez@C>rIt%opX!c7G9vB@*i2ff=)OnsR^h#^uR|+z=wVY5F z>ZS6w$so7(!Jn$N_06GSw6?~tCElL2b77>CQUh{6W|s+IOoS;Z9uRs`wWHU%TO)l7 z5qo8NV$|>_>`Yyx%OvfgbZc~wO+mrSwar?iYDc+dqb~Mv`-Z$Qn7k!ZO>pFIDne2s zOc&s4Gg+-RuYA(svZ17Y<&Vu*-W|>mR(^xj&%sViy*EbShR>(HlnPpS?>Kukazk>n z5sCdL6k-Jl)#UqDPK#iAvD^-}T=GSh*bKo}ks%&uiV9;rj@aL(B)6;&`EI{4oFcd#;JVmg$|s(gEj+fCT`X(%Mxi8#Cm;b5oSHzD!D>3!DA2 z;q*P@c|(lkTO6$pObb!6$oG8`;n&~a^s6JL!s)CJU*CRZJmaW{X!_{?K%d_R&v|&y ze@V|&l=H@%_DAdR7uFsDJ6CJZq$XI`dgtPB66Mj`SA%!8n1%d`I2<@GEl|&-q9!uR z%fYwF9nnm%C4$#>|2RnZ)rnq43zP~AVforhcYrN5=rzKxzv7`-)kW`HqN#Tc6ORB- z=}6VCoxQ;C!O6w9q8~I1=-h^6o#P<{2n_`Q&*}HBgPZVp*V%A4)szMDcg;L}>KP}= zGPb5eL5kKHq=8&ok6iQf0491|>Sf4u+fzQy&uSaK6D^|M-WL15_GK>k++h^I!*B`7 zes3WZ#iCqPq6)h21}I_Yqv`8x3cES`!5^ahkM#t4e8uiR??x}ZS^c3{W>DZbYj9SJ zKgFH+ho*69hTA&6ww_@LEN{_87R!!yX^IJfm_Z+w{g0m z(#gK(jr3sp$KQlP)ORtivul{Hv+%!cb|(@qxmr1Q{~ida`fc>y4d%57I^l!>(DQwyPLn^JYQJ416RnvC_aT=}==hz+lugj9Z8`Qh6xYFbO zEnk<(tx{;iR;h)a(^52Y{gp}JL|fhJhG6m$Xozi7Q0P$;xc_Vu{0I!N_`P?C^Q|e9 z1eGGZfl4F2tgJ1p%uq;VkeKzJ&T`wUSbV?!x-V1w_iYpU$hWDr3*5yGBA{)DSlUQ> z>-t&rAOHsw9W+2Kcw~!}FT4!Lb>J|Zm4?OeD6s)(hvkv?2!3JrdU=6IfU}|E;#nqt zk_An9zyId2-@oL`<MJ*918O6C9`X=IQ!RbL z%K)5emN=PaA`0rB<+HP&5?m54rl<0p+Rvz|G4<;okRi3HPG|m&XM19KUyJsY{j*tC z3KrQ)XXo;}QjULiDlgeMoTtYQfP-8EM+MgylT*UNmZp7YIBI#{rcexT*60)6U}sma zjwYPxCm!0fay$`M9wc&B^0sl zPYTcvqrV(qv%Sn=cm!56DAqU*r_bZ-cYL2(TcnW{jNN50Ue(N=)(GQn%h+@s*2~}T z^0k)jjH5_d#s7mN3gv7vcu+75iQY9Ud#5>e0xL#%mwUMn=`zkEA)L{!meVht>)z4g zdow-))0}g+Ayc-&r&DLqed;aCjn895E1)+ z+W-}vYPnm;3U(kd@p*10C8dzM%`#i{J+kw6$oJ8@oaJ@^^Hwm^mZ;{6PrmWx;EFy3 z%YsFeBz>dQL;!s*6e5b`l;^C&(hi;3#wmXWVUjBDPZWiMy~A(3>j zrv{QLrBG`Pn9^=vUEOS&obaLZ7cHXx`se8d?=S^_z6!#jqHf=YoVEAy*)7;hSF6OY zfow8$fK9L!#_pjmXXiDGy{$6QXXW0c59>_!=z%dyVZ`tqDWL+I^JIwR=Gqpz`STTA}j9_Vj+NgZ#Ly_&(4}7YE-L#OZ z`hr;Nf5s?zejjPq-0bSRSh~WxU*{I333REZCjp!@of!n=ZwFYmDfT=PSUGKxXXY+f zje2SV@L#fxeQ6}_{V$f{vnTZ!%n$(^DIhI9DL54#h+|Yc2K3a-k>ba7RL}Qrr0i!C z&#+i$YnDMH_yi=BIGe}7b(o4Rq(TtNT)lccXO6f(bX+QrkQ){2lWJFYR&GeMY>1#caG55e}Hus&OMjub%Gp)zj6|CurpN^;J+UxR)R@) zDrxDVLB6j^Z`dN6w4CC27rAEftH&#{W)zb5Xl&4GnDDqiCZR`2y%jS*J;)xMp4ui2vo2NFc4D{G*daHHKz}-wm6lm#F&RbLasBAb>0Y+j|YKE#F<5`$uC+#0vpX9DO5g zYC;PGi@D5ap3T$5@6s?Y{b{{`gu(#42tPIMhv~@6I|@Sd4Ut3BOB(T6BD1{c#n=N0 zT}E4l>SG-b%OwThQpQSN-%^IbH}^#hT^IUowqe!B+RaZ%+U#(CPMe=pQuR$;zPg8| zAXmqmeysjSPuryB_Q_phrsR8`2@*Kt3-o=otqLf#12fvuHAA^2Fy7kSOwSWCc(Jhu zgGZHyc`-`aY<+T>@v1XQ1PRo$`d|gR!XFyKPt(Mn#Ws(Ac2z7;KGS8%^{DUp_;U+_QnPvWz0Ee4wI1K0No9m-*wfC? z8NiHfheSpOj&jM@^tY(WDv~g!K}U(ZKMZ}*;?? zP<2Js3@Jc06$c=RNC-jfw7ek1<79rpY;Q8sP^l(uWyQZjgn_o&d7=alf$)4@HoTo) z5k8S$zD=Jk>_5&&l&*BD<2xfDfGyC$J980cWb~qz;=HV$6qd`5V&O!Ch%jkF5sTfr zsqPfowZ7J?9qC`I^<1ufyH8v1--*3AO5L%3yBbh=$8;n4;_tT?<;sjCre|@-l=2dP ziROm(9cCD+67Pw!m)nHKz3gutD%-r&oOVU(6-0dViR$K_Ugb_k)aOWQ$x(p+5224- zzhgQF`6}@t*_?+wou9dmr+zibQhv9=cfJNO`MO9_|dsZZnLp*8rts9?X1iks_0j!LG=;@1W~&7 zABfw2s@eXkB379gb5Xpt2TKoyu>Rr_5~Zt{R~UvtGv*KZ9Gfb=8;s3rd8MKjlO3iL ze%rED@t_G(UmF8NMHGP*#T+-tr4cx09TLIyW@GTxoUdJ`9J(#m0-T&R z2Q_-D3E$%1fBD9{Hfex-K`OH(s%L$>NFzHU;f_d*A}t^u(9+0c8$J>v^6@A+7FFM2 z$Cv&-negWG@CVN(@&3{<}0LT&$!#NwBj+^s?IC!<k_=O{7~dB06_0+x=l`ZifVJxNzS83nFRG^Ups^UwEfUK}ogR09#TZncV_%XqYb zD|A1v5{~7s)D462$hT16q4S*RRPv>njL$1F?`qQ7-1NrZJjoux#+Z-|%TV58eeeI# zzyJr65X8F{U4_=Ll8Ds!_w{a1cab-7WslSFgXC1*d61Ape+M`C7WZ7J)aKSRKiN!< z#t)Zn?K8kPVbVB%J{g@;@95z7r{ZAdLqo%?e`?6_$#o;!O^WR!K;oaKPqK-0p`*Gr zvB5!(Z*S{3onTPhbGoY}P8MpVLNIHbv2n~IY!3|+&$uSz$6}PgM2YZK)FMt@UM4<% zQ2bLnihcoAWg{)8%%h1)O$zMX?lr1M_x;9sIxR7& zo!9$=O3l~Bys%KP29XB_K!Se*&_|u+(bhI8L~Hy4>wHuK3pcv!O)|Mc`oYqc#Pifz zT2MS3AV5e62O(lp@~xe3Ps{GCXtJxAxZWE-x#8iNz>{MlRgyDae=c3l?x+p^kn=lC zQeQ)f#Cq@TJcmWCM<8?|yPi;Fg2sEu+9#w)1*1=?Y?lrO&CX zlVbFBJHx3W#&(5R#32p2T^A9a+Mp6|(pNi=^^CyjvWSCZlE^%{=92yV**W8|9~mSm zk?X%T75mc82F1KRLi9w0cL+LSDKRzGUwk3uW_`OWvW;) z^PabQ1pq+o!N90rL`sUr`nJmjeH7AlCV6((mei2Y2aBj;R9X=e%e{l80TSD*{)xgW zDo-6cNZt0@9=f)tR5(>-w92&L;eSQ(Q^WYhDck96)4OoBzHg~iYz(s+zsm@lCt`S? zr5ly+d6t!dI=9BsD_SplH6&2$lKll-RF_0e9A&{8Y7Lu<19vsa8JkJ2%vJ=33DFCvQB+7&TL1cu5$mw^ zo=EuK8)fti{eH~Uo09;j*?Ni2lAHSa9o{t;vQ!|uadN4LBKJ9v>3QIc5Kq2%BPx$w znnMknL5}_LTp90KE1Zfiny|@T`PFJ!oNy^EAT0!zsbM@;x!dbSg$r1lsQ$2~`Uk$- z)`Qikr@rAd$tG=T1ZoI@QP(p+<(k=`DLZ>EcSSI%ca;RISB3lm(qLk&;?!rQ!u~{L zO6^6=h!g*!dqkdKyu5O&VLt|>Fs_{nFeONKUY5PpNDAelK+FCA^|&9OvlnwV>M38- z-1E%@$JcA@sEE}s4uz%->_LLj!x}P~0n-jSIigNZFR%wPE%>^mC3< z1J7oOO@K71&o4MaBi~bOpwP)Rddku5O)nYDNVA{Ypdi=v`w`K(n!^5;dCK$PNHfM> z&WuIgc&KxS0V;Pv)~kFZF1`S2dw4~gfb#kdM+CHVtyav)El;Cvh8z_smV-iH*WrlRZjCn(o%aCfwS^&jMk zUfZR_owo7nYR)$K&N8lE|GVhS8QZ?LBmYN0XO`b@CpuMERUENrP*J=ihO}^Z87Xjd zfUsPDe0`df3S_)qjoN}o#>U2guo(U0cVluPq3nd|ndOSF_9qcEwaI zn3TZ8Qfq5h3=`40bTpFX+EAIXGLR@S(gp|9f?9mN@5I~A*Kn{_U+~`xNYebyU|b$< zU+078{RsZ9bZ!xrESN0FJJm(-ocCbg1RnXPL%lET&$Z`^$-v~AxWb$No%o|BTc?I*@c(x!y5KFCC^KC_M=G>yUs*E&E zz2O$ikb_uITzoE(DIMw#&|EA*a)>A&Wt)m-^05H?h4p)&d4VV!2W}c;-&FqS5h#R=Z zC81zR0Z06MzPS4M&z|JHkt(w1e6CJe+cfX1P=STlu`yCY{Vb_usXFrHo1FFa!S};f z!d0Q!W$9N2K3}dkcvSKU*yorB67v$SBag#i0F$JPylapc?xpz;dcl2rB~r=>&wOLd zOgc-~v8>DckL&-Ezj4nLAL?CA*Jgczs@Q_p6$-a;rjK8r!!VS8^%T22eL-L0 z7kid!s-N9eP6H|%;|lkAlbBpvHEbZCMsu)Z6gx#wQxnRSKpGm11kwpXePC}nRaAn7 z$8Bxj@DzcDP6~6(=8&W09t>SU61+tUf}v5d6yQW6m`bK{mWUH0pB)bKqyLar!cyK$ zAV^>H5IlO-qeMhFNBcRcad$sNp)HXhdn2a^f>j6LKuBN8%fn-cm8jULixxP)H^B4b znr{(P-E`oGMD8qbNOx4oX1eGB+CN(&jkd;;TC&*&T$Rg2dKGR_ma1#FgR|dZnhF>! zLI43mUh%a|kK9b2eZs>gq4XPv-g&03AX3U3G>q7Rfr}%X=HsmOKS)LmBp+4}_W+`L zHn%Az#B%HNBw7bRenICVg(IFu$BG9lK7ozob^hW?ssGyer!p=+kLvWDyT~n8U6|rL zvw9MJ9i(B_C~6$Si@;W5L*yK;p|t~aI)b;5W;fxXLWksX9#GA)*0BK=%jetx#p@~| zh9%B<&YXL!%%e}6)EI%PPG8-5Te{5ML}<$Xq=X&23Abyf;qzeoq^Hs$C>1bH^bX|s z-V%MapX=`;(j6~MUS&HIlB#yBx1LpMC?73B9y0OJ1_gFT=qIG6ZekLtnkfiU2=TY| zOplDux*rNVd|SvJbseyIYvYV%no8$>crmTFuw3hYUHm4TNlH%H5Z`o7FcVR86B#5e zg)yN!epqq5YmJ1^-VB?$YMVXh!{)K5np7J6iNmSI)+q6kVx6-VmQyvt<>~iPJWP6e zR~}|NdTETj+dgIX2p4-&>?XfHT&wuQ@p`W%boEebdW|=i*abidIEErN0F+z#i0)HDA6|AL&=V zQ#jX(HM<(h!LlzhH>U|DuhybOu1a;4w2ehRw%u?kBN7ViR*=a1)Yav0-+wLY^Be8# z!vMEo_Eb_03}lo9E4wI{k@;))uVPc-_`VKxaj}C2S{U0x`qN^y;EPn2Pp^YFna0a= z3*8GZ9My)LJYK69Z9-KlvsG-LkO$zGu;M{BAptIEqE->-Vj1rua>=}SAC%IyYpppx z77Lb{&yAG$ZPlE~m{^Z$s;m1FwJq!az_Q$iV05ssP=qAm!aM!6Fj21g^+uJsC1KQW zNp|#4iUT*del$1vs{d+BZ3WOrOL}6zj|6$WQwi~QP9VrAPd17QOpKdeBoECEWmTdA z2gfK(!CaM%3>uAfhH^@;Z4GdKc3|vp-RoMoop%xQ(jUn{apBKRiG_d|B8gXg!xi@m zD%G}LytM<@>2p=yB9q7Wo0EUfSya;$gK%TFvW}hGpqGP67hqD{>&Cvi+KN>JJ?C8C z7XsHaL5Gz;1to7vp6uXKuMuSzYuwcN?J4eQJ*0Qa?c5EAk2ZU}hqG|S6i6xER_SCD zIRk76C|P+;O5Gu+i>G3{Lup*}r#y^G8QVRL0hop+>=QUzOJ!ucI;*9kwJmU(86(we zOP`VAUT@Ot z8+pOq_%Gb?(zn9ypV7r|+0lgp`hSeGZ@CasjM;zdOUAG4`18cYoV1@4+eoXh+fJyq z(L^T7NsakGq|3rYJQBXuwM8!|?A%P_oJ{t{8ugZ^H8w>rKtp_;>LjAFfm>^NTtvUzksoD-@jD%vfovEoerb5++>l@8Jp_%O#uyy)V1Ip z*MFb#H)RbO$LC_vRcFhcC2!+*u0b#b$K2HT4C^g#PyykI$Coq9nhpAPFgZJx=@p|u zQ^Q0SEXA*6sQvu3N2|nc#Nb~RA3WadSJx{>k}L(o_$9rRCjq#krWP!aR2MPZshdHr z{NdVWR<0~yi~UBg0A@s;Leaj2B^-Pjk8}vAC3XQ=(jNvV7Wi$9zGMjKj=FbQDtl== zMy&BrAK*Uu_0gH_>(`StyY;nC$4l6H{M4 zyE8Q3LG!@NYd*y-0$tiLs$Iwcqbb^rY$*<*;WO>MbPp}B$1zc8{3gLfVo_IE8G(>e z)B-n@S_Q}T5~B5QSzi83V5Nxyi8GRqy^8uK9Q)TeiEM%II_X&6==HwNNGZavpf354jln~RnipGO*g?HtM+-|iDu9&3Kzfh%Ig*XT~yel)c_ zmX~+dO$P?{2009PU08HGgyawwaNZEE?yBx7o_0UpEP8d;i74V7=Ph{u&M0n&C`p7- zXT4li_Xl$RVAYoaA^aJ;l8o1on`B3;Bl=jH%gI|0J+;O!gDO>c(aPi)ndtD;%bOnP zwxi?sy4FpY6P!it{v}+Nv4of}}NeqXqVTA6#*gU^qlUabTHkinn0sh*Twb$_U+ z61$cLLs&+ST7JzU?T5|p#VuUOEy1HO!`e}(Dr{{FDpiC26Bm_Ec@wduw(JY8gCPw+ zQ|gr#NsUV0G|%*>6y(xC8L7-Z=6Y~jvF%kz^%2r*^}{nr2O{aux_nHEG8naxKLn^h zs7x}-fWU5oJ4{b<5t7m%&^97AU4xtA%!uj{09o#`DiifPl6P2S%lB`Jjr!MDm3M>_oR50z37!ome=W19m270 zKX1xl%dT}Om(D8x;J~$jRlau7OTZ_C^Kjkwlxk!>)OO~njeK7T+nzyQ$5&OVKOTun zzd>*eFk1S(NtA|{z4_t`%?g5=uP%q08=`bR%JvtnFe%)v`y=n;*OBgg!Y@3Yi19o%Neth^>gNtTSulKH=HWo(#Na2MBzr@~5=;r_HA?dL5;6niw3ogChgv zKW%xiE!lMH#kCB=+qp<-q@%Uas4%^8PG;$^9R6P6I`V&2O-MBbRw1)D>UntK9inBG z^1p1%iv&kiB*<9Q_HmOM;FeH)(|$!wm9VJtZcC4j{%z_!nHOc8_%PB%LQ=fIZ45eZ z8`}K3AuZ(j!Lz3y5*ch%w4|IM=o?Yu*+l+^1_mGf3Ziawo=-BUza-tajQ0+ckn^>| z{}!qYk6%>U_!W{!RUP-T;k86wGrB}z=c z4HBPV6m{(*l&d4@_$65iCzTgA<$fo3>q+#5L~CQxkD`b0wKRVhx!9%}30q07d|=8)jf1Oo@(8$8$+dvB;45PoF-% zDI4`w#2<5KHFFy)Z(fv3?3F%TMDtx#w(O`ahsEH?#>2g@Tg3zQ)|l(!=E7awJrj|u zN^`|IzSDiVUE96Q&83_Bp3l*LHVkS-_jVsW4tXV3NR*qD4;A)}a@uUN9*!e)^|t=6 zo_y>wzRu7}cp51_M=YeFE8GV2y%bTFZLi|MuF_`Xfl!_sInLO@zoYI2{4{EhYTa%1 zqOWy9+y+E@AbuMnl~5? zxtsJgU-@6l5EWU8aH{WHIq+-_P3Z~hZQ=~e6vsXnM{?pDt+$u+XrM@=t&`yB;#$6$ zBms1mr*G_A-p5QXdSQTk6PbS$T3$!t@PtV#ams|#L1N(jG5l#=)vD$z1(sCN>L9MF z4JCFw=enROG+ewlP$exig+K&uS#6G?p`$ysKz!4d_eT#Co4)ri>!M+lnu>TpjADDc z5F7m|_R6z5p%8DIp`7Goxuzlb=UQVvOm8p8i1$vso60pHaTnUNmpm|BATa24x>9GA z-H3`uvvs0qiTx}0K&SZp-wmH-XGBj^e0cTNSQP={5UkWfs~`@I_Bl#uWW&BbIq_W5 zA66xpUeM;?dk_>%oV`aGh2SAa;9{36ES2#XyudG}4A`SqR8iq@Q^DuDHf7_)f6_pz ziEE$)AYQ416~3*9yGp9Gzwt>oJg|7TyQOV?mXK>>StSEluKaabX3-q2H2SRKfaXCa znilzn_5Nr{vtwSEf_gY8Z{%}tmY?d!r!;bnT9WXZ=cITc)#FdoHKjWKs{hGbaS+Hq zk53t7^%2eIO2UmAckcFHl^f|WZ9qZ^}9OzHue2HNj#5$huJKC zg`(SJBC{xsTitlJ475VU>%wgGM`TgCQaQCsyF@q9L|`Nv>KQW~eTMfBvvF z+mk-yvfUHq`Ea~_`>a}CfQfZfc=~HN##Wdy#y(%lMojr!ZaI&c@Rky@LoM2@p61Vl zAu|qY96=^ol06W`K~jv_*ueIPtAs(>?DgUS%u1nQmFv{84T$du#TMCD^i!T)G*GhV zVmCMw#y#VSM@1IU?K=E5O7yxVC@!pW5B0r1dP!8$UN9V~*xr_F+1s+5aJlct9q@55 z8^Oa#7;MTDFol&+#0p~~u_6$FwrxXsSX|chvoo>TZTWLW#R7r#Ps*X_LL=2_cJ_u$ zLg#rZA!^9h37Be@0J-qxMP+K0Qv6>8Qk_u<6GgnUcB97!>BI=5()YbzyUOqPUg$2$ zLZo%vc#u(UMeU{ML$S0}?Y*il6+a}sEN{i1*NE=#$$c`4D`G@8CI{}`c)fhTW9$6m zRo5X7t*29;3hSNc09R0ma4wfjDM<{}we|Tc^NB_IyWbc6!@`64jaI6CT(F~}=b7g} zVM;{cQsNE>%5_#8ks!XZQyB29Gx}9k+hhdu+xmm2*Ba88p8ApEF6h^J=p908BmUCY zz`Di65}7sXD7zE-)Gf{ytrU6K>{`pG5?0%b3oVZ)oKb4FE1K-55eFtT^nP2gt zN$R56f`Y6D+kkoAbFtnjjjE(K&AmS5qDr{RI!Z<^dRkP0k?TE{L{{Y-D~J`fS4F&~ zcJs;KJNhdjBII=&OVYUnHSs`dGlD!mu>+4C^%6iJ!VieJd@?&*&m~fL#9Bg2#@tL1 zk6h7yf9ri@Li@$QH$?O;h^s+EJ6viHMVrdgf1?*Z8vCNpe|hCyXQKJ_6Fkc{a>2Rb zGmTL(BId*xrt?P=504T7yweo&UO)PbaQ9(%SlMW1c4284OC+x;dV!!~H6&S`y{l$FaZCmN41*t1#P{XdZ+MhWgpWP~ zIXHRDl&jT^MJRg2@Ng6z`-qO*R%Ufi!uU{70HFIUQ{~ z)9=+g{vLt*PUV%WWk$<`A%EL<*Z%U)eFSZng_=av3NJZz-zHBbL8r)Ers|bsv4~-8TzInk1tu2?)ZW{ zC3jLIy=!;#smJ-BnwH&fBw4w45(?H|o$LAzh5Y->LDn#E*&8(EvYj5kI(!9tV^!H8v-z@=5 z-`3yokp5PU=qdzOT+gETe+hhNN3av(9#KmW*EaNF7_}k)y!9u}hco)2Qk(l4Y#+?r z`uiWgZ4o{KXS=BiXWc$1%HaMeulV7wwCpFbj}L_oxTz<{wb2*cI_J|~;?D{ivlfbB z-(?Lnrw2cAs`O+lY6@X`N(KpG{y%(ubyQpJ*JZFmph&S6ik46u3KWXFB@_!3m*NBn z?pCxd6b;tm7Noda@#4jT6I_eC6bkR;{jHfPfu>K3CC-B>GS+%vBDtiktkjjpbKwWY2EK$3VyDJx;y#L%=|Q(QLP__A*C#<@lX zj22E`)q2tQG?m`^t)hjmo5+4r3Zv0sQoM{~vPe}KHUSd=Aqc@~EdG{XA?Bqseqlhq znA8&zOk|L75*~rAVoG=1iHm`lUS2jB7of8Z36~55+LI*^8d^BTmSMr*jd4r|;&B7- zQ-(U`DdzXBC?a?XE^a#+cysf~SS`bZVdl_w%Sv6o|y~cOLYp2sM>fXuhBI5_6LgWF2uGh_>ZIv$cjPq zWrO2N#gnz%d17JRLiudgqNR~Y=DLrmQ@0_!!ccO2Wr$$b z9wCS!=;Fj4`hGMdXCcm}7X7onM0h_WE0xHSOUhyvrQ}275`9;yvpra2W5)PNN`iIK z*!ODlGicbl-%NG1pq&oSu`HAj0Oru555RtNQi%wfRu3FU?2~*%6@FuFR{=zqSv@`j ztG{v+8SJ;!H_@rf5o8>BYb|1^ZI9O*-Xw!lDye{E%faxLL-0 z%!OOjj-vZ&ZLC~Q^7|i%S;`)@Q0@m?m2!wk1m|{4-kQQwuFEg=$^vd%EF1vF^`f@6(VCrP8*k<6HpU)Pk4$orR{JmwBb8 zyRorSK2gW zEhCTl(uv31Z~Yylp8tDAHfl&`A5#(c<@ryh~G6aokI} z0uE#VQK6Cf^^YC0qQBkLv1RXZL91-63RY25?z7I`Logmy?o@IKBzr*sod}8G*b-1> zto9j*c0??8J@q9nK_on$P+YIUYi8m3`6XB1d*|7de*)9UK+@gO1^>1kjw+r!Y}1uVn+~&;2^{^>}XNH?|%&Z zRIiB;Nn%B^m&g)u*kX0dWoYSxCDs`I6GJ!;p7I#Ip$5IHTWqkze`@DaPx#C_=_`43 zJXvUsj0@rwm;+x_tH|OF(t+iwJdx4g2rJHiYHZ$;c_0Ornp~nN`9x>I1*;3xRK=eq zvYjMM)T1Xn9#F*cLz7zHhor!3Km=rEJD%{iEJpVWi*=}6IwVORwi*fsogRV`vo>cY z?Ju9S?-y8wP0)|VCk)``v!F-ur#O$@P_5%--+Sv)3M5YxyvV#qx1%?XfO@z6oT7UU zyWi{)L!{8DEP&*R>;tE##0QfHtaa-3*fJXyTgEl|;(=0hEd%_cTce349EgwUe~^~V zW|htdZs{5I?M%9e%xQP_k$dUZ{?_;M22qUFR2!#>ZfBZp!htE|pn-&!N>YYseF*US zu@z}X;<;D3RXLuMl8e@$a*c8fe6tZvV@L2;O>yP5Gx&PLc(bLE-_lm)B^&$KEBP0HV|QGPEUK>ZhFY7Cl>6Z$;j z9@n7?%sA5e*EMc;H_Q2W@;u7N`-#Ye;mt-|9BK5%^3L?zGr_5B8%3SmV^403%!x#4 z(CPVey;ei#cdF6N32?Wb%2yLu4vwM89y>Tp?D0TAJQhovy6q3w1N1S^6q|M(rC$qi zTVgauoLS-cV~w;j%iR<|uA$OJNq7DA8+Ro8X@4D1g8prgzrR^w>EP*P9ZVv?N?PJk zhpO=;X*TS8*bZ7zDeJfKu3v!9p@3`n9?N-`^F_TUgXC3-Wcn2TPWZ~M!?)b?0v z%MLyN0!4@R0l>$fx+8)mU$y8f|M}q;6DEQMV4!iRhIj z#I%y)1QU)b-up&frAhQ+)Lr_1rXWK$MT+&Ep4G#K@v$+>xIgwccg+4;$gNz4MS=6D0oHT zo<|9I`x7UI4n+J9Ky%3ntQ`Lhm4$e|Hzs2^RGn>XOLMKWYunE-Wx6Vt?22K4IW=>H zzf|yAXP#p11Tb;^qM@Oq!&VZ&T5m3nWXOpR@@ru&y;3UCK>`IQ-g)qAMcXVie1c4D z$lKw=#KQkxU183a0ng3kg4X=q>7P}Wi{vq4jyzBG2G!E4Io>xP=f}QostmgVS!i%W zqR&J|UEHHQzRe%X7Md%-ma1FreUD$KTK%|*pL|ON2x#b01Qp|i>ZlBeJUbq$6w@(` zEkE?Uh6N!-QJvZ~iSV{WGk@0Yw+cRU3rSaAw?RJa_pGKGvGiri*2`mKKF@$Xk} z3={*&%WmZ!ib<6Ph)8;&OVPPmg;O&0`hBuE@j3kQn97m!Ertn;n2eS}4bj1-lFAA3 zamjo!@@=7HUfKz0m|3H?)vGzeYIX7;`~8wh?Tto-TTGIAg%#} zgxg(vbyp)^V5{H&tjaR5I_WHgVjJ}Qm!=nZ}q*wP;?p~nZ z_y46@{RgmwzcVd=kPQDKjqzJL3i8Q6FHPnh6A=;mF;4sFA3zIjs8C)%-2mdQ#2S}}E_Bq+f#fu#_tL6^A^a-A2We6Qc-z%W2vlVI-#RmG04QAUf z9S<4|8lPX*KH(*dg3F&XixBOtKVeoQbbKWrYITvsb&QoP99|i~| z(Cidt5gDV8wSRS_G{4eNb6aYCB_cP-T0%@-m|8qyo^E8c--EV7MlnAVlL{L{oGGccIyOioYit->t@ejm^FwR=8|V z8MxLfIGA^pdwX&Jjg4T0=kWTKhP!HMpA@L;zQVTg9=0c!wVkTxp813*;~zkC^gZLS z#=E^%Px1d%#hB;+1AwhPoJGCElrbGf#Ef?uq}NIRmNA-`G6wYjV=QSYVs+m4bYUW? zRpRN|5&r0*;K1Dl2D#)3lAZ7m=0^ziblfl4YF+RC>HS}^l?nm^n~mw<`R|o{c-R_q zvY+uO?X~!A_G4NW^J45BAY*DN#|ke_{$0cjyPlA~`%c+ZND{Su)p2_@PO_#~4U|dxp={b%b93*ueGXO9VDB`~7A=1z!I4UNKxuofQ9pHgvsPh}rT2*_|f(a*p6 zZfSCjJ#Eq0ChQnIWfQ__3hb|~I?}*dP@x|vX1U@$&~my17Bd8raKNT23n)bjq64V; z4+t0v3%vIA%V!RyhGk2B`^oP5L0Pk(3j$yV{lz2CK)9%M9cB@`djFh0{nGzAW+;<*MT|Q} zUUWMH5L}QtBiq%r$!M7Egf^6B=HUs)iAPaaVKEf3f#P7BdT$!be>q*%KEt`6P42&W zr-xH5u3ISPUZgFYeC*&nH5u}A2nsu+cm$TJhiOpk>o41m=p?6I&Q?!*rYmlVE*G%{ zFA4uT^tW!T`?_b=m5D&A$mxbRQA{N#W$8s+tYQN@Hv#s9RJLtWw9no0(QxW-!pVd6 z%j*$BtiQ)NBycgcAc?HzsEg|$mH*?Lsa-Z(5X!4X&v5QcvJI%7Db~_Qu2wqVD#^F) z_1vXCPqn!Jze1zYOoStPQXWr;om~lUTF!YNr`uClfrxdYQGatfR zO*qk>%3lArMd07>9bbPql#pK5f_#U-rNxc%KfrQ>Fl~{UP1t`$aQsiW2q2h953Q81 zpabpu-R_Qwl>E1F|s`M(MVxTBD`kG`;Dq*q0aOIW6V=G``F4rdNUy`7xt)P5#wjhC2ePsPhGF(Vw1y&)Z274XYnV^Y`Dr{#7=d4;`nUue~Y7yMyF>h{!4 z9z(C_R2eLlvK`SyUW(GdFy-)yx*hMxPu+SkJ*ux>={bTH%`VYs?iQlcacbj00BKVA z$Bdyq8RAm5%?$g|+NOlKa0%tMtsujIy4gs2ahvfg2dgihUEU7xG{uAx6?hH#&y+(H9UN1i$z=X{COH=(fW-NL=vcW5(d_4PJok2c{|pn66o%%_x~1-!Z#);DkQ`IRFXZiC$^<5t zm8b%ZOqeJib<-SU;r>S&54O2d@Ybj4&$({J9<=r%V0rJu zMEjk6(y*(cO0(dIr`EFY+^)tVolda>6uXKDMemBye>3LnGc`fw@U%z>J z%~K0xB-;>vjGxV*i$w$DlbLyujwQ-vu?+)2AWMPb z0xJxby8s%j?$8duU|g%)gpi|BXXl@d?hl)9@}g$SsKlkiXz}ys!*2KlY8{b>EMaTHT?GXC4AR-+ zhDJO7t>UVV$miq_Fv|Q(1)TV@F<6toh}z!2$5-0?&{l>K0Qh*t_ctSZXQe5=j(w=F zJ{@!3`s82@Z^^G!4f-@8j5@FPdxbI4tLpGkno{ea2eQG*;zyO8bne z536xE+vQq%yt=&G(wF%ULX0kB=k*_AjNoh-SJvf&>4p*D?zxGG{1Y@Uk1~x2fZPWc zh1y!{aN*Hj?@mA-l@BLRZ@w}Y-4+i?MDZtv40ehj2bvbv;`VL-+P~_*tbGvTxGbEt zhqrToxlakq`9YXYk=Hb+Pe+a&JixFAMs22&CT8zok{RufySPit(mGnIq1!a~7|Sx+ zYF_8pzwndCWmyUWDxIl<>S-en1SVz9F!{**AHcP07&xWleNf9aPf+K*r&E+M)mFz` zc13jK9mVA|C3N*tttt;}NA8cn)80~ksLAd!y64Js78~9CNu&Uz*p{k7zg2c@sxLkP zU>MFJEM81lgfRk zrAaDhq|yn-nInFtTy^icWnv*%qf3q=9K660dV}|aWzMc!@?)hm@Mfr|oCAMOQ6JfL z^yJ_*2?mW8WwGe0J|GMQ$#)*Af4Pc?rh5Z22|4vx%5|w-_1=z=^9Lpe#)psQ+rn@otOTm@m1VD*C4q}%TN zk#%d6VcH{2Z{Dmuz<(MI;W~?n(JBw{l9y2;Fq);yvV`z@@*wUq=xe0~*odU4H_)xO z+i~rs)zf@Xu3dC+(w`hEGDFbndrwkr&0~qFxRuNg$Srt%;@i1Ojg{;emsHVR^)j>!LT^3w!3Kv` zJcQyX)#Wykz!LmpRF42OM`9}eRdNQqzsdlzPUDHVmQzF9_jLy#aLNfreNfy`xV%pJ zX_BVSN;1Qx0Hb7S{>~S~ES$Gtnfcv#hEKeBWn$ET%JE$r>K(I|s#R)a*U*?7|9;x9 zDR;3$O1UPffrDhqxQc2nscU9|BLuzdkWQZRtUgsp-Tx_lOw1y@6rO}Fy>EOYJa@4j zr_p7?Nf?W29`wu+s765AFvH6pXIOLMMrY7PXV?_Ht65v~RvB^Ho65BG@eu$hlKuYW_s?7Lk(Q;FgjmC-+=N!WO7P(>aK{YExuM zmD~&2T3d1X+_=9H z_%~u0wae1i9oss-LrTWg-^gSqrTDxkPKB7_nyC0D#32Qa(XzpTu1Z6 z3ozbQuK=ZQjEAlQ!U0-zVR30~=THCjpDcwO3YW}OIgyuL9e;X3v@KrzzGONXkW7wE z?$h1RhLd3n!pZXDGY*fQW5u~+WIl+y^eJiC=Ke!q&0X3&Hl~9b+Nw?K9wT;txj_Hr z2@Y5MtuESbXBwh{T~=L})(20KMA648_C4P-ByW;w3r(iXxCjf0cg?z4&)ff6y9xS@ zboZAmH^z+-m2mCTcd@;vowX;%D!wQ)3pY6=hyUVWRdIt*&bh>{fr5e8(0`A4S=74O z<7v>f%M`E^r8-&fIXB{VpZ2(+Orw?B5*FAy;B^_VBgRCM)sHllJhFaH9@t)Vk~}HD+9Xe7}Tl<=W}C|z@qB@KxNstAo-3( zv#*+SrfC*NZ^CbFjSR+YaJ+?ydr)f2>`MWF_$d%1$9*M<%pyF*#=w9y8P!zL2nW)sHe>ojI#|mM7 z4-n5tise#9HaNU<01N8Z%09(6Zz9{%*D}D3Eepol!0$lvHYeH+C}^n@wc=G8`og)? zG=|iHPi8S_@fV$rYQqI?Jy3@wqKB9S*|e_;fl3x61atgs{vsuZ9c7^3@JV;ii{5YA zHo+BEq&pm|09Qw1{4wyrxUTX3SDI4w-!N{4J6A$3$GbFRBgk2P+X0!`Tt&7}%5b^hKbL(=)-ecP(rfe!QwV=P(mY`PJ}Eg=06%C| z=aj9Pj>qxk?;`qRlDlBE^%QKEub-3S?ME_Q)QQS~<}((iGh&NU3(p00DV`Cw@kdGS zH=O@DFS5|>P4|K)i`z?#zk7}dC)LMO{T1h1Jx4<917Xm}6hb*USx`KdTKrEB`lIM@hjWy$tzpQU+#=CaqW6toa?{YLvsZ4myr=@8w)cDNM! zF)1dbAepa3P5k+CNE71*$nk&S+*WbUt;gt+cQ(4H|Vzr z1Q&;_I?2!MrsX-1P%p{K${}3j5V8Z;XPjnxnKe^rwDV*FNvZF!?2T8zRWRVIj&*Le z8c6jjfN~{xp&@BCUf;_S9{QJ~?Y8g=Sk%(lzJ z?~q-@)(R9LjKBCi+MsNTMS#adCL;>k5Z!2$IGvtto^7-q&gTDv0@HY@B6}H>-N4cx zi@H!05|Gih-i|%dQ}~R^KLDVrYd(#G7PMPM^?g{@QjMz?(a+dclNJ`aM_8q}`LQ`OE5PK}Yidwf#fABBA7kUn8Sx^&d?*9xDa}ll$Tnzt7?yTczxR zt1Vr5=R+Xc``U%_QC!eiFuR`UF|_@#&X2<5wdbAj9&v9bty-Jioukxr`Fc+UcR0YW z%T(nEPeHB2@Y&L#n1PlN*z+iv0Z32Sb^HD2iw#_4dV>wmQl@r`p_AKduNRAkCVPf{ zdHsRo1S+Ha@n8@px8kqwNF5%fR5pzzW1Bp9cXba@(HE)0Gw8_VTu3L=($d1*DjI(F zHUzf5`;I+DV_a89-9VNfs$9|s?qs?nR?0j+nP!untH;dCcv>LDz}=9)po0#y*ek-< zhmt6fKbN#RUnJRiQNbXjQ?U1X(l^LAsL;);YUalL>w((s=Q<1rPm3}>Cy$hsp?=)N ztn%!wMX!NBU0Z?6*X-5=5;wHMbHnBQ$BQtg}F(9$gvhX*V zpT35Ect+QRir0ODrx9q*c{b`tDT4fRcm~uG$)e5=c@LZj7sJ`^dJIge3V0YQ#WSRb+r#{sEE%#blvz31nj7nrt zHqS{w{dVomNoIWO5z2p9ra>^8Qm>xJ63uFr^*11HP}i!Q`h9j;xaDW&xYTaQ$LN4;=I8Eqqv}~>1S(M)v$C?_24u;uW-vlxvYr%#+bx+P zl;vZv&g0h}#9Wx|>{?6hTK8f)r_OoO_*8S7a+IA%eIW*t#KNI6^pT(wN&nMidx}z1 zf#?PBcE$N0pX0z#nBo&Xtv&yS!ncEOj51oktRaIpQc-fmw@5Iq)1mXaR_~N<|8&*E$bmI4NRvu<~X3x`DX|(8+ zZs5@|pX!A|!LNmLN(x4eKF3Go+A zwwHxcOY?jTT=hanBV|JL>xvCyK<$M{ysEuLeOH1`StfG1ILVtr+ur2?^c7^oF%15V z|K^$i_HEPHkQi*qY3OIH0>U{1)148N`xt5$Jy+Wag3r6Pj-3CQixjV(sakU8u``i? zpIHM(yJ5_axg*G-j~uyP`4u(2l> zyBm3~@W-vv1gdU))dIheu^+Z9@p$0oyRHIDhpi=(B{eaOSRe_?BMna%anEP)avwVg z=xAg7ka4QZlu|I*Mj~fQzTuXG@AsuSfUkISXIOMJ(80EBN)1^9-X0`nlsna5n7G

4W^)##Gk_!EY?HG$N03A$kuJk8^ z7b)q{^O+(ms^&8yk86rfkN%TH_ZjlpQ2xY6l+r?&w3K-)y+q@;y@G^9^8t=Y7;uR8 z@~hM03S%Lm#l66V+VpNOweGYEu^L>NEw4tegUmKPwJT%Z6(Z5G*`CD(di3rf=D!WP zfNlkqziN1lTxZeDyn84xEcgn6DJRdBmpwcL4(nE|F4pfmPW-ib7J)Z(gRPD;3j~WS zSX;kVw}~6otPZ?w>#5a0Z7bzjsG2P`p@GW3LVTJm9e$$P^!|afzE#&rg1@`YM1@Mp zKHW(mm18eW0G244n(7o3dwaMlOKgDB()JyXe9eKX9H1ppBmsaxkkAdB^=$QhOxb0#jMbgv_41 z(yH%yaujq1kw{+&W&(lUt(WVc?3OI*`P?v58Szr+@)>47_Me>9D`3*dW3VPa?ppU= z8%CnxqAlj6hnLY?cn-xS@1kv+x|+-w8~Y(nhbEB(7cRgl`(s)0_a`IvJSnMWGfq=S zcFvcJ9T7E|`J3Z~IoeiqFh0^%0zVtEm5NAa5^Q&vBK_aVEsC`#P<&y!)Wb*FU1}!- z*4`l>ZIk1(DoJE!yhj$KjG~{e!cU67-_u-dKV#z&Y=$ne1hTMg zg+d#%l;_WqBc!+E4f^W|QBm-@281=4rHTjC9%qHu&1b0beNRW)f@{WyRaMfSLV{np#byy%Vn@O$@M%UA zjrcZVTZyEedTDqj-`@}W!;N@jcso<)=NcY<_dT~?LoNx_roJ3d)6oFuz=2TcrMPe? znq(yukLlb@0W~}cvCXtj@N1k@pgA6>gq2#cNZ}to5l`-~ZyU(Fvu=&P$O5(Q;vkjnh^W#w zV!D~{a3fY?lNyDM10}gsl&gPefZgp5r#Q?cM$FBNCd(WvyF~jav8M+XoXYofa0>JL!@G{k#<Cc9Hmi!2Vk%rznN@x8&SYH0j73QBEy{+|ExA*n?_aL)+xTif{E`>(6t< zirC_JWd7fc1OG+BXeExD8YJWD3oSR6zq4Ma88FsK{aMmbJ?*=HN^S8#)$8HUHxBY_ zl@1>7r>3uy3=%K8`_`6gAE6uVCAEKYKXyB<9klUxh-%^=z>)tjbVxm_RpBVrpS0K? zw_wiQn)_wkk%Rl%8a{Bz(H!Ugg+L%n{BrJfjiq-nx|W~MAOhr$k>HJ-nxaVWfxk;Z2cpWZH7m*0C;-fHuz6MYz67IXLAS)VX zrnKqBbi}d~D+h2n7kF#8w)jXJT0n|GCIQ$JD)HJYA+h~ak-1}s$x$s(>hP36x!z$Q2+&eTDcetSicw;Voz9dS{%@ zhddOrLPM{E5@IHBN`{_(iK+4lJM;;O8`1={PB6jsNEgMDFP0*N;bK1Cjsj4&9i)<6 z!Pdl_wr&fjP5+=}QUx76arGQj7CnwktkE=i-ZamNa-!z=;9Kxv6UpEW&iIb&7M7@> zSw)htnz?T_VW9FMn*ClK>YE>T=HB*al#2ulm&+O7?@m8dU0V3gz}3b`Q_aotPpb9= zy47&2IDDo3qY(V72Mm`T%*_gF55*Xqabo~Rekp3I&u579e%w=jALkuszlKs19IyCZ zEyVkoReO}*OrkaG}8(5o~CEU*J|+oF)z7J|STU-qz*3sT0rF0-i9TCgfi(5bed+uhqF zudNmMs*Lt#TETp>vSR6~uNk^j?CY0Lrw};Fr=!`clBM-%U~?0m3xO%p05DRc4ngG8 zukTXTm@6lz>Zw~_kE+YW8@%c$=i*_4;S+ZN&a4~znS9@`nw6ox38vd`Y@ar*qUE7u z(@n!}TW$aVbVXenCyxVy$f^20V z%v-!!Ci!uRHC;Y7My1(PT<miH12rkr$HGx?<)qkDbMdp}Q{`FwTNJNn$N z+O{RXbB%Wrt}w3LUv?@Hsyze1>g~4f3W|BddCgMty}Ud(x<{~Idx}<;`&o|RW{@F9 z>;`q^byecZOYAsSpq33rom5eDuJzEbh*yd;9*V)n%qy`qiBT9NJXjbD2jO2q*GS43 zh;gBPri+qq5b+07uHQBpAXsg(nz{UP>c%ny{;jKP%bQz1!*jLyRX6Jg*eEw-yvrr& z4@FCNJ1HIc0r4%5n}()MN#@Pyz=%YL$t39MWCI%q2XkeDL1DbX0DoajqOT>dv+S3x zUPXFEJFu`B+|^QFhBG@xV^Wb0QnqbDWK(HEnD7dxOgx_H2T_RPPV#U9O!G5z%dW)- z{h%`7Ol#NchS!}WKDOEJ4v&SR# zVQ0D%=?7wC%9D`b8`k}#%6ffzOJ|~-V^#jNw)HG8!eh927kBmjJxxOWt--d&XX33% zS^@GIT{LND&n*|D(|HL?@Be1r&VDqKG6~eIet0JtQwp(xU#KfQJpL5eC(I4pTEcjD z=36+AD;qM#P5Uf|{PJ&+jT6OHC%^ixk{Hh|2$IyII%))x$2Lm-?#DQU2xkcI4oY$K z{q!$7Esjm+)OPp|=QgnljGvIGk46fa_VTxhh7PDft`1F4ep{{O~1~`oQ zlxvaguT-$I)WoNBs|RF(fdbV(57SN%f6Ui}8Cu>Ek>RzM(`b(B8SsOK(^@OgeCww9 zBUwoOAxEO5q@KOi0v;a;G!?wjdF>1l`tk_?%rQvY9F_r5nUR77=~;U16>Mr3jJbbM zt~+_}KuM{_-HghCi57!l25&{oRIu8CxZ-(=#|m#qNCx-6qT!E~9Yco~uyp?sgN8oX zR}m7{_rHVQ0NemniSigE?S_z5C4{4U0+{_ZK@56AQ-@|P7?sYW-v!Y^3rHMqhM##Rp*UW9BF$V#*cW)7-n3Zmsk4w%Sfg#c;c#$XJNc)Fmy0JVo4zJOVkrcBgE+K< zl|IE?>W=NY`gv?g#dU*RIj=yf+x%K>hngz;91cGe{}9pdqr!Wud0owD3PmIE5SsRaCP=gB`bys2rw z71T9bTp^tvgjl?%u@=6L(}V{5Y? znM@2X8#kzhV?#{A1GwM9!!Uq5xrtenf5U;v+PAW%b=C#Ofqo%9;>4jga`<*hr5=P5 zNcUbc@H5wCkaY04tX)Vxhd@OL)Sh z#RZ#FC_k3dpYI7%-PiyNVhHlh6FgQ{$Tlk{u2bBk_Z4e*(zDq4BPFq_S{eIi)BOi- z@)pnB#suD49{+Afi!@^}chEpWlpt2+tuUdOVfv4hyoJ1t@)l*8wT={%y@X9PXPI4C zi?je5Y#U*kPUC=N3`sD%tLgwkab2+QOTD5k=P#BjJtd=I5Jotcd+fP+MXU8-~Ztb^8P;@`q}<$NE9Bi$hAHb-|dU(A3-y|xo$U6z7Lg+9mVv+ zp1l2+Ik5@%!Vme2N1x5rTD1J1?}tpEiAE(F07TbBph|b$9%Y)_OUbU(N#pmcP)NoYDTJPM}HSBSj2RtV2IM#^tSryJRKT&%pV z(A1&RE1f4N>m|rB$*Fh})+70r*`?l(lPT5z8>aE!Cae!`8Hz&Y$GL`foxeRi>U7by zYuhi5;U;QCO z8=bLftl+q+N;~f2gEwOuzI-FHWm85qfc_yB@LIPzry{Rx%(PCfJi0jld}0I$hOVLI z@tMdc3ibSqJ(tqAWi<2`#7Cy#=S{^d%V`IYrxL7CANX(x2X8{1g6-|aNkal0aG$p_Iq5Tb-LFE-n#~X#K>fDk3vG4P$a4O zW$>|EFA4Yn2)B?Vd9x4J3{I2Q?`6&*>DHTJxux(OJZH_E4>~diR);V`HN6 zcH6!|D7AgaT`Cg$KjiT8@bJ8zcUNK+VeQ&abf~GUAXDCLtjL74D-J8#r6xu124)DH2TH_x%3x@vc|(? zWwBlC&Pd2ZNq>;(YO?t_1RPK+58|8645;w0dSr~jVfYN|;Tu{3u?f6xync|c!jA(1 zAX$Rs<4VtDw+9;q;&23|Tc$OXPGSzukyVuV5PTCW2PJPjmNM+d5P9jvb&lozxxk_l z4(=(g;yk1>^vj4bmpZqHMq~Ih^`5?>GSy=A^so$N$y)EE2Dd=jr*bm!T7i1`4W!9N zD1WGNgO`I9YQ3)KLD@K5paB~FjdPt`w@>Vc^s(qWP>B3%Fg6E+@^j=0B~@&T1UiAV=o?yZUU zZ2l-8f!NV7owL%{EcaIkeY+~Jxpn(UyKQE|d2vO+zFN@wOLc}`94}t9!HZ93?6qtY zmoSM~?9;FzQ<>ayf9(Su`=4Wzb3D3-TyS_j?#rsKBBt1cA8#V`tZ~#Pc~uVdq^+xf z3p43hYgkv+LAR&yrq7YMn4+PtK0{Ix?l+~+37nlyt|swzQz2xyM?N}rGGx!Kv|#~3 z&juDwnVIJ#qzJx9+S6_S1LU~0E`I{>Xj@$z7BJmSzVsOTPV{Ln_ZOm&)ulamP{Hyl zg+e+Nhe2ls_lT8!r0bZ4FM}!Oh!}JMJkEw|@J& z(Nus7FM+#g2odWcfW4Z?M^9jG&jOl1TEC3ik%Dj0WWHo-AdEXd4;!~df-guG*Zt4= z$cuBgbCosRyttE;Tm5ks!PE+3)TGc8xVH4-(ShZHPcje|u;Sceyfd{ko*zhaPA71g zX^C=ReeRI@`+K&of$9^H%=kFEh)R$E!v@R>zB3?dscw88fvh(?5E#y>H!jZ2%l{N+ zyJjg1UCzd6^U~AAB4E@0KimYy|4=S?90(&F9)Df7^AFJV@OmuW$tHh?mzQ|cT4!!R zi{@a6)Ab~QYkjergGuDBJP3CQ#~Z11US9UYZo9?1OYbSitVDZgpXD~o`;vqXjEeP? zm|%)B?QTiMB5PTE#@8Szg1uI$tCTm68y(lojrnbV+a@*wC)fW0;Q3P6LeI|Xe@<-w zeXLk7mDlDFim(OY1#w)?_y;p?J~mZ&KbmHrNl{82Ood&~{pXVU=Y%5c|2;-(>Qgv6 z%JmO$I2pVavG(=8Wn$$YAf@Q>rsl~nTpNwo%)YsC7Z)KP(YnDcI;5ebQGFg2f23~r zq+WTYkr@qC9m}{0#9iEn1ZQd8M1xm?*NjGdKUpwt>ju5wr)8>1&Rq#w(+FaoRhW1@ z?{b~hn6Uh%9(**cvBgvQ_!u((08g*TBmV)4>R3x>F4C$-rzGx|6C#cq2J-!urjdHK=L61)jXwBQewGCH~DES z((hUoqi{=v&`Api$*GnT-6MlTTpv$BKtne`DaiFkc-Gh=}wC2t-Cfe}j&W_67|N1M@951||+B8X7hMHV!TxK0ZD=79kM<9?@Go ze7t`i0*CN=4ao`Ye;9hj;2^&PzGWB3RYAd{{)&pv z;TTv&BjFU6T|F^L1fu2SmQ*!%iBHI>=_26bRW~tn4$7_Vo+2cEPba0OY3dpbKIQ3I zJNxiaM#DUB{q;5EuL{5+{cmc#zUCiAUc32m0Pygydch+iA;2Rc{i7)yJPrclJET_~ zRFEBUzXn!O$7Oe|;o)-_PXIYpola>$66juamCr9dx^()UI;-m+yrSPN&9G*VqxN+ zJX49E&VZ+2_=zL$(|kt+wQ(9|yys##y2L8J0N~h?uNi7?)zmWTM9`0r3{368&xL47^Zf<<%PBk0O(=*BrjFXCSZ znMQgY`uB-m#H##Na)f5{Kdm`@ySH=Hb1jX00c`(!%omK3jc4{303;~-!WnVQo3gc$ z^PbnE9P1j!d!G1uy?`S9@yp8PhTl)ay8*^+_jrH*ze-=X8##P=Ju2O<>Yv_rTqG1u zS%lwF7LsP3M?Y@jxo2kn#dGp{0jREaUM{Xz@?Z760EkY;G)n2Zk$M%Fj=XnLk1Pjq z#$EuWv`FNm+bVj^YjoXhUlxljU8SgsB4f$S;VLLR98NC2clc0V22DV08g8524$$kW z`e@UZZUTiA>B#1RZaX$nt*0T}((+OOr<@QZoMrKk?qZ+*wFLglYWOeW|6CY|WDZTs zr*ZctntKdCJ@j)AG8De-2DWK+J_-kR5_I+>#5%T&>tPGc-Z&C!Pdc1P7+wiG!Y55h zF`IPpZEspq`O+cm8A9#e?GJ~x&NS#QPnxJ0x|Svt6x$VzSWmO zEho3*Ia0{K?q0^BJXl?YJ7MNfq|_+~C{m&N2QA=aNF3Ah+)W^;dVk}j%cPH-U9?CqsRK z$Dm}&Uo7R1taDmZryUZow8J+owc`#Kn;~$wdQCEnl8n|myciiHz$G@|bao;&3tfS` zD&dElp@i6Ckm-)g*s>aF0go7*%C_psvIvCgJ#49jd8)yEVcFfbVD&&jf5;9aFLnw6 zVl*5r=3LJ?qbAuvDezZUsdSn*Mv6qibWW~zixxQwic(In_+#Hz>y7xk_uy)%^g2V1 z8&(YLAb9#6GB{n>qX8|jVI~~jfnikeH)x0GjD2{{uFcI*t+2c!U#?DT{nt9={#T|2 z-}wCX_4SI)VS~lzr0SFZ68HBN(|>lO#AWGcmZsujDW}oUJQ|EAdle zw1W{ILJ?l6{(A?Q}00 z+o%iq0uuhzT0(bIFuyGUYE==&oO{_aWDa-3h)nfdO5bQ=wd9;0qU-;Se ze2hmec+Mw_Zr`goy=tFxK^F5(iqEaM* zO9k|(G@iC-Op^d-*<;L&Q`S*a#J(L_&THN}m)8TmLu3c-1>9JRo0;2Ef7{O%t6SYL?`X|>|wribWkTl zDM`pm`@B^4j6*lu9Cq5>aD^6X(NV7Px;>_oY;DftC+0q1u+C;DvV@IX(SzHP6x1qi zhHdL=P%z9Szn-x}^`MQ%)&0B9mM?(9&1WT1hP-$Ti#-YdYfaN9Ov(DJ_&dJGB44t= z|8(1Ks)RNL;cnKj?mALlhbnLOoEQ0p;k*D&PX4(&<2#Xc!&UL4#g7r6z_@|2ay-R=Eivur3|+J-pvc(J!PVFcO>ta&-lvcZ4u9VO|vIV!;RMtI?6;} z%QlixMRhg|iS1MaA~MTRWbcfb0SRqTHok3batpKBAQ|6QGEH8*?X8@yf86&4#`)9j z)~cS|K&qHLdR>~7WAmm__v18KQD2+Ozd?k%Oe%j(JDhZvsUipVInX%ZtbdG2l8>+* zha5pxNkp-PG52qybamxqN{n;U(tw|QjT0J$uyCoc-4;2U$h*ffF{d}mzg@NOT`phx zMk%pyW{;(ZD*fcOEKARyVQi@HYuPN?w2@KyQx-D!9Cif}>QL2XtYfrr)ezhXcT;KR z5#mvjARY0|h8&AJxoKWJk$<#ham(%zV*yP?1rQ5A1~Q_(=QmDfn&Gqz4nA3er&HN9_TlSI}GNKJhL?!iF| zt=pMZ|cp4Ia6FaFw6uxA8s3xRYVZS*=~?z>Xzdu@}H9m+1bXYPhy{QS|;Bnr1L+ z-2cxW_qy{T7M29==6DrR{J?baVY?-94wWg~+pl_@pJUmV+1o$#_ffb?oHh()6rFEC zAGbFseUzPJIS{+LKUsV0$NqUJPJQC70JE);H_=X0T^05pRM1WqLa{FYS-zGRN#;8F z9Rb3s;Fn|G-Syt zJA4(yddzvN8Knn?HQZ_&I+-UVG3)wwxEngqOIOO@E$7UU1wjjJC5hMfykDzK*w_Ly zaruZ~e3YJ_?bLJ@)No1da;~8yGNm;>u|i4r6sew+tiSz}&z(Gl9myP3lkkmSmtx6#MzO-WIX-pYWMRenR`C@y-?BIKiG?8Kd1e@s{MM*rm9>KT>(>SZ6abnjs9Wxx-?cSG2@1NNnO8c zU-g1L2J5%ZeDl?~V?(0iGQ4Yfi32mVO&7B<=e-m;q2qnoaWTC0)f40|W@^h^v&&N* z@7*-W&57627Uc>LXGEKl%AdjNH!Qd?u2LpK*^)g5{!~^_Z=?|wSdQ4!IpQe@frw2E zWM*RfuDsk!x;eToXA1+AC!?>dfY7w{qiF|-AZjB{j>5;M8RAc+nzm3qL8P)EfM7>I@Wx7JkO>gsx z(k5rUclgE&YDB)=(wRx`DBmHXYke{qS0x>;)-iKp+0EVK7YispQ?!PXs)0r{;B&5g>GdUKZ)FYU|c=wnd+GV3PV=H zpqqnfl;^j)1`s@^sQwKTzoMjNey!M!PLUx^WM0$dA!ywaFi0Z^0FJ=t#oL#bnu-#t za2Lqd3@UY1r3OR>{s|Jl!B5Sb+IMmAsNBw5?&yX-upHfTFCL?2uk#b=e`L;AaI3F> z;A%-H@3xnH*VD`}&rn9laJ$d?c_|gouIFpyo1_8KjF1o|6e<&@r9;BSi~bV+V*+B^ zY4=;I>KR>9tnm4eM7+zYbN+MLi7{F~Sq#k0Eh@6O#DMagsZTqhI!8xcG!LqxqN$$0 z9AJ!eNtU*?tQZA+uYV=y1{}nMxNkux^DwDm-7j;nRi!K{DQuEu*2aBbJ_2J&Sxd{) z^+Q;!#4Zc#*Z6**(=Cj$CNfBA6E4wV`rh!f+?R*%Eb)z>^~%=Ep`%R7EY|e-(a7x8 z7jMNW00S`#J<-T=V>wHO^%5@t;{|)WjeI8mIQ4Iqwrn~nH;cOlH*)OTzJjQoiL2;w ze*gdqanWkq7Xatwv)mSkOuhwaF<*9%vy`N9Y0Z?*sEK8ETvk5@<0B5bBsrQ7Z~T0+ zZN_XYTl8n)F7pg`Vf1E$(}ALI>&})-+szDaTtQ^ZT?p^KYPz5)mrwf3aFe!ZO?J4c z(aN+(JSc75u>0B>W*?)XJJ^fIoFM`4TL^bTBOatTo&QK(HTnJUU_$T^&X$IK`6fCu zU$&e_$FtvfM+xVAs)=*htI>NV-bAtO>1x{!}ywXpqGI z%P0HOpQ1$Nfsf3i{WzC*7dgRa1$vK-=z7-vA#%69l8h{WQG{wD7m4cf#|XoHxN|`e zXrPPqoq{ee4>iPlMCQEQ%|S^SD>Cif)Ax1AE0N(M`FUAVa)9Q9 zc8ooVmrhr-Nh&bWHZ&)-Qe8m$M+9WP8hDTb6SNTY>HS<{iyu`Qt<}%J>8&4w<{X46 zP;!Ld$q|$z;qLImPWZgkue_tLJXlyrGa7o@Mv6x}vZu1XkpEMHxqijWKW@7uucACF z&&6T-$8RPC>`gLsQ?lbX*}YO)w!fmay42peoYf-t1VbR0E%Eb=N%fobM=p^tYN%)t zqgznrsPk9BKp`bjafZ}Bz4S`~4D>a!VyXIvgqE$GE!9ayVKoksMaZ*;WI=v;IREZ~ zg67>v6~3lQ3p-1cfw9gVlZVN2MR7NzJljay>O2@D0=-op-*wIpj1GT>DYM8@=b2jK zq-pINa(*XYH4wXcz+ByL65lZtzB_ptl_eIp5-mwNO&Xk7lwhg{r6sasQR;`~msjk|3FCH>moPB|<<1d^M^G9r^imuFy-WskY?E*iIisLzc|LN-r9$kkQ zyyEMmFjI7?(%WGbDbpN@Ki@lho`lZnS=r+tL=}98VbSZfH^6F~P7%DILsKn06LD)b zf9BLk(%w(bD$oa(vzQWho}msB?`70LOGmW}j-6ytgYt8!PJkW9iOPyvff#zfF;+45 zo{36)$M(rTAW(jAyD9p+;Hf6lR-25LSPhhv`Z9|^BiV``O8de=1`-Ys|qGV%oD58TgA=~$*nzW~hWXdZ=1qGYrVczL+6VAR4w1yQQ$ zOXc+W6sfyr-Q*WBxZR*01)En+ zQ=^!G;ebJYL0>ei8a^~mYn>_{NGmUbm)ak{yHfO;2C4qD`oG^+VwUPeii#%uzv;y^ zQ*ERia-n$v98@{)Ru6am zzkT$YJ}jckXi6^t_LIgVr`< zgG?87j_U2zRo3WX|dtfYK~@FkLn;jv&66p*_fSj*HhQtR=tT3c-fYz z4N5mcDb^{a9X^yiL1?6CoEK}p?w1{<1_L1q$%90okk8PypU-2s5J9ri;QZi*4F=9C zQH-Deid)yQbKGXJ^CES4et>-U^VgvhltbqR*j>pCOiX=jm-vh{sD?_>1Ox`~mw{Yvkfa-=_$sV3 z@uDc0JXkD=`9(}h>KGlD(|tKU4>W0Ys7AR?*;vbgzx_DJro0J{Q8ohSsdF$C!IY?f z1ni>j@3D#M9g45e@spx62HhMe1Mx0Q9#bE~lLklYVQO4!6L4f^y`7PmmhPgy*5|!* zYAt^(w#*70r|>4!r9Vv&UZ7KI@d0UoSH0ULj#rv#mKMb!K|KMMgH+Bqkw1~WuQd(I zH)uibliSf z7H}l9fVSs!v-?Ehl)fVV|#i zZi!(&+j;LRHk7Q0TVQQ!ouVKuE-Xt4dfJLQ(1iR25J)B- z*8RWcia+e0_sb`ymsxuAWKD2<+fbihTn!Ny7coZ-p|ZON;?d({!l!w+7^7O-z$`FI zsz~}g%w$h>T}b6G-&UI@BHvti)~WCWR2s`+R=&S(d%QHjqC>w8MV;_@0;KICGZQ7TE=Pb3!`Cx%K-fjy0=;zpJt zQ!zz+n0+mGy~-f#QAi40ELlF4@_jt9TjPp4A>vkO0dAyRr|Hd&&*a62(-&R-A6#u3(3kC^^HOqN~hQpuJXAjUF zNo;qZ>JRrSQi*{g>Uc(pMVVYK^oiTV)dZJAKOrlBiPN^U1bJ@f*1ScgpxYSmuliz~w1o*07g@Q3u*DtWNV&HN2dXb__XK_#*SU&$2&sD?mqhn^CdHZdd$e z+)5$1`NQ6K)6iuxU-eI&E9&WR1=1NQa};5fW0;#3zL&V*S$ZX>U+gUhx22`_&x!X_ zZP76N(}BFi9q$*weCEgGC*_I(=tQoqfV2FR*5Zcdu9S(}l^q3bN6` z-P;#{58+VSn>#y~r0u8ha>C~KZd4F3>aoDajyBE5)AsrofHlsixvBH5>bj7c{)m*f zgFvT#z#8=T%{T4#p4|(k#Oax_9Pe=^dzWee$96*k1e&)>neQ1x`U3a~A)K0orjGI? zfEB#lN(-i^?Dt;bh}>SAKfX1mqQ0)L!Pv^4G}fix`j#llG2!ApOiF+KP1*;`9?LBg zAu@H2Pf)-9gaG6_{);a;45>LrzoQYQjW4ccsRB1Kl~)*TTnTd*3L6IcCkFZkw!@GC z;ut_c+==78*cS^uhxU>`RC#&ULLZj&?ofLaqE9^C&A9+@!hj1tZIM?<{R4s(wGTQS zD->vP0V`Cr-JUDsUGCsc7)3fUhOiXdxAAQNT`o)7Zjw z^bWxFuq?y9N052Hy*+1Gw4^zbhi8f8sKgWifBYF)a*0fAp9Bt6G6mg#({NuW`4qH` znmde&i0!xpk4khdSP_90bj`Vcs34>^xqf)jT(>tU7V&Fm#nv1DOAce{^wY#$L_$ab_)sE4-@w=*yxuCg1 zl>7XFxVuAHr}&jTxaD;-@(BU z8x&=L7cKK;=JB*d%Vrxhb@{kegnP?883si_G);k~=|tzZ2zeacJ0_ydUlE@`;*y+y4DQ#w#t3*c*`Ra)Q z{oug)_@#~P^FH@weT}*%;NtjLv3pCDSv_)lG@LfN5%=`kQbi}xwcI?!P1t7!IbQS6 z3V*sHyUi#_1gbJfgXN&({;*(}%I|2^7?NL_F{oePPk2H~`75A~Q7_2o-b9IcEw<*GL&R2_!)yd4D@PrtWa? zVRq%3M?aWCcdBcQ1J4`lB3Yc@NCOGU%Gx_sh5YPFAb&SzFPLXRJ%MxiEaTxKJcFY!w&8-z((}5@4Md@2aV>e zKamUNTI^=->fF~DHCFF%qjuT%TvJKGDsA9`l{%Z`(FxT$&4pe1M^DQP_wsF_g!8vU z(r^>wR2TBjnWh9$4Rm~(ZpDoX*>ziCx|8E@NzgKA`=T^5XAdjI001t4r;~^jZbFM6 zfel5}Ig&NBD4Vd1QeTFt_Q*17DHi3727)XO!nnB*l{nzO*T_`nc4w%4U$4BKyd@ zE*Xvqca(;bnMPm!*c|K|BsTUeZt;eZ^LOZnOro!m@kx}+KF@wvJCA$4a_++2xSz6S z0`%O7#-%>z2S`c4AqbsQwx5@9d`ZEo-yIw`ryOcOUD!&?bpJ>~wkjN-ncx!x)ku|7 z$skB$6V1B=2BwXhJmo*bw0M1n_IC1J^J}3oi<4s8&TrT!@@&_6M-oRwxeI4%H`^j@ z6`fg)i>-<4_1cd!Uok3yLsx4n?_|_@?IhMElVOIS^ffHTaE|K!Z->+)57F9j3Wa8~ z;qI3z^!Iw;0Ezhz_RY%K zX|8ifa#gxOjFqj zB9YTSax^%6E%I$do-a3Z?VoPQ!Cj#=xpIiDIuDt3uzyAYf7jdV0mQ#-ua=Wgv23;! z_3~FLzTWqB&DtP&O$Sj6iLWig8#r+%#~{u0wP|1wB|*vYk>-&lx(OYmkK5!vic0nT z3NIOn=?pIOmD8@^OZ?{3fXj+``CW`Ty5Ao1XyF*qRFrAK9^yCKDXTm{V$=O6NGVN5Y$aec$W%(v@J zxe+osp=4#xOeKPIZt;t(!!eW1uMn1CcJI<-OQ=Z?tSi;l-nKG3OsBNx%P!L1F#myh zn}MKib%KoxvkdVzAPk{tpTo&rJ6YqjL3X};@faMVq+?BgIn&J0ukPclem?m3S@ZKq zA6eQ@xUb*L#aO?&9a{>Fn$NjMaTjGb_mjPyQzPUqD+_511#@(ZBL;}=yV2NI6Q~zn z4$k7uT;W&k`4W=5Dx`z16srT7$}zF5p{s|DVcg}2U~#||prV%RZ_3=>al{eH&2D`iGi9!XGl`^wm76g zTiyf1+9Ru|RAjjIPQQFTdxXjJxMrLWmt=CL@sSGgRAdxKS!9WjYJ@vYe1pP>J!Xm< zPuv^yTt8&n)M5*u5R1e8Y;+F($?pgP1AWk4_J5J=MKvhRO_TiKH;FnIpr;wWCLVAE zk_%$DjJ}UhE1cK}Ip=FEv;<8px0i|h#T3>4ec7C0Cuh=EkTd|F|92Si2J&iS2wo+u;Sjm$cYMX?s=k+ebI?W1TiAGH4xc z{ti&D6CREVl{4=OGuoI-r?CDWdge2E*X-N)KeO996UGJuI>Ny2acbG4&kQP zJHH@^v(~deJ!VTyQVJLxPod1&K7W_#Rr9_GW|EkKHMx?0DSTk8BX-4e{q&&4>>Q+} z*~Xsxy**k7mY5<^vP1@Lrx89#fcgu}?CTGD<5`IgdgG^aI$Jm4#(u1Q0q7?0_Jo;` z02Q$q%~)TpHv~riq}X^gtK(lbd}-0M7KK(QlUSd8|DMSNBN_hR6a(VG|Cdhszw!&z z)bMIEVwWny>R2Cv!p}rsp`_n%qmu=qU-<*$E$)qLtE~XBtK_50@^T-xrWZgkGq8Sz zMEQwS>%$4%mE9Kf3hREFBTu~+VZ`e~iO)1?sd!)uF>{V|-cIv&A4gZ4DL*p76k2;8 zX@7$zaY_2f>|AKLHPX)D1W zjS&NJXCpwSW2%Z(#dy+|62cN(V!*L?BTGDmjEPE~{I#%RQbEbgM=H~;Ae2R{(jn;{ zARD7kST}*5#LTk{ph+!S&&+^9p4&f-?FrJlIwAd#CjK1HR0T<8*JHFZeTg7sHV|= z4C`RFvAfl5p~L7r`%r&Wdty~0-%8hX`l~~Dc7b9qon}EabO1v3X9r>6B04({ew7nU zL$~zHdUUYP++VLS@nUj9z$2BI?Be`2Ymz3N3c0c-JvK;;7zo(p{bJ@X%DL&zhT+IU zN96((7CX$hgLtDUD5UA0E65?*XS6n~>@4d}oqiJFf~LuHC<-dnam~%N_zkor|4>ll zxgxsDnNnYIn-R^?^-hvPDuB5anCJ?A*Q-NLnHF4(lqGv?6cS#oP3xjOY%DbD67I_7rT`@rD-Qs4YJ--i$JS5Iie!34jk-@OyP_o>By%Nn4@yk!cT1Eap@hx5ew1=8D9aVKZ zk4y-sO@2`>M1A2?8$-*APqN@oMmbX&cIW=VO!oR)ee%I;#scCJeV?-8rq$o{c4%a~GJ%@~-DX(i$we97#5mI| z0iAuEp_1DR;KNKy11#huag#$i!Heteao8faZTGlM5GbV0IP}0_?V53gt=>y^#*-Qq z614gVxoun#b-n369sL?aGN5NgWcHS;VJi+2Y2laJeWlAt8#MR%Smq)QQ+LRD)=bjZ z=6q?dhAibQ^}3K~8_hqeW#4@N%$2cr7L}1%{q3lbB4%M^074&WVC3ospW0{b@3b!P zNggBB>K~`ZD8vT&PPSVom-0jB>`jPn;1sYCx#G@cniL94w!jCt(Efmhb(+*X`}pm8 zB1p;Mx@+SMM_lh;;0wS!0eenWOGeT^n_6DJv8g9GaDaFW78tys>4CF{q3r!DLedev zM%k)fh)ZMO&w!nn4T@u@^%y1$UP=0aVYz#c6BbC8?sr*gq3+Pv|GNcr_V_~MCr-8JMj=A?~{Y^?;>WyUH+8P}5nM;yScBV92_6fiIGvsjNbTZ`jS^`3EG-~6r zXvrutmP0%Y;W?*O+%HceA9g?s5WGt~g}UFYBtJ( zM7FSr7VX$o62gEo(L zw=WFmu5SEQL)BxHV!LLpsn!mg*OX9%`@@&Y&RhEJ3tR#de!Yg4GPivXBxKbt>mFMB6^v^pwhf1dhb}0aWF^U)6EdL}D`j%@2uaRr@V3-3hbPH+wF!Oh+TXAz zP@RD603sXVGMW>$XURxQCYogpGhBkoetEp@p1;!{GLSTYTh7AF0y~KTqGn4q`fFQ7 zx!BCXs_A(d$B%w6h>{JlDyw9$vWzWiuLcY|^@#z-p!OB_+rl>6Zsd`qo z^E8Kwq*J)uBKZ1l7x+BX8RyVkQVzp+(fUBCK%20%xZN$sErOCh9dPn4GAwus$Y=0@ z&%PM3{QLB!<61YN9JAghql6La)1M$rKli%E3#uK`Uy%l-lYNumI(=P37l-CC9A@dG z=Oi0$&77&&0Yq1xbF=`y5}?h~VtTxk=Az}3%OXQQGwoll!`Bq3-1K2I-P}J~3)?>< zZ(9y4qWSW;PeT=GR%l3Z_4I?zZ}TiZEa3!42Kl-RV>va*663|rvZ+;Tp-@sr;V#Qt zNrEC7o^u`7~;)b?l5f7e|+6Pp~E3)^XiDTt9%+t7k{`hNr!_2B}pZ>CU zQRmGaJxmKN!YrC!_ubFVSe-)`s-V}pfB~xFGLoQhK?rLZTXV`=%5maYu2=^JaimT% zGE)m84Hot=8g0i7_1T%5=67DspQ|4EcjA4IS0>Brc}10$YfBkSsjKJEC9p|mXR5L& zeEbfEs~f-0cv%qwhBGSdV~%DsuV)ir+VYD|{N|Mv%C%1rJJ-AZKH2wb3NHn>8!uSBWPPo}E2vOo$m zpCQo^;EOmRX!mKMojH3x>h$f1eN#nHGkLc~*dnQeva*44eI4qzGLV=RtY-;l?~Q~& zTeKM~txv$_*#?Py8idP>`vV5_p%&~b>Kc_6{Lm>*l|N$|b7w=CXMN8Ofvg&NS4Bcg zan7V+J{`raJ)N^$;7qAC(z@TrEShSyDtnY~tdhaA%{-}k8!!YuL3?NfhUDJY@<#FE zqsVpIERA{VrR`)QABL2aIlvxiaF_|z>J>SrChp{ta+{TP{$!VVlga`^Y1tHeGQ&>F zZ?i1nQIozA+U%Z`;J~dJ?fdf?j4-LiUo&Yx(;`&U?&xfp+bd_(Cc3YY&yxY-V3|+| zLICg+q@0EoZ|2nrKD|q3fvMRRq_^yXtr}MBQx`TS*F)5)lTS`8^os282nBtaU5QOE z6WQy(}u_V>jN;h=UYSuFGR#$&+FsQr3vD55$|npB_~?GAlD+S^#-BB4u9R0E3^Fa zvZb;vfH&?&$x>miht+ zvPJjyai+UujBhBb;C=yY#ayve`>^>hMM!3zO$R@r>ZP^$4bQnh(BB8W+HdIucb3v> z!J+n7rYhg+@59k<*Z^W!@yQ9Jq)U%N9XA9Xj=K_|M5tj5=QS-ifX~b>6SYb@>9r1Wvs>(iVG~mm;xb_W?%j8;GmaMU?$uDA_aa$Fj`I3S?%2!U;3MDGkaiRk2Mlo0T#xXkT?-SX1TPNO-Ws=eTU|2?GYl+ErV4-XioN7@4L5ycvYWUJP(=G$E2Tt?X54xaQn0_gb>FF3Cetj982)r;g4U7Y*O#V!yWvnjzoJ0f9$w!}GGMh^ zLKl*x#$T;W@A1uH+reiuax04q{!JkTn-%K&aSVf?=G+^M zWy5^h=5QeO`L6}Rkw#(Z(c`3?0=@Ug7!#d2E+JF6cc7yhhe>BJiPdZyLN;xKX7f=Q z*A=-2qe7M~r{_k|R~BZfz*t$6pF|*MX_Uct#{NcYfAkJ$8=k|wr+gnvU00m7Sp{K*n3)9`NDn6!=>#Lt>XKYnTO7 zyo8~^UMabC)Xm{E1X*Ud5TI$0Z!DHZTujJb)-xHWsy+j2sh{u*K#<+ZD_E!MSB#v! zx8YksTJ@8*2U{5-mzmiq8Lmu{36cV0YG*PMy)S>{JUXec#fiz4S>VVI*sU$7=s-9DWJ*d-a0uvQ z4kxCMNB8FAx-?rsg1(B3X3Wv%-IAu?x`0G{2SFST;>3(}lqkJPN^Ik{_Rq||i|o!` znQDbWPkF(0T<|58v~)P%wz_DAP83X+u~ z&G0++ODORiWhCn`-5Y=lqUl6J7fF-ht}(8?YhdKgmtVDZYs;#Eb)#7gO`Ekwomem| z_MMPq#4TGN<*7Rkhx_#Pyk`uZi$}7M?B-EY7_KolRi-&RWb+!)z61PMRJ=k)Ag!fo zj-*GqIy5>X%C{i8EN|eBv$eN;7cdXcAvX?&-MVD7^CLV-{Ou2p)dnE?AsJ)`9=U_e zzPF|d`@8@c`eHCc>7C`4eTr84e=2iqh3B7Gv|BCNpaO-H3j_j&zC!bVKff)m$UWYv zsW8@B>BwiE>_@9^k_El4}X15jYvpkENM?qc*e?&E_LTb zeE?A5PW9QRZOPJzT;)%{0KnIr=dK35{YI3<&NzSTac&8BACzp3>iv--&fp){zVOz` zZCbBV22@NOL!JWueYsaER6Rk)^|dTp?*GE3%6rkrXdog7`LHq51$!|sr~5cOobo#v z+{Hv4D9xW?ik#|O-5SX}4u3mgjZyOd;k8+Ib8S#D&>w47 zPVTv%?7k9jA4e-UH=acKhje5F=q#8nod)!ptLL?1Y;{kn_*xlGn{>GEt&b=sX!YeD z>+g3KXoauTB(=CuP4`jP1w)}-K~_+|9qZ3A@8bC#zUfcAG;~I%z!AXb;OT=>%N!j3 zGW^dwNuKVAvC=1ecYRoGHdPuLWSDKu76n_L&MEApQ1Y?ozsu8oH!gx>jo6*ll`R} zXYEDwv?{3^-y;O8F9q@R%3(o~o!v=b#MA0WUH4a&7u(-1Nw6AVzneH>a(e__gDD)+ ze>C5uEU+^)_fdHUNX}fX6qg((q>T{S0gyjR##O|<>KvoSB5Jx5@)Aae02gk544RwE zVHv_-C`dJ^G)8oX%RLvJ(u>}lh-UJ(>1-CF?#+;XpeL%nqrBIu#mj+ih$q`c2S++{ z#1gtSYFuwI$Ur#?pH5Ha=5~)d&ozt{utV?yKHdIlLsmge4%Zz=`$j5z3t)GLX8Lz& z5fS7QK9~Ohco#;si?LH`KryP!hXd4n6(5Y#k;DUJqMG&#?VYsZ2*Q;X;~17Op%AI6 z`*u0kn6&Y?K7Qkp(-_7vuhMdt8I%A)Sg=bDxqScFyyJ)9^S|LpEpM3Rg(UYYXe@K^ ze<+AW2p||v#s2}ISH{+%IqqwCnEaIi4a~D=gX0^~n>+sM@lHSI4$~Wx7b`qCZrD#2 zcnm}vv`O2E<;cx@vZ=@3+N(XihP#7cl zVYeU3p~NG<9g58|YUBgyz4&RDZiI5`rYdl?z04B!0Qy!%~jN2;h!1a?i5xP+VH(*U@ z|A?Fk8tK#}4} z@+>QfgvN$%@zy0B0y3QYCfV-QU2Sec~>a=3THo$Nk&%xh3HM zIzj}YtRY^9?PYx5aVduFQ{$2x`1k53&Aye`6x&S6OSwnHqp*J3n&{hz^}O@@^fPl~ zx11u(GiTWL%k=VeR{ZD3R*6r}VxKfpV03+1#xS}J=qlk!S^1GT|IIY^hNAg5b-Iz~ zp0-a5+33A~nsq}PvT(j?%8O{o=!K{YcJ6(6HN5SOlY@d$hJ$P ztavM`cU*z@WiTgFiAL-lc~+YBq2S4tfsvPEJttV=4FP7~l9ot$cs~Ii%s$w zMzREFTia&j`SAulP3YyR*{aMD*_u<8Bnswg1rl>x2oo_OuKIT{Fx-(@7uW{C_(&@G zvI#v(DzqJ1$+@LAb$Xj}kA%K+I);DapAccfDjSz6t%k_?LR>^9?xLa0aXikbA1ZK); zWo5(zYf1=!p3=ema(qXZ?MrtCQA52oQ?&l%Ao<>|HNAcY%S7LvT;^=}`N$2!h5d}Z zwBaT0g?OILuT}lpKR!l+)Oli#7F+u#x=28RjR!#_47UwX>dc?@I$RBeL9>?phvSP{S-fXJWK@ zOmAFY^JQJn`5`ZB<_eJ|_@Lt`Y201(EVwju{bNC^np<@1iyu08G*V`e17-*riM!$e zID3(@*&H{jRj$j)%>ZhBosk|_TcCRS_4%Q;Y!AKvnVAWueg56Y`_P#<8262 ztD{xPtv~SNl~SWtx@8n3_m<`jah@SvFy6x4k`}Y}Y?u(;<7mVw0+Wnb6)s4vLYs0# zO9S7#^(P;H5b_+VP-#eCAUkW3#(jXbDb$k>S!Xloo+NDH-1MMj(<8q5{kH2nQ@&@I z$K@`M^^>7_ur*|<4|r56JSJ{QwiVr$-oao;5nHL^Sh7(Mkf zfOugrg7k=v;15iuuGi+X8W`ufk@9;~+q;FS?qZq=Q>fe{mo*%sVhY0um-_Ka$vQIN z?rG=pH#?LgHAEK2pxA#iJt5zetYFg)fpd+2RWP{W=aA_gVP3RG%Ig}+g2@}jruG2L zi?aaSKe)^^H$7~t5P4XcrFq$SYIN>7GNdz*|D8FM+!&V*;X7$n_BiX3(yi3An=emp(eST z%e25f)6!EA?T}j>CeHRty~q<;2`1u>3rm4lzr<(GWre^3c-3(7&%MS7jMy_d3#0Nx zPRaPxMdQ;(+?xCRovU*d9Wu(lg|-&d&)_t}zK0fAzOsss3-5l~h~0Q_$e?^SF(ahp z9Sc)*JZ>pW;>;dfkADOvbz@$3Bv55qb{F$X6?;tXHX$VkSYEp&(%!T^pC6P`6`Iz7 zXc;s|aJYJ#p(`2-ldsk}FR*V-q z(Ffjek$^}tuLV`-mu3Z z8ip78(v+2}oYiSzD!2Si=d&LaMWylOp%Om)6)AQ4m;JjR0>DJYQAf-n{VEGI!~x4y z4p7&LNzLoDT$Ha{zLVE^I_$AVX0mr(Zt6UuZ19%sp zu1AXNPIL^exdYiOfrQU#F3tD(y3z6q;6+yvB}uz$oS;x792#fjZJ8g33L6FREA7s=H29FZX6k!cA%>CHV$q4X^tdfDq8ejm7)v&UvHxcQ7m=@pqVJ@~8at z3P}FL!LCb`@#rHqE%+ZT()@zCvtV4HA~z{$1Y=D|_-7b5n3UKJ7vhZnlY1uTF8PVl zWv+-4Ex4hzW)=b2Byf=yC1=`J|*(*s_TqNCCiuy{-8K+=Ufe=ZADE>KPoGZ3Z^3>>} z?qbGaxV4AdVd+$JVvj>j?CN1-5@7R{z zKpGp&iqE2akI)`K)?~fmi}dS2DQUG%VH}!2#t>5q6)|@uQ zXI*4(#lJ~r*U4=K>i+-vFhzFWqJ41+Nbc;Zwr|8slG0-whBa=ozD&&ohwm_s-4uHF zKlFqD^UZoLNYk@dh<%=LLi;@xyl#D;))3!Yz=c>p=v-F$MYUrLHW^?*<8cSR{Y>V~ z6nYqLD_AW;h!-18JaQ#3hs?Sl7UQ#VcuQfGgdWuR?!i6U% z(+$j<2!nCXO#>Y4Aq~0;z+=Sh^YXN++AQh}fY?>;)-qw26ke^amueJzFJ#Vay5;NgtU^5x_iOI_8%3q?rS7mewNEC!d}4c;o~cefcWCt*7#<(|_g6 z3hPtSq5fua81#9$e_E!j_H;eX;@JFd1ioj;A&C#b=j=@P4&GR=n>^rCAm$~$ejhH_ zVh&|z&;Pvi?y0D7q!8z^>n=Xv^pb=z(5iTM^GCYN5@@S{`hm5eAzYLS>HVsHK;48^ zsqEW@@cqn>3R7IXTFqK*4J}zMEzWt9BdYrMAlWZKP*-JVJ%?8u_SCDEb>;VCTaAde zY^I0JfQ>a`lu97~^JZ!E?2w8X1e@V~u*VUhC2o$Aal($fC_*&yW7$LgKKb`RIY9^! zj3$GNo7n0IAk>Wocv`>oYNEP$(fWJd7L&5#=wMOeKR|7jTm#hDj)xl=fWQe=9Ia+p zd&LC#i)`mD8#U3?Yg+uO?2a!y`bBEa_{+ZMWySLfPq#E*c^fB7?+4YgvEw#{<#NGP z?FDn1SH9till{FOKs*Q_Abv?=kg}OnMN?Zt?iuBK*!S@?i;J5kE3WPeRx0{8#lqSFGPbN zIXQ^>D?XBMCny;(V;ri365X&tX>dommXFG7DiBpkHWim1=)Np7uu??z43ce2RG@^tx zvWxR@-~*?4%$?2eWX^CiP-Sz%%-M2y$N(?Z5zp$)ii!+U+oX0(tO)t83O$R_vV#e6 za<2lQ#LXj7W#Z~4*|$d&)$oNzHV-0Ff$IlSm_KISh$?g`UrGwFeMf(y_{XI-_n7il`in(~A3zH8 z@0#n)cl2zpq<(fjBlMo3!KsBCqrvKbUPwRfgp9j{uQr|gRAw#i;r#<-r@B*Xudk

4W^)##Gk_!EY?HG$N03A$kuJk8^ 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 D74$95 literal 0 HcmV?d00001 diff --git a/public/docs/_examples/upgrade-phonecat-3-final/ts/app/img/phones/t-mobile-g2.0.jpg b/public/docs/_examples/upgrade-phonecat-3-final/ts/app/img/phones/t-mobile-g2.0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6b6c09e0588759dc732f156f8ecceed3acbf9f11 GIT binary patch literal 27371 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 literal 0 HcmV?d00001 diff --git a/public/docs/_examples/upgrade-phonecat-3-final/ts/app/main.ts b/public/docs/_examples/upgrade-phonecat-3-final/ts/app/main.ts index 4db648092b..08be7a99ba 100644 --- a/public/docs/_examples/upgrade-phonecat-3-final/ts/app/main.ts +++ b/public/docs/_examples/upgrade-phonecat-3-final/ts/app/main.ts @@ -1,27 +1,10 @@ // #docregion // #docregion imports -import { - LocationStrategy, - HashLocationStrategy, - APP_BASE_HREF -} from '@angular/common'; -import { bootstrap } from '@angular/platform-browser-dynamic'; -import { FormsModule } from '@angular/forms'; -import { HTTP_PROVIDERS } from '@angular/http'; -import { ROUTER_PROVIDERS } from '@angular/router-deprecated'; -import { Phone } from './core/phone/phone.service'; -import { AppComponent } from './app.component'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app.module'; // #enddocregion imports // #docregion bootstrap -bootstrap(AppComponent, { - imports: [FormsModule], - providers: [ - HTTP_PROVIDERS, - ROUTER_PROVIDERS, - { provide: APP_BASE_HREF, useValue: '!' }, - { provide: LocationStrategy, useClass: HashLocationStrategy }, - Phone - ] -}); +platformBrowserDynamic().bootstrapModule(AppModule); // #enddocregion bootstrap diff --git a/public/docs/_examples/upgrade-phonecat-3-final/ts/app/phone-detail/phone-detail.component.spec.ts b/public/docs/_examples/upgrade-phonecat-3-final/ts/app/phone-detail/phone-detail.component.spec.ts index 79b3cddcfb..e3b9143a94 100644 --- a/public/docs/_examples/upgrade-phonecat-3-final/ts/app/phone-detail/phone-detail.component.spec.ts +++ b/public/docs/_examples/upgrade-phonecat-3-final/ts/app/phone-detail/phone-detail.component.spec.ts @@ -1,25 +1,15 @@ // #docregion -import { HTTP_PROVIDERS } from '@angular/http'; -// #docregion routeparams -import { RouteParams } from '@angular/router-deprecated'; +// #docregion activatedroute +import { ActivatedRoute } from '@angular/router'; -// #enddocregion routeparams +// #enddocregion activatedroute import { Observable } from 'rxjs/Rx'; -import { - describe, - beforeEachProviders, - inject, - it, - expect -} from '@angular/core/testing'; -import { - TestComponentBuilder, - ComponentFixture -} from '@angular/compiler/testing'; +import { async, TestBed } from '@angular/core/testing'; import { PhoneDetailComponent } from './phone-detail.component'; import { Phone, PhoneData } from '../core/phone/phone.service'; +import { CheckmarkPipe } from '../core/checkmark/checkmark.pipe'; function xyzPhoneData(): PhoneData { return { @@ -29,31 +19,41 @@ function xyzPhoneData(): PhoneData { }; } -class MockPhone extends Phone { +class MockPhone { get(id: string): Observable { return Observable.of(xyzPhoneData()); } } +// #docregion activatedroute + +class ActivatedRouteMock { + constructor(public snapshot: any) {} +} + +// #enddocregion activatedroute + describe('PhoneDetailComponent', () => { - // #docregion routeparams + // #docregion activatedroute - beforeEachProviders(() => [ - { provide: Phone, useClass: MockPhone }, - { provide: RouteParams, useValue: new RouteParams({phoneId: 'xyz'})}, - HTTP_PROVIDERS - ]); - // #enddocregion routeparams - - it('should fetch phone detail', - inject([TestComponentBuilder], (tcb: TestComponentBuilder) => { - return tcb.createAsync(PhoneDetailComponent) - .then((fixture: ComponentFixture) => { - fixture.detectChanges(); - let compiled = fixture.debugElement.nativeElement; - expect(compiled.querySelector('h1')).toHaveText(xyzPhoneData().name); - }); + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ CheckmarkPipe, PhoneDetailComponent ], + providers: [ + { provide: Phone, useClass: MockPhone }, + { provide: ActivatedRoute, useValue: new ActivatedRouteMock({ params: { 'phoneId': 1 } }) } + ] + }) + .compileComponents(); })); + // #enddocregion activatedroute + + it('should fetch phone detail', () => { + const fixture = TestBed.createComponent(PhoneDetailComponent); + fixture.detectChanges(); + let compiled = fixture.debugElement.nativeElement; + expect(compiled.querySelector('h1').textContent).toContain(xyzPhoneData().name); + }); }); diff --git a/public/docs/_examples/upgrade-phonecat-3-final/ts/app/phone-detail/phone-detail.component.ts b/public/docs/_examples/upgrade-phonecat-3-final/ts/app/phone-detail/phone-detail.component.ts index 7d42e20dee..ceba9a6f70 100644 --- a/public/docs/_examples/upgrade-phonecat-3-final/ts/app/phone-detail/phone-detail.component.ts +++ b/public/docs/_examples/upgrade-phonecat-3-final/ts/app/phone-detail/phone-detail.component.ts @@ -1,25 +1,25 @@ // #docplaster // #docregion -import { Component } from '@angular/core'; -import { RouteParams } from '@angular/router-deprecated'; +import { Component } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; + import { Phone, PhoneData } from '../core/phone/phone.service'; -import { CheckmarkPipe } from '../core/checkmark/checkmark.pipe'; @Component({ moduleId: module.id, selector: 'phone-detail', - templateUrl: 'phone-detail.template.html', - pipes: [ CheckmarkPipe ] + templateUrl: 'phone-detail.template.html' }) export class PhoneDetailComponent { phone: PhoneData; mainImageUrl: string; - constructor(routeParams: RouteParams, phone: Phone) { - phone.get(routeParams.get('phoneId')).subscribe(phone => { - this.phone = phone; - this.setImage(phone.images[0]); - }); + constructor(activatedRoute: ActivatedRoute, phone: Phone) { + phone.get(activatedRoute.snapshot.params['phoneId']) + .subscribe((p: PhoneData) => { + this.phone = p; + this.setImage(p.images[0]); + }); } setImage(imageUrl: string) { diff --git a/public/docs/_examples/upgrade-phonecat-3-final/ts/app/phone-list/phone-list.component.spec.ts b/public/docs/_examples/upgrade-phonecat-3-final/ts/app/phone-list/phone-list.component.spec.ts index 3d6cd93b15..834c93df8f 100644 --- a/public/docs/_examples/upgrade-phonecat-3-final/ts/app/phone-list/phone-list.component.spec.ts +++ b/public/docs/_examples/upgrade-phonecat-3-final/ts/app/phone-list/phone-list.component.spec.ts @@ -1,42 +1,21 @@ /* tslint:disable */ // #docregion routestuff -import { Directive } from '@angular/core'; -import { HTTP_PROVIDERS } from '@angular/http'; -import { - Router, - RouterLink, - RootRouter, - RouteRegistry, - ROUTER_PRIMARY_COMPONENT -} from '@angular/router-deprecated'; +import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; import { Observable } from 'rxjs/Rx'; -import { - describe, - addProviders, - inject, - it, - expect, - // MockApplicationRef -} from '@angular/core/testing'; +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { SpyLocation } from '@angular/common/testing'; -import { - TestComponentBuilder, - ComponentFixture -} from '@angular/core/testing'; -import { AppComponent } from '../app.component'; import { PhoneListComponent } from './phone-list.component'; import { Phone, PhoneData } from '../core/phone/phone.service'; // #enddocregion routestuff -@Directive({ - selector: '[routerLink]', - inputs: ['routeParams: routerLink', 'target: target'] -}) -class RouterLinkMock {} +class ActivatedRouteMock { + constructor(public snapshot: any) {} +} -class MockPhone extends Phone { +class MockPhone { query(): Observable { return Observable.of([ {name: 'Nexus S', snippet: '', images: []}, @@ -45,52 +24,48 @@ class MockPhone extends Phone { } } +let fixture: ComponentFixture; + describe('PhoneList', () => { // #docregion routestuff - addProviders([ - RouteRegistry, - { provide: Router, useClass: RootRouter }, - { provide: ROUTER_PRIMARY_COMPONENT, useValue: AppComponent }, - { provide: Location, useClass: SpyLocation}, - { provide: Phone, useClass: MockPhone}, - HTTP_PROVIDERS - ]); + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ PhoneListComponent ], + providers: [ + { provide: ActivatedRoute, useValue: new ActivatedRouteMock({ params: { 'phoneId': 1 } }) }, + { provide: Location, useClass: SpyLocation }, + { provide: Phone, useClass: MockPhone }, + ], + schemas: [ NO_ERRORS_SCHEMA ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(PhoneListComponent); + }); // #enddocregion routestuff - it('should create "phones" model with 2 phones fetched from xhr', - inject([TestComponentBuilder], (tcb: TestComponentBuilder) => { - return tcb - .overrideDirective(AppComponent, RouterLink, RouterLinkMock) - .overrideDirective(PhoneListComponent, RouterLink, RouterLinkMock) - .createAsync(PhoneListComponent) - .then((fixture: ComponentFixture) => { - fixture.detectChanges(); - let compiled = fixture.debugElement.nativeElement; - expect(compiled.querySelectorAll('.phone-list-item').length).toBe(2); - expect( - compiled.querySelector('.phone-list-item:nth-child(1)').textContent - ).toContain('Motorola DROID'); - expect( - compiled.querySelector('.phone-list-item:nth-child(2)').textContent - ).toContain('Nexus S'); - }); - })); + it('should create "phones" model with 2 phones fetched from xhr', () => { + fixture.detectChanges(); + let compiled = fixture.debugElement.nativeElement; + expect(compiled.querySelectorAll('.phone-list-item').length).toBe(2); + expect( + compiled.querySelector('.phone-list-item:nth-child(1)').textContent + ).toContain('Motorola DROID'); + expect( + compiled.querySelector('.phone-list-item:nth-child(2)').textContent + ).toContain('Nexus S'); + }); - it('should set the default value of orderProp model', - inject([TestComponentBuilder], (tcb: TestComponentBuilder) => { - return tcb - .overrideDirective(AppComponent, RouterLink, RouterLinkMock) - .overrideDirective(PhoneListComponent, RouterLink, RouterLinkMock) - .createAsync(PhoneListComponent) - .then((fixture: ComponentFixture) => { - fixture.detectChanges(); - let compiled = fixture.debugElement.nativeElement; - expect( - compiled.querySelector('select option:last-child').selected - ).toBe(true); - }); - })); + xit('should set the default value of orderProp model', () => { + fixture.detectChanges(); + let compiled = fixture.debugElement.nativeElement; + expect( + compiled.querySelector('select option:last-child').selected + ).toBe(true); + }); }); diff --git a/public/docs/_examples/upgrade-phonecat-3-final/ts/app/phone-list/phone-list.component.ts b/public/docs/_examples/upgrade-phonecat-3-final/ts/app/phone-list/phone-list.component.ts index e97e740415..abbe27c5f2 100644 --- a/public/docs/_examples/upgrade-phonecat-3-final/ts/app/phone-list/phone-list.component.ts +++ b/public/docs/_examples/upgrade-phonecat-3-final/ts/app/phone-list/phone-list.component.ts @@ -1,14 +1,13 @@ // #docplaster // #docregion top import { Component } from '@angular/core'; -import { RouterLink } from '@angular/router-deprecated'; + import { Phone, PhoneData } from '../core/phone/phone.service'; @Component({ moduleId: module.id, selector: 'phone-list', templateUrl: 'phone-list.template.html', - directives: [ RouterLink ] }) // #enddocregion top export class PhoneListComponent { @@ -41,20 +40,20 @@ export class PhoneListComponent { } private sortPhones(phones: PhoneData[]) { - if (phones && this.orderProp) { - return phones - .slice(0) // Make a copy - .sort((a, b) => { - if (a[this.orderProp] < b[this.orderProp]) { - return -1; - } else if ([b[this.orderProp] < a[this.orderProp]]) { - return 1; - } else { - return 0; - } - }); - } - return phones; + if (phones && this.orderProp) { + return phones + .slice(0) // Make a copy + .sort((a, b) => { + if (a[this.orderProp] < b[this.orderProp]) { + return -1; + } else if ([b[this.orderProp] < a[this.orderProp]]) { + return 1; + } else { + return 0; + } + }); + } + return phones; } // #enddocregion getphones // #docregion initialclass diff --git a/public/docs/_examples/upgrade-phonecat-3-final/ts/app/phone-list/phone-list.template.html b/public/docs/_examples/upgrade-phonecat-3-final/ts/app/phone-list/phone-list.template.html index 9846664768..b4a994b297 100644 --- a/public/docs/_examples/upgrade-phonecat-3-final/ts/app/phone-list/phone-list.template.html +++ b/public/docs/_examples/upgrade-phonecat-3-final/ts/app/phone-list/phone-list.template.html @@ -26,10 +26,10 @@

diff --git a/public/docs/_examples/upgrade-phonecat-3-final/ts/karma.conf.ng1.js b/public/docs/_examples/upgrade-phonecat-3-final/ts/karma.conf.ng1.js index 48cc490f89..3decfbdd3e 100644 --- a/public/docs/_examples/upgrade-phonecat-3-final/ts/karma.conf.ng1.js +++ b/public/docs/_examples/upgrade-phonecat-3-final/ts/karma.conf.ng1.js @@ -63,11 +63,10 @@ module.exports = function(config) { frameworks: ['jasmine'], - browsers: ['Chrome', 'Firefox'], + browsers: ['Chrome'], plugins: [ 'karma-chrome-launcher', - 'karma-firefox-launcher', 'karma-jasmine' ] diff --git a/public/docs/_examples/upgrade-phonecat-3-final/ts/systemjs.config.1.js b/public/docs/_examples/upgrade-phonecat-3-final/ts/systemjs.config.1.js index a54f8bb20c..592029cd65 100644 --- a/public/docs/_examples/upgrade-phonecat-3-final/ts/systemjs.config.1.js +++ b/public/docs/_examples/upgrade-phonecat-3-final/ts/systemjs.config.1.js @@ -1,59 +1,47 @@ /** - * System configuration for Angular 2 samples + * System configuration for Angular samples * Adjust as necessary for your application needs. */ -(function(global) { - - // map tells the System loader where to look for things +(function (global) { // #docregion paths - var map = { - 'app': '/app', // 'dist', - - '@angular': '/node_modules/@angular', - 'angular-in-memory-web-api': '/node_modules/angular-in-memory-web-api', - 'rxjs': '/node_modules/rxjs' - }; - - var packages = { - '/app': { main: 'main.js', defaultExtension: 'js' }, - 'rxjs': { defaultExtension: 'js' }, - 'angular-in-memory-web-api': { main: 'index.js', defaultExtension: 'js' }, - }; - // #enddocregion paths - - var ngPackageNames = [ - 'common', - 'compiler', - 'core', - 'forms', - 'http', - 'platform-browser', - 'platform-browser-dynamic', - 'router', - 'router-deprecated', - 'upgrade', - ]; - - // Individual files (~300 requests): - function packIndex(pkgName) { - packages['@angular/'+pkgName] = { main: 'index.js', defaultExtension: 'js' }; - } - - // Bundled (~40 requests): - function packUmd(pkgName) { - packages['@angular/'+pkgName] = { main: '/bundles/' + pkgName + '.umd.js', defaultExtension: 'js' }; - } - - var setPackageConfig = System.packageWithIndex ? packIndex : packUmd; - - // Add package entries for angular packages - ngPackageNames.forEach(setPackageConfig); - - var config = { - map: map, - packages: packages - } - - System.config(config); + System.config({ + paths: { + // paths serve as alias + 'npm:': '/node_modules/' + }, + map: { + app: '/app', + // #enddocregion paths + // angular bundles + '@angular/core': 'npm:@angular/core/bundles/core.umd.js', + '@angular/common': 'npm:@angular/common/bundles/common.umd.js', + '@angular/compiler': 'npm:@angular/compiler/bundles/compiler.umd.js', + '@angular/platform-browser': 'npm:@angular/platform-browser/bundles/platform-browser.umd.js', + '@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js', + '@angular/http': 'npm:@angular/http/bundles/http.umd.js', + '@angular/router': 'npm:@angular/router/bundles/router.umd.js', + '@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js', + '@angular/upgrade': 'npm:@angular/upgrade/bundles/upgrade.umd.js', + // other libraries + 'rxjs': 'npm:rxjs', + 'angular-in-memory-web-api': 'npm:angular-in-memory-web-api', + // #docregion paths + }, + // #enddocregion paths + // packages tells the System loader how to load when no filename and/or no extension + packages: { + 'app': { + main: './main.js', + defaultExtension: 'js' + }, + rxjs: { + defaultExtension: 'js' + }, + 'angular-in-memory-web-api': { + main: './index.js', + defaultExtension: 'js' + } + } + }); })(this); diff --git a/public/docs/ts/latest/guide/upgrade.jade b/public/docs/ts/latest/guide/upgrade.jade index 438ede147e..c5ce0ef1be 100644 --- a/public/docs/ts/latest/guide/upgrade.jade +++ b/public/docs/ts/latest/guide/upgrade.jade @@ -1,10 +1,5 @@ include ../_util-fns -.alert.is-important - :marked - This guide is still in the process of being updated to RC5 and it's samples - may not work correctly. - :marked Having an existing Angular 1 application doesn't mean that we can't begin enjoying everything Angular 2 has to offer. That's because Angular 2 @@ -28,13 +23,13 @@ include ../_util-fns make incremental upgrading seamless. 1. [Preparation](#preparation) - 1. [Following The Angular Style Guide](#following-the-angular-style-guide) + 1. [Follow the Angular Style Guide](#follow-the-angular-style-guide) 2. [Using a Module Loader](#using-a-module-loader) 3. [Migrating to TypeScript](#migrating-to-typescript) 4. [Using Component Directives](#using-component-directives) 2. [Upgrading with The Upgrade Adapter](#upgrading-with-the-upgrade-adapter) 1. [How The Upgrade Adapter Works](#how-the-upgrade-adapter-works) - 2. [Bootstrapping Hybrid Angular 1+2 Applications](#bootstrapping-hybrid-angular-1-2-applications) + 2. [Bootstrapping hybrid Angular 1+2 Applications](#bootstrapping-hybrid-angular-1-2-applications) 3. [Using Angular 2 Components from Angular 1 Code](#using-angular-2-components-from-angular-1-code) 4. [Using Angular 1 Component Directives from Angular 2 Code](#using-angular-1-component-directives-from-angular-2-code) 5. [Projecting Angular 1 Content into Angular 2 Components](#projecting-angular-1-content-into-angular-2-components) @@ -44,7 +39,7 @@ include ../_util-fns 3. [PhoneCat Upgrade Tutorial](#phonecat-upgrade-tutorial) 1. [Switching to TypeScript](#switching-to-typescript) 2. [Installing Angular 2](#installing-angular-2) - 3. [Bootstrapping A Hybrid 1+2 PhoneCat](#bootstrapping-a-hybrid-1-2-phonecat) + 3. [Bootstrapping a hybrid 1+2 PhoneCat](#bootstrapping-a-hybrid-1-2-phonecat) 4. [Upgrading the Phone service](#upgrading-the-phone-service) 5. [Upgrading Components](#upgrading-components) 6. [Switching To The Angular 2 Router And Bootstrap](#switching-to-the-angular-2-router-and-bootstrap) @@ -61,7 +56,7 @@ include ../_util-fns and patterns that we can apply to future proof our apps even before we begin the migration. - ## Following The Angular Style Guide + ## Follow the Angular Style Guide The [Angular 1 Style Guide](https://github.com/johnpapa/angular-styleguide/blob/master/a1/README.md#single-responsibility) collects patterns and practices that have been proven to result in @@ -84,6 +79,7 @@ include ../_util-fns components easy to navigate and find, but will also allow us to migrate them between languages and frameworks one at a time. In this example application, each controller, component, service, and filter is in its own source file. + * The [Folders-by-Feature Structure](https://github.com/johnpapa/angular-styleguide/blob/master/a1/README.md#folders-by-feature-structure) and [Modularity](https://github.com/johnpapa/angular-styleguide/blob/master/a1/README.md#modularity) rules define similar principles on a higher level of abstraction: Different parts of the @@ -390,6 +386,26 @@ figure.image-display as regular Angular 2 inputs and set onto the scope (or controller) when they change. + ## Using the Upgrade Adapter with Angular 2 _NgModules_ + + Both Angular 1 and Angular 2 have their own concept of modules + to help organize an application into cohesive blocks of funcionality. + + Their details are quite different in architecture and implementation. + In Angular 1, you add Angular assets to the `angular.module` property. + In Angular 2, you create one or more classes adorned with an `NgModule` decorator + that describes Angular assets in metadata. The differences blossom from there. + + In a hybrid application we run both versions of Angular at the same time. + That means that we need at least one module each from both Angular 1 and Angular 2. + We will give the Angular 2 module to the `UpgradeAdapter` while we use the + Angular 1 module for bootstrapping. Let's see how. + +.l-sub-section + :marked + Learn more about Angular 2 modules at the [NgModule guide](ngmodule.html). + +:marked ## Bootstrapping Hybrid Angular 1+2 Applications The first step to upgrading an application using the `UpgradeAdapter` is @@ -416,28 +432,30 @@ figure.image-display +makeExample('upgrade-adapter/ts/app/1-bootstrap/app.module.ts', 'bootstrap') :marked - To then switch the application into hybrid mode, we must first - install Angular 2 to the project. Follow the instructions in - [the QuickStart](../quickstart.html) for some pointers on this. - When we have Angular 2 installed, we can import and instantiate - the `UpgradeAdapter`, and then call its `bootstrap` method. It - is designed to take the exact same arguments as - [angular.bootstrap](https://docs.angularjs.org/api/ng/function/angular.bootstrap) - so that it is easy to make the switch: + Now introduce Angular 2 to the project. Inspired by instructions in + [the QuickStart](../quickstart.html), you can selectively copy in material from the + QuickStart github repository. + + Next, create an `app.module.ts` file and add the following `NgModule` class: + ++makeExample('upgrade-adapter/ts/app/1-2-hybrid-bootstrap/app.module.ts', 'ngmodule') + +:marked + This bare minimum `NgModule` imports `BrowserModule`, the module every Angular browser-based app must have. + + Import and instantiate the `UpgradeAdapter` with the new `AppModule` and call its `bootstrap` method. + That method takes the exact same arguments as [angular.bootstrap](https://docs.angularjs.org/api/ng/function/angular.bootstrap): +makeExample('upgrade-adapter/ts/app/1-2-hybrid-bootstrap/app.module.ts', 'bootstrap') :marked - At this point we'll be running a hybrid Angular 1+2 application! All the - existing Angular 1 code will work as it always did, but we are now ready - to run Angular 2 code as well. + Congratulations! You're running a hybrid Angular 1+2 application! The + existing Angular 1 code works as before _and_ you're ready to run Angular 2 code. .alert.is-helpful :marked - One notable difference between `angular.bootstrap` and - `upgradeAdapter.bootstrap` is that the latter works *asynchronously*. - This means that we cannot assume that the application has been instantiated - immediately after the bootstrap call returns. + Note that, unlike `angular.bootstrap`, the `upgradeAdapter.bootstrap` runs *asynchronously*. + The application is not launched immediately. Some time must pass after the bootstrap call returns. :marked As we begin to migrate components to Angular 2, we'll be using the @@ -476,16 +494,25 @@ figure +makeExample('upgrade-adapter/ts/app/downgrade-static/app.module.ts', 'downgradecomponent') :marked - What we have here is an Angular 1 directive called `heroDetail`, which we can + Because `HeroDetailComponent` is an Angular 2 component, we must also add it to the `declarations` in the `AppModule`. + ++makeExample('upgrade-adapter/ts/app/downgrade-static/app.module.ts', 'ngmodule') +.l-sub-section + :marked + All Angular 2 components, directives and pipes must be declared in an NgModule. + +:marked + The net resulit is an Angular 1 directive called `heroDetail`, that we can use like any other directive in our Angular 1 templates. +makeExample('upgrade-adapter/ts/index-downgrade-static.html', 'usecomponent') .alert.is-helpful :marked - Note that since Angular 1 directives are matched based on their name, - *the selector metadata of the Angular 2 component is not used in Angular 1*. - It is matched as an element directive (`restrict: 'E'`) called `heroDetail`. + Note that this Angular 1 is an element directive (`restrict: 'E'`) called `heroDetail`. + An Angular 1 element directive is matched based on its _name_. + *The `selector` metadata of the downgraded Angular 2 component is ignored.* + :marked Most components are not quite this simple, of course. Many of them @@ -558,11 +585,10 @@ figure :marked We can *upgrade* this component to Angular 2 using the `UpgradeAdapter`'s `upgradeNg1Component` method. It takes the name of an Angular 1 component - directive and returns an Angular 2 **component class**. When we then - want to use it from an Angular 2 component, we list it the in the `directives` - metadata of the component and then just use it in the Angular 2 template: + directive and returns an Angular 2 **component class**. + Declare it in an `NgModule` as with other Angular 2 components: -+makeExample('upgrade-adapter/ts/app/upgrade-static/container.component.ts', null, 'container.component.ts') ++makeExample('upgrade-adapter/ts/app/upgrade-static/upgrade_adapter.ts', 'heroupgrade', 'app.module.ts') .alert.is-helpful :marked @@ -731,17 +757,14 @@ figure +makeExample('upgrade-adapter/ts/app/2-to-1-providers/heroes.ts', null, 'heroes.ts') :marked - We can again use the `UpgradeAdapter` for this, but first we need to register `Heroes` - to the Angular 2 injector itself. In a pure Angular 2 application we would do this - when we bootstrap the app, as described in the [dependency injection guide](dependency-injection.html#!#providers). - But since hybrid applications are bootstrapped using the `UpgradeAdapter`, we also - need to register our Angular 2 providers using `UpgradeAdapter`. It has a method - called `addProvider` for this purpose. + Again, as with Angular 2 components, register the provider with the `NgModule` by adding it to the module's `providers` list. - Once we've registered the Angular 2 provider, we can turn `Heroes` into an *Angular 1 - factory function* using `upgradeAdapter.downgradeNg2Provider()`. We can - then plug the factory into an Angular 1 module, at which point we also choose what the - name of the dependency will be in Angular 1: ++makeExample('upgrade-adapter/ts/app/2-to-1-providers/upgrade_adapter.ts', 'ngmodule', 'app.module.ts') + +:marked + Now wrap the Angular 2 `Heroes` in an *Angular 1 factory function* using `upgradeAdapter.downgradeNg2Provider()`. + and plug the factory into an Angular 1 module. + The name of the Angular 1 dependency is up to you: +makeExample('upgrade-adapter/ts/app/2-to-1-providers/app.module.ts', 'register', 'app.module.ts') @@ -1033,7 +1056,7 @@ code-example(format=""). development server root path in `package.json` to also point to the project root instead of `app`: -+makeJson('upgrade-phonecat-2-hybrid/ts/package.ng1.json', {paths: 'scripts.start'}, 'package.json') ++makeJson('upgrade-phonecat-2-hybrid/ts/package.ng1.json', {paths: 'scripts.start'}, 'package.json (start script)') :marked Now we're able to serve everything from the project root to the web browser. But we do *not* @@ -1058,7 +1081,22 @@ code-example(format=""). +makeExample('upgrade-phonecat-2-hybrid/ts/systemjs.config.1.js', 'paths', 'systemjs.config.js') :marked - ## Bootstrapping A Hybrid 1+2 PhoneCat + ## Creating the _AppModule_ + + Now create the root `NgModule` class called `AppModule`. + There is already a file named `app.module.ts` that holds the Angular 1 module. + Rename it to `app.module.ng1.ts` and update the corresponding script name in the `index.html` as well. + The file contents remain: + ++makeExample('upgrade-phonecat-2-hybrid/ts/app/app.module.ng1.ts', null, 'app.module.ng1.ts') + +:marked + Now create a new `app.module.ts` with the minimum `NgModule` class: + ++makeExample('upgrade-phonecat-2-hybrid/ts/app/app.module.ts', 'bare', 'app.module.ts') + +:marked + ## Bootstrapping a hybrid 1+2 PhoneCat What we'll do next is bootstrap the application as a *hybrid application* that supports both Angular 1 and Angular 2 components. Once we've done that @@ -1109,32 +1147,19 @@ code-example(format=""). * For loading the details of a single phone into the phone detail component. We can replace this implementation with an Angular 2 service class, while - keeping our controllers in Angular 1 land. In the new version we'll just use - the `Http` service from Angular 2 instead of ngResource. + keeping our controllers in Angular 1 land. + + In the new version, we import the Angular 2 HTTP module and call its `Http` service instead of `ngResource`. - Before the `Http` service is available for injection, we need to register - it into our application's dependency injector. We should import the `HTTP_PROVIDERS` - constant in `main.ts`: + Re-open the `app.module.ts` file, import and add `HttpModule` to the `imports` array of the `AppModule`: -+makeExample('upgrade-phonecat-2-hybrid/ts/app/main.ts', 'import-http') - -:marked - In a regular Angular 2 application we would now pass `HTTP_PROVIDERS` into - the application bootstrap function. But we can't do that in a hybrid - application such as the one we're working on. That's because the `bootstrap` - method of `UpgradeAdapter` expects Angular 1 modules as dependencies, - not Angular 2 providers. - - What we must do instead is register `HTTP_PROVIDERS` into the `UpgradeAdapter` - separately. It has a method called `addProvider` for that purpose: - -+makeExample('upgrade-phonecat-2-hybrid/ts/app/main.ts', 'add-http') ++makeExample('upgrade-phonecat-2-hybrid/ts/app/app.module.ts', 'httpmodule', 'app.module.ts') :marked Now we're ready to upgrade the Phone service itself. We replace the ngResource-based service in `phone.service.ts` with a TypeScript class decorated as `@Injectable`: -+makeExample('upgrade-phonecat-2-hybrid/ts/app/core/phone/phone.service.ts', 'classdef', 'app/core/phone/phone.service.ts') ++makeExample('upgrade-phonecat-2-hybrid/ts/app/core/phone/phone.service.ts', 'classdef', 'app/core/phone/phone.service.ts (skeleton)')(format='.') :marked The `@Injectable` decorator will attach some dependency injection metadata @@ -1154,7 +1179,7 @@ code-example(format=""). The methods now return Observables of type `PhoneData` and `PhoneData[]`. This is a type we don't have yet, so let's add a simple interface for it: -+makeExample('upgrade-phonecat-2-hybrid/ts/app/core/phone/phone.service.ts', 'phonedata-interface', 'app/core/phone/phone.service.ts') ++makeExample('upgrade-phonecat-2-hybrid/ts/app/core/phone/phone.service.ts', 'phonedata-interface', 'app/core/phone/phone.service.ts (interface)')(format='.') :marked Here's the full, final code for the service: @@ -1166,24 +1191,17 @@ code-example(format=""). We need to do this for all RxJS operators that we want to use, since Angular 2 does not load all of them by default. - The new `Phone` service now has the same features that the original, ngResource based - service did. Now we just need to register the new service into the application, so that - our Angular 1 components will be able to use it. + The new `Phone` service has the same features as the original, `ngResource`-based service. + Because it's an Angular 2 service, we register it with the `NgModule` providers: ++makeExample('upgrade-phonecat-2-hybrid/ts/app/app.module.ts', 'phone', 'app.module.ts') +:marked `UpgradeAdapter` has a `downgradeNg2Provider` method for the purpose of making - Angular 2 services available to Angular 1 code. We can use it to plug in our - `Phone` service: + Angular 2 services available to Angular 1 code. Use it to plug in the `Phone` service: -+makeExample('upgrade-phonecat-2-hybrid/ts/app/main.ts', 'phone-service', 'app/main.ts') ++makeExample('upgrade-phonecat-2-hybrid/ts/app/main.ts', 'phone-service', 'app/main.ts (excerpt)')(format='.') :marked - Note that we actually needed to do two registrations here: - - 1. Register `Phone` as an **Angular 2 provider** with the `addProvider` - method. That's the same method that we used earlier for `HTTP_PROVIDERS`. - 2. Register an **Angular 1 factory** called `phone`, which will be a *downgraded* - version of the `Phone` Angular 2 service. - Now that we are loading `phone.service.ts` through an import that is resolved by SystemJS, we should **remove the <script> tag** for the service from `index.html`. This is something we'll do to all our components as we upgrade them. Simultaneously @@ -1234,69 +1252,72 @@ code-example(format=""). just like the Angular 1 version did. We now also need to convert the template of this component into Angular 2 syntax. - In the search controls we need to use Angular 2 syntax for the two `ngModel`s. - We should also no longer use the `$ctrl` prefix in expressions: + The search controls replace the Angular 1 `$ctrl` expressions + with Angular 2's two-way `[(ngModel)]` binding syntax: -+makeExample('upgrade-phonecat-2-hybrid/ts/app/phone-list/phone-list.template.html', 'controls', 'app/phone-list/phone-list.template.html') ++makeExample('upgrade-phonecat-2-hybrid/ts/app/phone-list/phone-list.template.html', 'controls', 'app/phone-list/phone-list.template.html (search controls)')(format='.') :marked - In the list we need to replace the `ng-repeat` with an `*ngFor` and the - `let var of iterable` syntax, which is [described in our - Template Syntax guide](../guide/template-syntax.html#directives). - For the images, we can replace `ng-src` with a binding to the standard `src` property. + Replace the list's `ng-repeat` with an `*ngFor` as + [described in the Template Syntax page](../guide/template-syntax.html#directives). + Replace the image tag's `ng-src` with a binding to the native `src` property. -+makeExample('upgrade-phonecat-2-hybrid/ts/app/phone-list/phone-list.template.html', 'list', 'app/phone-list/phone-list.template.html') ++makeExample('upgrade-phonecat-2-hybrid/ts/app/phone-list/phone-list.template.html', 'list', 'app/phone-list/phone-list.template.html (phones)')(format='.') :marked - Another thing that we've done here is that we've removed the use of `filter` and `orderBy` filters, - and replaced them with a call to the `getPhones()` controller method. - The built-in Angular filters `filter` and `orderBy` do not exist in Angular 2, - so we need to do the filtering and sorting ourselves. We could define our own Angular 2 - pipes for this purpose, but in this case it is more convenient to just implement the filtering - and ordering logic in the component itself. We expect the `getPhones()` method to return a collection - where the current filtering and ordering has been applied. + ### No Angular 2 _filter_ or _orderBy_ filters + The built-in Angular 1 `filter` and `orderBy` filters do not exist in Angular 2, + so we need to do the filtering and sorting ourselves. + + We replaced the `filter` and `orderBy` filters with bindings to the `getPhones()` controller method, + which implements the filtering and ordering logic inside the component itself. +makeExample('upgrade-phonecat-2-hybrid/ts/app/phone-list/phone-list.component.ts', 'getphones', 'app/phone-list/phone-list.component.ts') :marked - In the entrypoint file `main.ts` we're going to plug this component into our application. Instead - of registering a component, we register a `phoneList` *directive*. - The directive is a downgraded version of our Angular 2 component, and the `UpgradeAdapter` - handles the bridging between the two: + The new `PhoneListComponent` uses the Angular 2 `ngModel` directive, located in the `FormsModule`. + Add the `FormsModule` to `NgModule` imports and declare the new `PhoneListComponent` : -+makeExample('upgrade-phonecat-2-hybrid/ts/app/main.ts', 'phone-list', 'app/main.ts') ++makeExample('upgrade-phonecat-2-hybrid/ts/app/app.module.ts', 'phonelist', 'app.module.ts') :marked - The `` type annotation here is to let the TypeScript compiler - know that the return value of the downgrade method call will be something that can be - used as a directive factory. + In the entrypoint file `main.ts` we'll plug this component into the Angular 1 module. + + Instead of registering a component, we register a `phoneList` *directive*, a downgraded version of the Angular 2 component. + The `UpgradeAdapter` creates the bridge between the two: - At this point, also remove the <script> tag for the phone list component from `index.html`. ++makeExample('upgrade-phonecat-2-hybrid/ts/app/main.ts', 'phone-list', 'app/main.ts (excerpt)')(format='.') - Now we can start looking at our other component, which is the one for - the phone details. Set the contents of `phone-detail.component.ts` as follows: +:marked + The `as angular.IDirectiveFactory` cast tells the TypeScript compiler + that the return value of the downgrade method is a directive factory. + + Remove the <script> tag for the phone list component from `index.html`. + + Now set the remaining `phone-detail.component.ts` as follows: +makeExample('upgrade-phonecat-2-hybrid/ts/app/phone-detail/phone-detail.component.ts', 'initialclass', 'app/phone-detail/phone-detail.component.ts') :marked - This is pretty similar to what we did with the phone list. The one new change - here is the use of `@Inject` for the `$routeParams` dependency. It tells the - Angular 2 injector what this dependency should map to. We have a dependency called - `$routeParams` in the Angular 1 injector, where it is provided by the Angular 1 router. - That is what we were already using when `PhoneDetails` was still an Angular 1 controller. + This is similar to the phone list component. + The new wrinkle is the `@Inject` decorator that identifies the `$routeParams` dependency. - The things is though, Angular 1 dependencies are not made automatically available to - Angular 2 components, so if we were to run this now, it would not work. We need to explicitly - tell the `UpgradeAdapter` to upgrade `$routeParams` so that it is available for injection in - Angular 2. We can do it in `main.ts`: - -+makeExample('upgrade-phonecat-2-hybrid/ts/app/main.ts', 'routeparams', 'app/main.ts') + The Angular 1 injector has an Angular 1 router dependency called `$routeParams`. + which was injected into `PhoneDetails` when it was still an Angular 1 controller. + We intend to inject it into the new `PhoneDetailsComponent`. + + Unfortunately, Angular 1 dependencies are not automatically available to Angular 2 components. + We must use the `UpgradeAdapter` to make the `$routeParams` an Angular 2 provider. + Do that in `main.ts`: ++makeExample('upgrade-phonecat-2-hybrid/ts/app/main.ts', 'routeparams', 'app/main.ts ($routeParms)')(format='.') +.l-sub-section + :marked + Do not register an upgraded Angular 1 provider in the `NgModule`. :marked - We now also need to convert the template of this component into Angular 2 syntax. - Here is the new template in its entirety: + Convert the phone detail component template into Angular 2 syntax as follows: +makeExample('upgrade-phonecat-2-hybrid/ts/app/phone-detail/phone-detail.template.html', null, 'app/phone-detail/phone-detail.template.html') @@ -1320,118 +1341,135 @@ code-example(format=""). when we try to refer to properties on undefined objects. We need to be explicit about cases where this is expected. + Add this component to the `NgModule` _declarations_: + ++makeExample('upgrade-phonecat-2-hybrid/ts/app/app.module.ts', 'phonedetail', 'app.module.ts') + :marked In `main.ts` we'll now register a `phoneDetail` directive instead of a component. The directive is a downgraded version of the `PhoneDetail` Angular 2 component. -+makeExample('upgrade-phonecat-2-hybrid/ts/app/main.ts', 'phone-detail', 'app/main.ts') ++makeExample('upgrade-phonecat-2-hybrid/ts/app/main.ts', 'phone-detail', 'app/main.ts (excerpt)')(format='.') :marked We should now also remove the phone detail component <script> tag from `index.html`. - There's one additional step we need to take, which is to upgrade the - `checkmark` filter that the template is using. We need an Angular 2 - pipe instead of an Angular 1 filter. + ### Add the _CheckmarkPipe_ - While there is no upgrade method in the upgrade adapter for filters, we - can just turn the filter function into a class that fulfills - the contract for Angular 2 Pipes. The implementation is the same as before. - It just comes in a different kind of packaging. While changing it, also - rename the file to `checkmark.pipe.ts`: + The Angular 1 directive had a `checkmark` _filter_. + Turn that into an Angular 2 **pipe**. -+makeExample('upgrade-phonecat-2-hybrid/ts/app/core/checkmark/checkmark.pipe.ts', null, 'app/core/checkmark/checkmark.pipe.ts') + There is no upgrade adapter method to convert filters into pipes. + You won't miss it. + It's easy to turn the filter function into an equivalent Pipe class. + The implementation is the same as before, repackaged in the `transform` method. + Rename the file to `checkmark.pipe.ts` to conform with Angular 2 conventions: + ++makeExample('upgrade-phonecat-2-hybrid/ts/app/core/checkmark/checkmark.pipe.ts', null, 'app/core/checkmark/checkmark.pipe.ts')(format='.') :marked - In the component we should now import and declare our newly created pipe (as well as - remove the filter <script> tag from `index.html`): + Now import and declare the newly created pipe and + remove the filter <script> tag from `index.html`: -+makeExample('upgrade-phonecat-2-hybrid/ts/app/phone-detail/phone-detail.component.ts', 'checkmark-pipe', 'app/phone-detail/phone-detail.component.ts') ++makeExample('upgrade-phonecat-2-hybrid/ts/app/app.module.ts', 'checkmarkpipe', 'app.module.ts') :marked ## Switching To The Angular 2 Router And Bootstrap - At this point we've replaced all our Angular 1 application components with - their Angular 2 counterparts. The application is still bootstrapped as a hybrid, - but there isn't really any need for that anymore, and we can begin to - pull out the last remnants of Angular 1. + At this point we've replaced all Angular 1 application components with + their Angular 2 counterparts. + + The application is still bootstrapped as a hybrid app. + There's no need for that anymore. + It's time to remove the last remnants of Angular 1 in two final steps: + 1. Switch to the Angular 2 router. + 1. Bootstrap as a pure Angular 2 app. - There are just two more things to do: We need to switch the router to - the Angular 2 one, and then bootstrap the app as a pure Angular 2 app. + ### Switch to the Angular 2 router + Angular 2 has an [all-new router](router.html). - Let's do the routing part first. Angular 2 comes with an [all-new router](router.html) - that we can use for this. + Like all routers, it needs a place in the UI to display routed views. + The Angular 2 that's the `` and it belongs in a *root component* + at the top of the applications component tree. + + We don't yet have such a root component, because the app is still managed as an Angular 1 app. + Create a new `app.component.ts` file with the following `AppComponent` class: - Angular 2 applications all have a *root component*, which, among other - things, is where we should plug in the router. We don't yet have such a root - component, because our app is still managed as an Angular 1 app. - Let's change this now and add an `AppComponent` class into a new file - `app.component.ts`: - -+makeExample('upgrade-phonecat-3-final/ts/app/app.component.ts', null, 'app/app.component.ts') ++makeExample('upgrade-phonecat-3-final/ts/app/app.component.ts', null, 'app/app.component.ts')(format='.') :marked - This is a component that plugs in to an `` element on the page, - and has a simple template that only includes the router outlet component - of the Angular router. This means that the component just renders the contents - of the current route and nothing else. The `@RouteConfig` decorator defines - the Angular 2 counterparts of our two routes. They refer directly to the - two components. + It has a simple template that only includes the ``. + This component just renders the contents of the active route and nothing else. + + The selector tells Angular 2 to plug this root component into the `` + element on the host web page when the application launches. - We should put this `` element in the HTML so that the root component - has something to attach to. It replaces the old Angular 1 `ng-view` directive: + Add this `` element to the `index.html`. + It replaces the old Angular 1 `ng-view` directive: -+makeExample('upgrade-phonecat-3-final/ts/index.html', 'appcomponent', 'index.html') ++makeExample('upgrade-phonecat-3-final/ts/index.html', 'appcomponent', 'index.html (body)')(format='.') :marked - In the `PhoneDetail` component we now need to change how the phone id parameter - is received. There will be no more `$routeParams` injection available, because - that comes from the Angular 1 router. Instead, what we have is a `RouteParams` - object provided by the Angular 2 router. We use it to obtain the `phoneId` from - the params: + ### Create the _Routing Module_ + A router needs configuration whether it's the Angular 1 or Angular 2 or any other router. + + The details of Angular 2 router configuration are best left to the [Routing](../router.html) documentation + which recommends that you create a `NgModule` dedicated to router configuration + (called a _Routing Module_): + ++makeExample('upgrade-phonecat-3-final/ts/app/app-routing.module.ts', null, 'app/app-routing.module.ts') + +:marked + This module defines a `routes` object with two routes to the two phone components + and a default route for the empty path. + It passes the `routes` to the `RouterModule.forRoot` method which does the rest. + + A couple of extra providers enable routing with "hash" URLs such as `#!/phones` instead of the default "push state" strategy. + + Now update the `AppModule` to import this `AppRoutingModule` and also the + declare the root `AppComponent`: + ++makeExample('upgrade-phonecat-3-final/ts/app/app.module.ts', null, 'app/app.module.ts') + +:marked + The Angular 2 router passes route parameters differently. + Correct the `PhoneDetail` component constructor to expect an injected `ActivatedRoute` object. + Extract the `phoneId` from the `ActivatedRoute.snapshot.params` and fetch the phone data as before: +makeExample('upgrade-phonecat-3-final/ts/app/phone-detail/phone-detail.component.ts', null, 'app/phone-detail/phone-detail.component.ts') +:marked + ### Generate links for each phone + + We no longer have to hardcode the links to phone details in the phone list. + We can generate them data binding each phone's `id` to the `routerLink` directive + and let that directive construct the appropriate URL to the `PhoneDetailComponent`: + ++makeExample('upgrade-phonecat-3-final/ts/app/phone-list/phone-list.template.html', 'list', 'app/phone-list/phone-list.template.html (list with links)')(format='.') +.l-sub-section + :marked + See the [Routing](../router.html) page for details. :marked - With that, we're ready to switch the bootstrap method of the application from that - of the `UpgradeAdapter` to the main Angular 2 `bootstrap`. Let's import it together - with the router, the new app component, and everything else in `main.ts` + ### Bootstrap as an Angular 2 app -+makeExample('upgrade-phonecat-3-final/ts/app/main.ts', 'imports') + You may have noticed one extra `bootstrap` metadata property added to the `AppModule` ++makeExample('upgrade-phonecat-3-final/ts/app/app.module.ts', 'bootstrap', 'app/app.module.ts (bootstrap)')(format='.') +:marked + That tells Angular 2 that it should bootstrap the app with the _root_ `AppComponent` and + insert it's view into the host web page. + + Now switch the bootstrap method of the application from the `UpgradeAdapter` + to the Angular 2 way. + Because this is a browser application, compiled with the Just-in-Time (JiT) compiler, + use the `platformBrowserDynamic` function to bootstrap the `AppModule`: + ++makeExample('upgrade-phonecat-3-final/ts/app/main.ts', null, 'main.ts') :marked - We'll now use the regular Angular 2 `bootstrap` function to bootstrap the app - instead of using `UpgradeAdapter`. The first argument to `bootstrap` is the - application's root component `AppComponent`, and the second - is an array of the Angular 2 providers that we want to make available for - injection. In that array we include all the things we have been registering - with `upgradeAdapter.addProvider` until now, as well as the providers and - directives of the router: + You are now running a pure Angular 2 application! -+makeExample('upgrade-phonecat-3-final/ts/app/main.ts', 'bootstrap') - -:marked - We also configure a couple of things for the router here so that the application - URL paths match exactly those we had in the Angular 1 app: We want the - hash location strategy with the `!` prefix: `#!/phones`. - - At this point we are running a pure Angular 2 application! - - But there's actually one more cool thing we can do with the new router. - We no longer have to hardcode the links to phone details from the phone - list, because the Angular 2 router is able to generate them for us with - its `routerLink` directive. We just need to refer to the route names we - used in the `@RouteConfig`: - -+makeExample('upgrade-phonecat-3-final/ts/app/phone-list/phone-list.template.html', 'list', 'app/phone-list/phone-list.template.html') - -:marked - For this to work the directive just needs to be declared in the component: - -+makeExample('upgrade-phonecat-3-final/ts/app/phone-list/phone-list.component.ts', 'top') - -:marked - ## Saying Goodbye to Angular 1 + ## Say Goodbye to Angular 1 It is time to take off the training wheels and let our application begin its new life as a pure, shiny Angular 2 app. The remaining tasks all have to @@ -1578,24 +1616,12 @@ code-example(format=""). that use WebDriver's generic URL APIs instead. The first of these is the redirection spec: -.alert.is-important - :marked - This guide is still in the process of being updated to RC5 and it's samples - may not work correctly. - -//- +makeExample('upgrade-phonecat-3-final/e2e-spec.ts', 'redirect', 'e2e-tests/scenarios.ts') ++makeExample('upgrade-phonecat-3-final/e2e-spec.ts', 'redirect', 'e2e-tests/scenarios.ts') :marked And the second is the phone links spec: - -.alert.is-important - :marked - This guide is still in the process of being updated to RC5 and it's samples - may not work correctly. - -//- +makeExample('upgrade-phonecat-3-final/e2e-spec.ts', 'links', 'e2e-tests/scenarios.ts') - ++makeExample('upgrade-phonecat-3-final/e2e-spec.ts', 'links', 'e2e-tests/scenarios.ts') :marked ## Unit Tests @@ -1666,10 +1692,10 @@ code-example(format=""). :marked Finally, we need to revisit both of the component tests when we switch to the Angular 2 - router. For the details component we need to provide an Angular 2 `RouteParams` object + router. For the details component we need to provide a mock of Angular 2 `ActivatedRoute` object instead of using the Angular 1 `$routeParams`. -+makeExample('upgrade-phonecat-3-final/ts/app/phone-detail/phone-detail.component.spec.ts', 'routeparams', 'app/phone-detail/phone-detail.component.spec.ts') ++makeExample('upgrade-phonecat-3-final/ts/app/phone-detail/phone-detail.component.spec.ts', 'activatedroute', 'app/phone-detail/phone-detail.component.spec.ts') :marked And for the phone list component we need to set up a few things for the router itself so that From 08e79190943bd969b904bc618c65a43b7d22e36d Mon Sep 17 00:00:00 2001 From: Filipe Silva Date: Tue, 27 Sep 2016 11:16:17 +0100 Subject: [PATCH 05/11] fix(gulp): fix build and run task defaults (#2484) --- gulpfile.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index 8bad101b31..ac3ee61bac 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -295,14 +295,16 @@ function runE2eTsTests(appDir, outputFile) { try { var exampleConfig = fs.readJsonSync(`${appDir}/${_exampleConfigFilename}`); } catch (e) { - exampleConfig = { - build: 'tsc', - run: 'http-server:e2e' - }; + exampleConfig = {}; } + + var config = { + build: exampleConfig.build || 'tsc', + run: exampleConfig.run || 'http-server:e2e' + }; - var appBuildSpawnInfo = spawnExt('npm', ['run', exampleConfig.build], { cwd: appDir }); - var appRunSpawnInfo = spawnExt('npm', ['run', exampleConfig.run, '--', '-s'], { cwd: appDir }); + var appBuildSpawnInfo = spawnExt('npm', ['run', config.build], { cwd: appDir }); + var appRunSpawnInfo = spawnExt('npm', ['run', config.run, '--', '-s'], { cwd: appDir }); return runProtractor(appBuildSpawnInfo.promise, appDir, appRunSpawnInfo, outputFile); } From 480a824214450c89cc3e6e23e16c92a389e5c72d Mon Sep 17 00:00:00 2001 From: Cody Lundquist Date: Tue, 27 Sep 2016 11:49:23 -0700 Subject: [PATCH 06/11] docs(style-guide): Fix a couple typos closes #2489 --- public/docs/ts/latest/guide/style-guide.jade | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/docs/ts/latest/guide/style-guide.jade b/public/docs/ts/latest/guide/style-guide.jade index db7dd3831f..1e85323ddc 100644 --- a/public/docs/ts/latest/guide/style-guide.jade +++ b/public/docs/ts/latest/guide/style-guide.jade @@ -245,7 +245,7 @@ a(href="#toc") Back to top .s-rule.do :marked - **Do** use give the filename the conventional suffix for a file of that type + **Do** give the filename the conventional suffix for a file of that type (e.g., `.component.ts`, `.directive.ts`, `.module.ts`, `.pipe.ts`, `.service.ts`). .s-why :marked @@ -1319,7 +1319,7 @@ a(href="#toc") Back to top .s-rule.do :marked - **Do** export all symbols that from the `SharedModule` that other feature modules need to use. + **Do** export all symbols from the `SharedModule` that other feature modules need to use. .s-why :marked From 9671d99585d0b4a28999d8b9e99ac7b1bccd9958 Mon Sep 17 00:00:00 2001 From: Ward Bell Date: Tue, 27 Sep 2016 12:20:17 -0700 Subject: [PATCH 07/11] chore: update package.json files to latest pkg versions. Use ~ for Ng. (#2490) closes #2488 --- public/docs/_examples/package.json | 47 ++++++++++--------- .../_examples/quickstart/ts/package.1.json | 37 +++++++-------- 2 files changed, 42 insertions(+), 42 deletions(-) diff --git a/public/docs/_examples/package.json b/public/docs/_examples/package.json index 93fbd36f17..238bfd53a1 100644 --- a/public/docs/_examples/package.json +++ b/public/docs/_examples/package.json @@ -26,35 +26,36 @@ "author": "", "license": "ISC", "dependencies": { - "@angular/common": "2.0.0", - "@angular/compiler": "2.0.0", - "@angular/compiler-cli": "0.6.2", - "@angular/core": "2.0.0", - "@angular/forms": "2.0.0", - "@angular/http": "2.0.0", - "@angular/platform-browser": "2.0.0", - "@angular/platform-browser-dynamic": "2.0.0", - "@angular/platform-server": "2.0.0", - "@angular/router": "3.0.0", - "@angular/upgrade": "2.0.0", - "angular-in-memory-web-api": "~0.1.0", - "bootstrap": "^3.3.6", + "@angular/common": "~2.0.1", + "@angular/compiler": "~2.0.1", + "@angular/compiler-cli": "~0.6.3", + "@angular/core": "~2.0.1", + "@angular/forms": "~2.0.1", + "@angular/http": "~2.0.1", + "@angular/platform-browser": "~2.0.1", + "@angular/platform-browser-dynamic": "~2.0.1", + "@angular/platform-server": "~2.0.1", + "@angular/router": "~3.0.1", + "@angular/upgrade": "~2.0.1", + + "angular-in-memory-web-api": "~0.1.1", + "bootstrap": "^3.3.7", "core-js": "^2.4.1", - "reflect-metadata": "^0.1.3", - "rollup": "^0.34.13", + "reflect-metadata": "^0.1.8", + "rollup": "^0.36.0", "rollup-plugin-node-resolve": "^2.0.0", "rollup-plugin-uglify": "^1.0.1", "rxjs": "5.0.0-beta.12", - "systemjs": "0.19.38", - "zone.js": "^0.6.23" + "systemjs": "0.19.39", + "zone.js": "^0.6.25" }, "devDependencies": { "angular-cli": "^1.0.0-beta.5", "angular2-template-loader": "^0.4.0", "awesome-typescript-loader": "^2.2.4", "canonical-path": "0.0.2", - "concurrently": "^2.2.0", - "css-loader": "^0.23.1", + "concurrently": "^3.0.0", + "css-loader": "^0.25.0", "extract-text-webpack-plugin": "^1.0.1", "file-loader": "^0.8.5", "html-loader": "^0.4.3", @@ -71,19 +72,19 @@ "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.8.0", "lite-server": "^2.2.2", - "lodash": "^4.13.1", + "lodash": "^4.16.2", "null-loader": "^0.1.1", "phantomjs-prebuilt": "^2.1.7", "protractor": "^3.3.0", "raw-loader": "^0.5.1", - "rimraf": "^2.5.2", + "rimraf": "^2.5.4", "rollup-plugin-commonjs": "^4.1.0", "style-loader": "^0.13.1", "ts-loader": "^0.8.2", "ts-node": "^1.3.0", "tslint": "^3.15.1", - "typescript": "^2.0.2", - "typings": "^1.3.2", + "typescript": "^2.0.3", + "typings": "^1.4.0", "webpack": "^1.13.0", "webpack-dev-server": "^1.14.1", "webpack-merge": "^0.14.0" diff --git a/public/docs/_examples/quickstart/ts/package.1.json b/public/docs/_examples/quickstart/ts/package.1.json index 35efebb2c2..ea5d056bf4 100644 --- a/public/docs/_examples/quickstart/ts/package.1.json +++ b/public/docs/_examples/quickstart/ts/package.1.json @@ -2,7 +2,7 @@ "name": "angular-quickstart", "version": "1.0.0", "scripts": { - "start": "tsc && concurrently \"npm run tsc:w\" \"npm run lite\" ", + "start": "tsc && concurrently \"tsc -w\" \"lite-server\" ", "lite": "lite-server", "postinstall": "typings install", "tsc": "tsc", @@ -11,29 +11,28 @@ }, "license": "ISC", "dependencies": { - "@angular/common": "2.0.0", - "@angular/compiler": "2.0.0", - "@angular/core": "2.0.0", - "@angular/forms": "2.0.0", - "@angular/http": "2.0.0", - "@angular/platform-browser": "2.0.0", - "@angular/platform-browser-dynamic": "2.0.0", - "@angular/router": "3.0.0", - "@angular/upgrade": "2.0.0", + "@angular/common": "~2.0.1", + "@angular/compiler": "~2.0.1", + "@angular/core": "~2.0.1", + "@angular/forms": "~2.0.1", + "@angular/http": "~2.0.1", + "@angular/platform-browser": "~2.0.1", + "@angular/platform-browser-dynamic": "~2.0.1", + "@angular/router": "~3.0.1", + "@angular/upgrade": "~2.0.1", + "angular-in-memory-web-api": "~0.1.1", + "bootstrap": "^3.3.7", "core-js": "^2.4.1", - "reflect-metadata": "^0.1.3", + "reflect-metadata": "^0.1.8", "rxjs": "5.0.0-beta.12", - "systemjs": "0.19.27", - "zone.js": "^0.6.23", - - "angular2-in-memory-web-api": "0.0.20", - "bootstrap": "^3.3.6" + "systemjs": "0.19.39", + "zone.js": "^0.6.25" }, "devDependencies": { - "concurrently": "^2.2.0", + "concurrently": "^3.0.0", "lite-server": "^2.2.2", - "typescript": "^2.0.2", - "typings":"^1.3.2" + "typescript": "^2.0.3", + "typings":"^1.4.0" } } From 5cee3b9b8bbc676f88018bc162c79859cb52b46c Mon Sep 17 00:00:00 2001 From: Kevin Leung Date: Tue, 27 Sep 2016 12:56:04 -0700 Subject: [PATCH 08/11] * docs(toh-6): update 'let' to 'const' for delete hero (#2355) Since the update function does use const url instead of let url, this seemed like a good consistency to have between similar blocks of code. * docs(toh-6): update 'let' to 'const' for delete hero --- public/docs/_examples/toh-6/ts/app/hero.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/docs/_examples/toh-6/ts/app/hero.service.ts b/public/docs/_examples/toh-6/ts/app/hero.service.ts index e220982f6f..49c760073e 100644 --- a/public/docs/_examples/toh-6/ts/app/hero.service.ts +++ b/public/docs/_examples/toh-6/ts/app/hero.service.ts @@ -42,7 +42,7 @@ export class HeroService { // #docregion delete delete(id: number): Promise { - let url = `${this.heroesUrl}/${id}`; + const url = `${this.heroesUrl}/${id}`; return this.http.delete(url, {headers: this.headers}) .toPromise() .then(() => null) From 64d5b3dc23679075f558421bc68b59964711de1f Mon Sep 17 00:00:00 2001 From: Patrice Chalin Date: Tue, 27 Sep 2016 13:41:46 -0700 Subject: [PATCH 09/11] docs(dart): upgrade to beta.22 (#2494) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * update to beta.22 * Dart SDK 1.19.0 or later is required * minor edits to sample app titles to e2e tests pass * Renamed “Angular 2” to “Angular” so that shared e2e tests pass. * Tweak to QS prose. --- public/docs/_examples/architecture/dart/pubspec.yaml | 4 ++-- public/docs/_examples/attribute-directives/dart/pubspec.yaml | 4 ++-- public/docs/_examples/component-styles/dart/pubspec.yaml | 4 ++-- public/docs/_examples/dependency-injection/dart/pubspec.yaml | 4 ++-- public/docs/_examples/displaying-data/dart/pubspec.yaml | 4 ++-- public/docs/_examples/forms/dart/pubspec.yaml | 4 ++-- .../hierarchical-dependency-injection/dart/pubspec.yaml | 4 ++-- public/docs/_examples/lifecycle-hooks/dart/pubspec.yaml | 4 ++-- public/docs/_examples/pipes/dart/pubspec.yaml | 4 ++-- public/docs/_examples/quickstart/dart/lib/app_component.dart | 2 +- public/docs/_examples/quickstart/dart/pubspec.yaml | 4 ++-- public/docs/_examples/server-communication/dart/pubspec.yaml | 4 ++-- .../docs/_examples/server-communication/dart/web/index.html | 2 +- public/docs/_examples/structural-directives/dart/pubspec.yaml | 4 ++-- .../docs/_examples/structural-directives/dart/web/index.html | 2 +- public/docs/_examples/template-syntax/dart/pubspec.yaml | 4 ++-- public/docs/_examples/toh-1/dart/pubspec.yaml | 4 ++-- public/docs/_examples/toh-1/dart/web/index.html | 2 +- public/docs/_examples/toh-2/dart/pubspec.yaml | 4 ++-- public/docs/_examples/toh-2/dart/web/index.html | 2 +- public/docs/_examples/toh-3/dart/pubspec.yaml | 4 ++-- public/docs/_examples/toh-3/dart/web/index.html | 2 +- public/docs/_examples/toh-4/dart/pubspec.yaml | 4 ++-- public/docs/_examples/toh-4/dart/web/index.html | 2 +- public/docs/_examples/toh-5/dart/pubspec.yaml | 4 ++-- public/docs/_examples/toh-5/dart/web/index.html | 2 +- public/docs/_examples/toh-6/dart/pubspec.yaml | 4 ++-- public/docs/_examples/toh-6/dart/web/index.html | 2 +- public/docs/_examples/user-input/dart/pubspec.yaml | 4 ++-- public/docs/dart/latest/_data.json | 2 +- public/docs/dart/latest/quickstart.jade | 4 ++-- public/docs/ts/_cache/quickstart.jade | 4 ++-- pubspec.yaml | 4 ++-- 33 files changed, 56 insertions(+), 56 deletions(-) diff --git a/public/docs/_examples/architecture/dart/pubspec.yaml b/public/docs/_examples/architecture/dart/pubspec.yaml index e2e648537b..3f869b06ca 100644 --- a/public/docs/_examples/architecture/dart/pubspec.yaml +++ b/public/docs/_examples/architecture/dart/pubspec.yaml @@ -3,9 +3,9 @@ name: developer_guide_intro description: Developer Guide Intro version: 0.0.1 environment: - sdk: '>=1.13.0 <2.0.0' + sdk: '>=1.19.0 <2.0.0' dependencies: - angular2: 2.0.0-beta.21 + angular2: 2.0.0-beta.22 browser: ^0.10.0 dart_to_js_script_rewriter: ^1.0.1 transformers: diff --git a/public/docs/_examples/attribute-directives/dart/pubspec.yaml b/public/docs/_examples/attribute-directives/dart/pubspec.yaml index 79904bff12..7b14c2b11c 100644 --- a/public/docs/_examples/attribute-directives/dart/pubspec.yaml +++ b/public/docs/_examples/attribute-directives/dart/pubspec.yaml @@ -3,9 +3,9 @@ name: attribute_directives description: Attribute directives example version: 0.0.1 environment: - sdk: '>=1.13.0 <2.0.0' + sdk: '>=1.19.0 <2.0.0' dependencies: - angular2: 2.0.0-beta.21 + angular2: 2.0.0-beta.22 browser: ^0.10.0 dart_to_js_script_rewriter: ^1.0.1 transformers: diff --git a/public/docs/_examples/component-styles/dart/pubspec.yaml b/public/docs/_examples/component-styles/dart/pubspec.yaml index 7521cf8365..b937fd8f72 100755 --- a/public/docs/_examples/component-styles/dart/pubspec.yaml +++ b/public/docs/_examples/component-styles/dart/pubspec.yaml @@ -3,9 +3,9 @@ name: component_styles description: Component Styles example version: 0.0.1 environment: - sdk: '>=1.13.0 <2.0.0' + sdk: '>=1.19.0 <2.0.0' dependencies: - angular2: 2.0.0-beta.21 + angular2: 2.0.0-beta.22 browser: ^0.10.0 dart_to_js_script_rewriter: ^1.0.1 transformers: diff --git a/public/docs/_examples/dependency-injection/dart/pubspec.yaml b/public/docs/_examples/dependency-injection/dart/pubspec.yaml index b5958b1e07..366b014304 100644 --- a/public/docs/_examples/dependency-injection/dart/pubspec.yaml +++ b/public/docs/_examples/dependency-injection/dart/pubspec.yaml @@ -3,9 +3,9 @@ name: dependency_injection description: Dependency injection sample version: 0.0.1 environment: - sdk: '>=1.13.0 <2.0.0' + sdk: '>=1.19.0 <2.0.0' dependencies: - angular2: 2.0.0-beta.21 + angular2: 2.0.0-beta.22 browser: ^0.10.0 dart_to_js_script_rewriter: ^1.0.1 transformers: diff --git a/public/docs/_examples/displaying-data/dart/pubspec.yaml b/public/docs/_examples/displaying-data/dart/pubspec.yaml index 2c5961c70e..ad1736d951 100644 --- a/public/docs/_examples/displaying-data/dart/pubspec.yaml +++ b/public/docs/_examples/displaying-data/dart/pubspec.yaml @@ -3,9 +3,9 @@ name: displaying_data description: Displaying Data version: 0.0.1 environment: - sdk: '>=1.13.0 <2.0.0' + sdk: '>=1.19.0 <2.0.0' dependencies: - angular2: 2.0.0-beta.21 + angular2: 2.0.0-beta.22 browser: ^0.10.0 dart_to_js_script_rewriter: ^1.0.1 transformers: diff --git a/public/docs/_examples/forms/dart/pubspec.yaml b/public/docs/_examples/forms/dart/pubspec.yaml index 43a19366d7..4f13a2ca4b 100644 --- a/public/docs/_examples/forms/dart/pubspec.yaml +++ b/public/docs/_examples/forms/dart/pubspec.yaml @@ -3,9 +3,9 @@ name: hero_form description: Form example version: 0.0.1 environment: - sdk: '>=1.13.0 <2.0.0' + sdk: '>=1.19.0 <2.0.0' dependencies: - angular2: 2.0.0-beta.21 + angular2: 2.0.0-beta.22 browser: ^0.10.0 dart_to_js_script_rewriter: ^1.0.1 transformers: diff --git a/public/docs/_examples/hierarchical-dependency-injection/dart/pubspec.yaml b/public/docs/_examples/hierarchical-dependency-injection/dart/pubspec.yaml index d18bc10490..d7a003cf3c 100644 --- a/public/docs/_examples/hierarchical-dependency-injection/dart/pubspec.yaml +++ b/public/docs/_examples/hierarchical-dependency-injection/dart/pubspec.yaml @@ -3,9 +3,9 @@ name: 'hierarchical_di' description: Hierarchical dependency injection example version: 0.0.1 environment: - sdk: '>=1.13.0 <2.0.0' + sdk: '>=1.19.0 <2.0.0' dependencies: - angular2: 2.0.0-beta.21 + angular2: 2.0.0-beta.22 browser: ^0.10.0 dart_to_js_script_rewriter: ^1.0.1 transformers: diff --git a/public/docs/_examples/lifecycle-hooks/dart/pubspec.yaml b/public/docs/_examples/lifecycle-hooks/dart/pubspec.yaml index e1bda01d28..25c5106c9b 100644 --- a/public/docs/_examples/lifecycle-hooks/dart/pubspec.yaml +++ b/public/docs/_examples/lifecycle-hooks/dart/pubspec.yaml @@ -3,9 +3,9 @@ name: lifecycle_hooks description: Lifecycle Hooks version: 0.0.1 environment: - sdk: '>=1.13.0 <2.0.0' + sdk: '>=1.19.0 <2.0.0' dependencies: - angular2: 2.0.0-beta.21 + angular2: 2.0.0-beta.22 browser: ^0.10.0 dart_to_js_script_rewriter: ^1.0.1 transformers: diff --git a/public/docs/_examples/pipes/dart/pubspec.yaml b/public/docs/_examples/pipes/dart/pubspec.yaml index e48db77d96..6ac1328d66 100644 --- a/public/docs/_examples/pipes/dart/pubspec.yaml +++ b/public/docs/_examples/pipes/dart/pubspec.yaml @@ -3,9 +3,9 @@ name: pipe_examples description: Pipes Example version: 0.0.1 environment: - sdk: '>=1.13.0 <2.0.0' + sdk: '>=1.19.0 <2.0.0' dependencies: - angular2: 2.0.0-beta.21 + angular2: 2.0.0-beta.22 browser: ^0.10.0 dart_to_js_script_rewriter: ^1.0.1 transformers: diff --git a/public/docs/_examples/quickstart/dart/lib/app_component.dart b/public/docs/_examples/quickstart/dart/lib/app_component.dart index 6e089a6303..b300a28992 100644 --- a/public/docs/_examples/quickstart/dart/lib/app_component.dart +++ b/public/docs/_examples/quickstart/dart/lib/app_component.dart @@ -5,7 +5,7 @@ import 'package:angular2/core.dart'; // #docregion metadata @Component( selector: 'my-app', - template: '

My First Angular 2 App

') + template: '

My First Angular App

') // #enddocregion metadata // #docregion class class AppComponent {} diff --git a/public/docs/_examples/quickstart/dart/pubspec.yaml b/public/docs/_examples/quickstart/dart/pubspec.yaml index b8ad984d4c..39b7e10d28 100644 --- a/public/docs/_examples/quickstart/dart/pubspec.yaml +++ b/public/docs/_examples/quickstart/dart/pubspec.yaml @@ -3,9 +3,9 @@ name: angular2_quickstart description: QuickStart version: 0.0.1 environment: - sdk: '>=1.13.0 <2.0.0' + sdk: '>=1.19.0 <2.0.0' dependencies: - angular2: 2.0.0-beta.21 + angular2: 2.0.0-beta.22 browser: ^0.10.0 dart_to_js_script_rewriter: ^1.0.1 transformers: diff --git a/public/docs/_examples/server-communication/dart/pubspec.yaml b/public/docs/_examples/server-communication/dart/pubspec.yaml index a2a1b30e93..aaf85be4d2 100644 --- a/public/docs/_examples/server-communication/dart/pubspec.yaml +++ b/public/docs/_examples/server-communication/dart/pubspec.yaml @@ -3,9 +3,9 @@ name: server_communication description: Server Communication version: 0.0.1 environment: - sdk: '>=1.13.0 <2.0.0' + sdk: '>=1.19.0 <2.0.0' dependencies: - angular2: 2.0.0-beta.21 + angular2: 2.0.0-beta.22 browser: ^0.10.0 dart_to_js_script_rewriter: ^1.0.1 http: ^0.11.3+3 diff --git a/public/docs/_examples/server-communication/dart/web/index.html b/public/docs/_examples/server-communication/dart/web/index.html index fc365968c2..529e5d1c9c 100644 --- a/public/docs/_examples/server-communication/dart/web/index.html +++ b/public/docs/_examples/server-communication/dart/web/index.html @@ -2,7 +2,7 @@ - Angular 2 Http Demo + Angular Http Demo diff --git a/public/docs/_examples/structural-directives/dart/pubspec.yaml b/public/docs/_examples/structural-directives/dart/pubspec.yaml index c4c0bca74a..46542a7424 100644 --- a/public/docs/_examples/structural-directives/dart/pubspec.yaml +++ b/public/docs/_examples/structural-directives/dart/pubspec.yaml @@ -3,9 +3,9 @@ name: structural_directives description: Structural directives example version: 0.0.1 environment: - sdk: '>=1.13.0 <2.0.0' + sdk: '>=1.19.0 <2.0.0' dependencies: - angular2: 2.0.0-beta.21 + angular2: 2.0.0-beta.22 browser: ^0.10.0 dart_to_js_script_rewriter: ^1.0.1 transformers: diff --git a/public/docs/_examples/structural-directives/dart/web/index.html b/public/docs/_examples/structural-directives/dart/web/index.html index 38da87dc69..7d5b4d15c9 100644 --- a/public/docs/_examples/structural-directives/dart/web/index.html +++ b/public/docs/_examples/structural-directives/dart/web/index.html @@ -3,7 +3,7 @@ - Angular 2 Structural Directives + Angular Structural Directives diff --git a/public/docs/_examples/template-syntax/dart/pubspec.yaml b/public/docs/_examples/template-syntax/dart/pubspec.yaml index 65bea5b496..f53eb65de1 100644 --- a/public/docs/_examples/template-syntax/dart/pubspec.yaml +++ b/public/docs/_examples/template-syntax/dart/pubspec.yaml @@ -3,9 +3,9 @@ name: template_syntax description: Template Syntax version: 0.0.1 environment: - sdk: '>=1.13.0 <2.0.0' + sdk: '>=1.19.0 <2.0.0' dependencies: - angular2: 2.0.0-beta.21 + angular2: 2.0.0-beta.22 browser: ^0.10.0 dart_to_js_script_rewriter: ^1.0.1 transformers: diff --git a/public/docs/_examples/toh-1/dart/pubspec.yaml b/public/docs/_examples/toh-1/dart/pubspec.yaml index c4826c3511..4cd2834c35 100644 --- a/public/docs/_examples/toh-1/dart/pubspec.yaml +++ b/public/docs/_examples/toh-1/dart/pubspec.yaml @@ -3,9 +3,9 @@ name: angular2_tour_of_heroes description: Tour of Heroes version: 0.0.1 environment: - sdk: '>=1.13.0 <2.0.0' + sdk: '>=1.19.0 <2.0.0' dependencies: - angular2: 2.0.0-beta.21 + angular2: 2.0.0-beta.22 browser: ^0.10.0 dart_to_js_script_rewriter: ^1.0.1 transformers: diff --git a/public/docs/_examples/toh-1/dart/web/index.html b/public/docs/_examples/toh-1/dart/web/index.html index 3c09e8af9d..3a2280f3b7 100644 --- a/public/docs/_examples/toh-1/dart/web/index.html +++ b/public/docs/_examples/toh-1/dart/web/index.html @@ -1,7 +1,7 @@ - Angular 2 Tour of Heroes + Angular Tour of Heroes diff --git a/public/docs/_examples/toh-2/dart/pubspec.yaml b/public/docs/_examples/toh-2/dart/pubspec.yaml index c4826c3511..4cd2834c35 100644 --- a/public/docs/_examples/toh-2/dart/pubspec.yaml +++ b/public/docs/_examples/toh-2/dart/pubspec.yaml @@ -3,9 +3,9 @@ name: angular2_tour_of_heroes description: Tour of Heroes version: 0.0.1 environment: - sdk: '>=1.13.0 <2.0.0' + sdk: '>=1.19.0 <2.0.0' dependencies: - angular2: 2.0.0-beta.21 + angular2: 2.0.0-beta.22 browser: ^0.10.0 dart_to_js_script_rewriter: ^1.0.1 transformers: diff --git a/public/docs/_examples/toh-2/dart/web/index.html b/public/docs/_examples/toh-2/dart/web/index.html index 3c09e8af9d..3a2280f3b7 100644 --- a/public/docs/_examples/toh-2/dart/web/index.html +++ b/public/docs/_examples/toh-2/dart/web/index.html @@ -1,7 +1,7 @@ - Angular 2 Tour of Heroes + Angular Tour of Heroes diff --git a/public/docs/_examples/toh-3/dart/pubspec.yaml b/public/docs/_examples/toh-3/dart/pubspec.yaml index c4826c3511..4cd2834c35 100644 --- a/public/docs/_examples/toh-3/dart/pubspec.yaml +++ b/public/docs/_examples/toh-3/dart/pubspec.yaml @@ -3,9 +3,9 @@ name: angular2_tour_of_heroes description: Tour of Heroes version: 0.0.1 environment: - sdk: '>=1.13.0 <2.0.0' + sdk: '>=1.19.0 <2.0.0' dependencies: - angular2: 2.0.0-beta.21 + angular2: 2.0.0-beta.22 browser: ^0.10.0 dart_to_js_script_rewriter: ^1.0.1 transformers: diff --git a/public/docs/_examples/toh-3/dart/web/index.html b/public/docs/_examples/toh-3/dart/web/index.html index 3c09e8af9d..3a2280f3b7 100644 --- a/public/docs/_examples/toh-3/dart/web/index.html +++ b/public/docs/_examples/toh-3/dart/web/index.html @@ -1,7 +1,7 @@ - Angular 2 Tour of Heroes + Angular Tour of Heroes diff --git a/public/docs/_examples/toh-4/dart/pubspec.yaml b/public/docs/_examples/toh-4/dart/pubspec.yaml index c4826c3511..4cd2834c35 100644 --- a/public/docs/_examples/toh-4/dart/pubspec.yaml +++ b/public/docs/_examples/toh-4/dart/pubspec.yaml @@ -3,9 +3,9 @@ name: angular2_tour_of_heroes description: Tour of Heroes version: 0.0.1 environment: - sdk: '>=1.13.0 <2.0.0' + sdk: '>=1.19.0 <2.0.0' dependencies: - angular2: 2.0.0-beta.21 + angular2: 2.0.0-beta.22 browser: ^0.10.0 dart_to_js_script_rewriter: ^1.0.1 transformers: diff --git a/public/docs/_examples/toh-4/dart/web/index.html b/public/docs/_examples/toh-4/dart/web/index.html index 3c09e8af9d..3a2280f3b7 100644 --- a/public/docs/_examples/toh-4/dart/web/index.html +++ b/public/docs/_examples/toh-4/dart/web/index.html @@ -1,7 +1,7 @@ - Angular 2 Tour of Heroes + Angular Tour of Heroes diff --git a/public/docs/_examples/toh-5/dart/pubspec.yaml b/public/docs/_examples/toh-5/dart/pubspec.yaml index c4826c3511..4cd2834c35 100644 --- a/public/docs/_examples/toh-5/dart/pubspec.yaml +++ b/public/docs/_examples/toh-5/dart/pubspec.yaml @@ -3,9 +3,9 @@ name: angular2_tour_of_heroes description: Tour of Heroes version: 0.0.1 environment: - sdk: '>=1.13.0 <2.0.0' + sdk: '>=1.19.0 <2.0.0' dependencies: - angular2: 2.0.0-beta.21 + angular2: 2.0.0-beta.22 browser: ^0.10.0 dart_to_js_script_rewriter: ^1.0.1 transformers: diff --git a/public/docs/_examples/toh-5/dart/web/index.html b/public/docs/_examples/toh-5/dart/web/index.html index be9b1b4ca2..3be150d2a2 100644 --- a/public/docs/_examples/toh-5/dart/web/index.html +++ b/public/docs/_examples/toh-5/dart/web/index.html @@ -7,7 +7,7 @@ - Angular 2 Tour of Heroes + Angular Tour of Heroes diff --git a/public/docs/_examples/toh-6/dart/pubspec.yaml b/public/docs/_examples/toh-6/dart/pubspec.yaml index 653f7ec2f4..2c43d9deae 100644 --- a/public/docs/_examples/toh-6/dart/pubspec.yaml +++ b/public/docs/_examples/toh-6/dart/pubspec.yaml @@ -4,10 +4,10 @@ name: angular2_tour_of_heroes description: Tour of Heroes version: 0.0.1 environment: - sdk: '>=1.13.0 <2.0.0' + sdk: '>=1.19.0 <2.0.0' # #docregion additions dependencies: - angular2: 2.0.0-beta.21 + angular2: 2.0.0-beta.22 # #enddocregion additions browser: ^0.10.0 dart_to_js_script_rewriter: ^1.0.1 diff --git a/public/docs/_examples/toh-6/dart/web/index.html b/public/docs/_examples/toh-6/dart/web/index.html index acb7482f70..135bbe1091 100644 --- a/public/docs/_examples/toh-6/dart/web/index.html +++ b/public/docs/_examples/toh-6/dart/web/index.html @@ -3,7 +3,7 @@ - Angular 2 Tour of Heroes + Angular Tour of Heroes diff --git a/public/docs/_examples/user-input/dart/pubspec.yaml b/public/docs/_examples/user-input/dart/pubspec.yaml index a75460f74f..3d885ba12d 100644 --- a/public/docs/_examples/user-input/dart/pubspec.yaml +++ b/public/docs/_examples/user-input/dart/pubspec.yaml @@ -3,9 +3,9 @@ name: user_input description: User input example version: 0.0.1 environment: - sdk: '>=1.13.0 <2.0.0' + sdk: '>=1.19.0 <2.0.0' dependencies: - angular2: 2.0.0-beta.21 + angular2: 2.0.0-beta.22 browser: ^0.10.0 dart_to_js_script_rewriter: ^1.0.1 transformers: diff --git a/public/docs/dart/latest/_data.json b/public/docs/dart/latest/_data.json index c23053213e..00b82e86a2 100644 --- a/public/docs/dart/latest/_data.json +++ b/public/docs/dart/latest/_data.json @@ -4,7 +4,7 @@ "title": "Angular Docs", "subtitle": "Dart", "menuTitle": "Docs Home", - "banner": "Angular release is beta.21. View the change log to see enhancements, fixes, and breaking changes." + "banner": "Angular release is beta.22. View the change log to see enhancements, fixes, and breaking changes." }, "quickstart": { diff --git a/public/docs/dart/latest/quickstart.jade b/public/docs/dart/latest/quickstart.jade index 3d48f658b9..ee8ea0e87a 100644 --- a/public/docs/dart/latest/quickstart.jade +++ b/public/docs/dart/latest/quickstart.jade @@ -30,7 +30,7 @@ block package-and-config-files packages as dependencies, as well as the `angular2` transformer. It can also specify other packages and transformers for the app to use, such as [dart_to_js_script_rewriter](https://pub.dartlang.org/packages/dart_to_js_script_rewriter). - Angular 2 is still changing, so provide an exact version: **2.0.0-beta.21**. + Angular 2 is still changing, so provide an exact version: **2.0.0-beta.22**. [pubspec]: https://www.dartlang.org/tools/pub/pubspec.html @@ -79,7 +79,7 @@ block run-app block build-app .alert.is-important :marked - If you don't see **My First Angular 2 App**, make sure you've entered all the code correctly, + If you don't see **My First Angular App**, make sure you've entered all the code correctly, in the [proper folders](#wrap-up), and run `pub get`. diff --git a/public/docs/ts/_cache/quickstart.jade b/public/docs/ts/_cache/quickstart.jade index 1e01b8f64d..95faaf7a84 100644 --- a/public/docs/ts/_cache/quickstart.jade +++ b/public/docs/ts/_cache/quickstart.jade @@ -290,7 +290,7 @@ p. The **template** specifies the component's companion template, written in an enhanced form of HTML that tells Angular how to render this component's view. - >Our template is a single line of HTML announcing "*My First Angular 2 App*". + >Our template is a single line of HTML announcing "*My First Angular App*". >A more advanced template could contain data bindings to component properties and might identify other application components which have their own templates. @@ -556,7 +556,7 @@ block build-app :marked ## Make some changes - Try changing the message to "My SECOND Angular 2 app". + Try changing the message to "My SECOND Angular app". block server-watching :marked The TypeScript compiler and `lite-server` are watching. diff --git a/pubspec.yaml b/pubspec.yaml index 28e7ff3b13..59ca9fed61 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -2,9 +2,9 @@ name: angular2_io description: Angular 2 for Dart Website version: 0.0.1 environment: - sdk: '>=1.13.0 <2.0.0' + sdk: '>=1.19.0 <2.0.0' dependencies: - angular2: 2.0.0-beta.21 + angular2: 2.0.0-beta.22 browser: ^0.10.0 dart_to_js_script_rewriter: ^1.0.1 transformers: From e6199a8dfb32d44f00c9c896d126e7e20000a571 Mon Sep 17 00:00:00 2001 From: Ward Bell Date: Thu, 29 Sep 2016 11:15:55 -0700 Subject: [PATCH 10/11] docs(i18n): add internationalization (i18n) guide (#2491) * docs(i18n): add internationalization (i18n) guide * docs(cb-i18n): revamped to System.import the translation file --- gulpfile.js | 4 +- public/docs/_examples/cb-i18n/e2e-spec.ts | 13 + public/docs/_examples/cb-i18n/ts/.gitignore | 6 + .../cb-i18n/ts/app/app.component.1.html | 11 + .../cb-i18n/ts/app/app.component.html | 4 + .../_examples/cb-i18n/ts/app/app.component.ts | 10 + .../_examples/cb-i18n/ts/app/app.module.ts | 13 + .../cb-i18n/ts/app/i18n-providers.ts | 33 ++ .../docs/_examples/cb-i18n/ts/app/main.1.ts | 6 + public/docs/_examples/cb-i18n/ts/app/main.ts | 10 + .../_examples/cb-i18n/ts/example-config.json | 0 .../cb-i18n/ts/i18n/fr/messages.fr.xlf | 13 + .../cb-i18n/ts/i18n/fr/messages.fr.xlf.html | 17 + .../_examples/cb-i18n/ts/i18n/trans-unit.html | 7 + public/docs/_examples/cb-i18n/ts/index.html | 39 ++ public/docs/_examples/cb-i18n/ts/plnkr.json | 17 + .../cb-i18n/ts/systemjs-text-plugin.js | 14 + public/docs/_examples/package.json | 3 +- public/docs/dart/latest/cookbook/_data.json | 6 + public/docs/dart/latest/cookbook/i18n.jade | 1 + public/docs/dart/latest/guide/i18n.jade | 1 + public/docs/js/latest/cookbook/_data.json | 6 + public/docs/js/latest/cookbook/i18n.jade | 1 + public/docs/js/latest/guide/i18n.jade | 1 + public/docs/ts/latest/cookbook/_data.json | 5 + public/docs/ts/latest/cookbook/i18n.jade | 350 ++++++++++++++++++ public/docs/ts/latest/guide/_data.json | 4 +- 27 files changed, 590 insertions(+), 5 deletions(-) create mode 100644 public/docs/_examples/cb-i18n/e2e-spec.ts create mode 100644 public/docs/_examples/cb-i18n/ts/.gitignore create mode 100644 public/docs/_examples/cb-i18n/ts/app/app.component.1.html create mode 100644 public/docs/_examples/cb-i18n/ts/app/app.component.html create mode 100644 public/docs/_examples/cb-i18n/ts/app/app.component.ts create mode 100644 public/docs/_examples/cb-i18n/ts/app/app.module.ts create mode 100644 public/docs/_examples/cb-i18n/ts/app/i18n-providers.ts create mode 100644 public/docs/_examples/cb-i18n/ts/app/main.1.ts create mode 100644 public/docs/_examples/cb-i18n/ts/app/main.ts create mode 100644 public/docs/_examples/cb-i18n/ts/example-config.json create mode 100644 public/docs/_examples/cb-i18n/ts/i18n/fr/messages.fr.xlf create mode 100644 public/docs/_examples/cb-i18n/ts/i18n/fr/messages.fr.xlf.html create mode 100644 public/docs/_examples/cb-i18n/ts/i18n/trans-unit.html create mode 100644 public/docs/_examples/cb-i18n/ts/index.html create mode 100644 public/docs/_examples/cb-i18n/ts/plnkr.json create mode 100644 public/docs/_examples/cb-i18n/ts/systemjs-text-plugin.js create mode 100644 public/docs/dart/latest/cookbook/i18n.jade create mode 100644 public/docs/dart/latest/guide/i18n.jade create mode 100644 public/docs/js/latest/cookbook/i18n.jade create mode 100644 public/docs/js/latest/guide/i18n.jade create mode 100644 public/docs/ts/latest/cookbook/i18n.jade diff --git a/gulpfile.js b/gulpfile.js index ac3ee61bac..899c401d54 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -297,7 +297,7 @@ function runE2eTsTests(appDir, outputFile) { } catch (e) { exampleConfig = {}; } - + var config = { build: exampleConfig.build || 'tsc', run: exampleConfig.run || 'http-server:e2e' @@ -1263,7 +1263,7 @@ function apiExamplesWatch(postShredAction) { } function devGuideExamplesWatch(shredOptions, postShredAction, focus) { - var watchPattern = focus ? '**/' + focus + '/**/*.*' : '**/*.*'; + var watchPattern = focus ? '**/{' + focus + ',cb-' + focus+ '}/**/*.*' : '**/*.*'; var includePattern = path.join(shredOptions.examplesDir, watchPattern); // removed this version because gulp.watch has the same glob issue that dgeni has. // var excludePattern = '!' + path.join(shredOptions.examplesDir, '**/node_modules/**/*.*'); diff --git a/public/docs/_examples/cb-i18n/e2e-spec.ts b/public/docs/_examples/cb-i18n/e2e-spec.ts new file mode 100644 index 0000000000..6606ca8878 --- /dev/null +++ b/public/docs/_examples/cb-i18n/e2e-spec.ts @@ -0,0 +1,13 @@ +/// +'use strict'; +describe('i18n E2E Tests', () => { + + beforeEach(function () { + browser.get(''); + }); + + it('should display i18n translated welcome: Bonjour i18n!', function () { + expect(element(by.css('h1')).getText()).toEqual('Bonjour i18n!'); + }); + +}); diff --git a/public/docs/_examples/cb-i18n/ts/.gitignore b/public/docs/_examples/cb-i18n/ts/.gitignore new file mode 100644 index 0000000000..8357331dc7 --- /dev/null +++ b/public/docs/_examples/cb-i18n/ts/.gitignore @@ -0,0 +1,6 @@ +**/*.ngfactory.ts +**/*.metadata.json +**/messages.xlf +dist +!app/tsconfig.json +!rollup.js \ No newline at end of file diff --git a/public/docs/_examples/cb-i18n/ts/app/app.component.1.html b/public/docs/_examples/cb-i18n/ts/app/app.component.1.html new file mode 100644 index 0000000000..7813de7d31 --- /dev/null +++ b/public/docs/_examples/cb-i18n/ts/app/app.component.1.html @@ -0,0 +1,11 @@ + +

Hello i18n!

+ + + +

Hello i18n!

+ + + +

Hello i18n!

+ diff --git a/public/docs/_examples/cb-i18n/ts/app/app.component.html b/public/docs/_examples/cb-i18n/ts/app/app.component.html new file mode 100644 index 0000000000..3469b42e86 --- /dev/null +++ b/public/docs/_examples/cb-i18n/ts/app/app.component.html @@ -0,0 +1,4 @@ + + +

Hello i18n!

+ \ No newline at end of file diff --git a/public/docs/_examples/cb-i18n/ts/app/app.component.ts b/public/docs/_examples/cb-i18n/ts/app/app.component.ts new file mode 100644 index 0000000000..e065c38917 --- /dev/null +++ b/public/docs/_examples/cb-i18n/ts/app/app.component.ts @@ -0,0 +1,10 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + moduleId: module.id, + selector: 'my-app', + templateUrl: 'app.component.html' +}) +export class AppComponent { } + diff --git a/public/docs/_examples/cb-i18n/ts/app/app.module.ts b/public/docs/_examples/cb-i18n/ts/app/app.module.ts new file mode 100644 index 0000000000..64ad44075b --- /dev/null +++ b/public/docs/_examples/cb-i18n/ts/app/app.module.ts @@ -0,0 +1,13 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; + +import { AppComponent } from './app.component'; + +@NgModule({ + imports: [ BrowserModule ], + declarations: [ AppComponent ], + bootstrap: [ AppComponent ] +}) + +export class AppModule { } diff --git a/public/docs/_examples/cb-i18n/ts/app/i18n-providers.ts b/public/docs/_examples/cb-i18n/ts/app/i18n-providers.ts new file mode 100644 index 0000000000..c27afc88d7 --- /dev/null +++ b/public/docs/_examples/cb-i18n/ts/app/i18n-providers.ts @@ -0,0 +1,33 @@ +// #docregion +import { TRANSLATIONS, TRANSLATIONS_FORMAT, LOCALE_ID } from '@angular/core'; + +export function getTranslationProviders(): Promise { + + // Get the locale id from the global + const locale = document['locale'] as string; + + // return no providers if fail to get translation file for locale + const noProviders: Object[] = []; + + // No locale or English: no translation providers + if (!locale || locale === 'en') { + return Promise.resolve(noProviders); + } + + // Ex: 'i18n/fr/messages.fr.xlf` + const translationFile = `./i18n/${locale}/messages.${locale}.xlf`; + + return getTranslationsWithSystemJs(translationFile) + .then( (translations: string ) => [ + { provide: TRANSLATIONS, useValue: translations }, + { provide: TRANSLATIONS_FORMAT, useValue: 'xlf' }, + { provide: LOCALE_ID, useValue: locale } + ]) + .catch(() => noProviders); // ignore if file not found +} + +declare var System: any; + +function getTranslationsWithSystemJs(file: string) { + return System.import(file + '!text'); // relies on text plugin +} diff --git a/public/docs/_examples/cb-i18n/ts/app/main.1.ts b/public/docs/_examples/cb-i18n/ts/app/main.1.ts new file mode 100644 index 0000000000..961a226688 --- /dev/null +++ b/public/docs/_examples/cb-i18n/ts/app/main.1.ts @@ -0,0 +1,6 @@ +// #docregion +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/public/docs/_examples/cb-i18n/ts/app/main.ts b/public/docs/_examples/cb-i18n/ts/app/main.ts new file mode 100644 index 0000000000..79d5fa0b48 --- /dev/null +++ b/public/docs/_examples/cb-i18n/ts/app/main.ts @@ -0,0 +1,10 @@ +// #docregion +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { getTranslationProviders } from './i18n-providers'; + +import { AppModule } from './app.module'; + +getTranslationProviders().then(providers => { + const options = { providers }; + platformBrowserDynamic().bootstrapModule(AppModule, options); +}); diff --git a/public/docs/_examples/cb-i18n/ts/example-config.json b/public/docs/_examples/cb-i18n/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/public/docs/_examples/cb-i18n/ts/i18n/fr/messages.fr.xlf b/public/docs/_examples/cb-i18n/ts/i18n/fr/messages.fr.xlf new file mode 100644 index 0000000000..005b98ba73 --- /dev/null +++ b/public/docs/_examples/cb-i18n/ts/i18n/fr/messages.fr.xlf @@ -0,0 +1,13 @@ + + + + + + Hello i18n! + Bonjour i18n! + An introduction header for this sample + User welcome + + + + diff --git a/public/docs/_examples/cb-i18n/ts/i18n/fr/messages.fr.xlf.html b/public/docs/_examples/cb-i18n/ts/i18n/fr/messages.fr.xlf.html new file mode 100644 index 0000000000..2130c25275 --- /dev/null +++ b/public/docs/_examples/cb-i18n/ts/i18n/fr/messages.fr.xlf.html @@ -0,0 +1,17 @@ + + + + + + + + + Hello i18n! + Bonjour i18n! + An introduction header for this sample + User welcome + + + + + diff --git a/public/docs/_examples/cb-i18n/ts/i18n/trans-unit.html b/public/docs/_examples/cb-i18n/ts/i18n/trans-unit.html new file mode 100644 index 0000000000..6cb66ca12d --- /dev/null +++ b/public/docs/_examples/cb-i18n/ts/i18n/trans-unit.html @@ -0,0 +1,7 @@ + + + Hello i18n! + + An introduction header for this sample + User welcome + diff --git a/public/docs/_examples/cb-i18n/ts/index.html b/public/docs/_examples/cb-i18n/ts/index.html new file mode 100644 index 0000000000..fc88d9284e --- /dev/null +++ b/public/docs/_examples/cb-i18n/ts/index.html @@ -0,0 +1,39 @@ + + + + + Angular i18n example + + + + + + + + + + + + + + + + + + + Loading... + + diff --git a/public/docs/_examples/cb-i18n/ts/plnkr.json b/public/docs/_examples/cb-i18n/ts/plnkr.json new file mode 100644 index 0000000000..aa6421b303 --- /dev/null +++ b/public/docs/_examples/cb-i18n/ts/plnkr.json @@ -0,0 +1,17 @@ +{ + "description": "i18n", + "files": [ + "app/**/*.css", + "app/**/*.html", + "app/**/*.ts", + "i18n/messages.xlf", + "i18n/fr/messages.fr.xlf", + + "!**/*.[1].*", + + "styles.css", + "systemjs-text-plugin.js", + "index.html" + ], + "tags": ["i18n"] +} diff --git a/public/docs/_examples/cb-i18n/ts/systemjs-text-plugin.js b/public/docs/_examples/cb-i18n/ts/systemjs-text-plugin.js new file mode 100644 index 0000000000..d5ca508fe0 --- /dev/null +++ b/public/docs/_examples/cb-i18n/ts/systemjs-text-plugin.js @@ -0,0 +1,14 @@ +// #docregion +/* + SystemJS Text plugin from + https://github.com/systemjs/plugin-text/blob/master/text.js +*/ +exports.translate = function(load) { + if (this.builder && this.transpiler) { + load.metadata.format = 'esm'; + return 'exp' + 'ort var __useDefault = true; exp' + 'ort default ' + JSON.stringify(load.source) + ';'; + } + + load.metadata.format = 'amd'; + return 'def' + 'ine(function() {\nreturn ' + JSON.stringify(load.source) + ';\n});'; +} diff --git a/public/docs/_examples/package.json b/public/docs/_examples/package.json index 238bfd53a1..a02f6f022a 100644 --- a/public/docs/_examples/package.json +++ b/public/docs/_examples/package.json @@ -20,7 +20,8 @@ "test:webpack": "karma start karma.webpack.conf.js", "build:webpack": "rimraf dist && webpack --config config/webpack.prod.js --bail", "build:cli": "ng build", - "build:aot": "ngc -p tsconfig-aot.json && rollup -c rollup.js" + "build:aot": "ngc -p tsconfig-aot.json && rollup -c rollup.js", + "extract": "ng-xi18n" }, "keywords": [], "author": "", diff --git a/public/docs/dart/latest/cookbook/_data.json b/public/docs/dart/latest/cookbook/_data.json index f0c0dad0d4..e12d383b14 100644 --- a/public/docs/dart/latest/cookbook/_data.json +++ b/public/docs/dart/latest/cookbook/_data.json @@ -47,6 +47,12 @@ "hide": true }, + "i18n": { + "title": "Internationalization (i18n)", + "intro": "Translate the app's template text into multiple languages", + "hide": true + }, + "rc4-to-rc5": { "title": "RC4 to RC5 Migration", "intro": "Migrate your RC4 app to RC5 in minutes.", diff --git a/public/docs/dart/latest/cookbook/i18n.jade b/public/docs/dart/latest/cookbook/i18n.jade new file mode 100644 index 0000000000..c743361ac8 --- /dev/null +++ b/public/docs/dart/latest/cookbook/i18n.jade @@ -0,0 +1 @@ +include ../../../_includes/_ts-temp diff --git a/public/docs/dart/latest/guide/i18n.jade b/public/docs/dart/latest/guide/i18n.jade new file mode 100644 index 0000000000..6778b6af28 --- /dev/null +++ b/public/docs/dart/latest/guide/i18n.jade @@ -0,0 +1 @@ +!= partial("../../../_includes/_ts-temp") diff --git a/public/docs/js/latest/cookbook/_data.json b/public/docs/js/latest/cookbook/_data.json index a5e0ca3011..5660152bd5 100644 --- a/public/docs/js/latest/cookbook/_data.json +++ b/public/docs/js/latest/cookbook/_data.json @@ -42,6 +42,12 @@ "intro": "Validate user's form entries" }, + "i18n": { + "title": "Internationalization (i18n)", + "intro": "Translate the app's template text into multiple languages", + "hide": true + }, + "rc4-to-rc5": { "title": "RC4 to RC5 Migration", "intro": "Migrate your RC4 app to RC5 in minutes.", diff --git a/public/docs/js/latest/cookbook/i18n.jade b/public/docs/js/latest/cookbook/i18n.jade new file mode 100644 index 0000000000..c743361ac8 --- /dev/null +++ b/public/docs/js/latest/cookbook/i18n.jade @@ -0,0 +1 @@ +include ../../../_includes/_ts-temp diff --git a/public/docs/js/latest/guide/i18n.jade b/public/docs/js/latest/guide/i18n.jade new file mode 100644 index 0000000000..6778b6af28 --- /dev/null +++ b/public/docs/js/latest/guide/i18n.jade @@ -0,0 +1 @@ +!= partial("../../../_includes/_ts-temp") diff --git a/public/docs/ts/latest/cookbook/_data.json b/public/docs/ts/latest/cookbook/_data.json index d5c3a60bc4..10c8792d5b 100644 --- a/public/docs/ts/latest/cookbook/_data.json +++ b/public/docs/ts/latest/cookbook/_data.json @@ -46,6 +46,11 @@ "intro": "Validate user's form entries" }, + "i18n": { + "title": "Internationalization (i18n)", + "intro": "Translate the app's template text into multiple languages" + }, + "rc4-to-rc5": { "title": "RC4 to RC5 Migration", "intro": "Migrate your RC4 app to RC5 in minutes." diff --git a/public/docs/ts/latest/cookbook/i18n.jade b/public/docs/ts/latest/cookbook/i18n.jade new file mode 100644 index 0000000000..8f58098f9d --- /dev/null +++ b/public/docs/ts/latest/cookbook/i18n.jade @@ -0,0 +1,350 @@ +include ../_util-fns + +:marked + Angular's _internationalization_ ("_i18n_") tools help make your app availble in multiple languages. + + + ## Table of contents + + * [Angular and i18n template translation](#angular-i18n) + * [Mark text with the _i18n_ attribute](#i18n-attribute) + * [Extract text with ng-xi18n](#ng-xi18n) + * [Translate](#translate) + * [Merge the translation file into the app](#merge) + * [JiT configuration](#jit) + * [AoT configuration](#aot) + +:marked + **Try this** live example of a JiT-compiled app, translated into French. + + +a#angular-i18n +.l-main-section +:marked + ## Angular and _i18n_ template translation + + Application internationalization is a challenging, many-faceted effort that + takes dedication and enduring commitment. + Angular's _i18n_ internationalization facilities can help. + + This page describes the _i18n_ tools to assist translation of component template text + into multiple languages. + +.l-sub-section + :marked + Practitioners of _internationalization_ refer to a translatable text as a "_message_". + This page uses the words "_text_" and "_message_" interchangably and in the combination, "_text message_". + +:marked + The _i18n_ template translation process has four phases: + + 1. Mark static text messages in your component templates for translation. + + 1. An angular _i18n_ tool extracts the marked messages into an industry standard translation source file. + + 1. A translator edits that file, translating the extracted text messages into the target language, + and returns the file to you. + + 1. The Angular compiler imports the completed translation files, + replaces the original messages with translated text, and generates a new version of the application + in the target language. + + You build and deploy a separate version of the application for each supported language. + +a#i18n-attribute +.l-main-section +:marked + ## Mark text with the _i18n_ attribute + + The Angular `i18n` attribute is a marker for translatable content. + Place it on every element tag whose fixed text should be translated. + +.alert.is-helpful + :marked + `i18n` is not an Angular _directive_. It's a custom _attribute_, recognized by Angular tools and compilers. + +:marked + In the accompanying sample, an `

` tag displays a simple English language greeting which you will translate to French: ++makeExample('cb-i18n/ts/app/app.component.1.html', 'greeting', 'app/app.component.html')(format=".") +:marked + Add the `i18n` attribute to the tag to mark it for translation. + ++makeExample('cb-i18n/ts/app/app.component.1.html', 'i18n-attribute', 'app/app.component.html')(format=".") + +:marked + The translator may need a description of the message to translate it accurately. + Assign a description to the i18n attribute: + ++makeExample('cb-i18n/ts/app/app.component.1.html', 'i18n-attribute-desc', 'app/app.component.html')(format=".") + +:marked + The true _meaning_ of the text may require some application context. + Add a contextual meaning to the assigned string, separating it from the description with the `|` character: + ++makeExample('cb-i18n/ts/app/app.component.html', 'i18n-attribute-meaning', 'app/app.component.html')(format=".") + +:marked + While all appearance of a message with the _same_ meaning should have the _same_ translation, + a message with *different meanings* could have different translations. + The Angular extraction tool preserves both the _meaning_ and the _description_ in the translation source file + to facilitiate contextually-specific transations. + +a#ng-xi18n +.l-main-section +:marked + ## Extract translatable text with the _ng-xi18n_ command + + Use the `ng-xi18n` extraction tool to generate a translation source file in an industry standard format. + + This is an Angular CLI tool based on the `ngc` compiler in the `@angular/compiler-cli` npm package. + If you haven't already installed the CLI and its `platform-server` peer dependency, do so now: + +code-example(language="sh" class="code-shell"). + npm install @angular/compiler-cli @angular/platform-server --save + +:marked + Open a terminal window at the root of the application project and enter the `ng-xi18n` command: + +code-example(language="sh" class="code-shell"). + ./node_modules/.bin/ng-xi18n + +:marked + By default the tool generates a translation file named **`messages.xlf`** in the + XML Localisation Interchange File Format (XLIFF, version 1.2). + +code-example(language="sh" class="code-shell"). + ./node_modules/.bin/ng-xi18n --i18nFormat=xmb + +.l-sub-section + :marked + Windows users may have to quote the command: + code-example(language="sh"). + "./node_modules/.bin/ng-xi18n" + :marked + Consider adding a convenience shortcut to the `scripts` section of the `package.json` + to make the command easier to remember and run: + code-example(format='.'). + "scripts": { + "i18n": "ng-xi18n", + ... + } + :marked + Now you can enter: + code-example(language="sh" class="code-shell"). + npm run i18n + +:marked + ### Other translation formats + + You can generate a file named **`messages.xmb`** in the + XML Message Bundle (XMB) format + by adding the `--i18nFormat=xmb` switch. + + This sample sticks with the _XLIFF_ format. + +a#translate +.l-main-section +:marked + ## Translate _le message textuel_ + + The `ng-xi18n` command generated a translation source file in the project root folder named `messages.xlf`. + The next step is to translate the English language template text into the specific language translation + files. The cookbook sample creates a French translation file. + +a#i18n-file-structure +:marked + ### Create an i18n project structure + + You will probably translate into more than one other language so it's a good idea + for the project structure to reflect your entire internationalization effort. + + One approach is to create an `i18n` folder with subfolders for each language or locale, e.g. `i18n/fr` for French. + This sample puts `i18n/fr` under the project root. + + Move the `messages.xlf` into the `i18n` folder where it will become the source for all language-specific translations. + Then copy `messages.xlf` into `i18n/fr` and rename it as `messages.fr.xlf` . + + Follow the same convention for each target language. + + ### Translate + In the real world, you send the `messages.fr.xlf` file to a French translator who would fill in the translations + using one of the + many XLIFF file editors. + + This sample file is easy to translate without a special editor or knowledge of French. + Open `messages.fr.xlf` and find the `` section: + ++makeExample('cb-i18n/ts/i18n/trans-unit.html', '', 'i18n/messages.fr.xlf ()')(format=".") +:marked + This XML element represents the translation of the `

` greeting tag you marked with the `i18n` attribute. + + Using the _source_, _description_, and _meaning_ elements to guide your translation, + replace the `` tag with the French greeting: ++makeExample('cb-i18n/ts/i18n/fr/messages.fr.xlf.html', 'trans-unit', 'i18n/fr/messages.fr.xlf (, after translation)')(format=".") +:marked + Note that the `id` is generated by the tool. Don't touch it. + Its value depends on the content of the message, its meaning, and its description. + Change any of these factors and the `id` changes as well. +.alert.is-helpful + :marked + Repeat the extraction process whenever you add new app messages or edit existing ones. + Be careful not to lose the previous translations. + Specialized software can help manage the change process. + +#app-pre-translation +:marked + ### The app before translation + + After the previous steps, the sample app _and_ its translation file are as follows: + ++makeTabs(` + cb-i18n/ts/app/app.component.html, + cb-i18n/ts/app/app.component.ts, + cb-i18n/ts/app/app.module.ts, + cb-i18n/ts/app/main.1.ts, + cb-i18n/ts/i18n/fr/messages.fr.xlf.html +`, '', ` + app/app.component.html, + app/app.component.ts, + app/app.module.ts, + app/main.ts, + i18n/fr/messages.fr.xlf +`) + +a#merge +.l-main-section +:marked + ## Merge the translation file + + To merge the translated text into component templates, + you compile the application with the completed translation file. + The process is the same whether the file is in `.xlf` format or + in one of the other formats (`.xlif` and `.xtb`) that Angular understands. + + You provide the Angular compiler with three new pieces of information: + * the translation file + * the translation file format + * the _Locale ID_ (`en-US` for instance) + + _How_ you provide this information depends upon whether you compile with + the JiT (_Just-in-Time_) compiler or the AoT (_Ahead-of-Time_) compiler. + + * with [JiT](#jit), you provide the information at bootstrap time. + * with [AoT](#aot), you pass the information as `ngc` options. + +a#jit +.l-main-section +:marked + ### Merge with the JiT compiler + + The JiT (_Just-in-Time_) compiler compiles the application in the browser as the application loads. + Translation with the JiT compiler is a dynamic process of ... + + 1. determining the language version for the current user, + 2. importing the appropriate language translation file as a string constant, + 3. creating corresponding translation providers to guide the JiT compiler, + 4. bootstrapping the application with those providers. + + Open `index.html` and revise the launch script as shown here: ++makeExample('cb-i18n/ts/index.html', 'i18n', 'index.html (launch script)')(format='.') +:marked + In this sample, the user's language is hardcoded as a global `document.locale` variable + in the `index.html`. + +a#text-plugin +:marked + ### SystemJS Text plugin + + Notice the SystemJS mapping of `text` to a `systemjs-text-plugin.js`. + With the help of a text pluglin, SystemJS can read any file as raw text and + return the contents as a string. + You'll need it to import the language translation file. + + SystemJS doesn't ship with a raw text plugin but it's easy to add. + Create the following `systemjs-text-plugin.js` in the root folder: ++makeExample('cb-i18n/ts/systemjs-text-plugin.js', null, 'systemjs-text-plugin.js')(format='.') +:marked + ### Create translation providers + + Three providers tell the JiT compiler how to translate the template texts for a particular language + while compiling the application: + + * `TRANSLATIONS` is a string containing the content of the translation file. + * `TRANSLATIONS_FORMAT` is the format of the file: `xlf`, `xlif` or `xtb` + * `LOCALE_ID` is the locale of the target language. + + The `getTranslationProviders` function in the following `app/i18n-providers.ts` + creates those providers based on the user's _locale_ + and the corresponding translation file: ++makeExample('cb-i18n/ts/app/i18n-providers.ts', null, 'app/i18n-providers.ts') +:marked + * It gets the locale from the global `document.locale` variable that was set in `index.html`. + + * If there is no locale or the language is English, there is no need to translate. + The function returns an empty `noProviders` array as a `Promise`. + It must return a `Promise` because this function could read a translation file asynchronously from the server. + + * It creates a transaction filename from the locale according to the name and location convention + [described earlier](#i18n-file-structure). + + * The `getTranslationsWithSystemJs` method reads the translation and returns the contents as a string. + Notice that it appends `!text` to the filename, telling SystemJS to use the [text plugin](#text-plugin). + + * The callback composes a providers array with the three translation providers. + + * Finally, `getTranslationProviders` returns the entire effort as a promise. + + ### Bootstrap the app with translation providers + + The Angular `bootstrapModule` method has a second, _options_ parameter + that can influence the behavior of the compiler. + + You'll create an _options_ object with the translation providers from `getTranslationProviders` + and pass it to `bootstrapModule`. + Open the `app/main.ts` and modify the bootstrap code as follows: ++makeExample('cb-i18n/ts/app/main.ts', null, 'app/main.ts')(format=".") +:marked + Notice that it waits for the `getTranslationProviders` promise to resolve before + bootstrapping the app. + + The app is now _internationalized_ for English and French and there is a clear path for adding + more languages. + +a#aot +.l-main-section +:marked + ### _Internationalize_ with the AoT compiler + + The JiT compiler translates the application into the target language while compiling dynamically in the browser. + That's flexible but may not be fast enough for your users. + + The AoT (_Ahead-of-Time_) compiler is part of a build process that produces a small, fast, ready-to-run application package. + When you internationalize with the AoT compiler, you pre-build a separate application package for each + language. Then in the host web page (`index.html`), you determine which language the user needs + and serve the appropriate application package. + + This cookbook doesn't cover how to build multiple application packages and + serve them according to the user's language preference. + It does explain the few steps necessary to tell the AoT to apply a translations file. + + Internationalization with the AoT compiler requires some setup specifically for AoT. + Start with application project as shown [just before merging the translation file](#app-pre-translationStart) + and refer to the [AoT cookbook](aot-compiler.html) to make it _AoT-ready_. + + Next, issue an `ngc` compile command for each supported language (including English). + The result is a separate version of the application for each language. + + Tell AoT how to translate by adding three options to the `ngc` command: + * `--i18nFile`: the path to the translation file + * `--locale`: the name of the locale + * `--i18nFormat`: the format of the localization file + + For this sample, the French language command would be +code-example(language="sh" class="code-shell"). + ./node_modules/.bin/ngc --i18nFile=./i18n/fr/messages.fr.xlf --locale=fr --i18nFormat=xlf + +.l-sub-section + :marked + Windows users may have to quote the command: + code-example(language="sh" class="code-shell"). + "./node_modules/.bin/ngc" --i18nFile=./i18n/fr/messages.fr.xlf --locale=fr --i18nFormat=xlf diff --git a/public/docs/ts/latest/guide/_data.json b/public/docs/ts/latest/guide/_data.json index 25cb193874..cbcf39767e 100644 --- a/public/docs/ts/latest/guide/_data.json +++ b/public/docs/ts/latest/guide/_data.json @@ -147,11 +147,11 @@ "upgrade": { "title": "Upgrading from 1.x", - "intro": "Angular 1 applications can be incrementally upgraded to Angular 2." + "intro": "Incrementally upgrade an Angular 1 application to Angular 2." }, "webpack": { "title": "Webpack: an introduction", - "intro": "Create your Angular applications with a Webpack based tooling" + "intro": "Create Angular applications with a Webpack based tooling" } } From 66c567bee5dddfae20e615bd032d505dc8c20bac Mon Sep 17 00:00:00 2001 From: Ward Bell Date: Thu, 29 Sep 2016 15:15:33 -0700 Subject: [PATCH 11/11] chore(i18n): correct name of i18n extract command (#2511) --- public/docs/_examples/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/docs/_examples/package.json b/public/docs/_examples/package.json index a02f6f022a..980813eabd 100644 --- a/public/docs/_examples/package.json +++ b/public/docs/_examples/package.json @@ -21,7 +21,7 @@ "build:webpack": "rimraf dist && webpack --config config/webpack.prod.js --bail", "build:cli": "ng build", "build:aot": "ngc -p tsconfig-aot.json && rollup -c rollup.js", - "extract": "ng-xi18n" + "i18n": "ng-xi18n" }, "keywords": [], "author": "",

% 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 literal 0 HcmV?d00001 diff --git a/public/docs/_examples/upgrade-phonecat-3-final/ts/app/img/phones/samsung-galaxy-tab.0.jpg b/public/docs/_examples/upgrade-phonecat-3-final/ts/app/img/phones/samsung-galaxy-tab.0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3750377ad9767d07cc01658df68e67f505947be7 GIT binary patch literal 28506 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