From 1f3198cb505a6bb74aadf022c7142f3f4d8cbe28 Mon Sep 17 00:00:00 2001 From: Peter Bacon Darwin Date: Wed, 22 Feb 2017 18:13:21 +0000 Subject: [PATCH] feat(aio): copy example code from angular.io --- aio/content/examples/.gitignore | 17 + .../examples/_boilerplate/bs-config.e2e.json | 14 + .../examples/_boilerplate/bs-config.json | 8 + .../examples/_boilerplate/example-config.json | 4 + .../examples/_boilerplate/package.json | 44 + aio/content/examples/_boilerplate/plnkr.json | 10 + .../examples/_boilerplate/src/styles.css | 116 + .../_boilerplate/src/systemjs.config.js | 42 + .../src/systemjs.config.web.build.js | 88 + .../_boilerplate/src/systemjs.config.web.js | 75 + .../examples/_boilerplate/src/tsconfig.json | 21 + aio/content/examples/_boilerplate/tslint.json | 93 + aio/content/examples/animations/e2e-spec.ts | 351 ++ aio/content/examples/animations/ts/.gitignore | 1 + .../animations/ts/example-config.json | 0 aio/content/examples/animations/ts/plnkr.json | 8 + .../examples/animations/ts/plnkr.no-link.html | 1011 ++++ .../animations/ts/src/app/app.module.ts | 33 + .../ts/src/app/hero-list-auto.component.ts | 46 + .../ts/src/app/hero-list-basic.component.ts | 69 + ...ero-list-combined-transitions.component.ts | 58 + .../hero-list-enter-leave-states.component.ts | 62 + .../app/hero-list-enter-leave.component.ts | 50 + .../ts/src/app/hero-list-groups.component.ts | 79 + .../app/hero-list-inline-styles.component.ts | 59 + .../src/app/hero-list-multistep.component.ts | 70 + .../ts/src/app/hero-list-timings.component.ts | 57 + .../ts/src/app/hero-list-twoway.component.ts | 57 + .../ts/src/app/hero-list.component.css | 27 + .../ts/src/app/hero-team-builder.component.ts | 94 + .../animations/ts/src/app/hero.service.ts | 60 + .../examples/animations/ts/src/index.html | 34 + .../examples/animations/ts/src/main.ts | 4 + aio/content/examples/architecture/e2e-spec.ts | 100 + .../architecture/ts/example-config.json | 0 .../examples/architecture/ts/plnkr.json | 9 + .../architecture/ts/plnkr.no-link.html | 481 ++ .../architecture/ts/src/app/app.component.ts | 14 + .../architecture/ts/src/app/app.module.ts | 36 + .../ts/src/app/backend.service.ts | 25 + .../ts/src/app/hero-detail.component.html | 9 + .../ts/src/app/hero-detail.component.ts | 12 + .../ts/src/app/hero-list.component.1.html | 9 + .../ts/src/app/hero-list.component.html | 11 + .../ts/src/app/hero-list.component.ts | 30 + .../architecture/ts/src/app/hero.service.ts | 23 + .../examples/architecture/ts/src/app/hero.ts | 10 + .../architecture/ts/src/app/logger.service.ts | 9 + .../architecture/ts/src/app/mini-app.ts | 45 + .../ts/src/app/sales-tax.component.ts | 25 + .../ts/src/app/sales-tax.service.ts | 14 + .../ts/src/app/tax-rate.service.ts | 6 + .../examples/architecture/ts/src/index.html | 26 + .../examples/architecture/ts/src/main.ts | 5 + .../examples/attribute-directives/e2e-spec.ts | 31 + .../ts/example-config.json | 0 .../attribute-directives/ts/plnkr.json | 10 + .../ts/plnkr.no-link.html | 253 + .../ts/src/app/app.component.1.html | 20 + .../ts/src/app/app.component.1.ts | 12 + .../ts/src/app/app.component.html | 27 + .../ts/src/app/app.component.ts | 14 + .../ts/src/app/app.module.ts | 16 + .../ts/src/app/dummy.module.1.ts | 17 + .../ts/src/app/highlight.directive.1.ts | 10 + .../ts/src/app/highlight.directive.2.ts | 45 + .../ts/src/app/highlight.directive.3.ts | 27 + .../ts/src/app/highlight.directive.ts | 36 + .../attribute-directives/ts/src/index.html | 25 + .../attribute-directives/ts/src/main.ts | 5 + .../cb-ajs-quick-reference/e2e-spec.ts | 115 + .../ts/example-config.json | 0 .../cb-ajs-quick-reference/ts/plnkr.json | 10 + .../ts/plnkr.no-link.html | 597 +++ .../ts/src/app/app-routing.module.ts | 16 + .../ts/src/app/app.component.css | 9 + .../ts/src/app/app.component.html | 112 + .../ts/src/app/app.component.ts | 33 + .../ts/src/app/app.module.1.ts | 12 + .../ts/src/app/app.module.ts | 22 + .../ts/src/app/date.pipe.ts | 14 + .../ts/src/app/movie-list.component.css | 57 + .../ts/src/app/movie-list.component.html | 78 + .../ts/src/app/movie-list.component.ts | 43 + .../ts/src/app/movie.service.ts | 44 + .../ts/src/app/movie.ts | 12 + .../ts/src/images/hero.png | Bin 0 -> 7312 bytes .../ts/src/images/ng-logo.png | Bin 0 -> 7229 bytes .../ts/src/images/villain.png | Bin 0 -> 10914 bytes .../cb-ajs-quick-reference/ts/src/index.html | 28 + .../cb-ajs-quick-reference/ts/src/main.ts | 5 + .../examples/cb-aot-compiler/e2e-spec.ts | 27 + .../examples/cb-aot-compiler/ts/.gitignore | 7 + .../cb-aot-compiler/ts/example-config.json | 3 + .../cb-aot-compiler/ts/rollup-config.js | 36 + .../ts/src/app/app.component.html | 7 + .../ts/src/app/app.component.ts | 16 + .../cb-aot-compiler/ts/src/app/app.module.ts | 12 + .../cb-aot-compiler/ts/src/index-jit.html | 24 + .../cb-aot-compiler/ts/src/index.html | 23 + .../cb-aot-compiler/ts/src/main-jit.ts | 6 + .../examples/cb-aot-compiler/ts/src/main.ts | 6 + .../cb-aot-compiler/ts/tsconfig-aot.json | 23 + .../ts/tsconfig-aot.json.annotated | 25 + .../cb-component-communication/e2e-spec.ts | 232 + .../cb-component-communication/ts/.gitignore | 1 + .../ts/example-config.json | 0 .../cb-component-communication/ts/plnkr.json | 9 + .../ts/plnkr.no-link.html | 757 +++ .../ts/src/app/app.component.html | 51 + .../ts/src/app/app.component.ts | 8 + .../ts/src/app/app.module.ts | 54 + .../ts/src/app/astronaut.component.ts | 46 + .../ts/src/app/countdown-parent.component.ts | 57 + .../ts/src/app/countdown-timer.component.ts | 37 + .../ts/src/app/hero-child.component.ts | 17 + .../ts/src/app/hero-parent.component.ts | 20 + .../ts/src/app/hero.ts | 9 + .../ts/src/app/mission.service.ts | 25 + .../ts/src/app/missioncontrol.component.ts | 43 + .../ts/src/app/name-child.component.ts | 18 + .../ts/src/app/name-parent.component.ts | 15 + .../ts/src/app/version-child.component.ts | 35 + .../ts/src/app/version-parent.component.ts | 26 + .../ts/src/app/voter.component.ts | 22 + .../ts/src/app/votetaker.component.ts | 24 + .../ts/src/demo.css | 9 + .../ts/src/index.html | 29 + .../ts/src}/main.ts | 2 +- .../cb-component-relative-paths/ts/plnkr.json | 1 + .../ts/plnkr.no-link.html | 277 ++ .../ts/{ => src}/app/app.component.ts | 0 .../ts/{ => src}/app/app.module.ts | 0 .../ts/{ => src}/app/some.component.css | 0 .../ts/{ => src}/app/some.component.html | 0 .../ts/{ => src}/app/some.component.ts | 0 .../ts/{ => src}/index.html | 4 +- .../ts/src/main.ts | 5 + .../cb-dependency-injection/e2e-spec.ts | 102 + .../ts/example-config.json | 0 .../cb-dependency-injection/ts/plnkr.json | 10 + .../ts/plnkr.no-link.html | 989 ++++ .../ts/src/app/app-routing.module.ts | 11 + .../ts/src/app/app.component.html | 38 + .../ts/src/app/app.component.ts | 30 + .../ts/src/app/app.module.ts | 74 + .../ts/src/app/date-logger.service.ts | 38 + .../ts/src/app/hero-bio.component.ts | 27 + .../ts/src/app/hero-bios.component.ts | 48 + .../ts/src/app/hero-cache.service.ts | 20 + .../ts/src/app/hero-contact.component.ts | 40 + .../ts/src/app/hero-data.ts | 14 + .../ts/src/app/hero-of-the-month.component.ts | 75 + .../ts/src/app/hero.service.ts | 22 + .../ts/src/app/hero.ts | 9 + .../ts/src/app/highlight.directive.ts | 29 + .../ts/src/app/logger.service.ts | 16 + .../ts/src/app/parent-finder.component.ts | 215 + .../ts/src/app/runners-up.ts | 26 + .../ts/src/app/sorted-heroes.component.ts | 52 + .../ts/src/app/user-context.service.ts | 33 + .../ts/src/app/user.service.ts | 10 + .../cb-dependency-injection/ts/src/index.html | 29 + .../cb-dependency-injection/ts/src/main.ts | 5 + .../cb-dependency-injection/ts/src/sample.css | 26 + .../cb-dynamic-component-loader/e2e-spec.ts | 21 + .../ts/example-config.json | 0 .../ts/src/app/ad-banner.component.ts | 55 + .../ts/src/app/ad-item.ts | 6 + .../ts/src/app/ad.component.ts | 4 + .../ts/src/app/ad.directive.ts | 10 + .../ts/src/app/ad.service.ts | 23 + .../ts/src/app/app.component.ts | 24 + .../ts/src/app/app.module.ts | 27 + .../ts/src/app/hero-job-ad.component.ts | 19 + .../ts/src/app/hero-profile.component.ts | 22 + .../ts/src/index.html | 26 + .../ts/src/main.ts | 6 + .../ts/src/sample.css | 23 + .../examples/cb-dynamic-form/e2e-spec.ts | 29 + .../cb-dynamic-form/ts/example-config.json | 0 .../examples/cb-dynamic-form/ts/plnkr.json | 10 + .../cb-dynamic-form/ts/plnkr.no-link.html | 463 ++ .../ts/src/app/app.component.ts | 22 + .../cb-dynamic-form/ts/src/app/app.module.ts | 18 + .../app/dynamic-form-question.component.html | 17 + .../app/dynamic-form-question.component.ts | 16 + .../ts/src/app/dynamic-form.component.html | 17 + .../ts/src/app/dynamic-form.component.ts | 29 + .../ts/src/app/question-base.ts | 25 + .../ts/src/app/question-control.service.ts | 20 + .../ts/src/app/question-dropdown.ts | 12 + .../ts/src/app/question-textbox.ts | 12 + .../ts/src/app/question.service.ts | 47 + .../cb-dynamic-form/ts/src/index.html | 28 + .../examples/cb-dynamic-form/ts/src/main.ts | 5 + .../cb-dynamic-form/ts/src/sample.css | 7 + .../examples/cb-form-validation/e2e-spec.ts | 182 + .../cb-form-validation/ts/example-config.json | 0 .../examples/cb-form-validation/ts/plnkr.json | 8 + .../cb-form-validation/ts/plnkr.no-link.html | 768 +++ .../ts/src/app/app.component.ts | 12 + .../ts/src/app/app.module.ts | 18 + .../hero-form-reactive.component.html | 47 + .../reactive/hero-form-reactive.component.ts | 117 + .../app/reactive/hero-form-reactive.module.ts | 13 + .../app/shared/forbidden-name.directive.ts | 43 + .../ts/src/app/shared/hero.ts | 9 + .../ts/src/app/shared/shared.module.ts | 14 + .../ts/src/app/shared/submitted.component.ts | 32 + .../app/template/hero-form-template.module.ts | 14 + .../hero-form-template1.component.html | 61 + .../template/hero-form-template1.component.ts | 48 + .../hero-form-template2.component.html | 52 + .../template/hero-form-template2.component.ts | 100 + .../cb-form-validation/ts/src/forms.css | 7 + .../cb-form-validation/ts/src/index.html | 29 + .../cb-form-validation/ts/src/main.ts | 6 + aio/content/examples/cb-i18n/e2e-spec.ts | 33 + aio/content/examples/cb-i18n/ts/.gitignore | 6 + .../examples/cb-i18n/ts/example-config.json | 0 aio/content/examples/cb-i18n/ts/messages.xlf | 47 + aio/content/examples/cb-i18n/ts/plnkr.json | 18 + .../examples/cb-i18n/ts/plnkr.no-link.html | 329 ++ .../cb-i18n/ts/src/app/app.component.1.html | 15 + .../cb-i18n/ts/src/app/app.component.html | 34 + .../cb-i18n/ts/src/app/app.component.ts | 20 + .../examples/cb-i18n/ts/src/app/app.module.ts | 13 + .../cb-i18n/ts/src/app/i18n-providers.ts | 33 + .../examples/cb-i18n/ts/src/index.html | 39 + .../cb-i18n/ts/src/locale/messages.es.xlf | 41 + .../ts/src/locale/messages.es.xlf.html | 54 + aio/content/examples/cb-i18n/ts/src/main.1.ts | 6 + aio/content/examples/cb-i18n/ts/src/main.ts | 10 + .../cb-i18n/ts/src/systemjs-text-plugin.js | 14 + .../cb-set-document-title/e2e-spec.ts | 31 + .../ts/example-config.json | 0 .../cb-set-document-title/ts/plnkr.json | 10 + .../ts/plnkr.no-link.html | 228 + .../ts/src/app/app.component.ts | 29 + .../ts/src/app/app.module.ts | 19 + .../cb-set-document-title/ts/src/index.html | 39 + .../cb-set-document-title/ts/src/main.ts | 6 + aio/content/examples/cb-ts-to-js/e2e-spec.ts | 77 + .../js-es6-decorators/example-config.json | 3 + .../cb-ts-to-js/js-es6-decorators/plnkr.json | 9 + .../js-es6-decorators/plnkr.no-link.html | 209 + .../js-es6-decorators/src/.babelrc | 6 + .../src/app/app.component.es6 | 15 + .../src/app/app.component.html | 31 + .../js-es6-decorators/src/app/app.module.es6 | 55 + .../src/app/confirm.component.es6 | 22 + .../src/app/confirm.component.html | 6 + .../src/app/data.service.es6 | 10 + .../hero-di-inject-additional.component.es6 | 7 + .../src/app/hero-di-inject.component.es6 | 13 + .../src/app/hero-di.component.es6 | 15 + .../src/app/hero-host-meta.component.es6 | 44 + .../src/app/hero-host.component.es6 | 39 + .../src/app/hero-io.component.es6 | 26 + .../src/app/hero-lifecycle.component.es6 | 14 + .../src/app/hero-queries.component.es6 | 81 + .../src/app/hero-title.component.es6 | 26 + .../src/app/hero-title.component.html | 4 + .../src/app/hero.component.es6 | 15 + .../js-es6-decorators/src/index.html | 26 + .../js-es6-decorators/src/main.es6 | 4 + .../cb-ts-to-js/js-es6/example-config.json | 3 + .../examples/cb-ts-to-js/js-es6/plnkr.json | 9 + .../cb-ts-to-js/js-es6/plnkr.no-link.html | 208 + .../examples/cb-ts-to-js/js-es6/src/.babelrc | 5 + .../js-es6/src/app/app.component.es6 | 20 + .../js-es6/src/app/app.component.html | 30 + .../cb-ts-to-js/js-es6/src/app/app.module.es6 | 56 + .../js-es6/src/app/confirm.component.es6 | 32 + .../js-es6/src/app/confirm.component.html | 6 + .../js-es6/src/app/data.service.es6 | 13 + .../hero-di-inject-additional.component.es6 | 10 + .../src/app/hero-di-inject.component.es6 | 20 + .../js-es6/src/app/hero-di.component.es6 | 21 + .../js-es6/src/app/hero-host.component.es6 | 50 + .../js-es6/src/app/hero-io.component.es6 | 31 + .../src/app/hero-lifecycle.component.es6 | 15 + .../js-es6/src/app/hero-queries.component.es6 | 97 + .../js-es6/src/app/hero-title.component.es6 | 29 + .../js-es6/src/app/hero-title.component.html | 4 + .../js-es6/src/app/hero.component.es6 | 21 + .../cb-ts-to-js/js-es6/src/index.html | 26 + .../examples/cb-ts-to-js/js-es6/src/main.es6 | 4 + .../cb-ts-to-js/js/example-config.json | 0 .../examples/cb-ts-to-js/js/plnkr.json | 8 + .../cb-ts-to-js/js/plnkr.no-link.html | 1022 ++++ .../cb-ts-to-js/js/src/app/app.component.html | 47 + .../cb-ts-to-js/js/src/app/app.component.js | 20 + .../cb-ts-to-js/js/src/app/app.module.js | 46 + .../js/src/app/confirm.component.html | 6 + .../js/src/app/confirm.component.js | 75 + .../cb-ts-to-js/js/src/app/data.service.js | 10 + .../hero-di-inject-additional.component.js | 36 + .../js/src/app/hero-di-inject.component.js | 51 + .../js/src/app/hero-di.component.js | 51 + .../js/src/app/hero-host.component.js | 107 + .../js/src/app/hero-io-dsl.component.html | 7 + .../js/src/app/hero-io.component.html | 7 + .../js/src/app/hero-io.component.js | 52 + .../js/src/app/hero-lifecycle.component.js | 52 + .../js/src/app/hero-queries.component.js | 92 + .../js/src/app/hero-title.component.html | 4 + .../js/src/app/hero-title.component.js | 64 + .../cb-ts-to-js/js/src/app/hero.component.js | 53 + .../examples/cb-ts-to-js/js/src/index.html | 43 + .../examples/cb-ts-to-js/js/src/main.js | 9 + .../cb-ts-to-js/ts/example-config.json | 0 .../examples/cb-ts-to-js/ts/plnkr.json | 9 + .../cb-ts-to-js/ts/plnkr.no-link.html | 652 +++ .../cb-ts-to-js/ts/src/app/app.component.html | 31 + .../cb-ts-to-js/ts/src/app/app.component.ts | 15 + .../cb-ts-to-js/ts/src/app/app.module.ts | 56 + .../ts/src/app/confirm.component.html | 6 + .../ts/src/app/confirm.component.ts | 22 + .../cb-ts-to-js/ts/src/app/data.service.ts | 10 + .../hero-di-inject-additional.component.ts | 7 + .../ts/src/app/hero-di-inject.component.ts | 11 + .../ts/src/app/hero-di.component.ts | 15 + .../ts/src/app/hero-host-meta.component.ts | 44 + .../ts/src/app/hero-host.component.ts | 39 + .../ts/src/app/hero-io.component.ts | 26 + .../ts/src/app/hero-lifecycle.component.ts | 14 + .../ts/src/app/hero-queries.component.ts | 83 + .../ts/src/app/hero-title.component.html | 4 + .../ts/src/app/hero-title.component.ts | 22 + .../cb-ts-to-js/ts/src/app/hero.component.ts | 15 + .../examples/cb-ts-to-js/ts/src/index.html | 26 + .../examples/cb-ts-to-js/ts/src/main.ts | 4 + .../cb-visual-studio-2015/ts/.gitignore | 1 + .../cb-visual-studio-2015/ts/tsconfig.json | 17 + .../examples/cli-quickstart/e2e-spec.ts | 14 + .../examples/cli-quickstart/ts/.gitignore | 42 + .../examples/cli-quickstart/ts/README.md | 31 + .../cli-quickstart/ts/angular-cli.json | 59 + .../cli-quickstart/ts/bs-config.cli.json | 11 + .../cli-quickstart/ts/e2e/app.e2e-spec.ts | 14 + .../examples/cli-quickstart/ts/e2e/app.po.ts | 11 + .../cli-quickstart/ts/example-config.json | 4 + .../ts/src/app/app.component.css | 6 + .../ts/src/app/app.component.html | 3 + .../ts/src/app/app.component.spec.ts | 35 + .../ts/src/app/app.component.ts | 16 + .../cli-quickstart/ts/src/app/app.module.ts | 20 + .../cli-quickstart/ts/src/assets/.gitkeep | 0 .../ts/src/environments/environment.prod.ts | 3 + .../ts/src/environments/environment.ts | 8 + .../cli-quickstart/ts/src/favicon.ico | Bin 0 -> 5430 bytes .../examples/cli-quickstart/ts/src/index.html | 14 + .../examples/cli-quickstart/ts/src/main.ts | 12 + .../cli-quickstart/ts/src/polyfills.ts | 19 + .../examples/cli-quickstart/ts/src/styles.css | 116 + .../examples/cli-quickstart/ts/src/test.ts | 32 + .../examples/component-styles/e2e-spec.ts | 73 + .../component-styles/ts/example-config.json | 0 .../examples/component-styles/ts/plnkr.json | 10 + .../component-styles/ts/plnkr.no-link.html | 409 ++ .../component-styles/ts/src/app/app.module.ts | 23 + .../ts/src/app/hero-app-main.component.ts | 16 + .../ts/src/app/hero-app.component.ts | 24 + .../ts/src/app/hero-controls.component.ts | 25 + .../ts/src/app/hero-details-box.css | 3 + .../ts/src/app/hero-details.component.css | 28 + .../ts/src/app/hero-details.component.ts | 18 + .../ts/src/app/hero-team.component.css | 3 + .../ts/src/app/hero-team.component.ts | 19 + .../component-styles/ts/src/app/hero.ts | 7 + .../ts/src/app/quest-summary.component.css | 5 + .../ts/src/app/quest-summary.component.html | 1 + .../ts/src/app/quest-summary.component.ts | 21 + .../component-styles/ts/src/index.html | 31 + .../examples/component-styles/ts/src/main.ts | 5 + .../examples/dependency-injection/e2e-spec.ts | 199 + .../ts/example-config.json | 0 .../dependency-injection/ts/plnkr.json | 10 + .../ts/plnkr.no-link.html | 986 ++++ .../ts/src/app/app.component.1.ts | 17 + .../ts/src/app/app.component.2.ts | 25 + .../ts/src/app/app.component.ts | 48 + .../ts/src/app/app.config.ts | 16 + .../ts/src/app/app.module.ts | 60 + .../ts/src/app/car/car-creations.ts | 46 + .../ts/src/app/car/car-factory.ts | 19 + .../ts/src/app/car/car-injector.ts | 27 + .../ts/src/app/car/car-no-di.ts | 24 + .../ts/src/app/car/car.component.ts | 38 + .../ts/src/app/car/car.ts | 25 + .../src/app/heroes/hero-list.component.1.ts | 16 + .../src/app/heroes/hero-list.component.2.ts | 31 + .../ts/src/app/heroes/hero-list.component.ts | 26 + .../ts/src/app/heroes/hero.service.1.ts | 9 + .../ts/src/app/heroes/hero.service.2.ts | 18 + .../src/app/heroes/hero.service.provider.ts | 19 + .../ts/src/app/heroes/hero.service.ts | 20 + .../ts/src/app/heroes/hero.ts | 6 + .../ts/src/app/heroes/heroes.component.1.ts | 21 + .../ts/src/app/heroes/heroes.component.ts | 14 + .../ts/src/app/heroes/mock-heroes.ts | 15 + .../ts/src/app/injector.component.ts | 43 + .../ts/src/app/logger.service.ts | 12 + .../ts/src/app/providers.component.ts | 267 + .../ts/src/app/test.component.ts | 55 + .../ts/src/app/user.service.ts | 22 + .../dependency-injection/ts/src/index.html | 27 + .../dependency-injection/ts/src/main.ts | 6 + aio/content/examples/deployment/ts/.gitignore | 1 + .../deployment/ts/example-config.json | 0 .../deployment/ts/src/app/app.component.ts | 15 + .../deployment/ts/src/app/app.module.ts | 29 + .../ts/src/app/crisis-list.component.ts | 9 + .../ts/src/app/hero-list.component.ts | 10 + .../examples/deployment/ts/src/index.html | 38 + .../examples/deployment/ts/src/main.ts | 15 + .../ts/src/systemjs.config.server.js | 46 + .../examples/displaying-data/e2e-spec.ts | 29 + .../displaying-data/ts/example-config.json | 0 .../examples/displaying-data/ts/plnkr.json | 11 + .../displaying-data/ts/plnkr.no-link.html | 228 + .../ts/src/app/app-ctor.component.ts | 19 + .../ts/src/app/app.component.1.ts | 16 + .../ts/src/app/app.component.2.ts | 26 + .../ts/src/app/app.component.3.ts | 35 + .../ts/src/app/app.component.ts | 32 + .../displaying-data/ts/src/app/app.module.ts | 16 + .../displaying-data/ts/src/app/hero.ts | 9 + .../displaying-data/ts/src/index.html | 28 + .../examples/displaying-data/ts/src/main.ts | 6 + aio/content/examples/forms/e2e-spec.ts | 63 + .../examples/forms/js/example-config.json | 0 aio/content/examples/forms/js/plnkr.json | 5 + .../examples/forms/js/plnkr.no-link.html | 440 ++ .../forms/js/src/app/app.component.js | 11 + .../examples/forms/js/src/app/app.module.js | 19 + .../forms/js/src/app/hero-form.component.html | 196 + .../forms/js/src/app/hero-form.component.js | 52 + aio/content/examples/forms/js/src/app/hero.js | 11 + aio/content/examples/forms/js/src/forms.css | 9 + aio/content/examples/forms/js/src/index.html | 47 + aio/content/examples/forms/js/src/main.js | 8 + .../examples/forms/ts/example-config.json | 0 aio/content/examples/forms/ts/plnkr.json | 8 + .../examples/forms/ts/plnkr.no-link.html | 461 ++ .../forms/ts/src/app/app.component.ts | 8 + .../examples/forms/ts/src/app/app.module.ts | 20 + .../forms/ts/src/app/hero-form.component.html | 210 + .../forms/ts/src/app/hero-form.component.ts | 60 + aio/content/examples/forms/ts/src/app/hero.ts | 11 + aio/content/examples/forms/ts/src/forms.css | 9 + aio/content/examples/forms/ts/src/index.html | 35 + aio/content/examples/forms/ts/src/main.ts | 5 + .../e2e-spec.ts | 103 + .../ts/example-config.json | 0 .../ts/plnkr.json | 9 + .../ts/plnkr.no-link.html | 744 +++ .../ts/src/app/app.component.ts | 21 + .../ts/src/app/app.module.ts | 33 + .../ts/src/app/car.components.ts | 74 + .../ts/src/app/car.services.ts | 95 + .../ts/src/app/hero-tax-return.component.css | 22 + .../ts/src/app/hero-tax-return.component.html | 20 + .../ts/src/app/hero-tax-return.component.ts | 44 + .../ts/src/app/hero-tax-return.service.ts | 30 + .../ts/src/app/hero.ts | 31 + .../ts/src/app/heroes-list.component.ts | 48 + .../ts/src/app/heroes.service.ts | 47 + .../ts/src/app/villains-list.component.html | 6 + .../ts/src/app/villains-list.component.ts | 21 + .../ts/src/app/villains.service.ts | 17 + .../ts/src/index.html | 26 + .../ts/src/main.ts | 5 + .../examples/homepage-hello-world/e2e-spec.ts | 30 + .../ts/example-config.json | 0 .../homepage-hello-world/ts/plnkr.json | 9 + .../ts/plnkr.no-link.html | 217 + .../ts/src/app/app.module.ts | 16 + .../ts/src/app/hello_world.html | 7 + .../ts/src/app/hello_world.ts | 18 + .../homepage-hello-world/ts/src/index.1.html | 32 + .../homepage-hello-world/ts/src/index.html | 28 + .../homepage-hello-world/ts/src/main.ts | 5 + .../examples/homepage-tabs/e2e-spec.ts | 17 + .../homepage-tabs/ts/example-config.json | 0 .../examples/homepage-tabs/ts/plnkr.json | 9 + .../homepage-tabs/ts/plnkr.no-link.html | 292 ++ .../homepage-tabs/ts/src/app/app.module.ts | 17 + .../homepage-tabs/ts/src/app/di_demo.ts | 45 + .../homepage-tabs/ts/src/app/ui_tabs.ts | 51 + .../homepage-tabs/ts/src/index.1.html | 33 + .../examples/homepage-tabs/ts/src/index.html | 29 + .../examples/homepage-tabs/ts/src/main.ts | 6 + .../examples/homepage-todo/e2e-spec.ts | 17 + .../homepage-todo/ts/example-config.json | 0 .../examples/homepage-todo/ts/plnkr.json | 9 + .../homepage-todo/ts/plnkr.no-link.html | 303 ++ .../homepage-todo/ts/src/app/app.module.ts | 22 + .../examples/homepage-todo/ts/src/app/todo.ts | 6 + .../homepage-todo/ts/src/app/todo_app.ts | 38 + .../homepage-todo/ts/src/app/todo_form.ts | 25 + .../homepage-todo/ts/src/app/todo_list.ts | 24 + .../homepage-todo/ts/src/index.1.html | 33 + .../examples/homepage-todo/ts/src/index.html | 29 + .../examples/homepage-todo/ts/src/main.ts | 5 + aio/content/examples/jsconfig.json | 6 + .../examples/lifecycle-hooks/e2e-spec.ts | 178 + .../lifecycle-hooks/ts/example-config.json | 0 .../examples/lifecycle-hooks/ts/plnkr.json | 9 + .../lifecycle-hooks/ts/plnkr.no-link.html | 1097 +++++ .../ts/src/app/after-content.component.ts | 116 + .../ts/src/app/after-view.component.ts | 118 + .../ts/src/app/app.component.html | 37 + .../ts/src/app/app.component.ts | 8 + .../lifecycle-hooks/ts/src/app/app.module.ts | 67 + .../ts/src/app/counter.component.ts | 84 + .../ts/src/app/do-check-parent.component.html | 13 + .../ts/src/app/do-check.component.ts | 96 + .../ts/src/app/logger.service.ts | 26 + .../src/app/on-changes-parent.component.html | 13 + .../ts/src/app/on-changes.component.ts | 74 + .../ts/src/app/peek-a-boo-parent.component.ts | 53 + .../ts/src/app/peek-a-boo.component.ts | 85 + .../ts/src/app/spy.component.html | 16 + .../ts/src/app/spy.component.ts | 41 + .../ts/src/app/spy.directive.ts | 24 + .../lifecycle-hooks/ts/src/index.html | 28 + .../examples/lifecycle-hooks/ts/src/main.ts | 4 + .../lifecycle-hooks/ts/src/sample.css | 13 + .../ngcontainer/ts/example-config.json | 0 .../examples/ngcontainer/ts/plnkr.json | 11 + .../ngcontainer/ts/plnkr.no-link.html | 586 +++ .../ngcontainer/ts/src/app/app.component.css | 34 + .../ngcontainer/ts/src/app/app.component.html | 279 ++ .../ngcontainer/ts/src/app/app.component.ts | 25 + .../ngcontainer/ts/src/app/app.module.ts | 19 + .../ts/src/app/content.component.ts | 16 + .../ngcontainer/ts/src/app/hero.components.ts | 43 + .../examples/ngcontainer/ts/src/app/hero.ts | 13 + .../examples/ngcontainer/ts/src/index.html | 26 + .../examples/ngcontainer/ts/src/main.ts | 6 + aio/content/examples/ngmodule/e2e-spec.ts | 223 + .../ngmodule/ts/contact.1b.plnkr.json | 25 + .../ngmodule/ts/contact.1b.plnkr.no-link.html | 475 ++ .../examples/ngmodule/ts/contact.2.plnkr.json | 27 + .../ngmodule/ts/contact.2.plnkr.no-link.html | 491 ++ .../examples/ngmodule/ts/example-config.json | 0 .../examples/ngmodule/ts/minimal.0.plnkr.json | 13 + .../ngmodule/ts/minimal.0.plnkr.no-link.html | 195 + aio/content/examples/ngmodule/ts/plnkr.json | 41 + .../examples/ngmodule/ts/plnkr.no-link.html | 909 ++++ .../ngmodule/ts/pre-shared.3.plnkr.json | 41 + .../ts/pre-shared.3.plnkr.no-link.html | 861 ++++ .../ts/src/app/app-routing.module.3.ts | 14 + .../ngmodule/ts/src/app/app-routing.module.ts | 19 + .../ngmodule/ts/src/app/app.component.0.ts | 10 + .../ngmodule/ts/src/app/app.component.1.ts | 19 + .../ngmodule/ts/src/app/app.component.1b.ts | 15 + .../ngmodule/ts/src/app/app.component.2.ts | 12 + .../ngmodule/ts/src/app/app.component.3.ts | 19 + .../ngmodule/ts/src/app/app.component.ts | 19 + .../ngmodule/ts/src/app/app.module.0.ts | 23 + .../ngmodule/ts/src/app/app.module.1.ts | 54 + .../ngmodule/ts/src/app/app.module.1b.ts | 53 + .../ngmodule/ts/src/app/app.module.2.ts | 37 + .../ngmodule/ts/src/app/app.module.3.ts | 30 + .../ngmodule/ts/src/app/app.module.ts | 40 + .../ts/src/app/contact/awesome.pipe.ts | 10 + .../app/contact/contact-routing.module.3.ts | 12 + .../src/app/contact/contact-routing.module.ts | 14 + .../ts/src/app/contact/contact.component.3.ts | 54 + .../ts/src/app/contact/contact.component.css | 29 + .../ts/src/app/contact/contact.component.html | 23 + .../ts/src/app/contact/contact.component.ts | 55 + .../ts/src/app/contact/contact.module.2.ts | 30 + .../ts/src/app/contact/contact.module.3.ts | 22 + .../ts/src/app/contact/contact.module.ts | 16 + .../ts/src/app/contact/contact.service.ts | 29 + .../ts/src/app/contact/highlight.directive.ts | 18 + .../ngmodule/ts/src/app/core/core.module.ts | 48 + .../ts/src/app/core/title.component.html | 6 + .../ts/src/app/core/title.component.ts | 18 + .../ngmodule/ts/src/app/core/user.service.ts | 32 + .../src/app/crisis/crisis-detail.component.ts | 19 + .../src/app/crisis/crisis-list.component.ts | 22 + .../src/app/crisis/crisis-routing.module.ts | 18 + .../ts/src/app/crisis/crisis.module.ts | 14 + .../ts/src/app/crisis/crisis.service.ts | 30 + .../ts/src/app/hero/hero-detail.component.ts | 31 + .../ts/src/app/hero/hero-list.component.ts | 21 + .../ts/src/app/hero/hero-routing.module.3.ts | 23 + .../ts/src/app/hero/hero-routing.module.ts | 23 + .../ts/src/app/hero/hero.component.3.ts | 18 + .../ts/src/app/hero/hero.component.ts | 19 + .../ngmodule/ts/src/app/hero/hero.module.3.ts | 20 + .../ngmodule/ts/src/app/hero/hero.module.ts | 16 + .../ngmodule/ts/src/app/hero/hero.service.ts | 32 + .../ts/src/app/hero/highlight.directive.ts | 14 + .../ts/src/app/highlight.directive.ts | 12 + .../ts/src/app/shared/awesome.pipe.ts | 10 + .../ts/src/app/shared/highlight.directive.ts | 13 + .../ts/src/app/shared/shared.module.ts | 18 + .../ngmodule/ts/src/app/title.component.html | 10 + .../ngmodule/ts/src/app/title.component.ts | 25 + .../ngmodule/ts/src/app/user.service.ts | 8 + .../examples/ngmodule/ts/src/index.0.html | 24 + .../examples/ngmodule/ts/src/index.1.html | 24 + .../examples/ngmodule/ts/src/index.1b.html | 24 + .../examples/ngmodule/ts/src/index.2.html | 24 + .../examples/ngmodule/ts/src/index.3.html | 24 + .../examples/ngmodule/ts/src/index.html | 25 + .../examples/ngmodule/ts/src/main-static.ts | 13 + .../examples/ngmodule/ts/src/main.0.ts | 4 + .../examples/ngmodule/ts/src/main.1.ts | 4 + .../examples/ngmodule/ts/src/main.1b.ts | 4 + .../examples/ngmodule/ts/src/main.2.ts | 4 + .../examples/ngmodule/ts/src/main.3.ts | 4 + aio/content/examples/ngmodule/ts/src/main.ts | 9 + aio/content/examples/package.json | 88 + aio/content/examples/pipes/e2e-spec.ts | 111 + .../examples/pipes/ts/example-config.json | 0 aio/content/examples/pipes/ts/plnkr.json | 8 + .../examples/pipes/ts/plnkr.no-link.html | 663 +++ .../pipes/ts/src/app/app.component.html | 83 + .../pipes/ts/src/app/app.component.ts | 11 + .../examples/pipes/ts/src/app/app.module.ts | 48 + .../ts/src/app/exponential-strength.pipe.ts | 18 + .../pipes/ts/src/app/fetch-json.pipe.ts | 30 + .../app/flying-heroes-impure.component.html | 38 + .../ts/src/app/flying-heroes.component.html | 38 + .../ts/src/app/flying-heroes.component.ts | 63 + .../pipes/ts/src/app/flying-heroes.pipe.ts | 27 + .../src/app/hero-async-message.component.ts | 38 + .../ts/src/app/hero-birthday1.component.ts | 12 + .../ts/src/app/hero-birthday2.component.ts | 20 + .../pipes/ts/src/app/hero-list.component.ts | 17 + .../examples/pipes/ts/src/app/heroes.ts | 7 + .../app/power-boost-calculator.component.ts | 18 + .../ts/src/app/power-booster.component.ts | 11 + aio/content/examples/pipes/ts/src/heroes.json | 6 + aio/content/examples/pipes/ts/src/index.html | 26 + aio/content/examples/pipes/ts/src/main.ts | 5 + aio/content/examples/protractor-helpers.ts | 35 + aio/content/examples/protractor.config.js | 175 + aio/content/examples/quickstart/e2e-spec.ts | 17 + .../examples/quickstart/js/bs-config.1.json | 8 + .../quickstart/js/example-config.json | 0 .../examples/quickstart/js/package.1.json | 29 + aio/content/examples/quickstart/js/plnkr.json | 8 + .../examples/quickstart/js/plnkr.no-link.html | 204 + .../quickstart/js/src/app/app.component.js | 27 + .../quickstart/js/src/app/app.module.js | 15 + .../examples/quickstart/js/src/index.html | 42 + .../examples/quickstart/js/src/main.js | 8 + .../examples/quickstart/js/src/styles.1.css | 14 + .../examples/quickstart/ts/bs-config.1.json | 8 + .../quickstart/ts/example-config.json | 0 aio/content/examples/quickstart/ts/plnkr.json | 12 + .../examples/quickstart/ts/plnkr.no-link.html | 74 + .../quickstart/ts/src/app/app.component.ts | 8 + .../quickstart/ts/src/app/app.module.ts | 11 + .../examples/quickstart/ts/src/index.html | 31 + .../examples/quickstart/ts/src/main.ts | 5 + .../quickstart/ts/src/tsconfig.1.json | 13 + .../examples/reactive-forms/e2e-spec.ts | 1020 ++++ .../reactive-forms/ts/example-config.json | 0 .../reactive-forms/ts/final.plnkr.json | 21 + .../ts/final.plnkr.no-link.html | 515 ++ .../examples/reactive-forms/ts/plnkr.json | 15 + .../reactive-forms/ts/plnkr.no-link.html | 1325 +++++ .../ts/src/app/app.component.1.ts | 13 + .../ts/src/app/app.component.ts | 13 + .../reactive-forms/ts/src/app/app.module.ts | 39 + .../reactive-forms/ts/src/app/data-model.ts | 40 + .../ts/src/app/demo.component.html | 40 + .../ts/src/app/demo.component.ts | 48 + .../reactive-forms/ts/src/app/demo.module.ts | 33 + .../ts/src/app/hero-detail-1.component.html | 8 + .../ts/src/app/hero-detail-1.component.ts | 15 + .../ts/src/app/hero-detail-2.component.html | 18 + .../ts/src/app/hero-detail-2.component.ts | 18 + .../ts/src/app/hero-detail-3.component.html | 16 + .../ts/src/app/hero-detail-3.component.ts | 28 + .../ts/src/app/hero-detail-3a.component.ts | 26 + .../ts/src/app/hero-detail-4.component.html | 46 + .../ts/src/app/hero-detail-4.component.ts | 35 + .../ts/src/app/hero-detail-5.component.html | 56 + .../ts/src/app/hero-detail-5.component.ts | 36 + .../ts/src/app/hero-detail-6.component.html | 46 + .../ts/src/app/hero-detail-6.component.ts | 59 + .../ts/src/app/hero-detail-7.component.html | 46 + .../ts/src/app/hero-detail-7.component.ts | 67 + .../ts/src/app/hero-detail-8.component.html | 70 + .../ts/src/app/hero-detail-8.component.ts | 69 + .../ts/src/app/hero-detail.component.html | 73 + .../ts/src/app/hero-detail.component.ts | 108 + .../ts/src/app/hero-list.component.1.html | 8 + .../ts/src/app/hero-list.component.html | 17 + .../ts/src/app/hero-list.component.ts | 32 + .../reactive-forms/ts/src/app/hero.service.ts | 26 + .../reactive-forms/ts/src/index-final.html | 31 + .../examples/reactive-forms/ts/src/index.html | 31 + .../reactive-forms/ts/src/main-final.ts | 5 + .../examples/reactive-forms/ts/src/main.ts | 6 + aio/content/examples/router/e2e-spec.ts | 166 + .../examples/router/ts/example-config.json | 0 aio/content/examples/router/ts/plnkr.json | 12 + .../examples/router/ts/plnkr.no-link.html | 1353 +++++ .../app/admin/admin-dashboard.component.1.ts | 9 + .../app/admin/admin-dashboard.component.2.ts | 33 + .../app/admin/admin-dashboard.component.ts | 47 + .../src/app/admin/admin-routing.module.1.ts | 39 + .../src/app/admin/admin-routing.module.2.ts | 44 + .../src/app/admin/admin-routing.module.3.ts | 43 + .../ts/src/app/admin/admin-routing.module.ts | 41 + .../ts/src/app/admin/admin.component.ts | 17 + .../router/ts/src/app/admin/admin.module.ts | 24 + .../src/app/admin/manage-crises.component.ts | 9 + .../src/app/admin/manage-heroes.component.ts | 9 + .../examples/router/ts/src/app/animations.ts | 26 + .../router/ts/src/app/app-routing.module.1.ts | 26 + .../router/ts/src/app/app-routing.module.2.ts | 24 + .../router/ts/src/app/app-routing.module.3.ts | 31 + .../router/ts/src/app/app-routing.module.4.ts | 30 + .../router/ts/src/app/app-routing.module.5.ts | 45 + .../router/ts/src/app/app-routing.module.6.ts | 54 + .../router/ts/src/app/app-routing.module.ts | 50 + .../router/ts/src/app/app.component.1.ts | 18 + .../router/ts/src/app/app.component.2.ts | 16 + .../router/ts/src/app/app.component.3.ts | 48 + .../router/ts/src/app/app.component.4.ts | 23 + .../router/ts/src/app/app.component.5.ts | 20 + .../router/ts/src/app/app.component.ts | 23 + .../router/ts/src/app/app.module.0.ts | 41 + .../router/ts/src/app/app.module.1.ts | 49 + .../router/ts/src/app/app.module.2.ts | 31 + .../router/ts/src/app/app.module.3.ts | 29 + .../router/ts/src/app/app.module.4.ts | 46 + .../router/ts/src/app/app.module.5.ts | 38 + .../router/ts/src/app/app.module.6.ts | 29 + .../router/ts/src/app/app.module.7.ts | 38 + .../examples/router/ts/src/app/app.module.ts | 47 + .../router/ts/src/app/auth-guard.service.1.ts | 11 + .../router/ts/src/app/auth-guard.service.2.ts | 37 + .../router/ts/src/app/auth-guard.service.3.ts | 39 + .../router/ts/src/app/auth-guard.service.4.ts | 47 + .../router/ts/src/app/auth-guard.service.ts | 56 + .../router/ts/src/app/auth.service.ts | 23 + .../src/app/can-deactivate-guard.service.1.ts | 31 + .../src/app/can-deactivate-guard.service.ts | 15 + .../ts/src/app/compose-message.component.html | 17 + .../ts/src/app/compose-message.component.ts | 44 + .../crisis-center-home.component.ts | 13 + .../crisis-center-routing.module.1.ts | 44 + .../crisis-center-routing.module.2.ts | 72 + .../crisis-center-routing.module.3.ts | 52 + .../crisis-center-routing.module.4.ts | 65 + .../crisis-center-routing.module.ts | 53 + .../crisis-center/crisis-center.component.ts | 14 + .../crisis-center/crisis-center.module.1.ts | 36 + .../app/crisis-center/crisis-center.module.ts | 35 + .../crisis-detail-resolver.service.ts | 24 + .../crisis-detail.component.1.ts | 87 + .../crisis-center/crisis-detail.component.ts | 86 + .../crisis-center/crisis-list.component.1.ts | 44 + .../crisis-center/crisis-list.component.ts | 56 + .../src/app/crisis-center/crisis.service.ts | 40 + .../ts/src/app/crisis-list.component.ts | 10 + .../router/ts/src/app/dialog.service.ts | 19 + .../router/ts/src/app/hero-list.component.ts | 13 + .../src/app/heroes/hero-detail.component.1.ts | 55 + .../src/app/heroes/hero-detail.component.2.ts | 47 + .../src/app/heroes/hero-detail.component.ts | 66 + .../src/app/heroes/hero-list.component.1.ts | 52 + .../ts/src/app/heroes/hero-list.component.ts | 63 + .../router/ts/src/app/heroes/hero.service.ts | 27 + .../src/app/heroes/heroes-routing.module.ts | 24 + .../router/ts/src/app/heroes/heroes.module.ts | 33 + .../router/ts/src/app/login-routing.module.ts | 24 + .../router/ts/src/app/login.component.1.ts | 46 + .../router/ts/src/app/login.component.ts | 56 + .../router/ts/src/app/not-found.component.ts | 7 + .../src/app/selective-preloading-strategy.ts | 24 + aio/content/examples/router/ts/src/index.html | 32 + aio/content/examples/router/ts/src/main.ts | 6 + aio/content/examples/security/e2e-spec.ts | 37 + .../examples/security/ts/example-config.json | 0 aio/content/examples/security/ts/plnkr.json | 9 + .../examples/security/ts/plnkr.no-link.html | 288 ++ .../security/ts/src/app/app.component.ts | 13 + .../security/ts/src/app/app.module.ts | 18 + .../ts/src/app/bypass-security.component.html | 17 + .../ts/src/app/bypass-security.component.ts | 39 + .../src/app/inner-html-binding.component.html | 6 + .../src/app/inner-html-binding.component.ts | 13 + .../examples/security/ts/src/index.html | 26 + aio/content/examples/security/ts/src/main.ts | 6 + .../examples/server-communication/e2e-spec.ts | 138 + .../ts/example-config.json | 0 .../server-communication/ts/plnkr.json | 10 + .../ts/plnkr.no-link.html | 610 +++ .../ts/src/app/app.component.ts | 13 + .../ts/src/app/app.module.1.ts | 23 + .../ts/src/app/app.module.ts | 46 + .../app/default-request-options.service.ts | 16 + .../ts/src/app/hero-data.ts | 13 + .../ts/src/app/heroes.json | 8 + .../ts/src/app/toh/hero-list.component.html | 11 + .../app/toh/hero-list.component.promise.ts | 41 + .../ts/src/app/toh/hero-list.component.ts | 45 + .../ts/src/app/toh/hero.service.promise.ts | 60 + .../ts/src/app/toh/hero.service.ts | 80 + .../ts/src/app/toh/hero.ts | 6 + .../ts/src/app/wiki/wiki-smart.component.ts | 48 + .../ts/src/app/wiki/wiki.component.ts | 26 + .../ts/src/app/wiki/wikipedia.service.1.ts | 26 + .../ts/src/app/wiki/wikipedia.service.ts | 30 + .../server-communication/ts/src/index.html | 27 + .../server-communication/ts/src/main.ts | 5 + aio/content/examples/setup/e2e-spec.ts | 17 + .../examples/setup/ts/example-config.json | 3 + .../examples/setup/ts/non-essential-files.txt | 13 + aio/content/examples/setup/ts/plnkr.json | 13 + .../examples/setup/ts/plnkr.no-link.html | 189 + .../setup/ts/quickstart-specs.plnkr.json | 13 + .../ts/quickstart-specs.plnkr.no-link.html | 264 + .../setup/ts/src/app/app.component.spec.ts | 33 + .../setup/ts/src/app/app.component.ts | 8 + .../examples/setup/ts/src/app/app.module.ts | 11 + aio/content/examples/setup/ts/src/index.html | 28 + aio/content/examples/setup/ts/src/main.ts | 5 + .../setup/ts/src/quickstart-specs.html | 41 + .../structural-directives/e2e-spec.ts | 58 + .../ts/example-config.json | 0 .../structural-directives/ts/plnkr.json | 13 + .../ts/plnkr.no-link.html | 612 +++ .../ts/src/app/app.component.css | 70 + .../ts/src/app/app.component.html | 252 + .../ts/src/app/app.component.ts | 24 + .../ts/src/app/app.module.ts | 19 + .../ts/src/app/hero-switch.components.ts | 43 + .../structural-directives/ts/src/app/hero.ts | 13 + .../ts/src/app/scrap.txt | 21 + .../ts/src/app/unless.directive.ts | 55 + .../structural-directives/ts/src/index.html | 27 + .../structural-directives/ts/src/main.ts | 6 + aio/content/examples/style-guide/e2e-spec.ts | 191 + .../examples/style-guide/ts/.gitignore | 2 + .../style-guide/ts/example-config.json | 0 .../examples/style-guide/ts/plnkr.json | 9 + .../style-guide/ts/plnkr.no-link.html | 4350 +++++++++++++++++ .../ts/src/01-01/app/app.component.css | 0 .../ts/src/01-01/app/app.component.ts | 15 + .../ts/src/01-01/app/app.module.ts | 27 + .../01-01/app/heroes/hero.component.avoid.ts | 49 + .../src/01-01/app/heroes/heroes.component.ts | 21 + .../ts/src/01-01/app/heroes/index.ts | 2 + .../src/01-01/app/heroes/shared/hero.model.ts | 5 + .../01-01/app/heroes/shared/hero.service.ts | 11 + .../ts/src/01-01/app/heroes/shared/index.ts | 3 + .../01-01/app/heroes/shared/mock-heroes.ts | 8 + .../style-guide/ts/src/01-01/app/index.ts | 2 + .../examples/style-guide/ts/src/01-01/main.ts | 6 + .../ts/src/02-05/app/app.component.ts | 11 + .../ts/src/02-05/app/app.module.ts | 23 + .../examples/style-guide/ts/src/02-05/main.ts | 8 + .../ts/src/02-07/app/app.component.ts | 10 + .../ts/src/02-07/app/app.module.ts | 19 + .../02-07/app/heroes/hero.component.avoid.ts | 11 + .../ts/src/02-07/app/heroes/hero.component.ts | 13 + .../ts/src/02-07/app/heroes/index.ts | 1 + .../style-guide/ts/src/02-07/app/index.ts | 3 + .../ts/src/02-07/app/users/index.ts | 1 + .../02-07/app/users/users.component.avoid.ts | 11 + .../ts/src/02-07/app/users/users.component.ts | 13 + .../ts/src/02-08/app/app.component.ts | 7 + .../ts/src/02-08/app/app.module.ts | 19 + .../style-guide/ts/src/02-08/app/index.ts | 2 + .../ts/src/02-08/app/shared/index.ts | 2 + .../app/shared/input-highlight.directive.ts | 10 + .../app/shared/validate.directive.avoid.ts | 10 + .../02-08/app/shared/validate.directive.ts | 9 + .../ts/src/03-01/app/app.component.ts | 18 + .../ts/src/03-01/app/app.module.ts | 15 + .../03-01/app/core/exception.service.avoid.ts | 11 + .../src/03-01/app/core/exception.service.ts | 14 + .../ts/src/03-01/app/core/index.ts | 1 + .../style-guide/ts/src/03-01/app/index.ts | 2 + .../ts/src/03-02/app/app.component.ts | 19 + .../ts/src/03-02/app/app.module.ts | 17 + .../ts/src/03-02/app/core/data.service.ts | 4 + .../ts/src/03-02/app/core/index.ts | 1 + .../style-guide/ts/src/03-02/app/index.ts | 2 + .../ts/src/03-03/app/app.component.ts | 18 + .../ts/src/03-03/app/app.module.ts | 15 + .../app/core/hero-collector.service.avoid.ts | 15 + .../03-03/app/core/hero-collector.service.ts | 25 + .../ts/src/03-03/app/core/hero.model.avoid.ts | 14 + .../ts/src/03-03/app/core/hero.model.ts | 7 + .../ts/src/03-03/app/core/index.ts | 2 + .../style-guide/ts/src/03-03/app/index.ts | 2 + .../ts/src/03-04/app/app.component.ts | 27 + .../ts/src/03-04/app/app.module.ts | 17 + .../ts/src/03-04/app/core/index.ts | 1 + .../src/03-04/app/core/toast.service.avoid.ts | 27 + .../ts/src/03-04/app/core/toast.service.ts | 32 + .../style-guide/ts/src/03-04/app/index.ts | 2 + .../ts/src/03-06/app/app.component.html | 6 + .../ts/src/03-06/app/app.component.ts | 22 + .../ts/src/03-06/app/app.module.ts | 17 + .../src/03-06/app/core/exception.service.ts | 4 + .../ts/src/03-06/app/core/index.ts | 6 + .../ts/src/03-06/app/core/spinner/index.ts | 3 + .../app/core/spinner/spinner.component.ts | 16 + .../03-06/app/core/spinner/spinner.service.ts | 12 + .../ts/src/03-06/app/core/toast/index.ts | 3 + .../03-06/app/core/toast/toast.component.ts | 13 + .../src/03-06/app/core/toast/toast.service.ts | 6 + .../ts/src/03-06/app/heroes/index.ts | 1 + .../src/03-06/app/heroes/shared/hero.model.ts | 7 + .../app/heroes/shared/hero.service.avoid.ts | 32 + .../03-06/app/heroes/shared/hero.service.ts | 32 + .../ts/src/03-06/app/heroes/shared/index.ts | 2 + .../style-guide/ts/src/03-06/app/index.ts | 3 + .../03-06/app/shared/toast/toast.component.ts | 13 + .../ts/src/04-08/app/app.component.ts | 8 + .../ts/src/04-08/app/app.module.ts | 28 + .../04-08/app/heroes/heroes.component.html | 1 + .../src/04-08/app/heroes/heroes.component.ts | 12 + .../ts/src/04-10/app/app.component.ts | 8 + .../ts/src/04-10/app/app.module.ts | 30 + .../04-10/app/heroes/heroes.component.html | 8 + .../src/04-10/app/heroes/heroes.component.ts | 28 + .../filter-text/filter-text.component.ts | 27 + .../shared/filter-text/filter-text.service.ts | 30 + .../ts/src/04-10/app/shared/init-caps.pipe.ts | 7 + .../ts/src/04-10/app/shared/shared.module.ts | 24 + .../ts/src/04-11/app/app.component.ts | 12 + .../ts/src/04-11/app/app.module.ts | 30 + .../ts/src/04-11/app/core/core.module.ts | 19 + .../ts/src/04-11/app/core/index.ts | 4 + .../ts/src/04-11/app/core/logger.service.ts | 13 + .../src/04-11/app/core/nav/nav.component.css | 63 + .../src/04-11/app/core/nav/nav.component.html | 14 + .../src/04-11/app/core/nav/nav.component.ts | 20 + .../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 + .../04-11/app/heroes/heroes.component.html | 12 + .../src/04-11/app/heroes/heroes.component.ts | 33 + .../ts/src/04-12/app/app.component.ts | 11 + .../ts/src/04-12/app/app.module.ts | 30 + .../ts/src/04-12/app/core/core.module.ts | 21 + .../ts/src/04-12/app/core/index.ts | 3 + .../ts/src/04-12/app/core/logger.service.ts | 13 + .../src/04-12/app/core/module-import-guard.ts | 6 + .../src/04-12/app/core/nav/nav.component.css | 63 + .../src/04-12/app/core/nav/nav.component.html | 14 + .../src/04-12/app/core/nav/nav.component.ts | 20 + .../04-12/app/heroes/heroes.component.html | 12 + .../src/04-12/app/heroes/heroes.component.ts | 25 + .../ts/src/05-02/app/app.component.html | 2 + .../ts/src/05-02/app/app.component.ts | 8 + .../ts/src/05-02/app/app.module.ts | 17 + .../ts/src/05-02/app/heroes/index.ts | 1 + .../hero-button.component.avoid.ts | 12 + .../hero-button/hero-button.component.html | 1 + .../hero-button/hero-button.component.ts | 10 + .../app/heroes/shared/hero-button/index.ts | 1 + .../ts/src/05-02/app/heroes/shared/index.ts | 1 + .../style-guide/ts/src/05-02/app/index.ts | 2 + .../ts/src/05-03/app/app.component.avoid.html | 4 + .../ts/src/05-03/app/app.component.html | 2 + .../ts/src/05-03/app/app.component.ts | 8 + .../ts/src/05-03/app/app.module.ts | 17 + .../ts/src/05-03/app/heroes/index.ts | 1 + .../hero-button.component.avoid.ts | 11 + .../hero-button/hero-button.component.html | 1 + .../hero-button/hero-button.component.ts | 10 + .../app/heroes/shared/hero-button/index.ts | 1 + .../ts/src/05-03/app/heroes/shared/index.ts | 1 + .../style-guide/ts/src/05-03/app/index.ts | 2 + .../ts/src/05-04/app/app.component.ts | 7 + .../ts/src/05-04/app/app.module.ts | 21 + .../app/heroes/heroes.component.avoid.ts | 64 + .../src/05-04/app/heroes/heroes.component.css | 28 + .../05-04/app/heroes/heroes.component.html | 12 + .../src/05-04/app/heroes/heroes.component.ts | 23 + .../ts/src/05-04/app/heroes/index.ts | 2 + .../src/05-04/app/heroes/shared/hero.model.ts | 5 + .../05-04/app/heroes/shared/hero.service.ts | 18 + .../ts/src/05-04/app/heroes/shared/index.ts | 2 + .../style-guide/ts/src/05-04/app/index.ts | 2 + .../ts/src/05-12/app/app.component.ts | 7 + .../ts/src/05-12/app/app.module.ts | 17 + .../ts/src/05-12/app/heroes/index.ts | 1 + .../hero-button.component.avoid.ts | 20 + .../hero-button/hero-button.component.ts | 13 + .../app/heroes/shared/hero-button/index.ts | 1 + .../ts/src/05-12/app/heroes/shared/index.ts | 1 + .../style-guide/ts/src/05-12/app/index.ts | 2 + .../ts/src/05-13/app/app.component.avoid.html | 5 + .../ts/src/05-13/app/app.component.html | 6 + .../ts/src/05-13/app/app.component.ts | 8 + .../ts/src/05-13/app/app.module.ts | 17 + .../ts/src/05-13/app/heroes/index.ts | 1 + .../hero-button.component.avoid.ts | 14 + .../hero-button/hero-button.component.ts | 14 + .../app/heroes/shared/hero-button/index.ts | 1 + .../heroes/shared/hero-highlight.directive.ts | 15 + .../ts/src/05-13/app/heroes/shared/index.ts | 2 + .../style-guide/ts/src/05-13/app/index.ts | 2 + .../ts/src/05-14/app/app.component.ts | 7 + .../ts/src/05-14/app/app.module.ts | 17 + .../style-guide/ts/src/05-14/app/index.ts | 2 + .../ts/src/05-14/app/shared/index.ts | 1 + .../ts/src/05-14/app/shared/toast/index.ts | 1 + .../app/shared/toast/toast.component.avoid.ts | 40 + .../05-14/app/shared/toast/toast.component.ts | 45 + .../ts/src/05-15/app/app.component.ts | 10 + .../ts/src/05-15/app/app.module.ts | 19 + .../hero-list/hero-list.component.avoid.ts | 39 + .../heroes/hero-list/hero-list.component.ts | 23 + .../src/05-15/app/heroes/hero-list/index.ts | 1 + .../ts/src/05-15/app/heroes/index.ts | 2 + .../src/05-15/app/heroes/shared/hero.model.ts | 5 + .../05-15/app/heroes/shared/hero.service.ts | 15 + .../ts/src/05-15/app/heroes/shared/index.ts | 3 + .../style-guide/ts/src/05-15/app/index.ts | 2 + .../ts/src/05-16/app/app.component.avoid.html | 4 + .../ts/src/05-16/app/app.component.html | 2 + .../ts/src/05-16/app/app.component.ts | 8 + .../ts/src/05-16/app/app.module.ts | 19 + .../05-16/app/heroes/hero.component.avoid.ts | 13 + .../ts/src/05-16/app/heroes/hero.component.ts | 14 + .../ts/src/05-16/app/heroes/index.ts | 1 + .../style-guide/ts/src/05-16/app/index.ts | 2 + .../ts/src/05-17/app/app.component.ts | 7 + .../ts/src/05-17/app/app.module.ts | 20 + .../hero-list/hero-list.component.avoid.ts | 24 + .../heroes/hero-list/hero-list.component.ts | 35 + .../src/05-17/app/heroes/hero-list/index.ts | 1 + .../05-17/app/heroes/hero/hero.component.ts | 13 + .../ts/src/05-17/app/heroes/hero/index.ts | 1 + .../ts/src/05-17/app/heroes/index.ts | 3 + .../src/05-17/app/heroes/shared/hero.model.ts | 5 + .../ts/src/05-17/app/heroes/shared/index.ts | 1 + .../style-guide/ts/src/05-17/app/index.ts | 2 + .../ts/src/06-01/app/app.component.html | 2 + .../ts/src/06-01/app/app.component.ts | 8 + .../ts/src/06-01/app/app.module.ts | 17 + .../style-guide/ts/src/06-01/app/index.ts | 2 + .../06-01/app/shared/highlight.directive.ts | 13 + .../ts/src/06-01/app/shared/index.ts | 1 + .../ts/src/06-03/app/app.component.ts | 9 + .../ts/src/06-03/app/app.module.ts | 17 + .../style-guide/ts/src/06-03/app/index.ts | 2 + .../ts/src/06-03/app/shared/index.ts | 2 + .../06-03/app/shared/validator.directive.ts | 12 + .../06-03/app/shared/validator2.directive.ts | 16 + .../ts/src/07-01/app/app.component.html | 5 + .../ts/src/07-01/app/app.component.ts | 19 + .../ts/src/07-01/app/app.module.ts | 17 + .../ts/src/07-01/app/heroes/index.ts | 1 + .../src/07-01/app/heroes/shared/hero.model.ts | 5 + .../07-01/app/heroes/shared/hero.service.ts | 17 + .../ts/src/07-01/app/heroes/shared/index.ts | 2 + .../style-guide/ts/src/07-01/app/index.ts | 2 + .../ts/src/07-03/app/app.component.ts | 13 + .../ts/src/07-03/app/app.module.ts | 19 + .../heroes/hero-list/hero-list.component.ts | 20 + .../src/07-03/app/heroes/hero-list/index.ts | 1 + .../ts/src/07-03/app/heroes/index.ts | 2 + .../src/07-03/app/heroes/shared/hero.model.ts | 5 + .../07-03/app/heroes/shared/hero.service.ts | 15 + .../ts/src/07-03/app/heroes/shared/index.ts | 3 + .../style-guide/ts/src/07-03/app/index.ts | 2 + .../ts/src/07-04/app/app.component.ts | 19 + .../ts/src/07-04/app/app.module.ts | 17 + .../ts/src/07-04/app/heroes/index.ts | 1 + .../heroes/shared/hero-arena.service.avoid.ts | 14 + .../app/heroes/shared/hero-arena.service.ts | 21 + .../src/07-04/app/heroes/shared/hero.model.ts | 5 + .../07-04/app/heroes/shared/hero.service.ts | 15 + .../ts/src/07-04/app/heroes/shared/index.ts | 4 + .../style-guide/ts/src/07-04/app/index.ts | 2 + .../ts/src/09-01/app/app.component.ts | 7 + .../ts/src/09-01/app/app.module.ts | 17 + .../ts/src/09-01/app/heroes/index.ts | 1 + .../hero-button.component.avoid.ts | 15 + .../hero-button/hero-button.component.ts | 14 + .../app/heroes/shared/hero-button/index.ts | 1 + .../ts/src/09-01/app/heroes/shared/index.ts | 1 + .../style-guide/ts/src/09-01/app/index.ts | 2 + .../style-guide/ts/src/app/app.component.html | 1 + .../style-guide/ts/src/app/app.component.ts | 8 + .../style-guide/ts/src/app/app.routes.ts | 8 + .../style-guide/ts/src/app/hero-data.ts | 11 + .../examples/style-guide/ts/src/index.html | 30 + .../examples/style-guide/ts/src/main.ts | 99 + .../style-guide/ts/src/systemjs.custom.js | 51 + aio/content/examples/styleguide/e2e-spec.ts | 16 + aio/content/examples/styleguide/foo.dart | 17 + aio/content/examples/styleguide/foo.yaml | 21 + .../styleguide/js/example-config.json | 0 aio/content/examples/styleguide/js/spec.js | 8 + aio/content/examples/styleguide/js/src/app.js | 55 + .../examples/styleguide/js/src/index.html | 27 + .../examples/styleguide/jsonly.zipconfig.json | 3 + .../examples/styleguide/package.1.json | 23 + .../styleguide/ts/example-config.json | 0 .../styleguide/ts/src/app/app.component.ts | 7 + .../styleguide/ts/src/app/app.module.ts | 11 + .../examples/styleguide/ts/src/index.html | 25 + .../examples/styleguide/ts/src/main.ts | 5 + .../examples/styleguide/zipconfig.json | 4 + .../examples/template-syntax/e2e-spec.ts | 43 + .../template-syntax/ts/example-config.json | 0 .../examples/template-syntax/ts/plnkr.json | 6 + .../template-syntax/ts/plnkr.no-link.html | 1414 ++++++ .../ts/src/app/app.component.css | 17 + .../ts/src/app/app.component.html | 822 ++++ .../ts/src/app/app.component.ts | 213 + .../ts/src/app/app.module.1.ts | 15 + .../template-syntax/ts/src/app/app.module.ts | 29 + .../ts/src/app/click.directive.ts | 41 + .../ts/src/app/hero-detail.component.ts | 80 + .../ts/src/app/hero-form.component.html | 16 + .../ts/src/app/hero-form.component.ts | 31 + .../ts/src/app/hero-switch.components.ts | 42 + .../template-syntax/ts/src/app/hero.ts | 33 + .../ts/src/app/sizer.component.ts | 24 + .../template-syntax/ts/src/images/hero.png | Bin 0 -> 7312 bytes .../template-syntax/ts/src/images/ng-logo.png | Bin 0 -> 7229 bytes .../template-syntax/ts/src/images/villain.png | Bin 0 -> 10914 bytes .../template-syntax/ts/src/index.html | 26 + .../examples/template-syntax/ts/src/main.ts | 5 + .../ts/src/template-syntax.css | 13 + aio/content/examples/testing/ts/.gitignore | 1 + .../examples/testing/ts/1st-specs.plnkr.json | 14 + .../testing/ts/1st-specs.plnkr.no-link.html | 339 ++ .../examples/testing/ts/app-specs.plnkr.json | 24 + .../testing/ts/app-specs.plnkr.no-link.html | 3378 +++++++++++++ .../examples/testing/ts/bag-specs.plnkr.json | 21 + .../testing/ts/bag-specs.plnkr.no-link.html | 1828 +++++++ .../examples/testing/ts/bag.plnkr.json | 14 + .../testing/ts/bag.plnkr.no-link.html | 623 +++ .../testing/ts/banner-inline-specs.plnkr.json | 15 + .../ts/banner-inline-specs.plnkr.no-link.html | 289 ++ .../testing/ts/banner-specs.plnkr.json | 17 + .../ts/banner-specs.plnkr.no-link.html | 311 ++ .../examples/testing/ts/example-config.json | 0 aio/content/examples/testing/ts/plnkr.json | 18 + .../examples/testing/ts/plnkr.no-link.html | 1160 +++++ .../examples/testing/ts/src/1st-specs.html | 41 + .../examples/testing/ts/src/app-specs.html | 56 + .../examples/testing/ts/src/app/1st.spec.ts | 5 + .../ts/src/app/about.component.spec.ts | 27 + .../testing/ts/src/app/about.component.ts | 9 + .../testing/ts/src/app/app-routing.module.ts | 16 + .../testing/ts/src/app/app.component.html | 11 + .../ts/src/app/app.component.router.spec.ts | 198 + .../testing/ts/src/app/app.component.spec.ts | 148 + .../testing/ts/src/app/app.component.ts | 8 + .../examples/testing/ts/src/app/app.module.ts | 29 + .../ts/src/app/bag/async-helper.spec.ts | 68 + .../ts/src/app/bag/bag-external-template.html | 1 + .../testing/ts/src/app/bag/bag-main.ts | 5 + .../ts/src/app/bag/bag.no-testbed.spec.ts | 130 + .../testing/ts/src/app/bag/bag.spec.ts | 680 +++ .../examples/testing/ts/src/app/bag/bag.ts | 456 ++ .../src/app/banner-inline.component.spec.ts | 55 + .../ts/src/app/banner-inline.component.ts | 11 + .../testing/ts/src/app/banner.component.css | 1 + .../banner.component.detect-changes.spec.ts | 59 + .../testing/ts/src/app/banner.component.html | 1 + .../ts/src/app/banner.component.spec.ts | 53 + .../testing/ts/src/app/banner.component.ts | 13 + .../dashboard/dashboard-hero.component.css | 28 + .../dashboard/dashboard-hero.component.html | 4 + .../dashboard-hero.component.spec.ts | 124 + .../app/dashboard/dashboard-hero.component.ts | 18 + .../src/app/dashboard/dashboard.component.css | 35 + .../app/dashboard/dashboard.component.html | 9 + .../dashboard.component.no-testbed.spec.ts | 57 + .../app/dashboard/dashboard.component.spec.ts | 147 + .../src/app/dashboard/dashboard.component.ts | 41 + .../ts/src/app/dashboard/dashboard.module.ts | 20 + .../ts/src/app/hero/hero-detail.component.css | 29 + .../src/app/hero/hero-detail.component.html | 12 + .../hero-detail.component.no-testbed.spec.ts | 58 + .../app/hero/hero-detail.component.spec.ts | 364 ++ .../ts/src/app/hero/hero-detail.component.ts | 64 + .../ts/src/app/hero/hero-detail.service.ts | 26 + .../ts/src/app/hero/hero-list.component.css | 59 + .../ts/src/app/hero/hero-list.component.html | 8 + .../src/app/hero/hero-list.component.spec.ts | 139 + .../ts/src/app/hero/hero-list.component.ts | 28 + .../ts/src/app/hero/hero-routing.module.ts | 18 + .../testing/ts/src/app/hero/hero.module.ts | 9 + .../testing/ts/src/app/model/hero.service.ts | 30 + .../testing/ts/src/app/model/hero.spec.ts | 20 + .../examples/testing/ts/src/app/model/hero.ts | 4 + .../src/app/model/http-hero.service.spec.ts | 127 + .../ts/src/app/model/http-hero.service.ts | 68 + .../testing/ts/src/app/model/index.ts | 7 + .../testing/ts/src/app/model/test-heroes.ts | 11 + .../app/model/testing/fake-hero.service.ts | 41 + .../testing/ts/src/app/model/testing/index.ts | 1 + .../testing/ts/src/app/model/user.service.ts | 7 + .../app/shared/highlight.directive.spec.ts | 104 + .../ts/src/app/shared/highlight.directive.ts | 20 + .../ts/src/app/shared/shared.module.ts | 15 + .../ts/src/app/shared/title-case.pipe.spec.ts | 34 + .../ts/src/app/shared/title-case.pipe.ts | 11 + .../ts/src/app/shared/twain.component.spec.ts | 92 + .../twain.component.timer.spec.ts.no-work | 116 + .../shared/twain.component.timer.ts.no-work | 27 + .../ts/src/app/shared/twain.component.ts | 20 + .../ts/src/app/shared/twain.service.ts | 32 + .../ts/src/app/welcome.component.spec.ts | 108 + .../testing/ts/src/app/welcome.component.ts | 18 + .../examples/testing/ts/src/bag-specs.html | 42 + aio/content/examples/testing/ts/src/bag.html | 26 + .../testing/ts/src/banner-inline-specs.html | 40 + .../examples/testing/ts/src/banner-specs.html | 40 + .../testing/ts/src/browser-test-shim.js | 87 + .../examples/testing/ts/src/index.html | 27 + aio/content/examples/testing/ts/src/main.ts | 5 + .../examples/testing/ts/src/testing/index.ts | 43 + .../ts/src/testing/jasmine-matchers.d.ts | 5 + .../ts/src/testing/jasmine-matchers.ts | 45 + .../testing/ts/src/testing/router-stubs.ts | 57 + .../app_component_snippets_pt1.dart | 37 + aio/content/examples/toh-1/e2e-spec.ts | 70 + .../ts-snippets/app.component.snippets.pt1.ts | 39 + .../examples/toh-1/ts/example-config.json | 0 aio/content/examples/toh-1/ts/plnkr.json | 9 + .../examples/toh-1/ts/plnkr.no-link.html | 215 + .../toh-1/ts/src/app/app.component.ts | 32 + .../examples/toh-1/ts/src/app/app.module.ts | 18 + aio/content/examples/toh-1/ts/src/index.html | 25 + aio/content/examples/toh-1/ts/src/main.ts | 6 + .../app_component_snippets_pt2.dart | 69 + aio/content/examples/toh-2/e2e-spec.ts | 133 + .../ts-snippets/app.component.snippets.pt2.ts | 69 + .../examples/toh-2/ts/example-config.json | 0 aio/content/examples/toh-2/ts/plnkr.json | 9 + .../examples/toh-2/ts/plnkr.no-link.html | 289 ++ .../toh-2/ts/src/app/app.component.ts | 109 + .../examples/toh-2/ts/src/app/app.module.ts | 18 + aio/content/examples/toh-2/ts/src/index.html | 25 + aio/content/examples/toh-2/ts/src/main.ts | 6 + aio/content/examples/toh-3/e2e-spec.ts | 133 + .../examples/toh-3/ts/example-config.json | 0 aio/content/examples/toh-3/ts/plnkr.json | 9 + .../examples/toh-3/ts/plnkr.no-link.html | 318 ++ .../toh-3/ts/src/app/app.component.ts | 95 + .../examples/toh-3/ts/src/app/app.module.ts | 24 + .../toh-3/ts/src/app/hero-detail.component.ts | 39 + aio/content/examples/toh-3/ts/src/app/hero.ts | 6 + aio/content/examples/toh-3/ts/src/index.html | 25 + aio/content/examples/toh-3/ts/src/main.ts | 6 + aio/content/examples/toh-4/e2e-spec.ts | 133 + .../examples/toh-4/ts/example-config.json | 0 aio/content/examples/toh-4/ts/plnkr.json | 10 + .../examples/toh-4/ts/plnkr.no-link.html | 362 ++ .../toh-4/ts/src/app/app.component.1.ts | 65 + .../toh-4/ts/src/app/app.component.ts | 97 + .../examples/toh-4/ts/src/app/app.module.ts | 19 + .../toh-4/ts/src/app/hero-detail.component.ts | 22 + .../toh-4/ts/src/app/hero.service.1.ts | 24 + .../toh-4/ts/src/app/hero.service.2.ts | 13 + .../examples/toh-4/ts/src/app/hero.service.ts | 29 + aio/content/examples/toh-4/ts/src/app/hero.ts | 4 + .../examples/toh-4/ts/src/app/mock-heroes.ts | 15 + aio/content/examples/toh-4/ts/src/index.html | 25 + aio/content/examples/toh-4/ts/src/main.1.ts | 4 + aio/content/examples/toh-4/ts/src/main.ts | 4 + aio/content/examples/toh-5/e2e-spec.ts | 190 + .../examples/toh-5/ts/example-config.json | 0 aio/content/examples/toh-5/ts/plnkr.json | 10 + .../examples/toh-5/ts/plnkr.no-link.html | 661 +++ .../toh-5/ts/src/app/app-routing.module.ts | 20 + .../toh-5/ts/src/app/app.component.1.ts | 42 + .../toh-5/ts/src/app/app.component.css | 29 + .../toh-5/ts/src/app/app.component.ts | 23 + .../examples/toh-5/ts/src/app/app.module.1.ts | 28 + .../examples/toh-5/ts/src/app/app.module.2.ts | 48 + .../examples/toh-5/ts/src/app/app.module.3.ts | 58 + .../examples/toh-5/ts/src/app/app.module.ts | 35 + .../ts/src/app/dashboard.component.1.html | 9 + .../toh-5/ts/src/app/dashboard.component.1.ts | 8 + .../toh-5/ts/src/app/dashboard.component.css | 62 + .../toh-5/ts/src/app/dashboard.component.html | 11 + .../toh-5/ts/src/app/dashboard.component.ts | 34 + .../ts/src/app/hero-detail.component.1.ts | 29 + .../ts/src/app/hero-detail.component.css | 30 + .../ts/src/app/hero-detail.component.html | 14 + .../toh-5/ts/src/app/hero-detail.component.ts | 47 + .../examples/toh-5/ts/src/app/hero.service.ts | 26 + aio/content/examples/toh-5/ts/src/app/hero.ts | 4 + .../toh-5/ts/src/app/heroes.component.css | 59 + .../toh-5/ts/src/app/heroes.component.html | 19 + .../toh-5/ts/src/app/heroes.component.ts | 49 + .../examples/toh-5/ts/src/app/mock-heroes.ts | 15 + aio/content/examples/toh-5/ts/src/index.html | 33 + aio/content/examples/toh-5/ts/src/main.ts | 6 + aio/content/examples/toh-6/e2e-spec.ts | 283 ++ aio/content/examples/toh-6/ts/.gitignore | 8 + aio/content/examples/toh-6/ts/aot/index.html | 22 + aio/content/examples/toh-6/ts/aot/styles.css | 116 + .../examples/toh-6/ts/bs-config.aot.json | 14 + .../examples/toh-6/ts/example-config.json | 0 aio/content/examples/toh-6/ts/plnkr.json | 10 + .../examples/toh-6/ts/plnkr.no-link.html | 883 ++++ .../examples/toh-6/ts/rollup-config.js | 32 + .../toh-6/ts/src/app/app-routing.module.ts | 19 + .../toh-6/ts/src/app/app.component.css | 29 + .../toh-6/ts/src/app/app.component.ts | 20 + .../examples/toh-6/ts/src/app/app.module.ts | 52 + .../toh-6/ts/src/app/dashboard.component.css | 62 + .../toh-6/ts/src/app/dashboard.component.html | 10 + .../toh-6/ts/src/app/dashboard.component.ts | 23 + .../ts/src/app/hero-detail.component.css | 30 + .../ts/src/app/hero-detail.component.html | 14 + .../toh-6/ts/src/app/hero-detail.component.ts | 41 + .../ts/src/app/hero-search.component.css | 16 + .../ts/src/app/hero-search.component.html | 11 + .../toh-6/ts/src/app/hero-search.component.ts | 70 + .../toh-6/ts/src/app/hero-search.service.ts | 20 + .../examples/toh-6/ts/src/app/hero.service.ts | 87 + aio/content/examples/toh-6/ts/src/app/hero.ts | 4 + .../toh-6/ts/src/app/heroes.component.css | 68 + .../toh-6/ts/src/app/heroes.component.html | 29 + .../toh-6/ts/src/app/heroes.component.ts | 62 + .../ts/src/app/in-memory-data.service.ts | 19 + aio/content/examples/toh-6/ts/src/index.html | 26 + aio/content/examples/toh-6/ts/src/main-aot.ts | 6 + aio/content/examples/toh-6/ts/src/main.ts | 6 + .../examples/toh-6/ts/src/tsconfig.1.json | 21 + .../examples/toh-6/ts/tsconfig-aot.json | 26 + .../toh-6/ts/tsconfig-aot.json.annotated | 28 + aio/content/examples/tsconfig.json | 24 + .../examples/upgrade-module/e2e-spec.ts | 182 + .../examples/upgrade-module/ts/.gitignore | 7 + .../upgrade-module/ts/example-config.json | 0 .../src/app/a-to-ajs-providers/app.module.ts | 34 + .../hero-detail.component.ts | 11 + .../ts/src/app/a-to-ajs-providers/heroes.ts | 13 + .../app/a-to-ajs-transclusion/app.module.ts | 39 + .../container.component.ts | 16 + .../hero-detail.component.ts | 28 + .../app/ajs-a-hybrid-bootstrap/app.module.ts | 29 + .../ts/src/app/ajs-bootstrap/app.module.ts | 10 + .../ts/src/app/ajs-ng-app/app.module.ts | 4 + .../src/app/ajs-to-a-projection/app.module.ts | 36 + .../hero-detail.component.ts | 16 + .../ajs-to-a-projection/main.controller.ts | 5 + .../ajs-upgraded-providers.ts | 12 + .../src/app/ajs-to-a-providers/app.module.ts | 44 + .../hero-detail.component.ts | 17 + .../app/ajs-to-a-providers/heroes.service.ts | 11 + .../ts/src/app/divide-routes/app.component.ts | 11 + .../ts/src/app/divide-routes/app.module.ts | 62 + .../ts/src/app/divide-routes/hero.module.ts | 32 + .../ts/src/app/divide-routes/main.ts | 10 + .../ts/src/app/downgrade-io/app.module.ts | 43 + .../app/downgrade-io/hero-detail.component.ts | 19 + .../src/app/downgrade-io/main.controller.ts | 12 + .../ts/src/app/downgrade-static/app.module.ts | 42 + .../downgrade-static/hero-detail.component.ts | 11 + .../ts/src/app/hero-detail.directive.ts | 22 + .../upgrade-module/ts/src/app/hero.ts | 5 + .../ts/src/app/upgrade-io/app.module.ts | 39 + .../src/app/upgrade-io/container.component.ts | 19 + .../app/upgrade-io/hero-detail.component.ts | 37 + .../ts/src/app/upgrade-static/app.module.ts | 41 + .../app/upgrade-static/container.component.ts | 11 + .../upgrade-static/hero-detail.component.ts | 25 + .../upgrade-module/ts/src/app/villain.ts | 5 + .../ts/src/index-a-to-ajs-providers.html | 31 + .../ts/src/index-a-to-ajs-transclusion.html | 30 + .../ts/src/index-ajs-a-hybrid-bootstrap.html | 28 + .../ts/src/index-ajs-to-a-projection.html | 37 + .../ts/src/index-ajs-to-a-providers.html | 31 + .../ts/src/index-bootstrap.html | 13 + .../ts/src/index-divide-routes.html | 31 + .../ts/src/index-downgrade-io.html | 44 + .../ts/src/index-downgrade-static.html | 32 + .../upgrade-module/ts/src/index-ng-app.html | 15 + .../ts/src/index-upgrade-io.html | 30 + .../ts/src/index-upgrade-static.html | 30 + .../ts/src/systemjs.config.1.js | 43 + .../upgrade-phonecat-1-typescript/README.md | 34 + .../upgrade-phonecat-1-typescript/e2e-spec.ts | 107 + .../ts/.gitignore | 1 + .../ts/app/app.animations.css | 67 + .../ts/app/app.animations.ts | 43 + .../ts/app/app.config.ts | 18 + .../ts/app/app.css | 93 + .../ts/app/app.module.ts | 10 + .../core/checkmark/checkmark.filter.spec.ts | 14 + .../ts/app/core/checkmark/checkmark.filter.ts | 8 + .../ts/app/core/core.module.ts | 4 + .../ts/app/core/phone/phone.module.ts | 4 + .../ts/app/core/phone/phone.service.spec.ts | 43 + .../ts/app/core/phone/phone.service.ts | 14 + .../ts/app/img/.gitkeep | 0 .../ts/app/img/phones/dell-streak-7.0.jpg | Bin 0 -> 23086 bytes .../ts/app/img/phones/dell-streak-7.1.jpg | Bin 0 -> 23269 bytes .../ts/app/img/phones/dell-streak-7.2.jpg | Bin 0 -> 4686 bytes .../ts/app/img/phones/dell-streak-7.3.jpg | Bin 0 -> 28319 bytes .../ts/app/img/phones/dell-streak-7.4.jpg | Bin 0 -> 28541 bytes .../ts/app/img/phones/motorola-atrix-4g.0.jpg | Bin 0 -> 23174 bytes .../ts/app/img/phones/motorola-atrix-4g.1.jpg | Bin 0 -> 16530 bytes .../ts/app/img/phones/motorola-atrix-4g.2.jpg | Bin 0 -> 23788 bytes .../ts/app/img/phones/motorola-atrix-4g.3.jpg | Bin 0 -> 19553 bytes .../img/phones/motorola-xoom-with-wi-fi.0.jpg | Bin 0 -> 34430 bytes .../img/phones/motorola-xoom-with-wi-fi.1.jpg | Bin 0 -> 28183 bytes .../img/phones/motorola-xoom-with-wi-fi.2.jpg | Bin 0 -> 4077 bytes .../img/phones/motorola-xoom-with-wi-fi.3.jpg | Bin 0 -> 32370 bytes .../img/phones/motorola-xoom-with-wi-fi.4.jpg | Bin 0 -> 15111 bytes .../img/phones/motorola-xoom-with-wi-fi.5.jpg | Bin 0 -> 14687 bytes .../ts/app/img/phones/motorola-xoom.0.jpg | Bin 0 -> 26175 bytes .../ts/app/img/phones/motorola-xoom.1.jpg | Bin 0 -> 23398 bytes .../ts/app/img/phones/motorola-xoom.2.jpg | Bin 0 -> 23686 bytes .../ts/app/img/phones/nexus-s.0.jpg | Bin 0 -> 19005 bytes .../ts/app/img/phones/nexus-s.1.jpg | Bin 0 -> 16354 bytes .../ts/app/img/phones/nexus-s.2.jpg | Bin 0 -> 6231 bytes .../ts/app/img/phones/nexus-s.3.jpg | Bin 0 -> 21118 bytes .../ts/app/index.html | 35 + .../phone-detail.component.spec.ts | 38 + .../phone-detail/phone-detail.component.ts | 24 + .../app/phone-detail/phone-detail.module.ts | 7 + .../phone-detail/phone-detail.template.html | 117 + .../phone-list/phone-list.component.spec.ts | 36 + .../ts/app/phone-list/phone-list.component.ts | 20 + .../ts/app/phone-list/phone-list.module.ts | 4 + .../app/phone-list/phone-list.template.html | 36 + .../ts/app/phones/dell-streak-7.json | 64 + .../ts/app/phones/motorola-atrix-4g.json | 62 + .../app/phones/motorola-xoom-with-wi-fi.json | 65 + .../ts/app/phones/motorola-xoom.json | 62 + .../ts/app/phones/nexus-s.json | 69 + .../ts/app/phones/phones.json | 155 + .../ts/example-config.json | 4 + .../ts/karma.conf.ajs.js | 32 + .../ts/run-unit-tests.sh | 7 + .../ts/tsconfig.ajs.json | 13 + .../ts/tsconfig.json | 22 + .../upgrade-phonecat-2-hybrid/README.md | 34 + .../upgrade-phonecat-2-hybrid/e2e-spec.ts | 107 + .../upgrade-phonecat-2-hybrid/ts/.gitignore | 8 + .../ts/aot/index.html | 40 + .../ts/app/ajs-upgraded-providers.ts | 14 + .../ts/app/app.animations.css | 67 + .../ts/app/app.animations.ts | 43 + .../ts/app/app.config.ts | 19 + .../upgrade-phonecat-2-hybrid/ts/app/app.css | 93 + .../ts/app/app.module.ajs.ts | 11 + .../ts/app/app.module.ts | 73 + .../app/core/checkmark/checkmark.pipe.spec.ts | 11 + .../ts/app/core/checkmark/checkmark.pipe.ts | 9 + .../ts/app/core/core.module.ts | 4 + .../ts/app/core/phone/phone.module.ts | 4 + .../ts/app/core/phone/phone.service.spec.ts | 51 + .../ts/app/core/phone/phone.service.ts | 42 + .../ts/app/img/.gitkeep | 0 .../ts/app/img/phones/dell-streak-7.0.jpg | Bin 0 -> 23086 bytes .../ts/app/img/phones/dell-streak-7.1.jpg | Bin 0 -> 23269 bytes .../ts/app/img/phones/dell-streak-7.2.jpg | Bin 0 -> 4686 bytes .../ts/app/img/phones/dell-streak-7.3.jpg | Bin 0 -> 28319 bytes .../ts/app/img/phones/dell-streak-7.4.jpg | Bin 0 -> 28541 bytes .../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 .../ts/app/img/phones/motorola-atrix-4g.0.jpg | Bin 0 -> 23174 bytes .../ts/app/img/phones/motorola-atrix-4g.1.jpg | Bin 0 -> 16530 bytes .../ts/app/img/phones/motorola-atrix-4g.2.jpg | Bin 0 -> 23788 bytes .../ts/app/img/phones/motorola-atrix-4g.3.jpg | Bin 0 -> 19553 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 .../img/phones/motorola-xoom-with-wi-fi.0.jpg | Bin 0 -> 34430 bytes .../img/phones/motorola-xoom-with-wi-fi.1.jpg | Bin 0 -> 28183 bytes .../img/phones/motorola-xoom-with-wi-fi.2.jpg | Bin 0 -> 4077 bytes .../img/phones/motorola-xoom-with-wi-fi.3.jpg | Bin 0 -> 32370 bytes .../img/phones/motorola-xoom-with-wi-fi.4.jpg | Bin 0 -> 15111 bytes .../img/phones/motorola-xoom-with-wi-fi.5.jpg | Bin 0 -> 14687 bytes .../ts/app/img/phones/motorola-xoom.0.jpg | Bin 0 -> 26175 bytes .../ts/app/img/phones/motorola-xoom.1.jpg | Bin 0 -> 23398 bytes .../ts/app/img/phones/motorola-xoom.2.jpg | Bin 0 -> 23686 bytes .../ts/app/img/phones/nexus-s.0.jpg | Bin 0 -> 19005 bytes .../ts/app/img/phones/nexus-s.1.jpg | Bin 0 -> 16354 bytes .../ts/app/img/phones/nexus-s.2.jpg | Bin 0 -> 6231 bytes .../ts/app/img/phones/nexus-s.3.jpg | Bin 0 -> 21118 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 .../ts/app/main-aot.ts | 10 + .../upgrade-phonecat-2-hybrid/ts/app/main.ts | 11 + .../phone-detail.component.ajs.ts | 28 + .../phone-detail.component.spec.ts | 59 + .../phone-detail/phone-detail.component.ts | 42 + .../app/phone-detail/phone-detail.module.ts | 7 + .../phone-detail/phone-detail.template.html | 120 + .../phone-list/phone-list.component.ajs.ts | 24 + .../phone-list/phone-list.component.spec.ts | 66 + .../ts/app/phone-list/phone-list.component.ts | 73 + .../ts/app/phone-list/phone-list.module.ts | 4 + .../app/phone-list/phone-list.template.html | 40 + .../ts/app/phones/dell-streak-7.json | 64 + .../ts/app/phones/motorola-atrix-4g.json | 62 + .../app/phones/motorola-xoom-with-wi-fi.json | 65 + .../ts/app/phones/motorola-xoom.json | 62 + .../ts/app/phones/nexus-s.json | 69 + .../ts/app/phones/phones.json | 155 + .../ts/bs-config.aot.json | 14 + .../ts/copy-dist-files.js | 25 + .../ts/example-config.json | 5 + .../upgrade-phonecat-2-hybrid/ts/index.html | 51 + .../ts/karma.conf.ajs.js | 73 + .../ts/package.ajs.json | 37 + .../ts/rollup-config.js | 21 + .../ts/run-unit-tests.sh | 7 + .../ts/systemjs.config.1.js | 50 + .../ts/tsconfig-aot.json | 27 + .../ts/tsconfig.json | 21 + .../upgrade-phonecat-3-router/README.md | 34 + .../upgrade-phonecat-3-router/e2e-spec.ts | 107 + .../upgrade-phonecat-3-router/ts/.gitignore | 7 + .../ts/aot/bs-config.json | 5 + .../ts/aot/index.html | 38 + .../ts/app/ajs-upgraded-providers.ts | 14 + .../ts/app/app-routing.module.ts | 30 + .../ts/app/app.animations.css | 67 + .../ts/app/app.animations.ts | 43 + .../ts/app/app.component.ts | 13 + .../ts/app/app.config.ts | 16 + .../upgrade-phonecat-3-router/ts/app/app.css | 93 + .../ts/app/app.module.ajs.ts | 11 + .../ts/app/app.module.ts | 42 + .../app/core/checkmark/checkmark.pipe.spec.ts | 11 + .../ts/app/core/checkmark/checkmark.pipe.ts | 9 + .../ts/app/core/core.module.ts | 4 + .../ts/app/core/phone/phone.module.ts | 4 + .../ts/app/core/phone/phone.service.spec.ts | 51 + .../ts/app/core/phone/phone.service.ts | 32 + .../ts/app/img/.gitkeep | 0 .../ts/app/img/phones/dell-streak-7.0.jpg | Bin 0 -> 23086 bytes .../ts/app/img/phones/dell-streak-7.1.jpg | Bin 0 -> 23269 bytes .../ts/app/img/phones/dell-streak-7.2.jpg | Bin 0 -> 4686 bytes .../ts/app/img/phones/dell-streak-7.3.jpg | Bin 0 -> 28319 bytes .../ts/app/img/phones/dell-streak-7.4.jpg | Bin 0 -> 28541 bytes .../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 .../ts/app/img/phones/motorola-atrix-4g.0.jpg | Bin 0 -> 23174 bytes .../ts/app/img/phones/motorola-atrix-4g.1.jpg | Bin 0 -> 16530 bytes .../ts/app/img/phones/motorola-atrix-4g.2.jpg | Bin 0 -> 23788 bytes .../ts/app/img/phones/motorola-atrix-4g.3.jpg | Bin 0 -> 19553 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 .../img/phones/motorola-xoom-with-wi-fi.0.jpg | Bin 0 -> 34430 bytes .../img/phones/motorola-xoom-with-wi-fi.1.jpg | Bin 0 -> 28183 bytes .../img/phones/motorola-xoom-with-wi-fi.2.jpg | Bin 0 -> 4077 bytes .../img/phones/motorola-xoom-with-wi-fi.3.jpg | Bin 0 -> 32370 bytes .../img/phones/motorola-xoom-with-wi-fi.4.jpg | Bin 0 -> 15111 bytes .../img/phones/motorola-xoom-with-wi-fi.5.jpg | Bin 0 -> 14687 bytes .../ts/app/img/phones/motorola-xoom.0.jpg | Bin 0 -> 26175 bytes .../ts/app/img/phones/motorola-xoom.1.jpg | Bin 0 -> 23398 bytes .../ts/app/img/phones/motorola-xoom.2.jpg | Bin 0 -> 23686 bytes .../ts/app/img/phones/nexus-s.0.jpg | Bin 0 -> 19005 bytes .../ts/app/img/phones/nexus-s.1.jpg | Bin 0 -> 16354 bytes .../ts/app/img/phones/nexus-s.2.jpg | Bin 0 -> 6231 bytes .../ts/app/img/phones/nexus-s.3.jpg | Bin 0 -> 21118 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 .../ts/app/main-aot.ts | 10 + .../upgrade-phonecat-3-router/ts/app/main.ts | 10 + .../phone-detail.component.spec.ts | 59 + .../phone-detail/phone-detail.component.ts | 34 + .../app/phone-detail/phone-detail.module.ts | 7 + .../phone-detail/phone-detail.template.html | 120 + .../phone-list/phone-list.component.spec.ts | 66 + .../ts/app/phone-list/phone-list.component.ts | 61 + .../ts/app/phone-list/phone-list.module.ts | 4 + .../app/phone-list/phone-list.template.html | 38 + .../ts/app/phones/dell-streak-7.json | 64 + .../ts/app/phones/motorola-atrix-4g.json | 62 + .../app/phones/motorola-xoom-with-wi-fi.json | 65 + .../ts/app/phones/motorola-xoom.json | 62 + .../ts/app/phones/nexus-s.json | 69 + .../ts/app/phones/phones.json | 155 + .../ts/bs-config.aot.json | 14 + .../ts/copy-dist-files.js | 25 + .../ts/example-config.json | 5 + .../upgrade-phonecat-3-router/ts/index.html | 44 + .../ts/rollup-config.js | 21 + .../ts/systemjs.config.1.js | 48 + .../ts/tsconfig-aot.json | 27 + .../ts/tsconfig.json | 21 + .../upgrade-phonecat-4-final/README.md | 24 + .../upgrade-phonecat-4-final/e2e-spec.ts | 109 + .../ts/app/app-routing.module.ts | 23 + .../ts/app/app.component.ts | 8 + .../upgrade-phonecat-4-final/ts/app/app.css | 93 + .../ts/app/app.module.ts | 34 + .../app/core/checkmark/checkmark.pipe.spec.ts | 10 + .../ts/app/core/checkmark/checkmark.pipe.ts | 9 + .../ts/app/core/phone/phone.service.spec.ts | 49 + .../ts/app/core/phone/phone.service.ts | 25 + .../ts/app/img/.gitkeep | 0 .../ts/app/img/phones/dell-streak-7.0.jpg | Bin 0 -> 23086 bytes .../ts/app/img/phones/dell-streak-7.1.jpg | Bin 0 -> 23269 bytes .../ts/app/img/phones/dell-streak-7.2.jpg | Bin 0 -> 4686 bytes .../ts/app/img/phones/dell-streak-7.3.jpg | Bin 0 -> 28319 bytes .../ts/app/img/phones/dell-streak-7.4.jpg | Bin 0 -> 28541 bytes .../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 .../ts/app/img/phones/motorola-atrix-4g.0.jpg | Bin 0 -> 23174 bytes .../ts/app/img/phones/motorola-atrix-4g.1.jpg | Bin 0 -> 16530 bytes .../ts/app/img/phones/motorola-atrix-4g.2.jpg | Bin 0 -> 23788 bytes .../ts/app/img/phones/motorola-atrix-4g.3.jpg | Bin 0 -> 19553 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 .../img/phones/motorola-xoom-with-wi-fi.0.jpg | Bin 0 -> 34430 bytes .../img/phones/motorola-xoom-with-wi-fi.1.jpg | Bin 0 -> 28183 bytes .../img/phones/motorola-xoom-with-wi-fi.2.jpg | Bin 0 -> 4077 bytes .../img/phones/motorola-xoom-with-wi-fi.3.jpg | Bin 0 -> 32370 bytes .../img/phones/motorola-xoom-with-wi-fi.4.jpg | Bin 0 -> 15111 bytes .../img/phones/motorola-xoom-with-wi-fi.5.jpg | Bin 0 -> 14687 bytes .../ts/app/img/phones/motorola-xoom.0.jpg | Bin 0 -> 26175 bytes .../ts/app/img/phones/motorola-xoom.1.jpg | Bin 0 -> 23398 bytes .../ts/app/img/phones/motorola-xoom.2.jpg | Bin 0 -> 23686 bytes .../ts/app/img/phones/nexus-s.0.jpg | Bin 0 -> 19005 bytes .../ts/app/img/phones/nexus-s.1.jpg | Bin 0 -> 16354 bytes .../ts/app/img/phones/nexus-s.2.jpg | Bin 0 -> 6231 bytes .../ts/app/img/phones/nexus-s.3.jpg | Bin 0 -> 21118 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-4-final/ts/app/main.ts | 10 + .../phone-detail.component.spec.ts | 59 + .../phone-detail/phone-detail.component.ts | 28 + .../phone-detail/phone-detail.template.html | 120 + .../phone-list/phone-list.component.spec.ts | 71 + .../ts/app/phone-list/phone-list.component.ts | 54 + .../app/phone-list/phone-list.template.html | 40 + .../ts/app/phones/dell-streak-7.json | 64 + .../ts/app/phones/motorola-atrix-4g.json | 62 + .../app/phones/motorola-xoom-with-wi-fi.json | 65 + .../ts/app/phones/motorola-xoom.json | 62 + .../ts/app/phones/nexus-s.json | 69 + .../ts/app/phones/phones.json | 155 + .../ts/example-config.json | 5 + .../upgrade-phonecat-4-final/ts/index.html | 36 + .../ts/run-unit-tests.sh | 7 + .../upgrade-phonecat-4-final/ts/tsconfig.json | 21 + aio/content/examples/user-input/e2e-spec.ts | 99 + .../user-input/ts/example-config.json | 0 aio/content/examples/user-input/ts/plnkr.json | 9 + .../examples/user-input/ts/plnkr.no-link.html | 433 ++ .../user-input/ts/src/app/app.component.html | 27 + .../user-input/ts/src/app/app.component.ts | 9 + .../user-input/ts/src/app/app.module.ts | 37 + .../ts/src/app/click-me.component.ts | 24 + .../ts/src/app/click-me2.component.ts | 18 + .../user-input/ts/src/app/keyup.components.ts | 88 + .../ts/src/app/little-tour.component.ts | 25 + .../ts/src/app/loop-back.component.ts | 12 + .../examples/user-input/ts/src/index.html | 27 + .../examples/user-input/ts/src/main.ts | 5 + .../user-input/ts/src/user-input-styles.css | 9 + .../ts-snippets/webpack.config.snippets.ts | 4 +- .../webpack/ts/config/webpack.common.js | 5 +- .../examples/webpack/ts/example-config.json | 2 +- .../examples/webpack/ts/webpack.config.js | 3 + 1704 files changed, 86472 insertions(+), 7 deletions(-) create mode 100644 aio/content/examples/.gitignore create mode 100644 aio/content/examples/_boilerplate/bs-config.e2e.json create mode 100644 aio/content/examples/_boilerplate/bs-config.json create mode 100644 aio/content/examples/_boilerplate/example-config.json create mode 100644 aio/content/examples/_boilerplate/package.json create mode 100644 aio/content/examples/_boilerplate/plnkr.json create mode 100644 aio/content/examples/_boilerplate/src/styles.css create mode 100644 aio/content/examples/_boilerplate/src/systemjs.config.js create mode 100644 aio/content/examples/_boilerplate/src/systemjs.config.web.build.js create mode 100644 aio/content/examples/_boilerplate/src/systemjs.config.web.js create mode 100644 aio/content/examples/_boilerplate/src/tsconfig.json create mode 100644 aio/content/examples/_boilerplate/tslint.json create mode 100644 aio/content/examples/animations/e2e-spec.ts create mode 100644 aio/content/examples/animations/ts/.gitignore create mode 100644 aio/content/examples/animations/ts/example-config.json create mode 100644 aio/content/examples/animations/ts/plnkr.json create mode 100644 aio/content/examples/animations/ts/plnkr.no-link.html create mode 100644 aio/content/examples/animations/ts/src/app/app.module.ts create mode 100644 aio/content/examples/animations/ts/src/app/hero-list-auto.component.ts create mode 100644 aio/content/examples/animations/ts/src/app/hero-list-basic.component.ts create mode 100644 aio/content/examples/animations/ts/src/app/hero-list-combined-transitions.component.ts create mode 100644 aio/content/examples/animations/ts/src/app/hero-list-enter-leave-states.component.ts create mode 100644 aio/content/examples/animations/ts/src/app/hero-list-enter-leave.component.ts create mode 100644 aio/content/examples/animations/ts/src/app/hero-list-groups.component.ts create mode 100644 aio/content/examples/animations/ts/src/app/hero-list-inline-styles.component.ts create mode 100644 aio/content/examples/animations/ts/src/app/hero-list-multistep.component.ts create mode 100644 aio/content/examples/animations/ts/src/app/hero-list-timings.component.ts create mode 100644 aio/content/examples/animations/ts/src/app/hero-list-twoway.component.ts create mode 100644 aio/content/examples/animations/ts/src/app/hero-list.component.css create mode 100644 aio/content/examples/animations/ts/src/app/hero-team-builder.component.ts create mode 100644 aio/content/examples/animations/ts/src/app/hero.service.ts create mode 100644 aio/content/examples/animations/ts/src/index.html create mode 100644 aio/content/examples/animations/ts/src/main.ts create mode 100644 aio/content/examples/architecture/e2e-spec.ts create mode 100644 aio/content/examples/architecture/ts/example-config.json create mode 100644 aio/content/examples/architecture/ts/plnkr.json create mode 100644 aio/content/examples/architecture/ts/plnkr.no-link.html create mode 100644 aio/content/examples/architecture/ts/src/app/app.component.ts create mode 100644 aio/content/examples/architecture/ts/src/app/app.module.ts create mode 100644 aio/content/examples/architecture/ts/src/app/backend.service.ts create mode 100644 aio/content/examples/architecture/ts/src/app/hero-detail.component.html create mode 100644 aio/content/examples/architecture/ts/src/app/hero-detail.component.ts create mode 100644 aio/content/examples/architecture/ts/src/app/hero-list.component.1.html create mode 100644 aio/content/examples/architecture/ts/src/app/hero-list.component.html create mode 100644 aio/content/examples/architecture/ts/src/app/hero-list.component.ts create mode 100644 aio/content/examples/architecture/ts/src/app/hero.service.ts create mode 100644 aio/content/examples/architecture/ts/src/app/hero.ts create mode 100644 aio/content/examples/architecture/ts/src/app/logger.service.ts create mode 100644 aio/content/examples/architecture/ts/src/app/mini-app.ts create mode 100644 aio/content/examples/architecture/ts/src/app/sales-tax.component.ts create mode 100644 aio/content/examples/architecture/ts/src/app/sales-tax.service.ts create mode 100644 aio/content/examples/architecture/ts/src/app/tax-rate.service.ts create mode 100644 aio/content/examples/architecture/ts/src/index.html create mode 100644 aio/content/examples/architecture/ts/src/main.ts create mode 100644 aio/content/examples/attribute-directives/e2e-spec.ts create mode 100644 aio/content/examples/attribute-directives/ts/example-config.json create mode 100644 aio/content/examples/attribute-directives/ts/plnkr.json create mode 100644 aio/content/examples/attribute-directives/ts/plnkr.no-link.html create mode 100644 aio/content/examples/attribute-directives/ts/src/app/app.component.1.html create mode 100644 aio/content/examples/attribute-directives/ts/src/app/app.component.1.ts create mode 100644 aio/content/examples/attribute-directives/ts/src/app/app.component.html create mode 100644 aio/content/examples/attribute-directives/ts/src/app/app.component.ts create mode 100644 aio/content/examples/attribute-directives/ts/src/app/app.module.ts create mode 100644 aio/content/examples/attribute-directives/ts/src/app/dummy.module.1.ts create mode 100644 aio/content/examples/attribute-directives/ts/src/app/highlight.directive.1.ts create mode 100644 aio/content/examples/attribute-directives/ts/src/app/highlight.directive.2.ts create mode 100644 aio/content/examples/attribute-directives/ts/src/app/highlight.directive.3.ts create mode 100644 aio/content/examples/attribute-directives/ts/src/app/highlight.directive.ts create mode 100644 aio/content/examples/attribute-directives/ts/src/index.html create mode 100644 aio/content/examples/attribute-directives/ts/src/main.ts create mode 100644 aio/content/examples/cb-ajs-quick-reference/e2e-spec.ts create mode 100644 aio/content/examples/cb-ajs-quick-reference/ts/example-config.json create mode 100644 aio/content/examples/cb-ajs-quick-reference/ts/plnkr.json create mode 100644 aio/content/examples/cb-ajs-quick-reference/ts/plnkr.no-link.html create mode 100644 aio/content/examples/cb-ajs-quick-reference/ts/src/app/app-routing.module.ts create mode 100644 aio/content/examples/cb-ajs-quick-reference/ts/src/app/app.component.css create mode 100644 aio/content/examples/cb-ajs-quick-reference/ts/src/app/app.component.html create mode 100644 aio/content/examples/cb-ajs-quick-reference/ts/src/app/app.component.ts create mode 100644 aio/content/examples/cb-ajs-quick-reference/ts/src/app/app.module.1.ts create mode 100644 aio/content/examples/cb-ajs-quick-reference/ts/src/app/app.module.ts create mode 100644 aio/content/examples/cb-ajs-quick-reference/ts/src/app/date.pipe.ts create mode 100644 aio/content/examples/cb-ajs-quick-reference/ts/src/app/movie-list.component.css create mode 100644 aio/content/examples/cb-ajs-quick-reference/ts/src/app/movie-list.component.html create mode 100644 aio/content/examples/cb-ajs-quick-reference/ts/src/app/movie-list.component.ts create mode 100644 aio/content/examples/cb-ajs-quick-reference/ts/src/app/movie.service.ts create mode 100644 aio/content/examples/cb-ajs-quick-reference/ts/src/app/movie.ts create mode 100644 aio/content/examples/cb-ajs-quick-reference/ts/src/images/hero.png create mode 100644 aio/content/examples/cb-ajs-quick-reference/ts/src/images/ng-logo.png create mode 100644 aio/content/examples/cb-ajs-quick-reference/ts/src/images/villain.png create mode 100644 aio/content/examples/cb-ajs-quick-reference/ts/src/index.html create mode 100644 aio/content/examples/cb-ajs-quick-reference/ts/src/main.ts create mode 100644 aio/content/examples/cb-aot-compiler/e2e-spec.ts create mode 100644 aio/content/examples/cb-aot-compiler/ts/.gitignore create mode 100644 aio/content/examples/cb-aot-compiler/ts/example-config.json create mode 100644 aio/content/examples/cb-aot-compiler/ts/rollup-config.js create mode 100644 aio/content/examples/cb-aot-compiler/ts/src/app/app.component.html create mode 100644 aio/content/examples/cb-aot-compiler/ts/src/app/app.component.ts create mode 100644 aio/content/examples/cb-aot-compiler/ts/src/app/app.module.ts create mode 100644 aio/content/examples/cb-aot-compiler/ts/src/index-jit.html create mode 100644 aio/content/examples/cb-aot-compiler/ts/src/index.html create mode 100644 aio/content/examples/cb-aot-compiler/ts/src/main-jit.ts create mode 100644 aio/content/examples/cb-aot-compiler/ts/src/main.ts create mode 100644 aio/content/examples/cb-aot-compiler/ts/tsconfig-aot.json create mode 100644 aio/content/examples/cb-aot-compiler/ts/tsconfig-aot.json.annotated create mode 100644 aio/content/examples/cb-component-communication/e2e-spec.ts create mode 100644 aio/content/examples/cb-component-communication/ts/.gitignore create mode 100644 aio/content/examples/cb-component-communication/ts/example-config.json create mode 100644 aio/content/examples/cb-component-communication/ts/plnkr.json create mode 100644 aio/content/examples/cb-component-communication/ts/plnkr.no-link.html create mode 100644 aio/content/examples/cb-component-communication/ts/src/app/app.component.html create mode 100644 aio/content/examples/cb-component-communication/ts/src/app/app.component.ts create mode 100644 aio/content/examples/cb-component-communication/ts/src/app/app.module.ts create mode 100644 aio/content/examples/cb-component-communication/ts/src/app/astronaut.component.ts create mode 100644 aio/content/examples/cb-component-communication/ts/src/app/countdown-parent.component.ts create mode 100644 aio/content/examples/cb-component-communication/ts/src/app/countdown-timer.component.ts create mode 100644 aio/content/examples/cb-component-communication/ts/src/app/hero-child.component.ts create mode 100644 aio/content/examples/cb-component-communication/ts/src/app/hero-parent.component.ts create mode 100644 aio/content/examples/cb-component-communication/ts/src/app/hero.ts create mode 100644 aio/content/examples/cb-component-communication/ts/src/app/mission.service.ts create mode 100644 aio/content/examples/cb-component-communication/ts/src/app/missioncontrol.component.ts create mode 100644 aio/content/examples/cb-component-communication/ts/src/app/name-child.component.ts create mode 100644 aio/content/examples/cb-component-communication/ts/src/app/name-parent.component.ts create mode 100644 aio/content/examples/cb-component-communication/ts/src/app/version-child.component.ts create mode 100644 aio/content/examples/cb-component-communication/ts/src/app/version-parent.component.ts create mode 100644 aio/content/examples/cb-component-communication/ts/src/app/voter.component.ts create mode 100644 aio/content/examples/cb-component-communication/ts/src/app/votetaker.component.ts create mode 100644 aio/content/examples/cb-component-communication/ts/src/demo.css create mode 100644 aio/content/examples/cb-component-communication/ts/src/index.html rename aio/content/examples/{cb-component-relative-paths/ts/app => cb-component-communication/ts/src}/main.ts (74%) create mode 100644 aio/content/examples/cb-component-relative-paths/ts/plnkr.no-link.html rename aio/content/examples/cb-component-relative-paths/ts/{ => src}/app/app.component.ts (100%) rename aio/content/examples/cb-component-relative-paths/ts/{ => src}/app/app.module.ts (100%) rename aio/content/examples/cb-component-relative-paths/ts/{ => src}/app/some.component.css (100%) rename aio/content/examples/cb-component-relative-paths/ts/{ => src}/app/some.component.html (100%) rename aio/content/examples/cb-component-relative-paths/ts/{ => src}/app/some.component.ts (100%) rename aio/content/examples/cb-component-relative-paths/ts/{ => src}/index.html (85%) create mode 100644 aio/content/examples/cb-component-relative-paths/ts/src/main.ts create mode 100644 aio/content/examples/cb-dependency-injection/e2e-spec.ts create mode 100644 aio/content/examples/cb-dependency-injection/ts/example-config.json create mode 100644 aio/content/examples/cb-dependency-injection/ts/plnkr.json create mode 100644 aio/content/examples/cb-dependency-injection/ts/plnkr.no-link.html create mode 100644 aio/content/examples/cb-dependency-injection/ts/src/app/app-routing.module.ts create mode 100644 aio/content/examples/cb-dependency-injection/ts/src/app/app.component.html create mode 100644 aio/content/examples/cb-dependency-injection/ts/src/app/app.component.ts create mode 100644 aio/content/examples/cb-dependency-injection/ts/src/app/app.module.ts create mode 100644 aio/content/examples/cb-dependency-injection/ts/src/app/date-logger.service.ts create mode 100644 aio/content/examples/cb-dependency-injection/ts/src/app/hero-bio.component.ts create mode 100644 aio/content/examples/cb-dependency-injection/ts/src/app/hero-bios.component.ts create mode 100644 aio/content/examples/cb-dependency-injection/ts/src/app/hero-cache.service.ts create mode 100644 aio/content/examples/cb-dependency-injection/ts/src/app/hero-contact.component.ts create mode 100644 aio/content/examples/cb-dependency-injection/ts/src/app/hero-data.ts create mode 100644 aio/content/examples/cb-dependency-injection/ts/src/app/hero-of-the-month.component.ts create mode 100644 aio/content/examples/cb-dependency-injection/ts/src/app/hero.service.ts create mode 100644 aio/content/examples/cb-dependency-injection/ts/src/app/hero.ts create mode 100644 aio/content/examples/cb-dependency-injection/ts/src/app/highlight.directive.ts create mode 100644 aio/content/examples/cb-dependency-injection/ts/src/app/logger.service.ts create mode 100644 aio/content/examples/cb-dependency-injection/ts/src/app/parent-finder.component.ts create mode 100644 aio/content/examples/cb-dependency-injection/ts/src/app/runners-up.ts create mode 100644 aio/content/examples/cb-dependency-injection/ts/src/app/sorted-heroes.component.ts create mode 100644 aio/content/examples/cb-dependency-injection/ts/src/app/user-context.service.ts create mode 100644 aio/content/examples/cb-dependency-injection/ts/src/app/user.service.ts create mode 100644 aio/content/examples/cb-dependency-injection/ts/src/index.html create mode 100644 aio/content/examples/cb-dependency-injection/ts/src/main.ts create mode 100644 aio/content/examples/cb-dependency-injection/ts/src/sample.css create mode 100644 aio/content/examples/cb-dynamic-component-loader/e2e-spec.ts create mode 100644 aio/content/examples/cb-dynamic-component-loader/ts/example-config.json create mode 100644 aio/content/examples/cb-dynamic-component-loader/ts/src/app/ad-banner.component.ts create mode 100644 aio/content/examples/cb-dynamic-component-loader/ts/src/app/ad-item.ts create mode 100644 aio/content/examples/cb-dynamic-component-loader/ts/src/app/ad.component.ts create mode 100644 aio/content/examples/cb-dynamic-component-loader/ts/src/app/ad.directive.ts create mode 100644 aio/content/examples/cb-dynamic-component-loader/ts/src/app/ad.service.ts create mode 100644 aio/content/examples/cb-dynamic-component-loader/ts/src/app/app.component.ts create mode 100644 aio/content/examples/cb-dynamic-component-loader/ts/src/app/app.module.ts create mode 100644 aio/content/examples/cb-dynamic-component-loader/ts/src/app/hero-job-ad.component.ts create mode 100644 aio/content/examples/cb-dynamic-component-loader/ts/src/app/hero-profile.component.ts create mode 100644 aio/content/examples/cb-dynamic-component-loader/ts/src/index.html create mode 100644 aio/content/examples/cb-dynamic-component-loader/ts/src/main.ts create mode 100644 aio/content/examples/cb-dynamic-component-loader/ts/src/sample.css create mode 100644 aio/content/examples/cb-dynamic-form/e2e-spec.ts create mode 100644 aio/content/examples/cb-dynamic-form/ts/example-config.json create mode 100644 aio/content/examples/cb-dynamic-form/ts/plnkr.json create mode 100644 aio/content/examples/cb-dynamic-form/ts/plnkr.no-link.html create mode 100644 aio/content/examples/cb-dynamic-form/ts/src/app/app.component.ts create mode 100644 aio/content/examples/cb-dynamic-form/ts/src/app/app.module.ts create mode 100644 aio/content/examples/cb-dynamic-form/ts/src/app/dynamic-form-question.component.html create mode 100644 aio/content/examples/cb-dynamic-form/ts/src/app/dynamic-form-question.component.ts create mode 100644 aio/content/examples/cb-dynamic-form/ts/src/app/dynamic-form.component.html create mode 100644 aio/content/examples/cb-dynamic-form/ts/src/app/dynamic-form.component.ts create mode 100644 aio/content/examples/cb-dynamic-form/ts/src/app/question-base.ts create mode 100644 aio/content/examples/cb-dynamic-form/ts/src/app/question-control.service.ts create mode 100644 aio/content/examples/cb-dynamic-form/ts/src/app/question-dropdown.ts create mode 100644 aio/content/examples/cb-dynamic-form/ts/src/app/question-textbox.ts create mode 100644 aio/content/examples/cb-dynamic-form/ts/src/app/question.service.ts create mode 100644 aio/content/examples/cb-dynamic-form/ts/src/index.html create mode 100644 aio/content/examples/cb-dynamic-form/ts/src/main.ts create mode 100644 aio/content/examples/cb-dynamic-form/ts/src/sample.css create mode 100644 aio/content/examples/cb-form-validation/e2e-spec.ts create mode 100644 aio/content/examples/cb-form-validation/ts/example-config.json create mode 100644 aio/content/examples/cb-form-validation/ts/plnkr.json create mode 100644 aio/content/examples/cb-form-validation/ts/plnkr.no-link.html create mode 100644 aio/content/examples/cb-form-validation/ts/src/app/app.component.ts create mode 100644 aio/content/examples/cb-form-validation/ts/src/app/app.module.ts create mode 100644 aio/content/examples/cb-form-validation/ts/src/app/reactive/hero-form-reactive.component.html create mode 100644 aio/content/examples/cb-form-validation/ts/src/app/reactive/hero-form-reactive.component.ts create mode 100644 aio/content/examples/cb-form-validation/ts/src/app/reactive/hero-form-reactive.module.ts create mode 100644 aio/content/examples/cb-form-validation/ts/src/app/shared/forbidden-name.directive.ts create mode 100644 aio/content/examples/cb-form-validation/ts/src/app/shared/hero.ts create mode 100644 aio/content/examples/cb-form-validation/ts/src/app/shared/shared.module.ts create mode 100644 aio/content/examples/cb-form-validation/ts/src/app/shared/submitted.component.ts create mode 100644 aio/content/examples/cb-form-validation/ts/src/app/template/hero-form-template.module.ts create mode 100644 aio/content/examples/cb-form-validation/ts/src/app/template/hero-form-template1.component.html create mode 100644 aio/content/examples/cb-form-validation/ts/src/app/template/hero-form-template1.component.ts create mode 100644 aio/content/examples/cb-form-validation/ts/src/app/template/hero-form-template2.component.html create mode 100644 aio/content/examples/cb-form-validation/ts/src/app/template/hero-form-template2.component.ts create mode 100644 aio/content/examples/cb-form-validation/ts/src/forms.css create mode 100644 aio/content/examples/cb-form-validation/ts/src/index.html create mode 100644 aio/content/examples/cb-form-validation/ts/src/main.ts create mode 100644 aio/content/examples/cb-i18n/e2e-spec.ts create mode 100644 aio/content/examples/cb-i18n/ts/.gitignore create mode 100644 aio/content/examples/cb-i18n/ts/example-config.json create mode 100644 aio/content/examples/cb-i18n/ts/messages.xlf create mode 100644 aio/content/examples/cb-i18n/ts/plnkr.json create mode 100644 aio/content/examples/cb-i18n/ts/plnkr.no-link.html create mode 100644 aio/content/examples/cb-i18n/ts/src/app/app.component.1.html create mode 100644 aio/content/examples/cb-i18n/ts/src/app/app.component.html create mode 100644 aio/content/examples/cb-i18n/ts/src/app/app.component.ts create mode 100644 aio/content/examples/cb-i18n/ts/src/app/app.module.ts create mode 100644 aio/content/examples/cb-i18n/ts/src/app/i18n-providers.ts create mode 100644 aio/content/examples/cb-i18n/ts/src/index.html create mode 100644 aio/content/examples/cb-i18n/ts/src/locale/messages.es.xlf create mode 100644 aio/content/examples/cb-i18n/ts/src/locale/messages.es.xlf.html create mode 100644 aio/content/examples/cb-i18n/ts/src/main.1.ts create mode 100644 aio/content/examples/cb-i18n/ts/src/main.ts create mode 100644 aio/content/examples/cb-i18n/ts/src/systemjs-text-plugin.js create mode 100644 aio/content/examples/cb-set-document-title/e2e-spec.ts create mode 100644 aio/content/examples/cb-set-document-title/ts/example-config.json create mode 100644 aio/content/examples/cb-set-document-title/ts/plnkr.json create mode 100644 aio/content/examples/cb-set-document-title/ts/plnkr.no-link.html create mode 100644 aio/content/examples/cb-set-document-title/ts/src/app/app.component.ts create mode 100644 aio/content/examples/cb-set-document-title/ts/src/app/app.module.ts create mode 100644 aio/content/examples/cb-set-document-title/ts/src/index.html create mode 100644 aio/content/examples/cb-set-document-title/ts/src/main.ts create mode 100644 aio/content/examples/cb-ts-to-js/e2e-spec.ts create mode 100644 aio/content/examples/cb-ts-to-js/js-es6-decorators/example-config.json create mode 100644 aio/content/examples/cb-ts-to-js/js-es6-decorators/plnkr.json create mode 100644 aio/content/examples/cb-ts-to-js/js-es6-decorators/plnkr.no-link.html create mode 100644 aio/content/examples/cb-ts-to-js/js-es6-decorators/src/.babelrc create mode 100644 aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/app.component.es6 create mode 100644 aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/app.component.html create mode 100644 aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/app.module.es6 create mode 100644 aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/confirm.component.es6 create mode 100644 aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/confirm.component.html create mode 100644 aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/data.service.es6 create mode 100644 aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-di-inject-additional.component.es6 create mode 100644 aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-di-inject.component.es6 create mode 100644 aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-di.component.es6 create mode 100644 aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-host-meta.component.es6 create mode 100644 aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-host.component.es6 create mode 100644 aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-io.component.es6 create mode 100644 aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-lifecycle.component.es6 create mode 100644 aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-queries.component.es6 create mode 100644 aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-title.component.es6 create mode 100644 aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-title.component.html create mode 100644 aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero.component.es6 create mode 100644 aio/content/examples/cb-ts-to-js/js-es6-decorators/src/index.html create mode 100644 aio/content/examples/cb-ts-to-js/js-es6-decorators/src/main.es6 create mode 100644 aio/content/examples/cb-ts-to-js/js-es6/example-config.json create mode 100644 aio/content/examples/cb-ts-to-js/js-es6/plnkr.json create mode 100644 aio/content/examples/cb-ts-to-js/js-es6/plnkr.no-link.html create mode 100644 aio/content/examples/cb-ts-to-js/js-es6/src/.babelrc create mode 100644 aio/content/examples/cb-ts-to-js/js-es6/src/app/app.component.es6 create mode 100644 aio/content/examples/cb-ts-to-js/js-es6/src/app/app.component.html create mode 100644 aio/content/examples/cb-ts-to-js/js-es6/src/app/app.module.es6 create mode 100644 aio/content/examples/cb-ts-to-js/js-es6/src/app/confirm.component.es6 create mode 100644 aio/content/examples/cb-ts-to-js/js-es6/src/app/confirm.component.html create mode 100644 aio/content/examples/cb-ts-to-js/js-es6/src/app/data.service.es6 create mode 100644 aio/content/examples/cb-ts-to-js/js-es6/src/app/hero-di-inject-additional.component.es6 create mode 100644 aio/content/examples/cb-ts-to-js/js-es6/src/app/hero-di-inject.component.es6 create mode 100644 aio/content/examples/cb-ts-to-js/js-es6/src/app/hero-di.component.es6 create mode 100644 aio/content/examples/cb-ts-to-js/js-es6/src/app/hero-host.component.es6 create mode 100644 aio/content/examples/cb-ts-to-js/js-es6/src/app/hero-io.component.es6 create mode 100644 aio/content/examples/cb-ts-to-js/js-es6/src/app/hero-lifecycle.component.es6 create mode 100644 aio/content/examples/cb-ts-to-js/js-es6/src/app/hero-queries.component.es6 create mode 100644 aio/content/examples/cb-ts-to-js/js-es6/src/app/hero-title.component.es6 create mode 100644 aio/content/examples/cb-ts-to-js/js-es6/src/app/hero-title.component.html create mode 100644 aio/content/examples/cb-ts-to-js/js-es6/src/app/hero.component.es6 create mode 100644 aio/content/examples/cb-ts-to-js/js-es6/src/index.html create mode 100644 aio/content/examples/cb-ts-to-js/js-es6/src/main.es6 create mode 100644 aio/content/examples/cb-ts-to-js/js/example-config.json create mode 100644 aio/content/examples/cb-ts-to-js/js/plnkr.json create mode 100644 aio/content/examples/cb-ts-to-js/js/plnkr.no-link.html create mode 100644 aio/content/examples/cb-ts-to-js/js/src/app/app.component.html create mode 100644 aio/content/examples/cb-ts-to-js/js/src/app/app.component.js create mode 100644 aio/content/examples/cb-ts-to-js/js/src/app/app.module.js create mode 100644 aio/content/examples/cb-ts-to-js/js/src/app/confirm.component.html create mode 100644 aio/content/examples/cb-ts-to-js/js/src/app/confirm.component.js create mode 100644 aio/content/examples/cb-ts-to-js/js/src/app/data.service.js create mode 100644 aio/content/examples/cb-ts-to-js/js/src/app/hero-di-inject-additional.component.js create mode 100644 aio/content/examples/cb-ts-to-js/js/src/app/hero-di-inject.component.js create mode 100644 aio/content/examples/cb-ts-to-js/js/src/app/hero-di.component.js create mode 100644 aio/content/examples/cb-ts-to-js/js/src/app/hero-host.component.js create mode 100644 aio/content/examples/cb-ts-to-js/js/src/app/hero-io-dsl.component.html create mode 100644 aio/content/examples/cb-ts-to-js/js/src/app/hero-io.component.html create mode 100644 aio/content/examples/cb-ts-to-js/js/src/app/hero-io.component.js create mode 100644 aio/content/examples/cb-ts-to-js/js/src/app/hero-lifecycle.component.js create mode 100644 aio/content/examples/cb-ts-to-js/js/src/app/hero-queries.component.js create mode 100644 aio/content/examples/cb-ts-to-js/js/src/app/hero-title.component.html create mode 100644 aio/content/examples/cb-ts-to-js/js/src/app/hero-title.component.js create mode 100644 aio/content/examples/cb-ts-to-js/js/src/app/hero.component.js create mode 100644 aio/content/examples/cb-ts-to-js/js/src/index.html create mode 100644 aio/content/examples/cb-ts-to-js/js/src/main.js create mode 100644 aio/content/examples/cb-ts-to-js/ts/example-config.json create mode 100644 aio/content/examples/cb-ts-to-js/ts/plnkr.json create mode 100644 aio/content/examples/cb-ts-to-js/ts/plnkr.no-link.html create mode 100644 aio/content/examples/cb-ts-to-js/ts/src/app/app.component.html create mode 100644 aio/content/examples/cb-ts-to-js/ts/src/app/app.component.ts create mode 100644 aio/content/examples/cb-ts-to-js/ts/src/app/app.module.ts create mode 100644 aio/content/examples/cb-ts-to-js/ts/src/app/confirm.component.html create mode 100644 aio/content/examples/cb-ts-to-js/ts/src/app/confirm.component.ts create mode 100644 aio/content/examples/cb-ts-to-js/ts/src/app/data.service.ts create mode 100644 aio/content/examples/cb-ts-to-js/ts/src/app/hero-di-inject-additional.component.ts create mode 100644 aio/content/examples/cb-ts-to-js/ts/src/app/hero-di-inject.component.ts create mode 100644 aio/content/examples/cb-ts-to-js/ts/src/app/hero-di.component.ts create mode 100644 aio/content/examples/cb-ts-to-js/ts/src/app/hero-host-meta.component.ts create mode 100644 aio/content/examples/cb-ts-to-js/ts/src/app/hero-host.component.ts create mode 100644 aio/content/examples/cb-ts-to-js/ts/src/app/hero-io.component.ts create mode 100644 aio/content/examples/cb-ts-to-js/ts/src/app/hero-lifecycle.component.ts create mode 100644 aio/content/examples/cb-ts-to-js/ts/src/app/hero-queries.component.ts create mode 100644 aio/content/examples/cb-ts-to-js/ts/src/app/hero-title.component.html create mode 100644 aio/content/examples/cb-ts-to-js/ts/src/app/hero-title.component.ts create mode 100644 aio/content/examples/cb-ts-to-js/ts/src/app/hero.component.ts create mode 100644 aio/content/examples/cb-ts-to-js/ts/src/index.html create mode 100644 aio/content/examples/cb-ts-to-js/ts/src/main.ts create mode 100644 aio/content/examples/cb-visual-studio-2015/ts/.gitignore create mode 100644 aio/content/examples/cb-visual-studio-2015/ts/tsconfig.json create mode 100644 aio/content/examples/cli-quickstart/e2e-spec.ts create mode 100644 aio/content/examples/cli-quickstart/ts/.gitignore create mode 100644 aio/content/examples/cli-quickstart/ts/README.md create mode 100644 aio/content/examples/cli-quickstart/ts/angular-cli.json create mode 100644 aio/content/examples/cli-quickstart/ts/bs-config.cli.json create mode 100644 aio/content/examples/cli-quickstart/ts/e2e/app.e2e-spec.ts create mode 100644 aio/content/examples/cli-quickstart/ts/e2e/app.po.ts create mode 100644 aio/content/examples/cli-quickstart/ts/example-config.json create mode 100644 aio/content/examples/cli-quickstart/ts/src/app/app.component.css create mode 100644 aio/content/examples/cli-quickstart/ts/src/app/app.component.html create mode 100644 aio/content/examples/cli-quickstart/ts/src/app/app.component.spec.ts create mode 100644 aio/content/examples/cli-quickstart/ts/src/app/app.component.ts create mode 100644 aio/content/examples/cli-quickstart/ts/src/app/app.module.ts create mode 100644 aio/content/examples/cli-quickstart/ts/src/assets/.gitkeep create mode 100644 aio/content/examples/cli-quickstart/ts/src/environments/environment.prod.ts create mode 100644 aio/content/examples/cli-quickstart/ts/src/environments/environment.ts create mode 100644 aio/content/examples/cli-quickstart/ts/src/favicon.ico create mode 100644 aio/content/examples/cli-quickstart/ts/src/index.html create mode 100644 aio/content/examples/cli-quickstart/ts/src/main.ts create mode 100644 aio/content/examples/cli-quickstart/ts/src/polyfills.ts create mode 100644 aio/content/examples/cli-quickstart/ts/src/styles.css create mode 100644 aio/content/examples/cli-quickstart/ts/src/test.ts create mode 100644 aio/content/examples/component-styles/e2e-spec.ts create mode 100644 aio/content/examples/component-styles/ts/example-config.json create mode 100644 aio/content/examples/component-styles/ts/plnkr.json create mode 100644 aio/content/examples/component-styles/ts/plnkr.no-link.html create mode 100644 aio/content/examples/component-styles/ts/src/app/app.module.ts create mode 100644 aio/content/examples/component-styles/ts/src/app/hero-app-main.component.ts create mode 100644 aio/content/examples/component-styles/ts/src/app/hero-app.component.ts create mode 100644 aio/content/examples/component-styles/ts/src/app/hero-controls.component.ts create mode 100644 aio/content/examples/component-styles/ts/src/app/hero-details-box.css create mode 100644 aio/content/examples/component-styles/ts/src/app/hero-details.component.css create mode 100644 aio/content/examples/component-styles/ts/src/app/hero-details.component.ts create mode 100644 aio/content/examples/component-styles/ts/src/app/hero-team.component.css create mode 100644 aio/content/examples/component-styles/ts/src/app/hero-team.component.ts create mode 100644 aio/content/examples/component-styles/ts/src/app/hero.ts create mode 100644 aio/content/examples/component-styles/ts/src/app/quest-summary.component.css create mode 100644 aio/content/examples/component-styles/ts/src/app/quest-summary.component.html create mode 100644 aio/content/examples/component-styles/ts/src/app/quest-summary.component.ts create mode 100644 aio/content/examples/component-styles/ts/src/index.html create mode 100644 aio/content/examples/component-styles/ts/src/main.ts create mode 100644 aio/content/examples/dependency-injection/e2e-spec.ts create mode 100644 aio/content/examples/dependency-injection/ts/example-config.json create mode 100644 aio/content/examples/dependency-injection/ts/plnkr.json create mode 100644 aio/content/examples/dependency-injection/ts/plnkr.no-link.html create mode 100644 aio/content/examples/dependency-injection/ts/src/app/app.component.1.ts create mode 100644 aio/content/examples/dependency-injection/ts/src/app/app.component.2.ts create mode 100644 aio/content/examples/dependency-injection/ts/src/app/app.component.ts create mode 100644 aio/content/examples/dependency-injection/ts/src/app/app.config.ts create mode 100644 aio/content/examples/dependency-injection/ts/src/app/app.module.ts create mode 100644 aio/content/examples/dependency-injection/ts/src/app/car/car-creations.ts create mode 100644 aio/content/examples/dependency-injection/ts/src/app/car/car-factory.ts create mode 100644 aio/content/examples/dependency-injection/ts/src/app/car/car-injector.ts create mode 100644 aio/content/examples/dependency-injection/ts/src/app/car/car-no-di.ts create mode 100644 aio/content/examples/dependency-injection/ts/src/app/car/car.component.ts create mode 100644 aio/content/examples/dependency-injection/ts/src/app/car/car.ts create mode 100644 aio/content/examples/dependency-injection/ts/src/app/heroes/hero-list.component.1.ts create mode 100644 aio/content/examples/dependency-injection/ts/src/app/heroes/hero-list.component.2.ts create mode 100644 aio/content/examples/dependency-injection/ts/src/app/heroes/hero-list.component.ts create mode 100644 aio/content/examples/dependency-injection/ts/src/app/heroes/hero.service.1.ts create mode 100644 aio/content/examples/dependency-injection/ts/src/app/heroes/hero.service.2.ts create mode 100644 aio/content/examples/dependency-injection/ts/src/app/heroes/hero.service.provider.ts create mode 100644 aio/content/examples/dependency-injection/ts/src/app/heroes/hero.service.ts create mode 100644 aio/content/examples/dependency-injection/ts/src/app/heroes/hero.ts create mode 100644 aio/content/examples/dependency-injection/ts/src/app/heroes/heroes.component.1.ts create mode 100644 aio/content/examples/dependency-injection/ts/src/app/heroes/heroes.component.ts create mode 100644 aio/content/examples/dependency-injection/ts/src/app/heroes/mock-heroes.ts create mode 100644 aio/content/examples/dependency-injection/ts/src/app/injector.component.ts create mode 100644 aio/content/examples/dependency-injection/ts/src/app/logger.service.ts create mode 100644 aio/content/examples/dependency-injection/ts/src/app/providers.component.ts create mode 100644 aio/content/examples/dependency-injection/ts/src/app/test.component.ts create mode 100644 aio/content/examples/dependency-injection/ts/src/app/user.service.ts create mode 100644 aio/content/examples/dependency-injection/ts/src/index.html create mode 100644 aio/content/examples/dependency-injection/ts/src/main.ts create mode 100644 aio/content/examples/deployment/ts/.gitignore create mode 100644 aio/content/examples/deployment/ts/example-config.json create mode 100644 aio/content/examples/deployment/ts/src/app/app.component.ts create mode 100644 aio/content/examples/deployment/ts/src/app/app.module.ts create mode 100644 aio/content/examples/deployment/ts/src/app/crisis-list.component.ts create mode 100644 aio/content/examples/deployment/ts/src/app/hero-list.component.ts create mode 100644 aio/content/examples/deployment/ts/src/index.html create mode 100644 aio/content/examples/deployment/ts/src/main.ts create mode 100644 aio/content/examples/deployment/ts/src/systemjs.config.server.js create mode 100644 aio/content/examples/displaying-data/e2e-spec.ts create mode 100644 aio/content/examples/displaying-data/ts/example-config.json create mode 100644 aio/content/examples/displaying-data/ts/plnkr.json create mode 100644 aio/content/examples/displaying-data/ts/plnkr.no-link.html create mode 100644 aio/content/examples/displaying-data/ts/src/app/app-ctor.component.ts create mode 100644 aio/content/examples/displaying-data/ts/src/app/app.component.1.ts create mode 100644 aio/content/examples/displaying-data/ts/src/app/app.component.2.ts create mode 100644 aio/content/examples/displaying-data/ts/src/app/app.component.3.ts create mode 100644 aio/content/examples/displaying-data/ts/src/app/app.component.ts create mode 100644 aio/content/examples/displaying-data/ts/src/app/app.module.ts create mode 100644 aio/content/examples/displaying-data/ts/src/app/hero.ts create mode 100644 aio/content/examples/displaying-data/ts/src/index.html create mode 100644 aio/content/examples/displaying-data/ts/src/main.ts create mode 100644 aio/content/examples/forms/e2e-spec.ts create mode 100644 aio/content/examples/forms/js/example-config.json create mode 100644 aio/content/examples/forms/js/plnkr.json create mode 100644 aio/content/examples/forms/js/plnkr.no-link.html create mode 100644 aio/content/examples/forms/js/src/app/app.component.js create mode 100644 aio/content/examples/forms/js/src/app/app.module.js create mode 100644 aio/content/examples/forms/js/src/app/hero-form.component.html create mode 100644 aio/content/examples/forms/js/src/app/hero-form.component.js create mode 100644 aio/content/examples/forms/js/src/app/hero.js create mode 100644 aio/content/examples/forms/js/src/forms.css create mode 100644 aio/content/examples/forms/js/src/index.html create mode 100644 aio/content/examples/forms/js/src/main.js create mode 100644 aio/content/examples/forms/ts/example-config.json create mode 100644 aio/content/examples/forms/ts/plnkr.json create mode 100644 aio/content/examples/forms/ts/plnkr.no-link.html create mode 100644 aio/content/examples/forms/ts/src/app/app.component.ts create mode 100644 aio/content/examples/forms/ts/src/app/app.module.ts create mode 100644 aio/content/examples/forms/ts/src/app/hero-form.component.html create mode 100644 aio/content/examples/forms/ts/src/app/hero-form.component.ts create mode 100644 aio/content/examples/forms/ts/src/app/hero.ts create mode 100644 aio/content/examples/forms/ts/src/forms.css create mode 100644 aio/content/examples/forms/ts/src/index.html create mode 100644 aio/content/examples/forms/ts/src/main.ts create mode 100644 aio/content/examples/hierarchical-dependency-injection/e2e-spec.ts create mode 100644 aio/content/examples/hierarchical-dependency-injection/ts/example-config.json create mode 100644 aio/content/examples/hierarchical-dependency-injection/ts/plnkr.json create mode 100644 aio/content/examples/hierarchical-dependency-injection/ts/plnkr.no-link.html create mode 100644 aio/content/examples/hierarchical-dependency-injection/ts/src/app/app.component.ts create mode 100644 aio/content/examples/hierarchical-dependency-injection/ts/src/app/app.module.ts create mode 100644 aio/content/examples/hierarchical-dependency-injection/ts/src/app/car.components.ts create mode 100644 aio/content/examples/hierarchical-dependency-injection/ts/src/app/car.services.ts create mode 100644 aio/content/examples/hierarchical-dependency-injection/ts/src/app/hero-tax-return.component.css create mode 100644 aio/content/examples/hierarchical-dependency-injection/ts/src/app/hero-tax-return.component.html create mode 100644 aio/content/examples/hierarchical-dependency-injection/ts/src/app/hero-tax-return.component.ts create mode 100644 aio/content/examples/hierarchical-dependency-injection/ts/src/app/hero-tax-return.service.ts create mode 100644 aio/content/examples/hierarchical-dependency-injection/ts/src/app/hero.ts create mode 100644 aio/content/examples/hierarchical-dependency-injection/ts/src/app/heroes-list.component.ts create mode 100644 aio/content/examples/hierarchical-dependency-injection/ts/src/app/heroes.service.ts create mode 100644 aio/content/examples/hierarchical-dependency-injection/ts/src/app/villains-list.component.html create mode 100644 aio/content/examples/hierarchical-dependency-injection/ts/src/app/villains-list.component.ts create mode 100644 aio/content/examples/hierarchical-dependency-injection/ts/src/app/villains.service.ts create mode 100644 aio/content/examples/hierarchical-dependency-injection/ts/src/index.html create mode 100644 aio/content/examples/hierarchical-dependency-injection/ts/src/main.ts create mode 100644 aio/content/examples/homepage-hello-world/e2e-spec.ts create mode 100644 aio/content/examples/homepage-hello-world/ts/example-config.json create mode 100644 aio/content/examples/homepage-hello-world/ts/plnkr.json create mode 100644 aio/content/examples/homepage-hello-world/ts/plnkr.no-link.html create mode 100644 aio/content/examples/homepage-hello-world/ts/src/app/app.module.ts create mode 100644 aio/content/examples/homepage-hello-world/ts/src/app/hello_world.html create mode 100644 aio/content/examples/homepage-hello-world/ts/src/app/hello_world.ts create mode 100644 aio/content/examples/homepage-hello-world/ts/src/index.1.html create mode 100644 aio/content/examples/homepage-hello-world/ts/src/index.html create mode 100644 aio/content/examples/homepage-hello-world/ts/src/main.ts create mode 100644 aio/content/examples/homepage-tabs/e2e-spec.ts create mode 100644 aio/content/examples/homepage-tabs/ts/example-config.json create mode 100644 aio/content/examples/homepage-tabs/ts/plnkr.json create mode 100644 aio/content/examples/homepage-tabs/ts/plnkr.no-link.html create mode 100644 aio/content/examples/homepage-tabs/ts/src/app/app.module.ts create mode 100644 aio/content/examples/homepage-tabs/ts/src/app/di_demo.ts create mode 100644 aio/content/examples/homepage-tabs/ts/src/app/ui_tabs.ts create mode 100644 aio/content/examples/homepage-tabs/ts/src/index.1.html create mode 100644 aio/content/examples/homepage-tabs/ts/src/index.html create mode 100644 aio/content/examples/homepage-tabs/ts/src/main.ts create mode 100644 aio/content/examples/homepage-todo/e2e-spec.ts create mode 100644 aio/content/examples/homepage-todo/ts/example-config.json create mode 100644 aio/content/examples/homepage-todo/ts/plnkr.json create mode 100644 aio/content/examples/homepage-todo/ts/plnkr.no-link.html create mode 100644 aio/content/examples/homepage-todo/ts/src/app/app.module.ts create mode 100644 aio/content/examples/homepage-todo/ts/src/app/todo.ts create mode 100644 aio/content/examples/homepage-todo/ts/src/app/todo_app.ts create mode 100644 aio/content/examples/homepage-todo/ts/src/app/todo_form.ts create mode 100644 aio/content/examples/homepage-todo/ts/src/app/todo_list.ts create mode 100644 aio/content/examples/homepage-todo/ts/src/index.1.html create mode 100644 aio/content/examples/homepage-todo/ts/src/index.html create mode 100644 aio/content/examples/homepage-todo/ts/src/main.ts create mode 100644 aio/content/examples/jsconfig.json create mode 100644 aio/content/examples/lifecycle-hooks/e2e-spec.ts create mode 100644 aio/content/examples/lifecycle-hooks/ts/example-config.json create mode 100644 aio/content/examples/lifecycle-hooks/ts/plnkr.json create mode 100644 aio/content/examples/lifecycle-hooks/ts/plnkr.no-link.html create mode 100644 aio/content/examples/lifecycle-hooks/ts/src/app/after-content.component.ts create mode 100644 aio/content/examples/lifecycle-hooks/ts/src/app/after-view.component.ts create mode 100644 aio/content/examples/lifecycle-hooks/ts/src/app/app.component.html create mode 100644 aio/content/examples/lifecycle-hooks/ts/src/app/app.component.ts create mode 100644 aio/content/examples/lifecycle-hooks/ts/src/app/app.module.ts create mode 100644 aio/content/examples/lifecycle-hooks/ts/src/app/counter.component.ts create mode 100644 aio/content/examples/lifecycle-hooks/ts/src/app/do-check-parent.component.html create mode 100644 aio/content/examples/lifecycle-hooks/ts/src/app/do-check.component.ts create mode 100644 aio/content/examples/lifecycle-hooks/ts/src/app/logger.service.ts create mode 100644 aio/content/examples/lifecycle-hooks/ts/src/app/on-changes-parent.component.html create mode 100644 aio/content/examples/lifecycle-hooks/ts/src/app/on-changes.component.ts create mode 100644 aio/content/examples/lifecycle-hooks/ts/src/app/peek-a-boo-parent.component.ts create mode 100644 aio/content/examples/lifecycle-hooks/ts/src/app/peek-a-boo.component.ts create mode 100644 aio/content/examples/lifecycle-hooks/ts/src/app/spy.component.html create mode 100644 aio/content/examples/lifecycle-hooks/ts/src/app/spy.component.ts create mode 100644 aio/content/examples/lifecycle-hooks/ts/src/app/spy.directive.ts create mode 100644 aio/content/examples/lifecycle-hooks/ts/src/index.html create mode 100644 aio/content/examples/lifecycle-hooks/ts/src/main.ts create mode 100644 aio/content/examples/lifecycle-hooks/ts/src/sample.css create mode 100644 aio/content/examples/ngcontainer/ts/example-config.json create mode 100644 aio/content/examples/ngcontainer/ts/plnkr.json create mode 100644 aio/content/examples/ngcontainer/ts/plnkr.no-link.html create mode 100644 aio/content/examples/ngcontainer/ts/src/app/app.component.css create mode 100644 aio/content/examples/ngcontainer/ts/src/app/app.component.html create mode 100644 aio/content/examples/ngcontainer/ts/src/app/app.component.ts create mode 100644 aio/content/examples/ngcontainer/ts/src/app/app.module.ts create mode 100644 aio/content/examples/ngcontainer/ts/src/app/content.component.ts create mode 100644 aio/content/examples/ngcontainer/ts/src/app/hero.components.ts create mode 100644 aio/content/examples/ngcontainer/ts/src/app/hero.ts create mode 100644 aio/content/examples/ngcontainer/ts/src/index.html create mode 100644 aio/content/examples/ngcontainer/ts/src/main.ts create mode 100644 aio/content/examples/ngmodule/e2e-spec.ts create mode 100644 aio/content/examples/ngmodule/ts/contact.1b.plnkr.json create mode 100644 aio/content/examples/ngmodule/ts/contact.1b.plnkr.no-link.html create mode 100644 aio/content/examples/ngmodule/ts/contact.2.plnkr.json create mode 100644 aio/content/examples/ngmodule/ts/contact.2.plnkr.no-link.html create mode 100644 aio/content/examples/ngmodule/ts/example-config.json create mode 100644 aio/content/examples/ngmodule/ts/minimal.0.plnkr.json create mode 100644 aio/content/examples/ngmodule/ts/minimal.0.plnkr.no-link.html create mode 100644 aio/content/examples/ngmodule/ts/plnkr.json create mode 100644 aio/content/examples/ngmodule/ts/plnkr.no-link.html create mode 100644 aio/content/examples/ngmodule/ts/pre-shared.3.plnkr.json create mode 100644 aio/content/examples/ngmodule/ts/pre-shared.3.plnkr.no-link.html create mode 100644 aio/content/examples/ngmodule/ts/src/app/app-routing.module.3.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/app-routing.module.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/app.component.0.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/app.component.1.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/app.component.1b.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/app.component.2.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/app.component.3.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/app.component.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/app.module.0.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/app.module.1.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/app.module.1b.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/app.module.2.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/app.module.3.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/app.module.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/contact/awesome.pipe.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/contact/contact-routing.module.3.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/contact/contact-routing.module.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/contact/contact.component.3.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/contact/contact.component.css create mode 100644 aio/content/examples/ngmodule/ts/src/app/contact/contact.component.html create mode 100644 aio/content/examples/ngmodule/ts/src/app/contact/contact.component.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/contact/contact.module.2.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/contact/contact.module.3.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/contact/contact.module.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/contact/contact.service.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/contact/highlight.directive.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/core/core.module.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/core/title.component.html create mode 100644 aio/content/examples/ngmodule/ts/src/app/core/title.component.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/core/user.service.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/crisis/crisis-detail.component.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/crisis/crisis-list.component.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/crisis/crisis-routing.module.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/crisis/crisis.module.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/crisis/crisis.service.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/hero/hero-detail.component.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/hero/hero-list.component.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/hero/hero-routing.module.3.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/hero/hero-routing.module.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/hero/hero.component.3.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/hero/hero.component.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/hero/hero.module.3.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/hero/hero.module.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/hero/hero.service.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/hero/highlight.directive.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/highlight.directive.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/shared/awesome.pipe.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/shared/highlight.directive.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/shared/shared.module.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/title.component.html create mode 100644 aio/content/examples/ngmodule/ts/src/app/title.component.ts create mode 100644 aio/content/examples/ngmodule/ts/src/app/user.service.ts create mode 100644 aio/content/examples/ngmodule/ts/src/index.0.html create mode 100644 aio/content/examples/ngmodule/ts/src/index.1.html create mode 100644 aio/content/examples/ngmodule/ts/src/index.1b.html create mode 100644 aio/content/examples/ngmodule/ts/src/index.2.html create mode 100644 aio/content/examples/ngmodule/ts/src/index.3.html create mode 100644 aio/content/examples/ngmodule/ts/src/index.html create mode 100644 aio/content/examples/ngmodule/ts/src/main-static.ts create mode 100644 aio/content/examples/ngmodule/ts/src/main.0.ts create mode 100644 aio/content/examples/ngmodule/ts/src/main.1.ts create mode 100644 aio/content/examples/ngmodule/ts/src/main.1b.ts create mode 100644 aio/content/examples/ngmodule/ts/src/main.2.ts create mode 100644 aio/content/examples/ngmodule/ts/src/main.3.ts create mode 100644 aio/content/examples/ngmodule/ts/src/main.ts create mode 100644 aio/content/examples/package.json create mode 100644 aio/content/examples/pipes/e2e-spec.ts create mode 100644 aio/content/examples/pipes/ts/example-config.json create mode 100644 aio/content/examples/pipes/ts/plnkr.json create mode 100644 aio/content/examples/pipes/ts/plnkr.no-link.html create mode 100644 aio/content/examples/pipes/ts/src/app/app.component.html create mode 100644 aio/content/examples/pipes/ts/src/app/app.component.ts create mode 100644 aio/content/examples/pipes/ts/src/app/app.module.ts create mode 100644 aio/content/examples/pipes/ts/src/app/exponential-strength.pipe.ts create mode 100644 aio/content/examples/pipes/ts/src/app/fetch-json.pipe.ts create mode 100644 aio/content/examples/pipes/ts/src/app/flying-heroes-impure.component.html create mode 100644 aio/content/examples/pipes/ts/src/app/flying-heroes.component.html create mode 100644 aio/content/examples/pipes/ts/src/app/flying-heroes.component.ts create mode 100644 aio/content/examples/pipes/ts/src/app/flying-heroes.pipe.ts create mode 100644 aio/content/examples/pipes/ts/src/app/hero-async-message.component.ts create mode 100644 aio/content/examples/pipes/ts/src/app/hero-birthday1.component.ts create mode 100644 aio/content/examples/pipes/ts/src/app/hero-birthday2.component.ts create mode 100644 aio/content/examples/pipes/ts/src/app/hero-list.component.ts create mode 100644 aio/content/examples/pipes/ts/src/app/heroes.ts create mode 100644 aio/content/examples/pipes/ts/src/app/power-boost-calculator.component.ts create mode 100644 aio/content/examples/pipes/ts/src/app/power-booster.component.ts create mode 100644 aio/content/examples/pipes/ts/src/heroes.json create mode 100644 aio/content/examples/pipes/ts/src/index.html create mode 100644 aio/content/examples/pipes/ts/src/main.ts create mode 100644 aio/content/examples/protractor-helpers.ts create mode 100644 aio/content/examples/protractor.config.js create mode 100644 aio/content/examples/quickstart/e2e-spec.ts create mode 100644 aio/content/examples/quickstart/js/bs-config.1.json create mode 100644 aio/content/examples/quickstart/js/example-config.json create mode 100644 aio/content/examples/quickstart/js/package.1.json create mode 100644 aio/content/examples/quickstart/js/plnkr.json create mode 100644 aio/content/examples/quickstart/js/plnkr.no-link.html create mode 100644 aio/content/examples/quickstart/js/src/app/app.component.js create mode 100644 aio/content/examples/quickstart/js/src/app/app.module.js create mode 100644 aio/content/examples/quickstart/js/src/index.html create mode 100644 aio/content/examples/quickstart/js/src/main.js create mode 100644 aio/content/examples/quickstart/js/src/styles.1.css create mode 100644 aio/content/examples/quickstart/ts/bs-config.1.json create mode 100644 aio/content/examples/quickstart/ts/example-config.json create mode 100644 aio/content/examples/quickstart/ts/plnkr.json create mode 100644 aio/content/examples/quickstart/ts/plnkr.no-link.html create mode 100644 aio/content/examples/quickstart/ts/src/app/app.component.ts create mode 100644 aio/content/examples/quickstart/ts/src/app/app.module.ts create mode 100644 aio/content/examples/quickstart/ts/src/index.html create mode 100644 aio/content/examples/quickstart/ts/src/main.ts create mode 100644 aio/content/examples/quickstart/ts/src/tsconfig.1.json create mode 100644 aio/content/examples/reactive-forms/e2e-spec.ts create mode 100644 aio/content/examples/reactive-forms/ts/example-config.json create mode 100644 aio/content/examples/reactive-forms/ts/final.plnkr.json create mode 100644 aio/content/examples/reactive-forms/ts/final.plnkr.no-link.html create mode 100644 aio/content/examples/reactive-forms/ts/plnkr.json create mode 100644 aio/content/examples/reactive-forms/ts/plnkr.no-link.html create mode 100644 aio/content/examples/reactive-forms/ts/src/app/app.component.1.ts create mode 100644 aio/content/examples/reactive-forms/ts/src/app/app.component.ts create mode 100644 aio/content/examples/reactive-forms/ts/src/app/app.module.ts create mode 100644 aio/content/examples/reactive-forms/ts/src/app/data-model.ts create mode 100644 aio/content/examples/reactive-forms/ts/src/app/demo.component.html create mode 100644 aio/content/examples/reactive-forms/ts/src/app/demo.component.ts create mode 100644 aio/content/examples/reactive-forms/ts/src/app/demo.module.ts create mode 100644 aio/content/examples/reactive-forms/ts/src/app/hero-detail-1.component.html create mode 100644 aio/content/examples/reactive-forms/ts/src/app/hero-detail-1.component.ts create mode 100644 aio/content/examples/reactive-forms/ts/src/app/hero-detail-2.component.html create mode 100644 aio/content/examples/reactive-forms/ts/src/app/hero-detail-2.component.ts create mode 100644 aio/content/examples/reactive-forms/ts/src/app/hero-detail-3.component.html create mode 100644 aio/content/examples/reactive-forms/ts/src/app/hero-detail-3.component.ts create mode 100644 aio/content/examples/reactive-forms/ts/src/app/hero-detail-3a.component.ts create mode 100644 aio/content/examples/reactive-forms/ts/src/app/hero-detail-4.component.html create mode 100644 aio/content/examples/reactive-forms/ts/src/app/hero-detail-4.component.ts create mode 100644 aio/content/examples/reactive-forms/ts/src/app/hero-detail-5.component.html create mode 100644 aio/content/examples/reactive-forms/ts/src/app/hero-detail-5.component.ts create mode 100644 aio/content/examples/reactive-forms/ts/src/app/hero-detail-6.component.html create mode 100644 aio/content/examples/reactive-forms/ts/src/app/hero-detail-6.component.ts create mode 100644 aio/content/examples/reactive-forms/ts/src/app/hero-detail-7.component.html create mode 100644 aio/content/examples/reactive-forms/ts/src/app/hero-detail-7.component.ts create mode 100644 aio/content/examples/reactive-forms/ts/src/app/hero-detail-8.component.html create mode 100644 aio/content/examples/reactive-forms/ts/src/app/hero-detail-8.component.ts create mode 100644 aio/content/examples/reactive-forms/ts/src/app/hero-detail.component.html create mode 100644 aio/content/examples/reactive-forms/ts/src/app/hero-detail.component.ts create mode 100644 aio/content/examples/reactive-forms/ts/src/app/hero-list.component.1.html create mode 100644 aio/content/examples/reactive-forms/ts/src/app/hero-list.component.html create mode 100644 aio/content/examples/reactive-forms/ts/src/app/hero-list.component.ts create mode 100644 aio/content/examples/reactive-forms/ts/src/app/hero.service.ts create mode 100644 aio/content/examples/reactive-forms/ts/src/index-final.html create mode 100644 aio/content/examples/reactive-forms/ts/src/index.html create mode 100644 aio/content/examples/reactive-forms/ts/src/main-final.ts create mode 100644 aio/content/examples/reactive-forms/ts/src/main.ts create mode 100644 aio/content/examples/router/e2e-spec.ts create mode 100644 aio/content/examples/router/ts/example-config.json create mode 100644 aio/content/examples/router/ts/plnkr.json create mode 100644 aio/content/examples/router/ts/plnkr.no-link.html create mode 100644 aio/content/examples/router/ts/src/app/admin/admin-dashboard.component.1.ts create mode 100644 aio/content/examples/router/ts/src/app/admin/admin-dashboard.component.2.ts create mode 100644 aio/content/examples/router/ts/src/app/admin/admin-dashboard.component.ts create mode 100644 aio/content/examples/router/ts/src/app/admin/admin-routing.module.1.ts create mode 100644 aio/content/examples/router/ts/src/app/admin/admin-routing.module.2.ts create mode 100644 aio/content/examples/router/ts/src/app/admin/admin-routing.module.3.ts create mode 100644 aio/content/examples/router/ts/src/app/admin/admin-routing.module.ts create mode 100644 aio/content/examples/router/ts/src/app/admin/admin.component.ts create mode 100644 aio/content/examples/router/ts/src/app/admin/admin.module.ts create mode 100644 aio/content/examples/router/ts/src/app/admin/manage-crises.component.ts create mode 100644 aio/content/examples/router/ts/src/app/admin/manage-heroes.component.ts create mode 100644 aio/content/examples/router/ts/src/app/animations.ts create mode 100644 aio/content/examples/router/ts/src/app/app-routing.module.1.ts create mode 100644 aio/content/examples/router/ts/src/app/app-routing.module.2.ts create mode 100644 aio/content/examples/router/ts/src/app/app-routing.module.3.ts create mode 100644 aio/content/examples/router/ts/src/app/app-routing.module.4.ts create mode 100644 aio/content/examples/router/ts/src/app/app-routing.module.5.ts create mode 100644 aio/content/examples/router/ts/src/app/app-routing.module.6.ts create mode 100644 aio/content/examples/router/ts/src/app/app-routing.module.ts create mode 100644 aio/content/examples/router/ts/src/app/app.component.1.ts create mode 100644 aio/content/examples/router/ts/src/app/app.component.2.ts create mode 100644 aio/content/examples/router/ts/src/app/app.component.3.ts create mode 100644 aio/content/examples/router/ts/src/app/app.component.4.ts create mode 100644 aio/content/examples/router/ts/src/app/app.component.5.ts create mode 100644 aio/content/examples/router/ts/src/app/app.component.ts create mode 100644 aio/content/examples/router/ts/src/app/app.module.0.ts create mode 100644 aio/content/examples/router/ts/src/app/app.module.1.ts create mode 100644 aio/content/examples/router/ts/src/app/app.module.2.ts create mode 100644 aio/content/examples/router/ts/src/app/app.module.3.ts create mode 100644 aio/content/examples/router/ts/src/app/app.module.4.ts create mode 100644 aio/content/examples/router/ts/src/app/app.module.5.ts create mode 100644 aio/content/examples/router/ts/src/app/app.module.6.ts create mode 100644 aio/content/examples/router/ts/src/app/app.module.7.ts create mode 100644 aio/content/examples/router/ts/src/app/app.module.ts create mode 100644 aio/content/examples/router/ts/src/app/auth-guard.service.1.ts create mode 100644 aio/content/examples/router/ts/src/app/auth-guard.service.2.ts create mode 100644 aio/content/examples/router/ts/src/app/auth-guard.service.3.ts create mode 100644 aio/content/examples/router/ts/src/app/auth-guard.service.4.ts create mode 100644 aio/content/examples/router/ts/src/app/auth-guard.service.ts create mode 100644 aio/content/examples/router/ts/src/app/auth.service.ts create mode 100644 aio/content/examples/router/ts/src/app/can-deactivate-guard.service.1.ts create mode 100644 aio/content/examples/router/ts/src/app/can-deactivate-guard.service.ts create mode 100644 aio/content/examples/router/ts/src/app/compose-message.component.html create mode 100644 aio/content/examples/router/ts/src/app/compose-message.component.ts create mode 100644 aio/content/examples/router/ts/src/app/crisis-center/crisis-center-home.component.ts create mode 100644 aio/content/examples/router/ts/src/app/crisis-center/crisis-center-routing.module.1.ts create mode 100644 aio/content/examples/router/ts/src/app/crisis-center/crisis-center-routing.module.2.ts create mode 100644 aio/content/examples/router/ts/src/app/crisis-center/crisis-center-routing.module.3.ts create mode 100644 aio/content/examples/router/ts/src/app/crisis-center/crisis-center-routing.module.4.ts create mode 100644 aio/content/examples/router/ts/src/app/crisis-center/crisis-center-routing.module.ts create mode 100644 aio/content/examples/router/ts/src/app/crisis-center/crisis-center.component.ts create mode 100644 aio/content/examples/router/ts/src/app/crisis-center/crisis-center.module.1.ts create mode 100644 aio/content/examples/router/ts/src/app/crisis-center/crisis-center.module.ts create mode 100644 aio/content/examples/router/ts/src/app/crisis-center/crisis-detail-resolver.service.ts create mode 100644 aio/content/examples/router/ts/src/app/crisis-center/crisis-detail.component.1.ts create mode 100644 aio/content/examples/router/ts/src/app/crisis-center/crisis-detail.component.ts create mode 100644 aio/content/examples/router/ts/src/app/crisis-center/crisis-list.component.1.ts create mode 100644 aio/content/examples/router/ts/src/app/crisis-center/crisis-list.component.ts create mode 100644 aio/content/examples/router/ts/src/app/crisis-center/crisis.service.ts create mode 100644 aio/content/examples/router/ts/src/app/crisis-list.component.ts create mode 100644 aio/content/examples/router/ts/src/app/dialog.service.ts create mode 100644 aio/content/examples/router/ts/src/app/hero-list.component.ts create mode 100644 aio/content/examples/router/ts/src/app/heroes/hero-detail.component.1.ts create mode 100644 aio/content/examples/router/ts/src/app/heroes/hero-detail.component.2.ts create mode 100644 aio/content/examples/router/ts/src/app/heroes/hero-detail.component.ts create mode 100644 aio/content/examples/router/ts/src/app/heroes/hero-list.component.1.ts create mode 100644 aio/content/examples/router/ts/src/app/heroes/hero-list.component.ts create mode 100644 aio/content/examples/router/ts/src/app/heroes/hero.service.ts create mode 100644 aio/content/examples/router/ts/src/app/heroes/heroes-routing.module.ts create mode 100644 aio/content/examples/router/ts/src/app/heroes/heroes.module.ts create mode 100644 aio/content/examples/router/ts/src/app/login-routing.module.ts create mode 100644 aio/content/examples/router/ts/src/app/login.component.1.ts create mode 100644 aio/content/examples/router/ts/src/app/login.component.ts create mode 100644 aio/content/examples/router/ts/src/app/not-found.component.ts create mode 100644 aio/content/examples/router/ts/src/app/selective-preloading-strategy.ts create mode 100644 aio/content/examples/router/ts/src/index.html create mode 100644 aio/content/examples/router/ts/src/main.ts create mode 100644 aio/content/examples/security/e2e-spec.ts create mode 100644 aio/content/examples/security/ts/example-config.json create mode 100644 aio/content/examples/security/ts/plnkr.json create mode 100644 aio/content/examples/security/ts/plnkr.no-link.html create mode 100644 aio/content/examples/security/ts/src/app/app.component.ts create mode 100644 aio/content/examples/security/ts/src/app/app.module.ts create mode 100644 aio/content/examples/security/ts/src/app/bypass-security.component.html create mode 100644 aio/content/examples/security/ts/src/app/bypass-security.component.ts create mode 100644 aio/content/examples/security/ts/src/app/inner-html-binding.component.html create mode 100644 aio/content/examples/security/ts/src/app/inner-html-binding.component.ts create mode 100644 aio/content/examples/security/ts/src/index.html create mode 100644 aio/content/examples/security/ts/src/main.ts create mode 100644 aio/content/examples/server-communication/e2e-spec.ts create mode 100644 aio/content/examples/server-communication/ts/example-config.json create mode 100644 aio/content/examples/server-communication/ts/plnkr.json create mode 100644 aio/content/examples/server-communication/ts/plnkr.no-link.html create mode 100644 aio/content/examples/server-communication/ts/src/app/app.component.ts create mode 100644 aio/content/examples/server-communication/ts/src/app/app.module.1.ts create mode 100644 aio/content/examples/server-communication/ts/src/app/app.module.ts create mode 100644 aio/content/examples/server-communication/ts/src/app/default-request-options.service.ts create mode 100644 aio/content/examples/server-communication/ts/src/app/hero-data.ts create mode 100644 aio/content/examples/server-communication/ts/src/app/heroes.json create mode 100644 aio/content/examples/server-communication/ts/src/app/toh/hero-list.component.html create mode 100644 aio/content/examples/server-communication/ts/src/app/toh/hero-list.component.promise.ts create mode 100644 aio/content/examples/server-communication/ts/src/app/toh/hero-list.component.ts create mode 100644 aio/content/examples/server-communication/ts/src/app/toh/hero.service.promise.ts create mode 100644 aio/content/examples/server-communication/ts/src/app/toh/hero.service.ts create mode 100644 aio/content/examples/server-communication/ts/src/app/toh/hero.ts create mode 100644 aio/content/examples/server-communication/ts/src/app/wiki/wiki-smart.component.ts create mode 100644 aio/content/examples/server-communication/ts/src/app/wiki/wiki.component.ts create mode 100644 aio/content/examples/server-communication/ts/src/app/wiki/wikipedia.service.1.ts create mode 100644 aio/content/examples/server-communication/ts/src/app/wiki/wikipedia.service.ts create mode 100644 aio/content/examples/server-communication/ts/src/index.html create mode 100644 aio/content/examples/server-communication/ts/src/main.ts create mode 100644 aio/content/examples/setup/e2e-spec.ts create mode 100644 aio/content/examples/setup/ts/example-config.json create mode 100644 aio/content/examples/setup/ts/non-essential-files.txt create mode 100644 aio/content/examples/setup/ts/plnkr.json create mode 100644 aio/content/examples/setup/ts/plnkr.no-link.html create mode 100644 aio/content/examples/setup/ts/quickstart-specs.plnkr.json create mode 100644 aio/content/examples/setup/ts/quickstart-specs.plnkr.no-link.html create mode 100644 aio/content/examples/setup/ts/src/app/app.component.spec.ts create mode 100644 aio/content/examples/setup/ts/src/app/app.component.ts create mode 100644 aio/content/examples/setup/ts/src/app/app.module.ts create mode 100644 aio/content/examples/setup/ts/src/index.html create mode 100644 aio/content/examples/setup/ts/src/main.ts create mode 100644 aio/content/examples/setup/ts/src/quickstart-specs.html create mode 100644 aio/content/examples/structural-directives/e2e-spec.ts create mode 100644 aio/content/examples/structural-directives/ts/example-config.json create mode 100644 aio/content/examples/structural-directives/ts/plnkr.json create mode 100644 aio/content/examples/structural-directives/ts/plnkr.no-link.html create mode 100644 aio/content/examples/structural-directives/ts/src/app/app.component.css create mode 100644 aio/content/examples/structural-directives/ts/src/app/app.component.html create mode 100644 aio/content/examples/structural-directives/ts/src/app/app.component.ts create mode 100644 aio/content/examples/structural-directives/ts/src/app/app.module.ts create mode 100644 aio/content/examples/structural-directives/ts/src/app/hero-switch.components.ts create mode 100644 aio/content/examples/structural-directives/ts/src/app/hero.ts create mode 100644 aio/content/examples/structural-directives/ts/src/app/scrap.txt create mode 100644 aio/content/examples/structural-directives/ts/src/app/unless.directive.ts create mode 100644 aio/content/examples/structural-directives/ts/src/index.html create mode 100644 aio/content/examples/structural-directives/ts/src/main.ts create mode 100644 aio/content/examples/style-guide/e2e-spec.ts create mode 100644 aio/content/examples/style-guide/ts/.gitignore create mode 100644 aio/content/examples/style-guide/ts/example-config.json create mode 100644 aio/content/examples/style-guide/ts/plnkr.json create mode 100644 aio/content/examples/style-guide/ts/plnkr.no-link.html create mode 100644 aio/content/examples/style-guide/ts/src/01-01/app/app.component.css create mode 100644 aio/content/examples/style-guide/ts/src/01-01/app/app.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/01-01/app/app.module.ts create mode 100644 aio/content/examples/style-guide/ts/src/01-01/app/heroes/hero.component.avoid.ts create mode 100644 aio/content/examples/style-guide/ts/src/01-01/app/heroes/heroes.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/01-01/app/heroes/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/01-01/app/heroes/shared/hero.model.ts create mode 100644 aio/content/examples/style-guide/ts/src/01-01/app/heroes/shared/hero.service.ts create mode 100644 aio/content/examples/style-guide/ts/src/01-01/app/heroes/shared/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/01-01/app/heroes/shared/mock-heroes.ts create mode 100644 aio/content/examples/style-guide/ts/src/01-01/app/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/01-01/main.ts create mode 100644 aio/content/examples/style-guide/ts/src/02-05/app/app.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/02-05/app/app.module.ts create mode 100644 aio/content/examples/style-guide/ts/src/02-05/main.ts create mode 100644 aio/content/examples/style-guide/ts/src/02-07/app/app.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/02-07/app/app.module.ts create mode 100644 aio/content/examples/style-guide/ts/src/02-07/app/heroes/hero.component.avoid.ts create mode 100644 aio/content/examples/style-guide/ts/src/02-07/app/heroes/hero.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/02-07/app/heroes/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/02-07/app/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/02-07/app/users/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/02-07/app/users/users.component.avoid.ts create mode 100644 aio/content/examples/style-guide/ts/src/02-07/app/users/users.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/02-08/app/app.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/02-08/app/app.module.ts create mode 100644 aio/content/examples/style-guide/ts/src/02-08/app/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/02-08/app/shared/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/02-08/app/shared/input-highlight.directive.ts create mode 100644 aio/content/examples/style-guide/ts/src/02-08/app/shared/validate.directive.avoid.ts create mode 100644 aio/content/examples/style-guide/ts/src/02-08/app/shared/validate.directive.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-01/app/app.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-01/app/app.module.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-01/app/core/exception.service.avoid.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-01/app/core/exception.service.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-01/app/core/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-01/app/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-02/app/app.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-02/app/app.module.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-02/app/core/data.service.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-02/app/core/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-02/app/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-03/app/app.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-03/app/app.module.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-03/app/core/hero-collector.service.avoid.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-03/app/core/hero-collector.service.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-03/app/core/hero.model.avoid.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-03/app/core/hero.model.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-03/app/core/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-03/app/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-04/app/app.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-04/app/app.module.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-04/app/core/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-04/app/core/toast.service.avoid.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-04/app/core/toast.service.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-04/app/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-06/app/app.component.html create mode 100644 aio/content/examples/style-guide/ts/src/03-06/app/app.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-06/app/app.module.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-06/app/core/exception.service.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-06/app/core/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-06/app/core/spinner/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-06/app/core/spinner/spinner.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-06/app/core/spinner/spinner.service.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-06/app/core/toast/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-06/app/core/toast/toast.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-06/app/core/toast/toast.service.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-06/app/heroes/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-06/app/heroes/shared/hero.model.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-06/app/heroes/shared/hero.service.avoid.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-06/app/heroes/shared/hero.service.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-06/app/heroes/shared/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-06/app/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/03-06/app/shared/toast/toast.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/04-08/app/app.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/04-08/app/app.module.ts create mode 100644 aio/content/examples/style-guide/ts/src/04-08/app/heroes/heroes.component.html create mode 100644 aio/content/examples/style-guide/ts/src/04-08/app/heroes/heroes.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/04-10/app/app.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/04-10/app/app.module.ts create mode 100644 aio/content/examples/style-guide/ts/src/04-10/app/heroes/heroes.component.html create mode 100644 aio/content/examples/style-guide/ts/src/04-10/app/heroes/heroes.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/04-10/app/shared/filter-text/filter-text.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/04-10/app/shared/filter-text/filter-text.service.ts create mode 100644 aio/content/examples/style-guide/ts/src/04-10/app/shared/init-caps.pipe.ts create mode 100644 aio/content/examples/style-guide/ts/src/04-10/app/shared/shared.module.ts create mode 100644 aio/content/examples/style-guide/ts/src/04-11/app/app.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/04-11/app/app.module.ts create mode 100644 aio/content/examples/style-guide/ts/src/04-11/app/core/core.module.ts create mode 100644 aio/content/examples/style-guide/ts/src/04-11/app/core/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/04-11/app/core/logger.service.ts create mode 100644 aio/content/examples/style-guide/ts/src/04-11/app/core/nav/nav.component.css create mode 100644 aio/content/examples/style-guide/ts/src/04-11/app/core/nav/nav.component.html create mode 100644 aio/content/examples/style-guide/ts/src/04-11/app/core/nav/nav.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/04-11/app/core/spinner/spinner.component.css create mode 100644 aio/content/examples/style-guide/ts/src/04-11/app/core/spinner/spinner.component.html create mode 100644 aio/content/examples/style-guide/ts/src/04-11/app/core/spinner/spinner.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/04-11/app/core/spinner/spinner.service.ts create mode 100644 aio/content/examples/style-guide/ts/src/04-11/app/heroes/heroes.component.html create mode 100644 aio/content/examples/style-guide/ts/src/04-11/app/heroes/heroes.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/04-12/app/app.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/04-12/app/app.module.ts create mode 100644 aio/content/examples/style-guide/ts/src/04-12/app/core/core.module.ts create mode 100644 aio/content/examples/style-guide/ts/src/04-12/app/core/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/04-12/app/core/logger.service.ts create mode 100644 aio/content/examples/style-guide/ts/src/04-12/app/core/module-import-guard.ts create mode 100644 aio/content/examples/style-guide/ts/src/04-12/app/core/nav/nav.component.css create mode 100644 aio/content/examples/style-guide/ts/src/04-12/app/core/nav/nav.component.html create mode 100644 aio/content/examples/style-guide/ts/src/04-12/app/core/nav/nav.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/04-12/app/heroes/heroes.component.html create mode 100644 aio/content/examples/style-guide/ts/src/04-12/app/heroes/heroes.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-02/app/app.component.html create mode 100644 aio/content/examples/style-guide/ts/src/05-02/app/app.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-02/app/app.module.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-02/app/heroes/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-02/app/heroes/shared/hero-button/hero-button.component.avoid.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-02/app/heroes/shared/hero-button/hero-button.component.html create mode 100644 aio/content/examples/style-guide/ts/src/05-02/app/heroes/shared/hero-button/hero-button.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-02/app/heroes/shared/hero-button/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-02/app/heroes/shared/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-02/app/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-03/app/app.component.avoid.html create mode 100644 aio/content/examples/style-guide/ts/src/05-03/app/app.component.html create mode 100644 aio/content/examples/style-guide/ts/src/05-03/app/app.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-03/app/app.module.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-03/app/heroes/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-03/app/heroes/shared/hero-button/hero-button.component.avoid.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-03/app/heroes/shared/hero-button/hero-button.component.html create mode 100644 aio/content/examples/style-guide/ts/src/05-03/app/heroes/shared/hero-button/hero-button.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-03/app/heroes/shared/hero-button/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-03/app/heroes/shared/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-03/app/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-04/app/app.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-04/app/app.module.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-04/app/heroes/heroes.component.avoid.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-04/app/heroes/heroes.component.css create mode 100644 aio/content/examples/style-guide/ts/src/05-04/app/heroes/heroes.component.html create mode 100644 aio/content/examples/style-guide/ts/src/05-04/app/heroes/heroes.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-04/app/heroes/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-04/app/heroes/shared/hero.model.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-04/app/heroes/shared/hero.service.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-04/app/heroes/shared/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-04/app/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-12/app/app.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-12/app/app.module.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-12/app/heroes/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-12/app/heroes/shared/hero-button/hero-button.component.avoid.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-12/app/heroes/shared/hero-button/hero-button.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-12/app/heroes/shared/hero-button/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-12/app/heroes/shared/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-12/app/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-13/app/app.component.avoid.html create mode 100644 aio/content/examples/style-guide/ts/src/05-13/app/app.component.html create mode 100644 aio/content/examples/style-guide/ts/src/05-13/app/app.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-13/app/app.module.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-13/app/heroes/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-13/app/heroes/shared/hero-button/hero-button.component.avoid.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-13/app/heroes/shared/hero-button/hero-button.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-13/app/heroes/shared/hero-button/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-13/app/heroes/shared/hero-highlight.directive.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-13/app/heroes/shared/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-13/app/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-14/app/app.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-14/app/app.module.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-14/app/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-14/app/shared/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-14/app/shared/toast/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-14/app/shared/toast/toast.component.avoid.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-14/app/shared/toast/toast.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-15/app/app.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-15/app/app.module.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-15/app/heroes/hero-list/hero-list.component.avoid.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-15/app/heroes/hero-list/hero-list.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-15/app/heroes/hero-list/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-15/app/heroes/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-15/app/heroes/shared/hero.model.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-15/app/heroes/shared/hero.service.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-15/app/heroes/shared/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-15/app/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-16/app/app.component.avoid.html create mode 100644 aio/content/examples/style-guide/ts/src/05-16/app/app.component.html create mode 100644 aio/content/examples/style-guide/ts/src/05-16/app/app.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-16/app/app.module.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-16/app/heroes/hero.component.avoid.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-16/app/heroes/hero.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-16/app/heroes/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-16/app/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-17/app/app.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-17/app/app.module.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-17/app/heroes/hero-list/hero-list.component.avoid.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-17/app/heroes/hero-list/hero-list.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-17/app/heroes/hero-list/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-17/app/heroes/hero/hero.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-17/app/heroes/hero/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-17/app/heroes/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-17/app/heroes/shared/hero.model.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-17/app/heroes/shared/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/05-17/app/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/06-01/app/app.component.html create mode 100644 aio/content/examples/style-guide/ts/src/06-01/app/app.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/06-01/app/app.module.ts create mode 100644 aio/content/examples/style-guide/ts/src/06-01/app/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/06-01/app/shared/highlight.directive.ts create mode 100644 aio/content/examples/style-guide/ts/src/06-01/app/shared/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/06-03/app/app.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/06-03/app/app.module.ts create mode 100644 aio/content/examples/style-guide/ts/src/06-03/app/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/06-03/app/shared/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/06-03/app/shared/validator.directive.ts create mode 100644 aio/content/examples/style-guide/ts/src/06-03/app/shared/validator2.directive.ts create mode 100644 aio/content/examples/style-guide/ts/src/07-01/app/app.component.html create mode 100644 aio/content/examples/style-guide/ts/src/07-01/app/app.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/07-01/app/app.module.ts create mode 100644 aio/content/examples/style-guide/ts/src/07-01/app/heroes/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/07-01/app/heroes/shared/hero.model.ts create mode 100644 aio/content/examples/style-guide/ts/src/07-01/app/heroes/shared/hero.service.ts create mode 100644 aio/content/examples/style-guide/ts/src/07-01/app/heroes/shared/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/07-01/app/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/07-03/app/app.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/07-03/app/app.module.ts create mode 100644 aio/content/examples/style-guide/ts/src/07-03/app/heroes/hero-list/hero-list.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/07-03/app/heroes/hero-list/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/07-03/app/heroes/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/07-03/app/heroes/shared/hero.model.ts create mode 100644 aio/content/examples/style-guide/ts/src/07-03/app/heroes/shared/hero.service.ts create mode 100644 aio/content/examples/style-guide/ts/src/07-03/app/heroes/shared/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/07-03/app/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/07-04/app/app.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/07-04/app/app.module.ts create mode 100644 aio/content/examples/style-guide/ts/src/07-04/app/heroes/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/07-04/app/heroes/shared/hero-arena.service.avoid.ts create mode 100644 aio/content/examples/style-guide/ts/src/07-04/app/heroes/shared/hero-arena.service.ts create mode 100644 aio/content/examples/style-guide/ts/src/07-04/app/heroes/shared/hero.model.ts create mode 100644 aio/content/examples/style-guide/ts/src/07-04/app/heroes/shared/hero.service.ts create mode 100644 aio/content/examples/style-guide/ts/src/07-04/app/heroes/shared/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/07-04/app/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/09-01/app/app.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/09-01/app/app.module.ts create mode 100644 aio/content/examples/style-guide/ts/src/09-01/app/heroes/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/09-01/app/heroes/shared/hero-button/hero-button.component.avoid.ts create mode 100644 aio/content/examples/style-guide/ts/src/09-01/app/heroes/shared/hero-button/hero-button.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/09-01/app/heroes/shared/hero-button/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/09-01/app/heroes/shared/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/09-01/app/index.ts create mode 100644 aio/content/examples/style-guide/ts/src/app/app.component.html create mode 100644 aio/content/examples/style-guide/ts/src/app/app.component.ts create mode 100644 aio/content/examples/style-guide/ts/src/app/app.routes.ts create mode 100644 aio/content/examples/style-guide/ts/src/app/hero-data.ts create mode 100644 aio/content/examples/style-guide/ts/src/index.html create mode 100644 aio/content/examples/style-guide/ts/src/main.ts create mode 100644 aio/content/examples/style-guide/ts/src/systemjs.custom.js create mode 100644 aio/content/examples/styleguide/e2e-spec.ts create mode 100644 aio/content/examples/styleguide/foo.dart create mode 100644 aio/content/examples/styleguide/foo.yaml create mode 100644 aio/content/examples/styleguide/js/example-config.json create mode 100644 aio/content/examples/styleguide/js/spec.js create mode 100644 aio/content/examples/styleguide/js/src/app.js create mode 100644 aio/content/examples/styleguide/js/src/index.html create mode 100644 aio/content/examples/styleguide/jsonly.zipconfig.json create mode 100644 aio/content/examples/styleguide/package.1.json create mode 100644 aio/content/examples/styleguide/ts/example-config.json create mode 100644 aio/content/examples/styleguide/ts/src/app/app.component.ts create mode 100644 aio/content/examples/styleguide/ts/src/app/app.module.ts create mode 100644 aio/content/examples/styleguide/ts/src/index.html create mode 100644 aio/content/examples/styleguide/ts/src/main.ts create mode 100644 aio/content/examples/styleguide/zipconfig.json create mode 100644 aio/content/examples/template-syntax/e2e-spec.ts create mode 100644 aio/content/examples/template-syntax/ts/example-config.json create mode 100644 aio/content/examples/template-syntax/ts/plnkr.json create mode 100644 aio/content/examples/template-syntax/ts/plnkr.no-link.html create mode 100644 aio/content/examples/template-syntax/ts/src/app/app.component.css create mode 100644 aio/content/examples/template-syntax/ts/src/app/app.component.html create mode 100644 aio/content/examples/template-syntax/ts/src/app/app.component.ts create mode 100644 aio/content/examples/template-syntax/ts/src/app/app.module.1.ts create mode 100644 aio/content/examples/template-syntax/ts/src/app/app.module.ts create mode 100644 aio/content/examples/template-syntax/ts/src/app/click.directive.ts create mode 100644 aio/content/examples/template-syntax/ts/src/app/hero-detail.component.ts create mode 100644 aio/content/examples/template-syntax/ts/src/app/hero-form.component.html create mode 100644 aio/content/examples/template-syntax/ts/src/app/hero-form.component.ts create mode 100644 aio/content/examples/template-syntax/ts/src/app/hero-switch.components.ts create mode 100644 aio/content/examples/template-syntax/ts/src/app/hero.ts create mode 100644 aio/content/examples/template-syntax/ts/src/app/sizer.component.ts create mode 100644 aio/content/examples/template-syntax/ts/src/images/hero.png create mode 100644 aio/content/examples/template-syntax/ts/src/images/ng-logo.png create mode 100644 aio/content/examples/template-syntax/ts/src/images/villain.png create mode 100644 aio/content/examples/template-syntax/ts/src/index.html create mode 100644 aio/content/examples/template-syntax/ts/src/main.ts create mode 100644 aio/content/examples/template-syntax/ts/src/template-syntax.css create mode 100644 aio/content/examples/testing/ts/.gitignore create mode 100644 aio/content/examples/testing/ts/1st-specs.plnkr.json create mode 100644 aio/content/examples/testing/ts/1st-specs.plnkr.no-link.html create mode 100644 aio/content/examples/testing/ts/app-specs.plnkr.json create mode 100644 aio/content/examples/testing/ts/app-specs.plnkr.no-link.html create mode 100644 aio/content/examples/testing/ts/bag-specs.plnkr.json create mode 100644 aio/content/examples/testing/ts/bag-specs.plnkr.no-link.html create mode 100644 aio/content/examples/testing/ts/bag.plnkr.json create mode 100644 aio/content/examples/testing/ts/bag.plnkr.no-link.html create mode 100644 aio/content/examples/testing/ts/banner-inline-specs.plnkr.json create mode 100644 aio/content/examples/testing/ts/banner-inline-specs.plnkr.no-link.html create mode 100644 aio/content/examples/testing/ts/banner-specs.plnkr.json create mode 100644 aio/content/examples/testing/ts/banner-specs.plnkr.no-link.html create mode 100644 aio/content/examples/testing/ts/example-config.json create mode 100644 aio/content/examples/testing/ts/plnkr.json create mode 100644 aio/content/examples/testing/ts/plnkr.no-link.html create mode 100644 aio/content/examples/testing/ts/src/1st-specs.html create mode 100644 aio/content/examples/testing/ts/src/app-specs.html create mode 100644 aio/content/examples/testing/ts/src/app/1st.spec.ts create mode 100644 aio/content/examples/testing/ts/src/app/about.component.spec.ts create mode 100644 aio/content/examples/testing/ts/src/app/about.component.ts create mode 100644 aio/content/examples/testing/ts/src/app/app-routing.module.ts create mode 100644 aio/content/examples/testing/ts/src/app/app.component.html create mode 100644 aio/content/examples/testing/ts/src/app/app.component.router.spec.ts create mode 100644 aio/content/examples/testing/ts/src/app/app.component.spec.ts create mode 100644 aio/content/examples/testing/ts/src/app/app.component.ts create mode 100644 aio/content/examples/testing/ts/src/app/app.module.ts create mode 100644 aio/content/examples/testing/ts/src/app/bag/async-helper.spec.ts create mode 100644 aio/content/examples/testing/ts/src/app/bag/bag-external-template.html create mode 100644 aio/content/examples/testing/ts/src/app/bag/bag-main.ts create mode 100644 aio/content/examples/testing/ts/src/app/bag/bag.no-testbed.spec.ts create mode 100644 aio/content/examples/testing/ts/src/app/bag/bag.spec.ts create mode 100644 aio/content/examples/testing/ts/src/app/bag/bag.ts create mode 100644 aio/content/examples/testing/ts/src/app/banner-inline.component.spec.ts create mode 100644 aio/content/examples/testing/ts/src/app/banner-inline.component.ts create mode 100644 aio/content/examples/testing/ts/src/app/banner.component.css create mode 100644 aio/content/examples/testing/ts/src/app/banner.component.detect-changes.spec.ts create mode 100644 aio/content/examples/testing/ts/src/app/banner.component.html create mode 100644 aio/content/examples/testing/ts/src/app/banner.component.spec.ts create mode 100644 aio/content/examples/testing/ts/src/app/banner.component.ts create mode 100644 aio/content/examples/testing/ts/src/app/dashboard/dashboard-hero.component.css create mode 100644 aio/content/examples/testing/ts/src/app/dashboard/dashboard-hero.component.html create mode 100644 aio/content/examples/testing/ts/src/app/dashboard/dashboard-hero.component.spec.ts create mode 100644 aio/content/examples/testing/ts/src/app/dashboard/dashboard-hero.component.ts create mode 100644 aio/content/examples/testing/ts/src/app/dashboard/dashboard.component.css create mode 100644 aio/content/examples/testing/ts/src/app/dashboard/dashboard.component.html create mode 100644 aio/content/examples/testing/ts/src/app/dashboard/dashboard.component.no-testbed.spec.ts create mode 100644 aio/content/examples/testing/ts/src/app/dashboard/dashboard.component.spec.ts create mode 100644 aio/content/examples/testing/ts/src/app/dashboard/dashboard.component.ts create mode 100644 aio/content/examples/testing/ts/src/app/dashboard/dashboard.module.ts create mode 100644 aio/content/examples/testing/ts/src/app/hero/hero-detail.component.css create mode 100644 aio/content/examples/testing/ts/src/app/hero/hero-detail.component.html create mode 100644 aio/content/examples/testing/ts/src/app/hero/hero-detail.component.no-testbed.spec.ts create mode 100644 aio/content/examples/testing/ts/src/app/hero/hero-detail.component.spec.ts create mode 100644 aio/content/examples/testing/ts/src/app/hero/hero-detail.component.ts create mode 100644 aio/content/examples/testing/ts/src/app/hero/hero-detail.service.ts create mode 100644 aio/content/examples/testing/ts/src/app/hero/hero-list.component.css create mode 100644 aio/content/examples/testing/ts/src/app/hero/hero-list.component.html create mode 100644 aio/content/examples/testing/ts/src/app/hero/hero-list.component.spec.ts create mode 100644 aio/content/examples/testing/ts/src/app/hero/hero-list.component.ts create mode 100644 aio/content/examples/testing/ts/src/app/hero/hero-routing.module.ts create mode 100644 aio/content/examples/testing/ts/src/app/hero/hero.module.ts create mode 100644 aio/content/examples/testing/ts/src/app/model/hero.service.ts create mode 100644 aio/content/examples/testing/ts/src/app/model/hero.spec.ts create mode 100644 aio/content/examples/testing/ts/src/app/model/hero.ts create mode 100644 aio/content/examples/testing/ts/src/app/model/http-hero.service.spec.ts create mode 100644 aio/content/examples/testing/ts/src/app/model/http-hero.service.ts create mode 100644 aio/content/examples/testing/ts/src/app/model/index.ts create mode 100644 aio/content/examples/testing/ts/src/app/model/test-heroes.ts create mode 100644 aio/content/examples/testing/ts/src/app/model/testing/fake-hero.service.ts create mode 100644 aio/content/examples/testing/ts/src/app/model/testing/index.ts create mode 100644 aio/content/examples/testing/ts/src/app/model/user.service.ts create mode 100644 aio/content/examples/testing/ts/src/app/shared/highlight.directive.spec.ts create mode 100644 aio/content/examples/testing/ts/src/app/shared/highlight.directive.ts create mode 100644 aio/content/examples/testing/ts/src/app/shared/shared.module.ts create mode 100644 aio/content/examples/testing/ts/src/app/shared/title-case.pipe.spec.ts create mode 100644 aio/content/examples/testing/ts/src/app/shared/title-case.pipe.ts create mode 100644 aio/content/examples/testing/ts/src/app/shared/twain.component.spec.ts create mode 100644 aio/content/examples/testing/ts/src/app/shared/twain.component.timer.spec.ts.no-work create mode 100644 aio/content/examples/testing/ts/src/app/shared/twain.component.timer.ts.no-work create mode 100644 aio/content/examples/testing/ts/src/app/shared/twain.component.ts create mode 100644 aio/content/examples/testing/ts/src/app/shared/twain.service.ts create mode 100644 aio/content/examples/testing/ts/src/app/welcome.component.spec.ts create mode 100644 aio/content/examples/testing/ts/src/app/welcome.component.ts create mode 100644 aio/content/examples/testing/ts/src/bag-specs.html create mode 100644 aio/content/examples/testing/ts/src/bag.html create mode 100644 aio/content/examples/testing/ts/src/banner-inline-specs.html create mode 100644 aio/content/examples/testing/ts/src/banner-specs.html create mode 100644 aio/content/examples/testing/ts/src/browser-test-shim.js create mode 100644 aio/content/examples/testing/ts/src/index.html create mode 100644 aio/content/examples/testing/ts/src/main.ts create mode 100644 aio/content/examples/testing/ts/src/testing/index.ts create mode 100644 aio/content/examples/testing/ts/src/testing/jasmine-matchers.d.ts create mode 100644 aio/content/examples/testing/ts/src/testing/jasmine-matchers.ts create mode 100644 aio/content/examples/testing/ts/src/testing/router-stubs.ts create mode 100644 aio/content/examples/toh-1/dart-snippets/app_component_snippets_pt1.dart create mode 100644 aio/content/examples/toh-1/e2e-spec.ts create mode 100644 aio/content/examples/toh-1/ts-snippets/app.component.snippets.pt1.ts create mode 100644 aio/content/examples/toh-1/ts/example-config.json create mode 100644 aio/content/examples/toh-1/ts/plnkr.json create mode 100644 aio/content/examples/toh-1/ts/plnkr.no-link.html create mode 100644 aio/content/examples/toh-1/ts/src/app/app.component.ts create mode 100644 aio/content/examples/toh-1/ts/src/app/app.module.ts create mode 100644 aio/content/examples/toh-1/ts/src/index.html create mode 100644 aio/content/examples/toh-1/ts/src/main.ts create mode 100644 aio/content/examples/toh-2/dart-snippets/app_component_snippets_pt2.dart create mode 100644 aio/content/examples/toh-2/e2e-spec.ts create mode 100644 aio/content/examples/toh-2/ts-snippets/app.component.snippets.pt2.ts create mode 100644 aio/content/examples/toh-2/ts/example-config.json create mode 100644 aio/content/examples/toh-2/ts/plnkr.json create mode 100644 aio/content/examples/toh-2/ts/plnkr.no-link.html create mode 100644 aio/content/examples/toh-2/ts/src/app/app.component.ts create mode 100644 aio/content/examples/toh-2/ts/src/app/app.module.ts create mode 100644 aio/content/examples/toh-2/ts/src/index.html create mode 100644 aio/content/examples/toh-2/ts/src/main.ts create mode 100644 aio/content/examples/toh-3/e2e-spec.ts create mode 100644 aio/content/examples/toh-3/ts/example-config.json create mode 100644 aio/content/examples/toh-3/ts/plnkr.json create mode 100644 aio/content/examples/toh-3/ts/plnkr.no-link.html create mode 100644 aio/content/examples/toh-3/ts/src/app/app.component.ts create mode 100644 aio/content/examples/toh-3/ts/src/app/app.module.ts create mode 100644 aio/content/examples/toh-3/ts/src/app/hero-detail.component.ts create mode 100644 aio/content/examples/toh-3/ts/src/app/hero.ts create mode 100644 aio/content/examples/toh-3/ts/src/index.html create mode 100644 aio/content/examples/toh-3/ts/src/main.ts create mode 100644 aio/content/examples/toh-4/e2e-spec.ts create mode 100644 aio/content/examples/toh-4/ts/example-config.json create mode 100644 aio/content/examples/toh-4/ts/plnkr.json create mode 100644 aio/content/examples/toh-4/ts/plnkr.no-link.html create mode 100644 aio/content/examples/toh-4/ts/src/app/app.component.1.ts create mode 100644 aio/content/examples/toh-4/ts/src/app/app.component.ts create mode 100644 aio/content/examples/toh-4/ts/src/app/app.module.ts create mode 100644 aio/content/examples/toh-4/ts/src/app/hero-detail.component.ts create mode 100644 aio/content/examples/toh-4/ts/src/app/hero.service.1.ts create mode 100644 aio/content/examples/toh-4/ts/src/app/hero.service.2.ts create mode 100644 aio/content/examples/toh-4/ts/src/app/hero.service.ts create mode 100644 aio/content/examples/toh-4/ts/src/app/hero.ts create mode 100644 aio/content/examples/toh-4/ts/src/app/mock-heroes.ts create mode 100644 aio/content/examples/toh-4/ts/src/index.html create mode 100644 aio/content/examples/toh-4/ts/src/main.1.ts create mode 100644 aio/content/examples/toh-4/ts/src/main.ts create mode 100644 aio/content/examples/toh-5/e2e-spec.ts create mode 100644 aio/content/examples/toh-5/ts/example-config.json create mode 100644 aio/content/examples/toh-5/ts/plnkr.json create mode 100644 aio/content/examples/toh-5/ts/plnkr.no-link.html create mode 100644 aio/content/examples/toh-5/ts/src/app/app-routing.module.ts create mode 100644 aio/content/examples/toh-5/ts/src/app/app.component.1.ts create mode 100644 aio/content/examples/toh-5/ts/src/app/app.component.css create mode 100644 aio/content/examples/toh-5/ts/src/app/app.component.ts create mode 100644 aio/content/examples/toh-5/ts/src/app/app.module.1.ts create mode 100644 aio/content/examples/toh-5/ts/src/app/app.module.2.ts create mode 100644 aio/content/examples/toh-5/ts/src/app/app.module.3.ts create mode 100644 aio/content/examples/toh-5/ts/src/app/app.module.ts create mode 100644 aio/content/examples/toh-5/ts/src/app/dashboard.component.1.html create mode 100644 aio/content/examples/toh-5/ts/src/app/dashboard.component.1.ts create mode 100644 aio/content/examples/toh-5/ts/src/app/dashboard.component.css create mode 100644 aio/content/examples/toh-5/ts/src/app/dashboard.component.html create mode 100644 aio/content/examples/toh-5/ts/src/app/dashboard.component.ts create mode 100644 aio/content/examples/toh-5/ts/src/app/hero-detail.component.1.ts create mode 100644 aio/content/examples/toh-5/ts/src/app/hero-detail.component.css create mode 100644 aio/content/examples/toh-5/ts/src/app/hero-detail.component.html create mode 100644 aio/content/examples/toh-5/ts/src/app/hero-detail.component.ts create mode 100644 aio/content/examples/toh-5/ts/src/app/hero.service.ts create mode 100644 aio/content/examples/toh-5/ts/src/app/hero.ts create mode 100644 aio/content/examples/toh-5/ts/src/app/heroes.component.css create mode 100644 aio/content/examples/toh-5/ts/src/app/heroes.component.html create mode 100644 aio/content/examples/toh-5/ts/src/app/heroes.component.ts create mode 100644 aio/content/examples/toh-5/ts/src/app/mock-heroes.ts create mode 100644 aio/content/examples/toh-5/ts/src/index.html create mode 100644 aio/content/examples/toh-5/ts/src/main.ts create mode 100644 aio/content/examples/toh-6/e2e-spec.ts create mode 100644 aio/content/examples/toh-6/ts/.gitignore create mode 100644 aio/content/examples/toh-6/ts/aot/index.html create mode 100644 aio/content/examples/toh-6/ts/aot/styles.css create mode 100644 aio/content/examples/toh-6/ts/bs-config.aot.json create mode 100644 aio/content/examples/toh-6/ts/example-config.json create mode 100644 aio/content/examples/toh-6/ts/plnkr.json create mode 100644 aio/content/examples/toh-6/ts/plnkr.no-link.html create mode 100644 aio/content/examples/toh-6/ts/rollup-config.js create mode 100644 aio/content/examples/toh-6/ts/src/app/app-routing.module.ts create mode 100644 aio/content/examples/toh-6/ts/src/app/app.component.css create mode 100644 aio/content/examples/toh-6/ts/src/app/app.component.ts create mode 100644 aio/content/examples/toh-6/ts/src/app/app.module.ts create mode 100644 aio/content/examples/toh-6/ts/src/app/dashboard.component.css create mode 100644 aio/content/examples/toh-6/ts/src/app/dashboard.component.html create mode 100644 aio/content/examples/toh-6/ts/src/app/dashboard.component.ts create mode 100644 aio/content/examples/toh-6/ts/src/app/hero-detail.component.css create mode 100644 aio/content/examples/toh-6/ts/src/app/hero-detail.component.html create mode 100644 aio/content/examples/toh-6/ts/src/app/hero-detail.component.ts create mode 100644 aio/content/examples/toh-6/ts/src/app/hero-search.component.css create mode 100644 aio/content/examples/toh-6/ts/src/app/hero-search.component.html create mode 100644 aio/content/examples/toh-6/ts/src/app/hero-search.component.ts create mode 100644 aio/content/examples/toh-6/ts/src/app/hero-search.service.ts create mode 100644 aio/content/examples/toh-6/ts/src/app/hero.service.ts create mode 100644 aio/content/examples/toh-6/ts/src/app/hero.ts create mode 100644 aio/content/examples/toh-6/ts/src/app/heroes.component.css create mode 100644 aio/content/examples/toh-6/ts/src/app/heroes.component.html create mode 100644 aio/content/examples/toh-6/ts/src/app/heroes.component.ts create mode 100644 aio/content/examples/toh-6/ts/src/app/in-memory-data.service.ts create mode 100644 aio/content/examples/toh-6/ts/src/index.html create mode 100644 aio/content/examples/toh-6/ts/src/main-aot.ts create mode 100644 aio/content/examples/toh-6/ts/src/main.ts create mode 100644 aio/content/examples/toh-6/ts/src/tsconfig.1.json create mode 100644 aio/content/examples/toh-6/ts/tsconfig-aot.json create mode 100644 aio/content/examples/toh-6/ts/tsconfig-aot.json.annotated create mode 100644 aio/content/examples/tsconfig.json create mode 100644 aio/content/examples/upgrade-module/e2e-spec.ts create mode 100644 aio/content/examples/upgrade-module/ts/.gitignore create mode 100644 aio/content/examples/upgrade-module/ts/example-config.json create mode 100644 aio/content/examples/upgrade-module/ts/src/app/a-to-ajs-providers/app.module.ts create mode 100644 aio/content/examples/upgrade-module/ts/src/app/a-to-ajs-providers/hero-detail.component.ts create mode 100644 aio/content/examples/upgrade-module/ts/src/app/a-to-ajs-providers/heroes.ts create mode 100644 aio/content/examples/upgrade-module/ts/src/app/a-to-ajs-transclusion/app.module.ts create mode 100644 aio/content/examples/upgrade-module/ts/src/app/a-to-ajs-transclusion/container.component.ts create mode 100644 aio/content/examples/upgrade-module/ts/src/app/a-to-ajs-transclusion/hero-detail.component.ts create mode 100644 aio/content/examples/upgrade-module/ts/src/app/ajs-a-hybrid-bootstrap/app.module.ts create mode 100644 aio/content/examples/upgrade-module/ts/src/app/ajs-bootstrap/app.module.ts create mode 100644 aio/content/examples/upgrade-module/ts/src/app/ajs-ng-app/app.module.ts create mode 100644 aio/content/examples/upgrade-module/ts/src/app/ajs-to-a-projection/app.module.ts create mode 100644 aio/content/examples/upgrade-module/ts/src/app/ajs-to-a-projection/hero-detail.component.ts create mode 100644 aio/content/examples/upgrade-module/ts/src/app/ajs-to-a-projection/main.controller.ts create mode 100644 aio/content/examples/upgrade-module/ts/src/app/ajs-to-a-providers/ajs-upgraded-providers.ts create mode 100644 aio/content/examples/upgrade-module/ts/src/app/ajs-to-a-providers/app.module.ts create mode 100644 aio/content/examples/upgrade-module/ts/src/app/ajs-to-a-providers/hero-detail.component.ts create mode 100644 aio/content/examples/upgrade-module/ts/src/app/ajs-to-a-providers/heroes.service.ts create mode 100644 aio/content/examples/upgrade-module/ts/src/app/divide-routes/app.component.ts create mode 100644 aio/content/examples/upgrade-module/ts/src/app/divide-routes/app.module.ts create mode 100644 aio/content/examples/upgrade-module/ts/src/app/divide-routes/hero.module.ts create mode 100644 aio/content/examples/upgrade-module/ts/src/app/divide-routes/main.ts create mode 100644 aio/content/examples/upgrade-module/ts/src/app/downgrade-io/app.module.ts create mode 100644 aio/content/examples/upgrade-module/ts/src/app/downgrade-io/hero-detail.component.ts create mode 100644 aio/content/examples/upgrade-module/ts/src/app/downgrade-io/main.controller.ts create mode 100644 aio/content/examples/upgrade-module/ts/src/app/downgrade-static/app.module.ts create mode 100644 aio/content/examples/upgrade-module/ts/src/app/downgrade-static/hero-detail.component.ts create mode 100644 aio/content/examples/upgrade-module/ts/src/app/hero-detail.directive.ts create mode 100644 aio/content/examples/upgrade-module/ts/src/app/hero.ts create mode 100644 aio/content/examples/upgrade-module/ts/src/app/upgrade-io/app.module.ts create mode 100644 aio/content/examples/upgrade-module/ts/src/app/upgrade-io/container.component.ts create mode 100644 aio/content/examples/upgrade-module/ts/src/app/upgrade-io/hero-detail.component.ts create mode 100644 aio/content/examples/upgrade-module/ts/src/app/upgrade-static/app.module.ts create mode 100644 aio/content/examples/upgrade-module/ts/src/app/upgrade-static/container.component.ts create mode 100644 aio/content/examples/upgrade-module/ts/src/app/upgrade-static/hero-detail.component.ts create mode 100644 aio/content/examples/upgrade-module/ts/src/app/villain.ts create mode 100644 aio/content/examples/upgrade-module/ts/src/index-a-to-ajs-providers.html create mode 100644 aio/content/examples/upgrade-module/ts/src/index-a-to-ajs-transclusion.html create mode 100644 aio/content/examples/upgrade-module/ts/src/index-ajs-a-hybrid-bootstrap.html create mode 100644 aio/content/examples/upgrade-module/ts/src/index-ajs-to-a-projection.html create mode 100644 aio/content/examples/upgrade-module/ts/src/index-ajs-to-a-providers.html create mode 100644 aio/content/examples/upgrade-module/ts/src/index-bootstrap.html create mode 100644 aio/content/examples/upgrade-module/ts/src/index-divide-routes.html create mode 100644 aio/content/examples/upgrade-module/ts/src/index-downgrade-io.html create mode 100644 aio/content/examples/upgrade-module/ts/src/index-downgrade-static.html create mode 100644 aio/content/examples/upgrade-module/ts/src/index-ng-app.html create mode 100644 aio/content/examples/upgrade-module/ts/src/index-upgrade-io.html create mode 100644 aio/content/examples/upgrade-module/ts/src/index-upgrade-static.html create mode 100644 aio/content/examples/upgrade-module/ts/src/systemjs.config.1.js create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/README.md create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/e2e-spec.ts create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/.gitignore create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/app.animations.css create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/app.animations.ts create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/app.config.ts create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/app.css create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/app.module.ts create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/core/checkmark/checkmark.filter.spec.ts create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/core/checkmark/checkmark.filter.ts create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/core/core.module.ts create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/core/phone/phone.module.ts create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/core/phone/phone.service.spec.ts create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/core/phone/phone.service.ts create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/.gitkeep create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/dell-streak-7.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/dell-streak-7.1.jpg create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/dell-streak-7.2.jpg create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/dell-streak-7.3.jpg create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/dell-streak-7.4.jpg create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/motorola-atrix-4g.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/motorola-atrix-4g.1.jpg create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/motorola-atrix-4g.2.jpg create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/motorola-atrix-4g.3.jpg create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/motorola-xoom-with-wi-fi.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/motorola-xoom-with-wi-fi.1.jpg create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/motorola-xoom-with-wi-fi.2.jpg create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/motorola-xoom-with-wi-fi.3.jpg create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/motorola-xoom-with-wi-fi.4.jpg create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/motorola-xoom-with-wi-fi.5.jpg create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/motorola-xoom.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/motorola-xoom.1.jpg create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/motorola-xoom.2.jpg create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/nexus-s.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/nexus-s.1.jpg create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/nexus-s.2.jpg create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/nexus-s.3.jpg create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/index.html create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phone-detail/phone-detail.component.spec.ts create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phone-detail/phone-detail.component.ts create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phone-detail/phone-detail.module.ts create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phone-detail/phone-detail.template.html create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phone-list/phone-list.component.spec.ts create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phone-list/phone-list.component.ts create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phone-list/phone-list.module.ts create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phone-list/phone-list.template.html create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phones/dell-streak-7.json create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phones/motorola-atrix-4g.json create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phones/motorola-xoom-with-wi-fi.json create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phones/motorola-xoom.json create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phones/nexus-s.json create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phones/phones.json create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/example-config.json create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/karma.conf.ajs.js create mode 100755 aio/content/examples/upgrade-phonecat-1-typescript/ts/run-unit-tests.sh create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/tsconfig.ajs.json create mode 100644 aio/content/examples/upgrade-phonecat-1-typescript/ts/tsconfig.json create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/README.md create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/e2e-spec.ts create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/.gitignore create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/aot/index.html create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/ajs-upgraded-providers.ts create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/app.animations.css create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/app.animations.ts create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/app.config.ts create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/app.css create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/app.module.ajs.ts create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/app.module.ts create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/core/checkmark/checkmark.pipe.spec.ts create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/core/checkmark/checkmark.pipe.ts create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/core/core.module.ts create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/core/phone/phone.module.ts create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/core/phone/phone.service.spec.ts create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/core/phone/phone.service.ts create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/.gitkeep create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/dell-streak-7.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/dell-streak-7.1.jpg create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/dell-streak-7.2.jpg create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/dell-streak-7.3.jpg create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/dell-streak-7.4.jpg create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/dell-venue.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/droid-2-global-by-motorola.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/droid-pro-by-motorola.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/lg-axis.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-atrix-4g.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-atrix-4g.1.jpg create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-atrix-4g.2.jpg create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-atrix-4g.3.jpg create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-bravo-with-motoblur.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-charm-with-motoblur.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-defy-with-motoblur.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-xoom-with-wi-fi.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-xoom-with-wi-fi.1.jpg create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-xoom-with-wi-fi.2.jpg create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-xoom-with-wi-fi.3.jpg create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-xoom-with-wi-fi.4.jpg create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-xoom-with-wi-fi.5.jpg create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-xoom.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-xoom.1.jpg create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-xoom.2.jpg create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/nexus-s.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/nexus-s.1.jpg create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/nexus-s.2.jpg create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/nexus-s.3.jpg create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/samsung-galaxy-tab.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/samsung-gem.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/samsung-mesmerize-a-galaxy-s-phone.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/samsung-showcase-a-galaxy-s-phone.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/samsung-transform.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/sanyo-zio.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/t-mobile-g2.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/t-mobile-mytouch-4g.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/main-aot.ts create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/main.ts create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-detail/phone-detail.component.ajs.ts create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-detail/phone-detail.component.spec.ts create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-detail/phone-detail.component.ts create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-detail/phone-detail.module.ts create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-detail/phone-detail.template.html create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-list/phone-list.component.ajs.ts create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-list/phone-list.component.spec.ts create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-list/phone-list.component.ts create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-list/phone-list.module.ts create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-list/phone-list.template.html create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phones/dell-streak-7.json create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phones/motorola-atrix-4g.json create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phones/motorola-xoom-with-wi-fi.json create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phones/motorola-xoom.json create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phones/nexus-s.json create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phones/phones.json create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/bs-config.aot.json create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/copy-dist-files.js create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/example-config.json create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/index.html create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/karma.conf.ajs.js create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/package.ajs.json create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/rollup-config.js create mode 100755 aio/content/examples/upgrade-phonecat-2-hybrid/ts/run-unit-tests.sh create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/systemjs.config.1.js create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/tsconfig-aot.json create mode 100644 aio/content/examples/upgrade-phonecat-2-hybrid/ts/tsconfig.json create mode 100644 aio/content/examples/upgrade-phonecat-3-router/README.md create mode 100644 aio/content/examples/upgrade-phonecat-3-router/e2e-spec.ts create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/.gitignore create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/aot/bs-config.json create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/aot/index.html create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/ajs-upgraded-providers.ts create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/app-routing.module.ts create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/app.animations.css create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/app.animations.ts create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/app.component.ts create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/app.config.ts create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/app.css create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/app.module.ajs.ts create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/app.module.ts create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/core/checkmark/checkmark.pipe.spec.ts create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/core/checkmark/checkmark.pipe.ts create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/core/core.module.ts create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/core/phone/phone.module.ts create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/core/phone/phone.service.spec.ts create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/core/phone/phone.service.ts create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/img/.gitkeep create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/dell-streak-7.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/dell-streak-7.1.jpg create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/dell-streak-7.2.jpg create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/dell-streak-7.3.jpg create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/dell-streak-7.4.jpg create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/dell-venue.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/droid-2-global-by-motorola.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/droid-pro-by-motorola.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/lg-axis.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/motorola-atrix-4g.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/motorola-atrix-4g.1.jpg create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/motorola-atrix-4g.2.jpg create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/motorola-atrix-4g.3.jpg create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/motorola-bravo-with-motoblur.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/motorola-charm-with-motoblur.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/motorola-defy-with-motoblur.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/motorola-xoom-with-wi-fi.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/motorola-xoom-with-wi-fi.1.jpg create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/motorola-xoom-with-wi-fi.2.jpg create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/motorola-xoom-with-wi-fi.3.jpg create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/motorola-xoom-with-wi-fi.4.jpg create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/motorola-xoom-with-wi-fi.5.jpg create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/motorola-xoom.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/motorola-xoom.1.jpg create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/motorola-xoom.2.jpg create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/nexus-s.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/nexus-s.1.jpg create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/nexus-s.2.jpg create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/nexus-s.3.jpg create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/samsung-galaxy-tab.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/samsung-gem.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/samsung-mesmerize-a-galaxy-s-phone.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/samsung-showcase-a-galaxy-s-phone.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/samsung-transform.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/sanyo-zio.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/t-mobile-g2.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/t-mobile-mytouch-4g.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/main-aot.ts create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/main.ts create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/phone-detail/phone-detail.component.spec.ts create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/phone-detail/phone-detail.component.ts create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/phone-detail/phone-detail.module.ts create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/phone-detail/phone-detail.template.html create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/phone-list/phone-list.component.spec.ts create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/phone-list/phone-list.component.ts create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/phone-list/phone-list.module.ts create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/phone-list/phone-list.template.html create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/phones/dell-streak-7.json create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/phones/motorola-atrix-4g.json create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/phones/motorola-xoom-with-wi-fi.json create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/phones/motorola-xoom.json create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/phones/nexus-s.json create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/app/phones/phones.json create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/bs-config.aot.json create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/copy-dist-files.js create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/example-config.json create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/index.html create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/rollup-config.js create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/systemjs.config.1.js create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/tsconfig-aot.json create mode 100644 aio/content/examples/upgrade-phonecat-3-router/ts/tsconfig.json create mode 100644 aio/content/examples/upgrade-phonecat-4-final/README.md create mode 100644 aio/content/examples/upgrade-phonecat-4-final/e2e-spec.ts create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/app-routing.module.ts create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/app.component.ts create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/app.css create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/app.module.ts create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/core/checkmark/checkmark.pipe.spec.ts create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/core/checkmark/checkmark.pipe.ts create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/core/phone/phone.service.spec.ts create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/core/phone/phone.service.ts create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/img/.gitkeep create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/dell-streak-7.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/dell-streak-7.1.jpg create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/dell-streak-7.2.jpg create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/dell-streak-7.3.jpg create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/dell-streak-7.4.jpg create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/dell-venue.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/droid-2-global-by-motorola.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/droid-pro-by-motorola.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/lg-axis.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/motorola-atrix-4g.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/motorola-atrix-4g.1.jpg create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/motorola-atrix-4g.2.jpg create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/motorola-atrix-4g.3.jpg create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/motorola-bravo-with-motoblur.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/motorola-charm-with-motoblur.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/motorola-defy-with-motoblur.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/motorola-xoom-with-wi-fi.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/motorola-xoom-with-wi-fi.1.jpg create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/motorola-xoom-with-wi-fi.2.jpg create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/motorola-xoom-with-wi-fi.3.jpg create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/motorola-xoom-with-wi-fi.4.jpg create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/motorola-xoom-with-wi-fi.5.jpg create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/motorola-xoom.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/motorola-xoom.1.jpg create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/motorola-xoom.2.jpg create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/nexus-s.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/nexus-s.1.jpg create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/nexus-s.2.jpg create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/nexus-s.3.jpg create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/samsung-galaxy-tab.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/samsung-gem.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/samsung-mesmerize-a-galaxy-s-phone.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/samsung-showcase-a-galaxy-s-phone.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/samsung-transform.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/sanyo-zio.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/t-mobile-g2.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/t-mobile-mytouch-4g.0.jpg create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/main.ts create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/phone-detail/phone-detail.component.spec.ts create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/phone-detail/phone-detail.component.ts create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/phone-detail/phone-detail.template.html create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/phone-list/phone-list.component.spec.ts create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/phone-list/phone-list.component.ts create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/phone-list/phone-list.template.html create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/phones/dell-streak-7.json create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/phones/motorola-atrix-4g.json create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/phones/motorola-xoom-with-wi-fi.json create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/phones/motorola-xoom.json create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/phones/nexus-s.json create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/app/phones/phones.json create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/example-config.json create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/index.html create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/run-unit-tests.sh create mode 100644 aio/content/examples/upgrade-phonecat-4-final/ts/tsconfig.json create mode 100644 aio/content/examples/user-input/e2e-spec.ts create mode 100644 aio/content/examples/user-input/ts/example-config.json create mode 100644 aio/content/examples/user-input/ts/plnkr.json create mode 100644 aio/content/examples/user-input/ts/plnkr.no-link.html create mode 100644 aio/content/examples/user-input/ts/src/app/app.component.html create mode 100644 aio/content/examples/user-input/ts/src/app/app.component.ts create mode 100644 aio/content/examples/user-input/ts/src/app/app.module.ts create mode 100644 aio/content/examples/user-input/ts/src/app/click-me.component.ts create mode 100644 aio/content/examples/user-input/ts/src/app/click-me2.component.ts create mode 100644 aio/content/examples/user-input/ts/src/app/keyup.components.ts create mode 100644 aio/content/examples/user-input/ts/src/app/little-tour.component.ts create mode 100644 aio/content/examples/user-input/ts/src/app/loop-back.component.ts create mode 100644 aio/content/examples/user-input/ts/src/index.html create mode 100644 aio/content/examples/user-input/ts/src/main.ts create mode 100644 aio/content/examples/user-input/ts/src/user-input-styles.css create mode 100644 aio/content/examples/webpack/ts/webpack.config.js diff --git a/aio/content/examples/.gitignore b/aio/content/examples/.gitignore new file mode 100644 index 0000000000..eedd04da43 --- /dev/null +++ b/aio/content/examples/.gitignore @@ -0,0 +1,17 @@ +# _boilerplate files +!_boilerplate/* +*/*/src/styles.css +*/*/src/systemjs.config.js +*/*/src/tsconfig.json +*/*/bs-config.e2e.json +*/*/bs-config.json +*/*/package.json +*/*/tslint.json + +# example files +_test-output +protractor-helpers.js +*/e2e-spec.js +**/ts/**/*.js +**/js-es6*/**/*.js +**/ts-snippets/**/*.js diff --git a/aio/content/examples/_boilerplate/bs-config.e2e.json b/aio/content/examples/_boilerplate/bs-config.e2e.json new file mode 100644 index 0000000000..24570dbcc9 --- /dev/null +++ b/aio/content/examples/_boilerplate/bs-config.e2e.json @@ -0,0 +1,14 @@ +{ + "open": false, + "logLevel": "silent", + "port": 8080, + "server": { + "baseDir": "src", + "routes": { + "/node_modules": "node_modules" + }, + "middleware": { + "0": null + } + } +} diff --git a/aio/content/examples/_boilerplate/bs-config.json b/aio/content/examples/_boilerplate/bs-config.json new file mode 100644 index 0000000000..4e58595267 --- /dev/null +++ b/aio/content/examples/_boilerplate/bs-config.json @@ -0,0 +1,8 @@ +{ + "server": { + "baseDir": "src", + "routes": { + "/node_modules": "node_modules" + } + } +} diff --git a/aio/content/examples/_boilerplate/example-config.json b/aio/content/examples/_boilerplate/example-config.json new file mode 100644 index 0000000000..ff5403e6ca --- /dev/null +++ b/aio/content/examples/_boilerplate/example-config.json @@ -0,0 +1,4 @@ +{ + "build": "build", + "run": "serve" +} diff --git a/aio/content/examples/_boilerplate/package.json b/aio/content/examples/_boilerplate/package.json new file mode 100644 index 0000000000..5ac9fa9de2 --- /dev/null +++ b/aio/content/examples/_boilerplate/package.json @@ -0,0 +1,44 @@ +{ + "name": "angular-examples", + "version": "1.0.0", + "private": true, + "description": "Example package.json, only contains needed scripts for examples. See _examples/package.json for master package.json.", + "scripts": { + "build": "tsc -p src/", + "build:watch": "tsc -p src/ -w", + "build:e2e": "tsc -p e2e/", + "serve": "lite-server -c=bs-config.json", + "serve:e2e": "lite-server -c=bs-config.e2e.json", + "prestart": "npm run build", + "start": "concurrently \"npm run build:watch\" \"npm run serve\"", + "pree2e": "webdriver-manager update && npm run build:e2e", + "e2e": "concurrently \"npm run serve:e2e\" \"npm run protractor\" --kill-others --success first", + "protractor": "protractor protractor.config.js", + "pretest": "npm run build", + "test": "concurrently \"npm run build:watch\" \"karma start karma.conf.js\"", + "pretest:once": "npm run build", + "test:once": "karma start karma.conf.js --single-run", + "lint": "tslint ./src/**/*.ts -t verbose", + + "build:upgrade": "tsc", + "serve:upgrade": "http-server", + "build:cli": "ng build --no-progress", + "serve:cli": "http-server dist/", + "build:aot": "ngc -p tsconfig-aot.json && rollup -c rollup-config.js", + "serve:aot": "lite-server -c bs-config.aot.json", + "start:webpack": "webpack-dev-server --inline --progress --port 8080", + "test:webpack": "karma start karma.webpack.conf.js", + "build:webpack": "rimraf dist && webpack --config config/webpack.prod.js --bail", + "build:babel": "babel src -d src --extensions \".es6\" --source-maps", + "copy-dist-files": "node ./copy-dist-files.js", + "i18n": "ng-xi18n" + }, + "keywords": [], + "author": "", + "license": "MIT", + "dependencies": {}, + "devDependencies": { + "angular-cli": "^1.0.0-beta.26" + }, + "repository": {} +} diff --git a/aio/content/examples/_boilerplate/plnkr.json b/aio/content/examples/_boilerplate/plnkr.json new file mode 100644 index 0000000000..5fb55b50ad --- /dev/null +++ b/aio/content/examples/_boilerplate/plnkr.json @@ -0,0 +1,10 @@ +{ + "description": "QuickStart", + "basePath": "src/", + "files": [ + "app/app.component.ts", + "index.html" + ], + "open": "app/app.component.ts", + "tags": ["quickstart"] +} diff --git a/aio/content/examples/_boilerplate/src/styles.css b/aio/content/examples/_boilerplate/src/styles.css new file mode 100644 index 0000000000..d81835d0cd --- /dev/null +++ b/aio/content/examples/_boilerplate/src/styles.css @@ -0,0 +1,116 @@ +/* #docregion , quickstart, toh */ +/* Master Styles */ +h1 { + color: #369; + font-family: Arial, Helvetica, sans-serif; + font-size: 250%; +} +h2, h3 { + color: #444; + font-family: Arial, Helvetica, sans-serif; + font-weight: lighter; +} +body { + margin: 2em; +} +/* #enddocregion quickstart */ +body, input[text], button { + color: #888; + font-family: Cambria, Georgia; +} +/* #enddocregion toh */ +a { + cursor: pointer; + cursor: hand; +} +button { + font-family: Arial; + background-color: #eee; + border: none; + padding: 5px 10px; + border-radius: 4px; + cursor: pointer; + cursor: hand; +} +button:hover { + background-color: #cfd8dc; +} +button:disabled { + background-color: #eee; + color: #aaa; + cursor: auto; +} + +/* Navigation link styles */ +nav a { + padding: 5px 10px; + text-decoration: none; + margin-right: 10px; + margin-top: 10px; + display: inline-block; + background-color: #eee; + border-radius: 4px; +} +nav a:visited, a:link { + color: #607D8B; +} +nav a:hover { + color: #039be5; + background-color: #CFD8DC; +} +nav a.active { + color: #039be5; +} + +/* items class */ +.items { + margin: 0 0 2em 0; + list-style-type: none; + padding: 0; + width: 24em; +} +.items li { + cursor: pointer; + position: relative; + left: 0; + background-color: #EEE; + margin: .5em; + padding: .3em 0; + height: 1.6em; + border-radius: 4px; +} +.items li:hover { + color: #607D8B; + background-color: #DDD; + left: .1em; +} +.items li.selected { + background-color: #CFD8DC; + color: white; +} +.items li.selected:hover { + background-color: #BBD8DC; +} +.items .text { + position: relative; + top: -3px; +} +.items .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; +} +/* #docregion toh */ +/* everywhere else */ +* { + font-family: Arial, Helvetica, sans-serif; +} diff --git a/aio/content/examples/_boilerplate/src/systemjs.config.js b/aio/content/examples/_boilerplate/src/systemjs.config.js new file mode 100644 index 0000000000..5fa7e9c24f --- /dev/null +++ b/aio/content/examples/_boilerplate/src/systemjs.config.js @@ -0,0 +1,42 @@ +/** + * System configuration for Angular samples + * Adjust as necessary for your application needs. + */ +(function (global) { + System.config({ + paths: { + // paths serve as alias + 'npm:': 'node_modules/' + }, + // map tells the System loader where to look for things + map: { + // our app is within the app folder + app: 'app', + + // 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/router/upgrade': 'npm:@angular/router/bundles/router-upgrade.umd.js', + '@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js', + + // other libraries + 'rxjs': 'npm:rxjs', + 'angular-in-memory-web-api': 'npm:angular-in-memory-web-api/bundles/in-memory-web-api.umd.js' + }, + // 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' + } + } + }); +})(this); diff --git a/aio/content/examples/_boilerplate/src/systemjs.config.web.build.js b/aio/content/examples/_boilerplate/src/systemjs.config.web.build.js new file mode 100644 index 0000000000..c27642ce02 --- /dev/null +++ b/aio/content/examples/_boilerplate/src/systemjs.config.web.build.js @@ -0,0 +1,88 @@ +/** + * WEB VERSION FOR CURRENT ANGULAR BUILD + * (based on systemjs.config.js in angular.io) + * System configuration for Angular samples + * Adjust as necessary for your application needs. + * + * UNTESTED ! + */ +(function (global) { + System.config({ + // DEMO ONLY! REAL CODE SHOULD NOT TRANSPILE IN THE BROWSER + transpiler: 'ts', + typescriptOptions: { + // Copy of compiler options in standard tsconfig.json + "target": "es5", + "module": "commonjs", + "moduleResolution": "node", + "sourceMap": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "lib": ["es2015", "dom"], + "noImplicitAny": true, + "suppressImplicitAnyIndexErrors": true + }, + meta: { + 'typescript': { + "exports": "ts" + } + }, + paths: { + // paths serve as alias + 'npm:': 'https://unpkg.com/', + 'ng:': 'https://cdn.rawgit.com/angular/' + }, + // map tells the System loader where to look for things + map: { + // our app is within the app folder + app: 'app', + + // angular bundles + '@angular/core': 'ng:core-builds/master/bundles/core.umd.js', + '@angular/common': 'ng:common-builds/master/bundles/common.umd.js', + '@angular/compiler': 'ng:compiler-builds/master/bundles/compiler.umd.js', + '@angular/platform-browser': 'ng:platform-browser-builds/master/bundles/platform-browser.umd.js', + '@angular/platform-browser-dynamic': 'ng:platform-browser-dynamic-builds/master/bundles/platform-browser-dynamic.umd.js', + '@angular/http': 'ng:http-builds/master/bundles/http.umd.js', + '@angular/router': 'ng:router-builds/master/bundles/router.umd.js', + '@angular/router/upgrade': 'ng:router-builds/master/bundles/router-upgrade.umd.js', + '@angular/forms': 'ng:forms-builds/master/bundles/forms.umd.js', + '@angular/upgrade': 'ng:upgrade-builds/master/bundles/upgrade.umd.js', + '@angular/upgrade/static': 'ng:upgrade-builds/master/bundles/upgrade-static.umd.js', + + // angular testing umd bundles (overwrite the shim mappings) + '@angular/core/testing': 'ng:core-builds/master/bundles/core-testing.umd.js', + '@angular/common/testing': 'ng:common-builds/master/bundles/common-testing.umd.js', + '@angular/compiler/testing': 'ng:compiler-builds/master/bundles/compiler-testing.umd.js', + '@angular/platform-browser/testing': 'ng:platform-browser-builds/master/bundles/platform-browser-testing.umd.js', + '@angular/platform-browser-dynamic/testing': 'ng:platform-browser-dynamic-builds/master/bundles/platform-browser-dynamic-testing.umd.js', + '@angular/http/testing': 'ng:http-builds/master/bundles/http-testing.umd.js', + '@angular/router/testing': 'ng:router-builds/master/bundles/router-testing.umd.js', + '@angular/forms/testing': 'ng:forms-builds/master/bundles/forms-testing.umd.js', + + // other libraries + 'rxjs': 'npm:rxjs@5.0.1', + 'angular-in-memory-web-api': 'npm:angular-in-memory-web-api/bundles/in-memory-web-api.umd.js', + 'ts': 'npm:plugin-typescript@5.2.7/lib/plugin.js', + 'typescript': 'npm:typescript@2.0.10/lib/typescript.js', + + }, + // packages tells the System loader how to load when no filename and/or no extension + packages: { + app: { + main: './main.ts', + defaultExtension: 'ts' + }, + rxjs: { + defaultExtension: 'js' + } + } + }); + +})(this); + +/* +Copyright 2016 Google Inc. All Rights Reserved. +Use of this source code is governed by an MIT-style license that +can be found in the LICENSE file at http://angular.io/license +*/ diff --git a/aio/content/examples/_boilerplate/src/systemjs.config.web.js b/aio/content/examples/_boilerplate/src/systemjs.config.web.js new file mode 100644 index 0000000000..dc0234a172 --- /dev/null +++ b/aio/content/examples/_boilerplate/src/systemjs.config.web.js @@ -0,0 +1,75 @@ +/** + * WEB ANGULAR VERSION + * (based on systemjs.config.js in angular.io) + * System configuration for Angular samples + * Adjust as necessary for your application needs. + */ +(function (global) { + System.config({ + // DEMO ONLY! REAL CODE SHOULD NOT TRANSPILE IN THE BROWSER + transpiler: 'ts', + typescriptOptions: { + // Copy of compiler options in standard tsconfig.json + "target": "es5", + "module": "commonjs", + "moduleResolution": "node", + "sourceMap": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "lib": ["es2015", "dom"], + "noImplicitAny": true, + "suppressImplicitAnyIndexErrors": true + }, + meta: { + 'typescript': { + "exports": "ts" + } + }, + paths: { + // paths serve as alias + 'npm:': 'https://unpkg.com/' + }, + // map tells the System loader where to look for things + map: { + // our app is within the app folder + app: 'app', + + // 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/router/upgrade': 'npm:@angular/router/bundles/router-upgrade.umd.js', + '@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js', + '@angular/upgrade': 'npm:@angular/upgrade/bundles/upgrade.umd.js', + '@angular/upgrade/static': 'npm:@angular/upgrade/bundles/upgrade-static.umd.js', + + // other libraries + 'rxjs': 'npm:rxjs@5.0.1', + 'angular-in-memory-web-api': 'npm:angular-in-memory-web-api/bundles/in-memory-web-api.umd.js', + 'ts': 'npm:plugin-typescript@5.2.7/lib/plugin.js', + 'typescript': 'npm:typescript@2.0.10/lib/typescript.js', + + }, + // packages tells the System loader how to load when no filename and/or no extension + packages: { + app: { + main: './main.ts', + defaultExtension: 'ts' + }, + rxjs: { + defaultExtension: 'js' + } + } + }); + +})(this); + +/* +Copyright 2016 Google Inc. All Rights Reserved. +Use of this source code is governed by an MIT-style license that +can be found in the LICENSE file at http://angular.io/license +*/ diff --git a/aio/content/examples/_boilerplate/src/tsconfig.json b/aio/content/examples/_boilerplate/src/tsconfig.json new file mode 100644 index 0000000000..05839ec2ff --- /dev/null +++ b/aio/content/examples/_boilerplate/src/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "target": "es5", + "module": "commonjs", + "moduleResolution": "node", + "sourceMap": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "lib": [ "es2015", "dom" ], + "noImplicitAny": true, + "suppressImplicitAnyIndexErrors": true, + "typeRoots": [ + "../../../node_modules/@types/" + ] + }, + "compileOnSave": true, + "exclude": [ + "node_modules/*", + "**/*-aot.ts" + ] +} diff --git a/aio/content/examples/_boilerplate/tslint.json b/aio/content/examples/_boilerplate/tslint.json new file mode 100644 index 0000000000..276453f4f5 --- /dev/null +++ b/aio/content/examples/_boilerplate/tslint.json @@ -0,0 +1,93 @@ +{ + "rules": { + "class-name": true, + "comment-format": [ + true, + "check-space" + ], + "curly": true, + "eofline": true, + "forin": true, + "indent": [ + true, + "spaces" + ], + "label-position": true, + "label-undefined": true, + "max-line-length": [ + true, + 140 + ], + "member-access": false, + "member-ordering": [ + true, + "static-before-instance", + "variables-before-functions" + ], + "no-arg": true, + "no-bitwise": true, + "no-console": [ + true, + "debug", + "info", + "time", + "timeEnd", + "trace" + ], + "no-construct": true, + "no-debugger": true, + "no-duplicate-key": true, + "no-duplicate-variable": true, + "no-empty": false, + "no-eval": true, + "no-inferrable-types": true, + "no-shadowed-variable": true, + "no-string-literal": false, + "no-switch-case-fall-through": true, + "no-trailing-whitespace": true, + "no-unused-expression": true, + "no-unused-variable": true, + "no-unreachable": true, + "no-use-before-declare": true, + "no-var-keyword": true, + "object-literal-sort-keys": false, + "one-line": [ + true, + "check-open-brace", + "check-catch", + "check-else", + "check-whitespace" + ], + "quotemark": [ + true, + "single" + ], + "radix": true, + "semicolon": [ + "always" + ], + "triple-equals": [ + true, + "allow-null-check" + ], + "typedef-whitespace": [ + true, + { + "call-signature": "nospace", + "index-signature": "nospace", + "parameter": "nospace", + "property-declaration": "nospace", + "variable-declaration": "nospace" + } + ], + "variable-name": false, + "whitespace": [ + true, + "check-branch", + "check-decl", + "check-operator", + "check-separator", + "check-type" + ] + } +} diff --git a/aio/content/examples/animations/e2e-spec.ts b/aio/content/examples/animations/e2e-spec.ts new file mode 100644 index 0000000000..4fba7ec475 --- /dev/null +++ b/aio/content/examples/animations/e2e-spec.ts @@ -0,0 +1,351 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by, ElementFinder } from 'protractor'; +import { logging, promise } from 'selenium-webdriver'; + +/** + * The tests here basically just checking that the end styles + * of each animation are in effect. + * + * Relies on the Angular testability only becoming stable once + * animation(s) have finished. + * + * Ideally we'd use https://developer.mozilla.org/en-US/docs/Web/API/Document/getAnimations + * but they're not supported in Chrome at the moment. The upcoming nganimate polyfill + * may also add some introspection support. + */ +describe('Animation Tests', () => { + + const INACTIVE_COLOR = 'rgba(238, 238, 238, 1)'; + const ACTIVE_COLOR = 'rgba(207, 216, 220, 1)'; + const NO_TRANSFORM_MATRIX_REGEX = /matrix\(1,\s*0,\s*0,\s*1,\s*0,\s*0\)/; + + beforeEach(() => { + browser.get(''); + }); + + describe('basic states', () => { + + let host: ElementFinder; + + beforeEach(() => { + host = element(by.css('hero-list-basic')); + }); + + it('animates between active and inactive', () => { + addInactiveHero(); + + let li = host.element(by.css('li')); + + expect(getScaleX(li)).toBe(1.0); + expect(li.getCssValue('backgroundColor')).toBe(INACTIVE_COLOR); + + li.click(); + browser.driver.sleep(300); + expect(getScaleX(li)).toBe(1.1); + expect(li.getCssValue('backgroundColor')).toBe(ACTIVE_COLOR); + + li.click(); + browser.driver.sleep(300); + expect(getScaleX(li)).toBe(1.0); + expect(li.getCssValue('backgroundColor')).toBe(INACTIVE_COLOR); + }); + + }); + + describe('styles inline in transitions', () => { + + let host: ElementFinder; + + beforeEach(function() { + host = element(by.css('hero-list-inline-styles')); + }); + + it('are not kept after animation', () => { + addInactiveHero(); + + let li = host.element(by.css('li')); + + li.click(); + browser.driver.sleep(300); + expect(getScaleX(li)).toBe(1.0); + expect(li.getCssValue('backgroundColor')).toBe(INACTIVE_COLOR); + }); + + }); + + describe('combined transition syntax', () => { + + let host: ElementFinder; + + beforeEach(() => { + host = element(by.css('hero-list-combined-transitions')); + }); + + it('animates between active and inactive', () => { + addInactiveHero(); + + let li = host.element(by.css('li')); + + expect(getScaleX(li)).toBe(1.0); + expect(li.getCssValue('backgroundColor')).toBe(INACTIVE_COLOR); + + li.click(); + browser.driver.sleep(300); + expect(getScaleX(li)).toBe(1.1); + expect(li.getCssValue('backgroundColor')).toBe(ACTIVE_COLOR); + + li.click(); + browser.driver.sleep(300); + expect(getScaleX(li)).toBe(1.0); + expect(li.getCssValue('backgroundColor')).toBe(INACTIVE_COLOR); + }); + + }); + + describe('two-way transition syntax', () => { + + let host: ElementFinder; + + beforeEach(() => { + host = element(by.css('hero-list-twoway')); + }); + + it('animates between active and inactive', () => { + addInactiveHero(); + + let li = host.element(by.css('li')); + + expect(getScaleX(li)).toBe(1.0); + expect(li.getCssValue('backgroundColor')).toBe(INACTIVE_COLOR); + + li.click(); + browser.driver.sleep(300); + expect(getScaleX(li)).toBe(1.1); + expect(li.getCssValue('backgroundColor')).toBe(ACTIVE_COLOR); + + li.click(); + browser.driver.sleep(300); + expect(getScaleX(li)).toBe(1.0); + expect(li.getCssValue('backgroundColor')).toBe(INACTIVE_COLOR); + }); + + }); + + describe('enter & leave', () => { + + let host: ElementFinder; + + beforeEach(() => { + host = element(by.css('hero-list-enter-leave')); + }); + + it('adds and removes element', () => { + addInactiveHero(); + + let li = host.element(by.css('li')); + expect(li.getCssValue('transform')).toMatch(NO_TRANSFORM_MATRIX_REGEX); + + removeHero(); + expect(li.isPresent()).toBe(false); + }); + + }); + + describe('enter & leave & states', () => { + + let host: ElementFinder; + + beforeEach(function() { + host = element(by.css('hero-list-enter-leave-states')); + }); + + it('adds and removes and animates between active and inactive', () => { + addInactiveHero(); + + let li = host.element(by.css('li')); + + expect(li.getCssValue('transform')).toMatch(NO_TRANSFORM_MATRIX_REGEX); + + li.click(); + browser.driver.sleep(300); + expect(getScaleX(li)).toBe(1.1); + + li.click(); + browser.driver.sleep(300); + expect(li.getCssValue('transform')).toMatch(NO_TRANSFORM_MATRIX_REGEX); + + removeHero(); + expect(li.isPresent()).toBe(false); + }); + + }); + + describe('auto style calc', () => { + + let host: ElementFinder; + + beforeEach(function() { + host = element(by.css('hero-list-auto')); + }); + + it('adds and removes element', () => { + addInactiveHero(); + + let li = host.element(by.css('li')); + expect(li.getCssValue('height')).toBe('50px'); + + removeHero(); + expect(li.isPresent()).toBe(false); + }); + + }); + + describe('different timings', () => { + + let host: ElementFinder; + + beforeEach(() => { + host = element(by.css('hero-list-timings')); + }); + + it('adds and removes element', () => { + addInactiveHero(); + + let li = host.element(by.css('li')); + expect(li.getCssValue('transform')).toMatch(NO_TRANSFORM_MATRIX_REGEX); + expect(li.getCssValue('opacity')).toMatch('1'); + + removeHero(); + expect(li.isPresent()).toBe(false); + }); + + }); + + describe('multiple keyframes', () => { + + let host: ElementFinder; + + beforeEach(() => { + host = element(by.css('hero-list-multistep')); + }); + + it('adds and removes element', () => { + addInactiveHero(); + + let li = host.element(by.css('li')); + expect(li.getCssValue('transform')).toMatch(NO_TRANSFORM_MATRIX_REGEX); + expect(li.getCssValue('opacity')).toMatch('1'); + + removeHero(); + expect(li.isPresent()).toBe(false); + }); + + }); + + describe('parallel groups', () => { + + let host: ElementFinder; + + beforeEach(() => { + host = element(by.css('hero-list-groups')); + }); + + it('adds and removes element', () => { + addInactiveHero(); + + let li = host.element(by.css('li')); + expect(li.getCssValue('transform')).toMatch(NO_TRANSFORM_MATRIX_REGEX); + expect(li.getCssValue('opacity')).toMatch('1'); + + removeHero(700); + expect(li.isPresent()).toBe(false); + }); + + }); + + describe('adding active heroes', () => { + + let host: ElementFinder; + + beforeEach(() => { + host = element(by.css('hero-list-basic')); + }); + + it('animates between active and inactive', () => { + addActiveHero(); + + let li = host.element(by.css('li')); + + expect(getScaleX(li)).toBe(1.1); + expect(li.getCssValue('backgroundColor')).toBe(ACTIVE_COLOR); + + li.click(); + browser.driver.sleep(300); + expect(getScaleX(li)).toBe(1.0); + expect(li.getCssValue('backgroundColor')).toBe(INACTIVE_COLOR); + + li.click(); + browser.driver.sleep(300); + expect(getScaleX(li)).toBe(1.1); + expect(li.getCssValue('backgroundColor')).toBe(ACTIVE_COLOR); + }); + }); + + describe('callbacks', () => { + it('fires a callback on start and done', () => { + addActiveHero(); + browser.manage().logs().get(logging.Type.BROWSER) + .then((logs: logging.Entry[]) => { + const animationMessages = logs.filter((log) => { + return log.message.indexOf('Animation') !== -1 ? true : false; + }); + + expect(animationMessages.length).toBeGreaterThan(0); + }); + }); + }); + + function addActiveHero(sleep?: number) { + sleep = sleep || 500; + element(by.buttonText('Add active hero')).click(); + browser.driver.sleep(sleep); + } + + function addInactiveHero(sleep?: number) { + sleep = sleep || 500; + element(by.buttonText('Add inactive hero')).click(); + browser.driver.sleep(sleep); + } + + function removeHero(sleep?: number) { + sleep = sleep || 500; + element(by.buttonText('Remove hero')).click(); + browser.driver.sleep(sleep); + } + + function getScaleX(el: ElementFinder) { + return Promise.all([ + getBoundingClientWidth(el), + getOffsetWidth(el) + ]).then(function(promiseResolutions) { + let clientWidth = promiseResolutions[0]; + let offsetWidth = promiseResolutions[1]; + return clientWidth / offsetWidth; + }); + } + + function getBoundingClientWidth(el: ElementFinder): promise.Promise { + return browser.executeScript( + 'return arguments[0].getBoundingClientRect().width', + el.getWebElement() + ); + } + + function getOffsetWidth(el: ElementFinder): promise.Promise { + return browser.executeScript( + 'return arguments[0].offsetWidth', + el.getWebElement() + ); + } +}); diff --git a/aio/content/examples/animations/ts/.gitignore b/aio/content/examples/animations/ts/.gitignore new file mode 100644 index 0000000000..2cb7d2a2e9 --- /dev/null +++ b/aio/content/examples/animations/ts/.gitignore @@ -0,0 +1 @@ +**/*.js diff --git a/aio/content/examples/animations/ts/example-config.json b/aio/content/examples/animations/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/animations/ts/plnkr.json b/aio/content/examples/animations/ts/plnkr.json new file mode 100644 index 0000000000..f047395e7f --- /dev/null +++ b/aio/content/examples/animations/ts/plnkr.json @@ -0,0 +1,8 @@ +{ + "description": "Angular Animations", + "basePath": "src/", + "files":[ + "!**/*.d.ts", + "!**/*.js" + ] +} diff --git a/aio/content/examples/animations/ts/plnkr.no-link.html b/aio/content/examples/animations/ts/plnkr.no-link.html new file mode 100644 index 0000000000..eabffc1a6a --- /dev/null +++ b/aio/content/examples/animations/ts/plnkr.no-link.html @@ -0,0 +1,1011 @@ +
\ No newline at end of file diff --git a/aio/content/examples/animations/ts/src/app/app.module.ts b/aio/content/examples/animations/ts/src/app/app.module.ts new file mode 100644 index 0000000000..1550034236 --- /dev/null +++ b/aio/content/examples/animations/ts/src/app/app.module.ts @@ -0,0 +1,33 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; + +import { HeroTeamBuilderComponent } from './hero-team-builder.component'; +import { HeroListBasicComponent } from './hero-list-basic.component'; +import { HeroListInlineStylesComponent } from './hero-list-inline-styles.component'; +import { HeroListEnterLeaveComponent } from './hero-list-enter-leave.component'; +import { HeroListEnterLeaveStatesComponent } from './hero-list-enter-leave-states.component'; +import { HeroListCombinedTransitionsComponent } from './hero-list-combined-transitions.component'; +import { HeroListTwowayComponent } from './hero-list-twoway.component'; +import { HeroListAutoComponent } from './hero-list-auto.component'; +import { HeroListGroupsComponent } from './hero-list-groups.component'; +import { HeroListMultistepComponent } from './hero-list-multistep.component'; +import { HeroListTimingsComponent } from './hero-list-timings.component'; + +@NgModule({ + imports: [ BrowserModule ], + declarations: [ + HeroTeamBuilderComponent, + HeroListBasicComponent, + HeroListInlineStylesComponent, + HeroListCombinedTransitionsComponent, + HeroListTwowayComponent, + HeroListEnterLeaveComponent, + HeroListEnterLeaveStatesComponent, + HeroListAutoComponent, + HeroListTimingsComponent, + HeroListMultistepComponent, + HeroListGroupsComponent + ], + bootstrap: [ HeroTeamBuilderComponent ] +}) +export class AppModule { } diff --git a/aio/content/examples/animations/ts/src/app/hero-list-auto.component.ts b/aio/content/examples/animations/ts/src/app/hero-list-auto.component.ts new file mode 100644 index 0000000000..df7280d3ea --- /dev/null +++ b/aio/content/examples/animations/ts/src/app/hero-list-auto.component.ts @@ -0,0 +1,46 @@ +import { + Component, + Input, + trigger, + state, + style, + animate, + transition +} from '@angular/core'; + +import { Heroes } from './hero.service'; + +@Component({ + moduleId: module.id, + selector: 'hero-list-auto', + // #docregion template + template: ` +
    +
  • + {{hero.name}} +
  • +
+ `, + // #enddocregion template + styleUrls: ['./hero-list.component.css'], + + /* When the element leaves (transition "in => void" occurs), + * get the element's current computed height and animate + * it down to 0. + */ + // #docregion animationdef + animations: [ + trigger('shrinkOut', [ + state('in', style({height: '*'})), + transition('* => void', [ + style({height: '*'}), + animate(250, style({height: 0})) + ]) + ]) + ] + // #enddocregion animationdef +}) +export class HeroListAutoComponent { + @Input() heroes: Heroes; +} diff --git a/aio/content/examples/animations/ts/src/app/hero-list-basic.component.ts b/aio/content/examples/animations/ts/src/app/hero-list-basic.component.ts new file mode 100644 index 0000000000..a40f9ade94 --- /dev/null +++ b/aio/content/examples/animations/ts/src/app/hero-list-basic.component.ts @@ -0,0 +1,69 @@ +// #docplaster +// #docregion +// #docregion imports +import { + Component, + Input, + trigger, + state, + style, + transition, + animate +} from '@angular/core'; +// #enddocregion imports + +import { Heroes } from './hero.service'; + +@Component({ + moduleId: module.id, + selector: 'hero-list-basic', + // #enddocregion + /* The click event calls hero.toggleState(), which + * causes the state of that hero to switch from + * active to inactive or vice versa. + */ + // #docregion + // #docregion template + template: ` +
    +
  • + {{hero.name}} +
  • +
+ `, + // #enddocregion template + styleUrls: ['./hero-list.component.css'], + // #enddocregion + /** + * Define two states, "inactive" and "active", and the end + * styles that apply whenever the element is in those states. + * Then define animations for transitioning between the states, + * one in each direction + */ + // #docregion + // #docregion animationdef + animations: [ + trigger('heroState', [ + // #docregion states + state('inactive', style({ + backgroundColor: '#eee', + transform: 'scale(1)' + })), + state('active', style({ + backgroundColor: '#cfd8dc', + transform: 'scale(1.1)' + })), + // #enddocregion states + // #docregion transitions + transition('inactive => active', animate('100ms ease-in')), + transition('active => inactive', animate('100ms ease-out')) + // #enddocregion transitions + ]) + ] + // #enddocregion animationdef +}) +export class HeroListBasicComponent { + @Input() heroes: Heroes; +} diff --git a/aio/content/examples/animations/ts/src/app/hero-list-combined-transitions.component.ts b/aio/content/examples/animations/ts/src/app/hero-list-combined-transitions.component.ts new file mode 100644 index 0000000000..b40a0c3514 --- /dev/null +++ b/aio/content/examples/animations/ts/src/app/hero-list-combined-transitions.component.ts @@ -0,0 +1,58 @@ +// #docregion +// #docregion imports +import { + Component, + Input, + trigger, + state, + style, + transition, + animate +} from '@angular/core'; +// #enddocregion imports + +import { Heroes } from './hero.service'; + +@Component({ + moduleId: module.id, + selector: 'hero-list-combined-transitions', + // #docregion template + template: ` +
    +
  • + {{hero.name}} +
  • +
+ `, + // #enddocregion template + styleUrls: ['./hero-list.component.css'], + /* + * Define two states, "inactive" and "active", and the end + * styles that apply whenever the element is in those states. + * Then define an animated transition between these two + * states, in *both* directions. + */ + // #docregion animationdef + animations: [ + trigger('heroState', [ + state('inactive', style({ + backgroundColor: '#eee', + transform: 'scale(1)' + })), + state('active', style({ + backgroundColor: '#cfd8dc', + transform: 'scale(1.1)' + })), + // #docregion transitions + transition('inactive => active, active => inactive', + animate('100ms ease-out')) + // #enddocregion transitions + ]) + ] + // #enddocregion animationdef +}) +export class HeroListCombinedTransitionsComponent { + @Input() heroes: Heroes; +} diff --git a/aio/content/examples/animations/ts/src/app/hero-list-enter-leave-states.component.ts b/aio/content/examples/animations/ts/src/app/hero-list-enter-leave-states.component.ts new file mode 100644 index 0000000000..a88e08f251 --- /dev/null +++ b/aio/content/examples/animations/ts/src/app/hero-list-enter-leave-states.component.ts @@ -0,0 +1,62 @@ +import { + Component, + Input, + trigger, + state, + style, + animate, + transition +} from '@angular/core'; + +import { Heroes } from './hero.service'; + +@Component({ + moduleId: module.id, + selector: 'hero-list-enter-leave-states', + // #docregion template + template: ` +
    +
  • + {{hero.name}} +
  • +
+ `, + // #enddocregion template + styleUrls: ['./hero-list.component.css'], + /* The elements here have two possible states based + * on the hero state, "active", or "inactive". We animate + * six transitions: Between the two states in both directions, + * and between each state and void. With this we can animate + * the enter and leave of elements differently based on which + * state they are in when they are added and removed. + */ + // #docregion animationdef + animations: [ + trigger('heroState', [ + state('inactive', style({transform: 'translateX(0) scale(1)'})), + state('active', style({transform: 'translateX(0) scale(1.1)'})), + transition('inactive => active', animate('100ms ease-in')), + transition('active => inactive', animate('100ms ease-out')), + transition('void => inactive', [ + style({transform: 'translateX(-100%) scale(1)'}), + animate(100) + ]), + transition('inactive => void', [ + animate(100, style({transform: 'translateX(100%) scale(1)'})) + ]), + transition('void => active', [ + style({transform: 'translateX(0) scale(0)'}), + animate(200) + ]), + transition('active => void', [ + animate(200, style({transform: 'translateX(0) scale(0)'})) + ]) + ]) + ] + // #enddocregion animationdef +}) +export class HeroListEnterLeaveStatesComponent { + @Input() heroes: Heroes; +} diff --git a/aio/content/examples/animations/ts/src/app/hero-list-enter-leave.component.ts b/aio/content/examples/animations/ts/src/app/hero-list-enter-leave.component.ts new file mode 100644 index 0000000000..05944c84f1 --- /dev/null +++ b/aio/content/examples/animations/ts/src/app/hero-list-enter-leave.component.ts @@ -0,0 +1,50 @@ +import { + Component, + Input, + trigger, + state, + style, + animate, + transition +} from '@angular/core'; + +import { Heroes } from './hero.service'; + +@Component({ + moduleId: module.id, + selector: 'hero-list-enter-leave', + // #docregion template + template: ` +
    +
  • + {{hero.name}} +
  • +
+ `, + // #enddocregion template + styleUrls: ['./hero-list.component.css'], + /* The element here always has the state "in" when it + * is present. We animate two transitions: From void + * to in and from in to void, to achieve an animated + * enter and leave transition. The element enters from + * the left and leaves to the right using translateX. + */ + // #docregion animationdef + animations: [ + trigger('flyInOut', [ + state('in', style({transform: 'translateX(0)'})), + transition('void => *', [ + style({transform: 'translateX(-100%)'}), + animate(100) + ]), + transition('* => void', [ + animate(100, style({transform: 'translateX(100%)'})) + ]) + ]) + ] + // #enddocregion animationdef +}) +export class HeroListEnterLeaveComponent { + @Input() heroes: Heroes; +} diff --git a/aio/content/examples/animations/ts/src/app/hero-list-groups.component.ts b/aio/content/examples/animations/ts/src/app/hero-list-groups.component.ts new file mode 100644 index 0000000000..dda696eca2 --- /dev/null +++ b/aio/content/examples/animations/ts/src/app/hero-list-groups.component.ts @@ -0,0 +1,79 @@ +import { + Component, + Input, + trigger, + state, + style, + animate, + transition, + group +} from '@angular/core'; + +import { Heroes } from './hero.service'; + +@Component({ + moduleId: module.id, + selector: 'hero-list-groups', + template: ` +
    +
  • + {{hero.name}} +
  • +
+ `, + styleUrls: ['./hero-list.component.css'], + styles: [` + li { + padding: 0 !important; + text-align: center; + } + `], + /* The element here always has the state "in" when it + * is present. We animate two transitions: From void + * to in and from in to void, to achieve an animated + * enter and leave transition. + * + * The transitions have *parallel group* that allow + * animating several properties at the same time but + * with different timing configurations. On enter + * (void => *) we start the opacity animation 0.1s + * earlier than the translation/width animation. + * On leave (* => void) we do the opposite - + * the translation/width animation begins immediately + * and the opacity animation 0.1s later. + */ + // #docregion animationdef + animations: [ + trigger('flyInOut', [ + state('in', style({width: 120, transform: 'translateX(0)', opacity: 1})), + transition('void => *', [ + style({width: 10, transform: 'translateX(50px)', opacity: 0}), + group([ + animate('0.3s 0.1s ease', style({ + transform: 'translateX(0)', + width: 120 + })), + animate('0.3s ease', style({ + opacity: 1 + })) + ]) + ]), + transition('* => void', [ + group([ + animate('0.3s ease', style({ + transform: 'translateX(50px)', + width: 10 + })), + animate('0.3s 0.2s ease', style({ + opacity: 0 + })) + ]) + ]) + ]) + ] + // #enddocregion animationdef +}) +export class HeroListGroupsComponent { + @Input() heroes: Heroes; +} diff --git a/aio/content/examples/animations/ts/src/app/hero-list-inline-styles.component.ts b/aio/content/examples/animations/ts/src/app/hero-list-inline-styles.component.ts new file mode 100644 index 0000000000..19e6fb8cce --- /dev/null +++ b/aio/content/examples/animations/ts/src/app/hero-list-inline-styles.component.ts @@ -0,0 +1,59 @@ +// #docregion +// #docregion imports +import { + Component, + Input, + trigger, + style, + transition, + animate +} from '@angular/core'; +// #enddocregion imports + +import { Heroes } from './hero.service'; + +@Component({ + moduleId: module.id, + selector: 'hero-list-inline-styles', + // #docregion template + template: ` +
    +
  • + {{hero.name}} +
  • +
+ `, + // #enddocregion template + styleUrls: ['./hero-list.component.css'], + /** + * Define two states, "inactive" and "active", and the end + * styles that apply whenever the element is in those states. + * Then define an animation for the inactive => active transition. + * This animation has no end styles, but only styles that are + * defined inline inside the transition and thus are only kept + * as long as the animation is running. + */ + // #docregion animationdef + animations: [ + trigger('heroState', [ + // #docregion transitions + transition('inactive => active', [ + style({ + backgroundColor: '#cfd8dc', + transform: 'scale(1.3)' + }), + animate('80ms ease-in', style({ + backgroundColor: '#eee', + transform: 'scale(1)' + })) + ]), + // #enddocregion transitions + ]) + ] + // #enddocregion animationdef +}) +export class HeroListInlineStylesComponent { + @Input() heroes: Heroes; +} diff --git a/aio/content/examples/animations/ts/src/app/hero-list-multistep.component.ts b/aio/content/examples/animations/ts/src/app/hero-list-multistep.component.ts new file mode 100644 index 0000000000..25c10cc533 --- /dev/null +++ b/aio/content/examples/animations/ts/src/app/hero-list-multistep.component.ts @@ -0,0 +1,70 @@ +import { + Component, + Input, + trigger, + state, + style, + animate, + transition, + keyframes, + AnimationTransitionEvent +} from '@angular/core'; + +import { Heroes } from './hero.service'; + +@Component({ + moduleId: module.id, + selector: 'hero-list-multistep', + // #docregion template + template: ` +
    +
  • + {{hero.name}} +
  • +
+ `, + // #enddocregion template + styleUrls: ['./hero-list.component.css'], + /* The element here always has the state "in" when it + * is present. We animate two transitions: From void + * to in and from in to void, to achieve an animated + * enter and leave transition. Each transition is + * defined in terms of multiple keyframes, to give it + * a bounce effect. + */ + // #docregion animationdef + animations: [ + trigger('flyInOut', [ + state('in', style({transform: 'translateX(0)'})), + transition('void => *', [ + animate(300, keyframes([ + style({opacity: 0, transform: 'translateX(-100%)', offset: 0}), + style({opacity: 1, transform: 'translateX(15px)', offset: 0.3}), + style({opacity: 1, transform: 'translateX(0)', offset: 1.0}) + ])) + ]), + transition('* => void', [ + animate(300, keyframes([ + style({opacity: 1, transform: 'translateX(0)', offset: 0}), + style({opacity: 1, transform: 'translateX(-15px)', offset: 0.7}), + style({opacity: 0, transform: 'translateX(100%)', offset: 1.0}) + ])) + ]) + ]) + ] + // #enddocregion animationdef +}) +export class HeroListMultistepComponent { + @Input() heroes: Heroes; + + animationStarted(event: AnimationTransitionEvent) { + console.warn('Animation started: ', event); + } + + animationDone(event: AnimationTransitionEvent) { + console.warn('Animation done: ', event); + } +} diff --git a/aio/content/examples/animations/ts/src/app/hero-list-timings.component.ts b/aio/content/examples/animations/ts/src/app/hero-list-timings.component.ts new file mode 100644 index 0000000000..eed6f90004 --- /dev/null +++ b/aio/content/examples/animations/ts/src/app/hero-list-timings.component.ts @@ -0,0 +1,57 @@ +import { + Component, + Input, + trigger, + state, + style, + animate, + transition +} from '@angular/core'; + +import { Heroes } from './hero.service'; + +@Component({ + moduleId: module.id, + selector: 'hero-list-timings', + template: ` +
    +
  • + {{hero.name}} +
  • +
+ `, + styleUrls: ['./hero-list.component.css'], + /* The element here always has the state "in" when it + * is present. We animate two transitions: From void + * to in and from in to void, to achieve an animated + * enter and leave transition. The element enters from + * the left and leaves to the right using translateX, + * and fades in/out using opacity. We use different easings + * for enter and leave. + */ + // #docregion animationdef + animations: [ + trigger('flyInOut', [ + state('in', style({opacity: 1, transform: 'translateX(0)'})), + transition('void => *', [ + style({ + opacity: 0, + transform: 'translateX(-100%)' + }), + animate('0.2s ease-in') + ]), + transition('* => void', [ + animate('0.2s 10 ease-out', style({ + opacity: 0, + transform: 'translateX(100%)' + })) + ]) + ]) + ] + // #enddocregion animationdef +}) +export class HeroListTimingsComponent { + @Input() heroes: Heroes; +} diff --git a/aio/content/examples/animations/ts/src/app/hero-list-twoway.component.ts b/aio/content/examples/animations/ts/src/app/hero-list-twoway.component.ts new file mode 100644 index 0000000000..c9ec43f904 --- /dev/null +++ b/aio/content/examples/animations/ts/src/app/hero-list-twoway.component.ts @@ -0,0 +1,57 @@ +// #docregion +// #docregion imports +import { + Component, + Input, + trigger, + state, + style, + transition, + animate +} from '@angular/core'; +// #enddocregion imports + +import { Heroes } from './hero.service'; + +@Component({ + moduleId: module.id, + selector: 'hero-list-twoway', + // #docregion template + template: ` +
    +
  • + {{hero.name}} +
  • +
+ `, + // #enddocregion template + styleUrls: ['./hero-list.component.css'], + /* + * Define two states, "inactive" and "active", and the end + * styles that apply whenever the element is in those states. + * Then define an animated transition between these two + * states, in *both* directions. + */ + // #docregion animationdef + animations: [ + trigger('heroState', [ + state('inactive', style({ + backgroundColor: '#eee', + transform: 'scale(1)' + })), + state('active', style({ + backgroundColor: '#cfd8dc', + transform: 'scale(1.1)' + })), + // #docregion transitions + transition('inactive <=> active', animate('100ms ease-out')) + // #enddocregion transitions + ]) + ] + // #enddocregion animationdef +}) +export class HeroListTwowayComponent { + @Input() heroes: Heroes; +} diff --git a/aio/content/examples/animations/ts/src/app/hero-list.component.css b/aio/content/examples/animations/ts/src/app/hero-list.component.css new file mode 100644 index 0000000000..b256521e49 --- /dev/null +++ b/aio/content/examples/animations/ts/src/app/hero-list.component.css @@ -0,0 +1,27 @@ +ul { + list-style-type: none; + padding: 0; +} + +li { + display: block; + width: 120px; + line-height: 50px; + padding: 0 10px; + box-sizing: border-box; + background-color: #eee; + border-radius: 4px; + margin: 10px; + cursor: pointer; + overflow: hidden; + white-space: nowrap; +} + +.active { + background-color: #cfd8dc; + transform: scale(1.1); +} +.inactive { + background-color: #eee; + transform: scale(1); +} diff --git a/aio/content/examples/animations/ts/src/app/hero-team-builder.component.ts b/aio/content/examples/animations/ts/src/app/hero-team-builder.component.ts new file mode 100644 index 0000000000..e5413be50e --- /dev/null +++ b/aio/content/examples/animations/ts/src/app/hero-team-builder.component.ts @@ -0,0 +1,94 @@ +import { Component } from '@angular/core'; + +import { Heroes } from './hero.service'; + +@Component({ + selector: 'hero-team-builder', + template: ` +
+ + + +
+
+
+

Basic State

+

Switch between active/inactive on click.

+ +
+
+

Styles inline in transitions

+

Animated effect on click, no persistend end styles.

+ +
+
+

Combined transition syntax

+

Switch between active/inactive on click. Define just one transition used in both directions.

+ +
+
+

Two-way transition syntax

+

Switch between active/inactive on click. Define just one transition used in both directions using the <=> syntax.

+ +
+
+

Enter & Leave

+

Enter and leave animations using the void state.

+ +
+
+
+
+

Enter & Leave & States

+

+ Enter and leave animations combined with active/inactive state animations. + Different enter and leave transitions depending on state. +

+ +
+
+

Auto Style Calc

+

Leave animation from the current computed height using the auto-style value *.

+ +
+
+

Different Timings

+

Enter and leave animations with different easings, ease-in for enter, ease-out for leave.

+ +
+
+

Multiple Keyframes

+

Enter and leave animations with three keyframes in each, to give the transition some bounce.

+ +
+
+

Parallel Groups

+

Enter and leave animations with multiple properties animated in parallel with different timings.

+ +
+
+ `, + styles: [` + .buttons { + text-align: center; + } + button { + padding: 1.5em 3em; + } + .columns { + display: flex; + flex-direction: row; + } + .column { + flex: 1; + padding: 10px; + } + .column p { + min-height: 6em; + } + `], + providers: [Heroes] +}) +export class HeroTeamBuilderComponent { + constructor(private heroes: Heroes) { } +} diff --git a/aio/content/examples/animations/ts/src/app/hero.service.ts b/aio/content/examples/animations/ts/src/app/hero.service.ts new file mode 100644 index 0000000000..6bdeb5a512 --- /dev/null +++ b/aio/content/examples/animations/ts/src/app/hero.service.ts @@ -0,0 +1,60 @@ +import { Injectable } from '@angular/core'; + +class Hero { + constructor(public name: string, + public state = 'inactive') { + } + + toggleState() { + this.state = (this.state === 'active' ? 'inactive' : 'active'); + } +} + +let ALL_HEROES = [ + 'Windstorm', + 'RubberMan', + 'Bombasto', + 'Magneta', + 'Dynama', + 'Narco', + 'Celeritas', + 'Dr IQ', + 'Magma', + 'Tornado', + 'Mr. Nice' +].map(name => new Hero(name)); + +@Injectable() +export class Heroes implements Iterable { + + currentHeroes: Hero[] = []; + + [Symbol.iterator]() { + return this.currentHeroes.values(); + } + + canAdd() { + return this.currentHeroes.length < ALL_HEROES.length; + } + + canRemove() { + return this.currentHeroes.length > 0; + } + + addActive() { + let hero = ALL_HEROES[this.currentHeroes.length]; + hero.state = 'active'; + this.currentHeroes.push(hero); + } + + addInactive() { + let hero = ALL_HEROES[this.currentHeroes.length]; + hero.state = 'inactive'; + this.currentHeroes.push(hero); + } + + remove() { + this.currentHeroes.splice(this.currentHeroes.length - 1, 1); + } + +} diff --git a/aio/content/examples/animations/ts/src/index.html b/aio/content/examples/animations/ts/src/index.html new file mode 100644 index 0000000000..6c4a13adb2 --- /dev/null +++ b/aio/content/examples/animations/ts/src/index.html @@ -0,0 +1,34 @@ + + + + + Animations + + + + + + + + + + + + + + + + + + +

External H1 Title for E2E test

+ + +
    +
  • External list for E2E test
  • +
+ + + diff --git a/aio/content/examples/animations/ts/src/main.ts b/aio/content/examples/animations/ts/src/main.ts new file mode 100644 index 0000000000..f22933ba8e --- /dev/null +++ b/aio/content/examples/animations/ts/src/main.ts @@ -0,0 +1,4 @@ +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/architecture/e2e-spec.ts b/aio/content/examples/architecture/e2e-spec.ts new file mode 100644 index 0000000000..e967804483 --- /dev/null +++ b/aio/content/examples/architecture/e2e-spec.ts @@ -0,0 +1,100 @@ +'use strict'; // necessary for es6 output in node + +import { protractor, browser, element, by, ElementFinder } from 'protractor'; + +const nameSuffix = 'X'; + +class Hero { + id: number; + name: string; +} + +describe('Architecture', () => { + + const expectedTitle = 'Architecture of Angular'; + const expectedH2 = ['Hero List', 'Sales Tax Calculator']; + + beforeAll(() => browser.get('')); + + it(`has title '${expectedTitle}'`, () => { + expect(browser.getTitle()).toEqual(expectedTitle); + }); + + it(`has h2 '${expectedH2}'`, () => { + let h2 = element.all(by.css('h2')).map((elt: any) => elt.getText()); + expect(h2).toEqual(expectedH2); + }); + + describe('Hero', heroTests); + describe('Salex tax', salesTaxTests); +}); + +function heroTests() { + + const targetHero: Hero = { id: 2, name: 'Mr. Nice' }; + + it('has the right number of heroes', () => { + let page = getPageElts(); + expect(page.heroes.count()).toEqual(3); + }); + + it('has no hero details initially', function () { + let page = getPageElts(); + expect(page.heroDetail.isPresent()).toBeFalsy('no hero detail'); + }); + + it('shows selected hero details', async () => { + await element(by.cssContainingText('li', targetHero.name)).click(); + let page = getPageElts(); + let hero = await heroFromDetail(page.heroDetail); + expect(hero.id).toEqual(targetHero.id); + expect(hero.name).toEqual(targetHero.name); + }); + + it(`shows updated hero name in details`, async () => { + let input = element.all(by.css('input')).first(); + input.sendKeys(nameSuffix); + let page = getPageElts(); + let hero = await heroFromDetail(page.heroDetail); + let newName = targetHero.name + nameSuffix; + expect(hero.id).toEqual(targetHero.id); + expect(hero.name).toEqual(newName); + }); +} + +function salesTaxTests() { + it('has no sales tax initially', function () { + let page = getPageElts(); + expect(page.salesTaxDetail.isPresent()).toBeFalsy('no sales tax info'); + }); + + it('shows sales tax', async function () { + let page = getPageElts(); + page.salesTaxAmountInput.sendKeys('10', protractor.Key.ENTER); + expect(page.salesTaxDetail.getText()).toEqual('The sales tax is $1.00'); + }); +} + +// Helper functions + +function getPageElts() { + return { + heroes: element.all(by.css('my-app li')), + heroDetail: element(by.css('my-app hero-detail')), + salesTaxAmountInput: element(by.css('my-app sales-tax input')), + salesTaxDetail: element(by.css('my-app sales-tax div')) + }; +} + +async function heroFromDetail(detail: ElementFinder): Promise { + // Get hero id from the first
+ // let _id = await detail.all(by.css('div')).first().getText(); + let _id = await detail.all(by.css('div')).first().getText(); + // Get name from the h2 + // let _name = await detail.element(by.css('h4')).getText(); + let _name = await detail.element(by.css('h4')).getText(); + return { + id: +_id.substr(_id.indexOf(' ') + 1), + name: _name.substr(0, _name.lastIndexOf(' ')) + }; +} diff --git a/aio/content/examples/architecture/ts/example-config.json b/aio/content/examples/architecture/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/architecture/ts/plnkr.json b/aio/content/examples/architecture/ts/plnkr.json new file mode 100644 index 0000000000..b2f47131df --- /dev/null +++ b/aio/content/examples/architecture/ts/plnkr.json @@ -0,0 +1,9 @@ +{ + "description": "Intro to Angular", + "basePath": "src/", + "files":[ + "!**/*.d.ts", + "!**/*.js", + "!app/hero-list.component.1.*" + ] +} diff --git a/aio/content/examples/architecture/ts/plnkr.no-link.html b/aio/content/examples/architecture/ts/plnkr.no-link.html new file mode 100644 index 0000000000..cf21ec2759 --- /dev/null +++ b/aio/content/examples/architecture/ts/plnkr.no-link.html @@ -0,0 +1,481 @@ +
\ No newline at end of file diff --git a/aio/content/examples/architecture/ts/src/app/app.component.ts b/aio/content/examples/architecture/ts/src/app/app.component.ts new file mode 100644 index 0000000000..b987f17e44 --- /dev/null +++ b/aio/content/examples/architecture/ts/src/app/app.component.ts @@ -0,0 +1,14 @@ +// #docregion import +import { Component } from '@angular/core'; +// #enddocregion import + +@Component({ + selector: 'my-app', + template: ` + + + ` +}) +// #docregion export +export class AppComponent { } +// #enddocregion export diff --git a/aio/content/examples/architecture/ts/src/app/app.module.ts b/aio/content/examples/architecture/ts/src/app/app.module.ts new file mode 100644 index 0000000000..f6e64beecd --- /dev/null +++ b/aio/content/examples/architecture/ts/src/app/app.module.ts @@ -0,0 +1,36 @@ +import { BrowserModule } from '@angular/platform-browser'; +import { FormsModule } from '@angular/forms'; +// #docregion imports +import { NgModule } from '@angular/core'; +import { AppComponent } from './app.component'; +// #enddocregion imports +import { HeroDetailComponent } from './hero-detail.component'; +import { HeroListComponent } from './hero-list.component'; +import { SalesTaxComponent } from './sales-tax.component'; +import { HeroService } from './hero.service'; +import { BackendService } from './backend.service'; +import { Logger } from './logger.service'; + +@NgModule({ + imports: [ + BrowserModule, + FormsModule + ], + declarations: [ + AppComponent, + HeroDetailComponent, + HeroListComponent, + SalesTaxComponent + ], +// #docregion providers + providers: [ + BackendService, + HeroService, + Logger + ], +// #enddocregion providers + bootstrap: [ AppComponent ] +}) +// #docregion export +export class AppModule { } +// #enddocregion export diff --git a/aio/content/examples/architecture/ts/src/app/backend.service.ts b/aio/content/examples/architecture/ts/src/app/backend.service.ts new file mode 100644 index 0000000000..e47cfc8ace --- /dev/null +++ b/aio/content/examples/architecture/ts/src/app/backend.service.ts @@ -0,0 +1,25 @@ +import { Injectable, Type } from '@angular/core'; + +import { Logger } from './logger.service'; +import { Hero } from './hero'; + +const HEROES = [ + new Hero('Windstorm', 'Weather mastery'), + new Hero('Mr. Nice', 'Killing them with kindness'), + new Hero('Magneta', 'Manipulates metalic objects') + ]; + +@Injectable() +export class BackendService { + constructor(private logger: Logger) {} + + getAll(type: Type): PromiseLike { + if (type === Hero) { + // TODO get from the database + return Promise.resolve(HEROES); + } + let err = new Error('Cannot get object of this type'); + this.logger.error(err); + throw err; + } +} diff --git a/aio/content/examples/architecture/ts/src/app/hero-detail.component.html b/aio/content/examples/architecture/ts/src/app/hero-detail.component.html new file mode 100644 index 0000000000..224de8bb86 --- /dev/null +++ b/aio/content/examples/architecture/ts/src/app/hero-detail.component.html @@ -0,0 +1,9 @@ +
+

{{hero.name}} Detail

+
Id: {{hero.id}}
+
Name: + + + +
+
Power:
diff --git a/aio/content/examples/architecture/ts/src/app/hero-detail.component.ts b/aio/content/examples/architecture/ts/src/app/hero-detail.component.ts new file mode 100644 index 0000000000..44a702ad49 --- /dev/null +++ b/aio/content/examples/architecture/ts/src/app/hero-detail.component.ts @@ -0,0 +1,12 @@ +import { Component, Input } from '@angular/core'; + +import { Hero } from './hero'; + +@Component({ + moduleId: module.id, + selector: 'hero-detail', + templateUrl: './hero-detail.component.html' +}) +export class HeroDetailComponent { + @Input() hero: Hero; +} diff --git a/aio/content/examples/architecture/ts/src/app/hero-list.component.1.html b/aio/content/examples/architecture/ts/src/app/hero-list.component.1.html new file mode 100644 index 0000000000..c6e6dd5133 --- /dev/null +++ b/aio/content/examples/architecture/ts/src/app/hero-list.component.1.html @@ -0,0 +1,9 @@ + +
  • {{hero.name}}
  • + +
  • + + + +
  • + diff --git a/aio/content/examples/architecture/ts/src/app/hero-list.component.html b/aio/content/examples/architecture/ts/src/app/hero-list.component.html new file mode 100644 index 0000000000..b46a307bd3 --- /dev/null +++ b/aio/content/examples/architecture/ts/src/app/hero-list.component.html @@ -0,0 +1,11 @@ + +

    Hero List

    + +

    Pick a hero from the list

    +
      +
    • + {{hero.name}} +
    • +
    + + diff --git a/aio/content/examples/architecture/ts/src/app/hero-list.component.ts b/aio/content/examples/architecture/ts/src/app/hero-list.component.ts new file mode 100644 index 0000000000..f72f57eef4 --- /dev/null +++ b/aio/content/examples/architecture/ts/src/app/hero-list.component.ts @@ -0,0 +1,30 @@ +import { Component, OnInit } from '@angular/core'; + +import { Hero } from './hero'; +import { HeroService } from './hero.service'; + +// #docregion metadata, providers +@Component({ + moduleId: module.id, + selector: 'hero-list', + templateUrl: './hero-list.component.html', + providers: [ HeroService ] +}) +// #enddocregion providers +// #docregion class +export class HeroListComponent implements OnInit { + // #enddocregion metadata + heroes: Hero[]; + selectedHero: Hero; + + // #docregion ctor + constructor(private service: HeroService) { } + // #enddocregion ctor + + ngOnInit() { + this.heroes = this.service.getHeroes(); + } + + selectHero(hero: Hero) { this.selectedHero = hero; } + // #docregion metadata +} diff --git a/aio/content/examples/architecture/ts/src/app/hero.service.ts b/aio/content/examples/architecture/ts/src/app/hero.service.ts new file mode 100644 index 0000000000..493f064e40 --- /dev/null +++ b/aio/content/examples/architecture/ts/src/app/hero.service.ts @@ -0,0 +1,23 @@ +import { Injectable } from '@angular/core'; + +import { Hero } from './hero'; +import { BackendService } from './backend.service'; +import { Logger } from './logger.service'; + +@Injectable() +// #docregion class +export class HeroService { + private heroes: Hero[] = []; + + constructor( + private backend: BackendService, + private logger: Logger) { } + + getHeroes() { + this.backend.getAll(Hero).then( (heroes: Hero[]) => { + this.logger.log(`Fetched ${heroes.length} heroes.`); + this.heroes.push(...heroes); // fill cache + }); + return this.heroes; + } +} diff --git a/aio/content/examples/architecture/ts/src/app/hero.ts b/aio/content/examples/architecture/ts/src/app/hero.ts new file mode 100644 index 0000000000..b89557aa71 --- /dev/null +++ b/aio/content/examples/architecture/ts/src/app/hero.ts @@ -0,0 +1,10 @@ +let nextId = 1; + +export class Hero { + id: number; + constructor( + public name: string, + public power?: string) { + this.id = nextId++; + } +} diff --git a/aio/content/examples/architecture/ts/src/app/logger.service.ts b/aio/content/examples/architecture/ts/src/app/logger.service.ts new file mode 100644 index 0000000000..9277ee8bc0 --- /dev/null +++ b/aio/content/examples/architecture/ts/src/app/logger.service.ts @@ -0,0 +1,9 @@ +import { Injectable } from '@angular/core'; + +@Injectable() +// #docregion class +export class Logger { + log(msg: any) { console.log(msg); } + error(msg: any) { console.error(msg); } + warn(msg: any) { console.warn(msg); } +} diff --git a/aio/content/examples/architecture/ts/src/app/mini-app.ts b/aio/content/examples/architecture/ts/src/app/mini-app.ts new file mode 100644 index 0000000000..b064428be3 --- /dev/null +++ b/aio/content/examples/architecture/ts/src/app/mini-app.ts @@ -0,0 +1,45 @@ +// #docplaster +// A mini-application +import { Injectable } from '@angular/core'; + +@Injectable() +export class Logger { + log(message: string) { console.log(message); } +} + +// #docregion import-core-component +import { Component } from '@angular/core'; +// #enddocregion import-core-component + +@Component({ + selector: 'my-app', + template: 'Welcome to Angular' +}) +export class AppComponent { + constructor(logger: Logger) { + logger.log('Let the fun begin!'); + } +} + +// #docregion module +import { NgModule } from '@angular/core'; +// #docregion import-browser-module +import { BrowserModule } from '@angular/platform-browser'; +// #enddocregion import-browser-module +@NgModule({ +// #docregion ngmodule-imports + imports: [ BrowserModule ], +// #enddocregion ngmodule-imports + providers: [ Logger ], + declarations: [ AppComponent ], + exports: [ AppComponent ], + bootstrap: [ AppComponent ] +}) +// #docregion export +export class AppModule { } +// #enddocregion export +// #enddocregion module + +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/architecture/ts/src/app/sales-tax.component.ts b/aio/content/examples/architecture/ts/src/app/sales-tax.component.ts new file mode 100644 index 0000000000..02201afe05 --- /dev/null +++ b/aio/content/examples/architecture/ts/src/app/sales-tax.component.ts @@ -0,0 +1,25 @@ +import { Component } from '@angular/core'; + +import { SalesTaxService } from './sales-tax.service'; +import { TaxRateService } from './tax-rate.service'; + +@Component({ + selector: 'sales-tax', + template: ` +

    Sales Tax Calculator

    + Amount: + +
    + The sales tax is + {{ getTax(amountBox.value) | currency:'USD':true:'1.2-2' }} +
    + `, + providers: [SalesTaxService, TaxRateService] +}) +export class SalesTaxComponent { + constructor(private salesTaxService: SalesTaxService) { } + + getTax(value: string | number) { + return this.salesTaxService.getVAT(value); + } +} diff --git a/aio/content/examples/architecture/ts/src/app/sales-tax.service.ts b/aio/content/examples/architecture/ts/src/app/sales-tax.service.ts new file mode 100644 index 0000000000..d859dc1595 --- /dev/null +++ b/aio/content/examples/architecture/ts/src/app/sales-tax.service.ts @@ -0,0 +1,14 @@ +import { Injectable } from '@angular/core'; + +import { TaxRateService } from './tax-rate.service'; + +@Injectable() +export class SalesTaxService { + constructor(private rateService: TaxRateService) { } + + getVAT(value: string | number) { + let amount = (typeof value === 'string') ? + parseFloat(value) : value; + return (amount || 0) * this.rateService.getRate('VAT'); + } +} diff --git a/aio/content/examples/architecture/ts/src/app/tax-rate.service.ts b/aio/content/examples/architecture/ts/src/app/tax-rate.service.ts new file mode 100644 index 0000000000..fff2f4df8f --- /dev/null +++ b/aio/content/examples/architecture/ts/src/app/tax-rate.service.ts @@ -0,0 +1,6 @@ +import { Injectable } from '@angular/core'; + +@Injectable() +export class TaxRateService { + getRate(rateName: string) { return 0.10; } // 10% everywhere +} diff --git a/aio/content/examples/architecture/ts/src/index.html b/aio/content/examples/architecture/ts/src/index.html new file mode 100644 index 0000000000..9aadf6e109 --- /dev/null +++ b/aio/content/examples/architecture/ts/src/index.html @@ -0,0 +1,26 @@ + + + + Architecture of Angular + + + + + + + + + + + + + + + + + Loading... + + + diff --git a/aio/content/examples/architecture/ts/src/main.ts b/aio/content/examples/architecture/ts/src/main.ts new file mode 100644 index 0000000000..6b6532d428 --- /dev/null +++ b/aio/content/examples/architecture/ts/src/main.ts @@ -0,0 +1,5 @@ +// #docregion +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/attribute-directives/e2e-spec.ts b/aio/content/examples/attribute-directives/e2e-spec.ts new file mode 100644 index 0000000000..25a0cf258e --- /dev/null +++ b/aio/content/examples/attribute-directives/e2e-spec.ts @@ -0,0 +1,31 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by } from 'protractor'; + +describe('Attribute directives', function () { + + let _title = 'My First Attribute Directive'; + + beforeAll(function () { + browser.get(''); + }); + + it(`should display correct title: ${_title}`, function () { + expect(element(by.css('h1')).getText()).toEqual(_title); + }); + + it('should be able to select green highlight', function () { + let highlightedEle = element(by.cssContainingText('p', 'Highlight me')); + let lightGreen = 'rgba(144, 238, 144, 1)'; + + expect(highlightedEle.getCssValue('background-color')).not.toEqual(lightGreen); + // let greenRb = element(by.cssContainingText('input', 'Green')); + let greenRb = element.all(by.css('input')).get(0); + greenRb.click().then(function() { + // TypeScript Todo: find the right type for highlightedEle + browser.actions().mouseMove(highlightedEle as any).perform(); + expect(highlightedEle.getCssValue('background-color')).toEqual(lightGreen); + }); + + }); +}); diff --git a/aio/content/examples/attribute-directives/ts/example-config.json b/aio/content/examples/attribute-directives/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/attribute-directives/ts/plnkr.json b/aio/content/examples/attribute-directives/ts/plnkr.json new file mode 100644 index 0000000000..112e1de6f4 --- /dev/null +++ b/aio/content/examples/attribute-directives/ts/plnkr.json @@ -0,0 +1,10 @@ +{ + "description": "Attribute Directive", + "basePath": "src/", + "files":[ + "!**/*.d.ts", + "!**/*.js", + "!app/*.[1,2,3].*" + ], + "tags": ["attribute", "directive"] +} diff --git a/aio/content/examples/attribute-directives/ts/plnkr.no-link.html b/aio/content/examples/attribute-directives/ts/plnkr.no-link.html new file mode 100644 index 0000000000..b4e52a09a3 --- /dev/null +++ b/aio/content/examples/attribute-directives/ts/plnkr.no-link.html @@ -0,0 +1,253 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/attribute-directives/ts/src/app/app.component.1.html b/aio/content/examples/attribute-directives/ts/src/app/app.component.1.html new file mode 100644 index 0000000000..9f8c13f077 --- /dev/null +++ b/aio/content/examples/attribute-directives/ts/src/app/app.component.1.html @@ -0,0 +1,20 @@ + +

    My First Attribute Directive

    + +

    Highlight me!

    + + + + +

    Highlighted in yellow

    +

    Highlighted in orange

    + + + + +

    Highlighted with parent component's color

    + + + +

    I am green with envy!

    + diff --git a/aio/content/examples/attribute-directives/ts/src/app/app.component.1.ts b/aio/content/examples/attribute-directives/ts/src/app/app.component.1.ts new file mode 100644 index 0000000000..d65cb57850 --- /dev/null +++ b/aio/content/examples/attribute-directives/ts/src/app/app.component.1.ts @@ -0,0 +1,12 @@ +import { Component } from '@angular/core'; + +@Component({ + moduleId: module.id, + selector: 'my-app', + templateUrl: './app.component.1.html' +}) +// #docregion class +export class AppComponent { + color = 'yellow'; +} +// #enddocregion class diff --git a/aio/content/examples/attribute-directives/ts/src/app/app.component.html b/aio/content/examples/attribute-directives/ts/src/app/app.component.html new file mode 100644 index 0000000000..0ef41b925d --- /dev/null +++ b/aio/content/examples/attribute-directives/ts/src/app/app.component.html @@ -0,0 +1,27 @@ + + +

    My First Attribute Directive

    + +

    Pick a highlight color

    +
    + Green + Yellow + Cyan +
    + +

    Highlight me!

    + + + + +

    + Highlight me too! +

    + + + +
    +

    Mouse over the following lines to see fixed highlights

    + +

    Highlighted in yellow

    +

    Highlighted in orange

    diff --git a/aio/content/examples/attribute-directives/ts/src/app/app.component.ts b/aio/content/examples/attribute-directives/ts/src/app/app.component.ts new file mode 100644 index 0000000000..a88e8e49a3 --- /dev/null +++ b/aio/content/examples/attribute-directives/ts/src/app/app.component.ts @@ -0,0 +1,14 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + moduleId: module.id, + selector: 'my-app', + templateUrl: './app.component.html' +}) +// #docregion class +export class AppComponent { + color: string; +} +// #enddocregion class +// #enddocregion diff --git a/aio/content/examples/attribute-directives/ts/src/app/app.module.ts b/aio/content/examples/attribute-directives/ts/src/app/app.module.ts new file mode 100644 index 0000000000..ca35d560fb --- /dev/null +++ b/aio/content/examples/attribute-directives/ts/src/app/app.module.ts @@ -0,0 +1,16 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; + +import { AppComponent } from './app.component'; +import { HighlightDirective } from './highlight.directive'; + +@NgModule({ + imports: [ BrowserModule ], + declarations: [ + AppComponent, + HighlightDirective + ], + bootstrap: [ AppComponent ] +}) +export class AppModule { } diff --git a/aio/content/examples/attribute-directives/ts/src/app/dummy.module.1.ts b/aio/content/examples/attribute-directives/ts/src/app/dummy.module.1.ts new file mode 100644 index 0000000000..7ba41d53bb --- /dev/null +++ b/aio/content/examples/attribute-directives/ts/src/app/dummy.module.1.ts @@ -0,0 +1,17 @@ +// Not used. Keep away from plunker +// Keeps ATLS from complaining about undeclared directives. +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; + +import { AppComponent } from './app.component.1'; +import { HighlightDirective as HLD1 } from './highlight.directive.1'; +import { HighlightDirective as HLD2 } from './highlight.directive.2'; +import { HighlightDirective as HLD3 } from './highlight.directive.3'; + +@NgModule({ + imports: [ BrowserModule ], + declarations: [ + AppComponent, HLD1, HLD2, HLD3 + ] +}) +export class DummyModule { } diff --git a/aio/content/examples/attribute-directives/ts/src/app/highlight.directive.1.ts b/aio/content/examples/attribute-directives/ts/src/app/highlight.directive.1.ts new file mode 100644 index 0000000000..4cacc0d22e --- /dev/null +++ b/aio/content/examples/attribute-directives/ts/src/app/highlight.directive.1.ts @@ -0,0 +1,10 @@ +/* tslint:disable:no-unused-variable */ +// #docregion +import { Directive, ElementRef, Input } from '@angular/core'; + +@Directive({ selector: '[myHighlight]' }) +export class HighlightDirective { + constructor(el: ElementRef) { + el.nativeElement.style.backgroundColor = 'yellow'; + } +} diff --git a/aio/content/examples/attribute-directives/ts/src/app/highlight.directive.2.ts b/aio/content/examples/attribute-directives/ts/src/app/highlight.directive.2.ts new file mode 100644 index 0000000000..156fabaaa8 --- /dev/null +++ b/aio/content/examples/attribute-directives/ts/src/app/highlight.directive.2.ts @@ -0,0 +1,45 @@ +/* tslint:disable:no-unused-variable member-ordering */ +// #docplaster +// #docregion +import { Directive, ElementRef, HostListener, Input } from '@angular/core'; + +@Directive({ + selector: '[myHighlight]' +}) +export class HighlightDirective { + // #docregion ctor + constructor(private el: ElementRef) { } + // #enddocregion ctor + // #enddocregion + + // #docregion color + @Input() highlightColor: string; + // #enddocregion color + + // #docregion color-2 + @Input() myHighlight: string; + // #enddocregion color-2 + + // #docregion + + // #docregion mouse-methods, host + @HostListener('mouseenter') onMouseEnter() { + // #enddocregion host + this.highlight('yellow'); + // #docregion host + } + + @HostListener('mouseleave') onMouseLeave() { + // #enddocregion host + this.highlight(null); + // #docregion host + } + // #enddocregion host + + private highlight(color: string) { + this.el.nativeElement.style.backgroundColor = color; + } + // #enddocregion mouse-methods + +} +// #enddocregion diff --git a/aio/content/examples/attribute-directives/ts/src/app/highlight.directive.3.ts b/aio/content/examples/attribute-directives/ts/src/app/highlight.directive.3.ts new file mode 100644 index 0000000000..bf76769c93 --- /dev/null +++ b/aio/content/examples/attribute-directives/ts/src/app/highlight.directive.3.ts @@ -0,0 +1,27 @@ +/* tslint:disable:member-ordering */ +// #docregion +import { Directive, ElementRef, HostListener, Input } from '@angular/core'; + +@Directive({ + selector: '[myHighlight]' +}) +export class HighlightDirective { + + constructor(private el: ElementRef) { } + + @Input('myHighlight') highlightColor: string; + + // #docregion mouse-enter + @HostListener('mouseenter') onMouseEnter() { + this.highlight(this.highlightColor || 'red'); + } + // #enddocregion mouse-enter + + @HostListener('mouseleave') onMouseLeave() { + this.highlight(null); + } + + private highlight(color: string) { + this.el.nativeElement.style.backgroundColor = color; + } +} diff --git a/aio/content/examples/attribute-directives/ts/src/app/highlight.directive.ts b/aio/content/examples/attribute-directives/ts/src/app/highlight.directive.ts new file mode 100644 index 0000000000..68c9f0cc73 --- /dev/null +++ b/aio/content/examples/attribute-directives/ts/src/app/highlight.directive.ts @@ -0,0 +1,36 @@ +/* tslint:disable:member-ordering */ +// #docplaster +// #docregion +// #docregion imports +import { Directive, ElementRef, HostListener, Input } from '@angular/core'; +// #enddocregion imports + +@Directive({ + selector: '[myHighlight]' +}) +export class HighlightDirective { + + constructor(private el: ElementRef) { } + + // #docregion defaultColor + @Input() defaultColor: string; + // #enddocregion defaultColor + + // #docregion color + @Input('myHighlight') highlightColor: string; + // #enddocregion color + + // #docregion mouse-enter + @HostListener('mouseenter') onMouseEnter() { + this.highlight(this.highlightColor || this.defaultColor || 'red'); + } + // #enddocregion mouse-enter + + @HostListener('mouseleave') onMouseLeave() { + this.highlight(null); + } + + private highlight(color: string) { + this.el.nativeElement.style.backgroundColor = color; + } +} diff --git a/aio/content/examples/attribute-directives/ts/src/index.html b/aio/content/examples/attribute-directives/ts/src/index.html new file mode 100644 index 0000000000..97662437f0 --- /dev/null +++ b/aio/content/examples/attribute-directives/ts/src/index.html @@ -0,0 +1,25 @@ + + + + + + Attribute Directives + + + + + + + + + + + + + + + loading... + + diff --git a/aio/content/examples/attribute-directives/ts/src/main.ts b/aio/content/examples/attribute-directives/ts/src/main.ts new file mode 100644 index 0000000000..6b6532d428 --- /dev/null +++ b/aio/content/examples/attribute-directives/ts/src/main.ts @@ -0,0 +1,5 @@ +// #docregion +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/cb-ajs-quick-reference/e2e-spec.ts b/aio/content/examples/cb-ajs-quick-reference/e2e-spec.ts new file mode 100644 index 0000000000..81a5faa5e7 --- /dev/null +++ b/aio/content/examples/cb-ajs-quick-reference/e2e-spec.ts @@ -0,0 +1,115 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by } from 'protractor'; + +describe('AngularJS to Angular Quick Reference Tests', function () { + + beforeAll(function () { + browser.get(''); + }); + + it('should display no poster images after bootstrap', function () { + testImagesAreDisplayed(false); + }); + + it('should display proper movie data', function () { + // We check only a few samples + let expectedSamples: any[] = [ + {row: 0, column: 0, element: 'img', attr: 'src', value: 'images/hero.png', contains: true}, + {row: 0, column: 2, value: 'Celeritas'}, + {row: 1, column: 3, matches: /Dec 1[678], 2015/}, // absorb timezone dif; we care about date format + {row: 1, column: 5, value: '$14.95'}, + {row: 2, column: 4, value: 'PG-13'}, + {row: 2, column: 7, value: '100%'}, + {row: 2, column: 0, element: 'img', attr: 'src', value: 'images/ng-logo.png', contains: true}, + ]; + + // Go through the samples + let movieRows = getMovieRows(); + for (let i = 0; i < expectedSamples.length; i++) { + let sample = expectedSamples[i]; + let tableCell = movieRows.get(sample.row) + .all(by.tagName('td')).get(sample.column); + // Check the cell or its nested element + let elementToCheck = sample.element + ? tableCell.element(by.tagName(sample.element)) + : tableCell; + + // Check element attribute or text + let valueToCheck = sample.attr + ? elementToCheck.getAttribute(sample.attr) + : elementToCheck.getText(); + + // Test for equals/contains/match + if (sample.contains) { + expect(valueToCheck).toContain(sample.value); + } else if (sample.matches) { + expect(valueToCheck).toMatch(sample.matches); + } else { + expect(valueToCheck).toEqual(sample.value); + } + } + }); + + it('should display images after Show Poster', function () { + testPosterButtonClick('Show Poster', true); + }); + + it('should hide images after Hide Poster', function () { + testPosterButtonClick('Hide Poster', false); + }); + + it('should display no movie when no favorite hero is specified', function () { + testFavoriteHero(null, 'Please enter your favorite hero.'); + }); + + it('should display no movie for Magneta', function () { + testFavoriteHero('Magneta', 'No movie, sorry!'); + }); + + it('should display a movie for Mr. Nice', function () { + testFavoriteHero('Mr. Nice', 'Excellent choice!'); + }); + + function testImagesAreDisplayed(isDisplayed: boolean) { + let expectedMovieCount = 3; + + let movieRows = getMovieRows(); + expect(movieRows.count()).toBe(expectedMovieCount); + for (let i = 0; i < expectedMovieCount; i++) { + let movieImage = movieRows.get(i).element(by.css('td > img')); + expect(movieImage.isDisplayed()).toBe(isDisplayed); + } + } + + function testPosterButtonClick(expectedButtonText: string, isDisplayed: boolean) { + let posterButton = element(by.css('movie-list tr > th > button')); + expect(posterButton.getText()).toBe(expectedButtonText); + + posterButton.click().then(function () { + testImagesAreDisplayed(isDisplayed); + }); + } + + function getMovieRows() { + return element.all(by.css('movie-list tbody > tr')); + } + + function testFavoriteHero(heroName: string, expectedLabel: string) { + let movieListComp = element(by.tagName('movie-list')); + let heroInput = movieListComp.element(by.tagName('input')); + let favoriteHeroLabel = movieListComp.element(by.tagName('h3')); + let resultLabel = movieListComp.element(by.css('span > p')); + + heroInput.clear().then(function () { + heroInput.sendKeys(heroName || ''); + expect(resultLabel.getText()).toBe(expectedLabel); + if (heroName) { + expect(favoriteHeroLabel.isDisplayed()).toBe(true); + expect(favoriteHeroLabel.getText()).toContain(heroName); + } else { + expect(favoriteHeroLabel.isDisplayed()).toBe(false); + } + }); + } +}); diff --git a/aio/content/examples/cb-ajs-quick-reference/ts/example-config.json b/aio/content/examples/cb-ajs-quick-reference/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/cb-ajs-quick-reference/ts/plnkr.json b/aio/content/examples/cb-ajs-quick-reference/ts/plnkr.json new file mode 100644 index 0000000000..1ff34275f7 --- /dev/null +++ b/aio/content/examples/cb-ajs-quick-reference/ts/plnkr.json @@ -0,0 +1,10 @@ +{ + "description": "AngularJS to Angular Quick Reference", + "basePath": "src/", + "files":[ + "!**/*.d.ts", + "!**/*.js", + "!**/*.[1].*" + ], + "tags":["cookbook", "angularjs"] +} diff --git a/aio/content/examples/cb-ajs-quick-reference/ts/plnkr.no-link.html b/aio/content/examples/cb-ajs-quick-reference/ts/plnkr.no-link.html new file mode 100644 index 0000000000..69d78ced3d --- /dev/null +++ b/aio/content/examples/cb-ajs-quick-reference/ts/plnkr.no-link.html @@ -0,0 +1,597 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/cb-ajs-quick-reference/ts/src/app/app-routing.module.ts b/aio/content/examples/cb-ajs-quick-reference/ts/src/app/app-routing.module.ts new file mode 100644 index 0000000000..a7cbe8a74d --- /dev/null +++ b/aio/content/examples/cb-ajs-quick-reference/ts/src/app/app-routing.module.ts @@ -0,0 +1,16 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +import { MovieListComponent } from './movie-list.component'; + +const routes: Routes = [ + { path: '', redirectTo: '/movies', pathMatch: 'full' }, + { path: 'movies', component: MovieListComponent } +]; + +@NgModule({ + imports: [RouterModule.forRoot(routes)], + exports: [RouterModule] +}) +export class AppRoutingModule {} diff --git a/aio/content/examples/cb-ajs-quick-reference/ts/src/app/app.component.css b/aio/content/examples/cb-ajs-quick-reference/ts/src/app/app.component.css new file mode 100644 index 0000000000..e454e9ea87 --- /dev/null +++ b/aio/content/examples/cb-ajs-quick-reference/ts/src/app/app.component.css @@ -0,0 +1,9 @@ +.active {font-style: italic;} +.shazam {font-weight: bold;} + +img {height: 100px;} + +table td { + padding: 4px; + border: 1px solid #e0e0e0; +} diff --git a/aio/content/examples/cb-ajs-quick-reference/ts/src/app/app.component.html b/aio/content/examples/cb-ajs-quick-reference/ts/src/app/app.component.html new file mode 100644 index 0000000000..72fd3de86f --- /dev/null +++ b/aio/content/examples/cb-ajs-quick-reference/ts/src/app/app.component.html @@ -0,0 +1,112 @@ + +

    {{title}}

    + +

    Routed Movies

    + + + +
    + +

    Example Snippets

    + + +
    + + [ngClass] active +
    + +
    + + [ngClass] active and boldly important +
    + +
    + + [class.active] +
    + +

    + +Angular Docs + + +

    +
    + + + + +

    Image toggle event type was {{eventType}}

    +
    + +

    +
    + + + +
    + +

    + +
    + + color preference #1 +
    + +
    + + color preference #2 +
    + +

    Movie as JSON

    + +
    {{movie | json}}
    + + +

    Movie Titles via local variable

    + + + + + + +
    {{movie.title}}
    + +

    Sliced Movies with pipes

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    {{movie.title | uppercase}}{{movie.title | lowercase}}{{movie.releaseDate | date}}{{movie.price | currency:'USD':true}}{{movie.starRating | number}}{{movie.starRating | number:'1.1-2'}}{{movie.approvalRating | percent: '1.0-2'}}
    diff --git a/aio/content/examples/cb-ajs-quick-reference/ts/src/app/app.component.ts b/aio/content/examples/cb-ajs-quick-reference/ts/src/app/app.component.ts new file mode 100644 index 0000000000..4d708509a1 --- /dev/null +++ b/aio/content/examples/cb-ajs-quick-reference/ts/src/app/app.component.ts @@ -0,0 +1,33 @@ +import { Component } from '@angular/core'; + +import { MovieService } from './movie.service'; +import { IMovie } from './movie'; + +@Component({ + moduleId: module.id, + selector: 'my-app', + templateUrl: './app.component.html', + styleUrls: [ './app.component.css' ], + providers: [ MovieService ] +}) +export class AppComponent { + + angularDocsUrl = 'https://angular.io/'; + colorPreference = 'red'; + eventType = ''; + isActive = true; + isImportant = true; + movie: IMovie = null; + movies: IMovie[] = []; + showImage = true; + title: string = 'AngularJS to Angular Quick Ref Cookbook'; + toggleImage(event: UIEvent) { + this.showImage = !this.showImage; + this.eventType = (event && event.type) || 'not provided'; + } + + constructor(movieService: MovieService) { + this.movies = movieService.getMovies(); + this.movie = this.movies[0]; + } +} diff --git a/aio/content/examples/cb-ajs-quick-reference/ts/src/app/app.module.1.ts b/aio/content/examples/cb-ajs-quick-reference/ts/src/app/app.module.1.ts new file mode 100644 index 0000000000..5b24020186 --- /dev/null +++ b/aio/content/examples/cb-ajs-quick-reference/ts/src/app/app.module.1.ts @@ -0,0 +1,12 @@ +// #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/aio/content/examples/cb-ajs-quick-reference/ts/src/app/app.module.ts b/aio/content/examples/cb-ajs-quick-reference/ts/src/app/app.module.ts new file mode 100644 index 0000000000..1dc46ad17c --- /dev/null +++ b/aio/content/examples/cb-ajs-quick-reference/ts/src/app/app.module.ts @@ -0,0 +1,22 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { FormsModule } from '@angular/forms'; + +import { AppComponent } from './app.component'; +import { MovieListComponent } from './movie-list.component'; +import { AppRoutingModule } from './app-routing.module'; + +@NgModule({ + imports: [ + BrowserModule, + FormsModule, + AppRoutingModule + ], + declarations: [ + AppComponent, + MovieListComponent + ], + bootstrap: [ AppComponent ] +}) +export class AppModule { } diff --git a/aio/content/examples/cb-ajs-quick-reference/ts/src/app/date.pipe.ts b/aio/content/examples/cb-ajs-quick-reference/ts/src/app/date.pipe.ts new file mode 100644 index 0000000000..e1421fa530 --- /dev/null +++ b/aio/content/examples/cb-ajs-quick-reference/ts/src/app/date.pipe.ts @@ -0,0 +1,14 @@ +import { Injectable, Pipe, PipeTransform } from '@angular/core'; +import { DatePipe } from '@angular/common'; + +@Injectable() +// #docregion date-pipe +@Pipe({name: 'date', pure: true}) +export class StringSafeDatePipe extends DatePipe implements PipeTransform { + transform(value: any, format: string): string { + value = typeof value === 'string' ? + Date.parse(value) : value; + return super.transform(value, format); + } +} +// #enddocregion date-pipe diff --git a/aio/content/examples/cb-ajs-quick-reference/ts/src/app/movie-list.component.css b/aio/content/examples/cb-ajs-quick-reference/ts/src/app/movie-list.component.css new file mode 100644 index 0000000000..a3d5bf8161 --- /dev/null +++ b/aio/content/examples/cb-ajs-quick-reference/ts/src/app/movie-list.component.css @@ -0,0 +1,57 @@ +div { + font-family:Arial, Helvetica, sans-serif; + margin:20px; +} + +table { + font-family:Arial, Helvetica, sans-serif; + color:#666; + font-size:14px; + text-shadow: 1px 1px 0 #fff; + margin:20px; + border:#ccc 1px solid; + + -moz-border-radius:3px; + -webkit-border-radius:3px; + border-radius:3px; +} +table th { + padding:21px 25px 22px 25px; + border-top:1px solid #fafafa; + border-bottom:1px solid #e0e0e0; + border-left: 1px solid #e0e0e0; + font-weight: bold; +} +table th:first-child { + text-align: left; + padding-left:20px; + border-left: 0; +} +table tr { + text-align: center; + padding-left:20px; +} +table td:first-child { + text-align: left; + padding-left:20px; + border-left: 0; +} +table td { + padding:18px; + border-top: 1px solid #ffffff; + border-bottom:1px solid #e0e0e0; + border-left: 1px solid #e0e0e0; +} +table tr:last-child td { + border-bottom:0; +} +table tr:last-child td:first-child { + -moz-border-radius-bottomleft:3px; + -webkit-border-bottom-left-radius:3px; + border-bottom-left-radius:3px; +} +table tr:last-child td:last-child { + -moz-border-radius-bottomright:3px; + -webkit-border-bottom-right-radius:3px; + border-bottom-right-radius:3px; +} diff --git a/aio/content/examples/cb-ajs-quick-reference/ts/src/app/movie-list.component.html b/aio/content/examples/cb-ajs-quick-reference/ts/src/app/movie-list.component.html new file mode 100644 index 0000000000..9de98806d7 --- /dev/null +++ b/aio/content/examples/cb-ajs-quick-reference/ts/src/app/movie-list.component.html @@ -0,0 +1,78 @@ + +
    +

    Movie List

    +
    Who is your favorite hero?
    +
    + + + + + + +

    + Excellent choice! +

    +

    + No movie, sorry! +

    +

    + Please enter your favorite hero. +

    +
    + +
    +
    + + +

    + + Your favorite hero is: {{favoriteHero}} + +

    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + TitleHeroRelease DateRatingPriceStar ratingApproval rating
    + + {{movie.title}}{{movie.hero}}{{movie.releaseDate | date}}{{movie.mpaa | uppercase}}{{movie.price | currency:'USD':true}}{{movie.starRating | number:'1.1-2'}}{{movie.approvalRating | percent: '1.0-0'}}
    +
    diff --git a/aio/content/examples/cb-ajs-quick-reference/ts/src/app/movie-list.component.ts b/aio/content/examples/cb-ajs-quick-reference/ts/src/app/movie-list.component.ts new file mode 100644 index 0000000000..c194bc50bd --- /dev/null +++ b/aio/content/examples/cb-ajs-quick-reference/ts/src/app/movie-list.component.ts @@ -0,0 +1,43 @@ +/* tslint:disable:no-unused-variable */ +// #docplaster +// #docregion import +import { Component } from '@angular/core'; +// #enddocregion import +import { IMovie } from './movie'; +import { MovieService } from './movie.service'; + +// #docregion component +@Component({ + moduleId: module.id, + selector: 'movie-list', + templateUrl: './movie-list.component.html', +// #docregion style-url + styleUrls: [ './movie-list.component.css' ], +// #enddocregion style-url +}) +// #enddocregion component +// #docregion class +export class MovieListComponent { +// #enddocregion class + favoriteHero: string; + showImage: boolean = false; + movies: IMovie[]; + +// #docregion di + constructor(movieService: MovieService) { +// #enddocregion di + this.movies = movieService.getMovies(); +// #docregion di + } +// #enddocregion di + + toggleImage(): void { + this.showImage = !this.showImage; + } + + checkMovieHero(value: string): boolean { + return this.movies.filter(movie => movie.hero === value).length > 0 ; + } +// #docregion class +} +// #enddocregion class diff --git a/aio/content/examples/cb-ajs-quick-reference/ts/src/app/movie.service.ts b/aio/content/examples/cb-ajs-quick-reference/ts/src/app/movie.service.ts new file mode 100644 index 0000000000..404fd4454c --- /dev/null +++ b/aio/content/examples/cb-ajs-quick-reference/ts/src/app/movie.service.ts @@ -0,0 +1,44 @@ +import { Injectable } from '@angular/core'; + +import { IMovie } from './movie'; + +@Injectable() +export class MovieService { + getMovies(): IMovie[] { + return [ + { + hero: 'Celeritas', + imageurl: 'images/hero.png', + movieId: 1, + mpaa: 'pg-13', + releaseDate: '2015-12-19T00:00:00', + title: 'Celeritas Reigns', + price: 12.95, + starRating: 4.925, + approvalRating: .97 + }, + { + hero: 'Mr. Nice', + imageurl: 'images/villain.png', + movieId: 2, + mpaa: 'pg-13', + releaseDate: '2015-12-18T00:00:00', + title: 'No More Mr. Nice Guy', + price: 14.95, + starRating: 4.6, + approvalRating: .94 + }, + { + hero: 'Angular', + imageurl: 'images/ng-logo.png', + movieId: 3, + mpaa: 'pg-13', + releaseDate: '2015-12-17T00:00:00', + title: 'Angular to the Rescue', + price: 15.95, + starRating: 4.98, + approvalRating: .9995 + } + ]; + } +} diff --git a/aio/content/examples/cb-ajs-quick-reference/ts/src/app/movie.ts b/aio/content/examples/cb-ajs-quick-reference/ts/src/app/movie.ts new file mode 100644 index 0000000000..0e6f321520 --- /dev/null +++ b/aio/content/examples/cb-ajs-quick-reference/ts/src/app/movie.ts @@ -0,0 +1,12 @@ +/* Defines the movie entity */ +export interface IMovie { + approvalRating: number; + hero: string; + imageurl: string; + movieId: number; + mpaa: string; + price: number; + releaseDate: string; + starRating: number; + title: string; +} diff --git a/aio/content/examples/cb-ajs-quick-reference/ts/src/images/hero.png b/aio/content/examples/cb-ajs-quick-reference/ts/src/images/hero.png new file mode 100644 index 0000000000000000000000000000000000000000..2a128ac3679a5001bf3373ac96ae841e78295ff8 GIT binary patch literal 7312 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 Gk^c{49goZa literal 0 HcmV?d00001 diff --git a/aio/content/examples/cb-ajs-quick-reference/ts/src/images/ng-logo.png b/aio/content/examples/cb-ajs-quick-reference/ts/src/images/ng-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1e488b1a4946d1684393920b7bca5fa3017365f6 GIT binary patch literal 7229 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

    &nr2Koo_x(>IKF?Ga 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�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 literal 0 HcmV?d00001 diff --git a/aio/content/examples/cb-ajs-quick-reference/ts/src/index.html b/aio/content/examples/cb-ajs-quick-reference/ts/src/index.html new file mode 100644 index 0000000000..829f080ae3 --- /dev/null +++ b/aio/content/examples/cb-ajs-quick-reference/ts/src/index.html @@ -0,0 +1,28 @@ + + + + + + AngularJS to Angular Quick Reference + + + + + + + + + + + + + + + + + Loading app... + + + diff --git a/aio/content/examples/cb-ajs-quick-reference/ts/src/main.ts b/aio/content/examples/cb-ajs-quick-reference/ts/src/main.ts new file mode 100644 index 0000000000..6b6532d428 --- /dev/null +++ b/aio/content/examples/cb-ajs-quick-reference/ts/src/main.ts @@ -0,0 +1,5 @@ +// #docregion +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/cb-aot-compiler/e2e-spec.ts b/aio/content/examples/cb-aot-compiler/e2e-spec.ts new file mode 100644 index 0000000000..ab91490604 --- /dev/null +++ b/aio/content/examples/cb-aot-compiler/e2e-spec.ts @@ -0,0 +1,27 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by } from 'protractor'; + +/* tslint:disable:quotemark */ +describe('AOT Compilation', function () { + + beforeAll(function () { + browser.get(''); + }); + + it('should load page and click button', function (done) { + let headingSelector = element.all(by.css('h1')).get(0); + expect(headingSelector.getText()).toEqual('Hello Angular'); + + expect(element.all(by.xpath('//div[text()="Magneta"]')).get(0).isPresent()).toBe(true); + expect(element.all(by.xpath('//div[text()="Bombasto"]')).get(0).isPresent()).toBe(true); + expect(element.all(by.xpath('//div[text()="Magma"]')).get(0).isPresent()).toBe(true); + expect(element.all(by.xpath('//div[text()="Tornado"]')).get(0).isPresent()).toBe(true); + + let toggleButton = element.all(by.css('button')).get(0); + toggleButton.click().then(function() { + expect(headingSelector.isPresent()).toBe(false); + done(); + }); + }); +}); diff --git a/aio/content/examples/cb-aot-compiler/ts/.gitignore b/aio/content/examples/cb-aot-compiler/ts/.gitignore new file mode 100644 index 0000000000..91da4c79a2 --- /dev/null +++ b/aio/content/examples/cb-aot-compiler/ts/.gitignore @@ -0,0 +1,7 @@ +**/*.ngfactory.ts +**/*.ngsummary.json +**/*.shim.ngstyle.ts +**/*.metadata.json +dist +!app/tsconfig.json +!rollup-config.js diff --git a/aio/content/examples/cb-aot-compiler/ts/example-config.json b/aio/content/examples/cb-aot-compiler/ts/example-config.json new file mode 100644 index 0000000000..473b80a572 --- /dev/null +++ b/aio/content/examples/cb-aot-compiler/ts/example-config.json @@ -0,0 +1,3 @@ +{ + "build": "build:aot" +} diff --git a/aio/content/examples/cb-aot-compiler/ts/rollup-config.js b/aio/content/examples/cb-aot-compiler/ts/rollup-config.js new file mode 100644 index 0000000000..0c9088fe54 --- /dev/null +++ b/aio/content/examples/cb-aot-compiler/ts/rollup-config.js @@ -0,0 +1,36 @@ +// #docregion +import rollup from 'rollup' +import nodeResolve from 'rollup-plugin-node-resolve' +import commonjs from 'rollup-plugin-commonjs'; +import uglify from 'rollup-plugin-uglify' + +// #docregion config +export default { + entry: 'src/main.js', + dest: 'src/build.js', // output a single application bundle + sourceMap: false, + format: 'iife', + onwarn: function(warning) { + // Skip certain warnings + + // should intercept ... but doesn't in some rollup versions + if ( warning.code === 'THIS_IS_UNDEFINED' ) { return; } + // intercepts in some rollup versions + if ( warning.indexOf("The 'this' keyword is equivalent to 'undefined'") > -1 ) { return; } + + // console.warn everything else + console.warn( warning.message ); + }, + plugins: [ + nodeResolve({jsnext: true, module: true}), + // #docregion commonjs + commonjs({ + include: 'node_modules/rxjs/**', + }), + // #enddocregion commonjs + // #docregion uglify + uglify() + // #enddocregion uglify + ] +} +// #enddocregion config diff --git a/aio/content/examples/cb-aot-compiler/ts/src/app/app.component.html b/aio/content/examples/cb-aot-compiler/ts/src/app/app.component.html new file mode 100644 index 0000000000..1d3a8de932 --- /dev/null +++ b/aio/content/examples/cb-aot-compiler/ts/src/app/app.component.html @@ -0,0 +1,7 @@ + + +

    Hello Angular

    + +

    List of Heroes

    +
    {{hero}}
    + diff --git a/aio/content/examples/cb-aot-compiler/ts/src/app/app.component.ts b/aio/content/examples/cb-aot-compiler/ts/src/app/app.component.ts new file mode 100644 index 0000000000..680c07d682 --- /dev/null +++ b/aio/content/examples/cb-aot-compiler/ts/src/app/app.component.ts @@ -0,0 +1,16 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + moduleId: module.id, + selector: 'my-app', + templateUrl: './app.component.html' +}) +export class AppComponent { + showHeading = true; + heroes = ['Magneta', 'Bombasto', 'Magma', 'Tornado']; + + toggleHeading() { + this.showHeading = !this.showHeading; + } +} diff --git a/aio/content/examples/cb-aot-compiler/ts/src/app/app.module.ts b/aio/content/examples/cb-aot-compiler/ts/src/app/app.module.ts new file mode 100644 index 0000000000..b4fc185c24 --- /dev/null +++ b/aio/content/examples/cb-aot-compiler/ts/src/app/app.module.ts @@ -0,0 +1,12 @@ +// #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/aio/content/examples/cb-aot-compiler/ts/src/index-jit.html b/aio/content/examples/cb-aot-compiler/ts/src/index-jit.html new file mode 100644 index 0000000000..713a04970e --- /dev/null +++ b/aio/content/examples/cb-aot-compiler/ts/src/index-jit.html @@ -0,0 +1,24 @@ + + + + + Ahead of time compilation (JIT) + + + + + + + + + + + + + + + Loading... + + diff --git a/aio/content/examples/cb-aot-compiler/ts/src/index.html b/aio/content/examples/cb-aot-compiler/ts/src/index.html new file mode 100644 index 0000000000..9016f3cbe1 --- /dev/null +++ b/aio/content/examples/cb-aot-compiler/ts/src/index.html @@ -0,0 +1,23 @@ + + + + + Ahead of time compilation + + + + + + + + + + + + + Loading... + + + + + diff --git a/aio/content/examples/cb-aot-compiler/ts/src/main-jit.ts b/aio/content/examples/cb-aot-compiler/ts/src/main-jit.ts new file mode 100644 index 0000000000..88e2c16ed5 --- /dev/null +++ b/aio/content/examples/cb-aot-compiler/ts/src/main-jit.ts @@ -0,0 +1,6 @@ +// #docregion +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module'; + +console.log('Running JIT compiled'); +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/cb-aot-compiler/ts/src/main.ts b/aio/content/examples/cb-aot-compiler/ts/src/main.ts new file mode 100644 index 0000000000..4446bc07d1 --- /dev/null +++ b/aio/content/examples/cb-aot-compiler/ts/src/main.ts @@ -0,0 +1,6 @@ +// #docregion +import { platformBrowser } from '@angular/platform-browser'; +import { AppModuleNgFactory } from '../aot/src/app/app.module.ngfactory'; + +console.log('Running AOT compiled'); +platformBrowser().bootstrapModuleFactory(AppModuleNgFactory); diff --git a/aio/content/examples/cb-aot-compiler/ts/tsconfig-aot.json b/aio/content/examples/cb-aot-compiler/ts/tsconfig-aot.json new file mode 100644 index 0000000000..d0a3d00ad4 --- /dev/null +++ b/aio/content/examples/cb-aot-compiler/ts/tsconfig-aot.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "target": "es5", + "module": "es2015", + "moduleResolution": "node", + "sourceMap": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "lib": ["es2015", "dom"], + "noImplicitAny": true, + "suppressImplicitAnyIndexErrors": true + }, + + "files": [ + "src/app/app.module.ts", + "src/main.ts" + ], + + "angularCompilerOptions": { + "genDir": "aot", + "skipMetadataEmit" : true + } +} diff --git a/aio/content/examples/cb-aot-compiler/ts/tsconfig-aot.json.annotated b/aio/content/examples/cb-aot-compiler/ts/tsconfig-aot.json.annotated new file mode 100644 index 0000000000..ada86a323e --- /dev/null +++ b/aio/content/examples/cb-aot-compiler/ts/tsconfig-aot.json.annotated @@ -0,0 +1,25 @@ +// #docregion +{ + "compilerOptions": { + "target": "es5", + "module": "es2015", + "moduleResolution": "node", + "sourceMap": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "lib": ["es2015", "dom"], + "noImplicitAny": true, + "suppressImplicitAnyIndexErrors": true + }, + + "files": [ + "src/app/app.module.ts", + "src/main.ts" + ], + + "angularCompilerOptions": { + "genDir": "aot", + "skipMetadataEmit" : true + } +} +// #enddocregion diff --git a/aio/content/examples/cb-component-communication/e2e-spec.ts b/aio/content/examples/cb-component-communication/e2e-spec.ts new file mode 100644 index 0000000000..d78e0784d9 --- /dev/null +++ b/aio/content/examples/cb-component-communication/e2e-spec.ts @@ -0,0 +1,232 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by } from 'protractor'; + +describe('Component Communication Cookbook Tests', function () { + + // Note: '?e2e' which app can read to know it is running in protractor + // e.g. `if (!/e2e/.test(location.search)) { ...` + beforeAll(function () { + browser.get('?e2e'); + }); + + describe('Parent-to-child communication', function() { + // #docregion parent-to-child + // ... + let _heroNames = ['Mr. IQ', 'Magneta', 'Bombasto']; + let _masterName = 'Master'; + + it('should pass properties to children properly', function () { + let parent = element.all(by.tagName('hero-parent')).get(0); + let heroes = parent.all(by.tagName('hero-child')); + + for (let i = 0; i < _heroNames.length; i++) { + let childTitle = heroes.get(i).element(by.tagName('h3')).getText(); + let childDetail = heroes.get(i).element(by.tagName('p')).getText(); + expect(childTitle).toEqual(_heroNames[i] + ' says:'); + expect(childDetail).toContain(_masterName); + } + }); + // ... + // #enddocregion parent-to-child + }); + + describe('Parent-to-child communication with setter', function() { + // #docregion parent-to-child-setter + // ... + it('should display trimmed, non-empty names', function () { + let _nonEmptyNameIndex = 0; + let _nonEmptyName = '"Mr. IQ"'; + let parent = element.all(by.tagName('name-parent')).get(0); + let hero = parent.all(by.tagName('name-child')).get(_nonEmptyNameIndex); + + let displayName = hero.element(by.tagName('h3')).getText(); + expect(displayName).toEqual(_nonEmptyName); + }); + + it('should replace empty name with default name', function () { + let _emptyNameIndex = 1; + let _defaultName = '""'; + let parent = element.all(by.tagName('name-parent')).get(0); + let hero = parent.all(by.tagName('name-child')).get(_emptyNameIndex); + + let displayName = hero.element(by.tagName('h3')).getText(); + expect(displayName).toEqual(_defaultName); + }); + // ... + // #enddocregion parent-to-child-setter + }); + + describe('Parent-to-child communication with ngOnChanges', function() { + // #docregion parent-to-child-onchanges + // ... + // Test must all execute in this exact order + it('should set expected initial values', function () { + let actual = getActual(); + + let initialLabel = 'Version 1.23'; + let initialLog = 'Initial value of major set to 1, Initial value of minor set to 23'; + + expect(actual.label).toBe(initialLabel); + expect(actual.count).toBe(1); + expect(actual.logs.get(0).getText()).toBe(initialLog); + }); + + it('should set expected values after clicking \'Minor\' twice', function () { + let repoTag = element(by.tagName('version-parent')); + let newMinorButton = repoTag.all(by.tagName('button')).get(0); + + newMinorButton.click().then(function() { + newMinorButton.click().then(function() { + let actual = getActual(); + + let labelAfter2Minor = 'Version 1.25'; + let logAfter2Minor = 'minor changed from 24 to 25'; + + expect(actual.label).toBe(labelAfter2Minor); + expect(actual.count).toBe(3); + expect(actual.logs.get(2).getText()).toBe(logAfter2Minor); + }); + }); + }); + + it('should set expected values after clicking \'Major\' once', function () { + let repoTag = element(by.tagName('version-parent')); + let newMajorButton = repoTag.all(by.tagName('button')).get(1); + + newMajorButton.click().then(function() { + let actual = getActual(); + + let labelAfterMajor = 'Version 2.0'; + let logAfterMajor = 'major changed from 1 to 2, minor changed from 25 to 0'; + + expect(actual.label).toBe(labelAfterMajor); + expect(actual.count).toBe(4); + expect(actual.logs.get(3).getText()).toBe(logAfterMajor); + }); + }); + + function getActual() { + let versionTag = element(by.tagName('version-child')); + let label = versionTag.element(by.tagName('h3')).getText(); + let ul = versionTag.element((by.tagName('ul'))); + let logs = ul.all(by.tagName('li')); + + return { + label: label, + logs: logs, + count: logs.count() + }; + } + // ... + // #enddocregion parent-to-child-onchanges + + }); + + describe('Child-to-parent communication', function() { + // #docregion child-to-parent + // ... + it('should not emit the event initially', function () { + let voteLabel = element(by.tagName('vote-taker')) + .element(by.tagName('h3')).getText(); + expect(voteLabel).toBe('Agree: 0, Disagree: 0'); + }); + + it('should process Agree vote', function () { + let agreeButton1 = element.all(by.tagName('my-voter')).get(0) + .all(by.tagName('button')).get(0); + agreeButton1.click().then(function() { + let voteLabel = element(by.tagName('vote-taker')) + .element(by.tagName('h3')).getText(); + expect(voteLabel).toBe('Agree: 1, Disagree: 0'); + }); + }); + + it('should process Disagree vote', function () { + let agreeButton1 = element.all(by.tagName('my-voter')).get(1) + .all(by.tagName('button')).get(1); + agreeButton1.click().then(function() { + let voteLabel = element(by.tagName('vote-taker')) + .element(by.tagName('h3')).getText(); + expect(voteLabel).toBe('Agree: 1, Disagree: 1'); + }); + }); + // ... + // #enddocregion child-to-parent + }); + + // Can't run timer tests in protractor because + // interaction w/ zones causes all tests to freeze & timeout. + xdescribe('Parent calls child via local var', function() { + countDownTimerTests('countdown-parent-lv'); + }); + + xdescribe('Parent calls ViewChild', function() { + countDownTimerTests('countdown-parent-vc'); + }); + + function countDownTimerTests(parentTag: string) { + // #docregion countdown-timer-tests + // ... + it('timer and parent seconds should match', function () { + let parent = element(by.tagName(parentTag)); + let message = parent.element(by.tagName('countdown-timer')).getText(); + browser.sleep(10); // give `seconds` a chance to catchup with `message` + let seconds = parent.element(by.className('seconds')).getText(); + expect(message).toContain(seconds); + }); + + it('should stop the countdown', function () { + let parent = element(by.tagName(parentTag)); + let stopButton = parent.all(by.tagName('button')).get(1); + + stopButton.click().then(function() { + let message = parent.element(by.tagName('countdown-timer')).getText(); + expect(message).toContain('Holding'); + }); + }); + // ... + // #enddocregion countdown-timer-tests + } + + + describe('Parent and children communicate via a service', function() { + // #docregion bidirectional-service + // ... + it('should announce a mission', function () { + let missionControl = element(by.tagName('mission-control')); + let announceButton = missionControl.all(by.tagName('button')).get(0); + announceButton.click().then(function () { + let history = missionControl.all(by.tagName('li')); + expect(history.count()).toBe(1); + expect(history.get(0).getText()).toMatch(/Mission.* announced/); + }); + }); + + it('should confirm the mission by Lovell', function () { + testConfirmMission(1, 2, 'Lovell'); + }); + + it('should confirm the mission by Haise', function () { + testConfirmMission(3, 3, 'Haise'); + }); + + it('should confirm the mission by Swigert', function () { + testConfirmMission(2, 4, 'Swigert'); + }); + + function testConfirmMission(buttonIndex: number, expectedLogCount: number, astronaut: string) { + let _confirmedLog = ' confirmed the mission'; + let missionControl = element(by.tagName('mission-control')); + let confirmButton = missionControl.all(by.tagName('button')).get(buttonIndex); + confirmButton.click().then(function () { + let history = missionControl.all(by.tagName('li')); + expect(history.count()).toBe(expectedLogCount); + expect(history.get(expectedLogCount - 1).getText()).toBe(astronaut + _confirmedLog); + }); + } + // ... + // #enddocregion bidirectional-service + }); + +}); diff --git a/aio/content/examples/cb-component-communication/ts/.gitignore b/aio/content/examples/cb-component-communication/ts/.gitignore new file mode 100644 index 0000000000..2cb7d2a2e9 --- /dev/null +++ b/aio/content/examples/cb-component-communication/ts/.gitignore @@ -0,0 +1 @@ +**/*.js diff --git a/aio/content/examples/cb-component-communication/ts/example-config.json b/aio/content/examples/cb-component-communication/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/cb-component-communication/ts/plnkr.json b/aio/content/examples/cb-component-communication/ts/plnkr.json new file mode 100644 index 0000000000..03bd55cd1a --- /dev/null +++ b/aio/content/examples/cb-component-communication/ts/plnkr.json @@ -0,0 +1,9 @@ +{ + "description": "Component Communication Cookbook samples", + "basePath": "src/", + "files":[ + "!**/*.d.ts", + "!**/*.js" + ], + "tags":["cookbook", "component"] +} diff --git a/aio/content/examples/cb-component-communication/ts/plnkr.no-link.html b/aio/content/examples/cb-component-communication/ts/plnkr.no-link.html new file mode 100644 index 0000000000..82eab6a1f3 --- /dev/null +++ b/aio/content/examples/cb-component-communication/ts/plnkr.no-link.html @@ -0,0 +1,757 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/cb-component-communication/ts/src/app/app.component.html b/aio/content/examples/cb-component-communication/ts/src/app/app.component.html new file mode 100644 index 0000000000..ef94020efb --- /dev/null +++ b/aio/content/examples/cb-component-communication/ts/src/app/app.component.html @@ -0,0 +1,51 @@ +

    Component Communication Cookbook

    + +
    Pass data from parent to child with input binding ("Heroes")
    +Intercept input property changes with a setter ("Master")
    +Intercept input property changes with ngOnChanges ("Source code version")
    +Parent listens for child event ("Colonize Universe")
    +Parent to child via local variable("Countdown to Liftoff")
    +Parent calls ViewChild("Countdown to Liftoff")
    +Parent and children communicate via a service ("Mission Control")
    + +
    + +
    +Back to Top + +
    +
    + +
    +Back to Top + +
    +
    + +
    +Back to Top + +
    +
    + +
    +Back to Top +
    + +
    + +
    +Back to Top +
    + +
    + +
    +Back to Top +
    + +
    + +
    +Back to Top +
    diff --git a/aio/content/examples/cb-component-communication/ts/src/app/app.component.ts b/aio/content/examples/cb-component-communication/ts/src/app/app.component.ts new file mode 100644 index 0000000000..ab2d3d9c33 --- /dev/null +++ b/aio/content/examples/cb-component-communication/ts/src/app/app.component.ts @@ -0,0 +1,8 @@ +import { Component } from '@angular/core'; + +@Component({ + moduleId: module.id, + selector: 'my-app', + templateUrl: './app.component.html' +}) +export class AppComponent { } diff --git a/aio/content/examples/cb-component-communication/ts/src/app/app.module.ts b/aio/content/examples/cb-component-communication/ts/src/app/app.module.ts new file mode 100644 index 0000000000..a008fc5486 --- /dev/null +++ b/aio/content/examples/cb-component-communication/ts/src/app/app.module.ts @@ -0,0 +1,54 @@ +import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; + +import { AppComponent } from './app.component'; +import { AstronautComponent } from './astronaut.component'; +import { CountdownLocalVarParentComponent, CountdownViewChildParentComponent } from './countdown-parent.component'; +import { CountdownTimerComponent } from './countdown-timer.component'; +import { HeroChildComponent } from './hero-child.component'; +import { HeroParentComponent } from './hero-parent.component'; +import { MissionControlComponent } from './missioncontrol.component'; +import { NameChildComponent } from './name-child.component'; +import { NameParentComponent } from './name-parent.component'; +import { VersionChildComponent } from './version-child.component'; +import { VersionParentComponent } from './version-parent.component'; +import { VoterComponent } from './voter.component'; +import { VoteTakerComponent } from './votetaker.component'; + +let directives: any[] = [ + AppComponent, + AstronautComponent, + CountdownTimerComponent, + HeroChildComponent, + HeroParentComponent, + MissionControlComponent, + NameChildComponent, + NameParentComponent, + VersionChildComponent, + VersionParentComponent, + VoterComponent, + VoteTakerComponent + ]; + +let schemas: any[] = []; + +// Include Countdown examples +// unless in e2e tests which they break. +if (!/e2e/.test(location.search)) { + console.log('adding countdown timer examples'); + directives.push(CountdownLocalVarParentComponent); + directives.push(CountdownViewChildParentComponent); +} else { + // In e2e test use CUSTOM_ELEMENTS_SCHEMA to supress unknown element errors + schemas.push(CUSTOM_ELEMENTS_SCHEMA); +} + +@NgModule({ + imports: [ + BrowserModule + ], + declarations: directives, + bootstrap: [ AppComponent ], + schemas: schemas +}) +export class AppModule { } diff --git a/aio/content/examples/cb-component-communication/ts/src/app/astronaut.component.ts b/aio/content/examples/cb-component-communication/ts/src/app/astronaut.component.ts new file mode 100644 index 0000000000..bc24964f86 --- /dev/null +++ b/aio/content/examples/cb-component-communication/ts/src/app/astronaut.component.ts @@ -0,0 +1,46 @@ +// #docregion +import { Component, Input, OnDestroy } from '@angular/core'; + +import { MissionService } from './mission.service'; +import { Subscription } from 'rxjs/Subscription'; + +@Component({ + selector: 'my-astronaut', + template: ` +

    + {{astronaut}}: {{mission}} + +

    + ` +}) +export class AstronautComponent implements OnDestroy { + @Input() astronaut: string; + mission = ''; + confirmed = false; + announced = false; + subscription: Subscription; + + constructor(private missionService: MissionService) { + this.subscription = missionService.missionAnnounced$.subscribe( + mission => { + this.mission = mission; + this.announced = true; + this.confirmed = false; + }); + } + + confirm() { + this.confirmed = true; + this.missionService.confirmMission(this.astronaut); + } + + ngOnDestroy() { + // prevent memory leak when component destroyed + this.subscription.unsubscribe(); + } +} +// #enddocregion diff --git a/aio/content/examples/cb-component-communication/ts/src/app/countdown-parent.component.ts b/aio/content/examples/cb-component-communication/ts/src/app/countdown-parent.component.ts new file mode 100644 index 0000000000..5bcf0645c9 --- /dev/null +++ b/aio/content/examples/cb-component-communication/ts/src/app/countdown-parent.component.ts @@ -0,0 +1,57 @@ +// #docplaster +// #docregion vc +import { AfterViewInit, ViewChild } from '@angular/core'; +// #docregion lv +import { Component } from '@angular/core'; +import { CountdownTimerComponent } from './countdown-timer.component'; + +// #enddocregion lv +// #enddocregion vc + +//// Local variable, #timer, version +// #docregion lv +@Component({ + selector: 'countdown-parent-lv', + template: ` +

    Countdown to Liftoff (via local variable)

    + + +
    {{timer.seconds}}
    + + `, + styleUrls: ['demo.css'] +}) +export class CountdownLocalVarParentComponent { } +// #enddocregion lv + +//// View Child version +// #docregion vc +@Component({ + selector: 'countdown-parent-vc', + template: ` +

    Countdown to Liftoff (via ViewChild)

    + + +
    {{ seconds() }}
    + + `, + styleUrls: ['demo.css'] +}) +export class CountdownViewChildParentComponent implements AfterViewInit { + + @ViewChild(CountdownTimerComponent) + private timerComponent: CountdownTimerComponent; + + seconds() { return 0; } + + ngAfterViewInit() { + // Redefine `seconds()` to get from the `CountdownTimerComponent.seconds` ... + // but wait a tick first to avoid one-time devMode + // unidirectional-data-flow-violation error + setTimeout(() => this.seconds = () => this.timerComponent.seconds, 0); + } + + start() { this.timerComponent.start(); } + stop() { this.timerComponent.stop(); } +} +// #enddocregion vc diff --git a/aio/content/examples/cb-component-communication/ts/src/app/countdown-timer.component.ts b/aio/content/examples/cb-component-communication/ts/src/app/countdown-timer.component.ts new file mode 100644 index 0000000000..a9a1a2fa7c --- /dev/null +++ b/aio/content/examples/cb-component-communication/ts/src/app/countdown-timer.component.ts @@ -0,0 +1,37 @@ +// #docregion +import { Component, OnDestroy, OnInit } from '@angular/core'; + +@Component({ + selector: 'countdown-timer', + template: '

    {{message}}

    ' +}) +export class CountdownTimerComponent implements OnInit, OnDestroy { + + intervalId = 0; + message = ''; + seconds = 11; + + clearTimer() { clearInterval(this.intervalId); } + + ngOnInit() { this.start(); } + ngOnDestroy() { this.clearTimer(); } + + start() { this.countDown(); } + stop() { + this.clearTimer(); + this.message = `Holding at T-${this.seconds} seconds`; + } + + private countDown() { + this.clearTimer(); + this.intervalId = window.setInterval(() => { + this.seconds -= 1; + if (this.seconds === 0) { + this.message = 'Blast off!'; + } else { + if (this.seconds < 0) { this.seconds = 10; } // reset + this.message = `T-${this.seconds} seconds and counting`; + } + }, 1000); + } +} diff --git a/aio/content/examples/cb-component-communication/ts/src/app/hero-child.component.ts b/aio/content/examples/cb-component-communication/ts/src/app/hero-child.component.ts new file mode 100644 index 0000000000..7447542a74 --- /dev/null +++ b/aio/content/examples/cb-component-communication/ts/src/app/hero-child.component.ts @@ -0,0 +1,17 @@ +// #docregion +import { Component, Input } from '@angular/core'; + +import { Hero } from './hero'; + +@Component({ + selector: 'hero-child', + template: ` +

    {{hero.name}} says:

    +

    I, {{hero.name}}, am at your service, {{masterName}}.

    + ` +}) +export class HeroChildComponent { + @Input() hero: Hero; + @Input('master') masterName: string; +} +// #enddocregion diff --git a/aio/content/examples/cb-component-communication/ts/src/app/hero-parent.component.ts b/aio/content/examples/cb-component-communication/ts/src/app/hero-parent.component.ts new file mode 100644 index 0000000000..bf3861c455 --- /dev/null +++ b/aio/content/examples/cb-component-communication/ts/src/app/hero-parent.component.ts @@ -0,0 +1,20 @@ +// #docregion +import { Component } from '@angular/core'; + +import { HEROES } from './hero'; + +@Component({ + selector: 'hero-parent', + template: ` +

    {{master}} controls {{heroes.length}} heroes

    + + + ` +}) +export class HeroParentComponent { + heroes = HEROES; + master: string = 'Master'; +} +// #enddocregion diff --git a/aio/content/examples/cb-component-communication/ts/src/app/hero.ts b/aio/content/examples/cb-component-communication/ts/src/app/hero.ts new file mode 100644 index 0000000000..a7b70f48e8 --- /dev/null +++ b/aio/content/examples/cb-component-communication/ts/src/app/hero.ts @@ -0,0 +1,9 @@ +export class Hero { + name: string; +} + +export const HEROES = [ + {name: 'Mr. IQ'}, + {name: 'Magneta'}, + {name: 'Bombasto'} +]; diff --git a/aio/content/examples/cb-component-communication/ts/src/app/mission.service.ts b/aio/content/examples/cb-component-communication/ts/src/app/mission.service.ts new file mode 100644 index 0000000000..25c86866b0 --- /dev/null +++ b/aio/content/examples/cb-component-communication/ts/src/app/mission.service.ts @@ -0,0 +1,25 @@ +// #docregion +import { Injectable } from '@angular/core'; +import { Subject } from 'rxjs/Subject'; + +@Injectable() +export class MissionService { + + // Observable string sources + private missionAnnouncedSource = new Subject(); + private missionConfirmedSource = new Subject(); + + // Observable string streams + missionAnnounced$ = this.missionAnnouncedSource.asObservable(); + missionConfirmed$ = this.missionConfirmedSource.asObservable(); + + // Service message commands + announceMission(mission: string) { + this.missionAnnouncedSource.next(mission); + } + + confirmMission(astronaut: string) { + this.missionConfirmedSource.next(astronaut); + } +} +// #enddocregion diff --git a/aio/content/examples/cb-component-communication/ts/src/app/missioncontrol.component.ts b/aio/content/examples/cb-component-communication/ts/src/app/missioncontrol.component.ts new file mode 100644 index 0000000000..a27e9b16b1 --- /dev/null +++ b/aio/content/examples/cb-component-communication/ts/src/app/missioncontrol.component.ts @@ -0,0 +1,43 @@ +// #docregion +import { Component } from '@angular/core'; + +import { MissionService } from './mission.service'; + +@Component({ + selector: 'mission-control', + template: ` +

    Mission Control

    + + + +

    History

    +
      +
    • {{event}}
    • +
    + `, + providers: [MissionService] +}) +export class MissionControlComponent { + astronauts = ['Lovell', 'Swigert', 'Haise']; + history: string[] = []; + missions = ['Fly to the moon!', + 'Fly to mars!', + 'Fly to Vegas!']; + nextMission = 0; + + constructor(private missionService: MissionService) { + missionService.missionConfirmed$.subscribe( + astronaut => { + this.history.push(`${astronaut} confirmed the mission`); + }); + } + + announce() { + let mission = this.missions[this.nextMission++]; + this.missionService.announceMission(mission); + this.history.push(`Mission "${mission}" announced`); + if (this.nextMission >= this.missions.length) { this.nextMission = 0; } + } +} +// #enddocregion diff --git a/aio/content/examples/cb-component-communication/ts/src/app/name-child.component.ts b/aio/content/examples/cb-component-communication/ts/src/app/name-child.component.ts new file mode 100644 index 0000000000..bc6d3c6f59 --- /dev/null +++ b/aio/content/examples/cb-component-communication/ts/src/app/name-child.component.ts @@ -0,0 +1,18 @@ +// #docregion +import { Component, Input } from '@angular/core'; + +@Component({ + selector: 'name-child', + template: '

    "{{name}}"

    ' +}) +export class NameChildComponent { + private _name = ''; + + @Input() + set name(name: string) { + this._name = (name && name.trim()) || ''; + } + + get name(): string { return this._name; } +} +// #enddocregion diff --git a/aio/content/examples/cb-component-communication/ts/src/app/name-parent.component.ts b/aio/content/examples/cb-component-communication/ts/src/app/name-parent.component.ts new file mode 100644 index 0000000000..99753303aa --- /dev/null +++ b/aio/content/examples/cb-component-communication/ts/src/app/name-parent.component.ts @@ -0,0 +1,15 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'name-parent', + template: ` +

    Master controls {{names.length}} names

    + + ` +}) +export class NameParentComponent { + // Displays 'Mr. IQ', '', 'Bombasto' + names = ['Mr. IQ', ' ', ' Bombasto ']; +} +// #enddocregion diff --git a/aio/content/examples/cb-component-communication/ts/src/app/version-child.component.ts b/aio/content/examples/cb-component-communication/ts/src/app/version-child.component.ts new file mode 100644 index 0000000000..89d365cf9f --- /dev/null +++ b/aio/content/examples/cb-component-communication/ts/src/app/version-child.component.ts @@ -0,0 +1,35 @@ +/* tslint:disable:forin */ +// #docregion +import { Component, Input, OnChanges, SimpleChange } from '@angular/core'; + +@Component({ + selector: 'version-child', + template: ` +

    Version {{major}}.{{minor}}

    +

    Change log:

    +
      +
    • {{change}}
    • +
    + ` +}) +export class VersionChildComponent implements OnChanges { + @Input() major: number; + @Input() minor: number; + changeLog: string[] = []; + + ngOnChanges(changes: {[propKey: string]: SimpleChange}) { + let log: string[] = []; + for (let propName in changes) { + let changedProp = changes[propName]; + let to = JSON.stringify(changedProp.currentValue); + if (changedProp.isFirstChange()) { + log.push(`Initial value of ${propName} set to ${to}`); + } else { + let from = JSON.stringify(changedProp.previousValue); + log.push(`${propName} changed from ${from} to ${to}`); + } + } + this.changeLog.push(log.join(', ')); + } +} +// #enddocregion diff --git a/aio/content/examples/cb-component-communication/ts/src/app/version-parent.component.ts b/aio/content/examples/cb-component-communication/ts/src/app/version-parent.component.ts new file mode 100644 index 0000000000..bbc9101702 --- /dev/null +++ b/aio/content/examples/cb-component-communication/ts/src/app/version-parent.component.ts @@ -0,0 +1,26 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'version-parent', + template: ` +

    Source code version

    + + + + ` +}) +export class VersionParentComponent { + major: number = 1; + minor: number = 23; + + newMinor() { + this.minor++; + } + + newMajor() { + this.major++; + this.minor = 0; + } +} +// #enddocregion diff --git a/aio/content/examples/cb-component-communication/ts/src/app/voter.component.ts b/aio/content/examples/cb-component-communication/ts/src/app/voter.component.ts new file mode 100644 index 0000000000..c0cb23abc0 --- /dev/null +++ b/aio/content/examples/cb-component-communication/ts/src/app/voter.component.ts @@ -0,0 +1,22 @@ +// #docregion +import { Component, EventEmitter, Input, Output } from '@angular/core'; + +@Component({ + selector: 'my-voter', + template: ` +

    {{name}}

    + + + ` +}) +export class VoterComponent { + @Input() name: string; + @Output() onVoted = new EventEmitter(); + voted = false; + + vote(agreed: boolean) { + this.onVoted.emit(agreed); + this.voted = true; + } +} +// #enddocregion diff --git a/aio/content/examples/cb-component-communication/ts/src/app/votetaker.component.ts b/aio/content/examples/cb-component-communication/ts/src/app/votetaker.component.ts new file mode 100644 index 0000000000..87f06161f5 --- /dev/null +++ b/aio/content/examples/cb-component-communication/ts/src/app/votetaker.component.ts @@ -0,0 +1,24 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'vote-taker', + template: ` +

    Should mankind colonize the Universe?

    +

    Agree: {{agreed}}, Disagree: {{disagreed}}

    + + + ` +}) +export class VoteTakerComponent { + agreed = 0; + disagreed = 0; + voters = ['Mr. IQ', 'Ms. Universe', 'Bombasto']; + + onVoted(agreed: boolean) { + agreed ? this.agreed++ : this.disagreed++; + } +} +// #enddocregion diff --git a/aio/content/examples/cb-component-communication/ts/src/demo.css b/aio/content/examples/cb-component-communication/ts/src/demo.css new file mode 100644 index 0000000000..b63a8b38dd --- /dev/null +++ b/aio/content/examples/cb-component-communication/ts/src/demo.css @@ -0,0 +1,9 @@ +/* Component Communication cookbook specific styles */ +.seconds { + background-color: black; + color: red; + font-size: 3em; + margin: 0.3em 0; + text-align: center; + width: 1.5em; +} diff --git a/aio/content/examples/cb-component-communication/ts/src/index.html b/aio/content/examples/cb-component-communication/ts/src/index.html new file mode 100644 index 0000000000..64c8a3430f --- /dev/null +++ b/aio/content/examples/cb-component-communication/ts/src/index.html @@ -0,0 +1,29 @@ + + + + + Passing information from parent to child + + + + + + + + + + + + + + + + + loading... + + + diff --git a/aio/content/examples/cb-component-relative-paths/ts/app/main.ts b/aio/content/examples/cb-component-communication/ts/src/main.ts similarity index 74% rename from aio/content/examples/cb-component-relative-paths/ts/app/main.ts rename to aio/content/examples/cb-component-communication/ts/src/main.ts index 6af7a5b2ae..311c44b76d 100644 --- a/aio/content/examples/cb-component-relative-paths/ts/app/main.ts +++ b/aio/content/examples/cb-component-communication/ts/src/main.ts @@ -1,5 +1,5 @@ import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; -import { AppModule } from './app.module'; +import { AppModule } from './app/app.module'; platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/cb-component-relative-paths/ts/plnkr.json b/aio/content/examples/cb-component-relative-paths/ts/plnkr.json index a4c33bbde3..21002e1d2f 100644 --- a/aio/content/examples/cb-component-relative-paths/ts/plnkr.json +++ b/aio/content/examples/cb-component-relative-paths/ts/plnkr.json @@ -1,5 +1,6 @@ { "description": "Module-relative Paths", + "basePath": "src/", "files": [ "!**/*.d.ts", "!**/*.js" diff --git a/aio/content/examples/cb-component-relative-paths/ts/plnkr.no-link.html b/aio/content/examples/cb-component-relative-paths/ts/plnkr.no-link.html new file mode 100644 index 0000000000..bd65444405 --- /dev/null +++ b/aio/content/examples/cb-component-relative-paths/ts/plnkr.no-link.html @@ -0,0 +1,277 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/cb-component-relative-paths/ts/app/app.component.ts b/aio/content/examples/cb-component-relative-paths/ts/src/app/app.component.ts similarity index 100% rename from aio/content/examples/cb-component-relative-paths/ts/app/app.component.ts rename to aio/content/examples/cb-component-relative-paths/ts/src/app/app.component.ts diff --git a/aio/content/examples/cb-component-relative-paths/ts/app/app.module.ts b/aio/content/examples/cb-component-relative-paths/ts/src/app/app.module.ts similarity index 100% rename from aio/content/examples/cb-component-relative-paths/ts/app/app.module.ts rename to aio/content/examples/cb-component-relative-paths/ts/src/app/app.module.ts diff --git a/aio/content/examples/cb-component-relative-paths/ts/app/some.component.css b/aio/content/examples/cb-component-relative-paths/ts/src/app/some.component.css similarity index 100% rename from aio/content/examples/cb-component-relative-paths/ts/app/some.component.css rename to aio/content/examples/cb-component-relative-paths/ts/src/app/some.component.css diff --git a/aio/content/examples/cb-component-relative-paths/ts/app/some.component.html b/aio/content/examples/cb-component-relative-paths/ts/src/app/some.component.html similarity index 100% rename from aio/content/examples/cb-component-relative-paths/ts/app/some.component.html rename to aio/content/examples/cb-component-relative-paths/ts/src/app/some.component.html diff --git a/aio/content/examples/cb-component-relative-paths/ts/app/some.component.ts b/aio/content/examples/cb-component-relative-paths/ts/src/app/some.component.ts similarity index 100% rename from aio/content/examples/cb-component-relative-paths/ts/app/some.component.ts rename to aio/content/examples/cb-component-relative-paths/ts/src/app/some.component.ts diff --git a/aio/content/examples/cb-component-relative-paths/ts/index.html b/aio/content/examples/cb-component-relative-paths/ts/src/index.html similarity index 85% rename from aio/content/examples/cb-component-relative-paths/ts/index.html rename to aio/content/examples/cb-component-relative-paths/ts/src/index.html index 9144b9cf26..e951f9f016 100644 --- a/aio/content/examples/cb-component-relative-paths/ts/index.html +++ b/aio/content/examples/cb-component-relative-paths/ts/src/index.html @@ -13,7 +13,7 @@ - + @@ -21,7 +21,7 @@ diff --git a/aio/content/examples/cb-component-relative-paths/ts/src/main.ts b/aio/content/examples/cb-component-relative-paths/ts/src/main.ts new file mode 100644 index 0000000000..311c44b76d --- /dev/null +++ b/aio/content/examples/cb-component-relative-paths/ts/src/main.ts @@ -0,0 +1,5 @@ +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/cb-dependency-injection/e2e-spec.ts b/aio/content/examples/cb-dependency-injection/e2e-spec.ts new file mode 100644 index 0000000000..8c9d163d5e --- /dev/null +++ b/aio/content/examples/cb-dependency-injection/e2e-spec.ts @@ -0,0 +1,102 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by } from 'protractor'; + +describe('Dependency Injection Cookbook', function () { + + beforeAll(function () { + browser.get(''); + }); + + it('should render Logged in User example', function () { + let loggedInUser = element.all(by.xpath('//h3[text()="Logged in user"]')).get(0); + expect(loggedInUser).toBeDefined(); + }); + + it('"Bombasto" should be the logged in user', function () { + let loggedInUser = element.all(by.xpath('//div[text()="Name: Bombasto"]')).get(0); + expect(loggedInUser).toBeDefined(); + }); + + it('should render sorted heroes', function () { + let sortedHeroes = element.all(by.xpath('//h3[text()="Sorted Heroes" and position()=1]')).get(0); + expect(sortedHeroes).toBeDefined(); + }); + + it('Mr. Nice should be in sorted heroes', function () { + let sortedHero = element.all(by.xpath('//sorted-heroes/[text()="Mr. Nice" and position()=2]')).get(0); + expect(sortedHero).toBeDefined(); + }); + + it('RubberMan should be in sorted heroes', function () { + let sortedHero = element.all(by.xpath('//sorted-heroes/[text()="RubberMan" and position()=3]')).get(0); + expect(sortedHero).toBeDefined(); + }); + + it('Magma should be in sorted heroes', function () { + let sortedHero = element.all(by.xpath('//sorted-heroes/[text()="Magma"]')).get(0); + expect(sortedHero).toBeDefined(); + }); + + it('should render Hero of the Month', function () { + let heroOfTheMonth = element.all(by.xpath('//h3[text()="Hero of the month"]')).get(0); + expect(heroOfTheMonth).toBeDefined(); + }); + + it('should render Hero Bios', function () { + let heroBios = element.all(by.xpath('//h3[text()="Hero Bios"]')).get(0); + expect(heroBios).toBeDefined(); + }); + + it('should render Magma\'s description in Hero Bios', function () { + let magmaText = element.all(by.xpath('//textarea[text()="Hero of all trades"]')).get(0); + expect(magmaText).toBeDefined(); + }); + + it('should render Magma\'s phone in Hero Bios and Contacts', function () { + let magmaPhone = element.all(by.xpath('//div[text()="Phone #: 555-555-5555"]')).get(0); + expect(magmaPhone).toBeDefined(); + }); + + it('should render Hero-of-the-Month runner-ups', function () { + let runnersUp = element(by.id('rups1')).getText(); + expect(runnersUp).toContain('RubberMan, Mr. Nice'); + }); + + it('should render DateLogger log entry in Hero-of-the-Month', function () { + let logs = element.all(by.id('logs')).get(0).getText(); + expect(logs).toContain('INFO: starting up at'); + }); + + it('should highlight Hero Bios and Contacts container when mouseover', function () { + let target = element(by.css('div[myHighlight="yellow"]')); + let yellow = 'rgba(255, 255, 0, 1)'; + + expect(target.getCssValue('background-color')).not.toEqual(yellow); + browser.actions().mouseMove(target.getWebElement()).perform(); + expect(target.getCssValue('background-color')).toEqual(yellow); + }); + + describe('in Parent Finder', function () { + let cathy1 = element(by.css('alex cathy')); + let craig1 = element(by.css('alex craig')); + let carol1 = element(by.css('alex carol p')); + let carol2 = element(by.css('barry carol p')); + + it('"Cathy" should find "Alex" via the component class', function () { + expect(cathy1.getText()).toContain('Found Alex via the component'); + }); + + it('"Craig" should not find "Alex" via the base class', function () { + expect(craig1.getText()).toContain('Did not find Alex via the base'); + }); + + it('"Carol" within "Alex" should have "Alex" parent', function () { + expect(carol1.getText()).toContain('Alex'); + }); + + it('"Carol" within "Barry" should have "Barry" parent', function () { + expect(carol2.getText()).toContain('Barry'); + }); + }); +}); diff --git a/aio/content/examples/cb-dependency-injection/ts/example-config.json b/aio/content/examples/cb-dependency-injection/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/cb-dependency-injection/ts/plnkr.json b/aio/content/examples/cb-dependency-injection/ts/plnkr.json new file mode 100644 index 0000000000..ff0aedca01 --- /dev/null +++ b/aio/content/examples/cb-dependency-injection/ts/plnkr.json @@ -0,0 +1,10 @@ +{ + "description": "Dependency Injection", + "basePath": "src/", + "files":[ + "!**/*.d.ts", + "!**/*.js", + "!**/*.[1].*" + ], + "tags":["cookbook"] +} diff --git a/aio/content/examples/cb-dependency-injection/ts/plnkr.no-link.html b/aio/content/examples/cb-dependency-injection/ts/plnkr.no-link.html new file mode 100644 index 0000000000..cf460b3b95 --- /dev/null +++ b/aio/content/examples/cb-dependency-injection/ts/plnkr.no-link.html @@ -0,0 +1,989 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/cb-dependency-injection/ts/src/app/app-routing.module.ts b/aio/content/examples/cb-dependency-injection/ts/src/app/app-routing.module.ts new file mode 100644 index 0000000000..09a0592d00 --- /dev/null +++ b/aio/content/examples/cb-dependency-injection/ts/src/app/app-routing.module.ts @@ -0,0 +1,11 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +const routes: Routes = []; + +@NgModule({ + imports: [RouterModule.forRoot(routes)], + providers: [], + exports: [RouterModule] +}) +export class AppRoutingModule {} diff --git a/aio/content/examples/cb-dependency-injection/ts/src/app/app.component.html b/aio/content/examples/cb-dependency-injection/ts/src/app/app.component.html new file mode 100644 index 0000000000..a715e484fe --- /dev/null +++ b/aio/content/examples/cb-dependency-injection/ts/src/app/app.component.html @@ -0,0 +1,38 @@ +

    DI Cookbook

    +
    +

    Logged in user

    +
    Name: {{userContext.name}}
    +
    Role: {{userContext.role}}
    +
    + +
    +

    Hero Bios

    + +
    + + +
    +

    Hero Bios and Contacts

    +
    + +
    +
    + + +
    + +
    + +
    +

    Unsorted Heroes

    + +
    + +
    +

    Sorted Heroes

    + +
    + +
    + +
    diff --git a/aio/content/examples/cb-dependency-injection/ts/src/app/app.component.ts b/aio/content/examples/cb-dependency-injection/ts/src/app/app.component.ts new file mode 100644 index 0000000000..a3b938f7e5 --- /dev/null +++ b/aio/content/examples/cb-dependency-injection/ts/src/app/app.component.ts @@ -0,0 +1,30 @@ +// #docregion +import { Component } from '@angular/core'; + +// #docregion import-services +import { LoggerService } from './logger.service'; +import { UserContextService } from './user-context.service'; +import { UserService } from './user.service'; + +@Component({ + moduleId: module.id, + selector: 'my-app', + templateUrl: './app.component.html', +// #docregion providers + providers: [ LoggerService, UserContextService, UserService ] +// #enddocregion providers +}) +export class AppComponent { +// #enddocregion import-services + + private userId: number = 1; + + // #docregion ctor + constructor(logger: LoggerService, public userContext: UserContextService) { + userContext.loadUser(this.userId); + logger.logInfo('AppComponent initialized'); + } + // #enddocregion ctor +// #docregion import-services +} +// #enddocregion import-services diff --git a/aio/content/examples/cb-dependency-injection/ts/src/app/app.module.ts b/aio/content/examples/cb-dependency-injection/ts/src/app/app.module.ts new file mode 100644 index 0000000000..a240e21f7c --- /dev/null +++ b/aio/content/examples/cb-dependency-injection/ts/src/app/app.module.ts @@ -0,0 +1,74 @@ +// #docregion +import { BrowserModule } from '@angular/platform-browser'; +import { FormsModule } from '@angular/forms'; +import { HttpModule } from '@angular/http'; + +// import { AppRoutingModule } from './app-routing.module'; +import { LocationStrategy, + HashLocationStrategy } from '@angular/common'; +import { NgModule } from '@angular/core'; + +import { HeroData } from './hero-data'; +import { InMemoryWebApiModule } from 'angular-in-memory-web-api'; + + +import { AppComponent } from './app.component'; +import { HeroBioComponent } from './hero-bio.component'; +import { HeroBiosComponent, + HeroBiosAndContactsComponent } from './hero-bios.component'; +import { HeroOfTheMonthComponent } from './hero-of-the-month.component'; +import { HeroContactComponent } from './hero-contact.component'; +import { HeroesBaseComponent, + SortedHeroesComponent } from './sorted-heroes.component'; +import { HighlightDirective } from './highlight.directive'; +import { ParentFinderComponent, + AlexComponent, + AliceComponent, + CarolComponent, + ChrisComponent, + CraigComponent, + CathyComponent, + BarryComponent, + BethComponent, + BobComponent } from './parent-finder.component'; + +const declarations = [ + AppComponent, + HeroBiosComponent, HeroBiosAndContactsComponent, HeroBioComponent, + HeroesBaseComponent, SortedHeroesComponent, + HeroOfTheMonthComponent, HeroContactComponent, + HighlightDirective, + ParentFinderComponent, +]; + +const a_components = [AliceComponent, AlexComponent ]; + +const b_components = [ BarryComponent, BethComponent, BobComponent ]; + +const c_components = [ + CarolComponent, ChrisComponent, CraigComponent, + CathyComponent +]; + +@NgModule({ + imports: [ + BrowserModule, + FormsModule, + HttpModule, + InMemoryWebApiModule.forRoot(HeroData) + // AppRoutingModule TODO: add routes + ], + declarations: [ + declarations, + a_components, + b_components, + c_components, + ], + bootstrap: [ AppComponent ], + // #docregion providers + providers: [ + { provide: LocationStrategy, useClass: HashLocationStrategy } + ] + // #enddocregion providers +}) +export class AppModule { } diff --git a/aio/content/examples/cb-dependency-injection/ts/src/app/date-logger.service.ts b/aio/content/examples/cb-dependency-injection/ts/src/app/date-logger.service.ts new file mode 100644 index 0000000000..e5b597db02 --- /dev/null +++ b/aio/content/examples/cb-dependency-injection/ts/src/app/date-logger.service.ts @@ -0,0 +1,38 @@ +/* tslint:disable:one-line:check-open-brace*/ +// #docregion +import { Injectable } from '@angular/core'; + +import { LoggerService } from './logger.service'; + +// #docregion minimal-logger +// class used as a restricting interface (hides other public members) +export abstract class MinimalLogger { + logInfo: (msg: string) => void; + logs: string[]; +} +// #enddocregion minimal-logger + +/* +// Transpiles to: +// #docregion minimal-logger-transpiled + var MinimalLogger = (function () { + function MinimalLogger() {} + return MinimalLogger; + }()); + exports("MinimalLogger", MinimalLogger); +// #enddocregion minimal-logger-transpiled + */ + +// #docregion date-logger-service +@Injectable() +// #docregion date-logger-service-signature +export class DateLoggerService extends LoggerService implements MinimalLogger +// #enddocregion date-logger-service-signature +{ + logInfo(msg: any) { super.logInfo(stamp(msg)); } + logDebug(msg: any) { super.logInfo(stamp(msg)); } + logError(msg: any) { super.logError(stamp(msg)); } +} + +function stamp(msg: any) { return msg + ' at ' + new Date(); } +// #enddocregion date-logger-service diff --git a/aio/content/examples/cb-dependency-injection/ts/src/app/hero-bio.component.ts b/aio/content/examples/cb-dependency-injection/ts/src/app/hero-bio.component.ts new file mode 100644 index 0000000000..84f8e05e66 --- /dev/null +++ b/aio/content/examples/cb-dependency-injection/ts/src/app/hero-bio.component.ts @@ -0,0 +1,27 @@ +// #docregion +import { Component, Input, OnInit } from '@angular/core'; + +import { HeroCacheService } from './hero-cache.service'; + +// #docregion component +@Component({ + selector: 'hero-bio', + // #docregion template + template: ` +

    {{hero.name}}

    + + `, + // #enddocregion template + providers: [HeroCacheService] +}) + +export class HeroBioComponent implements OnInit { + @Input() heroId: number; + + constructor(private heroCache: HeroCacheService) { } + + ngOnInit() { this.heroCache.fetchCachedHero(this.heroId); } + + get hero() { return this.heroCache.hero; } +} +// #enddocregion component diff --git a/aio/content/examples/cb-dependency-injection/ts/src/app/hero-bios.component.ts b/aio/content/examples/cb-dependency-injection/ts/src/app/hero-bios.component.ts new file mode 100644 index 0000000000..217c5edcd0 --- /dev/null +++ b/aio/content/examples/cb-dependency-injection/ts/src/app/hero-bios.component.ts @@ -0,0 +1,48 @@ +// #docplaster +// #docregion +import { Component } from '@angular/core'; + +import { HeroService } from './hero.service'; +import { LoggerService } from './logger.service'; + +//////// HeroBiosComponent //// +// #docregion simple +@Component({ + selector: 'hero-bios', + template: ` + + + `, + providers: [HeroService] +}) +export class HeroBiosComponent { +// #enddocregion simple +// #docregion ctor + constructor(logger: LoggerService) { + logger.logInfo('Creating HeroBiosComponent'); + } +// #enddocregion ctor +// #docregion simple +} +// #enddocregion simple + +//////// HeroBiosAndContactsComponent //// +// #docregion hero-bios-and-contacts +@Component({ + selector: 'hero-bios-and-contacts', + // #docregion template + template: ` + + + `, + // #enddocregion template + // #docregion class-provider + providers: [HeroService] + // #enddocregion class-provider +}) +export class HeroBiosAndContactsComponent { + constructor(logger: LoggerService) { + logger.logInfo('Creating HeroBiosAndContactsComponent'); + } +} +// #enddocregion hero-bios-and-contacts diff --git a/aio/content/examples/cb-dependency-injection/ts/src/app/hero-cache.service.ts b/aio/content/examples/cb-dependency-injection/ts/src/app/hero-cache.service.ts new file mode 100644 index 0000000000..6dbc7a0c4f --- /dev/null +++ b/aio/content/examples/cb-dependency-injection/ts/src/app/hero-cache.service.ts @@ -0,0 +1,20 @@ +// #docregion +import { Injectable } from '@angular/core'; + +import { Hero } from './hero'; +import { HeroService } from './hero.service'; + +// #docregion service +@Injectable() +export class HeroCacheService { + hero: Hero; + constructor(private heroService: HeroService) {} + + fetchCachedHero(id: number) { + if (!this.hero) { + this.hero = this.heroService.getHeroById(id); + } + return this.hero; + } +} +// #enddocregion service diff --git a/aio/content/examples/cb-dependency-injection/ts/src/app/hero-contact.component.ts b/aio/content/examples/cb-dependency-injection/ts/src/app/hero-contact.component.ts new file mode 100644 index 0000000000..add6df91c5 --- /dev/null +++ b/aio/content/examples/cb-dependency-injection/ts/src/app/hero-contact.component.ts @@ -0,0 +1,40 @@ +// #docplaster +// #docregion +import { Component, Host, Optional } from '@angular/core'; + +import { HeroCacheService } from './hero-cache.service'; +import { LoggerService } from './logger.service'; + +// #docregion component +@Component({ + selector: 'hero-contact', + template: ` +
    Phone #: {{phoneNumber}} + !!!
    ` +}) +export class HeroContactComponent { + + hasLogger = false; + + constructor( + // #docregion ctor-params + @Host() // limit to the host component's instance of the HeroCacheService + private heroCache: HeroCacheService, + + @Host() // limit search for logger; hides the application-wide logger + @Optional() // ok if the logger doesn't exist + private loggerService: LoggerService + // #enddocregion ctor-params + ) { + if (loggerService) { + this.hasLogger = true; + loggerService.logInfo('HeroContactComponent can log!'); + } + // #docregion ctor + } + // #enddocregion ctor + + get phoneNumber() { return this.heroCache.hero.phone; } + +} +// #enddocregion component diff --git a/aio/content/examples/cb-dependency-injection/ts/src/app/hero-data.ts b/aio/content/examples/cb-dependency-injection/ts/src/app/hero-data.ts new file mode 100644 index 0000000000..10cdbcaab1 --- /dev/null +++ b/aio/content/examples/cb-dependency-injection/ts/src/app/hero-data.ts @@ -0,0 +1,14 @@ +// #docregion +import { Hero } from './hero'; + +export class HeroData { + createDb() { + let heroes = [ + new Hero(1, 'Windstorm'), + new Hero(2, 'Bombasto'), + new Hero(3, 'Magneta'), + new Hero(4, 'Tornado') + ]; + return {heroes}; + } +} diff --git a/aio/content/examples/cb-dependency-injection/ts/src/app/hero-of-the-month.component.ts b/aio/content/examples/cb-dependency-injection/ts/src/app/hero-of-the-month.component.ts new file mode 100644 index 0000000000..c5bafca36d --- /dev/null +++ b/aio/content/examples/cb-dependency-injection/ts/src/app/hero-of-the-month.component.ts @@ -0,0 +1,75 @@ +/* tslint:disable:one-line:check-open-brace*/ +// #docplaster +// #docregion opaque-token +import { OpaqueToken } from '@angular/core'; + +export const TITLE = new OpaqueToken('title'); +// #enddocregion opaque-token + +// #docregion hero-of-the-month +import { Component, Inject } from '@angular/core'; + +import { DateLoggerService, + MinimalLogger } from './date-logger.service'; +import { Hero } from './hero'; +import { HeroService } from './hero.service'; +import { LoggerService } from './logger.service'; +import { RUNNERS_UP, + runnersUpFactory } from './runners-up'; + +// #enddocregion hero-of-the-month +// #docregion some-hero +const someHero = new Hero(42, 'Magma', 'Had a great month!', '555-555-5555'); +// #enddocregion some-hero + +const template = ` +

    {{title}}

    +
    Winner: {{heroOfTheMonth.name}}
    +
    Reason for award: {{heroOfTheMonth.description}}
    +
    Runners-up: {{runnersUp}}
    + +

    Logs:

    +
    +
    {{log}}
    +
    + `; + +// #docregion hero-of-the-month +@Component({ + selector: 'hero-of-the-month', + template: template, + providers: [ + // #docregion use-value + { provide: Hero, useValue: someHero }, + // #docregion provide-opaque-token + { provide: TITLE, useValue: 'Hero of the Month' }, + // #enddocregion provide-opaque-token + // #enddocregion use-value + // #docregion use-class + { provide: HeroService, useClass: HeroService }, + { provide: LoggerService, useClass: DateLoggerService }, + // #enddocregion use-class + // #docregion use-existing + { provide: MinimalLogger, useExisting: LoggerService }, + // #enddocregion use-existing + // #docregion provide-opaque-token, use-factory + { provide: RUNNERS_UP, useFactory: runnersUpFactory(2), deps: [Hero, HeroService] } + // #enddocregion provide-opaque-token, use-factory + ] +}) +export class HeroOfTheMonthComponent { + logs: string[] = []; + +// #docregion ctor-signature + constructor( + logger: MinimalLogger, + public heroOfTheMonth: Hero, + @Inject(RUNNERS_UP) public runnersUp: string, + @Inject(TITLE) public title: string) +// #enddocregion ctor-signature + { + this.logs = logger.logs; + logger.logInfo('starting up'); + } +} +// #enddocregion hero-of-the-month diff --git a/aio/content/examples/cb-dependency-injection/ts/src/app/hero.service.ts b/aio/content/examples/cb-dependency-injection/ts/src/app/hero.service.ts new file mode 100644 index 0000000000..2063c30d7a --- /dev/null +++ b/aio/content/examples/cb-dependency-injection/ts/src/app/hero.service.ts @@ -0,0 +1,22 @@ +// #docregion +import { Injectable } from '@angular/core'; +import { Hero } from './hero'; + +@Injectable() +export class HeroService { + + // TODO move to database + private heroes: Array = [ + new Hero(1, 'RubberMan', 'Hero of many talents', '123-456-7899'), + new Hero(2, 'Magma', 'Hero of all trades', '555-555-5555'), + new Hero(3, 'Mr. Nice', 'The name says it all', '111-222-3333') + ]; + + getHeroById(id: number): Hero { + return this.heroes.find(hero => hero.id === id); + } + + getAllHeroes(): Array { + return this.heroes; + } +} diff --git a/aio/content/examples/cb-dependency-injection/ts/src/app/hero.ts b/aio/content/examples/cb-dependency-injection/ts/src/app/hero.ts new file mode 100644 index 0000000000..c17069e727 --- /dev/null +++ b/aio/content/examples/cb-dependency-injection/ts/src/app/hero.ts @@ -0,0 +1,9 @@ +// #docregion +export class Hero { + constructor( + public id: number, + public name: string, + public description?: string, + public phone?: string) { + } +} diff --git a/aio/content/examples/cb-dependency-injection/ts/src/app/highlight.directive.ts b/aio/content/examples/cb-dependency-injection/ts/src/app/highlight.directive.ts new file mode 100644 index 0000000000..e220114daa --- /dev/null +++ b/aio/content/examples/cb-dependency-injection/ts/src/app/highlight.directive.ts @@ -0,0 +1,29 @@ +// #docplaster +// #docregion +import { Directive, ElementRef, HostListener, Input } from '@angular/core'; + +@Directive({ + selector: '[myHighlight]' +}) +export class HighlightDirective { + + @Input('myHighlight') highlightColor: string; + + private el: HTMLElement; + + constructor(el: ElementRef) { + this.el = el.nativeElement; + } + + @HostListener('mouseenter') onMouseEnter() { + this.highlight(this.highlightColor || 'cyan'); + } + + @HostListener('mouseleave') onMouseLeave() { + this.highlight(null); + } + + private highlight(color: string) { + this.el.style.backgroundColor = color; + } +} diff --git a/aio/content/examples/cb-dependency-injection/ts/src/app/logger.service.ts b/aio/content/examples/cb-dependency-injection/ts/src/app/logger.service.ts new file mode 100644 index 0000000000..df8ee6b9c7 --- /dev/null +++ b/aio/content/examples/cb-dependency-injection/ts/src/app/logger.service.ts @@ -0,0 +1,16 @@ +// #docregion +import { Injectable } from '@angular/core'; + +@Injectable() +export class LoggerService { + logs: string[] = []; + + logInfo(msg: any) { this.log(`INFO: ${msg}`); } + logDebug(msg: any) { this.log(`DEBUG: ${msg}`); } + logError(msg: any) { this.log(`ERROR: ${msg}`, true); } + + private log(msg: any, isErr = false) { + this.logs.push(msg); + isErr ? console.error(msg) : console.log(msg); + } +} diff --git a/aio/content/examples/cb-dependency-injection/ts/src/app/parent-finder.component.ts b/aio/content/examples/cb-dependency-injection/ts/src/app/parent-finder.component.ts new file mode 100644 index 0000000000..c6f208f79b --- /dev/null +++ b/aio/content/examples/cb-dependency-injection/ts/src/app/parent-finder.component.ts @@ -0,0 +1,215 @@ +/* tslint:disable:no-unused-variable component-selector-name one-line check-open-brace */ +/* tslint:disable:*/ +// #docplaster +// #docregion +import { Component, forwardRef, Optional, SkipSelf } from '@angular/core'; + +// A component base class (see AlexComponent) +export abstract class Base { name = 'Count Basie'; } + +// Marker class, used as an interface +// #docregion parent +export abstract class Parent { name: string; } +// #enddocregion parent + +const DifferentParent = Parent; + +// #docregion provide-parent, provide-the-parent +// Helper method to provide the current component instance in the name of a `parentType`. +// #enddocregion provide-the-parent +// The `parentType` defaults to `Parent` when omitting the second parameter. +// #docregion provide-the-parent +const provideParent = +// #enddocregion provide-parent, provide-the-parent +// #docregion provide-parent + (component: any, parentType?: any) => { + return { provide: parentType || Parent, useExisting: forwardRef(() => component) }; + }; +// #enddocregion provide-parent + +// Simpler syntax version that always provides the component in the name of `Parent`. +const provideTheParent = +// #docregion provide-the-parent + (component: any) => { + return { provide: Parent, useExisting: forwardRef(() => component) }; + }; +// #enddocregion provide-the-parent + + +///////// C - Child ////////// +// #docregion carol +const templateC = ` +
    +

    {{name}}

    +

    My parent is {{parent?.name}}

    +
    `; + +@Component({ + selector: 'carol', + template: templateC +}) +// #docregion carol-class +export class CarolComponent { + name= 'Carol'; + // #docregion carol-ctor + constructor( @Optional() public parent: Parent ) { } + // #enddocregion carol-ctor +} +// #enddocregion carol-class +// #enddocregion carol + +@Component({ + selector: 'chris', + template: templateC +}) +export class ChrisComponent { + name= 'Chris'; + constructor( @Optional() public parent: Parent ) { } +} + +////// Craig /////////// +/** + * Show we cannot inject a parent by its base class. + */ +// #docregion craig +@Component({ + selector: 'craig', + template: ` +
    +

    Craig

    + {{alex ? 'Found' : 'Did not find'}} Alex via the base class. +
    ` +}) +export class CraigComponent { + constructor( @Optional() public alex: Base ) { } +} +// #enddocregion craig + +//////// B - Parent ///////// +// #docregion barry +const templateB = ` +
    +
    +

    {{name}}

    +

    My parent is {{parent?.name}}

    +
    + + +
    `; + +@Component({ + selector: 'barry', + template: templateB, + providers: [{ provide: Parent, useExisting: forwardRef(() => BarryComponent) }] +}) +export class BarryComponent implements Parent { + name = 'Barry'; +// #docregion barry-ctor + constructor( @SkipSelf() @Optional() public parent: Parent ) { } +// #enddocregion barry-ctor +} +// #enddocregion barry + +@Component({ + selector: 'bob', + template: templateB, + providers: [ provideParent(BobComponent) ] +}) +export class BobComponent implements Parent { + name= 'Bob'; + constructor( @SkipSelf() @Optional() public parent: Parent ) { } +} + +@Component({ + selector: 'beth', + template: templateB, +// #docregion beth-providers + providers: [ provideParent(BethComponent, DifferentParent) ] +// #enddocregion beth-providers +}) +export class BethComponent implements Parent { + name= 'Beth'; + constructor( @SkipSelf() @Optional() public parent: Parent ) { } +} + +///////// A - Grandparent ////// + +// #docregion alex, alex-1 +@Component({ + selector: 'alex', + template: ` +
    +

    {{name}}

    + + + +
    `, +// #enddocregion alex-1 +// #docregion alex-providers + providers: [{ provide: Parent, useExisting: forwardRef(() => AlexComponent) }], +// #enddocregion alex-providers +// #docregion alex-1 +}) +// #enddocregion alex-1 +// Todo: Add `... implements Parent` to class signature +// #docregion alex-1 +// #docregion alex-class-signature +export class AlexComponent extends Base +// #enddocregion alex-class-signature +{ + name= 'Alex'; +} +// #enddocregion alex, alex-1 + +///// + +// #docregion alice +@Component({ + selector: 'alice', + template: ` +
    +

    {{name}}

    + + + + +
    `, +// #docregion alice-providers + providers: [ provideParent(AliceComponent) ] +// #enddocregion alice-providers +}) +// #docregion alice-class-signature +export class AliceComponent implements Parent +// #enddocregion alice-class-signature +{ + name= 'Alice'; +} +// #enddocregion alice + +////// Cathy /////////// +/** + * Show we can inject a parent by component type + */ +// #docregion cathy +@Component({ + selector: 'cathy', + template: ` +
    +

    Cathy

    + {{alex ? 'Found' : 'Did not find'}} Alex via the component class.
    +
    ` +}) +export class CathyComponent { + constructor( @Optional() public alex: AlexComponent ) { } +} +// #enddocregion cathy + +///////// ParentFinder ////// +@Component({ + selector: 'parent-finder', + template: ` +

    Parent Finder

    + + ` +}) +export class ParentFinderComponent { } diff --git a/aio/content/examples/cb-dependency-injection/ts/src/app/runners-up.ts b/aio/content/examples/cb-dependency-injection/ts/src/app/runners-up.ts new file mode 100644 index 0000000000..6eb8b195d0 --- /dev/null +++ b/aio/content/examples/cb-dependency-injection/ts/src/app/runners-up.ts @@ -0,0 +1,26 @@ +// #docplaster +// #docregion +import { OpaqueToken } from '@angular/core'; + +import { Hero } from './hero'; +import { HeroService } from './hero.service'; + +// #docregion runners-up +export const RUNNERS_UP = new OpaqueToken('RunnersUp'); +// #enddocregion runners-up + +// #docregion factory-synopsis +export function runnersUpFactory(take: number) { + return (winner: Hero, heroService: HeroService): string => { + /* ... */ +// #enddocregion factory-synopsis + return heroService + .getAllHeroes() + .filter((hero) => hero.name !== winner.name) + .map(hero => hero.name) + .slice(0, Math.max(0, take)) + .join(', '); +// #docregion factory-synopsis + }; +}; +// #enddocregion factory-synopsis diff --git a/aio/content/examples/cb-dependency-injection/ts/src/app/sorted-heroes.component.ts b/aio/content/examples/cb-dependency-injection/ts/src/app/sorted-heroes.component.ts new file mode 100644 index 0000000000..8cb6e3c69c --- /dev/null +++ b/aio/content/examples/cb-dependency-injection/ts/src/app/sorted-heroes.component.ts @@ -0,0 +1,52 @@ +// #docplaster +// #docregion +import { Component, OnInit } from '@angular/core'; + +import { Hero } from './hero'; +import { HeroService } from './hero.service'; + +/////// HeroesBaseComponent ///// +// #docregion heroes-base, injection +@Component({ + selector: 'unsorted-heroes', + template: `
    {{hero.name}}
    `, + providers: [HeroService] +}) +export class HeroesBaseComponent implements OnInit { + constructor(private heroService: HeroService) { } +// #enddocregion injection + + heroes: Array; + + ngOnInit() { + this.heroes = this.heroService.getAllHeroes(); + this.afterGetHeroes(); + } + + // Post-process heroes in derived class override. + protected afterGetHeroes() {} + +// #docregion injection +} +// #enddocregion heroes-base,injection + +/////// SortedHeroesComponent ///// +// #docregion sorted-heroes +@Component({ + selector: 'sorted-heroes', + template: `
    {{hero.name}}
    `, + providers: [HeroService] +}) +export class SortedHeroesComponent extends HeroesBaseComponent { + constructor(heroService: HeroService) { + super(heroService); + } + + protected afterGetHeroes() { + this.heroes = this.heroes.sort((h1, h2) => { + return h1.name < h2.name ? -1 : + (h1.name > h2.name ? 1 : 0); + }); + } +} +// #enddocregion sorted-heroes diff --git a/aio/content/examples/cb-dependency-injection/ts/src/app/user-context.service.ts b/aio/content/examples/cb-dependency-injection/ts/src/app/user-context.service.ts new file mode 100644 index 0000000000..ed394fc734 --- /dev/null +++ b/aio/content/examples/cb-dependency-injection/ts/src/app/user-context.service.ts @@ -0,0 +1,33 @@ +// #docplaster +// #docregion +import { Injectable } from '@angular/core'; + +import { LoggerService } from './logger.service'; +import { UserService } from './user.service'; + +// #docregion injectables, injectable +@Injectable() +export class UserContextService { +// #enddocregion injectables, injectable + name: string; + role: string; + loggedInSince: Date; + + // #docregion ctor, injectables + constructor(private userService: UserService, private loggerService: LoggerService) { + // #enddocregion ctor, injectables + this.loggedInSince = new Date(); + // #docregion ctor, injectables + } + // #enddocregion ctor, injectables + + loadUser(userId: number) { + let user = this.userService.getUserById(userId); + this.name = user.name; + this.role = user.role; + + this.loggerService.logDebug('loaded User'); + } +// #docregion injectables, injectable +} +// #enddocregion injectables, injectable diff --git a/aio/content/examples/cb-dependency-injection/ts/src/app/user.service.ts b/aio/content/examples/cb-dependency-injection/ts/src/app/user.service.ts new file mode 100644 index 0000000000..c48b025a08 --- /dev/null +++ b/aio/content/examples/cb-dependency-injection/ts/src/app/user.service.ts @@ -0,0 +1,10 @@ +// #docregion +import { Injectable } from '@angular/core'; + +@Injectable() +export class UserService { + + getUserById(userId: number): any { + return {name: 'Bombasto', role: 'Admin'}; + } +} diff --git a/aio/content/examples/cb-dependency-injection/ts/src/index.html b/aio/content/examples/cb-dependency-injection/ts/src/index.html new file mode 100644 index 0000000000..0308c72155 --- /dev/null +++ b/aio/content/examples/cb-dependency-injection/ts/src/index.html @@ -0,0 +1,29 @@ + + + + + + Dependency Injection + + + + + + + + + + + + + + + + + + Loading app... + + + diff --git a/aio/content/examples/cb-dependency-injection/ts/src/main.ts b/aio/content/examples/cb-dependency-injection/ts/src/main.ts new file mode 100644 index 0000000000..6b6532d428 --- /dev/null +++ b/aio/content/examples/cb-dependency-injection/ts/src/main.ts @@ -0,0 +1,5 @@ +// #docregion +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/cb-dependency-injection/ts/src/sample.css b/aio/content/examples/cb-dependency-injection/ts/src/sample.css new file mode 100644 index 0000000000..a8b59efd05 --- /dev/null +++ b/aio/content/examples/cb-dependency-injection/ts/src/sample.css @@ -0,0 +1,26 @@ +.di-component{ + padding: 10px; + width:300px; + margin-bottom: 10px; +} +div[myHighlight] { + padding: 2px 8px; +} + +/* Parent Finder */ +.a, .b, .c { + margin: 6px 2px 6px; + padding: 4px 6px; +} +.a { + border: solid 2px black; +} +.b { + background: lightblue; + border: solid 1px darkblue; + display: flex; +} +.c { + background: pink; + border: solid 1px red; +} \ No newline at end of file diff --git a/aio/content/examples/cb-dynamic-component-loader/e2e-spec.ts b/aio/content/examples/cb-dynamic-component-loader/e2e-spec.ts new file mode 100644 index 0000000000..5036ac2a88 --- /dev/null +++ b/aio/content/examples/cb-dynamic-component-loader/e2e-spec.ts @@ -0,0 +1,21 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by } from 'protractor'; + +/* tslint:disable:quotemark */ +describe('Dynamic Component Loader', function () { + + beforeEach(function () { + browser.get(''); + }); + + it('should load ad banner', function () { + let headline = element(by.xpath("//h4[text()='Featured Hero Profile']")); + let name = element(by.xpath("//h3[text()='Bombasto']")); + let bio = element(by.xpath("//p[text()='Brave as they come']")); + + expect(name).toBeDefined(); + expect(headline).toBeDefined(); + expect(bio).toBeDefined(); + }); +}); diff --git a/aio/content/examples/cb-dynamic-component-loader/ts/example-config.json b/aio/content/examples/cb-dynamic-component-loader/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/cb-dynamic-component-loader/ts/src/app/ad-banner.component.ts b/aio/content/examples/cb-dynamic-component-loader/ts/src/app/ad-banner.component.ts new file mode 100644 index 0000000000..293d31dea9 --- /dev/null +++ b/aio/content/examples/cb-dynamic-component-loader/ts/src/app/ad-banner.component.ts @@ -0,0 +1,55 @@ +// #docregion +import { Component, Input, AfterViewInit, ViewChild, ComponentFactoryResolver, OnDestroy } from '@angular/core'; + +import { AdDirective } from './ad.directive'; +import { AdItem } from './ad-item'; +import { AdComponent } from './ad.component'; + +@Component({ + selector: 'add-banner', + // #docregion ad-host + template: ` +
    +

    Advertisements

    + +
    + ` + // #enddocregion ad-host +}) +export class AdBannerComponent implements AfterViewInit, OnDestroy { + @Input() ads: AdItem[]; + currentAddIndex: number = -1; + @ViewChild(AdDirective) adHost: AdDirective; + subscription: any; + interval: any; + + constructor(private _componentFactoryResolver: ComponentFactoryResolver) { } + + ngAfterViewInit() { + this.loadComponent(); + this.getAds(); + } + + ngOnDestroy() { + clearInterval(this.interval); + } + + loadComponent() { + this.currentAddIndex = (this.currentAddIndex + 1) % this.ads.length; + let adItem = this.ads[this.currentAddIndex]; + + let componentFactory = this._componentFactoryResolver.resolveComponentFactory(adItem.component); + + let viewContainerRef = this.adHost.viewContainerRef; + viewContainerRef.clear(); + + let componentRef = viewContainerRef.createComponent(componentFactory); + (componentRef.instance).data = adItem.data; + } + + getAds() { + this.interval = setInterval(() => { + this.loadComponent(); + }, 3000); + } +} diff --git a/aio/content/examples/cb-dynamic-component-loader/ts/src/app/ad-item.ts b/aio/content/examples/cb-dynamic-component-loader/ts/src/app/ad-item.ts new file mode 100644 index 0000000000..ef8ca70577 --- /dev/null +++ b/aio/content/examples/cb-dynamic-component-loader/ts/src/app/ad-item.ts @@ -0,0 +1,6 @@ +// #docregion +import { Type } from '@angular/core'; + +export class AdItem { + constructor(public component: Type, public data: any) {} +} diff --git a/aio/content/examples/cb-dynamic-component-loader/ts/src/app/ad.component.ts b/aio/content/examples/cb-dynamic-component-loader/ts/src/app/ad.component.ts new file mode 100644 index 0000000000..dee3b47953 --- /dev/null +++ b/aio/content/examples/cb-dynamic-component-loader/ts/src/app/ad.component.ts @@ -0,0 +1,4 @@ +// #docregion +export interface AdComponent { + data: any; +} diff --git a/aio/content/examples/cb-dynamic-component-loader/ts/src/app/ad.directive.ts b/aio/content/examples/cb-dynamic-component-loader/ts/src/app/ad.directive.ts new file mode 100644 index 0000000000..312e605228 --- /dev/null +++ b/aio/content/examples/cb-dynamic-component-loader/ts/src/app/ad.directive.ts @@ -0,0 +1,10 @@ +// #docregion +import { Directive, ViewContainerRef } from '@angular/core'; + +@Directive({ + selector: '[ad-host]', +}) +export class AdDirective { + constructor(public viewContainerRef: ViewContainerRef) { } +} + diff --git a/aio/content/examples/cb-dynamic-component-loader/ts/src/app/ad.service.ts b/aio/content/examples/cb-dynamic-component-loader/ts/src/app/ad.service.ts new file mode 100644 index 0000000000..91b0758771 --- /dev/null +++ b/aio/content/examples/cb-dynamic-component-loader/ts/src/app/ad.service.ts @@ -0,0 +1,23 @@ +// #docregion +import { Injectable } from '@angular/core'; + +import { HeroJobAdComponent } from './hero-job-ad.component'; +import { HeroProfileComponent } from './hero-profile.component'; +import { AdItem } from './ad-item'; + +@Injectable() +export class AdService { + getAds() { + return [ + new AdItem(HeroProfileComponent, {name: 'Bombasto', bio: 'Brave as they come'}), + + new AdItem(HeroProfileComponent, {name: 'Dr IQ', bio: 'Smart as they come'}), + + new AdItem(HeroJobAdComponent, {headline: 'Hiring for several positions', + body: 'Submit your resume today!'}), + + new AdItem(HeroJobAdComponent, {headline: 'Openings in all departments', + body: 'Apply today'}), + ]; + } +} diff --git a/aio/content/examples/cb-dynamic-component-loader/ts/src/app/app.component.ts b/aio/content/examples/cb-dynamic-component-loader/ts/src/app/app.component.ts new file mode 100644 index 0000000000..89359ccdf6 --- /dev/null +++ b/aio/content/examples/cb-dynamic-component-loader/ts/src/app/app.component.ts @@ -0,0 +1,24 @@ +// #docregion +import { Component, OnInit } from '@angular/core'; + +import { AdService } from './ad.service'; +import { AdItem } from './ad-item'; + +@Component({ + selector: 'my-app', + template: ` +
    + +
    + ` +}) +export class AppComponent implements OnInit { + ads: AdItem[]; + + constructor(private adService: AdService) {} + + ngOnInit() { + this.ads = this.adService.getAds(); + } +} + diff --git a/aio/content/examples/cb-dynamic-component-loader/ts/src/app/app.module.ts b/aio/content/examples/cb-dynamic-component-loader/ts/src/app/app.module.ts new file mode 100644 index 0000000000..a65d394709 --- /dev/null +++ b/aio/content/examples/cb-dynamic-component-loader/ts/src/app/app.module.ts @@ -0,0 +1,27 @@ +// #docregion +import { BrowserModule } from '@angular/platform-browser'; +import { NgModule } from '@angular/core'; +import { AppComponent } from './app.component'; +import { HeroJobAdComponent } from './hero-job-ad.component'; +import { AdBannerComponent } from './ad-banner.component'; +import { HeroProfileComponent } from './hero-profile.component'; +import { AdDirective } from './ad.directive'; +import { AdService } from './ad.service'; + +@NgModule({ + imports: [ BrowserModule ], + providers: [AdService], + declarations: [ AppComponent, + AdBannerComponent, + HeroJobAdComponent, + HeroProfileComponent, + AdDirective ], + // #docregion entry-components + entryComponents: [ HeroJobAdComponent, HeroProfileComponent ], + // #enddocregion entry-components + bootstrap: [ AppComponent ] +}) +export class AppModule { + constructor() {} +} + diff --git a/aio/content/examples/cb-dynamic-component-loader/ts/src/app/hero-job-ad.component.ts b/aio/content/examples/cb-dynamic-component-loader/ts/src/app/hero-job-ad.component.ts new file mode 100644 index 0000000000..675a03d0e0 --- /dev/null +++ b/aio/content/examples/cb-dynamic-component-loader/ts/src/app/hero-job-ad.component.ts @@ -0,0 +1,19 @@ +// #docregion +import { Component, Input } from '@angular/core'; + +import { AdComponent } from './ad.component'; + +@Component({ + template: ` +
    +

    {{data.headline}}

    + + {{data.body}} +
    + ` +}) +export class HeroJobAdComponent implements AdComponent { + @Input() data: any; + +} + diff --git a/aio/content/examples/cb-dynamic-component-loader/ts/src/app/hero-profile.component.ts b/aio/content/examples/cb-dynamic-component-loader/ts/src/app/hero-profile.component.ts new file mode 100644 index 0000000000..1c266db3c9 --- /dev/null +++ b/aio/content/examples/cb-dynamic-component-loader/ts/src/app/hero-profile.component.ts @@ -0,0 +1,22 @@ +// #docregion +import { Component, Input } from '@angular/core'; + +import { AdComponent } from './ad.component'; + +@Component({ + template: ` +
    +

    Featured Hero Profile

    +

    {{data.name}}

    + +

    {{data.bio}}

    + + Hire this hero today! +
    + ` +}) +export class HeroProfileComponent implements AdComponent { + @Input() data: any; +} + + diff --git a/aio/content/examples/cb-dynamic-component-loader/ts/src/index.html b/aio/content/examples/cb-dynamic-component-loader/ts/src/index.html new file mode 100644 index 0000000000..9239d91d9a --- /dev/null +++ b/aio/content/examples/cb-dynamic-component-loader/ts/src/index.html @@ -0,0 +1,26 @@ + + + + + + Dynamic Component Loader + + + + + + + + + + + + + + + Loading app... + + + diff --git a/aio/content/examples/cb-dynamic-component-loader/ts/src/main.ts b/aio/content/examples/cb-dynamic-component-loader/ts/src/main.ts new file mode 100644 index 0000000000..53d16fa43a --- /dev/null +++ b/aio/content/examples/cb-dynamic-component-loader/ts/src/main.ts @@ -0,0 +1,6 @@ +// #docregion +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); + diff --git a/aio/content/examples/cb-dynamic-component-loader/ts/src/sample.css b/aio/content/examples/cb-dynamic-component-loader/ts/src/sample.css new file mode 100644 index 0000000000..7a2ca1f2dc --- /dev/null +++ b/aio/content/examples/cb-dynamic-component-loader/ts/src/sample.css @@ -0,0 +1,23 @@ +.hero-profile { + border: 1px solid gray; + padding: 5px; + padding-bottom: 20px; + padding-left: 20px; + border-radius: 10px; + background-color: lightgreen; + color: black; +} + +.job-ad { + border: 1px solid gray; + padding: 5px; + padding-bottom: 20px; + padding-left: 20px; + border-radius: 10px; + background-color: lightblue; + color: black; +} + +.ad-banner { + width: 400px; +} \ No newline at end of file diff --git a/aio/content/examples/cb-dynamic-form/e2e-spec.ts b/aio/content/examples/cb-dynamic-form/e2e-spec.ts new file mode 100644 index 0000000000..408ac75766 --- /dev/null +++ b/aio/content/examples/cb-dynamic-form/e2e-spec.ts @@ -0,0 +1,29 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by } from 'protractor'; + +/* tslint:disable:quotemark */ +describe('Dynamic Form', function () { + + beforeAll(function () { + browser.get(''); + }); + + it('should submit form', function () { + let firstNameElement = element.all(by.css('input[id=firstName]')).get(0); + expect(firstNameElement.getAttribute('value')).toEqual('Bombasto'); + + let emailElement = element.all(by.css('input[id=emailAddress]')).get(0); + let email = 'test@test.com'; + emailElement.sendKeys(email); + expect(emailElement.getAttribute('value')).toEqual(email); + + element(by.css('select option[value="solid"]')).click(); + + let saveButton = element.all(by.css('button')).get(0); + saveButton.click().then(function(){ + expect(element(by.xpath("//strong[contains(text(),'Saved the following values')]")).isPresent()).toBe(true); + }); + }); + +}); diff --git a/aio/content/examples/cb-dynamic-form/ts/example-config.json b/aio/content/examples/cb-dynamic-form/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/cb-dynamic-form/ts/plnkr.json b/aio/content/examples/cb-dynamic-form/ts/plnkr.json new file mode 100644 index 0000000000..1f50b4a992 --- /dev/null +++ b/aio/content/examples/cb-dynamic-form/ts/plnkr.json @@ -0,0 +1,10 @@ +{ + "description": "Dynamic Form", + "basePath": "src/", + "files":[ + "!**/*.d.ts", + "!**/*.js", + "!**/*.[1].*" + ], + "tags":["cookbook"] +} diff --git a/aio/content/examples/cb-dynamic-form/ts/plnkr.no-link.html b/aio/content/examples/cb-dynamic-form/ts/plnkr.no-link.html new file mode 100644 index 0000000000..93370216ad --- /dev/null +++ b/aio/content/examples/cb-dynamic-form/ts/plnkr.no-link.html @@ -0,0 +1,463 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/cb-dynamic-form/ts/src/app/app.component.ts b/aio/content/examples/cb-dynamic-form/ts/src/app/app.component.ts new file mode 100644 index 0000000000..582daced2e --- /dev/null +++ b/aio/content/examples/cb-dynamic-form/ts/src/app/app.component.ts @@ -0,0 +1,22 @@ +// #docregion +import { Component } from '@angular/core'; + +import { QuestionService } from './question.service'; + +@Component({ + selector: 'my-app', + template: ` +
    +

    Job Application for Heroes

    + +
    + `, + providers: [QuestionService] +}) +export class AppComponent { + questions: any[]; + + constructor(service: QuestionService) { + this.questions = service.getQuestions(); + } +} diff --git a/aio/content/examples/cb-dynamic-form/ts/src/app/app.module.ts b/aio/content/examples/cb-dynamic-form/ts/src/app/app.module.ts new file mode 100644 index 0000000000..7a68e45a92 --- /dev/null +++ b/aio/content/examples/cb-dynamic-form/ts/src/app/app.module.ts @@ -0,0 +1,18 @@ +// #docregion +import { BrowserModule } from '@angular/platform-browser'; +import { ReactiveFormsModule } from '@angular/forms'; +import { NgModule } from '@angular/core'; + +import { AppComponent } from './app.component'; +import { DynamicFormComponent } from './dynamic-form.component'; +import { DynamicFormQuestionComponent } from './dynamic-form-question.component'; + +@NgModule({ + imports: [ BrowserModule, ReactiveFormsModule ], + declarations: [ AppComponent, DynamicFormComponent, DynamicFormQuestionComponent ], + bootstrap: [ AppComponent ] +}) +export class AppModule { + constructor() { + } +} diff --git a/aio/content/examples/cb-dynamic-form/ts/src/app/dynamic-form-question.component.html b/aio/content/examples/cb-dynamic-form/ts/src/app/dynamic-form-question.component.html new file mode 100644 index 0000000000..9f1b8cd4a6 --- /dev/null +++ b/aio/content/examples/cb-dynamic-form/ts/src/app/dynamic-form-question.component.html @@ -0,0 +1,17 @@ + +
    + + +
    + + + + + +
    + +
    {{question.label}} is required
    +
    diff --git a/aio/content/examples/cb-dynamic-form/ts/src/app/dynamic-form-question.component.ts b/aio/content/examples/cb-dynamic-form/ts/src/app/dynamic-form-question.component.ts new file mode 100644 index 0000000000..24d0bd168b --- /dev/null +++ b/aio/content/examples/cb-dynamic-form/ts/src/app/dynamic-form-question.component.ts @@ -0,0 +1,16 @@ +// #docregion +import { Component, Input } from '@angular/core'; +import { FormGroup } from '@angular/forms'; + +import { QuestionBase } from './question-base'; + +@Component({ + moduleId: module.id, + selector: 'df-question', + templateUrl: './dynamic-form-question.component.html' +}) +export class DynamicFormQuestionComponent { + @Input() question: QuestionBase; + @Input() form: FormGroup; + get isValid() { return this.form.controls[this.question.key].valid; } +} diff --git a/aio/content/examples/cb-dynamic-form/ts/src/app/dynamic-form.component.html b/aio/content/examples/cb-dynamic-form/ts/src/app/dynamic-form.component.html new file mode 100644 index 0000000000..717f09ff71 --- /dev/null +++ b/aio/content/examples/cb-dynamic-form/ts/src/app/dynamic-form.component.html @@ -0,0 +1,17 @@ + +
    +
    + +
    + +
    + +
    + +
    +
    + +
    + Saved the following values
    {{payLoad}} +
    +
    diff --git a/aio/content/examples/cb-dynamic-form/ts/src/app/dynamic-form.component.ts b/aio/content/examples/cb-dynamic-form/ts/src/app/dynamic-form.component.ts new file mode 100644 index 0000000000..32aaf73114 --- /dev/null +++ b/aio/content/examples/cb-dynamic-form/ts/src/app/dynamic-form.component.ts @@ -0,0 +1,29 @@ +// #docregion +import { Component, Input, OnInit } from '@angular/core'; +import { FormGroup } from '@angular/forms'; + +import { QuestionBase } from './question-base'; +import { QuestionControlService } from './question-control.service'; + +@Component({ + moduleId: module.id, + selector: 'dynamic-form', + templateUrl: './dynamic-form.component.html', + providers: [ QuestionControlService ] +}) +export class DynamicFormComponent implements OnInit { + + @Input() questions: QuestionBase[] = []; + form: FormGroup; + payLoad = ''; + + constructor(private qcs: QuestionControlService) { } + + ngOnInit() { + this.form = this.qcs.toFormGroup(this.questions); + } + + onSubmit() { + this.payLoad = JSON.stringify(this.form.value); + } +} diff --git a/aio/content/examples/cb-dynamic-form/ts/src/app/question-base.ts b/aio/content/examples/cb-dynamic-form/ts/src/app/question-base.ts new file mode 100644 index 0000000000..2b32b00f2a --- /dev/null +++ b/aio/content/examples/cb-dynamic-form/ts/src/app/question-base.ts @@ -0,0 +1,25 @@ +// #docregion +export class QuestionBase{ + value: T; + key: string; + label: string; + required: boolean; + order: number; + controlType: string; + + constructor(options: { + value?: T, + key?: string, + label?: string, + required?: boolean, + order?: number, + controlType?: string + } = {}) { + this.value = options.value; + this.key = options.key || ''; + this.label = options.label || ''; + this.required = !!options.required; + this.order = options.order === undefined ? 1 : options.order; + this.controlType = options.controlType || ''; + } +} diff --git a/aio/content/examples/cb-dynamic-form/ts/src/app/question-control.service.ts b/aio/content/examples/cb-dynamic-form/ts/src/app/question-control.service.ts new file mode 100644 index 0000000000..1378ba8490 --- /dev/null +++ b/aio/content/examples/cb-dynamic-form/ts/src/app/question-control.service.ts @@ -0,0 +1,20 @@ +// #docregion +import { Injectable } from '@angular/core'; +import { FormControl, FormGroup, Validators } from '@angular/forms'; + +import { QuestionBase } from './question-base'; + +@Injectable() +export class QuestionControlService { + constructor() { } + + toFormGroup(questions: QuestionBase[] ) { + let group: any = {}; + + questions.forEach(question => { + group[question.key] = question.required ? new FormControl(question.value || '', Validators.required) + : new FormControl(question.value || ''); + }); + return new FormGroup(group); + } +} diff --git a/aio/content/examples/cb-dynamic-form/ts/src/app/question-dropdown.ts b/aio/content/examples/cb-dynamic-form/ts/src/app/question-dropdown.ts new file mode 100644 index 0000000000..35a9074c74 --- /dev/null +++ b/aio/content/examples/cb-dynamic-form/ts/src/app/question-dropdown.ts @@ -0,0 +1,12 @@ +// #docregion +import { QuestionBase } from './question-base'; + +export class DropdownQuestion extends QuestionBase { + controlType = 'dropdown'; + options: {key: string, value: string}[] = []; + + constructor(options: {} = {}) { + super(options); + this.options = options['options'] || []; + } +} diff --git a/aio/content/examples/cb-dynamic-form/ts/src/app/question-textbox.ts b/aio/content/examples/cb-dynamic-form/ts/src/app/question-textbox.ts new file mode 100644 index 0000000000..aaa7edf267 --- /dev/null +++ b/aio/content/examples/cb-dynamic-form/ts/src/app/question-textbox.ts @@ -0,0 +1,12 @@ +// #docregion +import { QuestionBase } from './question-base'; + +export class TextboxQuestion extends QuestionBase { + controlType = 'textbox'; + type: string; + + constructor(options: {} = {}) { + super(options); + this.type = options['type'] || ''; + } +} diff --git a/aio/content/examples/cb-dynamic-form/ts/src/app/question.service.ts b/aio/content/examples/cb-dynamic-form/ts/src/app/question.service.ts new file mode 100644 index 0000000000..bb452cf5e6 --- /dev/null +++ b/aio/content/examples/cb-dynamic-form/ts/src/app/question.service.ts @@ -0,0 +1,47 @@ +// #docregion +import { Injectable } from '@angular/core'; + +import { DropdownQuestion } from './question-dropdown'; +import { QuestionBase } from './question-base'; +import { TextboxQuestion } from './question-textbox'; + +@Injectable() +export class QuestionService { + + // Todo: get from a remote source of question metadata + // Todo: make asynchronous + getQuestions() { + + let questions: QuestionBase[] = [ + + new DropdownQuestion({ + key: 'brave', + label: 'Bravery Rating', + options: [ + {key: 'solid', value: 'Solid'}, + {key: 'great', value: 'Great'}, + {key: 'good', value: 'Good'}, + {key: 'unproven', value: 'Unproven'} + ], + order: 3 + }), + + new TextboxQuestion({ + key: 'firstName', + label: 'First name', + value: 'Bombasto', + required: true, + order: 1 + }), + + new TextboxQuestion({ + key: 'emailAddress', + label: 'Email', + type: 'email', + order: 2 + }) + ]; + + return questions.sort((a, b) => a.order - b.order); + } +} diff --git a/aio/content/examples/cb-dynamic-form/ts/src/index.html b/aio/content/examples/cb-dynamic-form/ts/src/index.html new file mode 100644 index 0000000000..01963f71e2 --- /dev/null +++ b/aio/content/examples/cb-dynamic-form/ts/src/index.html @@ -0,0 +1,28 @@ + + + + + + Dynamic Form + + + + + + + + + + + + + + + + + Loading app... + + + diff --git a/aio/content/examples/cb-dynamic-form/ts/src/main.ts b/aio/content/examples/cb-dynamic-form/ts/src/main.ts new file mode 100644 index 0000000000..6b6532d428 --- /dev/null +++ b/aio/content/examples/cb-dynamic-form/ts/src/main.ts @@ -0,0 +1,5 @@ +// #docregion +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/cb-dynamic-form/ts/src/sample.css b/aio/content/examples/cb-dynamic-form/ts/src/sample.css new file mode 100644 index 0000000000..fe2cc28481 --- /dev/null +++ b/aio/content/examples/cb-dynamic-form/ts/src/sample.css @@ -0,0 +1,7 @@ +.errorMessage{ + color:red; +} + +.form-row{ + margin-top: 10px; +} \ No newline at end of file diff --git a/aio/content/examples/cb-form-validation/e2e-spec.ts b/aio/content/examples/cb-form-validation/e2e-spec.ts new file mode 100644 index 0000000000..8ffc01e250 --- /dev/null +++ b/aio/content/examples/cb-form-validation/e2e-spec.ts @@ -0,0 +1,182 @@ +'use strict'; // necessary for node! + +import { browser, element, by, protractor, ElementFinder, ElementArrayFinder } from 'protractor'; +import { appLang, describeIf } from '../protractor-helpers'; + +// THESE TESTS ARE INCOMPLETE +describeIf(appLang.appIsTs || appLang.appIsJs, 'Form Validation Tests', function () { + + beforeAll(function () { + browser.get(''); + }); + + describe('Hero Form 1', () => { + beforeAll(() => { + getPage('hero-form-template1'); + }); + + tests(); + }); + + describe('Hero Form 2', () => { + beforeAll(() => { + getPage('hero-form-template2'); + }); + + tests(); + bobTests(); + }); + + describe('Hero Form 3 (Reactive)', () => { + beforeAll(() => { + getPage('hero-form-reactive3'); + makeNameTooLong(); + }); + + tests(); + bobTests(); + }); +}); + +////////// + +const testName = 'Test Name'; + +let page: { + section: ElementFinder, + form: ElementFinder, + title: ElementFinder, + nameInput: ElementFinder, + alterEgoInput: ElementFinder, + powerSelect: ElementFinder, + errorMessages: ElementArrayFinder, + heroFormButtons: ElementArrayFinder, + heroSubmitted: ElementFinder +}; + +function getPage(sectionTag: string) { + let section = element(by.css(sectionTag)); + let buttons = section.all(by.css('button')); + + page = { + section: section, + form: section.element(by.css('form')), + title: section.element(by.css('h1')), + nameInput: section.element(by.css('#name')), + alterEgoInput: section.element(by.css('#alterEgo')), + powerSelect: section.element(by.css('#power')), + errorMessages: section.all(by.css('div.alert')), + heroFormButtons: buttons, + heroSubmitted: section.element(by.css('hero-submitted > div')) + }; +} + +function tests() { + it('should display correct title', function () { + expect(page.title.getText()).toContain('Hero Form'); + }); + + it('should not display submitted message before submit', function () { + expect(page.heroSubmitted.isElementPresent(by.css('h2'))).toBe(false); + }); + + it('should have form buttons', function () { + expect(page.heroFormButtons.count()).toEqual(2); + }); + + it('should have error at start', function () { + expectFormIsInvalid(); + }); + + // it('showForm', function () { + // page.form.getInnerHtml().then(html => console.log(html)); + // }); + + it('should have disabled submit button', function () { + expect(page.heroFormButtons.get(0).isEnabled()).toBe(false); + }); + + it('resetting name to valid name should clear errors', function () { + const ele = page.nameInput; + expect(ele.isPresent()).toBe(true, 'nameInput should exist'); + ele.clear(); + ele.sendKeys(testName); + expectFormIsValid(); + }); + + it('should produce "required" error after clearing name', function () { + page.nameInput.clear(); + // page.alterEgoInput.click(); // to blur ... didn't work + page.nameInput.sendKeys('x', protractor.Key.BACK_SPACE); // ugh! + expect(page.form.getAttribute('class')).toMatch('ng-invalid'); + expect(page.errorMessages.get(0).getText()).toContain('required'); + }); + + it('should produce "at least 4 characters" error when name="x"', function () { + page.nameInput.clear(); + page.nameInput.sendKeys('x'); // too short + expectFormIsInvalid(); + expect(page.errorMessages.get(0).getText()).toContain('at least 4 characters'); + }); + + it('resetting name to valid name again should clear errors', function () { + page.nameInput.sendKeys(testName); + expectFormIsValid(); + }); + + it('should have enabled submit button', function () { + const submitBtn = page.heroFormButtons.get(0); + expect(submitBtn.isEnabled()).toBe(true); + }); + + it('should hide form after submit', function () { + page.heroFormButtons.get(0).click(); + expect(page.title.isDisplayed()).toBe(false); + }); + + it('submitted form should be displayed', function () { + expect(page.heroSubmitted.isElementPresent(by.css('h2'))).toBe(true); + }); + + it('submitted form should have new hero name', function () { + expect(page.heroSubmitted.getText()).toContain(testName); + }); + + it('clicking edit button should reveal form again', function () { + const editBtn = page.heroSubmitted.element(by.css('button')); + editBtn.click(); + expect(page.heroSubmitted.isElementPresent(by.css('h2'))) + .toBe(false, 'submitted hidden again'); + expect(page.title.isDisplayed()).toBe(true, 'can see form title'); + }); +} + +function expectFormIsValid() { + expect(page.form.getAttribute('class')).toMatch('ng-valid'); +} + +function expectFormIsInvalid() { + expect(page.form.getAttribute('class')).toMatch('ng-invalid'); +} + +function bobTests() { + const emsg = 'Someone named "Bob" cannot be a hero.'; + + it('should produce "no bob" error after setting name to "Bobby"', function () { + page.nameInput.clear(); + page.nameInput.sendKeys('Bobby'); + expectFormIsInvalid(); + expect(page.errorMessages.get(0).getText()).toBe(emsg); + }); + + it('should be ok again with valid name', function () { + page.nameInput.clear(); + page.nameInput.sendKeys(testName); + expectFormIsValid(); + }); +} + +function makeNameTooLong() { + // make the first name invalid + page.nameInput.sendKeys('ThisHeroNameHasWayWayTooManyLetters'); +} diff --git a/aio/content/examples/cb-form-validation/ts/example-config.json b/aio/content/examples/cb-form-validation/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/cb-form-validation/ts/plnkr.json b/aio/content/examples/cb-form-validation/ts/plnkr.json new file mode 100644 index 0000000000..c5656d77f7 --- /dev/null +++ b/aio/content/examples/cb-form-validation/ts/plnkr.json @@ -0,0 +1,8 @@ +{ + "description": "Validation", + "basePath": "src/", + "files":[ + "!**/*.d.ts", + "!**/*.js" + ] +} diff --git a/aio/content/examples/cb-form-validation/ts/plnkr.no-link.html b/aio/content/examples/cb-form-validation/ts/plnkr.no-link.html new file mode 100644 index 0000000000..626da53295 --- /dev/null +++ b/aio/content/examples/cb-form-validation/ts/plnkr.no-link.html @@ -0,0 +1,768 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/cb-form-validation/ts/src/app/app.component.ts b/aio/content/examples/cb-form-validation/ts/src/app/app.component.ts new file mode 100644 index 0000000000..2da4dc4d0a --- /dev/null +++ b/aio/content/examples/cb-form-validation/ts/src/app/app.component.ts @@ -0,0 +1,12 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'my-app', + template: ` +
    + +
    + ` +}) +export class AppComponent { } diff --git a/aio/content/examples/cb-form-validation/ts/src/app/app.module.ts b/aio/content/examples/cb-form-validation/ts/src/app/app.module.ts new file mode 100644 index 0000000000..72b4e3a770 --- /dev/null +++ b/aio/content/examples/cb-form-validation/ts/src/app/app.module.ts @@ -0,0 +1,18 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; + +import { AppComponent } from './app.component'; +import { HeroFormTemplateModule } from './template/hero-form-template.module'; +import { HeroFormReactiveModule } from './reactive/hero-form-reactive.module'; + +@NgModule({ + imports: [ + BrowserModule, + HeroFormTemplateModule, + HeroFormReactiveModule + ], + declarations: [ AppComponent ], + bootstrap: [ AppComponent ] +}) +export class AppModule { } diff --git a/aio/content/examples/cb-form-validation/ts/src/app/reactive/hero-form-reactive.component.html b/aio/content/examples/cb-form-validation/ts/src/app/reactive/hero-form-reactive.component.html new file mode 100644 index 0000000000..149537bd3e --- /dev/null +++ b/aio/content/examples/cb-form-validation/ts/src/app/reactive/hero-form-reactive.component.html @@ -0,0 +1,47 @@ + +
    +
    +

    Hero Form 3 (Reactive)

    + +
    + +
    + + + + + +
    + {{ formErrors.name }} +
    + +
    + +
    + + +
    + +
    + + + +
    + {{ formErrors.power }} +
    +
    + + + +
    +
    + + +
    diff --git a/aio/content/examples/cb-form-validation/ts/src/app/reactive/hero-form-reactive.component.ts b/aio/content/examples/cb-form-validation/ts/src/app/reactive/hero-form-reactive.component.ts new file mode 100644 index 0000000000..4bbefadb96 --- /dev/null +++ b/aio/content/examples/cb-form-validation/ts/src/app/reactive/hero-form-reactive.component.ts @@ -0,0 +1,117 @@ +/* tslint:disable: member-ordering forin */ +// #docplaster +// #docregion +import { Component, OnInit } from '@angular/core'; +import { FormGroup, FormBuilder, Validators } from '@angular/forms'; + +import { Hero } from '../shared/hero'; +import { forbiddenNameValidator } from '../shared/forbidden-name.directive'; + +@Component({ + moduleId: module.id, + selector: 'hero-form-reactive3', + templateUrl: './hero-form-reactive.component.html' +}) +export class HeroFormReactiveComponent implements OnInit { + + powers = ['Really Smart', 'Super Flexible', 'Weather Changer']; + + hero = new Hero(18, 'Dr. WhatIsHisName', this.powers[0], 'Dr. What'); + + submitted = false; + + // #docregion on-submit + onSubmit() { + this.submitted = true; + this.hero = this.heroForm.value; + } + // #enddocregion on-submit +// #enddocregion + + // Reset the form with a new hero AND restore 'pristine' class state + // by toggling 'active' flag which causes the form + // to be removed/re-added in a tick via NgIf + // TODO: Workaround until NgForm has a reset method (#6822) + active = true; +// #docregion class + // #docregion add-hero + addHero() { + this.hero = new Hero(42, '', ''); + this.buildForm(); + // #enddocregion add-hero +// #enddocregion class + + this.active = false; + setTimeout(() => this.active = true, 0); +// #docregion + // #docregion add-hero + } + // #enddocregion add-hero + + // #docregion form-builder + heroForm: FormGroup; + constructor(private fb: FormBuilder) { } + + ngOnInit(): void { + this.buildForm(); + } + + buildForm(): void { + this.heroForm = this.fb.group({ + // #docregion name-validators + 'name': [this.hero.name, [ + Validators.required, + Validators.minLength(4), + Validators.maxLength(24), + forbiddenNameValidator(/bob/i) + ] + ], + // #enddocregion name-validators + 'alterEgo': [this.hero.alterEgo], + 'power': [this.hero.power, Validators.required] + }); + + this.heroForm.valueChanges + .subscribe(data => this.onValueChanged(data)); + + this.onValueChanged(); // (re)set validation messages now + } + + // #enddocregion form-builder + + onValueChanged(data?: any) { + if (!this.heroForm) { return; } + const form = this.heroForm; + + for (const field in this.formErrors) { + // clear previous error message (if any) + this.formErrors[field] = ''; + const control = form.get(field); + + if (control && control.dirty && !control.valid) { + const messages = this.validationMessages[field]; + for (const key in control.errors) { + this.formErrors[field] += messages[key] + ' '; + } + } + } + } + + formErrors = { + 'name': '', + 'power': '' + }; + + validationMessages = { + 'name': { + 'required': 'Name is required.', + 'minlength': 'Name must be at least 4 characters long.', + 'maxlength': 'Name cannot be more than 24 characters long.', + 'forbiddenName': 'Someone named "Bob" cannot be a hero.' + }, + 'power': { + 'required': 'Power is required.' + } + }; +} +// #enddocregion diff --git a/aio/content/examples/cb-form-validation/ts/src/app/reactive/hero-form-reactive.module.ts b/aio/content/examples/cb-form-validation/ts/src/app/reactive/hero-form-reactive.module.ts new file mode 100644 index 0000000000..6ff9265e92 --- /dev/null +++ b/aio/content/examples/cb-form-validation/ts/src/app/reactive/hero-form-reactive.module.ts @@ -0,0 +1,13 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { ReactiveFormsModule } from '@angular/forms'; + +import { SharedModule } from '../shared/shared.module'; +import { HeroFormReactiveComponent } from './hero-form-reactive.component'; + +@NgModule({ + imports: [ SharedModule, ReactiveFormsModule ], + declarations: [ HeroFormReactiveComponent ], + exports: [ HeroFormReactiveComponent ] +}) +export class HeroFormReactiveModule { } diff --git a/aio/content/examples/cb-form-validation/ts/src/app/shared/forbidden-name.directive.ts b/aio/content/examples/cb-form-validation/ts/src/app/shared/forbidden-name.directive.ts new file mode 100644 index 0000000000..870f514842 --- /dev/null +++ b/aio/content/examples/cb-form-validation/ts/src/app/shared/forbidden-name.directive.ts @@ -0,0 +1,43 @@ +// #docregion +import { Directive, Input, OnChanges, SimpleChanges } from '@angular/core'; +import { AbstractControl, NG_VALIDATORS, Validator, ValidatorFn, Validators } from '@angular/forms'; + +// #docregion custom-validator +/** A hero's name can't match the given regular expression */ +export function forbiddenNameValidator(nameRe: RegExp): ValidatorFn { + return (control: AbstractControl): {[key: string]: any} => { + const name = control.value; + const no = nameRe.test(name); + return no ? {'forbiddenName': {name}} : null; + }; +} +// #enddocregion custom-validator + +// #docregion directive +@Directive({ + selector: '[forbiddenName]', + // #docregion directive-providers + providers: [{provide: NG_VALIDATORS, useExisting: ForbiddenValidatorDirective, multi: true}] + // #enddocregion directive-providers +}) +export class ForbiddenValidatorDirective implements Validator, OnChanges { + @Input() forbiddenName: string; + private valFn = Validators.nullValidator; + + ngOnChanges(changes: SimpleChanges): void { + const change = changes['forbiddenName']; + if (change) { + const val: string | RegExp = change.currentValue; + const re = val instanceof RegExp ? val : new RegExp(val, 'i'); + this.valFn = forbiddenNameValidator(re); + } else { + this.valFn = Validators.nullValidator; + } + } + + validate(control: AbstractControl): {[key: string]: any} { + return this.valFn(control); + } +} +// #enddocregion directive + diff --git a/aio/content/examples/cb-form-validation/ts/src/app/shared/hero.ts b/aio/content/examples/cb-form-validation/ts/src/app/shared/hero.ts new file mode 100644 index 0000000000..fe2b55e51a --- /dev/null +++ b/aio/content/examples/cb-form-validation/ts/src/app/shared/hero.ts @@ -0,0 +1,9 @@ +// #docregion +export class Hero { + constructor( + public id: number, + public name: string, + public power: string, + public alterEgo?: string + ) { } +} diff --git a/aio/content/examples/cb-form-validation/ts/src/app/shared/shared.module.ts b/aio/content/examples/cb-form-validation/ts/src/app/shared/shared.module.ts new file mode 100644 index 0000000000..2b0ada59bd --- /dev/null +++ b/aio/content/examples/cb-form-validation/ts/src/app/shared/shared.module.ts @@ -0,0 +1,14 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +import { ForbiddenValidatorDirective } from './forbidden-name.directive'; +import { SubmittedComponent } from './submitted.component'; + +@NgModule({ + imports: [ CommonModule], + declarations: [ ForbiddenValidatorDirective, SubmittedComponent ], + exports: [ ForbiddenValidatorDirective, SubmittedComponent, + CommonModule ] +}) +export class SharedModule { } diff --git a/aio/content/examples/cb-form-validation/ts/src/app/shared/submitted.component.ts b/aio/content/examples/cb-form-validation/ts/src/app/shared/submitted.component.ts new file mode 100644 index 0000000000..18cea6563f --- /dev/null +++ b/aio/content/examples/cb-form-validation/ts/src/app/shared/submitted.component.ts @@ -0,0 +1,32 @@ +// #docregion +import { Component, EventEmitter, Input, Output } from '@angular/core'; + +import { Hero } from './hero'; + +@Component({ + selector: 'hero-submitted', + template: ` +
    +

    You submitted the following:

    +
    +
    Name
    +
    {{ hero.name }}
    +
    +
    +
    Alter Ego
    +
    {{ hero.alterEgo }}
    +
    +
    +
    Power
    +
    {{ hero.power }}
    +
    +
    + +
    ` +}) +export class SubmittedComponent { + @Input() hero: Hero; + @Input() submitted = false; + @Output() submittedChange = new EventEmitter(); + onClick() { this.submittedChange.emit(false); } +} diff --git a/aio/content/examples/cb-form-validation/ts/src/app/template/hero-form-template.module.ts b/aio/content/examples/cb-form-validation/ts/src/app/template/hero-form-template.module.ts new file mode 100644 index 0000000000..042c019d5e --- /dev/null +++ b/aio/content/examples/cb-form-validation/ts/src/app/template/hero-form-template.module.ts @@ -0,0 +1,14 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { FormsModule } from '@angular/forms'; + +import { SharedModule } from '../shared/shared.module'; +import { HeroFormTemplate1Component } from './hero-form-template1.component'; +import { HeroFormTemplate2Component } from './hero-form-template2.component'; + +@NgModule({ + imports: [ SharedModule, FormsModule ], + declarations: [ HeroFormTemplate1Component, HeroFormTemplate2Component ], + exports: [ HeroFormTemplate1Component, HeroFormTemplate2Component ] +}) +export class HeroFormTemplateModule { } diff --git a/aio/content/examples/cb-form-validation/ts/src/app/template/hero-form-template1.component.html b/aio/content/examples/cb-form-validation/ts/src/app/template/hero-form-template1.component.html new file mode 100644 index 0000000000..22b374b622 --- /dev/null +++ b/aio/content/examples/cb-form-validation/ts/src/app/template/hero-form-template1.component.html @@ -0,0 +1,61 @@ + +
    +
    +

    Hero Form 1 (Template)

    + +
    + +
    + + + + + +
    +
    + Name is required +
    +
    + Name must be at least 4 characters long. +
    +
    + Name cannot be more than 24 characters long. +
    +
    + +
    + +
    + + +
    + +
    + + + +
    +
    Power is required
    +
    +
    + + + +
    +
    + + +
    diff --git a/aio/content/examples/cb-form-validation/ts/src/app/template/hero-form-template1.component.ts b/aio/content/examples/cb-form-validation/ts/src/app/template/hero-form-template1.component.ts new file mode 100644 index 0000000000..b096ca8cf4 --- /dev/null +++ b/aio/content/examples/cb-form-validation/ts/src/app/template/hero-form-template1.component.ts @@ -0,0 +1,48 @@ +/* tslint:disable: member-ordering */ +// #docplaster +// #docregion +import { Component } from '@angular/core'; + + +import { Hero } from '../shared/hero'; + +@Component({ + moduleId: module.id, + selector: 'hero-form-template1', + templateUrl: './hero-form-template1.component.html' +}) +// #docregion class +export class HeroFormTemplate1Component { + + powers = ['Really Smart', 'Super Flexible', 'Weather Changer']; + + hero = new Hero(18, 'Dr. WhatIsHisWayTooLongName', this.powers[0], 'Dr. What'); + + submitted = false; + + onSubmit() { + this.submitted = true; + } +// #enddocregion class +// #enddocregion + // Reset the form with a new hero AND restore 'pristine' class state + // by toggling 'active' flag which causes the form + // to be removed/re-added in a tick via NgIf + // TODO: Workaround until NgForm has a reset method (#6822) + active = true; +// #docregion +// #docregion class + + addHero() { + this.hero = new Hero(42, '', ''); +// #enddocregion class +// #enddocregion + + this.active = false; + setTimeout(() => this.active = true, 0); +// #docregion +// #docregion class + } +} +// #enddocregion class +// #enddocregion diff --git a/aio/content/examples/cb-form-validation/ts/src/app/template/hero-form-template2.component.html b/aio/content/examples/cb-form-validation/ts/src/app/template/hero-form-template2.component.html new file mode 100644 index 0000000000..8bb7066541 --- /dev/null +++ b/aio/content/examples/cb-form-validation/ts/src/app/template/hero-form-template2.component.html @@ -0,0 +1,52 @@ + +
    +
    +

    Hero Form 2 (Template & Messages)

    + +
    + +
    + + + + + + + +
    + {{ formErrors.name }} +
    + +
    + +
    + + +
    + +
    + + + +
    + {{ formErrors.power }} +
    +
    + + + +
    +
    + + +
    diff --git a/aio/content/examples/cb-form-validation/ts/src/app/template/hero-form-template2.component.ts b/aio/content/examples/cb-form-validation/ts/src/app/template/hero-form-template2.component.ts new file mode 100644 index 0000000000..8b3e150347 --- /dev/null +++ b/aio/content/examples/cb-form-validation/ts/src/app/template/hero-form-template2.component.ts @@ -0,0 +1,100 @@ +/* tslint:disable: member-ordering forin */ +// #docplaster +// #docregion +import { Component, AfterViewChecked, ViewChild } from '@angular/core'; +import { NgForm } from '@angular/forms'; + +import { Hero } from '../shared/hero'; + +@Component({ + moduleId: module.id, + selector: 'hero-form-template2', + templateUrl: './hero-form-template2.component.html' +}) +export class HeroFormTemplate2Component implements AfterViewChecked { + + powers = ['Really Smart', 'Super Flexible', 'Weather Changer']; + + hero = new Hero(18, 'Dr. WhatIsHisWayTooLongName', this.powers[0], 'Dr. What'); + + submitted = false; + + onSubmit() { + this.submitted = true; + } +// #enddocregion + + // Reset the form with a new hero AND restore 'pristine' class state + // by toggling 'active' flag which causes the form + // to be removed/re-added in a tick via NgIf + // TODO: Workaround until NgForm has a reset method (#6822) + active = true; +// #docregion + + addHero() { + this.hero = new Hero(42, '', ''); +// #enddocregion + + this.active = false; + setTimeout(() => this.active = true, 0); +// #docregion + } + + // #docregion view-child + heroForm: NgForm; + @ViewChild('heroForm') currentForm: NgForm; + + ngAfterViewChecked() { + this.formChanged(); + } + + formChanged() { + if (this.currentForm === this.heroForm) { return; } + this.heroForm = this.currentForm; + if (this.heroForm) { + this.heroForm.valueChanges + .subscribe(data => this.onValueChanged(data)); + } + } + // #enddocregion view-child + + // #docregion handler + onValueChanged(data?: any) { + if (!this.heroForm) { return; } + const form = this.heroForm.form; + + for (const field in this.formErrors) { + // clear previous error message (if any) + this.formErrors[field] = ''; + const control = form.get(field); + + if (control && control.dirty && !control.valid) { + const messages = this.validationMessages[field]; + for (const key in control.errors) { + this.formErrors[field] += messages[key] + ' '; + } + } + } + } + + formErrors = { + 'name': '', + 'power': '' + }; + // #enddocregion handler + + // #docregion messages + validationMessages = { + 'name': { + 'required': 'Name is required.', + 'minlength': 'Name must be at least 4 characters long.', + 'maxlength': 'Name cannot be more than 24 characters long.', + 'forbiddenName': 'Someone named "Bob" cannot be a hero.' + }, + 'power': { + 'required': 'Power is required.' + } + }; + // #enddocregion messages +} +// #enddocregion diff --git a/aio/content/examples/cb-form-validation/ts/src/forms.css b/aio/content/examples/cb-form-validation/ts/src/forms.css new file mode 100644 index 0000000000..67ad13037b --- /dev/null +++ b/aio/content/examples/cb-form-validation/ts/src/forms.css @@ -0,0 +1,7 @@ +.ng-valid[required], .ng-valid.required { + border-left: 5px solid #42A948; /* green */ +} + +.ng-invalid:not(form) { + border-left: 5px solid #a94442; /* red */ +} diff --git a/aio/content/examples/cb-form-validation/ts/src/index.html b/aio/content/examples/cb-form-validation/ts/src/index.html new file mode 100644 index 0000000000..e7201508d7 --- /dev/null +++ b/aio/content/examples/cb-form-validation/ts/src/index.html @@ -0,0 +1,29 @@ + + + Hero Form with Validation + + + + + + + + + + + + + + + + + + + + + Loading... + + + diff --git a/aio/content/examples/cb-form-validation/ts/src/main.ts b/aio/content/examples/cb-form-validation/ts/src/main.ts new file mode 100644 index 0000000000..f332d1d245 --- /dev/null +++ b/aio/content/examples/cb-form-validation/ts/src/main.ts @@ -0,0 +1,6 @@ +// #docregion +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/cb-i18n/e2e-spec.ts b/aio/content/examples/cb-i18n/e2e-spec.ts new file mode 100644 index 0000000000..3dcca5a670 --- /dev/null +++ b/aio/content/examples/cb-i18n/e2e-spec.ts @@ -0,0 +1,33 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by } from 'protractor'; + +describe('i18n E2E Tests', () => { + + beforeEach(function () { + browser.get(''); + }); + + it('should display i18n translated welcome: ¡Hola i18n!', function () { + expect(element(by.css('h1')).getText()).toEqual('¡Hola i18n!'); + }); + + it('should display the node texts without elements', function () { + expect(element(by.css('my-app')).getText()).toContain('No genero ningún elemento'); + expect(element(by.css('my-app')).getText()).toContain('Yo tampoco genero ningún elemento'); + }); + + it('should display the translated title attribute', function () { + const title = element(by.css('img')).getAttribute('title'); + expect(title).toBe('Logo de Angular'); + }); + + it('should display the plural of: a horde of wolves', function () { + expect(element.all(by.css('span')).get(0).getText()).toBe('ningún lobo'); + }); + + it('should display the select of gender', function () { + expect(element.all(by.css('span')).get(1).getText()).toBe('El heroe es mujer'); + }); + +}); diff --git a/aio/content/examples/cb-i18n/ts/.gitignore b/aio/content/examples/cb-i18n/ts/.gitignore new file mode 100644 index 0000000000..d38bb50aa9 --- /dev/null +++ b/aio/content/examples/cb-i18n/ts/.gitignore @@ -0,0 +1,6 @@ +**/*.ngfactory.ts +**/*.metadata.json +dist +!app/tsconfig.json +!rollup.js +!src/systemjs-text-plugin.js diff --git a/aio/content/examples/cb-i18n/ts/example-config.json b/aio/content/examples/cb-i18n/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/cb-i18n/ts/messages.xlf b/aio/content/examples/cb-i18n/ts/messages.xlf new file mode 100644 index 0000000000..dee8b65aca --- /dev/null +++ b/aio/content/examples/cb-i18n/ts/messages.xlf @@ -0,0 +1,47 @@ + + + + + + Hello i18n! + + An introduction header for this sample + User welcome + + + I don't output any element + + + + +I don't output any element either + + + optional description + optional meaning + + + Angular logo + + + + + + + + + + + + + + The hero is + + + + + + + + + diff --git a/aio/content/examples/cb-i18n/ts/plnkr.json b/aio/content/examples/cb-i18n/ts/plnkr.json new file mode 100644 index 0000000000..e2cbd40afe --- /dev/null +++ b/aio/content/examples/cb-i18n/ts/plnkr.json @@ -0,0 +1,18 @@ +{ + "description": "i18n", + "basePath": "src/", + "files": [ + "app/**/*.css", + "app/**/*.html", + "app/**/*.ts", + "messages.xlf", + "locale/messages.*.xlf", + + "!**/*.[1].*", + + "styles.css", + "systemjs-text-plugin.js", + "index.html" + ], + "tags": ["i18n"] +} diff --git a/aio/content/examples/cb-i18n/ts/plnkr.no-link.html b/aio/content/examples/cb-i18n/ts/plnkr.no-link.html new file mode 100644 index 0000000000..0a3fd393ec --- /dev/null +++ b/aio/content/examples/cb-i18n/ts/plnkr.no-link.html @@ -0,0 +1,329 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/cb-i18n/ts/src/app/app.component.1.html b/aio/content/examples/cb-i18n/ts/src/app/app.component.1.html new file mode 100644 index 0000000000..cc7d4f1155 --- /dev/null +++ b/aio/content/examples/cb-i18n/ts/src/app/app.component.1.html @@ -0,0 +1,15 @@ + +

    Hello i18n!

    + + + +

    Hello i18n!

    + + + +

    Hello i18n!

    + + + + + diff --git a/aio/content/examples/cb-i18n/ts/src/app/app.component.html b/aio/content/examples/cb-i18n/ts/src/app/app.component.html new file mode 100644 index 0000000000..39ace24f79 --- /dev/null +++ b/aio/content/examples/cb-i18n/ts/src/app/app.component.html @@ -0,0 +1,34 @@ + + +

    Hello i18n!

    + + + +I don't output any element + + +
    + + + +I don't output any element either + + + +
    + + + + +
    + + +{wolves, plural, =0 {no wolves} =1 {one wolf} =2 {two wolves} other {a wolf pack}} + +({{wolves}}) +

    + + +The hero is {gender, select, m {male} f {female}} + +
    diff --git a/aio/content/examples/cb-i18n/ts/src/app/app.component.ts b/aio/content/examples/cb-i18n/ts/src/app/app.component.ts new file mode 100644 index 0000000000..09adc99d2a --- /dev/null +++ b/aio/content/examples/cb-i18n/ts/src/app/app.component.ts @@ -0,0 +1,20 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + moduleId: module.id, + selector: 'my-app', + templateUrl: './app.component.html' +}) +export class AppComponent { + wolves = 0; + gender = 'f'; + fly = true; + logo = 'https://angular.io/resources/images/logos/angular2/angular.png'; + inc(i: number) { + this.wolves = Math.min(5, Math.max(0, this.wolves + i)); + } + male() { this.gender = 'm'; } + female() { this.gender = 'f'; } +} + diff --git a/aio/content/examples/cb-i18n/ts/src/app/app.module.ts b/aio/content/examples/cb-i18n/ts/src/app/app.module.ts new file mode 100644 index 0000000000..64ad44075b --- /dev/null +++ b/aio/content/examples/cb-i18n/ts/src/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/aio/content/examples/cb-i18n/ts/src/app/i18n-providers.ts b/aio/content/examples/cb-i18n/ts/src/app/i18n-providers.ts new file mode 100644 index 0000000000..f0bb662dc3 --- /dev/null +++ b/aio/content/examples/cb-i18n/ts/src/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 U.S. English: no translation providers + if (!locale || locale === 'en-US') { + return Promise.resolve(noProviders); + } + + // Ex: 'locale/messages.es.xlf` + const translationFile = `./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/aio/content/examples/cb-i18n/ts/src/index.html b/aio/content/examples/cb-i18n/ts/src/index.html new file mode 100644 index 0000000000..ce90cd24c4 --- /dev/null +++ b/aio/content/examples/cb-i18n/ts/src/index.html @@ -0,0 +1,39 @@ + + + + + Angular i18n example + + + + + + + + + + + + + + + + + + + Loading... + + diff --git a/aio/content/examples/cb-i18n/ts/src/locale/messages.es.xlf b/aio/content/examples/cb-i18n/ts/src/locale/messages.es.xlf new file mode 100644 index 0000000000..7b813c38dd --- /dev/null +++ b/aio/content/examples/cb-i18n/ts/src/locale/messages.es.xlf @@ -0,0 +1,41 @@ + + + + + + Hello i18n! + ¡Hola i18n! + An introduction header for this sample + User welcome + + + I don't output any element + No genero ningún elemento + + + +I don't output any element either + + Yo tampoco genero ningún elemento + optional description + optional meaning + + + Angular logo + Logo de Angular + + + + {wolves, plural, =0 {ningún lobo} =1 {un lobo} =2 {dos lobos} other {una horda de lobos}} + + + The hero is + El heroe es + + + + {gender, select, m {hombre} f {mujer}} + + + + diff --git a/aio/content/examples/cb-i18n/ts/src/locale/messages.es.xlf.html b/aio/content/examples/cb-i18n/ts/src/locale/messages.es.xlf.html new file mode 100644 index 0000000000..a6cdccc6c1 --- /dev/null +++ b/aio/content/examples/cb-i18n/ts/src/locale/messages.es.xlf.html @@ -0,0 +1,54 @@ + + + + + + + + + Hello i18n! + ¡Hola i18n! + An introduction header for this sample + User welcome + + + + + I don't output any element + No genero ningún elemento + + + I don't output any element either + Yo tampoco genero ningún elemento + optional description + optional meaning + + + Angular logo + Logo de Angular + + + + + + {wolves, plural, =0 {ningún lobo} =1 {un lobo} =2 {dos lobos} other {una horda de lobos}} + + + + + + The hero is + El heroe es + + + + + + {gender, select, m {hombre} f {mujer}} + + + + + + + diff --git a/aio/content/examples/cb-i18n/ts/src/main.1.ts b/aio/content/examples/cb-i18n/ts/src/main.1.ts new file mode 100644 index 0000000000..f332d1d245 --- /dev/null +++ b/aio/content/examples/cb-i18n/ts/src/main.1.ts @@ -0,0 +1,6 @@ +// #docregion +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/cb-i18n/ts/src/main.ts b/aio/content/examples/cb-i18n/ts/src/main.ts new file mode 100644 index 0000000000..894cecfb10 --- /dev/null +++ b/aio/content/examples/cb-i18n/ts/src/main.ts @@ -0,0 +1,10 @@ +// #docregion +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { getTranslationProviders } from './app/i18n-providers'; + +import { AppModule } from './app/app.module'; + +getTranslationProviders().then(providers => { + const options = { providers }; + platformBrowserDynamic().bootstrapModule(AppModule, options); +}); diff --git a/aio/content/examples/cb-i18n/ts/src/systemjs-text-plugin.js b/aio/content/examples/cb-i18n/ts/src/systemjs-text-plugin.js new file mode 100644 index 0000000000..d5ca508fe0 --- /dev/null +++ b/aio/content/examples/cb-i18n/ts/src/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/aio/content/examples/cb-set-document-title/e2e-spec.ts b/aio/content/examples/cb-set-document-title/e2e-spec.ts new file mode 100644 index 0000000000..801b732995 --- /dev/null +++ b/aio/content/examples/cb-set-document-title/e2e-spec.ts @@ -0,0 +1,31 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by, ElementFinder } from 'protractor'; + +// gulp run-e2e-tests --filter=cb-set-document-title +describe('Set Document Title', function () { + + beforeAll(function () { + browser.get(''); + }); + + it('should set the document title', function () { + + let titles = [ + 'Good morning!', + 'Good afternoon!', + 'Good evening!' + ]; + + element.all( by.css( 'ul li a' ) ).each( + function iterator( element: ElementFinder, i: number ) { + + element.click(); + expect( browser.getTitle() ).toEqual( titles[ i ] ); + + } + ); + + }); + +}); diff --git a/aio/content/examples/cb-set-document-title/ts/example-config.json b/aio/content/examples/cb-set-document-title/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/cb-set-document-title/ts/plnkr.json b/aio/content/examples/cb-set-document-title/ts/plnkr.json new file mode 100644 index 0000000000..020d5a1db2 --- /dev/null +++ b/aio/content/examples/cb-set-document-title/ts/plnkr.json @@ -0,0 +1,10 @@ +{ + "description": "Set The Document Title In Angular", + "basePath": "src/", + "files": [ + "!**/*.d.ts", + "!**/*.js", + "!**/*.[1].*" + ], + "tags": [ "cookbook" ] +} diff --git a/aio/content/examples/cb-set-document-title/ts/plnkr.no-link.html b/aio/content/examples/cb-set-document-title/ts/plnkr.no-link.html new file mode 100644 index 0000000000..915ea603b5 --- /dev/null +++ b/aio/content/examples/cb-set-document-title/ts/plnkr.no-link.html @@ -0,0 +1,228 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/cb-set-document-title/ts/src/app/app.component.ts b/aio/content/examples/cb-set-document-title/ts/src/app/app.component.ts new file mode 100644 index 0000000000..f1905e635d --- /dev/null +++ b/aio/content/examples/cb-set-document-title/ts/src/app/app.component.ts @@ -0,0 +1,29 @@ +// #docplaster +// #docregion +// Import the native Angular services. +import { Component } from '@angular/core'; +import { Title } from '@angular/platform-browser'; + +@Component({ +selector: 'my-app', +template: + `

    + Select a title to set on the current HTML document: +

    + + + ` +}) +// #docregion class +export class AppComponent { + public constructor(private titleService: Title ) { } + + public setTitle( newTitle: string) { + this.titleService.setTitle( newTitle ); + } +} +// #enddocregion class diff --git a/aio/content/examples/cb-set-document-title/ts/src/app/app.module.ts b/aio/content/examples/cb-set-document-title/ts/src/app/app.module.ts new file mode 100644 index 0000000000..81f13c244c --- /dev/null +++ b/aio/content/examples/cb-set-document-title/ts/src/app/app.module.ts @@ -0,0 +1,19 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { BrowserModule, Title } from '@angular/platform-browser'; + +import { AppComponent } from './app.component'; + +@NgModule({ + imports: [ + BrowserModule + ], + declarations: [ + AppComponent + ], + providers: [ + Title + ], + bootstrap: [ AppComponent ] +}) +export class AppModule { } diff --git a/aio/content/examples/cb-set-document-title/ts/src/index.html b/aio/content/examples/cb-set-document-title/ts/src/index.html new file mode 100644 index 0000000000..6b00948530 --- /dev/null +++ b/aio/content/examples/cb-set-document-title/ts/src/index.html @@ -0,0 +1,39 @@ + + + + + + + + + Setting The Document Title Using The Title Service + + + + + + + + + + + + + + + + + + +

    + Setting The Document Title Using The Title Service +

    + + Loading app... + + + diff --git a/aio/content/examples/cb-set-document-title/ts/src/main.ts b/aio/content/examples/cb-set-document-title/ts/src/main.ts new file mode 100644 index 0000000000..f332d1d245 --- /dev/null +++ b/aio/content/examples/cb-set-document-title/ts/src/main.ts @@ -0,0 +1,6 @@ +// #docregion +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/cb-ts-to-js/e2e-spec.ts b/aio/content/examples/cb-ts-to-js/e2e-spec.ts new file mode 100644 index 0000000000..bc67bac8f0 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/e2e-spec.ts @@ -0,0 +1,77 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by } from 'protractor'; + +describe('TypeScript to Javascript tests', function () { + + beforeAll(function () { + browser.get(''); + }); + + it('should display the basic component example', function () { + testTag('hero-view', 'Hero Detail: Windstorm'); + }); + + it('should display the component example with lifecycle methods', function () { + testTag('hero-lifecycle', 'Hero: Windstorm'); + }); + + it('should display component with DI example', function () { + testTag('hero-di', 'Hero: Windstorm'); + }); + + it('should display component with DI using @Inject example', function () { + testTag('hero-di-inject', 'Hero: Windstorm'); + }); + + it('should support optional, attribute, and query injections', function () { + let app = element(by.css('hero-di-inject-additional')); + let h1 = app.element(by.css('h1')); + let okMsg = app.element(by.css('p')); + + expect(h1.getText()).toBe('Tour of Heroes'); + app.element(by.buttonText('OK')).click(); + expect(okMsg.getText()).toBe('OK!'); + }); + + it('should support component with inputs and outputs', function () { + let app = element(by.css('hero-io')); + let confirmComponent = app.element(by.css('app-confirm')); + + confirmComponent.element(by.buttonText('OK')).click(); + expect(app.element(by.cssContainingText('span', 'OK clicked')).isPresent()).toBe(true); + + confirmComponent.element(by.buttonText('Cancel')).click(); + expect(app.element(by.cssContainingText('span', 'Cancel clicked')).isPresent()).toBe(true); + }); + + it('should support host bindings and host listeners', function() { + let app = element(by.css('hero-host')); + let h1 = app.element(by.css('h1')); + + expect(app.getAttribute('class')).toBe('heading'); + expect(app.getAttribute('title')).toContain('Tooltip'); + + h1.click(); + expect(h1.getAttribute('class')).toBe('active'); + + h1.click(); + browser.actions().doubleClick(h1.getWebElement()).perform(); + expect(h1.getAttribute('class')).toBe('active'); + }); + + it('should support content and view queries', function() { + let app = element(by.css('hero-queries')); + let windstorm = app.element(by.css('view-child:first-child')); + + app.element(by.css('button')).click(); + expect(windstorm.element(by.css('h2')).getAttribute('class')).toBe('active'); + expect(windstorm.element(by.css('content-child')).getText()).toBe('Active'); + }); + + function testTag(selector: string, expectedText: string) { + let component = element(by.css(selector)); + expect(component.getText()).toBe(expectedText); + } + +}); diff --git a/aio/content/examples/cb-ts-to-js/js-es6-decorators/example-config.json b/aio/content/examples/cb-ts-to-js/js-es6-decorators/example-config.json new file mode 100644 index 0000000000..81f31aaf0d --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6-decorators/example-config.json @@ -0,0 +1,3 @@ +{ + "build": "build:babel" +} diff --git a/aio/content/examples/cb-ts-to-js/js-es6-decorators/plnkr.json b/aio/content/examples/cb-ts-to-js/js-es6-decorators/plnkr.json new file mode 100644 index 0000000000..447fc5f605 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6-decorators/plnkr.json @@ -0,0 +1,9 @@ +{ + "description": "TypeScript to JavaScript", + "basePath": "src/", + "files":[ + "!**/*.d.ts", + "!**/*.js" + ], + "tags":["cookbook"] +} diff --git a/aio/content/examples/cb-ts-to-js/js-es6-decorators/plnkr.no-link.html b/aio/content/examples/cb-ts-to-js/js-es6-decorators/plnkr.no-link.html new file mode 100644 index 0000000000..618489fc11 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6-decorators/plnkr.no-link.html @@ -0,0 +1,209 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/.babelrc b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/.babelrc new file mode 100644 index 0000000000..3aaf507508 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/.babelrc @@ -0,0 +1,6 @@ +{ + "presets": [ + "es2015", + "angular2" + ] +} diff --git a/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/app.component.es6 b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/app.component.es6 new file mode 100644 index 0000000000..8e65fff539 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/app.component.es6 @@ -0,0 +1,15 @@ +import { Component } from '@angular/core'; + +@Component({ + moduleId: module.id, + selector: 'my-app', + templateUrl: './app.component.html', + styles: [ + // See hero-di-inject-additional.component + 'hero-host, hero-host-meta { border: 1px dashed black; display: block; padding: 4px;}', + '.heading {font-style: italic}' + ] +}) +export class AppComponent { + title = 'ES6 JavaScript with Decorators'; +} diff --git a/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/app.component.html b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/app.component.html new file mode 100644 index 0000000000..995645073a --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/app.component.html @@ -0,0 +1,31 @@ + +

    {{title}}

    +Classes and Class Metadata
    +Input and Output Decorators
    +Dependency Injection
    +Host Metadata
    +View and Child Metadata
    + +
    +

    Classes and Class Metadata

    + + + +
    +

    Input and Output Metadata

    + + +
    +

    Dependency Injection

    + + + + +
    +

    Host Metadata

    + + + +
    +

    View and Child Metadata

    + diff --git a/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/app.module.es6 b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/app.module.es6 new file mode 100644 index 0000000000..9c248a7ad3 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/app.module.es6 @@ -0,0 +1,55 @@ +import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; + +import { AppComponent } from './app.component'; +import { ConfirmComponent } from './confirm.component'; +// #docregion appimport +import { HeroComponent } from './hero.component'; +// #enddocregion appimport +import { HeroComponent as HeroDIComponent } from './hero-di.component'; +import { HeroComponent as HeroDIInjectComponent } from './hero-di-inject.component'; +import { HeroComponent as HeroDIInjectAdditionalComponent } from './hero-di-inject-additional.component'; +import { HeroHostComponent } from './hero-host.component'; +import { HeroHostMetaComponent } from './hero-host-meta.component'; +import { HeroIOComponent } from './hero-io.component'; +import { HeroComponent as HeroLifecycleComponent } from './hero-lifecycle.component'; +import { HeroQueriesComponent, ViewChildComponent, ContentChildComponent } from './hero-queries.component'; +import { HeroTitleComponent } from './hero-title.component'; + +import { DataService } from './data.service'; + +@NgModule({ + imports: [ + BrowserModule + ], + declarations: [ + AppComponent, + ConfirmComponent, + HeroComponent, + HeroDIComponent, + HeroDIInjectComponent, + HeroDIInjectAdditionalComponent, + HeroHostComponent, HeroHostMetaComponent, + HeroIOComponent, + HeroLifecycleComponent, + HeroQueriesComponent, ViewChildComponent, ContentChildComponent, + HeroTitleComponent + ], + providers: [ + DataService, + { provide: 'heroName', useValue: 'Windstorm' } + ], + bootstrap: [ AppComponent ], + + // schemas: [ NO_ERRORS_SCHEMA ] // helpful for debugging +}) +export class AppModule { } + +/* tslint:disable no-unused-variable */ +// #docregion ng2import +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { + LocationStrategy, + HashLocationStrategy +} from '@angular/common'; +// #enddocregion ng2import diff --git a/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/confirm.component.es6 b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/confirm.component.es6 new file mode 100644 index 0000000000..c9be28c44c --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/confirm.component.es6 @@ -0,0 +1,22 @@ +import { Component, EventEmitter, Input, Output } from '@angular/core'; + +// #docregion +@Component({ + moduleId: module.id, + selector: 'app-confirm', + templateUrl: './confirm.component.html' +}) +export class ConfirmComponent { + @Input() okMsg = ''; + @Input('cancelMsg') notOkMsg = ''; + @Output() ok = new EventEmitter(); + @Output('cancel') notOk = new EventEmitter(); + + onOkClick() { + this.ok.emit(true); + } + onNotOkClick() { + this.notOk.emit(true); + } +} +// #enddocregion diff --git a/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/confirm.component.html b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/confirm.component.html new file mode 100644 index 0000000000..45275d218a --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/confirm.component.html @@ -0,0 +1,6 @@ + + diff --git a/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/data.service.es6 b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/data.service.es6 new file mode 100644 index 0000000000..cd7f9e1aae --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/data.service.es6 @@ -0,0 +1,10 @@ +import { Injectable } from '@angular/core'; + +@Injectable() +export class DataService { + constructor() { } + + getHeroName() { + return 'Windstorm'; + } +} diff --git a/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-di-inject-additional.component.es6 b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-di-inject-additional.component.es6 new file mode 100644 index 0000000000..ec460a9dbc --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-di-inject-additional.component.es6 @@ -0,0 +1,7 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'hero-di-inject-additional', + template: `` +}) +export class HeroComponent { } diff --git a/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-di-inject.component.es6 b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-di-inject.component.es6 new file mode 100644 index 0000000000..94b42f956a --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-di-inject.component.es6 @@ -0,0 +1,13 @@ +import { Component, Inject } from '@angular/core'; + +// #docregion +@Component({ + selector: 'hero-di-inject', + template: `

    Hero: {{name}}

    ` +}) +export class HeroComponent { + constructor(@Inject('heroName') name) { + this.name = name; + } +} +// #enddocregion diff --git a/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-di.component.es6 b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-di.component.es6 new file mode 100644 index 0000000000..3a17abd281 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-di.component.es6 @@ -0,0 +1,15 @@ +// #docregion +import { Component } from '@angular/core'; +import { DataService } from './data.service'; + +@Component({ + selector: 'hero-di', + template: `

    Hero: {{name}}

    ` +}) +export class HeroComponent { + name = ''; + constructor(dataService: DataService) { + this.name = dataService.getHeroName(); + } +} +// #enddocregion diff --git a/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-host-meta.component.es6 b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-host-meta.component.es6 new file mode 100644 index 0000000000..fefe4a5470 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-host-meta.component.es6 @@ -0,0 +1,44 @@ +import { Component } from '@angular/core'; + +// #docregion +@Component({ + selector: 'hero-host-meta', + template: ` +

    Hero Host in Metadata

    +
    Heading clicks: {{clicks}}
    + `, + host: { + // HostBindings to the element + '[title]': 'title', + '[class.heading]': 'headingClass', + + // HostListeners on the entire element + '(click)': 'clicked()', + '(mouseenter)': 'enter($event)', + '(mouseleave)': 'leave($event)' + }, + // Styles within (but excluding) the element + styles: ['.active {background-color: coral;}'] +}) +export class HeroHostMetaComponent { + title = 'Hero Host in Metadata Tooltip'; + headingClass = true; + + active = false; + clicks = 0; + + clicked() { + this.clicks += 1; + } + + enter(event: Event) { + this.active = true; + this.headingClass = false; + } + + leave(event: Event) { + this.active = false; + this.headingClass = true; + } +} +// #enddocregion diff --git a/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-host.component.es6 b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-host.component.es6 new file mode 100644 index 0000000000..e8d72233c8 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-host.component.es6 @@ -0,0 +1,39 @@ +import { Component, HostBinding, HostListener } from '@angular/core'; + +// #docregion +@Component({ + selector: 'hero-host', + template: ` +

    Hero Host in Decorators

    +
    Heading clicks: {{clicks}}
    + `, + // Styles within (but excluding) the element + styles: ['.active {background-color: yellow;}'] +}) +export class HeroHostComponent { + // HostBindings to the element + @HostBinding() title = 'Hero Host in Decorators Tooltip'; + @HostBinding('class.heading') headingClass = true; + + active = false; + clicks = 0; + + // HostListeners on the entire element + @HostListener('click') + clicked() { + this.clicks += 1; + } + + @HostListener('mouseenter', ['$event']) + enter(event: Event) { + this.active = true; + this.headingClass = false; + } + + @HostListener('mouseleave', ['$event']) + leave(event: Event) { + this.active = false; + this.headingClass = true; + } +} +// #enddocregion diff --git a/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-io.component.es6 b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-io.component.es6 new file mode 100644 index 0000000000..4b36411e78 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-io.component.es6 @@ -0,0 +1,26 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'hero-io', + template: ` + + + OK clicked + Cancel clicked + ` +}) +export class HeroIOComponent { + okClicked = false; + cancelClicked = false; + + onOk() { + this.okClicked = true; + } + + onCancel() { + this.cancelClicked = true; + } +} diff --git a/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-lifecycle.component.es6 b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-lifecycle.component.es6 new file mode 100644 index 0000000000..2539266597 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-lifecycle.component.es6 @@ -0,0 +1,14 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'hero-lifecycle', + template: `

    Hero: {{name}}

    ` +}) +export class HeroComponent { + name = ''; + ngOnInit() { + // todo: fetch from server async + setTimeout(() => this.name = 'Windstorm', 0); + } +} diff --git a/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-queries.component.es6 b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-queries.component.es6 new file mode 100644 index 0000000000..fced43d4d7 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-queries.component.es6 @@ -0,0 +1,81 @@ +import { + Component, + ContentChild, + Input, + QueryList, + ViewChildren +} from '@angular/core'; + +@Component({ + selector: 'content-child', + template: ` + + Active + ` +}) +export class ContentChildComponent { + active = false; + + activate() { + this.active = true; + } +} + +//////////////////// + +// #docregion content +@Component({ + selector: 'view-child', + template: ` +

    + {{hero.name}} + +

    `, + styles: ['.active {font-weight: bold; background-color: skyblue;}'] +}) +export class ViewChildComponent { + @Input() hero; + active = false; + + @ContentChild(ContentChildComponent) content; + + activate() { + this.active = !this.active; + this.content.activate(); + } +} +// #enddocregion content + +//////////////////// + +// #docregion view +@Component({ + selector: 'hero-queries', + template: ` + + + + + ` +}) +export class HeroQueriesComponent { + active = false; + heroData = [ + {id: 1, name: 'Windstorm'}, + {id: 2, name: 'LaughingGas'} + ]; + + @ViewChildren(ViewChildComponent) views; + + activate() { + this.active = !this.active; + this.views.forEach( + view => view.activate() + ); + } + + get buttonLabel() { + return this.active ? 'Deactivate' : 'Activate'; + } +} +// #enddocregion view diff --git a/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-title.component.es6 b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-title.component.es6 new file mode 100644 index 0000000000..32988dcdda --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-title.component.es6 @@ -0,0 +1,26 @@ +import { Attribute, Component, Inject, Optional } from '@angular/core'; + +// #docregion +// #docregion templateUrl +@Component({ + moduleId: module.id, + selector: 'hero-title', + templateUrl: './hero-title.component.html' +}) +// #enddocregion templateUrl +export class HeroTitleComponent { + msg = ''; + constructor( + @Inject('titlePrefix') @Optional() titlePrefix, + @Attribute('title') title + ) { + this.titlePrefix = titlePrefix; + this.title = title; + } + + ok() { + this.msg = 'OK!'; + } +} +// #enddocregion + diff --git a/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-title.component.html b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-title.component.html new file mode 100644 index 0000000000..164683cb7c --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero-title.component.html @@ -0,0 +1,4 @@ + +

    {{titlePrefix}} {{title}}

    + +

    {{ msg }}

    diff --git a/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero.component.es6 b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero.component.es6 new file mode 100644 index 0000000000..2976ec605e --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/app/hero.component.es6 @@ -0,0 +1,15 @@ +// #docregion +// #docregion metadata +import { Component } from '@angular/core'; + +@Component({ + selector: 'hero-view', + template: '

    {{title}}: {{getName()}}

    ' +}) +// #docregion appexport, class +export class HeroComponent { + title = 'Hero Detail'; + getName() {return 'Windstorm'; } +} +// #enddocregion appexport, class +// #enddocregion metadata diff --git a/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/index.html b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/index.html new file mode 100644 index 0000000000..2a94db38cc --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/index.html @@ -0,0 +1,26 @@ + + + + + + + + TypeScript to JavaScript + + + + + + + + + + + + + Loading... + + + diff --git a/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/main.es6 b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/main.es6 new file mode 100644 index 0000000000..f22933ba8e --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6-decorators/src/main.es6 @@ -0,0 +1,4 @@ +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/cb-ts-to-js/js-es6/example-config.json b/aio/content/examples/cb-ts-to-js/js-es6/example-config.json new file mode 100644 index 0000000000..81f31aaf0d --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6/example-config.json @@ -0,0 +1,3 @@ +{ + "build": "build:babel" +} diff --git a/aio/content/examples/cb-ts-to-js/js-es6/plnkr.json b/aio/content/examples/cb-ts-to-js/js-es6/plnkr.json new file mode 100644 index 0000000000..447fc5f605 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6/plnkr.json @@ -0,0 +1,9 @@ +{ + "description": "TypeScript to JavaScript", + "basePath": "src/", + "files":[ + "!**/*.d.ts", + "!**/*.js" + ], + "tags":["cookbook"] +} diff --git a/aio/content/examples/cb-ts-to-js/js-es6/plnkr.no-link.html b/aio/content/examples/cb-ts-to-js/js-es6/plnkr.no-link.html new file mode 100644 index 0000000000..f47b7742b6 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6/plnkr.no-link.html @@ -0,0 +1,208 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/cb-ts-to-js/js-es6/src/.babelrc b/aio/content/examples/cb-ts-to-js/js-es6/src/.babelrc new file mode 100644 index 0000000000..3c078e9f99 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6/src/.babelrc @@ -0,0 +1,5 @@ +{ + "presets": [ + "es2015" + ] +} diff --git a/aio/content/examples/cb-ts-to-js/js-es6/src/app/app.component.es6 b/aio/content/examples/cb-ts-to-js/js-es6/src/app/app.component.es6 new file mode 100644 index 0000000000..3084439b2a --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6/src/app/app.component.es6 @@ -0,0 +1,20 @@ +import { Component } from '@angular/core'; + +export class AppComponent { + constructor() { + this.title = 'Plain ES6 JavaScript'; + } +} + +AppComponent.annotations = [ + new Component({ + moduleId: module.id, + selector: 'my-app', + templateUrl: './app.component.html', + styles: [ + // See hero-di-inject-additional.component + 'hero-host { border: 1px dashed black; display: block; padding: 4px;}', + '.heading {font-style: italic}' + ] + }) +]; diff --git a/aio/content/examples/cb-ts-to-js/js-es6/src/app/app.component.html b/aio/content/examples/cb-ts-to-js/js-es6/src/app/app.component.html new file mode 100644 index 0000000000..52b9b4580e --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6/src/app/app.component.html @@ -0,0 +1,30 @@ + +

    {{title}}

    +Classes and Class Metadata
    +Input and Output Metadata
    +Dependency Injection
    +Host Metadata
    +View and Child Metadata
    + +
    +

    Classes and Class Metadata

    + + + +
    +

    Input and Output Metadata

    + + +
    +

    Dependency Injection

    + + + + +
    +

    Host Metadata

    + + +
    +

    View and Child Metadata

    + diff --git a/aio/content/examples/cb-ts-to-js/js-es6/src/app/app.module.es6 b/aio/content/examples/cb-ts-to-js/js-es6/src/app/app.module.es6 new file mode 100644 index 0000000000..f31141e78f --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6/src/app/app.module.es6 @@ -0,0 +1,56 @@ +import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; + +import { AppComponent } from './app.component'; +import { ConfirmComponent } from './confirm.component'; +// #docregion appimport +import { HeroComponent } from './hero.component'; + +// #enddocregion appimport +import { HeroComponent as HeroDIComponent } from './hero-di.component'; +import { HeroComponent as HeroDIInjectComponent } from './hero-di-inject.component'; +import { HeroComponent as HeroDIInjectAdditionalComponent } from './hero-di-inject-additional.component'; +import { HeroHostComponent } from './hero-host.component'; +import { HeroIOComponent } from './hero-io.component'; +import { HeroComponent as HeroLifecycleComponent } from './hero-lifecycle.component'; +import { HeroQueriesComponent, ViewChildComponent, ContentChildComponent } from './hero-queries.component'; +import { HeroTitleComponent } from './hero-title.component'; + +import { DataService } from './data.service'; + +export class AppModule { } + +AppModule.annotations = [ + new NgModule({ + imports: [ BrowserModule], + declarations: [ + AppComponent, + ConfirmComponent, + HeroComponent, + HeroDIComponent, + HeroDIInjectComponent, + HeroDIInjectAdditionalComponent, + HeroHostComponent, + HeroIOComponent, + HeroLifecycleComponent, + HeroQueriesComponent, ViewChildComponent, ContentChildComponent, + HeroTitleComponent + ], + providers: [ + DataService, + { provide: 'heroName', useValue: 'Windstorm' } + ], + bootstrap: [ AppComponent ], + + // schemas: [ NO_ERRORS_SCHEMA ] // helpful for debugging + }) +] + +/* tslint:disable no-unused-variable */ +// #docregion ng2import +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { + LocationStrategy, + HashLocationStrategy +} from '@angular/common'; +// #enddocregion ng2import diff --git a/aio/content/examples/cb-ts-to-js/js-es6/src/app/confirm.component.es6 b/aio/content/examples/cb-ts-to-js/js-es6/src/app/confirm.component.es6 new file mode 100644 index 0000000000..3e72036952 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6/src/app/confirm.component.es6 @@ -0,0 +1,32 @@ +import { Component, EventEmitter } from '@angular/core'; + +// #docregion +export class ConfirmComponent { + constructor(){ + this.ok = new EventEmitter(); + this.notOk = new EventEmitter(); + } + onOkClick() { + this.ok.emit(true); + } + onNotOkClick() { + this.notOk.emit(true); + } +} + +ConfirmComponent.annotations = [ + new Component({ + moduleId: module.id, + selector: 'app-confirm', + templateUrl: './confirm.component.html', + inputs: [ + 'okMsg', + 'notOkMsg: cancelMsg' + ], + outputs: [ + 'ok', + 'notOk: cancel' + ] + }) +]; +// #enddocregion diff --git a/aio/content/examples/cb-ts-to-js/js-es6/src/app/confirm.component.html b/aio/content/examples/cb-ts-to-js/js-es6/src/app/confirm.component.html new file mode 100644 index 0000000000..45275d218a --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6/src/app/confirm.component.html @@ -0,0 +1,6 @@ + + diff --git a/aio/content/examples/cb-ts-to-js/js-es6/src/app/data.service.es6 b/aio/content/examples/cb-ts-to-js/js-es6/src/app/data.service.es6 new file mode 100644 index 0000000000..de023ce5a0 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6/src/app/data.service.es6 @@ -0,0 +1,13 @@ +import { Injectable } from '@angular/core'; + +export class DataService { + constructor() { + } + getHeroName() { + return 'Windstorm'; + } +} + +DataService.annotations = [ + new Injectable() +]; diff --git a/aio/content/examples/cb-ts-to-js/js-es6/src/app/hero-di-inject-additional.component.es6 b/aio/content/examples/cb-ts-to-js/js-es6/src/app/hero-di-inject-additional.component.es6 new file mode 100644 index 0000000000..5eb9bab815 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6/src/app/hero-di-inject-additional.component.es6 @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +export class HeroComponent { } + +HeroComponent.annotations = [ + new Component({ + selector: 'hero-di-inject-additional', + template: `` + }) +]; diff --git a/aio/content/examples/cb-ts-to-js/js-es6/src/app/hero-di-inject.component.es6 b/aio/content/examples/cb-ts-to-js/js-es6/src/app/hero-di-inject.component.es6 new file mode 100644 index 0000000000..2f95a0b981 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6/src/app/hero-di-inject.component.es6 @@ -0,0 +1,20 @@ +import { Component, Inject } from '@angular/core'; + +// #docregion +export class HeroComponent { + constructor(name) { + this.name = name; + } +} + +HeroComponent.annotations = [ + new Component({ + selector: 'hero-di-inject', + template: `

    Hero: {{name}}

    ` + }) +]; + +HeroComponent.parameters = [ + [new Inject('heroName')] +]; +// #enddocregion diff --git a/aio/content/examples/cb-ts-to-js/js-es6/src/app/hero-di.component.es6 b/aio/content/examples/cb-ts-to-js/js-es6/src/app/hero-di.component.es6 new file mode 100644 index 0000000000..a18b1ba777 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6/src/app/hero-di.component.es6 @@ -0,0 +1,21 @@ +// #docregion +import { Component } from '@angular/core'; +import { DataService } from './data.service'; + +export class HeroComponent { + constructor(dataService) { + this.name = dataService.getHeroName(); + } +} + +HeroComponent.annotations = [ + new Component({ + selector: 'hero-di', + template: `

    Hero: {{name}}

    ` + }) +]; + +HeroComponent.parameters = [ + [DataService] +]; +// #enddocregion diff --git a/aio/content/examples/cb-ts-to-js/js-es6/src/app/hero-host.component.es6 b/aio/content/examples/cb-ts-to-js/js-es6/src/app/hero-host.component.es6 new file mode 100644 index 0000000000..b06701ee8d --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6/src/app/hero-host.component.es6 @@ -0,0 +1,50 @@ +import { Component } from '@angular/core'; + +// #docregion +export class HeroHostComponent { + constructor() { + this.active = false; + this.clicks = 0; + this.headingClass = true; + this.title = 'Hero Host Tooltip'; + } + + clicked() { + this.clicks += 1; + } + + enter(event) { + this.active = true; + this.headingClass = false; + } + + leave(event) { + this.active = false; + this.headingClass = true; + } +} + +// #docregion metadata +HeroHostComponent.annotations = [ + new Component({ + selector: 'hero-host', + template: ` +

    Hero Host

    +
    Heading clicks: {{clicks}}
    + `, + host: { + // HostBindings to the element + '[title]': 'title', + '[class.heading]': 'headingClass', + '(click)': 'clicked()', + + // HostListeners on the entire element + '(mouseenter)': 'enter($event)', + '(mouseleave)': 'leave($event)' + }, + // Styles within (but excluding) the element + styles: ['.active {background-color: yellow;}'] + }) +]; +// #enddocregion metadata +// #enddocregion diff --git a/aio/content/examples/cb-ts-to-js/js-es6/src/app/hero-io.component.es6 b/aio/content/examples/cb-ts-to-js/js-es6/src/app/hero-io.component.es6 new file mode 100644 index 0000000000..0dc8c08f2d --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6/src/app/hero-io.component.es6 @@ -0,0 +1,31 @@ +import { Component } from '@angular/core'; + +export class HeroIOComponent { + constructor() { + this.okClicked = false; + this.cancelClicked = false; + } + + onOk() { + this.okClicked = true; + } + + onCancel() { + this.cancelClicked = true; + } +} + +HeroIOComponent.annotations = [ + new Component({ + selector: 'hero-io', + template: ` + + + OK clicked + Cancel clicked + ` + }) +]; diff --git a/aio/content/examples/cb-ts-to-js/js-es6/src/app/hero-lifecycle.component.es6 b/aio/content/examples/cb-ts-to-js/js-es6/src/app/hero-lifecycle.component.es6 new file mode 100644 index 0000000000..b394ff59aa --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6/src/app/hero-lifecycle.component.es6 @@ -0,0 +1,15 @@ +// #docregion +import { Component } from '@angular/core'; +export class HeroComponent { + ngOnInit() { + // todo: fetch from server async + setTimeout(() => this.name = 'Windstorm', 0); + } +} + +HeroComponent.annotations = [ + new Component({ + selector: 'hero-lifecycle', + template: `

    Hero: {{name}}

    ` + }) +]; diff --git a/aio/content/examples/cb-ts-to-js/js-es6/src/app/hero-queries.component.es6 b/aio/content/examples/cb-ts-to-js/js-es6/src/app/hero-queries.component.es6 new file mode 100644 index 0000000000..bf3b914406 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6/src/app/hero-queries.component.es6 @@ -0,0 +1,97 @@ +import { + Component, + ContentChild, + Input, + QueryList, + ViewChildren +} from '@angular/core'; + +export class ContentChildComponent { + constructor() { + this.active = false; + } + + activate() { + this.active = !this.active; + } +} + +ContentChildComponent.annotations = [ + new Component({ + selector: 'content-child', + template: ` + + Active + ` + }) +]; + +//////////////////// + +// #docregion content +export class ViewChildComponent { + constructor() { + this.active = false; + } + + activate() { + this.active = !this.active; + this.content.activate(); + } +} + +ViewChildComponent.annotations = [ + new Component({ + selector: 'view-child', + template: `

    + {{hero.name}} + +

    `, + styles: ['.active {font-weight: bold; background-color: skyblue;}'], + inputs: ['hero'], + queries: { + content: new ContentChild(ContentChildComponent) + } + }) +]; +// #enddocregion content + +//////////////////// + +// #docregion view +export class HeroQueriesComponent { + constructor(){ + this.active = false; + this.heroData = [ + {id: 1, name: 'Windstorm'}, + {id: 2, name: 'LaughingGas'} + ]; + } + + activate() { + this.active = !this.active; + this.views.forEach( + view => view.activate() + ); + } + + get buttonLabel() { + return this.active ? 'Deactivate' : 'Activate'; + } +} + +HeroQueriesComponent.annotations = [ + new Component({ + selector: 'hero-queries', + template: ` + + + + + `, + queries: { + views: new ViewChildren(ViewChildComponent) + } + }) +]; +// #enddocregion view diff --git a/aio/content/examples/cb-ts-to-js/js-es6/src/app/hero-title.component.es6 b/aio/content/examples/cb-ts-to-js/js-es6/src/app/hero-title.component.es6 new file mode 100644 index 0000000000..1656226602 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6/src/app/hero-title.component.es6 @@ -0,0 +1,29 @@ +import { Attribute, Component, Inject, Optional } from '@angular/core'; + +// #docregion +export class HeroTitleComponent { + constructor(titlePrefix, title) { + this.titlePrefix = titlePrefix; + this.title = title; + this.msg = ''; + } + + ok() { + this.msg = 'OK!'; + } +} + +// #docregion templateUrl +HeroTitleComponent.annotations = [ + new Component({ + moduleId: module.id, + selector: 'hero-title', + templateUrl: './hero-title.component.html' + }) +]; +// #enddocregion templateUrl + +HeroTitleComponent.parameters = [ + [new Optional(), new Inject('titlePrefix')], + [new Attribute('title')] +]; diff --git a/aio/content/examples/cb-ts-to-js/js-es6/src/app/hero-title.component.html b/aio/content/examples/cb-ts-to-js/js-es6/src/app/hero-title.component.html new file mode 100644 index 0000000000..164683cb7c --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6/src/app/hero-title.component.html @@ -0,0 +1,4 @@ + +

    {{titlePrefix}} {{title}}

    + +

    {{ msg }}

    diff --git a/aio/content/examples/cb-ts-to-js/js-es6/src/app/hero.component.es6 b/aio/content/examples/cb-ts-to-js/js-es6/src/app/hero.component.es6 new file mode 100644 index 0000000000..350f946460 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6/src/app/hero.component.es6 @@ -0,0 +1,21 @@ +// #docplaster +// #docregion +// #docregion metadata +import { Component } from '@angular/core'; + +// #docregion appexport, class +export class HeroComponent { + constructor() { + this.title = 'Hero Detail'; + } + getName() {return 'Windstorm'; } +} +// #enddocregion appexport, class + +HeroComponent.annotations = [ + new Component({ + selector: 'hero-view', + template: '

    {{title}}: {{getName()}}

    ' + }) +]; +// #enddocregion metadata diff --git a/aio/content/examples/cb-ts-to-js/js-es6/src/index.html b/aio/content/examples/cb-ts-to-js/js-es6/src/index.html new file mode 100644 index 0000000000..2a94db38cc --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6/src/index.html @@ -0,0 +1,26 @@ + + + + + + + + TypeScript to JavaScript + + + + + + + + + + + + + Loading... + + + diff --git a/aio/content/examples/cb-ts-to-js/js-es6/src/main.es6 b/aio/content/examples/cb-ts-to-js/js-es6/src/main.es6 new file mode 100644 index 0000000000..f22933ba8e --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js-es6/src/main.es6 @@ -0,0 +1,4 @@ +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/cb-ts-to-js/js/example-config.json b/aio/content/examples/cb-ts-to-js/js/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/cb-ts-to-js/js/plnkr.json b/aio/content/examples/cb-ts-to-js/js/plnkr.json new file mode 100644 index 0000000000..5e1eb188be --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js/plnkr.json @@ -0,0 +1,8 @@ +{ + "description": "TypeScript to JavaScript", + "basePath": "src/", + "files":[ + "!**/karma*.*" + ], + "tags":["cookbook"] +} diff --git a/aio/content/examples/cb-ts-to-js/js/plnkr.no-link.html b/aio/content/examples/cb-ts-to-js/js/plnkr.no-link.html new file mode 100644 index 0000000000..d01f4940df --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js/plnkr.no-link.html @@ -0,0 +1,1022 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/cb-ts-to-js/js/src/app/app.component.html b/aio/content/examples/cb-ts-to-js/js/src/app/app.component.html new file mode 100644 index 0000000000..4ca26f2657 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js/src/app/app.component.html @@ -0,0 +1,47 @@ + +

    {{title}}

    +Classes and Class Metadata
    +Interfaces
    +Input and Output Metadata
    +Dependency Injection
    +Host Metadata
    +View and Child Metadata
    + +
    +

    Classes and Class Metadata

    + +

    Classes and Class Metadata (DSL)

    + + +
    +

    Interfaces

    + +

    Interfaces (DSL)

    + + +
    +

    Input and Output Metadata

    + +

    Input and Output Metadata (DSL)

    + + +
    +

    Dependency Injection

    + + + + +

    Dependency Injection (DSL)

    + + + + +
    +

    Host Metadata

    + +

    Host Metadata (DSL)

    + + +
    +

    View and Child Metadata (DSL)

    + diff --git a/aio/content/examples/cb-ts-to-js/js/src/app/app.component.js b/aio/content/examples/cb-ts-to-js/js/src/app/app.component.js new file mode 100644 index 0000000000..b6d1ec29b0 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js/src/app/app.component.js @@ -0,0 +1,20 @@ +(function(app) { + +app.AppComponent = AppComponent; +function AppComponent() { + this.title = 'ES5 JavaScript'; +} + +AppComponent.annotations = [ + new ng.core.Component({ + selector: 'my-app', + templateUrl: 'app/app.component.html', + styles: [ + // See hero-di-inject-additional.component + 'hero-host, hero-host-dsl { border: 1px dashed black; display: block; padding: 4px;}', + '.heading {font-style: italic}' + ] + }) +]; + +})(window.app = window.app || {}); diff --git a/aio/content/examples/cb-ts-to-js/js/src/app/app.module.js b/aio/content/examples/cb-ts-to-js/js/src/app/app.module.js new file mode 100644 index 0000000000..fc2300a89b --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js/src/app/app.module.js @@ -0,0 +1,46 @@ +(function(app) { + +app.AppModule = AppModule; +function AppModule() { } + +AppModule.annotations = [ + new ng.core.NgModule({ + imports: [ ng.platformBrowser.BrowserModule ], + declarations: [ + app.AppComponent, + app.ConfirmComponent, app.ConfirmDslComponent, + app.HeroComponent, app.HeroDslComponent, + app.HeroDIComponent, app.HeroDIDslComponent, + app.HeroDIInjectComponent, app.HeroDIInjectDslComponent, + app.HeroDIInjectAdditionalComponent, app.HeroDIInjectAdditionalDslComponent, + app.HeroHostComponent, app.HeroHostDslComponent, + app.HeroIOComponent, app.HeroIODslComponent, + app.HeroLifecycleComponent, app.HeroLifecycleDslComponent, + app.heroQueries.HeroQueriesComponent, app.heroQueries.ViewChildComponent, app.heroQueries.ContentChildComponent, + app.HeroTitleComponent, app.HeroTitleDslComponent + ], + providers: [ + app.DataService, + { provide: 'heroName', useValue: 'Windstorm' } + ], + bootstrap: [ app.AppComponent ], + + // schemas: [ ng.core.NO_ERRORS_SCHEMA ] // helpful for debugging! + }) +] + +})(window.app = window.app || {}); + + +///// For documentation only ///// +(function () { + // #docregion appimport + var HeroComponent = app.HeroComponent; + // #enddocregion appimport + + // #docregion ng2import + var platformBrowserDynamic = ng.platformBrowserDynamic.platformBrowserDynamic; + var LocationStrategy = ng.common.LocationStrategy; + var HashLocationStrategy = ng.common.HashLocationStrategy; + // #enddocregion ng2import +}) diff --git a/aio/content/examples/cb-ts-to-js/js/src/app/confirm.component.html b/aio/content/examples/cb-ts-to-js/js/src/app/confirm.component.html new file mode 100644 index 0000000000..45275d218a --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js/src/app/confirm.component.html @@ -0,0 +1,6 @@ + + diff --git a/aio/content/examples/cb-ts-to-js/js/src/app/confirm.component.js b/aio/content/examples/cb-ts-to-js/js/src/app/confirm.component.js new file mode 100644 index 0000000000..b76d3f54aa --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js/src/app/confirm.component.js @@ -0,0 +1,75 @@ +(function(app) { + + // #docregion + app.ConfirmComponent = ConfirmComponent; + + ConfirmComponent.annotations = [ + new ng.core.Component({ + selector: 'app-confirm', + templateUrl: 'app/confirm.component.html', + inputs: [ + 'okMsg', + 'notOkMsg: cancelMsg' + ], + outputs: [ + 'ok', + 'notOk: cancel' + ] + }) + ]; + + function ConfirmComponent() { + this.ok = new ng.core.EventEmitter(); + this.notOk = new ng.core.EventEmitter(); + } + + ConfirmComponent.prototype.onOkClick = function() { + this.ok.emit(true); + } + + ConfirmComponent.prototype.onNotOkClick = function() { + this.notOk.emit(true); + } + // #enddocregion + +})(window.app = window.app || {}); + +/////// DSL version //////// + +(function(app) { + + var old = app.ConfirmComponent; + + // #docregion dsl + app.ConfirmComponent = ng.core.Component({ + selector: 'app-confirm-dsl', + templateUrl: 'app/confirm.component.html', + inputs: [ + 'okMsg', + 'notOkMsg: cancelMsg' + ], + outputs: [ + 'ok', + 'notOk: cancel' + ] + }) + .Class({ + constructor: function ConfirmComponent() { + this.ok = new ng.core.EventEmitter(); + this.notOk = new ng.core.EventEmitter(); + }, + + onOkClick: function() { + this.ok.emit(true); + }, + + onNotOkClick: function() { + this.notOk.emit(true); + } + }); + // #enddocregion dsl + + app.ConfirmDslComponent = app.ConfirmComponent; + app.ConfirmComponent = old; + +})(window.app = window.app || {}); diff --git a/aio/content/examples/cb-ts-to-js/js/src/app/data.service.js b/aio/content/examples/cb-ts-to-js/js/src/app/data.service.js new file mode 100644 index 0000000000..643bb57dca --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js/src/app/data.service.js @@ -0,0 +1,10 @@ +(function(app) { + + app.DataService = DataService; + function DataService() { } + + DataService.prototype.getHeroName = function() { + return 'Windstorm'; + }; + +})(window.app = window.app || {}); diff --git a/aio/content/examples/cb-ts-to-js/js/src/app/hero-di-inject-additional.component.js b/aio/content/examples/cb-ts-to-js/js/src/app/hero-di-inject-additional.component.js new file mode 100644 index 0000000000..450cc53847 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js/src/app/hero-di-inject-additional.component.js @@ -0,0 +1,36 @@ +(function(app) { + + var old = app.HeroComponent; + + app.HeroComponent = HeroComponent; + + HeroComponent.annotations = [ + new ng.core.Component({ + selector: 'hero-di-inject-additional', + template: '' + }) + ]; + + function HeroComponent() {} + + app.HeroDIInjectAdditionalComponent = app.HeroComponent; + app.HeroComponent = old; + +})(window.app = window.app || {}); + +////// DSL Version ///////// +(function(app) { + + var old = app.HeroComponent; + + app.HeroComponent = ng.core.Component({ + selector: 'hero-di-inject-additional-dsl', + template: '' + }).Class({ + constructor: function HeroComponent() { } + }); + + app.HeroDIInjectAdditionalDslComponent = app.HeroComponent; + app.HeroComponent = old; + +})(window.app = window.app || {}); diff --git a/aio/content/examples/cb-ts-to-js/js/src/app/hero-di-inject.component.js b/aio/content/examples/cb-ts-to-js/js/src/app/hero-di-inject.component.js new file mode 100644 index 0000000000..879365208c --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js/src/app/hero-di-inject.component.js @@ -0,0 +1,51 @@ +(function(app) { + + var old = app.HeroComponent; + + // #docregion + app.HeroComponent = HeroComponent; + + HeroComponent.annotations = [ + new ng.core.Component({ + selector: 'hero-di-inject', + template: '

    Hero: {{name}}

    ' + }) + ]; + + HeroComponent.parameters = [ 'heroName' ]; + + function HeroComponent(name) { + this.name = name; + } + // #enddocregion + + app.HeroDIInjectComponent = app.HeroComponent; + app.HeroComponent = old; + +})(window.app = window.app || {}); + +/////// DSL version //////// + +(function(app) { + + var old = app.HeroComponent; + + // #docregion dsl + app.HeroComponent = ng.core.Component({ + selector: 'hero-di-inject-dsl', + template: '

    Hero: {{name}}

    ' + }) + .Class({ + constructor: [ + new ng.core.Inject('heroName'), + function HeroComponent(name) { + this.name = name; + } + ] + }); + // #enddocregion dsl + + app.HeroDIInjectDslComponent = app.HeroComponent; + app.HeroComponent = old; + +})(window.app = window.app || {}); diff --git a/aio/content/examples/cb-ts-to-js/js/src/app/hero-di.component.js b/aio/content/examples/cb-ts-to-js/js/src/app/hero-di.component.js new file mode 100644 index 0000000000..2f49a85079 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js/src/app/hero-di.component.js @@ -0,0 +1,51 @@ +(function(app) { + + var old = app.HeroComponent; + + // #docregion + app.HeroComponent = HeroComponent; + + HeroComponent.annotations = [ + new ng.core.Component({ + selector: 'hero-di', + template: '

    Hero: {{name}}

    ' + }) + ]; + + HeroComponent.parameters = [ app.DataService ]; + + function HeroComponent(dataService) { + this.name = dataService.getHeroName(); + } + // #enddocregion + + app.HeroDIComponent = app.HeroComponent; + app.HeroComponent = old; + +})(window.app = window.app || {}); + +////// DSL Version ///// + +(function(app) { + + var old = app.HeroComponent; + + // #docregion dsl + app.HeroComponent = ng.core.Component({ + selector: 'hero-di-dsl', + template: '

    Hero: {{name}}

    ' + }) + .Class({ + constructor: [ + app.DataService, + function HeroComponent(service) { + this.name = service.getHeroName(); + } + ] + }); + // #enddocregion dsl + + app.HeroDIDslComponent = app.HeroComponent; + app.HeroComponent = old; + +})(window.app = window.app || {}); diff --git a/aio/content/examples/cb-ts-to-js/js/src/app/hero-host.component.js b/aio/content/examples/cb-ts-to-js/js/src/app/hero-host.component.js new file mode 100644 index 0000000000..b73e50aae0 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js/src/app/hero-host.component.js @@ -0,0 +1,107 @@ +(function(app) { + + var old = app.HeroComponent + + // #docregion + app.HeroComponent = HeroComponent; + + HeroComponent.annotations = [ + new ng.core.Component({ + selector: 'hero-host', + template: + '

    Hero Host

    ' + + '
    Heading clicks: {{clicks}}
    ', + host: { + // HostBindings to the element + '[title]': 'title', + '[class.heading]': 'headingClass', + '(click)': 'clicked()', + + // HostListeners on the entire element + '(mouseenter)': 'enter($event)', + '(mouseleave)': 'leave($event)' + }, + // Styles within (but excluding) the element + styles: ['.active {background-color: yellow;}'] + }) + ]; + + function HeroComponent() { + this.clicks = 0; + this.headingClass = true; + this.title = 'Hero Host Tooltip content'; + } + + HeroComponent.prototype.clicked = function() { + this.clicks += 1; + } + + HeroComponent.prototype.enter = function(event) { + this.active = true; + this.headingClass = false; + } + + HeroComponent.prototype.leave = function(event) { + this.active = false; + this.headingClass = true; + } + // #enddocregion + + app.HeroHostComponent = app.HeroComponent; + app.HeroComponent = old; + +})(window.app = window.app || {}); + +//// DSL Version //// + +(function(app) { + + var old = app.HeroComponent; + + // #docregion dsl + app.HeroComponent = ng.core.Component({ + selector: 'hero-host-dsl', + template: ` +

    Hero Host (DSL)

    +
    Heading clicks: {{clicks}}
    + `, + host: { + // HostBindings to the element + '[title]': 'title', + '[class.heading]': 'headingClass', + '(click)': 'clicked()', + + // HostListeners on the entire element + '(mouseenter)': 'enter($event)', + '(mouseleave)': 'leave($event)' + }, + // Styles within (but excluding) the element + styles: ['.active {background-color: coral;}'] + }) + .Class({ + constructor: function HeroComponent() { + this.clicks = 0; + this.headingClass = true; + this.title = 'Hero Host Tooltip DSL content'; + }, + + clicked() { + this.clicks += 1; + }, + + enter(event) { + this.active = true; + this.headingClass = false; + }, + + leave(event) { + this.active = false; + this.headingClass = true; + } + }); + // #enddocregion dsl + + app.HeroHostDslComponent = app.HeroComponent; + app.HeroComponent = old; + +})(window.app = window.app || {}); diff --git a/aio/content/examples/cb-ts-to-js/js/src/app/hero-io-dsl.component.html b/aio/content/examples/cb-ts-to-js/js/src/app/hero-io-dsl.component.html new file mode 100644 index 0000000000..c8023ccb45 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js/src/app/hero-io-dsl.component.html @@ -0,0 +1,7 @@ + + +OK clicked +Cancel clicked diff --git a/aio/content/examples/cb-ts-to-js/js/src/app/hero-io.component.html b/aio/content/examples/cb-ts-to-js/js/src/app/hero-io.component.html new file mode 100644 index 0000000000..215ddccf92 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js/src/app/hero-io.component.html @@ -0,0 +1,7 @@ + + +OK clicked +Cancel clicked diff --git a/aio/content/examples/cb-ts-to-js/js/src/app/hero-io.component.js b/aio/content/examples/cb-ts-to-js/js/src/app/hero-io.component.js new file mode 100644 index 0000000000..b09208ce68 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js/src/app/hero-io.component.js @@ -0,0 +1,52 @@ +(function(app) { + + var old = app.HeroComponent + + app.HeroComponent = HeroComponent; + + HeroComponent.annotations = [ + new ng.core.Component({ + selector: 'hero-io', + templateUrl: 'app/hero-io.component.html' + }) + ]; + + function HeroComponent() { } + + HeroComponent.prototype.onOk = function() { + this.okClicked = true; + } + + HeroComponent.prototype.onCancel = function() { + this.cancelClicked = true; + } + + app.HeroIOComponent = app.HeroComponent; + app.HeroComponent = old; + +})(window.app = window.app || {}); + +///// DSL Version //// + +(function(app) { + + var old = app.HeroComponent + + app.HeroComponent = ng.core.Component({ + selector: 'hero-io-dsl', + templateUrl: 'app/hero-io-dsl.component.html' + }) + .Class({ + constructor: function HeroComponent() { }, + onOk: function() { + this.okClicked = true; + }, + onCancel: function() { + this.cancelClicked = true; + } + }); + + app.HeroIODslComponent = app.HeroComponent; + app.HeroComponent = old; + +})(window.app = window.app || {}); diff --git a/aio/content/examples/cb-ts-to-js/js/src/app/hero-lifecycle.component.js b/aio/content/examples/cb-ts-to-js/js/src/app/hero-lifecycle.component.js new file mode 100644 index 0000000000..2a68288f92 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js/src/app/hero-lifecycle.component.js @@ -0,0 +1,52 @@ +// #docplaster +(function(app) { + + var old = app.HeroComponent; + + // #docregion + app.HeroComponent = HeroComponent; + + HeroComponent.annotations = [ + new ng.core.Component({ + selector: 'hero-lifecycle', + template: '

    Hero: {{name}}

    ' + }) + ]; + + function HeroComponent() { } + + HeroComponent.prototype.ngOnInit = function() { + // todo: fetch from server async + setTimeout(() => this.name = 'Windstorm', 0); + }; + // #enddocregion + + app.HeroLifecycleComponent = app.HeroComponent; + app.HeroComponent = old; + +})(window.app = window.app || {}); + +/////// DSL version //// + +(function(app) { + + var old = app.HeroComponent; + + // #docregion dsl + app.HeroComponent = ng.core.Component({ + selector: 'hero-lifecycle-dsl', + template: '

    Hero: {{name}}

    ' + }) + .Class({ + constructor: function HeroComponent() { }, + ngOnInit: function() { + // todo: fetch from server async + setTimeout(() => this.name = 'Windstorm', 0); + } + }); + // #enddocregion dsl + + app.HeroLifecycleDslComponent = app.HeroComponent; + app.HeroComponent = old; + +})(window.app = window.app || {}); diff --git a/aio/content/examples/cb-ts-to-js/js/src/app/hero-queries.component.js b/aio/content/examples/cb-ts-to-js/js/src/app/hero-queries.component.js new file mode 100644 index 0000000000..5e8de58d41 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js/src/app/hero-queries.component.js @@ -0,0 +1,92 @@ +(function(app) { + + app.heroQueries = app.heroQueries || {}; + + app.heroQueries.ContentChildComponent = ng.core.Component({ + selector: 'content-child', + template: + '' + + 'Active' + + '' + }).Class({ + constructor: function ContentChildComponent() { + this.active = false; + }, + + activate: function() { + this.active = !this.active; + } + }); + + //////////////////// + + // #docregion content + app.heroQueries.ViewChildComponent = ng.core.Component({ + selector: 'view-child', + template: + '

    ' + + '{{hero.name}} ' + + '' + + '

    ', + styles: ['.active {font-weight: bold; background-color: skyblue;}'], + inputs: ['hero'], + queries: { + content: new ng.core.ContentChild(app.heroQueries.ContentChildComponent) + } + }) + .Class({ + constructor: function HeroQueriesHeroComponent() { + this.active = false; + }, + + activate: function() { + this.active = !this.active; + this.content.activate(); + } + }); + // #enddocregion content + + //////////////////// + + // #docregion view + app.heroQueries.HeroQueriesComponent = ng.core.Component({ + selector: 'hero-queries', + template: + '' + + '' + + '' + + '', + queries: { + views: new ng.core.ViewChildren(app.heroQueries.ViewChildComponent) + } + }) + .Class({ + constructor: function HeroQueriesComponent() { + this.active = false; + this.heroData = [ + {id: 1, name: 'Windstorm'}, + {id: 2, name: 'LaughingGas'} + ]; + }, + + activate: function() { + this.active = !this.active; + this.views.forEach(function(view) { + view.activate(); + }); + }, + }); + + // #docregion defined-property + // add prototype property w/ getter outside the DSL + var proto = app.heroQueries.HeroQueriesComponent.prototype; + Object.defineProperty(proto, "buttonLabel", { + get: function () { + return this.active ? 'Deactivate' : 'Activate'; + }, + enumerable: true + }); + // #enddocregion defined-property + // #enddocregion view + +})(window.app = window.app || {}); diff --git a/aio/content/examples/cb-ts-to-js/js/src/app/hero-title.component.html b/aio/content/examples/cb-ts-to-js/js/src/app/hero-title.component.html new file mode 100644 index 0000000000..164683cb7c --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js/src/app/hero-title.component.html @@ -0,0 +1,4 @@ + +

    {{titlePrefix}} {{title}}

    + +

    {{ msg }}

    diff --git a/aio/content/examples/cb-ts-to-js/js/src/app/hero-title.component.js b/aio/content/examples/cb-ts-to-js/js/src/app/hero-title.component.js new file mode 100644 index 0000000000..f0770e1228 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js/src/app/hero-title.component.js @@ -0,0 +1,64 @@ +(function(app) { + + // #docregion + app.HeroTitleComponent = HeroTitleComponent; + + // #docregion templateUrl + HeroTitleComponent.annotations = [ + new ng.core.Component({ + selector: 'hero-title', + templateUrl: 'app/hero-title.component.html' + }) + ]; + // #enddocregion templateUrl + + function HeroTitleComponent(titlePrefix, title) { + this.titlePrefix = titlePrefix; + this.title = title; + this.msg = ''; + } + + HeroTitleComponent.prototype.ok = function() { + this.msg = 'OK!'; + } + + HeroTitleComponent.parameters = [ + [new ng.core.Optional(), new ng.core.Inject('titlePrefix')], + [new ng.core.Attribute('title')] + ]; + // #enddocregion + +})(window.app = window.app || {}); + +////////// DSL version //////////// + +(function(app) { + + var old = app.HeroTitleComponent; + + // #docregion dsl + app.HeroTitleComponent = ng.core.Component({ + selector: 'hero-title-dsl', + templateUrl: 'app/hero-title.component.html' + }) + .Class({ + constructor: [ + [ new ng.core.Optional(), new ng.core.Inject('titlePrefix') ], + new ng.core.Attribute('title'), + function HeroTitleComponent(titlePrefix, title) { + this.titlePrefix = titlePrefix; + this.title = title; + this.msg = ''; + } + ], + + ok: function() { + this.msg = 'OK!'; + } + }); + // #enddocregion dsl + + app.HeroTitleDslComponent = app.HeroTitleComponent; + app.HeroTitleComponent = old; + +})(window.app = window.app || {}); diff --git a/aio/content/examples/cb-ts-to-js/js/src/app/hero.component.js b/aio/content/examples/cb-ts-to-js/js/src/app/hero.component.js new file mode 100644 index 0000000000..e1407b2635 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js/src/app/hero.component.js @@ -0,0 +1,53 @@ +// #docplaster +(function(app) { + +// #docregion +// #docregion appexport +// #docregion metadata +app.HeroComponent = HeroComponent; // "export" + +HeroComponent.annotations = [ + new ng.core.Component({ + selector: 'hero-view', + template: '

    {{title}}: {{getName()}}

    ' + }) +]; + +// #docregion constructorproto +function HeroComponent() { + this.title = "Hero Detail"; +} + +HeroComponent.prototype.getName = function() { return 'Windstorm'; }; +// #enddocregion constructorproto + +// #enddocregion metadata +// #enddocregion appexport +// #enddocregion + +})(window.app = window.app || {}); + +//////////// DSL version /////////// + +(function(app) { + + var old = app.HeroComponent; + + // #docregion dsl + app.HeroComponent = ng.core.Component({ + selector: 'hero-view-dsl', + template: '

    {{title}}: {{getName()}}

    ', + }) + .Class({ + constructor: function HeroComponent() { + this.title = "Hero Detail"; + }, + + getName: function() { return 'Windstorm'; } + }); + // #enddocregion dsl + + app.HeroDslComponent = app.HeroComponent; + app.HeroComponent = old; + +})(window.app = window.app || {}); diff --git a/aio/content/examples/cb-ts-to-js/js/src/index.html b/aio/content/examples/cb-ts-to-js/js/src/index.html new file mode 100644 index 0000000000..00338aa55a --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js/src/index.html @@ -0,0 +1,43 @@ + + + + + + + TypeScript to JavaScript + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Loading... + + + diff --git a/aio/content/examples/cb-ts-to-js/js/src/main.js b/aio/content/examples/cb-ts-to-js/js/src/main.js new file mode 100644 index 0000000000..fd3e737c9e --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/js/src/main.js @@ -0,0 +1,9 @@ +(function(app) { + +var platformBrowserDynamic = ng.platformBrowserDynamic.platformBrowserDynamic; + +document.addEventListener('DOMContentLoaded', function() { + platformBrowserDynamic().bootstrapModule(app.AppModule); +}); + +})(window.app = window.app || {}); diff --git a/aio/content/examples/cb-ts-to-js/ts/example-config.json b/aio/content/examples/cb-ts-to-js/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/cb-ts-to-js/ts/plnkr.json b/aio/content/examples/cb-ts-to-js/ts/plnkr.json new file mode 100644 index 0000000000..447fc5f605 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/ts/plnkr.json @@ -0,0 +1,9 @@ +{ + "description": "TypeScript to JavaScript", + "basePath": "src/", + "files":[ + "!**/*.d.ts", + "!**/*.js" + ], + "tags":["cookbook"] +} diff --git a/aio/content/examples/cb-ts-to-js/ts/plnkr.no-link.html b/aio/content/examples/cb-ts-to-js/ts/plnkr.no-link.html new file mode 100644 index 0000000000..56a3e2e5c4 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/ts/plnkr.no-link.html @@ -0,0 +1,652 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/cb-ts-to-js/ts/src/app/app.component.html b/aio/content/examples/cb-ts-to-js/ts/src/app/app.component.html new file mode 100644 index 0000000000..995645073a --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/ts/src/app/app.component.html @@ -0,0 +1,31 @@ + +

    {{title}}

    +Classes and Class Metadata
    +Input and Output Decorators
    +Dependency Injection
    +Host Metadata
    +View and Child Metadata
    + +
    +

    Classes and Class Metadata

    + + + +
    +

    Input and Output Metadata

    + + +
    +

    Dependency Injection

    + + + + +
    +

    Host Metadata

    + + + +
    +

    View and Child Metadata

    + diff --git a/aio/content/examples/cb-ts-to-js/ts/src/app/app.component.ts b/aio/content/examples/cb-ts-to-js/ts/src/app/app.component.ts new file mode 100644 index 0000000000..8e7afad0df --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/ts/src/app/app.component.ts @@ -0,0 +1,15 @@ +import { Component } from '@angular/core'; + +@Component({ + moduleId: module.id, + selector: 'my-app', + templateUrl: './app.component.html', + styles: [ + // See hero-di-inject-additional.component + 'hero-host, hero-host-meta { border: 1px dashed black; display: block; padding: 4px;}', + '.heading {font-style: italic}' + ] +}) +export class AppComponent { + title = 'TypeScript'; +} diff --git a/aio/content/examples/cb-ts-to-js/ts/src/app/app.module.ts b/aio/content/examples/cb-ts-to-js/ts/src/app/app.module.ts new file mode 100644 index 0000000000..992c3c3514 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/ts/src/app/app.module.ts @@ -0,0 +1,56 @@ +/* tslint:disable-next-line:no-unused-variable */ +import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; + +import { AppComponent } from './app.component'; +import { ConfirmComponent } from './confirm.component'; +// #docregion appimport +import { HeroComponent } from './hero.component'; +// #enddocregion appimport +import { HeroComponent as HeroDIComponent } from './hero-di.component'; +import { HeroComponent as HeroDIInjectComponent } from './hero-di-inject.component'; +import { HeroComponent as HeroDIInjectAdditionalComponent } from './hero-di-inject-additional.component'; +import { HeroHostComponent } from './hero-host.component'; +import { HeroHostMetaComponent } from './hero-host-meta.component'; +import { HeroIOComponent } from './hero-io.component'; +import { HeroComponent as HeroLifecycleComponent } from './hero-lifecycle.component'; +import { HeroQueriesComponent, ViewChildComponent, ContentChildComponent } from './hero-queries.component'; +import { HeroTitleComponent } from './hero-title.component'; + +import { DataService } from './data.service'; + +@NgModule({ + imports: [ + BrowserModule + ], + declarations: [ + AppComponent, + ConfirmComponent, + HeroComponent, + HeroDIComponent, + HeroDIInjectComponent, + HeroDIInjectAdditionalComponent, + HeroHostComponent, HeroHostMetaComponent, + HeroIOComponent, + HeroLifecycleComponent, + HeroQueriesComponent, ViewChildComponent, ContentChildComponent, + HeroTitleComponent + ], + providers: [ + DataService, + { provide: 'heroName', useValue: 'Windstorm' } + ], + bootstrap: [ AppComponent ], + + // schemas: [ NO_ERRORS_SCHEMA ] // helpful for debugging! +}) +export class AppModule { } + +/* tslint:disable no-unused-variable */ +// #docregion ng2import +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { + LocationStrategy, + HashLocationStrategy +} from '@angular/common'; +// #enddocregion ng2import diff --git a/aio/content/examples/cb-ts-to-js/ts/src/app/confirm.component.html b/aio/content/examples/cb-ts-to-js/ts/src/app/confirm.component.html new file mode 100644 index 0000000000..45275d218a --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/ts/src/app/confirm.component.html @@ -0,0 +1,6 @@ + + diff --git a/aio/content/examples/cb-ts-to-js/ts/src/app/confirm.component.ts b/aio/content/examples/cb-ts-to-js/ts/src/app/confirm.component.ts new file mode 100644 index 0000000000..c9be28c44c --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/ts/src/app/confirm.component.ts @@ -0,0 +1,22 @@ +import { Component, EventEmitter, Input, Output } from '@angular/core'; + +// #docregion +@Component({ + moduleId: module.id, + selector: 'app-confirm', + templateUrl: './confirm.component.html' +}) +export class ConfirmComponent { + @Input() okMsg = ''; + @Input('cancelMsg') notOkMsg = ''; + @Output() ok = new EventEmitter(); + @Output('cancel') notOk = new EventEmitter(); + + onOkClick() { + this.ok.emit(true); + } + onNotOkClick() { + this.notOk.emit(true); + } +} +// #enddocregion diff --git a/aio/content/examples/cb-ts-to-js/ts/src/app/data.service.ts b/aio/content/examples/cb-ts-to-js/ts/src/app/data.service.ts new file mode 100644 index 0000000000..cd7f9e1aae --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/ts/src/app/data.service.ts @@ -0,0 +1,10 @@ +import { Injectable } from '@angular/core'; + +@Injectable() +export class DataService { + constructor() { } + + getHeroName() { + return 'Windstorm'; + } +} diff --git a/aio/content/examples/cb-ts-to-js/ts/src/app/hero-di-inject-additional.component.ts b/aio/content/examples/cb-ts-to-js/ts/src/app/hero-di-inject-additional.component.ts new file mode 100644 index 0000000000..ec460a9dbc --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/ts/src/app/hero-di-inject-additional.component.ts @@ -0,0 +1,7 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'hero-di-inject-additional', + template: `` +}) +export class HeroComponent { } diff --git a/aio/content/examples/cb-ts-to-js/ts/src/app/hero-di-inject.component.ts b/aio/content/examples/cb-ts-to-js/ts/src/app/hero-di-inject.component.ts new file mode 100644 index 0000000000..c583a1b0f6 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/ts/src/app/hero-di-inject.component.ts @@ -0,0 +1,11 @@ +import { Component, Inject } from '@angular/core'; + +// #docregion +@Component({ + selector: 'hero-di-inject', + template: `

    Hero: {{name}}

    ` +}) +export class HeroComponent { + constructor(@Inject('heroName') private name: string) { } +} +// #enddocregion diff --git a/aio/content/examples/cb-ts-to-js/ts/src/app/hero-di.component.ts b/aio/content/examples/cb-ts-to-js/ts/src/app/hero-di.component.ts new file mode 100644 index 0000000000..3a17abd281 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/ts/src/app/hero-di.component.ts @@ -0,0 +1,15 @@ +// #docregion +import { Component } from '@angular/core'; +import { DataService } from './data.service'; + +@Component({ + selector: 'hero-di', + template: `

    Hero: {{name}}

    ` +}) +export class HeroComponent { + name = ''; + constructor(dataService: DataService) { + this.name = dataService.getHeroName(); + } +} +// #enddocregion diff --git a/aio/content/examples/cb-ts-to-js/ts/src/app/hero-host-meta.component.ts b/aio/content/examples/cb-ts-to-js/ts/src/app/hero-host-meta.component.ts new file mode 100644 index 0000000000..fefe4a5470 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/ts/src/app/hero-host-meta.component.ts @@ -0,0 +1,44 @@ +import { Component } from '@angular/core'; + +// #docregion +@Component({ + selector: 'hero-host-meta', + template: ` +

    Hero Host in Metadata

    +
    Heading clicks: {{clicks}}
    + `, + host: { + // HostBindings to the element + '[title]': 'title', + '[class.heading]': 'headingClass', + + // HostListeners on the entire element + '(click)': 'clicked()', + '(mouseenter)': 'enter($event)', + '(mouseleave)': 'leave($event)' + }, + // Styles within (but excluding) the element + styles: ['.active {background-color: coral;}'] +}) +export class HeroHostMetaComponent { + title = 'Hero Host in Metadata Tooltip'; + headingClass = true; + + active = false; + clicks = 0; + + clicked() { + this.clicks += 1; + } + + enter(event: Event) { + this.active = true; + this.headingClass = false; + } + + leave(event: Event) { + this.active = false; + this.headingClass = true; + } +} +// #enddocregion diff --git a/aio/content/examples/cb-ts-to-js/ts/src/app/hero-host.component.ts b/aio/content/examples/cb-ts-to-js/ts/src/app/hero-host.component.ts new file mode 100644 index 0000000000..e8d72233c8 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/ts/src/app/hero-host.component.ts @@ -0,0 +1,39 @@ +import { Component, HostBinding, HostListener } from '@angular/core'; + +// #docregion +@Component({ + selector: 'hero-host', + template: ` +

    Hero Host in Decorators

    +
    Heading clicks: {{clicks}}
    + `, + // Styles within (but excluding) the element + styles: ['.active {background-color: yellow;}'] +}) +export class HeroHostComponent { + // HostBindings to the element + @HostBinding() title = 'Hero Host in Decorators Tooltip'; + @HostBinding('class.heading') headingClass = true; + + active = false; + clicks = 0; + + // HostListeners on the entire element + @HostListener('click') + clicked() { + this.clicks += 1; + } + + @HostListener('mouseenter', ['$event']) + enter(event: Event) { + this.active = true; + this.headingClass = false; + } + + @HostListener('mouseleave', ['$event']) + leave(event: Event) { + this.active = false; + this.headingClass = true; + } +} +// #enddocregion diff --git a/aio/content/examples/cb-ts-to-js/ts/src/app/hero-io.component.ts b/aio/content/examples/cb-ts-to-js/ts/src/app/hero-io.component.ts new file mode 100644 index 0000000000..4b36411e78 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/ts/src/app/hero-io.component.ts @@ -0,0 +1,26 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'hero-io', + template: ` + + + OK clicked + Cancel clicked + ` +}) +export class HeroIOComponent { + okClicked = false; + cancelClicked = false; + + onOk() { + this.okClicked = true; + } + + onCancel() { + this.cancelClicked = true; + } +} diff --git a/aio/content/examples/cb-ts-to-js/ts/src/app/hero-lifecycle.component.ts b/aio/content/examples/cb-ts-to-js/ts/src/app/hero-lifecycle.component.ts new file mode 100644 index 0000000000..2629c85a1a --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/ts/src/app/hero-lifecycle.component.ts @@ -0,0 +1,14 @@ +// #docregion +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'hero-lifecycle', + template: `

    Hero: {{name}}

    ` +}) +export class HeroComponent implements OnInit { + name: string; + ngOnInit() { + // todo: fetch from server async + setTimeout(() => this.name = 'Windstorm', 0); + } +} diff --git a/aio/content/examples/cb-ts-to-js/ts/src/app/hero-queries.component.ts b/aio/content/examples/cb-ts-to-js/ts/src/app/hero-queries.component.ts new file mode 100644 index 0000000000..8b2d91ea85 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/ts/src/app/hero-queries.component.ts @@ -0,0 +1,83 @@ +import { + Component, + ContentChild, + Input, + QueryList, + ViewChildren +} from '@angular/core'; + +@Component({ + selector: 'content-child', + template: ` + + Active + ` +}) +export class ContentChildComponent { + active = false; + + activate() { + this.active = !this.active; + } +} + +//////////////////// + +// #docregion content +@Component({ + selector: 'view-child', + template: ` +

    + {{hero.name}} + +

    `, + styles: ['.active {font-weight: bold; background-color: skyblue;}'] +}) +export class ViewChildComponent { + @Input() hero: any; + active = false; + + @ContentChild(ContentChildComponent) content: ContentChildComponent; + + activate() { + this.active = !this.active; + this.content.activate(); + } +} +// #enddocregion content + +//////////////////// + +// #docregion view +@Component({ + selector: 'hero-queries', + template: ` + + + + + ` +}) +export class HeroQueriesComponent { + active = false; + heroData = [ + {id: 1, name: 'Windstorm'}, + {id: 2, name: 'LaughingGas'} + ]; + + @ViewChildren(ViewChildComponent) views: QueryList; + + activate() { + this.active = !this.active; + this.views.forEach( + view => view.activate() + ); + } + + // #docregion defined-property + get buttonLabel() { + return this.active ? 'Deactivate' : 'Activate'; + } + // #enddocregion defined-property +} +// #enddocregion view diff --git a/aio/content/examples/cb-ts-to-js/ts/src/app/hero-title.component.html b/aio/content/examples/cb-ts-to-js/ts/src/app/hero-title.component.html new file mode 100644 index 0000000000..164683cb7c --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/ts/src/app/hero-title.component.html @@ -0,0 +1,4 @@ + +

    {{titlePrefix}} {{title}}

    + +

    {{ msg }}

    diff --git a/aio/content/examples/cb-ts-to-js/ts/src/app/hero-title.component.ts b/aio/content/examples/cb-ts-to-js/ts/src/app/hero-title.component.ts new file mode 100644 index 0000000000..e8e68684e2 --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/ts/src/app/hero-title.component.ts @@ -0,0 +1,22 @@ +import { Attribute, Component, Inject, Optional } from '@angular/core'; + +// #docregion +// #docregion templateUrl +@Component({ + moduleId: module.id, + selector: 'hero-title', + templateUrl: './hero-title.component.html' +}) +// #enddocregion templateUrl +export class HeroTitleComponent { + msg: string = ''; + constructor( + @Inject('titlePrefix') @Optional() private titlePrefix: string, + @Attribute('title') private title: string + ) { } + + ok() { + this.msg = 'OK!'; + } +} +// #enddocregion diff --git a/aio/content/examples/cb-ts-to-js/ts/src/app/hero.component.ts b/aio/content/examples/cb-ts-to-js/ts/src/app/hero.component.ts new file mode 100644 index 0000000000..2976ec605e --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/ts/src/app/hero.component.ts @@ -0,0 +1,15 @@ +// #docregion +// #docregion metadata +import { Component } from '@angular/core'; + +@Component({ + selector: 'hero-view', + template: '

    {{title}}: {{getName()}}

    ' +}) +// #docregion appexport, class +export class HeroComponent { + title = 'Hero Detail'; + getName() {return 'Windstorm'; } +} +// #enddocregion appexport, class +// #enddocregion metadata diff --git a/aio/content/examples/cb-ts-to-js/ts/src/index.html b/aio/content/examples/cb-ts-to-js/ts/src/index.html new file mode 100644 index 0000000000..d9ad1f7aef --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/ts/src/index.html @@ -0,0 +1,26 @@ + + + + + + + + TypeScript to JavaScript + + + + + + + + + + + + + Loading... + + + diff --git a/aio/content/examples/cb-ts-to-js/ts/src/main.ts b/aio/content/examples/cb-ts-to-js/ts/src/main.ts new file mode 100644 index 0000000000..f22933ba8e --- /dev/null +++ b/aio/content/examples/cb-ts-to-js/ts/src/main.ts @@ -0,0 +1,4 @@ +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/cb-visual-studio-2015/ts/.gitignore b/aio/content/examples/cb-visual-studio-2015/ts/.gitignore new file mode 100644 index 0000000000..ca3f2dbd5e --- /dev/null +++ b/aio/content/examples/cb-visual-studio-2015/ts/.gitignore @@ -0,0 +1 @@ +!tsconfig.json diff --git a/aio/content/examples/cb-visual-studio-2015/ts/tsconfig.json b/aio/content/examples/cb-visual-studio-2015/ts/tsconfig.json new file mode 100644 index 0000000000..2624488890 --- /dev/null +++ b/aio/content/examples/cb-visual-studio-2015/ts/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "target": "es5", + "module": "commonjs", + "moduleResolution": "node", + "sourceMap": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "removeComments": false, + "noImplicitAny": true, + "suppressImplicitAnyIndexErrors": true, + "typeRoots": [ + "node_modules/@types" + ] + }, + "compileOnSave": true +} diff --git a/aio/content/examples/cli-quickstart/e2e-spec.ts b/aio/content/examples/cli-quickstart/e2e-spec.ts new file mode 100644 index 0000000000..59816e13c2 --- /dev/null +++ b/aio/content/examples/cli-quickstart/e2e-spec.ts @@ -0,0 +1,14 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by } from 'protractor'; + +describe('cli-quickstart App', () => { + beforeEach(() => { + return browser.get('/'); + }); + + it('should display message saying app works', () => { + let pageTitle = element(by.css('app-root h1')).getText(); + expect(pageTitle).toEqual('My First Angular App'); + }); +}); diff --git a/aio/content/examples/cli-quickstart/ts/.gitignore b/aio/content/examples/cli-quickstart/ts/.gitignore new file mode 100644 index 0000000000..fd172dea98 --- /dev/null +++ b/aio/content/examples/cli-quickstart/ts/.gitignore @@ -0,0 +1,42 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# compiled output +/dist +/tmp + +# dependencies +/node_modules + +# IDEs and editors +/.idea +.project +.classpath +.c9/ +*.launch +.settings/ + +# IDE - VSCode +.vscode/ +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + +# misc +/.sass-cache +/connect.lock +/coverage/* +/libpeerconnection.log +npm-debug.log +testem.log +/typings + +# e2e +/e2e/*.js +/e2e/*.map + +#System Files +.DS_Store +Thumbs.db + +!src/styles.css diff --git a/aio/content/examples/cli-quickstart/ts/README.md b/aio/content/examples/cli-quickstart/ts/README.md new file mode 100644 index 0000000000..ae9b1a3643 --- /dev/null +++ b/aio/content/examples/cli-quickstart/ts/README.md @@ -0,0 +1,31 @@ +# MyApp + +This project was generated with [angular-cli](https://github.com/angular/angular-cli) version 1.0.0-beta.25.5. + +## Development server +Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files. + +## Code scaffolding + +Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive/pipe/service/class/module`. + +## Build + +Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `-prod` flag for a production build. + +## Running unit tests + +Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). + +## Running end-to-end tests + +Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/). +Before running the tests make sure you are serving the app via `ng serve`. + +## Deploying to GitHub Pages + +Run `ng github-pages:deploy` to deploy to GitHub Pages. + +## Further help + +To get more help on the `angular-cli` use `ng help` or go check out the [Angular-CLI README](https://github.com/angular/angular-cli/blob/master/README.md). diff --git a/aio/content/examples/cli-quickstart/ts/angular-cli.json b/aio/content/examples/cli-quickstart/ts/angular-cli.json new file mode 100644 index 0000000000..9f23ed85fb --- /dev/null +++ b/aio/content/examples/cli-quickstart/ts/angular-cli.json @@ -0,0 +1,59 @@ +{ + "project": { + "version": "1.0.0-beta.25.5", + "name": "my-app" + }, + "apps": [ + { + "root": "src", + "outDir": "dist", + "assets": [ + "assets", + "favicon.ico" + ], + "index": "index.html", + "main": "main.ts", + "test": "test.ts", + "tsconfig": "tsconfig.json", + "prefix": "app", + "mobile": false, + "styles": [ + "styles.css" + ], + "scripts": [], + "environments": { + "source": "environments/environment.ts", + "dev": "environments/environment.ts", + "prod": "environments/environment.prod.ts" + } + } + ], + "addons": [], + "packages": [], + "e2e": { + "protractor": { + "config": "./protractor.conf.js" + } + }, + "test": { + "karma": { + "config": "./karma.conf.js" + } + }, + "defaults": { + "styleExt": "css", + "prefixInterfaces": false, + "inline": { + "style": false, + "template": false + }, + "spec": { + "class": false, + "component": true, + "directive": true, + "module": false, + "pipe": true, + "service": true + } + } +} diff --git a/aio/content/examples/cli-quickstart/ts/bs-config.cli.json b/aio/content/examples/cli-quickstart/ts/bs-config.cli.json new file mode 100644 index 0000000000..ac61d35f83 --- /dev/null +++ b/aio/content/examples/cli-quickstart/ts/bs-config.cli.json @@ -0,0 +1,11 @@ +{ + "open": false, + "logLevel": "silent", + "port": 8080, + "server": { + "baseDir": "dist", + "middleware": { + "0": null + } + } +} diff --git a/aio/content/examples/cli-quickstart/ts/e2e/app.e2e-spec.ts b/aio/content/examples/cli-quickstart/ts/e2e/app.e2e-spec.ts new file mode 100644 index 0000000000..4346d120c8 --- /dev/null +++ b/aio/content/examples/cli-quickstart/ts/e2e/app.e2e-spec.ts @@ -0,0 +1,14 @@ +import { MyAppPage } from './app.po'; + +describe('my-app App', function() { + let page: MyAppPage; + + beforeEach(() => { + page = new MyAppPage(); + }); + + it('should display message saying app works', () => { + page.navigateTo(); + expect(page.getParagraphText()).toEqual('app works!'); + }); +}); diff --git a/aio/content/examples/cli-quickstart/ts/e2e/app.po.ts b/aio/content/examples/cli-quickstart/ts/e2e/app.po.ts new file mode 100644 index 0000000000..5d82157326 --- /dev/null +++ b/aio/content/examples/cli-quickstart/ts/e2e/app.po.ts @@ -0,0 +1,11 @@ +import { browser, element, by } from 'protractor'; + +export class MyAppPage { + navigateTo() { + return browser.get('/'); + } + + getParagraphText() { + return element(by.css('app-root h1')).getText(); + } +} diff --git a/aio/content/examples/cli-quickstart/ts/example-config.json b/aio/content/examples/cli-quickstart/ts/example-config.json new file mode 100644 index 0000000000..313764c3c6 --- /dev/null +++ b/aio/content/examples/cli-quickstart/ts/example-config.json @@ -0,0 +1,4 @@ +{ + "build": "build:cli", + "run": "serve:cli" +} diff --git a/aio/content/examples/cli-quickstart/ts/src/app/app.component.css b/aio/content/examples/cli-quickstart/ts/src/app/app.component.css new file mode 100644 index 0000000000..a2b21fae82 --- /dev/null +++ b/aio/content/examples/cli-quickstart/ts/src/app/app.component.css @@ -0,0 +1,6 @@ +/* #docregion */ +h1 { + color: #369; + font-family: Arial, Helvetica, sans-serif; + font-size: 250%; +} diff --git a/aio/content/examples/cli-quickstart/ts/src/app/app.component.html b/aio/content/examples/cli-quickstart/ts/src/app/app.component.html new file mode 100644 index 0000000000..b6931b538a --- /dev/null +++ b/aio/content/examples/cli-quickstart/ts/src/app/app.component.html @@ -0,0 +1,3 @@ +

    + {{title}} +

    diff --git a/aio/content/examples/cli-quickstart/ts/src/app/app.component.spec.ts b/aio/content/examples/cli-quickstart/ts/src/app/app.component.spec.ts new file mode 100644 index 0000000000..72ee705d0b --- /dev/null +++ b/aio/content/examples/cli-quickstart/ts/src/app/app.component.spec.ts @@ -0,0 +1,35 @@ +/* tslint:disable:no-unused-variable */ + +import { TestBed, async } from '@angular/core/testing'; + +import { AppComponent } from './app.component'; + +describe('AppComponent', () => { + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [ + AppComponent + ], + }); + TestBed.compileComponents(); + }); + + it('should create the app', async(() => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.debugElement.componentInstance; + expect(app).toBeTruthy(); + })); + + it(`should have as title 'app works!'`, async(() => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.debugElement.componentInstance; + expect(app.title).toEqual('app works!'); + })); + + it('should render title in a h1 tag', async(() => { + const fixture = TestBed.createComponent(AppComponent); + fixture.detectChanges(); + const compiled = fixture.debugElement.nativeElement; + expect(compiled.querySelector('h1').textContent).toContain('app works!'); + })); +}); diff --git a/aio/content/examples/cli-quickstart/ts/src/app/app.component.ts b/aio/content/examples/cli-quickstart/ts/src/app/app.component.ts new file mode 100644 index 0000000000..4c1b4a9bf7 --- /dev/null +++ b/aio/content/examples/cli-quickstart/ts/src/app/app.component.ts @@ -0,0 +1,16 @@ +// #docregion import +import { Component } from '@angular/core'; +// #enddocregion import + +// #docregion metadata +@Component({ + selector: 'app-root', + templateUrl: './app.component.html', + styleUrls: ['./app.component.css'] +}) +// #enddocregion metadata +// #docregion title, class +export class AppComponent { + title = 'My First Angular App'; +} +// #enddocregion title, class diff --git a/aio/content/examples/cli-quickstart/ts/src/app/app.module.ts b/aio/content/examples/cli-quickstart/ts/src/app/app.module.ts new file mode 100644 index 0000000000..33ec868232 --- /dev/null +++ b/aio/content/examples/cli-quickstart/ts/src/app/app.module.ts @@ -0,0 +1,20 @@ +import { BrowserModule } from '@angular/platform-browser'; +import { NgModule } from '@angular/core'; +import { FormsModule } from '@angular/forms'; +import { HttpModule } from '@angular/http'; + +import { AppComponent } from './app.component'; + +@NgModule({ + declarations: [ + AppComponent + ], + imports: [ + BrowserModule, + FormsModule, + HttpModule + ], + providers: [], + bootstrap: [AppComponent] +}) +export class AppModule { } diff --git a/aio/content/examples/cli-quickstart/ts/src/assets/.gitkeep b/aio/content/examples/cli-quickstart/ts/src/assets/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/cli-quickstart/ts/src/environments/environment.prod.ts b/aio/content/examples/cli-quickstart/ts/src/environments/environment.prod.ts new file mode 100644 index 0000000000..3612073bc3 --- /dev/null +++ b/aio/content/examples/cli-quickstart/ts/src/environments/environment.prod.ts @@ -0,0 +1,3 @@ +export const environment = { + production: true +}; diff --git a/aio/content/examples/cli-quickstart/ts/src/environments/environment.ts b/aio/content/examples/cli-quickstart/ts/src/environments/environment.ts new file mode 100644 index 0000000000..00313f1664 --- /dev/null +++ b/aio/content/examples/cli-quickstart/ts/src/environments/environment.ts @@ -0,0 +1,8 @@ +// The file contents for the current environment will overwrite these during build. +// The build system defaults to the dev environment which uses `environment.ts`, but if you do +// `ng build --env=prod` then `environment.prod.ts` will be used instead. +// The list of which env maps to which file can be found in `angular-cli.json`. + +export const environment = { + production: false +}; diff --git a/aio/content/examples/cli-quickstart/ts/src/favicon.ico b/aio/content/examples/cli-quickstart/ts/src/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..8081c7ceaf2be08bf59010158c586170d9d2d517 GIT binary patch literal 5430 zcmc(je{54#6vvCoAI3i*G5%$U7!sA3wtMZ$fH6V9C`=eXGJb@R1%(I_{vnZtpD{6n z5Pl{DmxzBDbrB>}`90e12m8T*36WoeDLA&SD_hw{H^wM!cl_RWcVA!I+x87ee975; z@4kD^=bYPn&pmG@(+JZ`rqQEKxW<}RzhW}I!|ulN=fmjVi@x{p$cC`)5$a!)X&U+blKNvN5tg=uLvuLnuqRM;Yc*swiexsoh#XPNu{9F#c`G zQLe{yWA(Y6(;>y|-efAy11k<09(@Oo1B2@0`PtZSkqK&${ zgEY}`W@t{%?9u5rF?}Y7OL{338l*JY#P!%MVQY@oqnItpZ}?s z!r?*kwuR{A@jg2Chlf0^{q*>8n5Ir~YWf*wmsh7B5&EpHfd5@xVaj&gqsdui^spyL zB|kUoblGoO7G(MuKTfa9?pGH0@QP^b#!lM1yHWLh*2iq#`C1TdrnO-d#?Oh@XV2HK zKA{`eo{--^K&MW66Lgsktfvn#cCAc*(}qsfhrvOjMGLE?`dHVipu1J3Kgr%g?cNa8 z)pkmC8DGH~fG+dlrp(5^-QBeEvkOvv#q7MBVLtm2oD^$lJZx--_=K&Ttd=-krx(Bb zcEoKJda@S!%%@`P-##$>*u%T*mh+QjV@)Qa=Mk1?#zLk+M4tIt%}wagT{5J%!tXAE;r{@=bb%nNVxvI+C+$t?!VJ@0d@HIyMJTI{vEw0Ul ze(ha!e&qANbTL1ZneNl45t=#Ot??C0MHjjgY8%*mGisN|S6%g3;Hlx#fMNcL<87MW zZ>6moo1YD?P!fJ#Jb(4)_cc50X5n0KoDYfdPoL^iV`k&o{LPyaoqMqk92wVM#_O0l z09$(A-D+gVIlq4TA&{1T@BsUH`Bm=r#l$Z51J-U&F32+hfUP-iLo=jg7Xmy+WLq6_tWv&`wDlz#`&)Jp~iQf zZP)tu>}pIIJKuw+$&t}GQuqMd%Z>0?t%&BM&Wo^4P^Y z)c6h^f2R>X8*}q|bblAF?@;%?2>$y+cMQbN{X$)^R>vtNq_5AB|0N5U*d^T?X9{xQnJYeU{ zoZL#obI;~Pp95f1`%X3D$Mh*4^?O?IT~7HqlWguezmg?Ybq|7>qQ(@pPHbE9V?f|( z+0xo!#m@Np9PljsyxBY-UA*{U*la#8Wz2sO|48_-5t8%_!n?S$zlGe+NA%?vmxjS- zHE5O3ZarU=X}$7>;Okp(UWXJxI%G_J-@IH;%5#Rt$(WUX?6*Ux!IRd$dLP6+SmPn= z8zjm4jGjN772R{FGkXwcNv8GBcZI#@Y2m{RNF_w8(Z%^A*!bS*!}s6sh*NnURytky humW;*g7R+&|Ledvc- + + + + MyApp + + + + + + + Loading... + + diff --git a/aio/content/examples/cli-quickstart/ts/src/main.ts b/aio/content/examples/cli-quickstart/ts/src/main.ts new file mode 100644 index 0000000000..ac78a713c2 --- /dev/null +++ b/aio/content/examples/cli-quickstart/ts/src/main.ts @@ -0,0 +1,12 @@ +import './polyfills.ts'; + +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { enableProdMode } from '@angular/core'; +import { environment } from './environments/environment'; +import { AppModule } from './app/app.module'; + +if (environment.production) { + enableProdMode(); +} + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/cli-quickstart/ts/src/polyfills.ts b/aio/content/examples/cli-quickstart/ts/src/polyfills.ts new file mode 100644 index 0000000000..4749399c2d --- /dev/null +++ b/aio/content/examples/cli-quickstart/ts/src/polyfills.ts @@ -0,0 +1,19 @@ +// This file includes polyfills needed by Angular and is loaded before +// the app. You can add your own extra polyfills to this file. +import 'core-js/es6/symbol'; +import 'core-js/es6/object'; +import 'core-js/es6/function'; +import 'core-js/es6/parse-int'; +import 'core-js/es6/parse-float'; +import 'core-js/es6/number'; +import 'core-js/es6/math'; +import 'core-js/es6/string'; +import 'core-js/es6/date'; +import 'core-js/es6/array'; +import 'core-js/es6/regexp'; +import 'core-js/es6/map'; +import 'core-js/es6/set'; +import 'core-js/es6/reflect'; + +import 'core-js/es7/reflect'; +import 'zone.js/dist/zone'; diff --git a/aio/content/examples/cli-quickstart/ts/src/styles.css b/aio/content/examples/cli-quickstart/ts/src/styles.css new file mode 100644 index 0000000000..d81835d0cd --- /dev/null +++ b/aio/content/examples/cli-quickstart/ts/src/styles.css @@ -0,0 +1,116 @@ +/* #docregion , quickstart, toh */ +/* Master Styles */ +h1 { + color: #369; + font-family: Arial, Helvetica, sans-serif; + font-size: 250%; +} +h2, h3 { + color: #444; + font-family: Arial, Helvetica, sans-serif; + font-weight: lighter; +} +body { + margin: 2em; +} +/* #enddocregion quickstart */ +body, input[text], button { + color: #888; + font-family: Cambria, Georgia; +} +/* #enddocregion toh */ +a { + cursor: pointer; + cursor: hand; +} +button { + font-family: Arial; + background-color: #eee; + border: none; + padding: 5px 10px; + border-radius: 4px; + cursor: pointer; + cursor: hand; +} +button:hover { + background-color: #cfd8dc; +} +button:disabled { + background-color: #eee; + color: #aaa; + cursor: auto; +} + +/* Navigation link styles */ +nav a { + padding: 5px 10px; + text-decoration: none; + margin-right: 10px; + margin-top: 10px; + display: inline-block; + background-color: #eee; + border-radius: 4px; +} +nav a:visited, a:link { + color: #607D8B; +} +nav a:hover { + color: #039be5; + background-color: #CFD8DC; +} +nav a.active { + color: #039be5; +} + +/* items class */ +.items { + margin: 0 0 2em 0; + list-style-type: none; + padding: 0; + width: 24em; +} +.items li { + cursor: pointer; + position: relative; + left: 0; + background-color: #EEE; + margin: .5em; + padding: .3em 0; + height: 1.6em; + border-radius: 4px; +} +.items li:hover { + color: #607D8B; + background-color: #DDD; + left: .1em; +} +.items li.selected { + background-color: #CFD8DC; + color: white; +} +.items li.selected:hover { + background-color: #BBD8DC; +} +.items .text { + position: relative; + top: -3px; +} +.items .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; +} +/* #docregion toh */ +/* everywhere else */ +* { + font-family: Arial, Helvetica, sans-serif; +} diff --git a/aio/content/examples/cli-quickstart/ts/src/test.ts b/aio/content/examples/cli-quickstart/ts/src/test.ts new file mode 100644 index 0000000000..f9d51efd05 --- /dev/null +++ b/aio/content/examples/cli-quickstart/ts/src/test.ts @@ -0,0 +1,32 @@ +import './polyfills.ts'; + +import 'zone.js/dist/long-stack-trace-zone'; +import 'zone.js/dist/proxy.js'; +import 'zone.js/dist/sync-test'; +import 'zone.js/dist/jasmine-patch'; +import 'zone.js/dist/async-test'; +import 'zone.js/dist/fake-async-test'; +import { getTestBed } from '@angular/core/testing'; +import { + BrowserDynamicTestingModule, + platformBrowserDynamicTesting +} from '@angular/platform-browser-dynamic/testing'; + +// Unfortunately there's no typing for the `__karma__` variable. Just declare it as any. +declare var __karma__: any; +declare var require: any; + +// Prevent Karma from running prematurely. +__karma__.loaded = function () {}; + +// First, initialize the Angular testing environment. +getTestBed().initTestEnvironment( + BrowserDynamicTestingModule, + platformBrowserDynamicTesting() +); +// Then we find all the tests. +const context = require.context('./', true, /\.spec\.ts$/); +// And load the modules. +context.keys().map(context); +// Finally, start Karma to run the tests. +__karma__.start(); diff --git a/aio/content/examples/component-styles/e2e-spec.ts b/aio/content/examples/component-styles/e2e-spec.ts new file mode 100644 index 0000000000..28a44221a4 --- /dev/null +++ b/aio/content/examples/component-styles/e2e-spec.ts @@ -0,0 +1,73 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by } from 'protractor'; + +describe('Component Style Tests', function () { + + beforeAll(function () { + browser.get(''); + }); + + it('scopes component styles to component view', function() { + let componentH1 = element(by.css('hero-app > h1')); + let externalH1 = element(by.css('body > h1')); + + expect(componentH1.getCssValue('fontWeight')).toEqual('normal'); + expect(externalH1.getCssValue('fontWeight')).not.toEqual('normal'); + }); + + + it('allows styling :host element', function() { + let host = element(by.css('hero-details')); + + expect(host.getCssValue('borderWidth')).toEqual('1px'); + }); + + it('supports :host() in function form', function() { + let host = element(by.css('hero-details')); + + host.element(by.buttonText('Activate')).click(); + expect(host.getCssValue('borderWidth')).toEqual('3px'); + }); + + it('allows conditional :host-context() styling', function() { + let h2 = element(by.css('hero-details h2')); + + expect(h2.getCssValue('backgroundColor')).toEqual('rgba(238, 238, 255, 1)'); // #eeeeff + }); + + it('styles both view and content children with /deep/', function() { + let viewH3 = element(by.css('hero-team h3')); + let contentH3 = element(by.css('hero-controls h3')); + + expect(viewH3.getCssValue('fontStyle')).toEqual('italic'); + expect(contentH3.getCssValue('fontStyle')).toEqual('italic'); + }); + + it('includes styles loaded with CSS @import', function() { + let host = element(by.css('hero-details')); + + expect(host.getCssValue('padding')).toEqual('10px'); + }); + + it('processes template inline styles', function() { + let button = element(by.css('hero-controls button')); + let externalButton = element(by.css('body > button')); + expect(button.getCssValue('backgroundColor')).toEqual('rgba(255, 255, 255, 1)'); // #ffffff + expect(externalButton.getCssValue('backgroundColor')).not.toEqual('rgba(255, 255, 255, 1)'); + }); + + it('processes template s', function() { + let li = element(by.css('hero-team li:first-child')); + let externalLi = element(by.css('body > ul li')); + + expect(li.getCssValue('listStyleType')).toEqual('square'); + expect(externalLi.getCssValue('listStyleType')).not.toEqual('square'); + }); + + it('supports relative loading with moduleId', function() { + let host = element(by.css('quest-summary')); + expect(host.getCssValue('color')).toEqual('rgba(255, 255, 255, 1)'); // #ffffff + }); + +}); diff --git a/aio/content/examples/component-styles/ts/example-config.json b/aio/content/examples/component-styles/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/component-styles/ts/plnkr.json b/aio/content/examples/component-styles/ts/plnkr.json new file mode 100644 index 0000000000..e045ebcb38 --- /dev/null +++ b/aio/content/examples/component-styles/ts/plnkr.json @@ -0,0 +1,10 @@ +{ + "description": "Component Styles", + "basePath": "src/", + "files": [ + "!**/*.d.ts", + "!**/*.js", + "!**/*.native.*" + ], + "tags": ["CSS"] +} diff --git a/aio/content/examples/component-styles/ts/plnkr.no-link.html b/aio/content/examples/component-styles/ts/plnkr.no-link.html new file mode 100644 index 0000000000..12978b4077 --- /dev/null +++ b/aio/content/examples/component-styles/ts/plnkr.no-link.html @@ -0,0 +1,409 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/component-styles/ts/src/app/app.module.ts b/aio/content/examples/component-styles/ts/src/app/app.module.ts new file mode 100644 index 0000000000..31c72cbbf2 --- /dev/null +++ b/aio/content/examples/component-styles/ts/src/app/app.module.ts @@ -0,0 +1,23 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; + +import { HeroAppComponent } from './hero-app.component'; +import { HeroAppMainComponent } from './hero-app-main.component'; +import { HeroDetailsComponent } from './hero-details.component'; +import { HeroControlsComponent } from './hero-controls.component'; +import { QuestSummaryComponent } from './quest-summary.component'; +import { HeroTeamComponent } from './hero-team.component'; + +@NgModule({ + imports: [ BrowserModule ], + declarations: [ + HeroAppComponent, + HeroAppMainComponent, + HeroDetailsComponent, + HeroControlsComponent, + QuestSummaryComponent, + HeroTeamComponent + ], + bootstrap: [ HeroAppComponent ] +}) +export class AppModule { } diff --git a/aio/content/examples/component-styles/ts/src/app/hero-app-main.component.ts b/aio/content/examples/component-styles/ts/src/app/hero-app-main.component.ts new file mode 100644 index 0000000000..aebb1f729e --- /dev/null +++ b/aio/content/examples/component-styles/ts/src/app/hero-app-main.component.ts @@ -0,0 +1,16 @@ +import { Component, Input } from '@angular/core'; + +import { Hero } from './hero'; + +@Component({ + selector: 'hero-app-main', + template: ` + + + + + ` +}) +export class HeroAppMainComponent { + @Input() hero: Hero; +} diff --git a/aio/content/examples/component-styles/ts/src/app/hero-app.component.ts b/aio/content/examples/component-styles/ts/src/app/hero-app.component.ts new file mode 100644 index 0000000000..5f1923e6f3 --- /dev/null +++ b/aio/content/examples/component-styles/ts/src/app/hero-app.component.ts @@ -0,0 +1,24 @@ +import { Component, HostBinding } from '@angular/core'; +import { Hero } from './hero'; + +// #docregion +@Component({ + selector: 'hero-app', + template: ` +

    Tour of Heroes

    + `, + styles: ['h1 { font-weight: normal; }'] +}) +export class HeroAppComponent { +// #enddocregion + hero = new Hero( + 'Human Torch', + ['Mister Fantastic', 'Invisible Woman', 'Thing'] + ); + + @HostBinding('class') get themeClass() { + return 'theme-light'; + } +// #docregion +} +// #enddocregion diff --git a/aio/content/examples/component-styles/ts/src/app/hero-controls.component.ts b/aio/content/examples/component-styles/ts/src/app/hero-controls.component.ts new file mode 100644 index 0000000000..5d293596d2 --- /dev/null +++ b/aio/content/examples/component-styles/ts/src/app/hero-controls.component.ts @@ -0,0 +1,25 @@ +import { Component, Input } from '@angular/core'; +import { Hero } from './hero'; + +// #docregion inlinestyles +@Component({ + selector: 'hero-controls', + template: ` + +

    Controls

    + + ` +}) +// #enddocregion inlinestyles +export class HeroControlsComponent { + @Input() hero: Hero; + + activate() { + this.hero.active = true; + } +} diff --git a/aio/content/examples/component-styles/ts/src/app/hero-details-box.css b/aio/content/examples/component-styles/ts/src/app/hero-details-box.css new file mode 100644 index 0000000000..f240073005 --- /dev/null +++ b/aio/content/examples/component-styles/ts/src/app/hero-details-box.css @@ -0,0 +1,3 @@ +:host { + padding: 10px; +} diff --git a/aio/content/examples/component-styles/ts/src/app/hero-details.component.css b/aio/content/examples/component-styles/ts/src/app/hero-details.component.css new file mode 100644 index 0000000000..fd938ca55c --- /dev/null +++ b/aio/content/examples/component-styles/ts/src/app/hero-details.component.css @@ -0,0 +1,28 @@ +/* #docregion import */ +@import 'hero-details-box.css'; +/* #enddocregion import */ + +/* #docregion host */ +:host { + display: block; + border: 1px solid black; +} +/* #enddocregion host */ + +/* #docregion hostfunction */ +:host(.active) { + border-width: 3px; +} +/* #enddocregion hostfunction */ + +/* #docregion hostcontext */ +:host-context(.theme-light) h2 { + background-color: #eef; +} +/* #enddocregion hostcontext */ + +/* #docregion deep */ +:host /deep/ h3 { + font-style: italic; +} +/* #enddocregion deep */ diff --git a/aio/content/examples/component-styles/ts/src/app/hero-details.component.ts b/aio/content/examples/component-styles/ts/src/app/hero-details.component.ts new file mode 100644 index 0000000000..bd86a63e04 --- /dev/null +++ b/aio/content/examples/component-styles/ts/src/app/hero-details.component.ts @@ -0,0 +1,18 @@ +import { Component, Input } from '@angular/core'; +import { Hero } from './hero'; + +// #docregion styleurls +@Component({ + selector: 'hero-details', + template: ` +

    {{hero.name}}

    + + + `, + styleUrls: ['app/hero-details.component.css'] +}) +export class HeroDetailsComponent { + // #enddocregion styleurls + @Input() hero: Hero; + // #docregion styleurls +} diff --git a/aio/content/examples/component-styles/ts/src/app/hero-team.component.css b/aio/content/examples/component-styles/ts/src/app/hero-team.component.css new file mode 100644 index 0000000000..b87679886b --- /dev/null +++ b/aio/content/examples/component-styles/ts/src/app/hero-team.component.css @@ -0,0 +1,3 @@ +li { + list-style-type: square; +} diff --git a/aio/content/examples/component-styles/ts/src/app/hero-team.component.ts b/aio/content/examples/component-styles/ts/src/app/hero-team.component.ts new file mode 100644 index 0000000000..4f092d2827 --- /dev/null +++ b/aio/content/examples/component-styles/ts/src/app/hero-team.component.ts @@ -0,0 +1,19 @@ +import { Component, Input } from '@angular/core'; +import { Hero } from './hero'; + +// #docregion stylelink +@Component({ + selector: 'hero-team', + template: ` + +

    Team

    +
      +
    • + {{member}} +
    • +
    ` +}) +// #enddocregion stylelink +export class HeroTeamComponent { + @Input() hero: Hero; +} diff --git a/aio/content/examples/component-styles/ts/src/app/hero.ts b/aio/content/examples/component-styles/ts/src/app/hero.ts new file mode 100644 index 0000000000..7f8969e682 --- /dev/null +++ b/aio/content/examples/component-styles/ts/src/app/hero.ts @@ -0,0 +1,7 @@ +export class Hero { + active: boolean; + + constructor(public name: string, + public team: string[]) { + } +} diff --git a/aio/content/examples/component-styles/ts/src/app/quest-summary.component.css b/aio/content/examples/component-styles/ts/src/app/quest-summary.component.css new file mode 100644 index 0000000000..207fa981dd --- /dev/null +++ b/aio/content/examples/component-styles/ts/src/app/quest-summary.component.css @@ -0,0 +1,5 @@ +:host { + display: block; + background-color: green; + color: white; +} diff --git a/aio/content/examples/component-styles/ts/src/app/quest-summary.component.html b/aio/content/examples/component-styles/ts/src/app/quest-summary.component.html new file mode 100644 index 0000000000..ace27d2a1c --- /dev/null +++ b/aio/content/examples/component-styles/ts/src/app/quest-summary.component.html @@ -0,0 +1 @@ +

    No quests in progress

    diff --git a/aio/content/examples/component-styles/ts/src/app/quest-summary.component.ts b/aio/content/examples/component-styles/ts/src/app/quest-summary.component.ts new file mode 100644 index 0000000000..c43239e368 --- /dev/null +++ b/aio/content/examples/component-styles/ts/src/app/quest-summary.component.ts @@ -0,0 +1,21 @@ +/* tslint:disable:no-unused-variable */ +// #docplaster +import { Component, ViewEncapsulation } from '@angular/core'; + +// #docregion +@Component({ + moduleId: module.id, + selector: 'quest-summary', + // #docregion urls + templateUrl: './quest-summary.component.html', + styleUrls: ['./quest-summary.component.css'] + // #enddocregion urls +}) +export class QuestSummaryComponent { } +// #enddocregion +/* + // #docregion encapsulation.native + // warning: few browsers support shadow DOM encapsulation at this time + encapsulation: ViewEncapsulation.Native + // #enddocregion encapsulation.native +*/ diff --git a/aio/content/examples/component-styles/ts/src/index.html b/aio/content/examples/component-styles/ts/src/index.html new file mode 100644 index 0000000000..6e9dc51b32 --- /dev/null +++ b/aio/content/examples/component-styles/ts/src/index.html @@ -0,0 +1,31 @@ + + + + + Component Styles + + + + + + + + + + + + + + + +

    External H1 Title for E2E test

    + + +
      +
    • External list for E2E test
    • +
    + + + diff --git a/aio/content/examples/component-styles/ts/src/main.ts b/aio/content/examples/component-styles/ts/src/main.ts new file mode 100644 index 0000000000..6b6532d428 --- /dev/null +++ b/aio/content/examples/component-styles/ts/src/main.ts @@ -0,0 +1,5 @@ +// #docregion +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/dependency-injection/e2e-spec.ts b/aio/content/examples/dependency-injection/e2e-spec.ts new file mode 100644 index 0000000000..28fe22a9cb --- /dev/null +++ b/aio/content/examples/dependency-injection/e2e-spec.ts @@ -0,0 +1,199 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by, ElementFinder } from 'protractor'; + +describe('Dependency Injection Tests', function () { + + let expectedMsg: string; + let expectedMsgRx: RegExp; + + beforeAll(function () { + browser.get(''); + }); + + describe('Cars:', function() { + + it('DI car displays as expected', function () { + expectedMsg = 'DI car with 4 cylinders and Flintstone tires.'; + expect(element(by.css('#di')).getText()).toEqual(expectedMsg); + }); + + it('No DI car displays as expected', function () { + expectedMsg = 'No DI car with 4 cylinders and Flintstone tires.'; + expect(element(by.css('#nodi')).getText()).toEqual(expectedMsg); + }); + + it('Injector car displays as expected', function () { + expectedMsg = 'Injector car with 4 cylinders and Flintstone tires.'; + expect(element(by.css('#injector')).getText()).toEqual(expectedMsg); + }); + + it('Factory car displays as expected', function () { + expectedMsg = 'Factory car with 4 cylinders and Flintstone tires.'; + expect(element(by.css('#factory')).getText()).toEqual(expectedMsg); + }); + + it('Simple car displays as expected', function () { + expectedMsg = 'Simple car with 4 cylinders and Flintstone tires.'; + expect(element(by.css('#simple')).getText()).toEqual(expectedMsg); + }); + + it('Super car displays as expected', function () { + expectedMsg = 'Super car with 12 cylinders and Flintstone tires.'; + expect(element(by.css('#super')).getText()).toEqual(expectedMsg); + }); + + it('Test car displays as expected', function () { + expectedMsg = 'Test car with 8 cylinders and YokoGoodStone tires.'; + expect(element(by.css('#test')).getText()).toEqual(expectedMsg); + }); + }); + + describe('Other Injections:', function() { + it('DI car displays as expected', function () { + expectedMsg = 'DI car with 4 cylinders and Flintstone tires.'; + expect(element(by.css('#car')).getText()).toEqual(expectedMsg); + }); + + it('Hero displays as expected', function () { + expectedMsg = 'Mr. Nice'; + expect(element(by.css('#hero')).getText()).toEqual(expectedMsg); + }); + + it('Optional injection displays as expected', function () { + expectedMsg = 'R.O.U.S.\'s? I don\'t think they exist!'; + expect(element(by.css('#rodent')).getText()).toEqual(expectedMsg); + }); + }); + + describe('Tests:', function() { + + it('Tests display as expected', function () { + expectedMsgRx = /Tests passed/; + expect(element(by.css('#tests')).getText()).toMatch(expectedMsgRx); + }); + + }); + + describe('Provider variations:', function() { + + it('P1 (class) displays as expected', function () { + expectedMsg = 'Hello from logger provided with Logger class'; + expect(element(by.css('#p1')).getText()).toEqual(expectedMsg); + }); + + it('P3 (provide) displays as expected', function () { + expectedMsg = 'Hello from logger provided with useClass:Logger'; + expect(element(by.css('#p3')).getText()).toEqual(expectedMsg); + }); + + it('P4 (useClass:BetterLogger) displays as expected', function () { + expectedMsg = 'Hello from logger provided with useClass:BetterLogger'; + expect(element(by.css('#p4')).getText()).toEqual(expectedMsg); + }); + + it('P5 (useClass:EvenBetterLogger - dependency) displays as expected', function () { + expectedMsg = 'Message to Bob: Hello from EvenBetterlogger'; + expect(element(by.css('#p5')).getText()).toEqual(expectedMsg); + }); + + it('P6a (no alias) displays as expected', function () { + expectedMsg = 'Hello OldLogger (but we want NewLogger)'; + expect(element(by.css('#p6a')).getText()).toEqual(expectedMsg); + }); + + it('P6b (alias) displays as expected', function () { + expectedMsg = 'Hello from NewLogger (via aliased OldLogger)'; + expect(element(by.css('#p6b')).getText()).toEqual(expectedMsg); + }); + + it('P7 (useValue) displays as expected', function () { + expectedMsg = 'Silent logger says "Shhhhh!". Provided via "useValue"'; + expect(element(by.css('#p7')).getText()).toEqual(expectedMsg); + }); + + it('P8 (useFactory) displays as expected', function () { + expectedMsg = 'Hero service injected successfully via heroServiceProvider'; + expect(element(by.css('#p8')).getText()).toEqual(expectedMsg); + }); + + it('P9 (OpaqueToken) displays as expected', function () { + expectedMsg = 'APP_CONFIG Application title is Dependency Injection'; + expect(element(by.css('#p9')).getText()).toEqual(expectedMsg); + }); + + it('P10 (optional dependency) displays as expected', function () { + expectedMsg = 'Optional logger was not available'; + expect(element(by.css('#p10')).getText()).toEqual(expectedMsg); + }); + }); + + describe('User/Heroes:', function() { + it('User is Bob - unauthorized', function () { + expectedMsgRx = /Bob, is not authorized/; + expect(element(by.css('#user')).getText()).toMatch(expectedMsgRx); + }); + + it('should have button', function () { + expect(element.all(by.cssContainingText('button', 'Next User')) + .get(0).isDisplayed()).toBe(true, '\'Next User\' button should be displayed'); + }); + + it('unauthorized user should have multiple unauthorized heroes', function () { + let heroes = element.all(by.css('#unauthorized hero-list div')); + expect(heroes.count()).toBeGreaterThan(0); + }); + + it('unauthorized user should have no secret heroes', function () { + let heroes = element.all(by.css('#unauthorized hero-list div')); + expect(heroes.count()).toBeGreaterThan(0); + + let filteredHeroes = heroes.filter((elem: ElementFinder, index: number) => { + return elem.getText().then((text: string) => { + return /secret/.test(text); + }); + }); + + expect(filteredHeroes.count()).toEqual(0); + }); + + it('unauthorized user should have no authorized heroes listed', function () { + expect(element.all(by.css('#authorized hero-list div')).count()).toEqual(0); + }); + + describe('after button click', function() { + + beforeAll(function (done) { + let buttonEle = element.all(by.cssContainingText('button', 'Next User')).get(0); + buttonEle.click().then(done, done); + }); + + it('User is Alice - authorized', function () { + expectedMsgRx = /Alice, is authorized/; + expect(element(by.css('#user')).getText()).toMatch(expectedMsgRx); + }); + + it('authorized user should have multiple authorized heroes ', function () { + let heroes = element.all(by.css('#authorized hero-list div')); + expect(heroes.count()).toBeGreaterThan(0); + }); + + it('authorized user should have secret heroes', function () { + let heroes = element.all(by.css('#authorized hero-list div')); + expect(heroes.count()).toBeGreaterThan(0); + + let filteredHeroes = heroes.filter(function(elem: ElementFinder, index: number){ + return elem.getText().then(function(text: string) { + return /secret/.test(text); + }); + }); + + expect(filteredHeroes.count()).toBeGreaterThan(0); + }); + + it('authorized user should have no unauthorized heroes listed', function () { + expect(element.all(by.css('#unauthorized hero-list div')).count()).toEqual(0); + }); + }); + }); +}); diff --git a/aio/content/examples/dependency-injection/ts/example-config.json b/aio/content/examples/dependency-injection/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/dependency-injection/ts/plnkr.json b/aio/content/examples/dependency-injection/ts/plnkr.json new file mode 100644 index 0000000000..e8d1ab24b2 --- /dev/null +++ b/aio/content/examples/dependency-injection/ts/plnkr.json @@ -0,0 +1,10 @@ +{ + "description": "Dependency Injection", + "basePath": "src/", + "files":[ + "!**/*.d.ts", + "!**/*.js", + "!**/*.[1,2].*" + ], + "tags": ["dependency", "di"] +} diff --git a/aio/content/examples/dependency-injection/ts/plnkr.no-link.html b/aio/content/examples/dependency-injection/ts/plnkr.no-link.html new file mode 100644 index 0000000000..d4219166e9 --- /dev/null +++ b/aio/content/examples/dependency-injection/ts/plnkr.no-link.html @@ -0,0 +1,986 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/dependency-injection/ts/src/app/app.component.1.ts b/aio/content/examples/dependency-injection/ts/src/app/app.component.1.ts new file mode 100644 index 0000000000..b398ebeb57 --- /dev/null +++ b/aio/content/examples/dependency-injection/ts/src/app/app.component.1.ts @@ -0,0 +1,17 @@ +// Early versions + +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'my-app', + template: ` +

    {{title}}

    + + + ` +}) + +export class AppComponent { + title = 'Dependency Injection'; +} diff --git a/aio/content/examples/dependency-injection/ts/src/app/app.component.2.ts b/aio/content/examples/dependency-injection/ts/src/app/app.component.2.ts new file mode 100644 index 0000000000..d24df5568c --- /dev/null +++ b/aio/content/examples/dependency-injection/ts/src/app/app.component.2.ts @@ -0,0 +1,25 @@ +// #docregion +// #docregion imports +import { Component } from '@angular/core'; +import { Inject } from '@angular/core'; + +import { APP_CONFIG, AppConfig } from './app.config'; +// #enddocregion imports + +@Component({ + selector: 'my-app', + template: ` +

    {{title}}

    + + + ` +}) +export class AppComponent { + title: string; + + // #docregion ctor + constructor(@Inject(APP_CONFIG) config: AppConfig) { + this.title = config.title; + } + // #enddocregion ctor +} diff --git a/aio/content/examples/dependency-injection/ts/src/app/app.component.ts b/aio/content/examples/dependency-injection/ts/src/app/app.component.ts new file mode 100644 index 0000000000..dd83963a4b --- /dev/null +++ b/aio/content/examples/dependency-injection/ts/src/app/app.component.ts @@ -0,0 +1,48 @@ +// #docplaster +// #docregion +// #docregion imports +import { Component, Inject } from '@angular/core'; + +import { APP_CONFIG, AppConfig } from './app.config'; +import { Logger } from './logger.service'; +import { UserService } from './user.service'; +// #enddocregion imports + +@Component({ + selector: 'my-app', + template: ` +

    {{title}}

    + + + +

    User

    +

    + {{userInfo}} + +

    + + + + `, + providers: [Logger] +}) +export class AppComponent { + title: string; + + // #docregion ctor + constructor( + @Inject(APP_CONFIG) config: AppConfig, + private userService: UserService) { + this.title = config.title; + } + // #enddocregion ctor + + get isAuthorized() { return this.user.isAuthorized; } + nextUser() { this.userService.getNewUser(); } + get user() { return this.userService.user; } + + get userInfo() { + return `Current user, ${this.user.name}, is ` + + `${this.isAuthorized ? '' : 'not'} authorized. `; + } +} diff --git a/aio/content/examples/dependency-injection/ts/src/app/app.config.ts b/aio/content/examples/dependency-injection/ts/src/app/app.config.ts new file mode 100644 index 0000000000..7626c46e5b --- /dev/null +++ b/aio/content/examples/dependency-injection/ts/src/app/app.config.ts @@ -0,0 +1,16 @@ +// #docregion token +import { OpaqueToken } from '@angular/core'; + +export let APP_CONFIG = new OpaqueToken('app.config'); +// #enddocregion token + +// #docregion config +export interface AppConfig { + apiEndpoint: string; + title: string; +} + +export const HERO_DI_CONFIG: AppConfig = { + apiEndpoint: 'api.heroes.com', + title: 'Dependency Injection' +}; diff --git a/aio/content/examples/dependency-injection/ts/src/app/app.module.ts b/aio/content/examples/dependency-injection/ts/src/app/app.module.ts new file mode 100644 index 0000000000..67ae8ae913 --- /dev/null +++ b/aio/content/examples/dependency-injection/ts/src/app/app.module.ts @@ -0,0 +1,60 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; + +import { AppComponent } from './app.component'; +import { CarComponent } from './car/car.component'; +import { HeroesComponent } from './heroes/heroes.component'; +import { HeroListComponent } from './heroes/hero-list.component'; +import { InjectorComponent } from './injector.component'; +import { TestComponent } from './test.component'; +import { APP_CONFIG, HERO_DI_CONFIG } from './app.config'; +import { UserService } from './user.service'; +import { + ProvidersComponent, + Provider1Component, + Provider3Component, + Provider4Component, + Provider5Component, + Provider6aComponent, + Provider6bComponent, + Provider7Component, + Provider8Component, + Provider9Component, + Provider10Component, +} from './providers.component'; + +// #docregion ngmodule +@NgModule({ + imports: [ + BrowserModule + ], + declarations: [ + AppComponent, + CarComponent, + HeroesComponent, + // #enddocregion ngmodule + HeroListComponent, + InjectorComponent, + TestComponent, + ProvidersComponent, + Provider1Component, + Provider3Component, + Provider4Component, + Provider5Component, + Provider6aComponent, + Provider6bComponent, + Provider7Component, + Provider8Component, + Provider9Component, + Provider10Component, + // #docregion ngmodule + ], + // #docregion ngmodule-providers + providers: [ + UserService, + { provide: APP_CONFIG, useValue: HERO_DI_CONFIG } + ], + // #enddocregion ngmodule-providers + bootstrap: [ AppComponent ] +}) +export class AppModule { } diff --git a/aio/content/examples/dependency-injection/ts/src/app/car/car-creations.ts b/aio/content/examples/dependency-injection/ts/src/app/car/car-creations.ts new file mode 100644 index 0000000000..c758c72951 --- /dev/null +++ b/aio/content/examples/dependency-injection/ts/src/app/car/car-creations.ts @@ -0,0 +1,46 @@ +// Examples with car and engine variations + +// #docplaster +import { Car, Engine, Tires } from './car'; + +///////// example 1 //////////// +export function simpleCar() { + // #docregion car-ctor-instantiation + // Simple car with 4 cylinders and Flintstone tires. + let car = new Car(new Engine(), new Tires()); + // #enddocregion car-ctor-instantiation + car.description = 'Simple'; + return car; +} + + +///////// example 2 //////////// +// #docregion car-ctor-instantiation-with-param + class Engine2 { + constructor(public cylinders: number) { } + } +// #enddocregion car-ctor-instantiation-with-param +export function superCar() { +// #docregion car-ctor-instantiation-with-param + // Super car with 12 cylinders and Flintstone tires. + let bigCylinders = 12; + let car = new Car(new Engine2(bigCylinders), new Tires()); +// #enddocregion car-ctor-instantiation-with-param + car.description = 'Super'; + return car; +} + +/////////// example 3 ////////// + // #docregion car-ctor-instantiation-with-mocks + class MockEngine extends Engine { cylinders = 8; } + class MockTires extends Tires { make = 'YokoGoodStone'; } + + // #enddocregion car-ctor-instantiation-with-mocks +export function testCar() { + // #docregion car-ctor-instantiation-with-mocks + // Test car with 8 cylinders and YokoGoodStone tires. + let car = new Car(new MockEngine(), new MockTires()); + // #enddocregion car-ctor-instantiation-with-mocks + car.description = 'Test'; + return car; +} diff --git a/aio/content/examples/dependency-injection/ts/src/app/car/car-factory.ts b/aio/content/examples/dependency-injection/ts/src/app/car/car-factory.ts new file mode 100644 index 0000000000..06daafe63b --- /dev/null +++ b/aio/content/examples/dependency-injection/ts/src/app/car/car-factory.ts @@ -0,0 +1,19 @@ +// #docregion +import { Engine, Tires, Car } from './car'; + +// BAD pattern! +export class CarFactory { + createCar() { + let car = new Car(this.createEngine(), this.createTires()); + car.description = 'Factory'; + return car; + } + + createEngine() { + return new Engine(); + } + + createTires() { + return new Tires(); + } +} diff --git a/aio/content/examples/dependency-injection/ts/src/app/car/car-injector.ts b/aio/content/examples/dependency-injection/ts/src/app/car/car-injector.ts new file mode 100644 index 0000000000..4f7498ee4e --- /dev/null +++ b/aio/content/examples/dependency-injection/ts/src/app/car/car-injector.ts @@ -0,0 +1,27 @@ +import { ReflectiveInjector } from '@angular/core'; + +import { Car, Engine, Tires } from './car'; +import { Logger } from '../logger.service'; + +// #docregion injector +export function useInjector() { + let injector: ReflectiveInjector; + // #enddocregion injector + /* + // #docregion injector-no-new + // Cannot instantiate an ReflectiveInjector like this! + let injector = new ReflectiveInjector([Car, Engine, Tires]); + // #enddocregion injector-no-new + */ + // #docregion injector, injector-create-and-call + injector = ReflectiveInjector.resolveAndCreate([Car, Engine, Tires]); + // #docregion injector-call + let car = injector.get(Car); + // #enddocregion injector-call, injector-create-and-call + car.description = 'Injector'; + + injector = ReflectiveInjector.resolveAndCreate([Logger]); + let logger = injector.get(Logger); + logger.log('Injector car.drive() said: ' + car.drive()); + return car; +} diff --git a/aio/content/examples/dependency-injection/ts/src/app/car/car-no-di.ts b/aio/content/examples/dependency-injection/ts/src/app/car/car-no-di.ts new file mode 100644 index 0000000000..9026edebc2 --- /dev/null +++ b/aio/content/examples/dependency-injection/ts/src/app/car/car-no-di.ts @@ -0,0 +1,24 @@ +// Car without DI +import { Engine, Tires } from './car'; + +// #docregion car +export class Car { + + // #docregion car-ctor + public engine: Engine; + public tires: Tires; + public description = 'No DI'; + + constructor() { + this.engine = new Engine(); + this.tires = new Tires(); + } + // #enddocregion car-ctor + + // Method using the engine and tires + drive() { + return `${this.description} car with ` + + `${this.engine.cylinders} cylinders and ${this.tires.make} tires.`; + } +} +// #enddocregion car diff --git a/aio/content/examples/dependency-injection/ts/src/app/car/car.component.ts b/aio/content/examples/dependency-injection/ts/src/app/car/car.component.ts new file mode 100644 index 0000000000..9a835ef124 --- /dev/null +++ b/aio/content/examples/dependency-injection/ts/src/app/car/car.component.ts @@ -0,0 +1,38 @@ +// #docregion +import { Component } from '@angular/core'; + +import { Car, Engine, Tires } from './car'; +import { Car as CarNoDi } from './car-no-di'; +import { CarFactory } from './car-factory'; + +import { testCar, + simpleCar, + superCar } from './car-creations'; + +import { useInjector } from './car-injector'; + + +@Component({ + selector: 'my-car', + template: ` +

    Cars

    +
    {{car.drive()}}
    +
    {{noDiCar.drive()}}
    +
    {{injectorCar.drive()}}
    +
    {{factoryCar.drive()}}
    +
    {{simpleCar.drive()}}
    +
    {{superCar.drive()}}
    +
    {{testCar.drive()}}
    + `, + providers: [Car, Engine, Tires] +}) +export class CarComponent { + factoryCar = (new CarFactory).createCar(); + injectorCar = useInjector(); + noDiCar = new CarNoDi; + simpleCar = simpleCar(); + superCar = superCar(); + testCar = testCar(); + + constructor(public car: Car) {} +} diff --git a/aio/content/examples/dependency-injection/ts/src/app/car/car.ts b/aio/content/examples/dependency-injection/ts/src/app/car/car.ts new file mode 100644 index 0000000000..37162c570b --- /dev/null +++ b/aio/content/examples/dependency-injection/ts/src/app/car/car.ts @@ -0,0 +1,25 @@ +import { Injectable } from '@angular/core'; + +export class Engine { + public cylinders = 4; +} + +export class Tires { + public make = 'Flintstone'; + public model = 'Square'; +} + +@Injectable() +export class Car { + // #docregion car-ctor + public description = 'DI'; + + constructor(public engine: Engine, public tires: Tires) { } + // #enddocregion car-ctor + + // Method using the engine and tires + drive() { + return `${this.description} car with ` + + `${this.engine.cylinders} cylinders and ${this.tires.make} tires.`; + } +} diff --git a/aio/content/examples/dependency-injection/ts/src/app/heroes/hero-list.component.1.ts b/aio/content/examples/dependency-injection/ts/src/app/heroes/hero-list.component.1.ts new file mode 100644 index 0000000000..ba32366aa9 --- /dev/null +++ b/aio/content/examples/dependency-injection/ts/src/app/heroes/hero-list.component.1.ts @@ -0,0 +1,16 @@ +// #docregion +import { Component } from '@angular/core'; + +import { HEROES } from './mock-heroes'; + +@Component({ + selector: 'hero-list', + template: ` +
    + {{hero.id}} - {{hero.name}} +
    + ` +}) +export class HeroListComponent { + heroes = HEROES; +} diff --git a/aio/content/examples/dependency-injection/ts/src/app/heroes/hero-list.component.2.ts b/aio/content/examples/dependency-injection/ts/src/app/heroes/hero-list.component.2.ts new file mode 100644 index 0000000000..cb23d3257c --- /dev/null +++ b/aio/content/examples/dependency-injection/ts/src/app/heroes/hero-list.component.2.ts @@ -0,0 +1,31 @@ +// #docplaster +// #docregion +import { Component } from '@angular/core'; + +import { Hero } from './hero'; +// #enddocregion +import { HeroService } from './hero.service.1'; +/* +// #docregion +import { HeroService } from './hero.service'; +// #enddocregion +*/ +// #docregion + +@Component({ + selector: 'hero-list', + template: ` +
    + {{hero.id}} - {{hero.name}} +
    + ` +}) +export class HeroListComponent { + heroes: Hero[]; + + // #docregion ctor + constructor(heroService: HeroService) { + this.heroes = heroService.getHeroes(); + } + // #enddocregion ctor +} diff --git a/aio/content/examples/dependency-injection/ts/src/app/heroes/hero-list.component.ts b/aio/content/examples/dependency-injection/ts/src/app/heroes/hero-list.component.ts new file mode 100644 index 0000000000..db3a325bdb --- /dev/null +++ b/aio/content/examples/dependency-injection/ts/src/app/heroes/hero-list.component.ts @@ -0,0 +1,26 @@ +/* tslint:disable:one-line */ +// #docregion +import { Component } from '@angular/core'; + +import { Hero } from './hero'; +import { HeroService } from './hero.service'; + +@Component({ + selector: 'hero-list', + template: ` +
    + {{hero.id}} - {{hero.name}} + ({{hero.isSecret ? 'secret' : 'public'}}) +
    + `, +}) +export class HeroListComponent { + heroes: Hero[]; + + // #docregion ctor-signature + constructor(heroService: HeroService) + // #enddocregion ctor-signature + { + this.heroes = heroService.getHeroes(); + } +} diff --git a/aio/content/examples/dependency-injection/ts/src/app/heroes/hero.service.1.ts b/aio/content/examples/dependency-injection/ts/src/app/heroes/hero.service.1.ts new file mode 100644 index 0000000000..2e0e3ca734 --- /dev/null +++ b/aio/content/examples/dependency-injection/ts/src/app/heroes/hero.service.1.ts @@ -0,0 +1,9 @@ +// #docregion +import { Injectable } from '@angular/core'; + +import { HEROES } from './mock-heroes'; + +@Injectable() +export class HeroService { + getHeroes() { return HEROES; } +} diff --git a/aio/content/examples/dependency-injection/ts/src/app/heroes/hero.service.2.ts b/aio/content/examples/dependency-injection/ts/src/app/heroes/hero.service.2.ts new file mode 100644 index 0000000000..6b3a98306a --- /dev/null +++ b/aio/content/examples/dependency-injection/ts/src/app/heroes/hero.service.2.ts @@ -0,0 +1,18 @@ +// #docregion +import { Injectable } from '@angular/core'; + +import { HEROES } from './mock-heroes'; +import { Logger } from '../logger.service'; + +@Injectable() +export class HeroService { + + // #docregion ctor + constructor(private logger: Logger) { } + // #enddocregion ctor + + getHeroes() { + this.logger.log('Getting heroes ...'); + return HEROES; + } +} diff --git a/aio/content/examples/dependency-injection/ts/src/app/heroes/hero.service.provider.ts b/aio/content/examples/dependency-injection/ts/src/app/heroes/hero.service.provider.ts new file mode 100644 index 0000000000..6de4ebee90 --- /dev/null +++ b/aio/content/examples/dependency-injection/ts/src/app/heroes/hero.service.provider.ts @@ -0,0 +1,19 @@ +/* tslint:disable:one-line */ +// #docregion +import { HeroService } from './hero.service'; +import { Logger } from '../logger.service'; +import { UserService } from '../user.service'; + +// #docregion factory +let heroServiceFactory = (logger: Logger, userService: UserService) => { + return new HeroService(logger, userService.user.isAuthorized); +}; +// #enddocregion factory + +// #docregion provider +export let heroServiceProvider = + { provide: HeroService, + useFactory: heroServiceFactory, + deps: [Logger, UserService] + }; +// #enddocregion provider diff --git a/aio/content/examples/dependency-injection/ts/src/app/heroes/hero.service.ts b/aio/content/examples/dependency-injection/ts/src/app/heroes/hero.service.ts new file mode 100644 index 0000000000..fb03ec1de6 --- /dev/null +++ b/aio/content/examples/dependency-injection/ts/src/app/heroes/hero.service.ts @@ -0,0 +1,20 @@ +// #docregion +import { Injectable } from '@angular/core'; + +import { HEROES } from './mock-heroes'; +import { Logger } from '../logger.service'; + +@Injectable() +export class HeroService { + // #docregion internals + constructor( + private logger: Logger, + private isAuthorized: boolean) { } + + getHeroes() { + let auth = this.isAuthorized ? 'authorized ' : 'unauthorized'; + this.logger.log(`Getting heroes for ${auth} user.`); + return HEROES.filter(hero => this.isAuthorized || !hero.isSecret); + } + // #enddocregion internals +} diff --git a/aio/content/examples/dependency-injection/ts/src/app/heroes/hero.ts b/aio/content/examples/dependency-injection/ts/src/app/heroes/hero.ts new file mode 100644 index 0000000000..5c49328241 --- /dev/null +++ b/aio/content/examples/dependency-injection/ts/src/app/heroes/hero.ts @@ -0,0 +1,6 @@ +// #docregion +export class Hero { + id: number; + name: string; + isSecret = false; +} diff --git a/aio/content/examples/dependency-injection/ts/src/app/heroes/heroes.component.1.ts b/aio/content/examples/dependency-injection/ts/src/app/heroes/heroes.component.1.ts new file mode 100644 index 0000000000..e0e9deae08 --- /dev/null +++ b/aio/content/examples/dependency-injection/ts/src/app/heroes/heroes.component.1.ts @@ -0,0 +1,21 @@ +// #docplaster +// #docregion full, v1 +import { Component } from '@angular/core'; +// #enddocregion v1 + +import { HeroService } from './hero.service'; +// #enddocregion full + +// #docregion full, v1 + +@Component({ + selector: 'my-heroes', + // #enddocregion v1 + providers: [HeroService], + // #docregion v1 + template: ` +

    Heroes

    + + ` +}) +export class HeroesComponent { } diff --git a/aio/content/examples/dependency-injection/ts/src/app/heroes/heroes.component.ts b/aio/content/examples/dependency-injection/ts/src/app/heroes/heroes.component.ts new file mode 100644 index 0000000000..5923f7590b --- /dev/null +++ b/aio/content/examples/dependency-injection/ts/src/app/heroes/heroes.component.ts @@ -0,0 +1,14 @@ +// #docregion +import { Component } from '@angular/core'; + +import { heroServiceProvider } from './hero.service.provider'; + +@Component({ + selector: 'my-heroes', + template: ` +

    Heroes

    + + `, + providers: [heroServiceProvider] +}) +export class HeroesComponent { } diff --git a/aio/content/examples/dependency-injection/ts/src/app/heroes/mock-heroes.ts b/aio/content/examples/dependency-injection/ts/src/app/heroes/mock-heroes.ts new file mode 100644 index 0000000000..79a91dc03a --- /dev/null +++ b/aio/content/examples/dependency-injection/ts/src/app/heroes/mock-heroes.ts @@ -0,0 +1,15 @@ +// #docregion +import { Hero } from './hero'; + +export var HEROES: Hero[] = [ + { id: 11, isSecret: false, name: 'Mr. Nice' }, + { id: 12, isSecret: false, name: 'Narco' }, + { id: 13, isSecret: false, name: 'Bombasto' }, + { id: 14, isSecret: false, name: 'Celeritas' }, + { id: 15, isSecret: false, name: 'Magneta' }, + { id: 16, isSecret: false, name: 'RubberMan' }, + { id: 17, isSecret: false, name: 'Dynama' }, + { id: 18, isSecret: true, name: 'Dr IQ' }, + { id: 19, isSecret: true, name: 'Magma' }, + { id: 20, isSecret: true, name: 'Tornado' } +]; diff --git a/aio/content/examples/dependency-injection/ts/src/app/injector.component.ts b/aio/content/examples/dependency-injection/ts/src/app/injector.component.ts new file mode 100644 index 0000000000..7c9e8a56e5 --- /dev/null +++ b/aio/content/examples/dependency-injection/ts/src/app/injector.component.ts @@ -0,0 +1,43 @@ +// #docplaster +// #docregion +import { Component, Injector } from '@angular/core'; + +import { Car, Engine, Tires } from './car/car'; +import { Hero } from './heroes/hero'; +import { HeroService } from './heroes/hero.service'; +import { heroServiceProvider } from './heroes/hero.service.provider'; +import { Logger } from './logger.service'; + +// #docregion injector +@Component({ + selector: 'my-injectors', + template: ` +

    Other Injections

    +
    {{car.drive()}}
    +
    {{hero.name}}
    +
    {{rodent}}
    + `, + providers: [Car, Engine, Tires, heroServiceProvider, Logger] +}) +export class InjectorComponent { + car: Car = this.injector.get(Car); + + // #docregion get-hero-service + heroService: HeroService = this.injector.get(HeroService); + // #enddocregion get-hero-service + hero: Hero = this.heroService.getHeroes()[0]; + + constructor(private injector: Injector) { } + + get rodent() { + let rousDontExist = `R.O.U.S.'s? I don't think they exist!`; + return this.injector.get(ROUS, rousDontExist); + } +} +// #enddocregion injector + +/** + * R.O.U.S. - Rodents Of Unusual Size + * // https://www.youtube.com/watch?v=BOv5ZjAOpC8 + */ +class ROUS { } diff --git a/aio/content/examples/dependency-injection/ts/src/app/logger.service.ts b/aio/content/examples/dependency-injection/ts/src/app/logger.service.ts new file mode 100644 index 0000000000..e943523ad2 --- /dev/null +++ b/aio/content/examples/dependency-injection/ts/src/app/logger.service.ts @@ -0,0 +1,12 @@ +// #docregion +import { Injectable } from '@angular/core'; + +@Injectable() +export class Logger { + logs: string[] = []; // capture logs for testing + + log(message: string) { + this.logs.push(message); + console.log(message); + } +} diff --git a/aio/content/examples/dependency-injection/ts/src/app/providers.component.ts b/aio/content/examples/dependency-injection/ts/src/app/providers.component.ts new file mode 100644 index 0000000000..a96bfce99e --- /dev/null +++ b/aio/content/examples/dependency-injection/ts/src/app/providers.component.ts @@ -0,0 +1,267 @@ +/* tslint:disable:one-line:check-open-brace*/ +// Examples of provider arrays +// #docplaster +import { Component, Inject, Injectable, OnInit } from '@angular/core'; + +import { APP_CONFIG, AppConfig, + HERO_DI_CONFIG } from './app.config'; + +import { HeroService } from './heroes/hero.service'; +import { heroServiceProvider } from './heroes/hero.service.provider'; +import { Logger } from './logger.service'; +import { UserService } from './user.service'; + +let template = '{{log}}'; + +////////////////////////////////////////// +@Component({ + selector: 'provider-1', + template: template, + // #docregion providers-1, providers-logger + providers: [Logger] + // #enddocregion providers-1, providers-logger +}) +export class Provider1Component { + log: string; + constructor(logger: Logger) { + logger.log('Hello from logger provided with Logger class'); + this.log = logger.logs[0]; + } +} + +////////////////////////////////////////// +@Component({ + selector: 'provider-3', + template: template, + providers: + // #docregion providers-3 + [{ provide: Logger, useClass: Logger }] + // #enddocregion providers-3 +}) +export class Provider3Component { + log: string; + constructor(logger: Logger) { + logger.log('Hello from logger provided with useClass:Logger'); + this.log = logger.logs[0]; + } +} + +////////////////////////////////////////// +class BetterLogger extends Logger {} + +@Component({ + selector: 'provider-4', + template: template, + providers: + // #docregion providers-4 + [{ provide: Logger, useClass: BetterLogger }] + // #enddocregion providers-4 +}) +export class Provider4Component { + log: string; + constructor(logger: Logger) { + logger.log('Hello from logger provided with useClass:BetterLogger'); + this.log = logger.logs[0]; + } +} + +////////////////////////////////////////// +// #docregion EvenBetterLogger +@Injectable() +class EvenBetterLogger extends Logger { + constructor(private userService: UserService) { super(); } + + log(message: string) { + let name = this.userService.user.name; + super.log(`Message to ${name}: ${message}`); + } +} +// #enddocregion EvenBetterLogger + +@Component({ + selector: 'provider-5', + template: template, + providers: + // #docregion providers-5 + [ UserService, + { provide: Logger, useClass: EvenBetterLogger }] + // #enddocregion providers-5 +}) +export class Provider5Component { + log: string; + constructor(logger: Logger) { + logger.log('Hello from EvenBetterlogger'); + this.log = logger.logs[0]; + } +} + +////////////////////////////////////////// +class NewLogger extends Logger {} +class OldLogger { + logs: string[] = []; + log(message: string) { + throw new Error('Should not call the old logger!'); + }; +} + +@Component({ + selector: 'provider-6a', + template: template, + providers: + // #docregion providers-6a + [ NewLogger, + // Not aliased! Creates two instances of `NewLogger` + { provide: OldLogger, useClass: NewLogger}] + // #enddocregion providers-6a +}) +export class Provider6aComponent { + log: string; + constructor(newLogger: NewLogger, oldLogger: OldLogger) { + if (newLogger === oldLogger){ + throw new Error('expected the two loggers to be different instances'); + } + oldLogger.log('Hello OldLogger (but we want NewLogger)'); + // The newLogger wasn't called so no logs[] + // display the logs of the oldLogger. + this.log = newLogger.logs[0] || oldLogger.logs[0]; + } +} + +@Component({ + selector: 'provider-6b', + template: template, + providers: + // #docregion providers-6b + [ NewLogger, + // Alias OldLogger w/ reference to NewLogger + { provide: OldLogger, useExisting: NewLogger}] + // #enddocregion providers-6b +}) +export class Provider6bComponent { + log: string; + constructor(newLogger: NewLogger, oldLogger: OldLogger) { + if (newLogger !== oldLogger){ + throw new Error('expected the two loggers to be the same instance'); + } + oldLogger.log('Hello from NewLogger (via aliased OldLogger)'); + this.log = newLogger.logs[0]; + } +} + +////////////////////////////////////////// +// #docregion silent-logger +// An object in the shape of the logger service +let silentLogger = { + logs: ['Silent logger says "Shhhhh!". Provided via "useValue"'], + log: () => {} +}; +// #enddocregion silent-logger + +@Component({ + selector: 'provider-7', + template: template, + providers: + // #docregion providers-7 + [{ provide: Logger, useValue: silentLogger }] + // #enddocregion providers-7 +}) +export class Provider7Component { + log: string; + constructor(logger: Logger) { + logger.log('Hello from logger provided with useValue'); + this.log = logger.logs[0]; + } +} +///////////////// + +@Component({ + selector: 'provider-8', + template: template, + providers: [heroServiceProvider, Logger, UserService] +}) +export class Provider8Component { + // must be true else this component would have blown up at runtime + log = 'Hero service injected successfully via heroServiceProvider'; + + // #docregion provider-8-ctor + constructor(heroService: HeroService) { } + // #enddocregion provider-8-ctor +} + +///////////////// +@Component({ + selector: 'provider-9', + template: template, + /* + // #docregion providers-9-interface + // FAIL! Can't use interface as provider token + [{ provide: AppConfig, useValue: HERO_DI_CONFIG })] + // #enddocregion providers-9-interface + */ + // #docregion providers-9 + providers: [{ provide: APP_CONFIG, useValue: HERO_DI_CONFIG }] + // #enddocregion providers-9 +}) +export class Provider9Component implements OnInit { + log: string; + /* + // #docregion provider-9-ctor-interface + // FAIL! Can't inject using the interface as the parameter type + constructor(private config: AppConfig){ } + // #enddocregion provider-9-ctor-interface + */ + // #docregion provider-9-ctor + constructor(@Inject(APP_CONFIG) private config: AppConfig) { } + // #enddocregion provider-9-ctor + + ngOnInit() { + this.log = 'APP_CONFIG Application title is ' + this.config.title; + } +} +////////////////////////////////////////// +// Sample providers 1 to 7 illustrate a required logger dependency. +// Optional logger, can be null +// #docregion import-optional +import { Optional } from '@angular/core'; +// #enddocregion import-optional + +let some_message = 'Hello from the injected logger'; + +@Component({ + selector: 'provider-10', + template: template, + providers: [{ provide: Logger, useValue: null }] +}) +export class Provider10Component implements OnInit { + log: string; + // #docregion provider-10-ctor + constructor(@Optional() private logger: Logger) { + if (this.logger) { + this.logger.log(some_message); + } + } + // #enddocregion provider-10-ctor + + ngOnInit() { + this.log = this.logger ? this.logger.logs[0] : 'Optional logger was not available'; + } +} + +///////////////// +@Component({ + selector: 'my-providers', + template: ` +

    Provider variations

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + ` +}) +export class ProvidersComponent { } diff --git a/aio/content/examples/dependency-injection/ts/src/app/test.component.ts b/aio/content/examples/dependency-injection/ts/src/app/test.component.ts new file mode 100644 index 0000000000..fc0fef75a8 --- /dev/null +++ b/aio/content/examples/dependency-injection/ts/src/app/test.component.ts @@ -0,0 +1,55 @@ +/* tslint:disable */ +// Simulate a simple test +// Reader should look to the testing chapter for the real thing + +import { Component } from '@angular/core'; + +import { HeroService } from './heroes/hero.service'; +import { HeroListComponent } from './heroes/hero-list.component'; + +@Component({ + selector: 'my-tests', + template: ` +

    Tests

    +

    Tests {{results.pass}}: {{results.message}}

    + ` +}) +export class TestComponent { + results = runTests(); +} + +///////////////////////////////////// +function runTests() { + + // #docregion spec + let expectedHeroes = [{name: 'A'}, {name: 'B'}] + let mockService = {getHeroes: () => expectedHeroes } + + it('should have heroes when HeroListComponent created', () => { + let hlc = new HeroListComponent(mockService); + expect(hlc.heroes.length).toEqual(expectedHeroes.length); + }); + // #enddocregion spec + + return testResults; +} + +////////////////////////////////// +// Fake Jasmine infrastructure +var testName: string; +var testResults: {pass: string; message: string}; + +function expect(actual: any) { + return { + toEqual: function(expected: any){ + testResults = actual === expected ? + {pass: 'passed', message: testName} : + {pass: 'failed', message: `${testName}; expected ${actual} to equal ${expected}.`}; + } + }; +} + +function it(label: string, test: () => void) { + testName = label; + test(); +} diff --git a/aio/content/examples/dependency-injection/ts/src/app/user.service.ts b/aio/content/examples/dependency-injection/ts/src/app/user.service.ts new file mode 100644 index 0000000000..8fdda925db --- /dev/null +++ b/aio/content/examples/dependency-injection/ts/src/app/user.service.ts @@ -0,0 +1,22 @@ +// #docregion +import { Injectable } from '@angular/core'; + +export class User { + constructor( + public name: string, + public isAuthorized = false) { } +} + +// Todo: get the user; don't 'new' it. +let alice = new User('Alice', true); +let bob = new User('Bob', false); + +@Injectable() +export class UserService { + user = bob; // initial user is Bob + + // swap users + getNewUser() { + return this.user = this.user === bob ? alice : bob; + } +} diff --git a/aio/content/examples/dependency-injection/ts/src/index.html b/aio/content/examples/dependency-injection/ts/src/index.html new file mode 100644 index 0000000000..87a9d7e694 --- /dev/null +++ b/aio/content/examples/dependency-injection/ts/src/index.html @@ -0,0 +1,27 @@ + + + + + Dependency Injection + + + + + + + + + + + + + + + + + Loading my-app ... + + + diff --git a/aio/content/examples/dependency-injection/ts/src/main.ts b/aio/content/examples/dependency-injection/ts/src/main.ts new file mode 100644 index 0000000000..1a1d481719 --- /dev/null +++ b/aio/content/examples/dependency-injection/ts/src/main.ts @@ -0,0 +1,6 @@ +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module'; + +// #docregion bootstrap +platformBrowserDynamic().bootstrapModule(AppModule); +// #enddocregion bootstrap diff --git a/aio/content/examples/deployment/ts/.gitignore b/aio/content/examples/deployment/ts/.gitignore new file mode 100644 index 0000000000..7f794a0b16 --- /dev/null +++ b/aio/content/examples/deployment/ts/.gitignore @@ -0,0 +1 @@ +!systemjs.config.server.js diff --git a/aio/content/examples/deployment/ts/example-config.json b/aio/content/examples/deployment/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/deployment/ts/src/app/app.component.ts b/aio/content/examples/deployment/ts/src/app/app.component.ts new file mode 100644 index 0000000000..47731c13a4 --- /dev/null +++ b/aio/content/examples/deployment/ts/src/app/app.component.ts @@ -0,0 +1,15 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'my-app', + template: ` +

    Simple Deployment

    + + + ` +}) +export class AppComponent { } diff --git a/aio/content/examples/deployment/ts/src/app/app.module.ts b/aio/content/examples/deployment/ts/src/app/app.module.ts new file mode 100644 index 0000000000..a885bc2918 --- /dev/null +++ b/aio/content/examples/deployment/ts/src/app/app.module.ts @@ -0,0 +1,29 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { RouterModule, Routes } from '@angular/router'; + +import { AppComponent } from './app.component'; +import { CrisisListComponent } from './crisis-list.component'; +import { HeroListComponent } from './hero-list.component'; + +const appRoutes: Routes = [ + { path: 'crisis-center', component: CrisisListComponent }, + { path: 'heroes', component: HeroListComponent }, + + { path: '', redirectTo: '/heroes', pathMatch: 'full' } +]; + +@NgModule({ + imports: [ + BrowserModule, + RouterModule.forRoot(appRoutes) + ], + declarations: [ + AppComponent, + CrisisListComponent, + HeroListComponent + ], + bootstrap: [ AppComponent ] +}) +export class AppModule { } diff --git a/aio/content/examples/deployment/ts/src/app/crisis-list.component.ts b/aio/content/examples/deployment/ts/src/app/crisis-list.component.ts new file mode 100644 index 0000000000..62ef9e7555 --- /dev/null +++ b/aio/content/examples/deployment/ts/src/app/crisis-list.component.ts @@ -0,0 +1,9 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + template: ` +

    CRISIS CENTER

    +

    Get your crisis here

    ` +}) +export class CrisisListComponent { } diff --git a/aio/content/examples/deployment/ts/src/app/hero-list.component.ts b/aio/content/examples/deployment/ts/src/app/hero-list.component.ts new file mode 100644 index 0000000000..479f73b508 --- /dev/null +++ b/aio/content/examples/deployment/ts/src/app/hero-list.component.ts @@ -0,0 +1,10 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + template: ` +

    HEROES

    +

    Get your heroes here

    + ` +}) +export class HeroListComponent { } diff --git a/aio/content/examples/deployment/ts/src/index.html b/aio/content/examples/deployment/ts/src/index.html new file mode 100644 index 0000000000..ba6ba3dea6 --- /dev/null +++ b/aio/content/examples/deployment/ts/src/index.html @@ -0,0 +1,38 @@ + + + + + + + + + Simple Deployment + + + + + + + + + + + + + + + + + + + + + + + loading... + + + diff --git a/aio/content/examples/deployment/ts/src/main.ts b/aio/content/examples/deployment/ts/src/main.ts new file mode 100644 index 0000000000..6f82bbc745 --- /dev/null +++ b/aio/content/examples/deployment/ts/src/main.ts @@ -0,0 +1,15 @@ +// #docregion +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app/app.module'; + +// #docregion enableProdMode +import { enableProdMode } from '@angular/core'; + +// Enable production mode unless running locally +if (!/localhost/.test(document.location.host)) { + enableProdMode(); +} +// #enddocregion enableProdMode + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/deployment/ts/src/systemjs.config.server.js b/aio/content/examples/deployment/ts/src/systemjs.config.server.js new file mode 100644 index 0000000000..40c4426064 --- /dev/null +++ b/aio/content/examples/deployment/ts/src/systemjs.config.server.js @@ -0,0 +1,46 @@ +// #docregion +/** + * System configuration for deployment without installing node_modules + * Loads umd packages from the web instead + * Adjust as necessary for your application needs. + */ +(function (global) { + System.config({ + // #docregion paths + paths: { + 'npm:': 'https://unpkg.com/' // path serves as alias + }, + // #enddocregion paths + // map tells the System loader where to look for things + map: { + app: 'app', // location of transpiled app files + + // angular minimized umd bundles + '@angular/core': 'npm:@angular/core/bundles/core.umd.min.js', + '@angular/common': 'npm:@angular/common/bundles/common.umd.min.js', + '@angular/compiler': 'npm:@angular/compiler/bundles/compiler.umd.min.js', + '@angular/platform-browser': 'npm:@angular/platform-browser/bundles/platform-browser.umd.min.js', + '@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.min.js', + '@angular/http': 'npm:@angular/http/bundles/http.umd.min.js', + '@angular/router': 'npm:@angular/router/bundles/router.umd.min.js', + '@angular/router/upgrade': 'npm:@angular/router/bundles/router-upgrade.umd.min.js', + '@angular/forms': 'npm:@angular/forms/bundles/forms.umd.min.js', + '@angular/upgrade': 'npm:@angular/upgrade/bundles/upgrade.umd.min.js', + '@angular/upgrade/static': 'npm:@angular/upgrade/bundles/upgrade-static.umd.min.js', + + // other libraries + 'rxjs': 'npm:rxjs@5.0.1', + 'angular-in-memory-web-api': 'npm:angular-in-memory-web-api/bundles/in-memory-web-api.umd.js' + }, + // 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' + } + } + }); + })(this); diff --git a/aio/content/examples/displaying-data/e2e-spec.ts b/aio/content/examples/displaying-data/e2e-spec.ts new file mode 100644 index 0000000000..96c52c5d00 --- /dev/null +++ b/aio/content/examples/displaying-data/e2e-spec.ts @@ -0,0 +1,29 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by } from 'protractor'; + +describe('Displaying Data Tests', function () { + let _title = 'Tour of Heroes'; + let _defaultHero = 'Windstorm'; + + beforeAll(function () { + browser.get(''); + }); + + it('should display correct title: ' + _title, function () { + expect(element(by.css('h1')).getText()).toEqual(_title); + }); + + it('should have correct default hero: ' + _defaultHero, function () { + expect(element(by.css('h2')).getText()).toContain(_defaultHero); + }); + + it('should have heroes', function () { + let heroEls = element.all(by.css('li')); + expect(heroEls.count()).not.toBe(0, 'should have heroes'); + }); + + it('should display "there are many heroes!"', function () { + expect(element(by.css('ul ~ p')).getText()).toContain('There are many heroes!'); + }); +}); diff --git a/aio/content/examples/displaying-data/ts/example-config.json b/aio/content/examples/displaying-data/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/displaying-data/ts/plnkr.json b/aio/content/examples/displaying-data/ts/plnkr.json new file mode 100644 index 0000000000..b4572f0fb6 --- /dev/null +++ b/aio/content/examples/displaying-data/ts/plnkr.json @@ -0,0 +1,11 @@ +{ + "description": "Displaying Data", + "basePath": "src/", + "files": [ + "!**/*.d.ts", + "!**/*.js", + "!**/app-ctor.component.ts", + "!**/*.[1,2,3].*" + ], + "tags": ["Template"] +} diff --git a/aio/content/examples/displaying-data/ts/plnkr.no-link.html b/aio/content/examples/displaying-data/ts/plnkr.no-link.html new file mode 100644 index 0000000000..067e72dea2 --- /dev/null +++ b/aio/content/examples/displaying-data/ts/plnkr.no-link.html @@ -0,0 +1,228 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/displaying-data/ts/src/app/app-ctor.component.ts b/aio/content/examples/displaying-data/ts/src/app/app-ctor.component.ts new file mode 100644 index 0000000000..b275baa8e6 --- /dev/null +++ b/aio/content/examples/displaying-data/ts/src/app/app-ctor.component.ts @@ -0,0 +1,19 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'my-app-ctor', + template: ` +

    {{title}} [Ctor version]

    +

    My favorite hero is: {{myHero}}

    + ` +}) +// #docregion class +export class AppCtorComponent { + title: string; + myHero: string; + + constructor() { + this.title = 'Tour of Heroes'; + this.myHero = 'Windstorm'; + } +} diff --git a/aio/content/examples/displaying-data/ts/src/app/app.component.1.ts b/aio/content/examples/displaying-data/ts/src/app/app.component.1.ts new file mode 100644 index 0000000000..1cbeb0f731 --- /dev/null +++ b/aio/content/examples/displaying-data/ts/src/app/app.component.1.ts @@ -0,0 +1,16 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'my-app', + // #docregion template + template: ` +

    {{title}}

    +

    My favorite hero is: {{myHero}}

    + ` + // #enddocregion template +}) +export class AppComponent { + title = 'Tour of Heroes'; + myHero = 'Windstorm'; +} diff --git a/aio/content/examples/displaying-data/ts/src/app/app.component.2.ts b/aio/content/examples/displaying-data/ts/src/app/app.component.2.ts new file mode 100644 index 0000000000..da7a653973 --- /dev/null +++ b/aio/content/examples/displaying-data/ts/src/app/app.component.2.ts @@ -0,0 +1,26 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'my-app', + // #docregion template + template: ` +

    {{title}}

    +

    My favorite hero is: {{myHero}}

    +

    Heroes:

    +
      + // #docregion li +
    • + {{ hero }} +
    • + // #enddocregion li +
    + ` + // #enddocregion template +}) +// #docregion class +export class AppComponent { + title = 'Tour of Heroes'; + heroes = ['Windstorm', 'Bombasto', 'Magneta', 'Tornado']; + myHero = this.heroes[0]; +} diff --git a/aio/content/examples/displaying-data/ts/src/app/app.component.3.ts b/aio/content/examples/displaying-data/ts/src/app/app.component.3.ts new file mode 100644 index 0000000000..06ab060557 --- /dev/null +++ b/aio/content/examples/displaying-data/ts/src/app/app.component.3.ts @@ -0,0 +1,35 @@ +// #docregion +import { Component } from '@angular/core'; + +// #docregion import +import { Hero } from './hero'; +// #enddocregion import + +@Component({ + selector: 'my-app', + // #docregion template + template: ` +

    {{title}}

    +

    My favorite hero is: {{myHero.name}}

    +

    Heroes:

    +
      +
    • + {{ hero.name }} +
    • +
    + ` + // #enddocregion template +}) +// #docregion class +export class AppComponent { + title = 'Tour of Heroes'; + // #docregion heroes + heroes = [ + new Hero(1, 'Windstorm'), + new Hero(13, 'Bombasto'), + new Hero(15, 'Magneta'), + new Hero(20, 'Tornado') + ]; + myHero = this.heroes[0]; + // #enddocregion heroes +} diff --git a/aio/content/examples/displaying-data/ts/src/app/app.component.ts b/aio/content/examples/displaying-data/ts/src/app/app.component.ts new file mode 100644 index 0000000000..7234959265 --- /dev/null +++ b/aio/content/examples/displaying-data/ts/src/app/app.component.ts @@ -0,0 +1,32 @@ +// #docplaster +// #docregion final +import { Component } from '@angular/core'; + +import { Hero } from './hero'; + +@Component({ + selector: 'my-app', + template: ` +

    {{title}}

    +

    My favorite hero is: {{myHero.name}}

    +

    Heroes:

    +
      +
    • + {{ hero.name }} +
    • +
    + // #docregion message +

    There are many heroes!

    + // #enddocregion message +` +}) +export class AppComponent { + title = 'Tour of Heroes'; + heroes = [ + new Hero(1, 'Windstorm'), + new Hero(13, 'Bombasto'), + new Hero(15, 'Magneta'), + new Hero(20, 'Tornado') + ]; + myHero = this.heroes[0]; +} diff --git a/aio/content/examples/displaying-data/ts/src/app/app.module.ts b/aio/content/examples/displaying-data/ts/src/app/app.module.ts new file mode 100644 index 0000000000..362f3401fa --- /dev/null +++ b/aio/content/examples/displaying-data/ts/src/app/app.module.ts @@ -0,0 +1,16 @@ +// #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/aio/content/examples/displaying-data/ts/src/app/hero.ts b/aio/content/examples/displaying-data/ts/src/app/hero.ts new file mode 100644 index 0000000000..f89d26ad63 --- /dev/null +++ b/aio/content/examples/displaying-data/ts/src/app/hero.ts @@ -0,0 +1,9 @@ +// #docregion +export class Hero { + constructor( + // #docregion id + public id: number, + // #enddocregion id + public name: string) { } +} +// #enddocregion diff --git a/aio/content/examples/displaying-data/ts/src/index.html b/aio/content/examples/displaying-data/ts/src/index.html new file mode 100644 index 0000000000..ddcbade46b --- /dev/null +++ b/aio/content/examples/displaying-data/ts/src/index.html @@ -0,0 +1,28 @@ + + + + Displaying Data + + + + + + + + + + + + + + + + + + loading... + + + + diff --git a/aio/content/examples/displaying-data/ts/src/main.ts b/aio/content/examples/displaying-data/ts/src/main.ts new file mode 100644 index 0000000000..f332d1d245 --- /dev/null +++ b/aio/content/examples/displaying-data/ts/src/main.ts @@ -0,0 +1,6 @@ +// #docregion +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/forms/e2e-spec.ts b/aio/content/examples/forms/e2e-spec.ts new file mode 100644 index 0000000000..2afd370103 --- /dev/null +++ b/aio/content/examples/forms/e2e-spec.ts @@ -0,0 +1,63 @@ +import { browser, element, by } from 'protractor'; +import { appLang, describeIf } from '../protractor-helpers'; + +describeIf(appLang.appIsTs || appLang.appIsJs, 'Forms Tests', function () { + + beforeEach(function () { + browser.get(''); + }); + + it('should display correct title', function () { + expect(element.all(by.css('h1')).get(0).getText()).toEqual('Hero Form'); + }); + + + it('should not display message before submit', function () { + let ele = element(by.css('h2')); + expect(ele.isDisplayed()).toBe(false); + }); + + it('should hide form after submit', function () { + let ele = element.all(by.css('h1')).get(0); + expect(ele.isDisplayed()).toBe(true); + let b = element.all(by.css('button[type=submit]')).get(0); + b.click().then(function() { + expect(ele.isDisplayed()).toBe(false); + }); + }); + + it('should display message after submit', function () { + let b = element.all(by.css('button[type=submit]')).get(0); + b.click().then(function() { + expect(element(by.css('h2')).getText()).toContain('You submitted the following'); + }); + }); + + it('should hide form after submit', function () { + let alterEgoEle = element.all(by.css('input[name=alterEgo]')).get(0); + expect(alterEgoEle.isDisplayed()).toBe(true); + let submitButtonEle = element.all(by.css('button[type=submit]')).get(0); + submitButtonEle.click().then(function() { + expect(alterEgoEle.isDisplayed()).toBe(false); + }); + }); + + it('should reflect submitted data after submit', function () { + let test = 'testing 1 2 3'; + let newValue: string; + let alterEgoEle = element.all(by.css('input[name=alterEgo]')).get(0); + alterEgoEle.getAttribute('value').then(function(value: string) { + alterEgoEle.sendKeys(test); + newValue = value + test; + expect(alterEgoEle.getAttribute('value')).toEqual(newValue); + let b = element.all(by.css('button[type=submit]')).get(0); + return b.click(); + }).then(function() { + let alterEgoTextEle = element(by.cssContainingText('div', 'Alter Ego')); + expect(alterEgoTextEle.isPresent()).toBe(true, 'cannot locate "Alter Ego" label'); + let divEle = element(by.cssContainingText('div', newValue)); + expect(divEle.isPresent()).toBe(true, 'cannot locate div with this text: ' + newValue); + }); + }); +}); + diff --git a/aio/content/examples/forms/js/example-config.json b/aio/content/examples/forms/js/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/forms/js/plnkr.json b/aio/content/examples/forms/js/plnkr.json new file mode 100644 index 0000000000..946cbb88f6 --- /dev/null +++ b/aio/content/examples/forms/js/plnkr.json @@ -0,0 +1,5 @@ +{ + "description": "Forms", + "basePath": "src/", + "files":["app/**/*.js", "**/*.html", "**/*.css"] +} diff --git a/aio/content/examples/forms/js/plnkr.no-link.html b/aio/content/examples/forms/js/plnkr.no-link.html new file mode 100644 index 0000000000..67697d6b1a --- /dev/null +++ b/aio/content/examples/forms/js/plnkr.no-link.html @@ -0,0 +1,440 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/forms/js/src/app/app.component.js b/aio/content/examples/forms/js/src/app/app.component.js new file mode 100644 index 0000000000..56bd982416 --- /dev/null +++ b/aio/content/examples/forms/js/src/app/app.component.js @@ -0,0 +1,11 @@ +// #docregion +(function(app) { + app.AppComponent = ng.core + .Component({ + selector: 'my-app', + template: '' + }) + .Class({ + constructor: function() {} + }); +})(window.app || (window.app = {})); diff --git a/aio/content/examples/forms/js/src/app/app.module.js b/aio/content/examples/forms/js/src/app/app.module.js new file mode 100644 index 0000000000..92c7f8b9e5 --- /dev/null +++ b/aio/content/examples/forms/js/src/app/app.module.js @@ -0,0 +1,19 @@ +// #docplaster +// #docregion +(function(app) { + app.AppModule = + ng.core.NgModule({ + imports: [ + ng.platformBrowser.BrowserModule, + ng.forms.FormsModule + ], + declarations: [ + app.AppComponent, + app.HeroFormComponent + ], + bootstrap: [ app.AppComponent ] + }) + .Class({ + constructor: function() {} + }); +})(window.app || (window.app = {})); diff --git a/aio/content/examples/forms/js/src/app/hero-form.component.html b/aio/content/examples/forms/js/src/app/hero-form.component.html new file mode 100644 index 0000000000..279ded0866 --- /dev/null +++ b/aio/content/examples/forms/js/src/app/hero-form.component.html @@ -0,0 +1,196 @@ + + +
    + +
    +

    Hero Form

    + +
    + + +
    + + + +
    + Name is required +
    + +
    + +
    + + +
    + +
    + + +
    + Power is required +
    +
    + + + + +
    +
    + + +
    +

    You submitted the following:

    +
    +
    Name
    +
    {{ model.name }}
    +
    +
    +
    Alter Ego
    +
    {{ model.alterEgo }}
    +
    +
    +
    Power
    +
    {{ model.power }}
    +
    +
    + +
    + +
    + + + +
    +
    + + + + +
    +
    + + + +
    + + +
    + +
    +

    Hero Form

    +
    +
    + + +
    + +
    + + +
    + + + +
    + + +
    + + + + +
    +
    + + + + +
    + +
    +

    Hero Form

    +
    + + {{diagnostic()}} +
    + + +
    + +
    + + +
    + +
    + + +
    + + + + +
    +
    + + + +
    + + + TODO: remove this: {{model.name}} + +
    + + + TODO: remove this: {{model.name}} + +
    +
    + + + +
    + + +
    TODO: remove this: {{spy.className}} + +
    + +
    +
    + Name via form.controls = {{showFormControls(heroForm)}} +
    + +
    diff --git a/aio/content/examples/forms/js/src/app/hero-form.component.js b/aio/content/examples/forms/js/src/app/hero-form.component.js new file mode 100644 index 0000000000..505993a1fd --- /dev/null +++ b/aio/content/examples/forms/js/src/app/hero-form.component.js @@ -0,0 +1,52 @@ +// #docplaster +// #docregion +// #docregion first, final +(function(app) { + app.HeroFormComponent = ng.core + .Component({ + selector: 'hero-form', + templateUrl: 'app/hero-form.component.html' + }) + .Class({ + // #docregion submitted + constructor: [function() { + // #enddocregion submitted + this.powers = ['Really Smart', 'Super Flexible', + 'Super Hot', 'Weather Changer' + ]; + + this.model = new app.Hero(18, 'Dr IQ', this.powers[0], + 'Chuck Overstreet'); + + // #docregion submitted + this.submitted = false; + }], + onSubmit: function() { + this.submitted = true; + }, + // #enddocregion submitted + + // #enddocregion final + // TODO: Remove this when we're done + diagnostic: function() { + return JSON.stringify(this.model); + }, + // #enddocregion first + + + //////// DO NOT SHOW IN DOCS //////// + + // Reveal in html: + // AlterEgo via form.controls = {{showFormControls(hf)}} + showFormControls: function(form) { + return form.controls['alterEgo'] && + // #docregion form-controls + form.controls['name'].value; // Dr. IQ + // #enddocregion form-controls + }, + ///////////////////////////// + + // #docregion first, final + }); +})(window.app || (window.app = {})); +// #enddocregion first, final diff --git a/aio/content/examples/forms/js/src/app/hero.js b/aio/content/examples/forms/js/src/app/hero.js new file mode 100644 index 0000000000..9c2449c922 --- /dev/null +++ b/aio/content/examples/forms/js/src/app/hero.js @@ -0,0 +1,11 @@ +// #docregion +(function(app) { + app.Hero = Hero; + + function Hero(id, name, power, alterEgo) { + this.id = id; + this.name = name; + this.power = power; + this.alterEgo = alterEgo; + } +})(window.app || (window.app = {})); diff --git a/aio/content/examples/forms/js/src/forms.css b/aio/content/examples/forms/js/src/forms.css new file mode 100644 index 0000000000..d7e11405b1 --- /dev/null +++ b/aio/content/examples/forms/js/src/forms.css @@ -0,0 +1,9 @@ +/* #docregion */ +.ng-valid[required] { + border-left: 5px solid #42A948; /* green */ +} + +.ng-invalid { + border-left: 5px solid #a94442; /* red */ +} +/* #enddocregion */ \ No newline at end of file diff --git a/aio/content/examples/forms/js/src/index.html b/aio/content/examples/forms/js/src/index.html new file mode 100644 index 0000000000..9715d2476e --- /dev/null +++ b/aio/content/examples/forms/js/src/index.html @@ -0,0 +1,47 @@ + + + + + + Hero Form + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Loading... + + + diff --git a/aio/content/examples/forms/js/src/main.js b/aio/content/examples/forms/js/src/main.js new file mode 100644 index 0000000000..785823fa84 --- /dev/null +++ b/aio/content/examples/forms/js/src/main.js @@ -0,0 +1,8 @@ +// #docregion +(function(app) { + document.addEventListener('DOMContentLoaded', function() { + ng.platformBrowserDynamic + .platformBrowserDynamic() + .bootstrapModule(app.AppModule); + }); +})(window.app || (window.app = {})); diff --git a/aio/content/examples/forms/ts/example-config.json b/aio/content/examples/forms/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/forms/ts/plnkr.json b/aio/content/examples/forms/ts/plnkr.json new file mode 100644 index 0000000000..3f0abbfc3d --- /dev/null +++ b/aio/content/examples/forms/ts/plnkr.json @@ -0,0 +1,8 @@ +{ + "description": "Forms", + "basePath": "src/", + "files":[ + "!**/*.d.ts", + "!**/*.js" + ] +} diff --git a/aio/content/examples/forms/ts/plnkr.no-link.html b/aio/content/examples/forms/ts/plnkr.no-link.html new file mode 100644 index 0000000000..7ce8c13e4e --- /dev/null +++ b/aio/content/examples/forms/ts/plnkr.no-link.html @@ -0,0 +1,461 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/forms/ts/src/app/app.component.ts b/aio/content/examples/forms/ts/src/app/app.component.ts new file mode 100644 index 0000000000..454f7e03db --- /dev/null +++ b/aio/content/examples/forms/ts/src/app/app.component.ts @@ -0,0 +1,8 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'my-app', + template: '' +}) +export class AppComponent { } diff --git a/aio/content/examples/forms/ts/src/app/app.module.ts b/aio/content/examples/forms/ts/src/app/app.module.ts new file mode 100644 index 0000000000..f214c02714 --- /dev/null +++ b/aio/content/examples/forms/ts/src/app/app.module.ts @@ -0,0 +1,20 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { FormsModule } from '@angular/forms'; + +import { AppComponent } from './app.component'; +import { HeroFormComponent } from './hero-form.component'; + +@NgModule({ + imports: [ + BrowserModule, + FormsModule + ], + declarations: [ + AppComponent, + HeroFormComponent + ], + bootstrap: [ AppComponent ] +}) +export class AppModule { } diff --git a/aio/content/examples/forms/ts/src/app/hero-form.component.html b/aio/content/examples/forms/ts/src/app/hero-form.component.html new file mode 100644 index 0000000000..2efb9bc7dd --- /dev/null +++ b/aio/content/examples/forms/ts/src/app/hero-form.component.html @@ -0,0 +1,210 @@ + + +
    + +
    +

    Hero Form

    + +
    + +
    + + + + +
    + + Name is required +
    + +
    + +
    + + +
    + +
    + + +
    + Power is required +
    +
    + + + + + + + + + with reset + +    + + + + without reset + + +
    +
    + Name via form.controls = {{showFormControls(heroForm)}} +
    + + +
    +
    + + +
    +

    You submitted the following:

    +
    +
    Name
    +
    {{ model.name }}
    +
    +
    +
    Alter Ego
    +
    {{ model.alterEgo }}
    +
    +
    +
    Power
    +
    {{ model.power }}
    +
    +
    + +
    + +
    + + + +
    +
    + + + + +
    +
    + + + +
    + + +
    + +
    +

    Hero Form

    +
    +
    + + +
    + +
    + + +
    + + + +
    + + +
    + + + + + +
    +
    + + + + +
    + +
    +

    Hero Form

    +
    + + {{diagnostic}} +
    + + +
    + +
    + + +
    + +
    + + +
    + + + + +
    +
    + + + +
    + + + TODO: remove this: {{model.name}} + +
    + + + TODO: remove this: {{model.name}} + +
    + + +
    TODO: remove this: {{spy.className}} + + +
    diff --git a/aio/content/examples/forms/ts/src/app/hero-form.component.ts b/aio/content/examples/forms/ts/src/app/hero-form.component.ts new file mode 100644 index 0000000000..b2db8aaafd --- /dev/null +++ b/aio/content/examples/forms/ts/src/app/hero-form.component.ts @@ -0,0 +1,60 @@ +// #docplaster +// #docregion , v1, final +import { Component } from '@angular/core'; + +import { Hero } from './hero'; + +@Component({ + moduleId: module.id, + selector: 'hero-form', + templateUrl: './hero-form.component.html' +}) +export class HeroFormComponent { + + powers = ['Really Smart', 'Super Flexible', + 'Super Hot', 'Weather Changer']; + + model = new Hero(18, 'Dr IQ', this.powers[0], 'Chuck Overstreet'); + + // #docregion submitted + submitted = false; + + onSubmit() { this.submitted = true; } + // #enddocregion submitted + + // #enddocregion final + // TODO: Remove this when we're done + get diagnostic() { return JSON.stringify(this.model); } + // #enddocregion v1 + + // #docregion final, new-hero + newHero() { + this.model = new Hero(42, '', ''); + } + // #enddocregion final, new-hero + + skyDog(): Hero { + // #docregion SkyDog + let myHero = new Hero(42, 'SkyDog', + 'Fetch any object at any distance', + 'Leslie Rollover'); + console.log('My hero is called ' + myHero.name); // "My hero is called SkyDog" + // #enddocregion SkyDog + return myHero; + } + + //////// NOT SHOWN IN DOCS //////// + + // Reveal in html: + // Name via form.controls = {{showFormControls(heroForm)}} + showFormControls(form: any) { + return form && form.controls['name'] && + // #docregion form-controls + form.controls['name'].value; // Dr. IQ + // #enddocregion form-controls + } + + ///////////////////////////// + + // #docregion v1, final +} diff --git a/aio/content/examples/forms/ts/src/app/hero.ts b/aio/content/examples/forms/ts/src/app/hero.ts new file mode 100644 index 0000000000..c128626452 --- /dev/null +++ b/aio/content/examples/forms/ts/src/app/hero.ts @@ -0,0 +1,11 @@ +// #docregion +export class Hero { + + constructor( + public id: number, + public name: string, + public power: string, + public alterEgo?: string + ) { } + +} diff --git a/aio/content/examples/forms/ts/src/forms.css b/aio/content/examples/forms/ts/src/forms.css new file mode 100644 index 0000000000..13ffbe1203 --- /dev/null +++ b/aio/content/examples/forms/ts/src/forms.css @@ -0,0 +1,9 @@ +/* #docregion */ +.ng-valid[required], .ng-valid.required { + border-left: 5px solid #42A948; /* green */ +} + +.ng-invalid:not(form) { + border-left: 5px solid #a94442; /* red */ +} +/* #enddocregion */ diff --git a/aio/content/examples/forms/ts/src/index.html b/aio/content/examples/forms/ts/src/index.html new file mode 100644 index 0000000000..032888ca3e --- /dev/null +++ b/aio/content/examples/forms/ts/src/index.html @@ -0,0 +1,35 @@ + + + + + Hero Form + + + + + + + + + + + + + + + + + + + + + + + + Loading... + + + diff --git a/aio/content/examples/forms/ts/src/main.ts b/aio/content/examples/forms/ts/src/main.ts new file mode 100644 index 0000000000..6b6532d428 --- /dev/null +++ b/aio/content/examples/forms/ts/src/main.ts @@ -0,0 +1,5 @@ +// #docregion +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/hierarchical-dependency-injection/e2e-spec.ts b/aio/content/examples/hierarchical-dependency-injection/e2e-spec.ts new file mode 100644 index 0000000000..4630453f78 --- /dev/null +++ b/aio/content/examples/hierarchical-dependency-injection/e2e-spec.ts @@ -0,0 +1,103 @@ +'use strict'; // necessary for es6 output in node + +import { browser, by, element } from 'protractor'; + +describe('Hierarchical dependency injection', () => { + + beforeAll(() => { + browser.get(''); + }); + + describe('Heroes Scenario', () => { + let page = { + heroName: '', + income: '', + + // queries + heroEl: element.all(by.css('heroes-list li')).get(0), // first hero + heroCardEl: element(by.css('heroes-list hero-tax-return')), // first hero tax-return + taxReturnNameEl: element.all(by.css('heroes-list hero-tax-return #name')).get(0), + incomeInputEl: element.all(by.css('heroes-list hero-tax-return input')).get(0), + cancelButtonEl: element(by.cssContainingText('heroes-list hero-tax-return button', 'Cancel')), + closeButtonEl: element(by.cssContainingText('heroes-list hero-tax-return button', 'Close')), + saveButtonEl: element(by.cssContainingText('heroes-list hero-tax-return button', 'Save')) + }; + + it('should list multiple heroes', () => { + expect(element.all(by.css('heroes-list li')).count()).toBeGreaterThan(1); + }); + + it('should show no hero tax-returns at the start', () => { + expect(element.all(by.css('heroes-list li hero-tax-return')).count()).toBe(0); + }); + + it('should open first hero in hero-tax-return view after click', () => { + page.heroEl.getText() + .then(val => { + page.heroName = val; + }) + .then(() => page.heroEl.click()) + .then(() => { + expect(page.heroCardEl.isDisplayed()).toBe(true); + }); + }); + + it('hero tax-return should have first hero\'s name', () => { + // Not `page.tax-returnNameInputEl.getAttribute('value')` although later that is essential + expect(page.taxReturnNameEl.getText()).toEqual(page.heroName); + }); + + it('should be able to cancel change', () => { + page.incomeInputEl.clear() + .then(() => page.incomeInputEl.sendKeys('777')) + .then(() => { + expect(page.incomeInputEl.getAttribute('value')).toBe('777', 'income should be 777'); + return page.cancelButtonEl.click(); + }) + .then(() => { + expect(page.incomeInputEl.getAttribute('value')).not.toBe('777', 'income should not be 777'); + }); + }); + + it('should be able to save change', () => { + page.incomeInputEl.clear() + .then(() => page.incomeInputEl.sendKeys('999')) + .then(() => { + expect(page.incomeInputEl.getAttribute('value')).toBe('999', 'income should be 999'); + return page.saveButtonEl.click(); + }) + .then(() => { + expect(page.incomeInputEl.getAttribute('value')).toBe('999', 'income should still be 999'); + }); + }); + + it('should be able to close tax-return', () => { + page.saveButtonEl.click() + .then(() => { + expect(element.all(by.css('heroes-list li hero-tax-return')).count()).toBe(0); + }); + }); + + }); + + describe('Villains Scenario', () => { + it('should list multiple villains', () => { + expect(element.all(by.css('villains-list li')).count()).toBeGreaterThan(1); + }); + }); + + describe('Cars Scenario', () => { + + it('A-component should use expected services', () => { + expect(element(by.css('a-car')).getText()).toContain('C1-E1-T1'); + }); + + it('B-component should use expected services', () => { + expect(element(by.css('b-car')).getText()).toContain('C2-E2-T1'); + }); + + it('C-component should use expected services', () => { + expect(element(by.css('c-car')).getText()).toContain('C3-E2-T1'); + }); + }); +}); diff --git a/aio/content/examples/hierarchical-dependency-injection/ts/example-config.json b/aio/content/examples/hierarchical-dependency-injection/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/hierarchical-dependency-injection/ts/plnkr.json b/aio/content/examples/hierarchical-dependency-injection/ts/plnkr.json new file mode 100644 index 0000000000..ca92b93b06 --- /dev/null +++ b/aio/content/examples/hierarchical-dependency-injection/ts/plnkr.json @@ -0,0 +1,9 @@ +{ + "description": "Hierachical Dependency Injection", + "basePath": "src/", + "files":[ + "!**/*.d.ts", + "!**/*.js" + ], + "tags": ["dependency", "injection"] +} diff --git a/aio/content/examples/hierarchical-dependency-injection/ts/plnkr.no-link.html b/aio/content/examples/hierarchical-dependency-injection/ts/plnkr.no-link.html new file mode 100644 index 0000000000..797e470d2e --- /dev/null +++ b/aio/content/examples/hierarchical-dependency-injection/ts/plnkr.no-link.html @@ -0,0 +1,744 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/hierarchical-dependency-injection/ts/src/app/app.component.ts b/aio/content/examples/hierarchical-dependency-injection/ts/src/app/app.component.ts new file mode 100644 index 0000000000..34b5dd0a5a --- /dev/null +++ b/aio/content/examples/hierarchical-dependency-injection/ts/src/app/app.component.ts @@ -0,0 +1,21 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'my-app', + template: ` + + + + +

    Hierarchical Dependency Injection

    + + + + + ` +}) +export class AppComponent { + showCars = true; + showHeroes = true; + showVillains = true; +} diff --git a/aio/content/examples/hierarchical-dependency-injection/ts/src/app/app.module.ts b/aio/content/examples/hierarchical-dependency-injection/ts/src/app/app.module.ts new file mode 100644 index 0000000000..6ea18655af --- /dev/null +++ b/aio/content/examples/hierarchical-dependency-injection/ts/src/app/app.module.ts @@ -0,0 +1,33 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { FormsModule } from '@angular/forms'; + +import { AppComponent } from './app.component'; +import { HeroTaxReturnComponent } from './hero-tax-return.component'; +import { HeroesListComponent } from './heroes-list.component'; +import { HeroesService } from './heroes.service'; +import { VillainsListComponent } from './villains-list.component'; + +import { carComponents, carServices } from './car.components'; + +@NgModule({ + imports: [ + BrowserModule, + FormsModule + ], + providers: [ + carServices, + HeroesService + ], + declarations: [ + AppComponent, + carComponents, + HeroesListComponent, + HeroTaxReturnComponent, + VillainsListComponent + ], + bootstrap: [ AppComponent ] +}) +export class AppModule { } + diff --git a/aio/content/examples/hierarchical-dependency-injection/ts/src/app/car.components.ts b/aio/content/examples/hierarchical-dependency-injection/ts/src/app/car.components.ts new file mode 100644 index 0000000000..5b4df19696 --- /dev/null +++ b/aio/content/examples/hierarchical-dependency-injection/ts/src/app/car.components.ts @@ -0,0 +1,74 @@ +import { Component } from '@angular/core'; + +import { + CarService, CarService2, CarService3, + EngineService, EngineService2, TiresService +} from './car.services'; + +////////// CCarComponent //////////// +@Component({ + selector: 'c-car', + template: `
    C: {{description}}
    `, + providers: [ + { provide: CarService, useClass: CarService3 } + ] +}) +export class CCarComponent { + description: string; + constructor(carService: CarService) { + this.description = `${carService.getCar().description} (${carService.name})`; + } +} + +////////// BCarComponent //////////// +@Component({ + selector: 'b-car', + template: ` +
    B: {{description}}
    + + `, + providers: [ + { provide: CarService, useClass: CarService2 }, + { provide: EngineService, useClass: EngineService2 } + ] +}) +export class BCarComponent { + description: string; + constructor(carService: CarService) { + this.description = `${carService.getCar().description} (${carService.name})`; + } +} + +////////// ACarComponent //////////// +@Component({ + selector: 'a-car', + template: ` +
    A: {{description}}
    + ` +}) +export class ACarComponent { + description: string; + constructor(carService: CarService) { + this.description = `${carService.getCar().description} (${carService.name})`; + } +} +////////// CarsComponent //////////// +@Component({ + selector: 'my-cars', + template: ` +

    Cars

    + ` +}) +export class CarsComponent { } + +//////////////// + +export const carComponents = [ + CarsComponent, + ACarComponent, BCarComponent, CCarComponent +]; + +// generic car-related services +export const carServices = [ + CarService, EngineService, TiresService +]; diff --git a/aio/content/examples/hierarchical-dependency-injection/ts/src/app/car.services.ts b/aio/content/examples/hierarchical-dependency-injection/ts/src/app/car.services.ts new file mode 100644 index 0000000000..03c79270b0 --- /dev/null +++ b/aio/content/examples/hierarchical-dependency-injection/ts/src/app/car.services.ts @@ -0,0 +1,95 @@ +import { Injectable } from '@angular/core'; + +/// Model /// +export class Car { + name = 'Avocado Motors'; + constructor(public engine: Engine, public tires: Tires) { } + + get description() { + return `${this.name} car with ` + + `${this.engine.cylinders} cylinders and ${this.tires.make} tires.`; + } +} + +export class Engine { + cylinders = 4; +} + +export class Tires { + make = 'Flintstone'; + model = 'Square'; +} + +//// Engine services /// +@Injectable() +export class EngineService { + id = 'E1'; + getEngine() { return new Engine(); } +} + +@Injectable() +export class EngineService2 { + id = 'E2'; + getEngine() { + const eng = new Engine(); + eng.cylinders = 8; + return eng; + } +} + +//// Tire services /// +@Injectable() +export class TiresService { + id = 'T1'; + getTires() { return new Tires(); } +} + +/// Car Services /// +@Injectable() +export class CarService { + id = 'C1'; + constructor( + protected engineService: EngineService, + protected tiresService: TiresService) { } + + getCar() { + return new Car( + this.engineService.getEngine(), + this.tiresService.getTires()); + } + + get name() { + return `${this.id}-${this.engineService.id}-${this.tiresService.id}`; + } +} + +@Injectable() +export class CarService2 extends CarService { + id = 'C2'; + constructor( + protected engineService: EngineService, + protected tiresService: TiresService) { + super(engineService, tiresService); + } + getCar() { + const car = super.getCar(); + car.name = 'BamBam Motors, BroVan 2000'; + return car; + } +} + +@Injectable() +export class CarService3 extends CarService2 { + id = 'C3'; + constructor( + protected engineService: EngineService, + protected tiresService: TiresService) { + super(engineService, tiresService); + } + getCar() { + const car = super.getCar(); + car.name = 'Chizzamm Motors, Calico UltraMax Supreme'; + return car; + } +} + diff --git a/aio/content/examples/hierarchical-dependency-injection/ts/src/app/hero-tax-return.component.css b/aio/content/examples/hierarchical-dependency-injection/ts/src/app/hero-tax-return.component.css new file mode 100644 index 0000000000..1d29a1d168 --- /dev/null +++ b/aio/content/examples/hierarchical-dependency-injection/ts/src/app/hero-tax-return.component.css @@ -0,0 +1,22 @@ +.tax-return { border: thin dashed green; margin: 1em; padding: 1em; width: 18em; position: relative } +#name { font-weight: bold;} +#tid { float: right; } +input { font-size: 100%; padding-left: 2px; width: 6em; } +input.num { text-align: right; padding-left: 0; padding-right: 4px; width: 4em;} +fieldset { border: 0 none;} + +.msg { + color: white; + font-size: 150%; + position: absolute; + /*opacity: 0.3;*/ + left: 2px; + top: 3em; + width: 98%; + background-color: green; + text-align: center; +} +.msg.canceled { + color: white; + background-color: red; +} diff --git a/aio/content/examples/hierarchical-dependency-injection/ts/src/app/hero-tax-return.component.html b/aio/content/examples/hierarchical-dependency-injection/ts/src/app/hero-tax-return.component.html new file mode 100644 index 0000000000..ebf2dcbaaa --- /dev/null +++ b/aio/content/examples/hierarchical-dependency-injection/ts/src/app/hero-tax-return.component.html @@ -0,0 +1,20 @@ +
    +
    {{message}}
    +
    + {{taxReturn.name}} + +
    +
    + +
    +
    + +
    +
    + + + +
    +
    diff --git a/aio/content/examples/hierarchical-dependency-injection/ts/src/app/hero-tax-return.component.ts b/aio/content/examples/hierarchical-dependency-injection/ts/src/app/hero-tax-return.component.ts new file mode 100644 index 0000000000..78d0f97763 --- /dev/null +++ b/aio/content/examples/hierarchical-dependency-injection/ts/src/app/hero-tax-return.component.ts @@ -0,0 +1,44 @@ +// #docregion +import { Component, EventEmitter, Input, Output } from '@angular/core'; +import { HeroTaxReturn } from './hero'; +import { HeroTaxReturnService } from './hero-tax-return.service'; + +@Component({ + moduleId: module.id, + selector: 'hero-tax-return', + templateUrl: './hero-tax-return.component.html', + styleUrls: [ './hero-tax-return.component.css' ], + // #docregion providers + providers: [ HeroTaxReturnService ] + // #enddocregion providers +}) +export class HeroTaxReturnComponent { + message = ''; + @Output() close = new EventEmitter(); + @Input() + get taxReturn(): HeroTaxReturn { + return this.heroTaxReturnService.taxReturn; + } + set taxReturn (htr: HeroTaxReturn) { + this.heroTaxReturnService.taxReturn = htr; + } + + constructor(private heroTaxReturnService: HeroTaxReturnService ) { } + + onCanceled() { + this.flashMessage('Canceled'); + this.heroTaxReturnService.restoreTaxReturn(); + }; + + onClose() { this.close.emit(); }; + + onSaved() { + this.flashMessage('Saved'); + this.heroTaxReturnService.saveTaxReturn(); + } + + flashMessage(msg: string) { + this.message = msg; + setTimeout(() => this.message = '', 500); + } +} diff --git a/aio/content/examples/hierarchical-dependency-injection/ts/src/app/hero-tax-return.service.ts b/aio/content/examples/hierarchical-dependency-injection/ts/src/app/hero-tax-return.service.ts new file mode 100644 index 0000000000..d6ff0f7fff --- /dev/null +++ b/aio/content/examples/hierarchical-dependency-injection/ts/src/app/hero-tax-return.service.ts @@ -0,0 +1,30 @@ +// #docregion +import { Injectable } from '@angular/core'; +import { HeroTaxReturn } from './hero'; +import { HeroesService } from './heroes.service'; + +@Injectable() +export class HeroTaxReturnService { + private currentTaxReturn: HeroTaxReturn; + private originalTaxReturn: HeroTaxReturn; + + constructor(private heroService: HeroesService) { } + + set taxReturn (htr: HeroTaxReturn) { + this.originalTaxReturn = htr; + this.currentTaxReturn = htr.clone(); + } + + get taxReturn (): HeroTaxReturn { + return this.currentTaxReturn; + } + + restoreTaxReturn() { + this.taxReturn = this.originalTaxReturn; + } + + saveTaxReturn() { + this.taxReturn = this.currentTaxReturn; + this.heroService.saveTaxReturn(this.currentTaxReturn).subscribe(); + } +} diff --git a/aio/content/examples/hierarchical-dependency-injection/ts/src/app/hero.ts b/aio/content/examples/hierarchical-dependency-injection/ts/src/app/hero.ts new file mode 100644 index 0000000000..4ad6ccd8eb --- /dev/null +++ b/aio/content/examples/hierarchical-dependency-injection/ts/src/app/hero.ts @@ -0,0 +1,31 @@ +// #docregion + +export class Hero { + id: number; + name: string; + tid: string; // tax id +} + +//// HeroTaxReturn //// +let nextId = 100; + +export class HeroTaxReturn { + constructor( + public id = nextId++, + public hero: Hero, + public income = 0 ) { + if (id === 0) { id = nextId++; } + } + + get name() { return this.hero.name; } + get tax() { return this.income ? .10 * this.income : 0; } + get tid() { return this.hero.tid; } + + toString() { + return `${this.hero.name}`; + } + + clone() { + return new HeroTaxReturn(this.id, this.hero, this.income); + } +} diff --git a/aio/content/examples/hierarchical-dependency-injection/ts/src/app/heroes-list.component.ts b/aio/content/examples/hierarchical-dependency-injection/ts/src/app/heroes-list.component.ts new file mode 100644 index 0000000000..36cb5ec1c3 --- /dev/null +++ b/aio/content/examples/hierarchical-dependency-injection/ts/src/app/heroes-list.component.ts @@ -0,0 +1,48 @@ +// #docregion +import { Component } from '@angular/core'; +import { Observable } from 'rxjs/Observable'; + +import { Hero, HeroTaxReturn } from './hero'; +import { HeroesService } from './heroes.service'; + +@Component({ + selector: 'heroes-list', + template: ` +
    +

    Hero Tax Returns

    +
      +
    • {{hero.name}} +
    • +
    + + +
    + `, + styles: [ 'li {cursor: pointer;}' ] +}) +export class HeroesListComponent { + heroes: Observable; + selectedTaxReturns: HeroTaxReturn[] = []; + + constructor(private heroesService: HeroesService) { + this.heroes = heroesService.getHeroes(); + } + + showTaxReturn(hero: Hero) { + this.heroesService.getTaxReturn(hero) + .subscribe(htr => { + // show if not currently shown + if (!this.selectedTaxReturns.find(tr => tr.id === htr.id)) { + this.selectedTaxReturns.push(htr); + } + }); + } + + closeTaxReturn(ix: number) { + this.selectedTaxReturns.splice(ix, 1); + } +} diff --git a/aio/content/examples/hierarchical-dependency-injection/ts/src/app/heroes.service.ts b/aio/content/examples/hierarchical-dependency-injection/ts/src/app/heroes.service.ts new file mode 100644 index 0000000000..85b33c89a0 --- /dev/null +++ b/aio/content/examples/hierarchical-dependency-injection/ts/src/app/heroes.service.ts @@ -0,0 +1,47 @@ +import { Injectable } from '@angular/core'; + +import { Observable } from 'rxjs/Observable'; +import { Observer } from 'rxjs/Observer'; + +import { Hero, HeroTaxReturn } from './hero'; + +@Injectable() +export class HeroesService { + heroes: Hero[] = [ + { id: 1, name: 'RubberMan', tid: '082-27-5678'}, + { id: 2, name: 'Tornado', tid: '099-42-4321'} + ]; + + heroTaxReturns: HeroTaxReturn[] = [ + new HeroTaxReturn(10, this.heroes[0], 35000), + new HeroTaxReturn(20, this.heroes[1], 1250000) + ]; + + getHeroes(): Observable { + return new Observable((observer: Observer) => { + observer.next(this.heroes); + observer.complete(); + }); + } + + getTaxReturn(hero: Hero): Observable { + return new Observable((observer: Observer) => { + const htr = this.heroTaxReturns.find(t => t.hero.id === hero.id); + observer.next(htr || new HeroTaxReturn(0, hero)); + observer.complete(); + }); + } + + saveTaxReturn(heroTaxReturn: HeroTaxReturn): Observable { + return new Observable((observer: Observer) => { + const htr = this.heroTaxReturns.find(t => t.id === heroTaxReturn.id); + if (htr) { + heroTaxReturn = Object.assign(htr, heroTaxReturn); // demo: mutate + } else { + this.heroTaxReturns.push(heroTaxReturn); + } + observer.next(heroTaxReturn); + observer.complete(); + }); + } +} diff --git a/aio/content/examples/hierarchical-dependency-injection/ts/src/app/villains-list.component.html b/aio/content/examples/hierarchical-dependency-injection/ts/src/app/villains-list.component.html new file mode 100644 index 0000000000..4d1fb55482 --- /dev/null +++ b/aio/content/examples/hierarchical-dependency-injection/ts/src/app/villains-list.component.html @@ -0,0 +1,6 @@ +
    +

    Villains

    +
      +
    • {{villain.name}}
    • +
    +
    diff --git a/aio/content/examples/hierarchical-dependency-injection/ts/src/app/villains-list.component.ts b/aio/content/examples/hierarchical-dependency-injection/ts/src/app/villains-list.component.ts new file mode 100644 index 0000000000..105aaca14f --- /dev/null +++ b/aio/content/examples/hierarchical-dependency-injection/ts/src/app/villains-list.component.ts @@ -0,0 +1,21 @@ +// #docregion +import { Component } from '@angular/core'; +import { Observable } from 'rxjs/Observable'; + +import { Villain, VillainsService } from './villains.service'; + +// #docregion metadata +@Component({ + moduleId: module.id, + selector: 'villains-list', + templateUrl: './villains-list.component.html', + providers: [ VillainsService ] +}) +// #enddocregion metadata +export class VillainsListComponent { + villaines: Observable; + + constructor(private villainesService: VillainsService) { + this.villaines = villainesService.getVillains(); + } +} diff --git a/aio/content/examples/hierarchical-dependency-injection/ts/src/app/villains.service.ts b/aio/content/examples/hierarchical-dependency-injection/ts/src/app/villains.service.ts new file mode 100644 index 0000000000..3d480c20af --- /dev/null +++ b/aio/content/examples/hierarchical-dependency-injection/ts/src/app/villains.service.ts @@ -0,0 +1,17 @@ +import { Injectable } from '@angular/core'; + +import { of } from 'rxjs/observable/of'; + +export interface Villain { id: number; name: string; } + +@Injectable() +export class VillainsService { + villains: Villain[] = [ + { id: 1, name: 'Dr. Evil'}, + { id: 2, name: 'Moriarty'} + ]; + + getVillains() { + return of(this.villains); + } +} diff --git a/aio/content/examples/hierarchical-dependency-injection/ts/src/index.html b/aio/content/examples/hierarchical-dependency-injection/ts/src/index.html new file mode 100644 index 0000000000..0ea32679e6 --- /dev/null +++ b/aio/content/examples/hierarchical-dependency-injection/ts/src/index.html @@ -0,0 +1,26 @@ + + + + Hierarchical Injectors + + + + + + + + + + + + + + + + + loading... + + + diff --git a/aio/content/examples/hierarchical-dependency-injection/ts/src/main.ts b/aio/content/examples/hierarchical-dependency-injection/ts/src/main.ts new file mode 100644 index 0000000000..6b6532d428 --- /dev/null +++ b/aio/content/examples/hierarchical-dependency-injection/ts/src/main.ts @@ -0,0 +1,5 @@ +// #docregion +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/homepage-hello-world/e2e-spec.ts b/aio/content/examples/homepage-hello-world/e2e-spec.ts new file mode 100644 index 0000000000..c4c6464937 --- /dev/null +++ b/aio/content/examples/homepage-hello-world/e2e-spec.ts @@ -0,0 +1,30 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by } from 'protractor'; + +describe('Homepage Hello World', function () { + + beforeAll(function () { + browser.get(''); + }); + + // Does it even launch? + let expectedLabel = 'Name:'; + it(`should display the label: ${expectedLabel}`, function () { + expect(element(by.css('label')).getText()).toEqual(expectedLabel); + }); + + it('should display entered name', function () { + let testName = 'Bobby Joe'; + let nameEle = element.all(by.css('input')).get(0); + nameEle.getAttribute('value').then(function(value: string) { + nameEle.sendKeys(testName); + let newValue = value + testName; // old input box value + new name + expect(nameEle.getAttribute('value')).toEqual(newValue); + }).then(function() { + // Check the interpolated message built from name + let helloEle = element.all(by.css('h1')).get(0); + expect(helloEle.getText()).toEqual('Hello ' + testName + '!'); + }); + }); +}); diff --git a/aio/content/examples/homepage-hello-world/ts/example-config.json b/aio/content/examples/homepage-hello-world/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/homepage-hello-world/ts/plnkr.json b/aio/content/examples/homepage-hello-world/ts/plnkr.json new file mode 100644 index 0000000000..bfe6aecc8b --- /dev/null +++ b/aio/content/examples/homepage-hello-world/ts/plnkr.json @@ -0,0 +1,9 @@ +{ + "description": "Hello World", + "basePath": "src/", + "files":[ + "!**/*.d.ts", + "!**/*.js", + "!**/*.[1].*" + ] +} diff --git a/aio/content/examples/homepage-hello-world/ts/plnkr.no-link.html b/aio/content/examples/homepage-hello-world/ts/plnkr.no-link.html new file mode 100644 index 0000000000..be5787c68f --- /dev/null +++ b/aio/content/examples/homepage-hello-world/ts/plnkr.no-link.html @@ -0,0 +1,217 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/homepage-hello-world/ts/src/app/app.module.ts b/aio/content/examples/homepage-hello-world/ts/src/app/app.module.ts new file mode 100644 index 0000000000..55a2ef3693 --- /dev/null +++ b/aio/content/examples/homepage-hello-world/ts/src/app/app.module.ts @@ -0,0 +1,16 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { FormsModule } from '@angular/forms'; + +import { HelloWorldComponent } from './hello_world'; + +@NgModule({ + imports: [ + BrowserModule, + FormsModule + ], + declarations: [ HelloWorldComponent ], + bootstrap: [ HelloWorldComponent ] +}) +export class AppModule { } diff --git a/aio/content/examples/homepage-hello-world/ts/src/app/hello_world.html b/aio/content/examples/homepage-hello-world/ts/src/app/hello_world.html new file mode 100644 index 0000000000..13af8fb34e --- /dev/null +++ b/aio/content/examples/homepage-hello-world/ts/src/app/hello_world.html @@ -0,0 +1,7 @@ + + + + +
    + +

    Hello {{yourName}}!

    \ No newline at end of file diff --git a/aio/content/examples/homepage-hello-world/ts/src/app/hello_world.ts b/aio/content/examples/homepage-hello-world/ts/src/app/hello_world.ts new file mode 100644 index 0000000000..7bdf994436 --- /dev/null +++ b/aio/content/examples/homepage-hello-world/ts/src/app/hello_world.ts @@ -0,0 +1,18 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + // Set the base for module-relative URLs + moduleId: module.id, + + // Declare the tag name in index.html to where the component attaches + selector: 'hello-world', + + // Location of the template for this component + templateUrl: './hello_world.html' +}) +export class HelloWorldComponent { + + // Declaring the variable for binding with initial value + yourName: string = ''; +} diff --git a/aio/content/examples/homepage-hello-world/ts/src/index.1.html b/aio/content/examples/homepage-hello-world/ts/src/index.1.html new file mode 100644 index 0000000000..a92d32fa9c --- /dev/null +++ b/aio/content/examples/homepage-hello-world/ts/src/index.1.html @@ -0,0 +1,32 @@ + + + + + Angular Hello World + + + + + + + + + + + + + + + + + + + + + + Loading... + + + diff --git a/aio/content/examples/homepage-hello-world/ts/src/index.html b/aio/content/examples/homepage-hello-world/ts/src/index.html new file mode 100644 index 0000000000..9dab660d10 --- /dev/null +++ b/aio/content/examples/homepage-hello-world/ts/src/index.html @@ -0,0 +1,28 @@ + + + + + Angular Hello World + + + + + + + + + + + + + + + + + + Loading... + + + diff --git a/aio/content/examples/homepage-hello-world/ts/src/main.ts b/aio/content/examples/homepage-hello-world/ts/src/main.ts new file mode 100644 index 0000000000..6b6532d428 --- /dev/null +++ b/aio/content/examples/homepage-hello-world/ts/src/main.ts @@ -0,0 +1,5 @@ +// #docregion +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/homepage-tabs/e2e-spec.ts b/aio/content/examples/homepage-tabs/e2e-spec.ts new file mode 100644 index 0000000000..2131d75906 --- /dev/null +++ b/aio/content/examples/homepage-tabs/e2e-spec.ts @@ -0,0 +1,17 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by } from 'protractor'; + +describe('Homepage Tabs', function () { + + beforeAll(function () { + browser.get(''); + }); + + // Does it even launch? + let expectedAppTitle = 'Tabs Demo'; + it(`should display app title: ${expectedAppTitle}`, function () { + expect(element(by.css('h4')).getText()).toEqual(expectedAppTitle); + }); + +}); diff --git a/aio/content/examples/homepage-tabs/ts/example-config.json b/aio/content/examples/homepage-tabs/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/homepage-tabs/ts/plnkr.json b/aio/content/examples/homepage-tabs/ts/plnkr.json new file mode 100644 index 0000000000..c1a33dc8f0 --- /dev/null +++ b/aio/content/examples/homepage-tabs/ts/plnkr.json @@ -0,0 +1,9 @@ +{ + "description": "Tabs", + "basePath": "src/", + "files":[ + "!**/*.d.ts", + "!**/*.js", + "!**/*.[1].*" + ] +} diff --git a/aio/content/examples/homepage-tabs/ts/plnkr.no-link.html b/aio/content/examples/homepage-tabs/ts/plnkr.no-link.html new file mode 100644 index 0000000000..5bcce585ea --- /dev/null +++ b/aio/content/examples/homepage-tabs/ts/plnkr.no-link.html @@ -0,0 +1,292 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/homepage-tabs/ts/src/app/app.module.ts b/aio/content/examples/homepage-tabs/ts/src/app/app.module.ts new file mode 100644 index 0000000000..bd2193755c --- /dev/null +++ b/aio/content/examples/homepage-tabs/ts/src/app/app.module.ts @@ -0,0 +1,17 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; + +import { DiDemoComponent } from './di_demo'; +import { UiTabsComponent, UiPaneDirective } from './ui_tabs'; + +@NgModule({ + imports: [ BrowserModule ], + declarations: [ + DiDemoComponent, + UiTabsComponent, + UiPaneDirective + ], + bootstrap: [ DiDemoComponent ] +}) +export class AppModule { } diff --git a/aio/content/examples/homepage-tabs/ts/src/app/di_demo.ts b/aio/content/examples/homepage-tabs/ts/src/app/di_demo.ts new file mode 100644 index 0000000000..be72ae5c79 --- /dev/null +++ b/aio/content/examples/homepage-tabs/ts/src/app/di_demo.ts @@ -0,0 +1,45 @@ +// #docregion +import { Component } from '@angular/core'; + +class Detail { + title: string; + text: string; +} + +@Component({ + selector: 'di-demo', + template: ` +

    Tabs Demo

    + + + + + +
    + + ` +}) +export class DiDemoComponent { + details: Detail[] = []; + id: number = 0; + + addDetail() { + this.id++; + this.details.push({ + title: `Detail ${this.id}`, + text: `Some detail text for ${this.id}...` + }); + } + + removeDetail(detail: Detail) { + this.details = this.details.filter((d) => d !== detail); + } +} + diff --git a/aio/content/examples/homepage-tabs/ts/src/app/ui_tabs.ts b/aio/content/examples/homepage-tabs/ts/src/app/ui_tabs.ts new file mode 100644 index 0000000000..5e2f47b140 --- /dev/null +++ b/aio/content/examples/homepage-tabs/ts/src/app/ui_tabs.ts @@ -0,0 +1,51 @@ +// #docregion +import { Component, Directive, Input, QueryList, + ViewContainerRef, TemplateRef, ContentChildren } from '@angular/core'; + +@Directive({ + selector: '[uiPane]' +}) +export class UiPaneDirective { + @Input() title: string; + private _active: boolean = false; + + constructor(public viewContainer: ViewContainerRef, + public templateRef: TemplateRef) { } + + @Input() set active(active: boolean) { + if (active === this._active) { return; } + this._active = active; + if (active) { + this.viewContainer.createEmbeddedView(this.templateRef); + } else { + this.viewContainer.remove(0); + } + } + + get active(): boolean { + return this._active; + } +} + +@Component({ + selector: 'ui-tabs', + template: ` + + + `, + styles: ['a { cursor: pointer; cursor: hand; }'] +}) +export class UiTabsComponent { + @ContentChildren(UiPaneDirective) panes: QueryList; + + select(pane: UiPaneDirective) { + this.panes.toArray().forEach((p: UiPaneDirective) => p.active = p === pane); + } +} + diff --git a/aio/content/examples/homepage-tabs/ts/src/index.1.html b/aio/content/examples/homepage-tabs/ts/src/index.1.html new file mode 100644 index 0000000000..7d0a0131e6 --- /dev/null +++ b/aio/content/examples/homepage-tabs/ts/src/index.1.html @@ -0,0 +1,33 @@ + + + + + Angular Tabs + + + + + + + + + + + + + + + + + + + + + + + Loading... + + + diff --git a/aio/content/examples/homepage-tabs/ts/src/index.html b/aio/content/examples/homepage-tabs/ts/src/index.html new file mode 100644 index 0000000000..d38b36e033 --- /dev/null +++ b/aio/content/examples/homepage-tabs/ts/src/index.html @@ -0,0 +1,29 @@ + + + + + Angular Tabs + + + + + + + + + + + + + + + + + + + Loading... + + + diff --git a/aio/content/examples/homepage-tabs/ts/src/main.ts b/aio/content/examples/homepage-tabs/ts/src/main.ts new file mode 100644 index 0000000000..f332d1d245 --- /dev/null +++ b/aio/content/examples/homepage-tabs/ts/src/main.ts @@ -0,0 +1,6 @@ +// #docregion +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/homepage-todo/e2e-spec.ts b/aio/content/examples/homepage-todo/e2e-spec.ts new file mode 100644 index 0000000000..fb74e4e70f --- /dev/null +++ b/aio/content/examples/homepage-todo/e2e-spec.ts @@ -0,0 +1,17 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by } from 'protractor'; + +describe('Homepage Todo', function () { + + beforeAll(function () { + browser.get(''); + }); + + // Does it even launch? + let expectedAppTitle = 'Todo'; + it(`should display app title: ${expectedAppTitle}`, function () { + expect(element(by.css('h2')).getText()).toEqual(expectedAppTitle); + }); + +}); diff --git a/aio/content/examples/homepage-todo/ts/example-config.json b/aio/content/examples/homepage-todo/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/homepage-todo/ts/plnkr.json b/aio/content/examples/homepage-todo/ts/plnkr.json new file mode 100644 index 0000000000..8e69701221 --- /dev/null +++ b/aio/content/examples/homepage-todo/ts/plnkr.json @@ -0,0 +1,9 @@ +{ + "description": "Todo", + "basePath": "src/", + "files":[ + "!**/*.d.ts", + "!**/*.js", + "!**/*.[1].*" + ] +} diff --git a/aio/content/examples/homepage-todo/ts/plnkr.no-link.html b/aio/content/examples/homepage-todo/ts/plnkr.no-link.html new file mode 100644 index 0000000000..c067783ced --- /dev/null +++ b/aio/content/examples/homepage-todo/ts/plnkr.no-link.html @@ -0,0 +1,303 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/homepage-todo/ts/src/app/app.module.ts b/aio/content/examples/homepage-todo/ts/src/app/app.module.ts new file mode 100644 index 0000000000..a77bb640ab --- /dev/null +++ b/aio/content/examples/homepage-todo/ts/src/app/app.module.ts @@ -0,0 +1,22 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { FormsModule } from '@angular/forms'; + +import { TodoAppComponent } from './todo_app'; +import { TodoListComponent } from './todo_list'; +import { TodoFormComponent } from './todo_form'; + +@NgModule({ + imports: [ + BrowserModule, + FormsModule + ], + declarations: [ + TodoAppComponent, + TodoListComponent, + TodoFormComponent + ], + bootstrap: [ TodoAppComponent ] +}) +export class AppModule { } diff --git a/aio/content/examples/homepage-todo/ts/src/app/todo.ts b/aio/content/examples/homepage-todo/ts/src/app/todo.ts new file mode 100644 index 0000000000..35faec9705 --- /dev/null +++ b/aio/content/examples/homepage-todo/ts/src/app/todo.ts @@ -0,0 +1,6 @@ +// #docregion +// Declare an interaface for type safety +export interface Todo { + text: string; + done: boolean; +} diff --git a/aio/content/examples/homepage-todo/ts/src/app/todo_app.ts b/aio/content/examples/homepage-todo/ts/src/app/todo_app.ts new file mode 100644 index 0000000000..e56bad95b6 --- /dev/null +++ b/aio/content/examples/homepage-todo/ts/src/app/todo_app.ts @@ -0,0 +1,38 @@ +// #docregion +import { Component } from '@angular/core'; + +import { Todo } from './todo'; + +@Component({ + selector: 'todo-app', + template: ` +

    Todo

    + {{remaining}} of {{todos.length}} remaining + [ archive ] + + + `, + styles: ['a { cursor: pointer; cursor: hand; }'] +}) +export class TodoAppComponent { + todos: Todo[] = [ + {text: 'learn angular', done: true}, + {text: 'build an angular app', done: false} + ]; + + get remaining() { + return this.todos.filter(todo => !todo.done).length; + } + + archive(): void { + let oldTodos = this.todos; + this.todos = []; + oldTodos.forEach(todo => { + if (!todo.done) { this.todos.push(todo); } + }); + } + + addTask(task: Todo) { + this.todos.push(task); + } +} diff --git a/aio/content/examples/homepage-todo/ts/src/app/todo_form.ts b/aio/content/examples/homepage-todo/ts/src/app/todo_form.ts new file mode 100644 index 0000000000..38e8d991a7 --- /dev/null +++ b/aio/content/examples/homepage-todo/ts/src/app/todo_form.ts @@ -0,0 +1,25 @@ +// #docregion +import { Component, Output, EventEmitter } from '@angular/core'; +import { Todo } from './todo'; + +@Component({ + selector: 'todo-form', + template: ` +
    + + +
    ` +}) +export class TodoFormComponent { + @Output() newTask = new EventEmitter(); + task: string = ''; + + addTodo() { + if (this.task) { + this.newTask.emit({text: this.task, done: false}); + } + this.task = ''; + } +} + diff --git a/aio/content/examples/homepage-todo/ts/src/app/todo_list.ts b/aio/content/examples/homepage-todo/ts/src/app/todo_list.ts new file mode 100644 index 0000000000..b6495f37c2 --- /dev/null +++ b/aio/content/examples/homepage-todo/ts/src/app/todo_list.ts @@ -0,0 +1,24 @@ +// #docregion +import { Component, Input } from '@angular/core'; + +import { Todo } from './todo'; + +@Component({ + selector: 'todo-list', + styles: [` + .done-true { + text-decoration: line-through; + color: grey; + }` + ], + template: ` +
      +
    • + + {{todo.text}} +
    • +
    ` +}) +export class TodoListComponent { + @Input() todos: Todo[]; +} diff --git a/aio/content/examples/homepage-todo/ts/src/index.1.html b/aio/content/examples/homepage-todo/ts/src/index.1.html new file mode 100644 index 0000000000..2fcc1e01e9 --- /dev/null +++ b/aio/content/examples/homepage-todo/ts/src/index.1.html @@ -0,0 +1,33 @@ + + + + + Angular Todos + + + + + + + + + + + + + + + + + + + + + + + Loading... + + + diff --git a/aio/content/examples/homepage-todo/ts/src/index.html b/aio/content/examples/homepage-todo/ts/src/index.html new file mode 100644 index 0000000000..e7a656a106 --- /dev/null +++ b/aio/content/examples/homepage-todo/ts/src/index.html @@ -0,0 +1,29 @@ + + + + + Angular Todos + + + + + + + + + + + + + + + + + + + Loading... + + + diff --git a/aio/content/examples/homepage-todo/ts/src/main.ts b/aio/content/examples/homepage-todo/ts/src/main.ts new file mode 100644 index 0000000000..6b6532d428 --- /dev/null +++ b/aio/content/examples/homepage-todo/ts/src/main.ts @@ -0,0 +1,5 @@ +// #docregion +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/jsconfig.json b/aio/content/examples/jsconfig.json new file mode 100644 index 0000000000..82750484d1 --- /dev/null +++ b/aio/content/examples/jsconfig.json @@ -0,0 +1,6 @@ +{ + "compilerOptions": { + "target": "ES5", + "module": "commonjs" + } +} diff --git a/aio/content/examples/lifecycle-hooks/e2e-spec.ts b/aio/content/examples/lifecycle-hooks/e2e-spec.ts new file mode 100644 index 0000000000..8e9acb1c76 --- /dev/null +++ b/aio/content/examples/lifecycle-hooks/e2e-spec.ts @@ -0,0 +1,178 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by } from 'protractor'; + +describe('Lifecycle hooks', function () { + + beforeAll(function () { + browser.get(''); + }); + + it('should open correctly', function () { + expect(element.all(by.css('h2')).get(0).getText()).toEqual('Peek-A-Boo'); + }); + + it('should support peek-a-boo', function () { + let pabComp = element(by.css('peek-a-boo-parent peek-a-boo')); + expect(pabComp.isPresent()).toBe(false, 'should not be able to find the "peek-a-boo" component'); + let pabButton = element.all(by.css('peek-a-boo-parent button')).get(0); + let updateHeroButton = element.all(by.css('peek-a-boo-parent button')).get(1); + expect(pabButton.getText()).toContain('Create Peek'); + pabButton.click().then(function () { + expect(pabButton.getText()).toContain('Destroy Peek'); + expect(pabComp.isDisplayed()).toBe(true, 'should be able to see the "peek-a-boo" component'); + expect(pabComp.getText()).toContain('Windstorm'); + expect(pabComp.getText()).not.toContain('Windstorm!'); + expect(updateHeroButton.isPresent()).toBe(true, 'should be able to see the update hero button'); + return updateHeroButton.click(); + }).then(function () { + expect(pabComp.getText()).toContain('Windstorm!'); + return pabButton.click(); + }).then(function () { + expect(pabComp.isPresent()).toBe(false, 'should no longer be able to find the "peek-a-boo" component'); + }); + }); + + it('should support OnChanges hook', function () { + let onChangesViewEle = element.all(by.css('on-changes div')).get(0); + let inputEles = element.all(by.css('on-changes-parent input')); + let heroNameInputEle = inputEles.get(1); + let powerInputEle = inputEles.get(0); + let titleEle = onChangesViewEle.element(by.css('p')); + let changeLogEles = onChangesViewEle.all(by.css('div')); + + expect(titleEle.getText()).toContain('Windstorm can sing'); + expect(changeLogEles.count()).toEqual(2, 'should start with 2 messages'); + heroNameInputEle.sendKeys('-foo-'); + expect(titleEle.getText()).toContain('Windstorm-foo- can sing'); + expect(changeLogEles.count()).toEqual(2, 'should still have 2 messages'); + powerInputEle.sendKeys('-bar-'); + expect(titleEle.getText()).toContain('Windstorm-foo- can sing-bar-'); + // 7 == 2 previously + length of '-bar-' + expect(changeLogEles.count()).toEqual(7, 'should have 7 messages now'); + }); + + it('should support DoCheck hook', function () { + let doCheckViewEle = element.all(by.css('do-check div')).get(0); + let inputEles = element.all(by.css('do-check-parent input')); + let heroNameInputEle = inputEles.get(1); + let powerInputEle = inputEles.get(0); + let titleEle = doCheckViewEle.element(by.css('p')); + let changeLogEles = doCheckViewEle.all(by.css('div')); + let logCount: number; + + expect(titleEle.getText()).toContain('Windstorm can sing'); + changeLogEles.count().then(function(count: number) { + // 3 messages to start + expect(count).toEqual(3, 'should start with 3 messages'); + logCount = count; + return heroNameInputEle.sendKeys('-foo-'); + }).then(function () { + expect(titleEle.getText()).toContain('Windstorm-foo- can sing'); + return changeLogEles.count(); + }).then(function(count: number) { + // one more for each keystroke + expect(count).toEqual(logCount + 5, 'should add 5 more messages'); + logCount = count; + return powerInputEle.sendKeys('-bar-'); + }).then(function () { + expect(titleEle.getText()).toContain('Windstorm-foo- can sing-bar-'); + expect(changeLogEles.count()).toEqual(logCount + 6, 'should add 6 more messages'); + }); + }); + + it('should support AfterView hooks', function () { + let parentEle = element(by.tagName('after-view-parent')); + let buttonEle = parentEle.element(by.tagName('button')); // Reset + let commentEle = parentEle.element(by.className('comment')); + let logEles = parentEle.all(by.css('h4 ~ div')); + let childViewInputEle = parentEle.element(by.css('my-child-view input')); + let logCount: number; + + expect(childViewInputEle.getAttribute('value')).toContain('Magneta'); + expect(commentEle.isPresent()).toBe(false, 'comment should not be in DOM'); + + logEles.count().then(function(count: number) { + logCount = count; + return childViewInputEle.sendKeys('-test-'); + }).then(function() { + expect(childViewInputEle.getAttribute('value')).toContain('-test-'); + expect(commentEle.isPresent()).toBe(true, 'should have comment because >10 chars'); + expect(commentEle.getText()).toContain('long name'); + return logEles.count(); + }).then(function(count: number) { + expect(logCount + 7).toEqual(count, '7 additional log messages should have been added'); + logCount = count; + return buttonEle.click(); + }).then(function() { + expect(logEles.count()).toBeLessThan(logCount, 'log should shrink after reset'); + }); + }); + + + it('should support AfterContent hooks', function () { + let parentEle = element(by.tagName('after-content-parent')); + let buttonEle = parentEle.element(by.tagName('button')); // Reset + let commentEle = parentEle.element(by.className('comment')); + let logEles = parentEle.all(by.css('h4 ~ div')); + let childViewInputEle = parentEle.element(by.css('my-child input')); + let logCount: number; + + expect(childViewInputEle.getAttribute('value')).toContain('Magneta'); + expect(commentEle.isPresent()).toBe(false, 'comment should not be in DOM'); + + logEles.count().then(function(count: number) { + logCount = count; + return childViewInputEle.sendKeys('-test-'); + }).then(function() { + expect(childViewInputEle.getAttribute('value')).toContain('-test-'); + expect(commentEle.isPresent()).toBe(true, 'should have comment because >10 chars'); + expect(commentEle.getText()).toContain('long name'); + return logEles.count(); + }).then(function(count: number) { + expect(logCount + 5).toEqual(count, '5 additional log messages should have been added'); + logCount = count; + return buttonEle.click(); + }).then(function() { + expect(logEles.count()).toBeLessThan(logCount, 'log should shrink after reset'); + }); + }); + + it('should support spy\'s OnInit & OnDestroy hooks', function () { + let inputEle = element(by.css('spy-parent input')); + let addHeroButtonEle = element(by.cssContainingText('spy-parent button', 'Add Hero')); + let resetHeroesButtonEle = element(by.cssContainingText('spy-parent button', 'Reset Heroes')); + let heroEles = element.all(by.css('spy-parent div[mySpy')); + let logEles = element.all(by.css('spy-parent h4 ~ div')); + expect(heroEles.count()).toBe(2, 'should have two heroes displayed'); + expect(logEles.count()).toBe(2, 'should have two log entries'); + inputEle.sendKeys('-test-').then(function() { + return addHeroButtonEle.click(); + }).then(function() { + expect(heroEles.count()).toBe(3, 'should have added one hero'); + expect(heroEles.get(2).getText()).toContain('-test-'); + expect(logEles.count()).toBe(3, 'should now have 3 log entries'); + return resetHeroesButtonEle.click(); + }).then(function() { + expect(heroEles.count()).toBe(0, 'should no longer have any heroes'); + expect(logEles.count()).toBe(7, 'should now have 7 log entries - 3 orig + 1 reset + 3 removeall'); + }); + }); + + it('should support "spy counter"', function () { + let updateCounterButtonEle = element(by.cssContainingText('counter-parent button', 'Update')); + let resetCounterButtonEle = element(by.cssContainingText('counter-parent button', 'Reset')); + let textEle = element(by.css('counter-parent my-counter > div')); + let logEles = element.all(by.css('counter-parent h4 ~ div')); + expect(textEle.getText()).toContain('Counter = 0'); + expect(logEles.count()).toBe(2, 'should start with two log entries'); + updateCounterButtonEle.click().then(function() { + expect(textEle.getText()).toContain('Counter = 1'); + expect(logEles.count()).toBe(3, 'should now have 3 log entries'); + return resetCounterButtonEle.click(); + }).then(function() { + expect(textEle.getText()).toContain('Counter = 0'); + expect(logEles.count()).toBe(7, 'should now have 7 log entries - 3 prev + 1 reset + 2 destroy + 1 init'); + }); + }); +}); diff --git a/aio/content/examples/lifecycle-hooks/ts/example-config.json b/aio/content/examples/lifecycle-hooks/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/lifecycle-hooks/ts/plnkr.json b/aio/content/examples/lifecycle-hooks/ts/plnkr.json new file mode 100644 index 0000000000..49290aa804 --- /dev/null +++ b/aio/content/examples/lifecycle-hooks/ts/plnkr.json @@ -0,0 +1,9 @@ +{ + "description": "Lifecycle Hooks", + "basePath": "src/", + "files":["!**/*.d.ts", "!**/*.js"], + "tags": ["lifecycle", "hooks", + "OnInit", "OnDestroy", "OnChange", "DoCheck", + "AfterContentInit", "AfterContentChecked", + "AfterViewInit", "AfterViewChecked"] +} diff --git a/aio/content/examples/lifecycle-hooks/ts/plnkr.no-link.html b/aio/content/examples/lifecycle-hooks/ts/plnkr.no-link.html new file mode 100644 index 0000000000..5cf3712760 --- /dev/null +++ b/aio/content/examples/lifecycle-hooks/ts/plnkr.no-link.html @@ -0,0 +1,1097 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/lifecycle-hooks/ts/src/app/after-content.component.ts b/aio/content/examples/lifecycle-hooks/ts/src/app/after-content.component.ts new file mode 100644 index 0000000000..dfd2b80d24 --- /dev/null +++ b/aio/content/examples/lifecycle-hooks/ts/src/app/after-content.component.ts @@ -0,0 +1,116 @@ +// #docplaster +// #docregion +import { AfterContentChecked, AfterContentInit, Component, ContentChild } from '@angular/core'; + +import { LoggerService } from './logger.service'; + +////////////////// +@Component({ + selector: 'my-child', + template: '' +}) +export class ChildComponent { + hero = 'Magneta'; +} + +////////////////////// +@Component({ + selector: 'after-content', +// #docregion template + template: ` +
    -- projected content begins --
    + +
    -- projected content ends --
    ` +// #enddocregion template + + ` +

    + {{comment}} +

    + ` +}) +// #docregion hooks +export class AfterContentComponent implements AfterContentChecked, AfterContentInit { + private prevHero = ''; + comment = ''; + + // Query for a CONTENT child of type `ChildComponent` + @ContentChild(ChildComponent) contentChild: ChildComponent; + +// #enddocregion hooks + constructor(private logger: LoggerService) { + this.logIt('AfterContent constructor'); + } + +// #docregion hooks + ngAfterContentInit() { + // contentChild is set after the content has been initialized + this.logIt('AfterContentInit'); + this.doSomething(); + } + + ngAfterContentChecked() { + // contentChild is updated after the content has been checked + if (this.prevHero === this.contentChild.hero) { + this.logIt('AfterContentChecked (no change)'); + } else { + this.prevHero = this.contentChild.hero; + this.logIt('AfterContentChecked'); + this.doSomething(); + } + } +// #enddocregion hooks +// #docregion do-something + + // This surrogate for real business logic sets the `comment` + private doSomething() { + this.comment = this.contentChild.hero.length > 10 ? `That's a long name` : ''; + } + + private logIt(method: string) { + let child = this.contentChild; + let message = `${method}: ${child ? child.hero : 'no'} child content`; + this.logger.log(message); + } +// #docregion hooks + // ... +} +// #enddocregion hooks + +////////////// +@Component({ + selector: 'after-content-parent', + template: ` +
    +

    AfterContent

    + +
    ` + +// #docregion parent-template + ` + + ` +// #enddocregion parent-template ++ `
    + +

    -- AfterContent Logs --

    +

    +
    {{msg}}
    +
    + `, + styles: ['.parent {background: burlywood}'], + providers: [LoggerService] +}) +export class AfterContentParentComponent { + logs: string[]; + show = true; + + constructor(private logger: LoggerService) { + this.logs = logger.logs; + } + + reset() { + this.logs.length = 0; + // quickly remove and reload AfterContentComponent which recreates it + this.show = false; + this.logger.tick_then(() => this.show = true); + } +} diff --git a/aio/content/examples/lifecycle-hooks/ts/src/app/after-view.component.ts b/aio/content/examples/lifecycle-hooks/ts/src/app/after-view.component.ts new file mode 100644 index 0000000000..71310e4530 --- /dev/null +++ b/aio/content/examples/lifecycle-hooks/ts/src/app/after-view.component.ts @@ -0,0 +1,118 @@ +// #docplaster +// #docregion +import { AfterViewChecked, AfterViewInit, Component, ViewChild } from '@angular/core'; + +import { LoggerService } from './logger.service'; + +////////////////// +// #docregion child-view +@Component({ + selector: 'my-child-view', + template: '' +}) +export class ChildViewComponent { + hero = 'Magneta'; +} +// #enddocregion child-view + +////////////////////// +@Component({ + selector: 'after-view', +// #docregion template + template: ` +
    -- child view begins --
    + +
    -- child view ends --
    ` +// #enddocregion template + + ` +

    + {{comment}} +

    + ` +}) +// #docregion hooks +export class AfterViewComponent implements AfterViewChecked, AfterViewInit { + private prevHero = ''; + + // Query for a VIEW child of type `ChildViewComponent` + @ViewChild(ChildViewComponent) viewChild: ChildViewComponent; + +// #enddocregion hooks + constructor(private logger: LoggerService) { + this.logIt('AfterView constructor'); + } + +// #docregion hooks + ngAfterViewInit() { + // viewChild is set after the view has been initialized + this.logIt('AfterViewInit'); + this.doSomething(); + } + + ngAfterViewChecked() { + // viewChild is updated after the view has been checked + if (this.prevHero === this.viewChild.hero) { + this.logIt('AfterViewChecked (no change)'); + } else { + this.prevHero = this.viewChild.hero; + this.logIt('AfterViewChecked'); + this.doSomething(); + } + } +// #enddocregion hooks + + comment = ''; + +// #docregion do-something + // This surrogate for real business logic sets the `comment` + private doSomething() { + let c = this.viewChild.hero.length > 10 ? `That's a long name` : ''; + if (c !== this.comment) { + // Wait a tick because the component's view has already been checked + this.logger.tick_then(() => this.comment = c); + } + } +// #enddocregion do-something + + private logIt(method: string) { + let child = this.viewChild; + let message = `${method}: ${child ? child.hero : 'no'} child view`; + this.logger.log(message); + } +// #docregion hooks + // ... +} +// #enddocregion hooks + +////////////// +@Component({ + selector: 'after-view-parent', + template: ` +
    +

    AfterView

    + + + +

    -- AfterView Logs --

    +

    +
    {{msg}}
    +
    + `, + styles: ['.parent {background: burlywood}'], + providers: [LoggerService] +}) +export class AfterViewParentComponent { + logs: string[]; + show = true; + + constructor(private logger: LoggerService) { + this.logs = logger.logs; + } + + reset() { + this.logs.length = 0; + // quickly remove and reload AfterViewComponent which recreates it + this.show = false; + this.logger.tick_then(() => this.show = true); + } +} diff --git a/aio/content/examples/lifecycle-hooks/ts/src/app/app.component.html b/aio/content/examples/lifecycle-hooks/ts/src/app/app.component.html new file mode 100644 index 0000000000..d0692e28ac --- /dev/null +++ b/aio/content/examples/lifecycle-hooks/ts/src/app/app.component.html @@ -0,0 +1,37 @@ + +

    Component Lifecycle Hooks

    +Peek-a-boo: (most) lifecycle hooks
    +OnChanges
    +DoCheck
    +AfterViewInit & AfterViewChecked
    +AfterContentInit & AfterContentChecked
    +Spy: directive with OnInit & OnDestroy
    +Counter: OnChanges + Spy directive
    + + + +back to top + + + +back to top + + + +back to top + + + +back to top + + + +back to top + + + +back to top + + + +back to top diff --git a/aio/content/examples/lifecycle-hooks/ts/src/app/app.component.ts b/aio/content/examples/lifecycle-hooks/ts/src/app/app.component.ts new file mode 100644 index 0000000000..a917088410 --- /dev/null +++ b/aio/content/examples/lifecycle-hooks/ts/src/app/app.component.ts @@ -0,0 +1,8 @@ +// #docregion +import { Component } from '@angular/core'; +@Component({ + moduleId: module.id, + selector: 'my-app', + templateUrl: './app.component.html' +}) +export class AppComponent { } diff --git a/aio/content/examples/lifecycle-hooks/ts/src/app/app.module.ts b/aio/content/examples/lifecycle-hooks/ts/src/app/app.module.ts new file mode 100644 index 0000000000..4d9cabf218 --- /dev/null +++ b/aio/content/examples/lifecycle-hooks/ts/src/app/app.module.ts @@ -0,0 +1,67 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { FormsModule } from '@angular/forms'; + +import { AppComponent } from './app.component'; + +import { + AfterContentParentComponent, + AfterContentComponent, + ChildComponent +} from './after-content.component'; + +import { + AfterViewParentComponent, + AfterViewComponent, + ChildViewComponent +} from './after-view.component'; + +import { + CounterParentComponent, + MyCounterComponent +} from './counter.component'; + +import { + DoCheckParentComponent, + DoCheckComponent +} from './do-check.component'; + +import { + OnChangesParentComponent, + OnChangesComponent +} from './on-changes.component'; + +import { PeekABooParentComponent } from './peek-a-boo-parent.component'; +import { PeekABooComponent } from './peek-a-boo.component'; + +import { SpyParentComponent } from './spy.component'; +import { SpyDirective } from './spy.directive'; + +@NgModule({ + imports: [ + BrowserModule, + FormsModule + ], + declarations: [ + AppComponent, + AfterContentParentComponent, + AfterContentComponent, + ChildComponent, + AfterViewParentComponent, + AfterViewComponent, + ChildViewComponent, + CounterParentComponent, + MyCounterComponent, + DoCheckParentComponent, + DoCheckComponent, + OnChangesParentComponent, + OnChangesComponent, + PeekABooParentComponent, + PeekABooComponent, + SpyParentComponent, + SpyDirective + ], + bootstrap: [ AppComponent ] +}) +export class AppModule { } diff --git a/aio/content/examples/lifecycle-hooks/ts/src/app/counter.component.ts b/aio/content/examples/lifecycle-hooks/ts/src/app/counter.component.ts new file mode 100644 index 0000000000..8efd1fbd52 --- /dev/null +++ b/aio/content/examples/lifecycle-hooks/ts/src/app/counter.component.ts @@ -0,0 +1,84 @@ +// #docregion +import { + Component, Input, + OnChanges, SimpleChanges, +} from '@angular/core'; + +import { LoggerService } from './logger.service'; + +@Component({ + selector: 'my-counter', + template: ` +
    + Counter = {{counter}} + +
    -- Counter Change Log --
    +
    {{chg}}
    +
    + `, + styles: ['.counter {background: LightYellow; padding: 8px; margin-top: 8px}'] +}) +export class MyCounterComponent implements OnChanges { + @Input() counter: number; + changeLog: string[] = []; + + ngOnChanges(changes: SimpleChanges) { + + // Empty the changeLog whenever counter goes to zero + // hint: this is a way to respond programmatically to external value changes. + if (this.counter === 0) { + this.changeLog.length = 0; + } + + // A change to `counter` is the only change we care about + let chng = changes['counter']; + let cur = chng.currentValue; + let prev = JSON.stringify(chng.previousValue); // first time is {}; after is integer + this.changeLog.push(`counter: currentValue = ${cur}, previousValue = ${prev}`); + } +} + +/***************************************/ + +@Component({ + selector: 'counter-parent', + template: ` +
    +

    Counter Spy

    + + + + + + +

    -- Spy Lifecycle Hook Log --

    +
    {{msg}}
    +
    + `, + styles: ['.parent {background: gold;}'], + providers: [LoggerService] +}) +export class CounterParentComponent { + value: number; + spyLog: string[] = []; + + private logger: LoggerService; + + constructor(logger: LoggerService) { + this.logger = logger; + this.spyLog = logger.logs; + this.reset(); + } + + updateCounter() { + this.value += 1; + this.logger.tick(); + } + + reset() { + this.logger.log('-- reset --'); + this.value = 0; + this.logger.tick(); + } +} + diff --git a/aio/content/examples/lifecycle-hooks/ts/src/app/do-check-parent.component.html b/aio/content/examples/lifecycle-hooks/ts/src/app/do-check-parent.component.html new file mode 100644 index 0000000000..cf7c2b91ce --- /dev/null +++ b/aio/content/examples/lifecycle-hooks/ts/src/app/do-check-parent.component.html @@ -0,0 +1,13 @@ +
    +

    {{title}}

    + + + + +
    Power:
    Hero.name:
    +

    + + + + +
    diff --git a/aio/content/examples/lifecycle-hooks/ts/src/app/do-check.component.ts b/aio/content/examples/lifecycle-hooks/ts/src/app/do-check.component.ts new file mode 100644 index 0000000000..bdd96ed65b --- /dev/null +++ b/aio/content/examples/lifecycle-hooks/ts/src/app/do-check.component.ts @@ -0,0 +1,96 @@ +/* tslint:disable:forin */ +// #docregion +import { Component, DoCheck, Input, ViewChild } from '@angular/core'; + +class Hero { + constructor(public name: string) {} +} + +@Component({ + selector: 'do-check', + template: ` +
    +

    {{hero.name}} can {{power}}

    + +

    -- Change Log --

    +
    {{chg}}
    +
    + `, + styles: [ + '.hero {background: LightYellow; padding: 8px; margin-top: 8px}', + 'p {background: Yellow; padding: 8px; margin-top: 8px}' + ] +}) +export class DoCheckComponent implements DoCheck { + @Input() hero: Hero; + @Input() power: string; + + changeDetected = false; + changeLog: string[] = []; + oldHeroName = ''; + oldPower = ''; + oldLogLength = 0; + noChangeCount = 0; + + // #docregion ng-do-check + ngDoCheck() { + + if (this.hero.name !== this.oldHeroName) { + this.changeDetected = true; + this.changeLog.push(`DoCheck: Hero name changed to "${this.hero.name}" from "${this.oldHeroName}"`); + this.oldHeroName = this.hero.name; + } + + if (this.power !== this.oldPower) { + this.changeDetected = true; + this.changeLog.push(`DoCheck: Power changed to "${this.power}" from "${this.oldPower}"`); + this.oldPower = this.power; + } + + if (this.changeDetected) { + this.noChangeCount = 0; + } else { + // log that hook was called when there was no relevant change. + let count = this.noChangeCount += 1; + let noChangeMsg = `DoCheck called ${count}x when no change to hero or power`; + if (count === 1) { + // add new "no change" message + this.changeLog.push(noChangeMsg); + } else { + // update last "no change" message + this.changeLog[this.changeLog.length - 1] = noChangeMsg; + } + } + + this.changeDetected = false; + } + // #enddocregion ng-do-check + + reset() { + this.changeDetected = true; + this.changeLog.length = 0; + } +} + +/***************************************/ + +@Component({ + moduleId: module.id, + selector: 'do-check-parent', + templateUrl: './do-check-parent.component.html', + styles: ['.parent {background: Lavender}'] +}) +export class DoCheckParentComponent { + hero: Hero; + power: string; + title = 'DoCheck'; + @ViewChild(DoCheckComponent) childView: DoCheckComponent; + + constructor() { this.reset(); } + + reset() { + this.hero = new Hero('Windstorm'); + this.power = 'sing'; + if (this.childView) { this.childView.reset(); } + } +} diff --git a/aio/content/examples/lifecycle-hooks/ts/src/app/logger.service.ts b/aio/content/examples/lifecycle-hooks/ts/src/app/logger.service.ts new file mode 100644 index 0000000000..56ddaf9063 --- /dev/null +++ b/aio/content/examples/lifecycle-hooks/ts/src/app/logger.service.ts @@ -0,0 +1,26 @@ +import { Injectable } from '@angular/core'; + +@Injectable() +export class LoggerService { + logs: string[] = []; + prevMsg = ''; + prevMsgCount = 1; + + log(msg: string) { + if (msg === this.prevMsg) { + // Repeat message; update last log entry with count. + this.logs[this.logs.length - 1] = msg + ` (${this.prevMsgCount += 1}x)`; + } else { + // New message; log it. + this.prevMsg = msg; + this.prevMsgCount = 1; + this.logs.push(msg); + } + } + + clear() { this.logs.length = 0; } + + // schedules a view refresh to ensure display catches up + tick() { this.tick_then(() => { }); } + tick_then(fn: () => any) { setTimeout(fn, 0); } +} diff --git a/aio/content/examples/lifecycle-hooks/ts/src/app/on-changes-parent.component.html b/aio/content/examples/lifecycle-hooks/ts/src/app/on-changes-parent.component.html new file mode 100644 index 0000000000..a0fd404931 --- /dev/null +++ b/aio/content/examples/lifecycle-hooks/ts/src/app/on-changes-parent.component.html @@ -0,0 +1,13 @@ +
    +

    {{title}}

    + + + + +
    Power:
    Hero.name:
    +

    + + + + +
    diff --git a/aio/content/examples/lifecycle-hooks/ts/src/app/on-changes.component.ts b/aio/content/examples/lifecycle-hooks/ts/src/app/on-changes.component.ts new file mode 100644 index 0000000000..c9a243a5f0 --- /dev/null +++ b/aio/content/examples/lifecycle-hooks/ts/src/app/on-changes.component.ts @@ -0,0 +1,74 @@ +/* tslint:disable:forin */ +// #docregion +import { + Component, Input, OnChanges, + SimpleChanges, ViewChild +} from '@angular/core'; + +class Hero { + constructor(public name: string) {} +} + +@Component({ + selector: 'on-changes', + template: ` +
    +

    {{hero.name}} can {{power}}

    + +

    -- Change Log --

    +
    {{chg}}
    +
    + `, + styles: [ + '.hero {background: LightYellow; padding: 8px; margin-top: 8px}', + 'p {background: Yellow; padding: 8px; margin-top: 8px}' + ] +}) +export class OnChangesComponent implements OnChanges { +// #docregion inputs + @Input() hero: Hero; + @Input() power: string; +// #enddocregion inputs + + changeLog: string[] = []; + + // #docregion ng-on-changes + ngOnChanges(changes: SimpleChanges) { + for (let propName in changes) { + let chng = changes[propName]; + let cur = JSON.stringify(chng.currentValue); + let prev = JSON.stringify(chng.previousValue); + this.changeLog.push(`${propName}: currentValue = ${cur}, previousValue = ${prev}`); + } + } + // #enddocregion ng-on-changes + + reset() { this.changeLog.length = 0; } +} + +/***************************************/ + +@Component({ + moduleId: module.id, + selector: 'on-changes-parent', + templateUrl: './on-changes-parent.component.html', + styles: ['.parent {background: Lavender;}'] +}) +export class OnChangesParentComponent { + hero: Hero; + power: string; + title = 'OnChanges'; + @ViewChild(OnChangesComponent) childView: OnChangesComponent; + + constructor() { + this.reset(); + } + + reset() { + // new Hero object every time; triggers onChanges + this.hero = new Hero('Windstorm'); + // setting power only triggers onChanges if this value is different + this.power = 'sing'; + if (this.childView) { this.childView.reset(); } + } +} diff --git a/aio/content/examples/lifecycle-hooks/ts/src/app/peek-a-boo-parent.component.ts b/aio/content/examples/lifecycle-hooks/ts/src/app/peek-a-boo-parent.component.ts new file mode 100644 index 0000000000..3f2bd8585d --- /dev/null +++ b/aio/content/examples/lifecycle-hooks/ts/src/app/peek-a-boo-parent.component.ts @@ -0,0 +1,53 @@ +// #docregion +import { Component } from '@angular/core'; + +import { LoggerService } from './logger.service'; + +@Component({ + selector: 'peek-a-boo-parent', + template: ` +
    +

    Peek-A-Boo

    + + + + + + + +

    -- Lifecycle Hook Log --

    +
    {{msg}}
    +
    + `, + styles: ['.parent {background: moccasin}'], + providers: [ LoggerService ] +}) +export class PeekABooParentComponent { + + hasChild = false; + hookLog: string[]; + + heroName = 'Windstorm'; + private logger: LoggerService; + + constructor(logger: LoggerService) { + this.logger = logger; + this.hookLog = logger.logs; + } + + toggleChild() { + this.hasChild = !this.hasChild; + if (this.hasChild) { + this.heroName = 'Windstorm'; + this.logger.clear(); // clear log on create + } + this.logger.tick(); + } + + updateHero() { + this.heroName += '!'; + this.logger.tick(); + } +} diff --git a/aio/content/examples/lifecycle-hooks/ts/src/app/peek-a-boo.component.ts b/aio/content/examples/lifecycle-hooks/ts/src/app/peek-a-boo.component.ts new file mode 100644 index 0000000000..dcee428753 --- /dev/null +++ b/aio/content/examples/lifecycle-hooks/ts/src/app/peek-a-boo.component.ts @@ -0,0 +1,85 @@ +import { + AfterContentChecked, + AfterContentInit, + AfterViewChecked, + AfterViewInit, + DoCheck, + OnChanges, + OnDestroy, + OnInit, + SimpleChanges +} from '@angular/core'; +import { Component, Input } from '@angular/core'; +import { LoggerService } from './logger.service'; + +let nextId = 1; + +// #docregion ngOnInit +export class PeekABoo implements OnInit { + constructor(private logger: LoggerService) { } + + // implement OnInit's `ngOnInit` method + ngOnInit() { this.logIt(`OnInit`); } + + logIt(msg: string) { + this.logger.log(`#${nextId++} ${msg}`); + } +} +// #enddocregion ngOnInit + +@Component({ + selector: 'peek-a-boo', + template: '

    Now you see my hero, {{name}}

    ', + styles: ['p {background: LightYellow; padding: 8px}'] +}) +// Don't HAVE to mention the Lifecycle Hook interfaces +// unless we want typing and tool support. +export class PeekABooComponent extends PeekABoo implements + OnChanges, OnInit, DoCheck, + AfterContentInit, AfterContentChecked, + AfterViewInit, AfterViewChecked, + OnDestroy { + @Input() name: string; + + private verb = 'initialized'; + + constructor(logger: LoggerService) { + super(logger); + + let is = this.name ? 'is' : 'is not'; + this.logIt(`name ${is} known at construction`); + } + + // only called for/if there is an @input variable set by parent. + ngOnChanges(changes: SimpleChanges) { + let changesMsgs: string[] = []; + for (let propName in changes) { + if (propName === 'name') { + let name = changes['name'].currentValue; + changesMsgs.push(`name ${this.verb} to "${name}"`); + } else { + changesMsgs.push(propName + ' ' + this.verb); + } + } + this.logIt(`OnChanges: ${changesMsgs.join('; ')}`); + this.verb = 'changed'; // next time it will be a change + } + + // Beware! Called frequently! + // Called in every change detection cycle anywhere on the page + ngDoCheck() { this.logIt(`DoCheck`); } + + ngAfterContentInit() { this.logIt(`AfterContentInit`); } + + // Beware! Called frequently! + // Called in every change detection cycle anywhere on the page + ngAfterContentChecked() { this.logIt(`AfterContentChecked`); } + + ngAfterViewInit() { this.logIt(`AfterViewInit`); } + + // Beware! Called frequently! + // Called in every change detection cycle anywhere on the page + ngAfterViewChecked() { this.logIt(`AfterViewChecked`); } + + ngOnDestroy() { this.logIt(`OnDestroy`); } +} diff --git a/aio/content/examples/lifecycle-hooks/ts/src/app/spy.component.html b/aio/content/examples/lifecycle-hooks/ts/src/app/spy.component.html new file mode 100644 index 0000000000..782435b961 --- /dev/null +++ b/aio/content/examples/lifecycle-hooks/ts/src/app/spy.component.html @@ -0,0 +1,16 @@ +
    +

    Spy Directive

    + + + + + +

    + +
    + {{hero}} +
    + +

    -- Spy Lifecycle Hook Log --

    +
    {{msg}}
    +
    diff --git a/aio/content/examples/lifecycle-hooks/ts/src/app/spy.component.ts b/aio/content/examples/lifecycle-hooks/ts/src/app/spy.component.ts new file mode 100644 index 0000000000..6cbed98d1d --- /dev/null +++ b/aio/content/examples/lifecycle-hooks/ts/src/app/spy.component.ts @@ -0,0 +1,41 @@ +// #docregion +import { Component } from '@angular/core'; + +import { LoggerService } from './logger.service'; + +@Component({ + moduleId: module.id, + selector: 'spy-parent', + templateUrl: './spy.component.html', + styles: [ + '.parent {background: khaki;}', + '.heroes {background: LightYellow; padding: 0 8px}' + ], + providers: [LoggerService] +}) +export class SpyParentComponent { + newName = 'Herbie'; + heroes: string[] = ['Windstorm', 'Magneta']; + spyLog: string[]; + + constructor(private logger: LoggerService) { + this.spyLog = logger.logs; + } + + addHero() { + if (this.newName.trim()) { + this.heroes.push(this.newName.trim()); + this.newName = ''; + this.logger.tick(); + } + } + removeHero(hero: string) { + this.heroes.splice(this.heroes.indexOf(hero), 1); + this.logger.tick(); + } + reset() { + this.logger.log('-- reset --'); + this.heroes.length = 0; + this.logger.tick(); + } +} diff --git a/aio/content/examples/lifecycle-hooks/ts/src/app/spy.directive.ts b/aio/content/examples/lifecycle-hooks/ts/src/app/spy.directive.ts new file mode 100644 index 0000000000..01f3f95880 --- /dev/null +++ b/aio/content/examples/lifecycle-hooks/ts/src/app/spy.directive.ts @@ -0,0 +1,24 @@ +// #docregion +import { Directive, OnInit, OnDestroy } from '@angular/core'; + +import { LoggerService } from './logger.service'; + +let nextId = 1; + +// #docregion spy-directive +// Spy on any element to which it is applied. +// Usage:
    ...
    +@Directive({selector: '[mySpy]'}) +export class SpyDirective implements OnInit, OnDestroy { + + constructor(private logger: LoggerService) { } + + ngOnInit() { this.logIt(`onInit`); } + + ngOnDestroy() { this.logIt(`onDestroy`); } + + private logIt(msg: string) { + this.logger.log(`Spy #${nextId++} ${msg}`); + } +} +// #enddocregion spy-directive diff --git a/aio/content/examples/lifecycle-hooks/ts/src/index.html b/aio/content/examples/lifecycle-hooks/ts/src/index.html new file mode 100644 index 0000000000..cf7059f780 --- /dev/null +++ b/aio/content/examples/lifecycle-hooks/ts/src/index.html @@ -0,0 +1,28 @@ + + + + + Angular Lifecycle Hooks + + + + + + + + + + + + + + + + + + Loading... + + + diff --git a/aio/content/examples/lifecycle-hooks/ts/src/main.ts b/aio/content/examples/lifecycle-hooks/ts/src/main.ts new file mode 100644 index 0000000000..f22933ba8e --- /dev/null +++ b/aio/content/examples/lifecycle-hooks/ts/src/main.ts @@ -0,0 +1,4 @@ +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/lifecycle-hooks/ts/src/sample.css b/aio/content/examples/lifecycle-hooks/ts/src/sample.css new file mode 100644 index 0000000000..df17c897c6 --- /dev/null +++ b/aio/content/examples/lifecycle-hooks/ts/src/sample.css @@ -0,0 +1,13 @@ +.parent { + color: #666; + margin: 14px 0; + padding: 8px; +} +input { + margin: 4px; + padding: 4px; +} +.comment { + color: red; + font-style: italic; +} diff --git a/aio/content/examples/ngcontainer/ts/example-config.json b/aio/content/examples/ngcontainer/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/ngcontainer/ts/plnkr.json b/aio/content/examples/ngcontainer/ts/plnkr.json new file mode 100644 index 0000000000..a6cdc4ba1a --- /dev/null +++ b/aio/content/examples/ngcontainer/ts/plnkr.json @@ -0,0 +1,11 @@ +{ + "description": "", + "basePath": "src/", + "files": [ + "!**/*.d.ts", + "!**/*.js" + ], + "tags": [ + "ngcontainer", "structural", "directives" + ] +} diff --git a/aio/content/examples/ngcontainer/ts/plnkr.no-link.html b/aio/content/examples/ngcontainer/ts/plnkr.no-link.html new file mode 100644 index 0000000000..2e1baa19e2 --- /dev/null +++ b/aio/content/examples/ngcontainer/ts/plnkr.no-link.html @@ -0,0 +1,586 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/ngcontainer/ts/src/app/app.component.css b/aio/content/examples/ngcontainer/ts/src/app/app.component.css new file mode 100644 index 0000000000..cdb6631713 --- /dev/null +++ b/aio/content/examples/ngcontainer/ts/src/app/app.component.css @@ -0,0 +1,34 @@ +/* #docregion */ +button { + min-width: 100px; + font-size: 100%; +} + +code, .code { + background-color: #eee; + color: black; + font-family: Courier, sans-serif; + font-size: 85%; +} + +div.code { + width: 400px; +} + +.heroic { + font-size: 150%; + font-weight: bold; +} + +hr { + margin: 40px 0 +} + +td, th { + text-align: left; + vertical-align: top; +} + +/* #docregion p-span */ +p span { color: red; font-size: 70%; } +/* #enddocregion p-span */ diff --git a/aio/content/examples/ngcontainer/ts/src/app/app.component.html b/aio/content/examples/ngcontainer/ts/src/app/app.component.html new file mode 100644 index 0000000000..afd0b00f36 --- /dev/null +++ b/aio/content/examples/ngcontainer/ts/src/app/app.component.html @@ -0,0 +1,279 @@ + + +

    <ng-container>

    + + +
    {{hero.name}}
    + + +
    + +

    <ng-container> and CSS

    +

    Examples demonstrating issues with rigid CSS styles.

    + + + +

    #1 <ng-container> and <p>

    + +

    + I turned the corner + + and saw {{hero.name}}. I waved + + and continued on my way. +

    + + +

    + I turned the corner + + and saw {{hero.name}}. I waved + + and continued on my way. +

    + + +

    #2 <ng-container> and <p>

    + +
    + +

    + {{hero.name}} is + + , + and + {{trait}} + . +

    + + + +

    + {{hero.name}} is + + , + and + {{trait}} + . +

    + + +
    + +

    #3 <ng-container> and <p>

    + +

    + +

    + + +
    + The hero.id in the <span> + is caught by the p-span CSS: + +

    + + Id: ({{hero.id}}) + + Name: {{hero.name}} +

    + +
    + +
    + The hero.id in the <ng-container> + is unaffected by the p-span CSS: +

    + + Id: ({{hero.id}}) + + Name: {{hero.name}} +

    +
    + +
    + The hero.id in the <template *ngIf> disappears: +

    + + Name: {{hero.name}} +

    +
    + +
    + The hero.id in the <template [ngIf]> + is unaffected by the p-span CSS: +

    + + Name: {{hero.name}} +

    +
    + +
    + +
    + +

    <ng-container> and layout-sensitive elements

    +

    + Examples demonstrating issues with layout-sensitive elements + such as <select> and <table>. +

    + +

    #1 <ng-container> and <options>

    + +

    <select> with <span>

    +
    + Pick your favorite hero + () +
    + + + + +

    <select> with <ng-container>

    +
    + Pick your favorite hero + () +
    + + + + +



    + +

    #2 <ng-container> and <options>

    +

    + +

    + +

    Options with <ng-container>

    + + + + +

    Options with <span>

    + + + + +
    + +

    <ng-container> and <table>

    +

    + + + +

    + + + + + + + + + + + + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    DirectiveTypeDescription
    NgClassAAdd or remove multiple CSS classes.
    xxxSdiv with *ngIf formats crazy.
    yyySdiv with *ngIf formats crazy.
    NgForSRepeat the template for each item in a list.
    NgIfSAdd or remove DOM elements.
    NgStyleAAdd or remove multiple style attributes.
    NgSwitchSInclude in DOM if case matches the switch value.
    + +
    + +

    Do not confuse <ng-container> with <ng-content>

    + +

    <ng-container>Inside ng-container</ng-container>

    + +Inside ng-container + + +

    <ng-content>this is an Angular parse error</ng-content>

    + + + +
    Template parse errors:
    +<ng-content> element cannot have content.
    + +

    Demo of </ng-content>

    + + + Projected content + + diff --git a/aio/content/examples/ngcontainer/ts/src/app/app.component.ts b/aio/content/examples/ngcontainer/ts/src/app/app.component.ts new file mode 100644 index 0000000000..2d6d7f959c --- /dev/null +++ b/aio/content/examples/ngcontainer/ts/src/app/app.component.ts @@ -0,0 +1,25 @@ +// #docregion +import { Component } from '@angular/core'; + +import { heroes } from './hero'; + +@Component({ + moduleId: module.id, + selector: 'my-app', + templateUrl: './app.component.html', + styleUrls: [ './app.component.css' ] +}) +export class AppComponent { + heroes = heroes; + hero = this.heroes[0]; + heroTraits = [ 'honest', 'brave', 'considerate' ]; + + // flags for the table + attrDirs = true; + strucDirs = true; + divNgIf = false; + + showId = true; + showDefaultTraits = true; + showSad = true; +} diff --git a/aio/content/examples/ngcontainer/ts/src/app/app.module.ts b/aio/content/examples/ngcontainer/ts/src/app/app.module.ts new file mode 100644 index 0000000000..57ac92f518 --- /dev/null +++ b/aio/content/examples/ngcontainer/ts/src/app/app.module.ts @@ -0,0 +1,19 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { FormsModule } from '@angular/forms'; +import { BrowserModule } from '@angular/platform-browser'; + +import { AppComponent } from './app.component'; +import { ContentComponent } from './content.component'; +import { heroComponents } from './hero.components'; + +@NgModule({ + imports: [ BrowserModule, FormsModule ], + declarations: [ + AppComponent, + ContentComponent, + heroComponents + ], + bootstrap: [ AppComponent ] +}) +export class AppModule { } diff --git a/aio/content/examples/ngcontainer/ts/src/app/content.component.ts b/aio/content/examples/ngcontainer/ts/src/app/content.component.ts new file mode 100644 index 0000000000..a2580b0dee --- /dev/null +++ b/aio/content/examples/ngcontainer/ts/src/app/content.component.ts @@ -0,0 +1,16 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'content-comp', + // #docregion template + template: + `
    + +
    `, + // #enddocregion template + styles: [ ` + div { border: medium dashed green; padding: 1em; width: 150px; text-align: center} + `] +}) +export class ContentComponent { } diff --git a/aio/content/examples/ngcontainer/ts/src/app/hero.components.ts b/aio/content/examples/ngcontainer/ts/src/app/hero.components.ts new file mode 100644 index 0000000000..77920ebdf9 --- /dev/null +++ b/aio/content/examples/ngcontainer/ts/src/app/hero.components.ts @@ -0,0 +1,43 @@ +// #docregion +import { Component, Input } from '@angular/core'; +import { Hero } from './hero'; + +@Component({ + selector: 'happy-hero', + template: `Wow. You like {{hero.name}}. What a happy hero ... just like you.` +}) +export class HappyHeroComponent { + @Input() hero: Hero; +} + +@Component({ + selector: 'sad-hero', + template: `You like {{hero.name}}? Such a sad hero. Are you sad too?` +}) +export class SadHeroComponent { + @Input() hero: Hero; +} + +@Component({ + selector: 'confused-hero', + template: `Are you as confused as {{hero.name}}?` +}) +export class ConfusedHeroComponent { + @Input() hero: Hero; +} + +@Component({ + selector: 'unknown-hero', + template: `{{message}}` +}) +export class UnknownHeroComponent { + @Input() hero: Hero; + get message() { + return this.hero && this.hero.name ? + `${this.hero.name} is strange and mysterious.` : + 'Are you feeling indecisive?'; + } +} + +export const heroComponents = + [ HappyHeroComponent, SadHeroComponent, ConfusedHeroComponent, UnknownHeroComponent ]; diff --git a/aio/content/examples/ngcontainer/ts/src/app/hero.ts b/aio/content/examples/ngcontainer/ts/src/app/hero.ts new file mode 100644 index 0000000000..89f0cbfdf8 --- /dev/null +++ b/aio/content/examples/ngcontainer/ts/src/app/hero.ts @@ -0,0 +1,13 @@ +// #docregion +export class Hero { + id: number; + name: string; + emotion?: string; +} + +export const heroes: Hero[] = [ + { id: 1, name: 'Mr. Nice', emotion: 'happy'}, + { id: 2, name: 'Narco', emotion: 'sad' }, + { id: 3, name: 'Windstorm', emotion: 'confused' }, + { id: 4, name: 'Magneta'} +]; diff --git a/aio/content/examples/ngcontainer/ts/src/index.html b/aio/content/examples/ngcontainer/ts/src/index.html new file mode 100644 index 0000000000..fc5ff417c3 --- /dev/null +++ b/aio/content/examples/ngcontainer/ts/src/index.html @@ -0,0 +1,26 @@ + + + + + Angular <ng-container> + + + + + + + + + + + + + + + + Loading... + + + diff --git a/aio/content/examples/ngcontainer/ts/src/main.ts b/aio/content/examples/ngcontainer/ts/src/main.ts new file mode 100644 index 0000000000..105b06712d --- /dev/null +++ b/aio/content/examples/ngcontainer/ts/src/main.ts @@ -0,0 +1,6 @@ +// #docregion +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); + diff --git a/aio/content/examples/ngmodule/e2e-spec.ts b/aio/content/examples/ngmodule/e2e-spec.ts new file mode 100644 index 0000000000..0fbce1213d --- /dev/null +++ b/aio/content/examples/ngmodule/e2e-spec.ts @@ -0,0 +1,223 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by } from 'protractor'; + +describe('NgModule', function () { + + // helpers + const gold = 'rgba(255, 215, 0, 1)'; + const powderblue = 'rgba(176, 224, 230, 1)'; + const lightgray = 'rgba(211, 211, 211, 1)'; + const white = 'rgba(0, 0, 0, 0)'; + + function getCommonsSectionStruct() { + const buttons = element.all(by.css('nav a')); + + return { + title: element.all(by.tagName('h1')).get(0), + subtitle: element.all(by.css('app-title p i')).get(0), + contactButton: buttons.get(0), + crisisButton: buttons.get(1), + heroesButton: buttons.get(2) + }; + } + + function getContactSectionStruct() { + const buttons = element.all(by.css('app-contact form button')); + + return { + header: element.all(by.css('app-contact h2')).get(0), + popupMessage: element.all(by.css('app-contact div')).get(0), + contactNameHeader: element.all(by.css('app-contact form h3')).get(0), + input: element.all(by.css('app-contact form input')).get(0), + validationError: element.all(by.css('app-contact form .alert')).get(0), + saveButton: buttons.get(0), // can't be tested + nextContactButton: buttons.get(1), + newContactButton: buttons.get(2) + }; + } + + function getCrisisSectionStruct() { + return { + title: element.all(by.css('ng-component h3')).get(0), + items: element.all(by.css('ng-component a')), + itemId: element.all(by.css('ng-component div')).get(0), + listLink: element.all(by.css('ng-component a')).get(0), + }; + } + + function getHeroesSectionStruct() { + return { + header: element.all(by.css('ng-component h2')).get(0), + title: element.all(by.css('ng-component h3')).get(0), + items: element.all(by.css('ng-component a')), + itemId: element.all(by.css('ng-component ng-component div div')).get(0), + itemInput: element.all(by.css('ng-component ng-component input')).get(0), + listLink: element.all(by.css('ng-component ng-component a')).get(0), + }; + } + + // tests + function appTitleTests(color: string, name?: string) { + return function() { + it('should have a gray header', function() { + const commons = getCommonsSectionStruct(); + expect(commons.title.getCssValue('backgroundColor')).toBe(color); + }); + + it('should welcome us', function () { + const commons = getCommonsSectionStruct(); + expect(commons.subtitle.getText()).toBe('Welcome, ' + (name || 'Sherlock Holmes')); + }); + }; + } + + function contactTests(color: string, name?: string) { + return function() { + it('shows the contact\'s owner', function() { + const contacts = getContactSectionStruct(); + expect(contacts.header.getText()).toBe('Contact of ' + (name || 'Sherlock Holmes')); + }); + + it('can cycle between contacts', function () { + const contacts = getContactSectionStruct(); + const nextButton = contacts.nextContactButton; + expect(contacts.contactNameHeader.getText()).toBe('Awesome Sam Spade'); + expect(contacts.contactNameHeader.getCssValue('backgroundColor')).toBe(color); + nextButton.click().then(function () { + expect(contacts.contactNameHeader.getText()).toBe('Awesome Nick Danger'); + return nextButton.click(); + }).then(function () { + expect(contacts.contactNameHeader.getText()).toBe('Awesome Nancy Drew'); + }); + }); + + it('can change an existing contact', function () { + const contacts = getContactSectionStruct(); + contacts.input.sendKeys('a'); + expect(contacts.input.getCssValue('backgroundColor')).toBe(color); + expect(contacts.contactNameHeader.getText()).toBe('Awesome Sam Spadea'); + }); + + it('can create a new contact', function () { + const contacts = getContactSectionStruct(); + const newContactButton = contacts.newContactButton; + newContactButton.click().then(function () { + expect(contacts.validationError.getText()).toBe('Name is required'); + contacts.input.sendKeys('John Doe'); + expect(contacts.contactNameHeader.getText()).toBe('Awesome John Doe'); + expect(contacts.validationError.getText()).toBe(''); + }); + }); + }; + } + + describe('index.html', function () { + beforeEach(function () { + browser.get(''); + }); + + describe('app-title', appTitleTests(white, 'Miss Marple')); + + describe('contact', contactTests(lightgray, 'Miss Marple')); + + describe('crisis center', function () { + beforeEach(function () { + getCommonsSectionStruct().crisisButton.click(); + }); + + it('shows a list of crisis', function () { + const crisis = getCrisisSectionStruct(); + expect(crisis.title.getText()).toBe('Crisis List'); + expect(crisis.items.count()).toBe(4); + expect(crisis.items.get(0).getText()).toBe('1 - Dragon Burning Cities'); + }); + + it('can navigate to one crisis details', function () { + const crisis = getCrisisSectionStruct(); + crisis.items.get(0).click().then(function() { + expect(crisis.itemId.getText()).toBe('Crisis id: 1'); + return crisis.listLink.click(); + }).then(function () { + // We are back to the list + expect(crisis.items.count()).toBe(4); + }); + }); + }); + + describe('heroes', function () { + beforeEach(function () { + getCommonsSectionStruct().heroesButton.click(); + }); + + it('shows a list of heroes', function() { + const heroes = getHeroesSectionStruct(); + expect(heroes.header.getText()).toBe('Heroes of Miss Marple'); + expect(heroes.title.getText()).toBe('Hero List'); + expect(heroes.items.count()).toBe(6); + expect(heroes.items.get(0).getText()).toBe('11 - Mr. Nice'); + }); + + it('can navigate and edit one hero details', function () { + const heroes = getHeroesSectionStruct(); + heroes.items.get(0).click().then(function () { + expect(heroes.itemId.getText()).toBe('Id: 11'); + heroes.itemInput.sendKeys(' try'); + return heroes.listLink.click(); + }).then(function () { + // We are back to the list + expect(heroes.items.count()).toBe(6); + expect(heroes.items.get(0).getText()).toBe('11 - Mr. Nice try'); + }); + }); + }); + }); + + describe('index.0.html', function() { + beforeEach(function () { + browser.get('index.0.html'); + }); + + it('has a title', function () { + const title = element.all(by.tagName('h1')).get(0); + expect(title.getText()).toBe('Minimal NgModule'); + }); + }); + + describe('index.1.html', function () { + beforeEach(function () { + browser.get('index.1.html'); + }); + + describe('app-title', appTitleTests(powderblue)); + }); + + describe('index.1b.html', function () { + beforeEach(function () { + browser.get('index.1b.html'); + }); + + describe('app-title', appTitleTests(powderblue)); + + describe('contact', contactTests(powderblue)); + }); + + describe('index.2.html', function () { + beforeEach(function () { + browser.get('index.2.html'); + }); + + describe('app-title', appTitleTests(gold)); + + describe('contact', contactTests(powderblue)); + }); + + describe('index.3.html', function () { + beforeEach(function () { + browser.get('index.3.html'); + }); + + describe('app-title', appTitleTests(gold)); + }); + +}); diff --git a/aio/content/examples/ngmodule/ts/contact.1b.plnkr.json b/aio/content/examples/ngmodule/ts/contact.1b.plnkr.json new file mode 100644 index 0000000000..0f61c91f75 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/contact.1b.plnkr.json @@ -0,0 +1,25 @@ +{ + "description": "Contact NgModule v.1", + "basePath": "src/", + "files": [ + "app/app.component.1b.ts", + "app/app.module.1b.ts", + "app/highlight.directive.ts", + "app/title.component.html", + "app/title.component.ts", + "app/user.service.ts", + + "app/contact/awesome.pipe.ts", + "app/contact/contact.component.css", + "app/contact/contact.component.html", + "app/contact/contact.component.3.ts", + "app/contact/contact.service.ts", + "app/contact/highlight.directive.ts", + + "main.1b.ts", + "styles.css", + "index.1b.html" + ], + "main": "index.1b.html", + "tags": ["NgModule"] +} diff --git a/aio/content/examples/ngmodule/ts/contact.1b.plnkr.no-link.html b/aio/content/examples/ngmodule/ts/contact.1b.plnkr.no-link.html new file mode 100644 index 0000000000..ef8bffbbbe --- /dev/null +++ b/aio/content/examples/ngmodule/ts/contact.1b.plnkr.no-link.html @@ -0,0 +1,475 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/ngmodule/ts/contact.2.plnkr.json b/aio/content/examples/ngmodule/ts/contact.2.plnkr.json new file mode 100644 index 0000000000..6555b76dcd --- /dev/null +++ b/aio/content/examples/ngmodule/ts/contact.2.plnkr.json @@ -0,0 +1,27 @@ +{ + "description": "Contact NgModule v.2", + "basePath": "src/", + "files": [ + "app/app.component.2.ts", + "app/app.module.2.ts", + "app/highlight.directive.ts", + "app/title.component.html", + "app/title.component.ts", + "app/user.service.ts", + + "app/contact/contact.component.css", + "app/contact/contact.component.html", + "app/contact/contact.service.ts", + + "app/contact/awesome.pipe.ts", + "app/contact/contact.component.3.ts", + "app/contact/contact.module.2.ts", + "app/contact/highlight.directive.ts", + + "main.2.ts", + "styles.css", + "index.2.html" + ], + "main": "index.2.html", + "tags": ["NgModule"] +} diff --git a/aio/content/examples/ngmodule/ts/contact.2.plnkr.no-link.html b/aio/content/examples/ngmodule/ts/contact.2.plnkr.no-link.html new file mode 100644 index 0000000000..2fd5e40230 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/contact.2.plnkr.no-link.html @@ -0,0 +1,491 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/ngmodule/ts/example-config.json b/aio/content/examples/ngmodule/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/ngmodule/ts/minimal.0.plnkr.json b/aio/content/examples/ngmodule/ts/minimal.0.plnkr.json new file mode 100644 index 0000000000..e5e37ac4ee --- /dev/null +++ b/aio/content/examples/ngmodule/ts/minimal.0.plnkr.json @@ -0,0 +1,13 @@ +{ + "description": "Minimal NgModule", + "basePath": "src/", + "files": [ + "app/app.component.0.ts", + "app/app.module.0.ts", + "main.0.ts", + "styles.css", + "index.0.html" + ], + "main": "index.0.html", + "tags": ["NgModule"] +} diff --git a/aio/content/examples/ngmodule/ts/minimal.0.plnkr.no-link.html b/aio/content/examples/ngmodule/ts/minimal.0.plnkr.no-link.html new file mode 100644 index 0000000000..4c6469a512 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/minimal.0.plnkr.no-link.html @@ -0,0 +1,195 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/ngmodule/ts/plnkr.json b/aio/content/examples/ngmodule/ts/plnkr.json new file mode 100644 index 0000000000..4d9d2ec20b --- /dev/null +++ b/aio/content/examples/ngmodule/ts/plnkr.json @@ -0,0 +1,41 @@ +{ + "description": "NgModule Final", + "basePath": "src/", + "files": [ + "app/app.component.ts", + "app/app.module.ts", + "app/app-routing.module.ts", + + "app/contact/contact.component.css", + "app/contact/contact.component.html", + "app/contact/contact.service.ts", + + "app/contact/contact.component.ts", + "app/contact/contact.module.ts", + "app/contact/contact-routing.module.ts", + + "app/crisis/*.ts", + + "app/hero/hero-detail.component.ts", + "app/hero/hero-list.component.ts", + "app/hero/hero.service.ts", + + "app/hero/hero.component.ts", + "app/hero/hero.module.ts", + "app/hero/hero-routing.module.ts", + + "app/core/*.css", + "app/core/*.html", + "app/core/*.ts", + + "app/shared/*.css", + "app/shared/*.html", + "app/shared/*.ts", + + "main.ts", + "styles.css", + "index.html" + ], + "main": "index.html", + "tags": ["NgModule"] +} diff --git a/aio/content/examples/ngmodule/ts/plnkr.no-link.html b/aio/content/examples/ngmodule/ts/plnkr.no-link.html new file mode 100644 index 0000000000..4364d1e589 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/plnkr.no-link.html @@ -0,0 +1,909 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/ngmodule/ts/pre-shared.3.plnkr.json b/aio/content/examples/ngmodule/ts/pre-shared.3.plnkr.json new file mode 100644 index 0000000000..9747801604 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/pre-shared.3.plnkr.json @@ -0,0 +1,41 @@ +{ + "description": "NgModule v.3", + "basePath": "src/", + "files": [ + "app/app.component.3.ts", + "app/app.module.3.ts", + "app/app-routing.module.3.ts", + + "app/highlight.directive.ts", + "app/title.component.html", + "app/title.component.ts", + "app/user.service.ts", + + "app/contact/contact.component.css", + "app/contact/contact.component.html", + "app/contact/contact.service.ts", + + "app/contact/awesome.pipe.ts", + "app/contact/contact.component.3.ts", + "app/contact/contact.module.3.ts", + "app/contact/contact-routing.module.3.ts", + "app/contact/highlight.directive.ts", + + "app/crisis/*.ts", + + "app/hero/hero-detail.component.ts", + "app/hero/hero-list.component.ts", + "app/hero/hero.service.ts", + + "app/hero/hero.component.3.ts", + "app/hero/hero.module.3.ts", + "app/hero/hero-routing.module.3.ts", + "app/hero/highlight.directive.ts", + + "main.3.ts", + "styles.css", + "index.3.html" + ], + "main": "index.3.html", + "tags": ["NgModule"] +} diff --git a/aio/content/examples/ngmodule/ts/pre-shared.3.plnkr.no-link.html b/aio/content/examples/ngmodule/ts/pre-shared.3.plnkr.no-link.html new file mode 100644 index 0000000000..458da3fb33 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/pre-shared.3.plnkr.no-link.html @@ -0,0 +1,861 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/ngmodule/ts/src/app/app-routing.module.3.ts b/aio/content/examples/ngmodule/ts/src/app/app-routing.module.3.ts new file mode 100644 index 0000000000..1d53b708f8 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/app-routing.module.3.ts @@ -0,0 +1,14 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +export const routes: Routes = [ + { path: '', redirectTo: 'contact', pathMatch: 'full'}, + { path: 'crisis', loadChildren: 'app/crisis/crisis.module#CrisisModule' }, + { path: 'heroes', loadChildren: 'app/hero/hero.module.3#HeroModule' } +]; + +@NgModule({ + imports: [RouterModule.forRoot(routes)], + exports: [RouterModule] +}) +export class AppRoutingModule {} diff --git a/aio/content/examples/ngmodule/ts/src/app/app-routing.module.ts b/aio/content/examples/ngmodule/ts/src/app/app-routing.module.ts new file mode 100644 index 0000000000..c753dcd488 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/app-routing.module.ts @@ -0,0 +1,19 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +export const routes: Routes = [ + { path: '', redirectTo: 'contact', pathMatch: 'full'}, +// #docregion lazy-routes + { path: 'crisis', loadChildren: 'app/crisis/crisis.module#CrisisModule' }, + { path: 'heroes', loadChildren: 'app/hero/hero.module#HeroModule' } +// #enddocregion lazy-routes +]; + +// #docregion forRoot +@NgModule({ + imports: [RouterModule.forRoot(routes)], + exports: [RouterModule] +}) +export class AppRoutingModule {} +// #enddocregion forRoot diff --git a/aio/content/examples/ngmodule/ts/src/app/app.component.0.ts b/aio/content/examples/ngmodule/ts/src/app/app.component.0.ts new file mode 100644 index 0000000000..4977890c3b --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/app.component.0.ts @@ -0,0 +1,10 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'my-app', + template: '

    {{title}}

    ', +}) +export class AppComponent { + title = 'Minimal NgModule'; +} diff --git a/aio/content/examples/ngmodule/ts/src/app/app.component.1.ts b/aio/content/examples/ngmodule/ts/src/app/app.component.1.ts new file mode 100644 index 0000000000..ccf44d4416 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/app.component.1.ts @@ -0,0 +1,19 @@ +// #docplaster +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'my-app', +// #enddocregion + /* + // #docregion template + template: '

    {{title}}

    ' + // #enddocregion template + */ +// #docregion + template: '' +}) +export class AppComponent { + subtitle = '(v1)'; +} +// #enddocregion diff --git a/aio/content/examples/ngmodule/ts/src/app/app.component.1b.ts b/aio/content/examples/ngmodule/ts/src/app/app.component.1b.ts new file mode 100644 index 0000000000..291bf0ac6b --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/app.component.1b.ts @@ -0,0 +1,15 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'my-app', + // #docregion template + template: ` + + + ` + // #enddocregion template +}) +export class AppComponent { + subtitle = '(v1)'; +} diff --git a/aio/content/examples/ngmodule/ts/src/app/app.component.2.ts b/aio/content/examples/ngmodule/ts/src/app/app.component.2.ts new file mode 100644 index 0000000000..a68b7d337d --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/app.component.2.ts @@ -0,0 +1,12 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'my-app', + template: ` + + + ` +}) +export class AppComponent { + subtitle = '(v2)'; +} diff --git a/aio/content/examples/ngmodule/ts/src/app/app.component.3.ts b/aio/content/examples/ngmodule/ts/src/app/app.component.3.ts new file mode 100644 index 0000000000..6d69a56f70 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/app.component.3.ts @@ -0,0 +1,19 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'my-app', + // #docregion template + template: ` + + + + ` + // #enddocregion template +}) +export class AppComponent { + subtitle = '(v3)'; +} diff --git a/aio/content/examples/ngmodule/ts/src/app/app.component.ts b/aio/content/examples/ngmodule/ts/src/app/app.component.ts new file mode 100644 index 0000000000..67336c8b08 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/app.component.ts @@ -0,0 +1,19 @@ +// #docplaster +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'my-app', + template: ` + + + + ` +}) +export class AppComponent { + subtitle = '(Final)'; +} diff --git a/aio/content/examples/ngmodule/ts/src/app/app.module.0.ts b/aio/content/examples/ngmodule/ts/src/app/app.module.0.ts new file mode 100644 index 0000000000..144ad7bb50 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/app.module.0.ts @@ -0,0 +1,23 @@ +// #docplaster +// #docregion +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; + +import +// #enddocregion + { AppComponent } from './app.component.0'; +/* +// #docregion + { AppComponent } from './app.component'; +// #enddocregion +*/ +// #docregion + +@NgModule({ +// #docregion imports + imports: [ BrowserModule ], +// #enddocregion imports + declarations: [ AppComponent ], + bootstrap: [ AppComponent ] +}) +export class AppModule { } diff --git a/aio/content/examples/ngmodule/ts/src/app/app.module.1.ts b/aio/content/examples/ngmodule/ts/src/app/app.module.1.ts new file mode 100644 index 0000000000..f9f50e18d0 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/app.module.1.ts @@ -0,0 +1,54 @@ +// #docplaster +// #docregion +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; + +import +// #enddocregion + { AppComponent } from './app.component.1'; +/* +// #docregion + { AppComponent } from './app.component'; +// #enddocregion +*/ +// #docregion +import { HighlightDirective } from './highlight.directive'; +import { TitleComponent } from './title.component'; +import { UserService } from './user.service'; + +/* Contact Related Imports */ +import { FormsModule } from '@angular/forms'; + +import { AwesomePipe } from './contact/awesome.pipe'; +import { ContactComponent } from './contact/contact.component.3'; + +// #docregion import-contact-directive +import { + HighlightDirective as ContactHighlightDirective +} from './contact/highlight.directive'; +// #enddocregion import-contact-directive + +@NgModule({ +// #docregion imports + imports: [ BrowserModule, FormsModule ], +// #enddocregion imports +// #docregion declarations, directive, component + declarations: [ + AppComponent, + HighlightDirective, +// #enddocregion directive + TitleComponent, +// #enddocregion component + + AwesomePipe, + ContactComponent, + ContactHighlightDirective +// #docregion directive, component + ], +// #enddocregion declarations, directive, component +// #docregion providers + providers: [ UserService ], +// #enddocregion providers + bootstrap: [ AppComponent ] +}) +export class AppModule { } diff --git a/aio/content/examples/ngmodule/ts/src/app/app.module.1b.ts b/aio/content/examples/ngmodule/ts/src/app/app.module.1b.ts new file mode 100644 index 0000000000..ae04326239 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/app.module.1b.ts @@ -0,0 +1,53 @@ +// #docplaster +// #docregion +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; + +/* App Root */ +import +// #enddocregion + { AppComponent } from './app.component.1b'; +/* +// #docregion + { AppComponent } from './app.component'; +// #enddocregion +*/ +// #docregion +import { HighlightDirective } from './highlight.directive'; +import { TitleComponent } from './title.component'; +import { UserService } from './user.service'; + +/* Contact Imports */ +import +// #enddocregion + { ContactComponent } from './contact/contact.component.3'; +/* +// #docregion + { ContactComponent } from './contact/contact.component'; +// #enddocregion +*/ +// #docregion +import { ContactService } from './contact/contact.service'; +import { AwesomePipe } from './contact/awesome.pipe'; + +// #docregion import-alias +import { + HighlightDirective as ContactHighlightDirective +} from './contact/highlight.directive'; +// #enddocregion import-alias + +import { FormsModule } from '@angular/forms'; + +@NgModule({ + imports: [ BrowserModule, FormsModule ], +// #docregion declarations + declarations: [ + AppComponent, HighlightDirective, TitleComponent, + AwesomePipe, ContactComponent, ContactHighlightDirective + ], +// #docregion providers + providers: [ ContactService, UserService ], +// #enddocregion providers + bootstrap: [ AppComponent ] +}) +export class AppModule { } diff --git a/aio/content/examples/ngmodule/ts/src/app/app.module.2.ts b/aio/content/examples/ngmodule/ts/src/app/app.module.2.ts new file mode 100644 index 0000000000..f00e9b5d27 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/app.module.2.ts @@ -0,0 +1,37 @@ +// #docplaster +// #docregion +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; + +/* App Root */ +import +// #enddocregion + { AppComponent } from './app.component.2'; +/* +// #docregion + { AppComponent } from './app.component'; +// #enddocregion +*/ +// #docregion +import { HighlightDirective } from './highlight.directive'; +import { TitleComponent } from './title.component'; +import { UserService } from './user.service'; + +/* Contact Imports */ +import +// #enddocregion + { ContactModule } from './contact/contact.module.2'; +/* +// #docregion + { ContactModule } from './contact/contact.module'; +// #enddocregion +*/ +// #docregion + +@NgModule({ + imports: [ BrowserModule, ContactModule ], + declarations: [ AppComponent, HighlightDirective, TitleComponent ], + providers: [ UserService ], + bootstrap: [ AppComponent ], +}) +export class AppModule { } diff --git a/aio/content/examples/ngmodule/ts/src/app/app.module.3.ts b/aio/content/examples/ngmodule/ts/src/app/app.module.3.ts new file mode 100644 index 0000000000..8ca0a46d9a --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/app.module.3.ts @@ -0,0 +1,30 @@ +// #docplaster +// #docregion +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; + +/* App Root */ +import { AppComponent } from './app.component.3'; +import { HighlightDirective } from './highlight.directive'; +import { TitleComponent } from './title.component'; +import { UserService } from './user.service'; + +/* Feature Modules */ +import { ContactModule } from './contact/contact.module.3'; + +/* Routing Module */ +import { AppRoutingModule } from './app-routing.module.3'; + +@NgModule({ +// #docregion imports + imports: [ + BrowserModule, + ContactModule, + AppRoutingModule + ], +// #enddocregion imports + providers: [ UserService ], + declarations: [ AppComponent, HighlightDirective, TitleComponent ], + bootstrap: [ AppComponent ] +}) +export class AppModule { } diff --git a/aio/content/examples/ngmodule/ts/src/app/app.module.ts b/aio/content/examples/ngmodule/ts/src/app/app.module.ts new file mode 100644 index 0000000000..da03420804 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/app.module.ts @@ -0,0 +1,40 @@ +// #docplaster +// #docregion +// #docregion v4 +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; + +/* App Root */ +import { AppComponent } from './app.component'; + +/* Feature Modules */ +import { ContactModule } from './contact/contact.module'; +import { CoreModule } from './core/core.module'; + +/* Routing Module */ +import { AppRoutingModule } from './app-routing.module'; + +@NgModule({ + // #docregion import-for-root + imports: [ + BrowserModule, + ContactModule, +// #enddocregion v4 +// #enddocregion import-for-root +/* +// #docregion v4 + CoreModule, +// #enddocregion v4 +*/ +// #docregion import-for-root + CoreModule.forRoot({userName: 'Miss Marple'}), +// #docregion v4 + AppRoutingModule + ], + // #enddocregion import-for-root + declarations: [ AppComponent ], + bootstrap: [ AppComponent ] +}) +export class AppModule { } +// #enddocregion v4 +// #enddocregion diff --git a/aio/content/examples/ngmodule/ts/src/app/contact/awesome.pipe.ts b/aio/content/examples/ngmodule/ts/src/app/contact/awesome.pipe.ts new file mode 100644 index 0000000000..d6dce99901 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/contact/awesome.pipe.ts @@ -0,0 +1,10 @@ +// #docregion +import { Pipe, PipeTransform } from '@angular/core'; + +@Pipe({ name: 'awesome' }) +/** Precede the input string with the word "Awesome " */ +export class AwesomePipe implements PipeTransform { + transform(phrase: string) { + return phrase ? 'Awesome ' + phrase : ''; + } +} diff --git a/aio/content/examples/ngmodule/ts/src/app/contact/contact-routing.module.3.ts b/aio/content/examples/ngmodule/ts/src/app/contact/contact-routing.module.3.ts new file mode 100644 index 0000000000..27dfc232b7 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/contact/contact-routing.module.3.ts @@ -0,0 +1,12 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import { ContactComponent } from './contact.component.3'; + +@NgModule({ + imports: [RouterModule.forChild([ + { path: 'contact', component: ContactComponent} + ])], + exports: [RouterModule] +}) +export class ContactRoutingModule {} diff --git a/aio/content/examples/ngmodule/ts/src/app/contact/contact-routing.module.ts b/aio/content/examples/ngmodule/ts/src/app/contact/contact-routing.module.ts new file mode 100644 index 0000000000..2fa81af5a9 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/contact/contact-routing.module.ts @@ -0,0 +1,14 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import { ContactComponent } from './contact.component'; + +// #docregion routing +@NgModule({ + imports: [RouterModule.forChild([ + { path: 'contact', component: ContactComponent } + ])], + exports: [RouterModule] +}) +export class ContactRoutingModule {} +// #enddocregion diff --git a/aio/content/examples/ngmodule/ts/src/app/contact/contact.component.3.ts b/aio/content/examples/ngmodule/ts/src/app/contact/contact.component.3.ts new file mode 100644 index 0000000000..fcc409b9af --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/contact/contact.component.3.ts @@ -0,0 +1,54 @@ +// #docregion +import { Component, OnInit } from '@angular/core'; + +import { Contact, ContactService } from './contact.service'; +import { UserService } from '../user.service'; + +@Component({ + moduleId: module.id, + selector: 'app-contact', + templateUrl: './contact.component.html', + styleUrls: [ './contact.component.css' ] +}) +export class ContactComponent implements OnInit { + contact: Contact; + contacts: Contact[]; + + msg = 'Loading contacts ...'; + userName = ''; + + constructor(private contactService: ContactService, userService: UserService) { + this.userName = userService.userName; + } + + ngOnInit() { + this.contactService.getContacts().then(contacts => { + this.msg = ''; + this.contacts = contacts; + this.contact = contacts[0]; + }); + } + + next() { + let ix = 1 + this.contacts.indexOf(this.contact); + if (ix >= this.contacts.length) { ix = 0; } + this.contact = this.contacts[ix]; + } + + onSubmit() { + // POST-DEMO TODO: do something like save it + this.displayMessage('Saved ' + this.contact.name); + } + + newContact() { + this.displayMessage('New contact'); + this.contact = {id: 42, name: ''}; + this.contacts.push(this.contact); + } + + /** Display a message briefly, then remove it. */ + displayMessage(msg: string) { + this.msg = msg; + setTimeout(() => this.msg = '', 1500); + } +} diff --git a/aio/content/examples/ngmodule/ts/src/app/contact/contact.component.css b/aio/content/examples/ngmodule/ts/src/app/contact/contact.component.css new file mode 100644 index 0000000000..45e8f6e76d --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/contact/contact.component.css @@ -0,0 +1,29 @@ +/* #docregion */ +.ng-valid[required] { + border-left: 5px solid #42A948; /* green */ +} + +.ng-invalid { + border-left: 5px solid #a94442; /* red */ +} + +.alert { + padding: 15px; + margin: 8px 0; + border: 1px solid transparent; + border-radius: 4px; +} +.alert-danger { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} + +.msg { + color: blue; + background-color: whitesmoke; + border: 1px solid transparent; + border-radius: 4px; + margin-bottom: 20px; +} + diff --git a/aio/content/examples/ngmodule/ts/src/app/contact/contact.component.html b/aio/content/examples/ngmodule/ts/src/app/contact/contact.component.html new file mode 100644 index 0000000000..483480571e --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/contact/contact.component.html @@ -0,0 +1,23 @@ + +

    Contact of {{userName}}

    +
    {{msg}}
    + +
    + +

    {{ contact.name | awesome }}

    + +
    + + +
    + Name is required +
    +
    +
    + + + +
    + diff --git a/aio/content/examples/ngmodule/ts/src/app/contact/contact.component.ts b/aio/content/examples/ngmodule/ts/src/app/contact/contact.component.ts new file mode 100644 index 0000000000..f9116a4213 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/contact/contact.component.ts @@ -0,0 +1,55 @@ +// Exact copy except import UserService from core +// #docregion +import { Component, OnInit } from '@angular/core'; + +import { Contact, ContactService } from './contact.service'; +import { UserService } from '../core/user.service'; + +@Component({ + moduleId: module.id, + selector: 'app-contact', + templateUrl: './contact.component.html', + styleUrls: [ './contact.component.css' ] +}) +export class ContactComponent implements OnInit { + contact: Contact; + contacts: Contact[]; + + msg = 'Loading contacts ...'; + userName = ''; + + constructor(private contactService: ContactService, userService: UserService) { + this.userName = userService.userName; + } + + ngOnInit() { + this.contactService.getContacts().then(contacts => { + this.msg = ''; + this.contacts = contacts; + this.contact = contacts[0]; + }); + } + + next() { + let ix = 1 + this.contacts.indexOf(this.contact); + if (ix >= this.contacts.length) { ix = 0; } + this.contact = this.contacts[ix]; + } + + onSubmit() { + // POST-DEMO TODO: do something like save it + this.displayMessage('Saved ' + this.contact.name); + } + + newContact() { + this.displayMessage('New contact'); + this.contact = {id: 42, name: ''}; + this.contacts.push(this.contact); + } + + /** Display a message briefly, then remove it. */ + displayMessage(msg: string) { + this.msg = msg; + setTimeout(() => this.msg = '', 1500); + } +} diff --git a/aio/content/examples/ngmodule/ts/src/app/contact/contact.module.2.ts b/aio/content/examples/ngmodule/ts/src/app/contact/contact.module.2.ts new file mode 100644 index 0000000000..f347bd3b51 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/contact/contact.module.2.ts @@ -0,0 +1,30 @@ +// #docplaster +// #docregion +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; + +import { AwesomePipe } from './awesome.pipe'; + +import +// #enddocregion + { ContactComponent } from './contact.component.3'; +/* +// #docregion + { ContactComponent } from './contact.component'; +// #enddocregion +*/ +// #docregion +import { ContactService } from './contact.service'; +import { HighlightDirective } from './highlight.directive'; + +// #docregion class +@NgModule({ + imports: [ CommonModule, FormsModule ], + declarations: [ ContactComponent, HighlightDirective, AwesomePipe ], + exports: [ ContactComponent ], + providers: [ ContactService ] +}) +export class ContactModule { } +// #enddocregion class +// #enddocregion diff --git a/aio/content/examples/ngmodule/ts/src/app/contact/contact.module.3.ts b/aio/content/examples/ngmodule/ts/src/app/contact/contact.module.3.ts new file mode 100644 index 0000000000..ff70721b2f --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/contact/contact.module.3.ts @@ -0,0 +1,22 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; + +import { AwesomePipe } from './awesome.pipe'; + +import { ContactComponent } from './contact.component.3'; +import { ContactService } from './contact.service'; +import { HighlightDirective } from './highlight.directive'; + +import { ContactRoutingModule } from './contact-routing.module.3'; + +// #docregion class +@NgModule({ + imports: [ CommonModule, FormsModule, ContactRoutingModule ], + declarations: [ ContactComponent, HighlightDirective, AwesomePipe ], + providers: [ ContactService ] +}) +export class ContactModule { } +// #enddocregion class +// #enddocregion diff --git a/aio/content/examples/ngmodule/ts/src/app/contact/contact.module.ts b/aio/content/examples/ngmodule/ts/src/app/contact/contact.module.ts new file mode 100644 index 0000000000..9456de7654 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/contact/contact.module.ts @@ -0,0 +1,16 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { SharedModule } from '../shared/shared.module'; + +import { ContactComponent } from './contact.component'; +import { ContactService } from './contact.service'; +import { ContactRoutingModule } from './contact-routing.module'; + +// #docregion class +@NgModule({ + imports: [ SharedModule, ContactRoutingModule ], + declarations: [ ContactComponent ], + providers: [ ContactService ] +}) +export class ContactModule { } +// #enddocregion class diff --git a/aio/content/examples/ngmodule/ts/src/app/contact/contact.service.ts b/aio/content/examples/ngmodule/ts/src/app/contact/contact.service.ts new file mode 100644 index 0000000000..28b18bd84a --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/contact/contact.service.ts @@ -0,0 +1,29 @@ +// #docregion +import { Injectable } from '@angular/core'; + +export class Contact { + constructor(public id: number, public name: string) { } +} + +const CONTACTS: Contact[] = [ + new Contact(21, 'Sam Spade'), + new Contact(22, 'Nick Danger'), + new Contact(23, 'Nancy Drew') +]; + +const FETCH_LATENCY = 500; + +@Injectable() +export class ContactService { + + getContacts() { + return new Promise(resolve => { + setTimeout(() => { resolve(CONTACTS); }, FETCH_LATENCY); + }); + } + + getContact(id: number | string) { + return this.getContacts() + .then(heroes => heroes.find(hero => hero.id === +id)); + } +} diff --git a/aio/content/examples/ngmodule/ts/src/app/contact/highlight.directive.ts b/aio/content/examples/ngmodule/ts/src/app/contact/highlight.directive.ts new file mode 100644 index 0000000000..64338b1377 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/contact/highlight.directive.ts @@ -0,0 +1,18 @@ +/* tslint:disable */ +// Same directive name and selector as +// HighlightDirective in parent AppModule +// It selects for both input boxes and 'highlight' attr +// and it highlights in blue instead of gold + +// #docregion +import { Directive, ElementRef } from '@angular/core'; + +@Directive({ selector: '[highlight], input' }) +/** Highlight the attached element or an InputElement in blue */ +export class HighlightDirective { + constructor(el: ElementRef) { + el.nativeElement.style.backgroundColor = 'powderblue'; + console.log( + `* Contact highlight called for ${el.nativeElement.tagName}`); + } +} diff --git a/aio/content/examples/ngmodule/ts/src/app/core/core.module.ts b/aio/content/examples/ngmodule/ts/src/app/core/core.module.ts new file mode 100644 index 0000000000..27cb9a2193 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/core/core.module.ts @@ -0,0 +1,48 @@ +/* tslint:disable:member-ordering no-unused-variable */ +// #docplaster +// #docregion +// #docregion v4 +import { + ModuleWithProviders, NgModule, + Optional, SkipSelf } from '@angular/core'; + +import { CommonModule } from '@angular/common'; + +import { TitleComponent } from './title.component'; +import { UserService } from './user.service'; +// #enddocregion +import { UserServiceConfig } from './user.service'; + +// #docregion v4 +@NgModule({ + imports: [ CommonModule ], + declarations: [ TitleComponent ], + exports: [ TitleComponent ], + providers: [ UserService ] +}) +export class CoreModule { +// #enddocregion v4 + + // #docregion ctor + constructor (@Optional() @SkipSelf() parentModule: CoreModule) { + if (parentModule) { + throw new Error( + 'CoreModule is already loaded. Import it in the AppModule only'); + } + } + // #enddocregion ctor + + // #docregion for-root + static forRoot(config: UserServiceConfig): ModuleWithProviders { + return { + ngModule: CoreModule, + providers: [ + {provide: UserServiceConfig, useValue: config } + ] + }; + } + // #enddocregion for-root +// #docregion v4 +} +// #enddocregion v4 +// #enddocregion diff --git a/aio/content/examples/ngmodule/ts/src/app/core/title.component.html b/aio/content/examples/ngmodule/ts/src/app/core/title.component.html new file mode 100644 index 0000000000..8ebd08ae43 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/core/title.component.html @@ -0,0 +1,6 @@ + +

    {{title}} {{subtitle}}

    +

    + Welcome, {{user}} +

    + diff --git a/aio/content/examples/ngmodule/ts/src/app/core/title.component.ts b/aio/content/examples/ngmodule/ts/src/app/core/title.component.ts new file mode 100644 index 0000000000..5fbd64d5fd --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/core/title.component.ts @@ -0,0 +1,18 @@ +// Exact copy of app/title.component.ts except import UserService from shared +import { Component, Input } from '@angular/core'; +import { UserService } from '../core/user.service'; + +@Component({ + moduleId: module.id, + selector: 'app-title', + templateUrl: './title.component.html', +}) +export class TitleComponent { + @Input() subtitle = ''; + title = 'Angular Modules'; + user = ''; + + constructor(userService: UserService) { + this.user = userService.userName; + } +} diff --git a/aio/content/examples/ngmodule/ts/src/app/core/user.service.ts b/aio/content/examples/ngmodule/ts/src/app/core/user.service.ts new file mode 100644 index 0000000000..8fe839075e --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/core/user.service.ts @@ -0,0 +1,32 @@ +// Crazy copy of the app/user.service +// Proves that UserService is an app-wide singleton and only instantiated once +// IFF shared.module follows the `forRoot` pattern +// +// If it didn't, a new instance of UserService would be created +// after each lazy load and the userName would double up. + +import { Injectable, Optional } from '@angular/core'; + +let nextId = 1; + +export class UserServiceConfig { + userName = 'Philip Marlowe'; +} + +@Injectable() +export class UserService { + id = nextId++; + private _userName = 'Sherlock Holmes'; + + // #docregion ctor + constructor(@Optional() config: UserServiceConfig) { + if (config) { this._userName = config.userName; } + } + // #enddocregion ctor + + get userName() { + // Demo: add a suffix if this service has been created more than once + const suffix = this.id > 1 ? ` times ${this.id}` : ''; + return this._userName + suffix; + } +} diff --git a/aio/content/examples/ngmodule/ts/src/app/crisis/crisis-detail.component.ts b/aio/content/examples/ngmodule/ts/src/app/crisis/crisis-detail.component.ts new file mode 100644 index 0000000000..9749029d62 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/crisis/crisis-detail.component.ts @@ -0,0 +1,19 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; + +@Component({ + template: ` +

    Crisis Detail

    +
    Crisis id: {{id}}
    +
    + Crisis List + ` +}) +export class CrisisDetailComponent implements OnInit { + id: number; + constructor(private route: ActivatedRoute) { } + + ngOnInit() { + this.id = parseInt(this.route.snapshot.params['id'], 10); + } +} diff --git a/aio/content/examples/ngmodule/ts/src/app/crisis/crisis-list.component.ts b/aio/content/examples/ngmodule/ts/src/app/crisis/crisis-list.component.ts new file mode 100644 index 0000000000..ae459cdf1b --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/crisis/crisis-list.component.ts @@ -0,0 +1,22 @@ +import { Component, OnInit } from '@angular/core'; + +import { Crisis, + CrisisService } from './crisis.service'; + +@Component({ + template: ` +

    Crisis List

    + + ` +}) +export class CrisisListComponent implements OnInit { + crisises: Promise; + + constructor(private crisisService: CrisisService) { } + + ngOnInit() { + this.crisises = this.crisisService.getCrises(); + } +} diff --git a/aio/content/examples/ngmodule/ts/src/app/crisis/crisis-routing.module.ts b/aio/content/examples/ngmodule/ts/src/app/crisis/crisis-routing.module.ts new file mode 100644 index 0000000000..c60efa8cb4 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/crisis/crisis-routing.module.ts @@ -0,0 +1,18 @@ +import { NgModule } from '@angular/core'; +import { Routes, + RouterModule } from '@angular/router'; + +import { CrisisListComponent } from './crisis-list.component'; +import { CrisisDetailComponent } from './crisis-detail.component'; + +const routes: Routes = [ + { path: '', redirectTo: 'list', pathMatch: 'full'}, + { path: 'list', component: CrisisListComponent }, + { path: ':id', component: CrisisDetailComponent } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class CrisisRoutingModule {} diff --git a/aio/content/examples/ngmodule/ts/src/app/crisis/crisis.module.ts b/aio/content/examples/ngmodule/ts/src/app/crisis/crisis.module.ts new file mode 100644 index 0000000000..f557bd6423 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/crisis/crisis.module.ts @@ -0,0 +1,14 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +import { CrisisListComponent } from './crisis-list.component'; +import { CrisisDetailComponent } from './crisis-detail.component'; +import { CrisisService } from './crisis.service'; +import { CrisisRoutingModule } from './crisis-routing.module'; + +@NgModule({ + imports: [ CommonModule, CrisisRoutingModule ], + declarations: [ CrisisDetailComponent, CrisisListComponent ], + providers: [ CrisisService ] +}) +export class CrisisModule {} diff --git a/aio/content/examples/ngmodule/ts/src/app/crisis/crisis.service.ts b/aio/content/examples/ngmodule/ts/src/app/crisis/crisis.service.ts new file mode 100644 index 0000000000..419ee19b36 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/crisis/crisis.service.ts @@ -0,0 +1,30 @@ +import { Injectable } from '@angular/core'; + +export class Crisis { + constructor(public id: number, public name: string) { } +} + +const CRISES: Crisis[] = [ + new Crisis(1, 'Dragon Burning Cities'), + new Crisis(2, 'Sky Rains Great White Sharks'), + new Crisis(3, 'Giant Asteroid Heading For Earth'), + new Crisis(4, 'Procrastinators Meeting Delayed Again'), +]; + +const FETCH_LATENCY = 500; + +@Injectable() +export class CrisisService { + + getCrises() { + return new Promise(resolve => { + setTimeout(() => { resolve(CRISES); }, FETCH_LATENCY); + }); + } + + getCrisis(id: number | string) { + return this.getCrises() + .then(heroes => heroes.find(hero => hero.id === +id)); + } + +} diff --git a/aio/content/examples/ngmodule/ts/src/app/hero/hero-detail.component.ts b/aio/content/examples/ngmodule/ts/src/app/hero/hero-detail.component.ts new file mode 100644 index 0000000000..1478ad350c --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/hero/hero-detail.component.ts @@ -0,0 +1,31 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; + +import { Hero, + HeroService } from './hero.service'; + +@Component({ + template: ` +

    Hero Detail

    +
    +
    Id: {{hero.id}}

    + +
    +
    + Hero List + ` +}) +export class HeroDetailComponent implements OnInit { + hero: Hero; + + constructor( + private route: ActivatedRoute, + private heroService: HeroService) { } + + ngOnInit() { + let id = parseInt(this.route.snapshot.params['id'], 10); + this.heroService.getHero(id).then(hero => this.hero = hero); + } +} diff --git a/aio/content/examples/ngmodule/ts/src/app/hero/hero-list.component.ts b/aio/content/examples/ngmodule/ts/src/app/hero/hero-list.component.ts new file mode 100644 index 0000000000..5a4e9ef0c4 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/hero/hero-list.component.ts @@ -0,0 +1,21 @@ +import { Component, OnInit } from '@angular/core'; + +import { Hero, + HeroService } from './hero.service'; + +@Component({ + template: ` +

    Hero List

    + + ` +}) +export class HeroListComponent implements OnInit { + heroes: Promise; + constructor(private heroService: HeroService) { } + + ngOnInit() { + this.heroes = this.heroService.getHeroes(); + } +} diff --git a/aio/content/examples/ngmodule/ts/src/app/hero/hero-routing.module.3.ts b/aio/content/examples/ngmodule/ts/src/app/hero/hero-routing.module.3.ts new file mode 100644 index 0000000000..588ffd94be --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/hero/hero-routing.module.3.ts @@ -0,0 +1,23 @@ +import { NgModule } from '@angular/core'; +import { Routes, + RouterModule } from '@angular/router'; + +import { HeroComponent } from './hero.component.3'; +import { HeroListComponent } from './hero-list.component'; +import { HeroDetailComponent } from './hero-detail.component'; + +const routes: Routes = [ + { path: '', + component: HeroComponent, + children: [ + { path: '', component: HeroListComponent }, + { path: ':id', component: HeroDetailComponent } + ] + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class HeroRoutingModule {} diff --git a/aio/content/examples/ngmodule/ts/src/app/hero/hero-routing.module.ts b/aio/content/examples/ngmodule/ts/src/app/hero/hero-routing.module.ts new file mode 100644 index 0000000000..d97aab3beb --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/hero/hero-routing.module.ts @@ -0,0 +1,23 @@ +import { NgModule } from '@angular/core'; +import { Routes, + RouterModule } from '@angular/router'; + +import { HeroComponent } from './hero.component'; +import { HeroListComponent } from './hero-list.component'; +import { HeroDetailComponent } from './hero-detail.component'; + +const routes: Routes = [ + { path: '', + component: HeroComponent, + children: [ + { path: '', component: HeroListComponent }, + { path: ':id', component: HeroDetailComponent } + ] + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class HeroRoutingModule {} diff --git a/aio/content/examples/ngmodule/ts/src/app/hero/hero.component.3.ts b/aio/content/examples/ngmodule/ts/src/app/hero/hero.component.3.ts new file mode 100644 index 0000000000..d52bc253df --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/hero/hero.component.3.ts @@ -0,0 +1,18 @@ +import { Component } from '@angular/core'; + +import { HeroService } from './hero.service'; +import { UserService } from '../user.service'; + +@Component({ + template: ` +

    Heroes of {{userName}}

    + + `, + providers: [ HeroService ] +}) +export class HeroComponent { + userName = ''; + constructor(userService: UserService) { + this.userName = userService.userName; + } +} diff --git a/aio/content/examples/ngmodule/ts/src/app/hero/hero.component.ts b/aio/content/examples/ngmodule/ts/src/app/hero/hero.component.ts new file mode 100644 index 0000000000..86338fb0ae --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/hero/hero.component.ts @@ -0,0 +1,19 @@ +// Exact copy except import UserService from core +import { Component } from '@angular/core'; + +import { HeroService } from './hero.service'; +import { UserService } from '../core/user.service'; + +@Component({ + template: ` +

    Heroes of {{userName}}

    + + `, + providers: [ HeroService ] +}) +export class HeroComponent { + userName = ''; + constructor(userService: UserService) { + this.userName = userService.userName; + } +} diff --git a/aio/content/examples/ngmodule/ts/src/app/hero/hero.module.3.ts b/aio/content/examples/ngmodule/ts/src/app/hero/hero.module.3.ts new file mode 100644 index 0000000000..c00f4eedd5 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/hero/hero.module.3.ts @@ -0,0 +1,20 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; + +import { HeroComponent } from './hero.component.3'; +import { HeroDetailComponent } from './hero-detail.component'; +import { HeroListComponent } from './hero-list.component'; +import { HighlightDirective } from './highlight.directive'; +import { HeroRoutingModule } from './hero-routing.module.3'; + +// #docregion class +@NgModule({ + imports: [ CommonModule, FormsModule, HeroRoutingModule ], + declarations: [ + HeroComponent, HeroDetailComponent, HeroListComponent, + HighlightDirective + ] +}) +export class HeroModule { } +// #enddocregion class diff --git a/aio/content/examples/ngmodule/ts/src/app/hero/hero.module.ts b/aio/content/examples/ngmodule/ts/src/app/hero/hero.module.ts new file mode 100644 index 0000000000..98d7b76b00 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/hero/hero.module.ts @@ -0,0 +1,16 @@ +import { NgModule } from '@angular/core'; + +import { SharedModule } from '../shared/shared.module'; + +import { HeroComponent } from './hero.component'; +import { HeroDetailComponent } from './hero-detail.component'; +import { HeroListComponent } from './hero-list.component'; +import { HeroRoutingModule } from './hero-routing.module'; + +@NgModule({ + imports: [ SharedModule, HeroRoutingModule ], + declarations: [ + HeroComponent, HeroDetailComponent, HeroListComponent, + ] +}) +export class HeroModule { } diff --git a/aio/content/examples/ngmodule/ts/src/app/hero/hero.service.ts b/aio/content/examples/ngmodule/ts/src/app/hero/hero.service.ts new file mode 100644 index 0000000000..bb7ff5fa5c --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/hero/hero.service.ts @@ -0,0 +1,32 @@ +import { Injectable } from '@angular/core'; + +export class Hero { + constructor(public id: number, public name: string) { } +} + +const HEROES: Hero[] = [ + new Hero(11, 'Mr. Nice'), + new Hero(12, 'Narco'), + new Hero(13, 'Bombasto'), + new Hero(14, 'Celeritas'), + new Hero(15, 'Magneta'), + new Hero(16, 'RubberMan') +]; + +const FETCH_LATENCY = 500; + +@Injectable() +export class HeroService { + + getHeroes() { + return new Promise(resolve => { + setTimeout(() => { resolve(HEROES); }, FETCH_LATENCY); + }); + } + + getHero(id: number | string) { + return this.getHeroes() + .then(heroes => heroes.find(hero => hero.id === +id)); + } + +} diff --git a/aio/content/examples/ngmodule/ts/src/app/hero/highlight.directive.ts b/aio/content/examples/ngmodule/ts/src/app/hero/highlight.directive.ts new file mode 100644 index 0000000000..d7e39afd05 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/hero/highlight.directive.ts @@ -0,0 +1,14 @@ +// #docregion +import { Directive, ElementRef } from '@angular/core'; + +// Same directive name and selector as +// HighlightDirective in parent AppRootModule +// It selects for both input boxes and 'highlight' attr +// and it highlights in beige instead of yellow +@Directive({ selector: '[highlight]' }) +export class HighlightDirective { + constructor(el: ElementRef) { + el.nativeElement.style.backgroundColor = 'beige'; + console.log(`* Hero highlight called for ${el.nativeElement.tagName}`); + } +} diff --git a/aio/content/examples/ngmodule/ts/src/app/highlight.directive.ts b/aio/content/examples/ngmodule/ts/src/app/highlight.directive.ts new file mode 100644 index 0000000000..df67a3ae89 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/highlight.directive.ts @@ -0,0 +1,12 @@ +// #docregion +import { Directive, ElementRef } from '@angular/core'; + +@Directive({ selector: '[highlight]' }) +/** Highlight the attached element in gold */ +export class HighlightDirective { + constructor(el: ElementRef) { + el.nativeElement.style.backgroundColor = 'gold'; + console.log( + `* AppRoot highlight called for ${el.nativeElement.tagName}`); + } +} diff --git a/aio/content/examples/ngmodule/ts/src/app/shared/awesome.pipe.ts b/aio/content/examples/ngmodule/ts/src/app/shared/awesome.pipe.ts new file mode 100644 index 0000000000..a1a0001d24 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/shared/awesome.pipe.ts @@ -0,0 +1,10 @@ +// Exact copy of contact.awesome.pipe +import { Pipe, PipeTransform } from '@angular/core'; + +@Pipe({ name: 'awesome' }) +/** Precede the input string with the word "Awesome " */ +export class AwesomePipe implements PipeTransform { + transform(phrase: string) { + return phrase ? 'Awesome ' + phrase : ''; + } +} diff --git a/aio/content/examples/ngmodule/ts/src/app/shared/highlight.directive.ts b/aio/content/examples/ngmodule/ts/src/app/shared/highlight.directive.ts new file mode 100644 index 0000000000..63fbd4e488 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/shared/highlight.directive.ts @@ -0,0 +1,13 @@ +/* tslint:disable */ +// Exact copy of contact/highlight.directive except for color and message +import { Directive, ElementRef } from '@angular/core'; + +@Directive({ selector: '[highlight], input' }) +/** Highlight the attached element or an InputElement in gray */ +export class HighlightDirective { + constructor(el: ElementRef) { + el.nativeElement.style.backgroundColor = 'lightgray'; + console.log( + `* Shared highlight called for ${el.nativeElement.tagName}`); + } +} diff --git a/aio/content/examples/ngmodule/ts/src/app/shared/shared.module.ts b/aio/content/examples/ngmodule/ts/src/app/shared/shared.module.ts new file mode 100644 index 0000000000..2da7d7b2a5 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/shared/shared.module.ts @@ -0,0 +1,18 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; + +import { AwesomePipe } from './awesome.pipe'; +import { HighlightDirective } from './highlight.directive'; + +// #docregion module +@NgModule({ + imports: [ CommonModule ], + declarations: [ AwesomePipe, HighlightDirective ], + exports: [ AwesomePipe, HighlightDirective, + CommonModule, FormsModule ] +}) +export class SharedModule { } +// #enddocregion module +// #enddocregion diff --git a/aio/content/examples/ngmodule/ts/src/app/title.component.html b/aio/content/examples/ngmodule/ts/src/app/title.component.html new file mode 100644 index 0000000000..3db364cd4b --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/title.component.html @@ -0,0 +1,10 @@ + + +

    {{title}} {{subtitle}}

    + + +

    + Welcome, {{user}} +

    + + diff --git a/aio/content/examples/ngmodule/ts/src/app/title.component.ts b/aio/content/examples/ngmodule/ts/src/app/title.component.ts new file mode 100644 index 0000000000..c5815edcbd --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/title.component.ts @@ -0,0 +1,25 @@ +// #docplaster +// #docregion +// #docregion v1 +import { Component, Input } from '@angular/core'; +// #enddocregion v1 +import { UserService } from './user.service'; +// #docregion v1 + +@Component({ + moduleId: module.id, + selector: 'app-title', + templateUrl: './title.component.html', +}) +export class TitleComponent { + @Input() subtitle = ''; + title = 'Angular Modules'; +// #enddocregion v1 + user = ''; + + constructor(userService: UserService) { + this.user = userService.userName; + } +// #docregion v1 +} +// #enddocregion v1 diff --git a/aio/content/examples/ngmodule/ts/src/app/user.service.ts b/aio/content/examples/ngmodule/ts/src/app/user.service.ts new file mode 100644 index 0000000000..7d996b26fa --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/app/user.service.ts @@ -0,0 +1,8 @@ +// #docregion +import { Injectable } from '@angular/core'; + +@Injectable() +/** Dummy version of an authenticated user service */ +export class UserService { + userName = 'Sherlock Holmes'; +} diff --git a/aio/content/examples/ngmodule/ts/src/index.0.html b/aio/content/examples/ngmodule/ts/src/index.0.html new file mode 100644 index 0000000000..2281b9fecb --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/index.0.html @@ -0,0 +1,24 @@ + + + + + NgModule Minimal + + + + + + + + + + + + + + + Loading... + + diff --git a/aio/content/examples/ngmodule/ts/src/index.1.html b/aio/content/examples/ngmodule/ts/src/index.1.html new file mode 100644 index 0000000000..65f7991a26 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/index.1.html @@ -0,0 +1,24 @@ + + + + + NgModule - Contact + + + + + + + + + + + + + + + Loading... + + diff --git a/aio/content/examples/ngmodule/ts/src/index.1b.html b/aio/content/examples/ngmodule/ts/src/index.1b.html new file mode 100644 index 0000000000..b4a89d6549 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/index.1b.html @@ -0,0 +1,24 @@ + + + + + NgModule - Contact + + + + + + + + + + + + + + + Loading... + + diff --git a/aio/content/examples/ngmodule/ts/src/index.2.html b/aio/content/examples/ngmodule/ts/src/index.2.html new file mode 100644 index 0000000000..72c545f1f3 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/index.2.html @@ -0,0 +1,24 @@ + + + + + NgModule - Contact + + + + + + + + + + + + + + + Loading... + + diff --git a/aio/content/examples/ngmodule/ts/src/index.3.html b/aio/content/examples/ngmodule/ts/src/index.3.html new file mode 100644 index 0000000000..ec55dd984e --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/index.3.html @@ -0,0 +1,24 @@ + + + + + NgModule - Contact + + + + + + + + + + + + + + + Loading... + + diff --git a/aio/content/examples/ngmodule/ts/src/index.html b/aio/content/examples/ngmodule/ts/src/index.html new file mode 100644 index 0000000000..9fc50c02a5 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/index.html @@ -0,0 +1,25 @@ + + + + + NgModule Deluxe + + + + + + + + + + + + + + + + Loading... + + diff --git a/aio/content/examples/ngmodule/ts/src/main-static.ts b/aio/content/examples/ngmodule/ts/src/main-static.ts new file mode 100644 index 0000000000..a1bcf466d2 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/main-static.ts @@ -0,0 +1,13 @@ +// #docplaster +/* +// #docregion +// The browser platform without a compiler +import { platformBrowser } from '@angular/platform-browser'; + +// The app module factory produced by the static offline compiler +import { AppModuleNgFactory } from './app/app.module.ngfactory'; + +// Launch with the app module factory. +platformBrowser().bootstrapModuleFactory(AppModuleNgFactory); +// #enddocregion +*/ diff --git a/aio/content/examples/ngmodule/ts/src/main.0.ts b/aio/content/examples/ngmodule/ts/src/main.0.ts new file mode 100644 index 0000000000..6d1d712f07 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/main.0.ts @@ -0,0 +1,4 @@ +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module.0'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/ngmodule/ts/src/main.1.ts b/aio/content/examples/ngmodule/ts/src/main.1.ts new file mode 100644 index 0000000000..48129f4cc9 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/main.1.ts @@ -0,0 +1,4 @@ +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module.1'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/ngmodule/ts/src/main.1b.ts b/aio/content/examples/ngmodule/ts/src/main.1b.ts new file mode 100644 index 0000000000..7a7bfae22f --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/main.1b.ts @@ -0,0 +1,4 @@ +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module.1b'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/ngmodule/ts/src/main.2.ts b/aio/content/examples/ngmodule/ts/src/main.2.ts new file mode 100644 index 0000000000..c535e2e775 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/main.2.ts @@ -0,0 +1,4 @@ +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module.2'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/ngmodule/ts/src/main.3.ts b/aio/content/examples/ngmodule/ts/src/main.3.ts new file mode 100644 index 0000000000..72f21dd142 --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/main.3.ts @@ -0,0 +1,4 @@ +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module.3'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/ngmodule/ts/src/main.ts b/aio/content/examples/ngmodule/ts/src/main.ts new file mode 100644 index 0000000000..c8424d8c4c --- /dev/null +++ b/aio/content/examples/ngmodule/ts/src/main.ts @@ -0,0 +1,9 @@ +// #docregion +// The browser platform with a compiler +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +// The app module +import { AppModule } from './app/app.module'; + +// Compile and launch the module +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/package.json b/aio/content/examples/package.json new file mode 100644 index 0000000000..6b20c9fda1 --- /dev/null +++ b/aio/content/examples/package.json @@ -0,0 +1,88 @@ +{ + "name": "angular-examples-master", + "version": "1.0.0", + "private": true, + "description": "Master package.json, the superset of all dependencies for all of the _example package.json files. See _boilerplate/package.json for example npm scripts.", + "scripts": { + "http-server": "http-server", + "protractor": "protractor", + "webdriver:update": "webdriver-manager update --standalone false --gecko false" + }, + "keywords": [], + "author": "", + "license": "MIT", + "dependencies": { + "@angular/common": "2.4.5", + "@angular/compiler": "2.4.5", + "@angular/compiler-cli": "2.4.5", + "@angular/core": "2.4.5", + "@angular/forms": "2.4.5", + "@angular/http": "2.4.5", + "@angular/platform-browser": "2.4.5", + "@angular/platform-browser-dynamic": "2.4.5", + "@angular/platform-server": "2.4.5", + "@angular/router": "3.4.5", + "@angular/tsc-wrapped": "^0.5.0", + "@angular/upgrade": "2.4.5", + "angular-in-memory-web-api": "~0.2.4", + "core-js": "^2.4.1", + "rxjs": "5.0.1", + "systemjs": "0.19.39", + "zone.js": "^0.7.4" + }, + "devDependencies": { + "@types/angular": "^1.5.16", + "@types/angular-animate": "^1.5.5", + "@types/angular-cookies": "^1.4.2", + "@types/angular-mocks": "^1.5.5", + "@types/angular-resource": "^1.5.6", + "@types/angular-route": "^1.3.2", + "@types/angular-sanitize": "^1.3.3", + "@types/jasmine": "2.5.36", + "@types/node": "^6.0.45", + "angular-cli": "^1.0.0-beta.26", + "angular2-template-loader": "^0.6.0", + "awesome-typescript-loader": "^3.0.0-beta.18", + "babel-cli": "^6.16.0", + "babel-preset-angular2": "^0.0.2", + "babel-preset-es2015": "^6.16.0", + "canonical-path": "0.0.2", + "concurrently": "^3.0.0", + "css-loader": "^0.26.1", + "extract-text-webpack-plugin": "2.0.0-beta.5", + "file-loader": "^0.9.0", + "html-loader": "^0.4.3", + "html-webpack-plugin": "^2.16.1", + "http-server": "^0.9.0", + "jasmine": "~2.4.1", + "jasmine-core": "~2.4.1", + "karma": "^1.3.0", + "karma-chrome-launcher": "^2.0.0", + "karma-cli": "^1.0.1", + "karma-jasmine": "^1.0.2", + "karma-jasmine-html-reporter": "^0.2.2", + "karma-phantomjs-launcher": "^1.0.2", + "karma-sourcemap-loader": "^0.3.7", + "karma-webpack": "^2.0.1", + "lite-server": "^2.2.2", + "lodash": "^4.16.2", + "null-loader": "^0.1.1", + "phantomjs-prebuilt": "^2.1.7", + "protractor": "~4.0.14", + "raw-loader": "^0.5.1", + "rimraf": "^2.5.4", + "rollup": "^0.36.0", + "rollup-plugin-commonjs": "^4.1.0", + "rollup-plugin-node-resolve": "^2.0.0", + "rollup-plugin-uglify": "^1.0.1", + "source-map-explorer": "^1.3.2", + "style-loader": "^0.13.1", + "ts-node": "^1.3.0", + "tslint": "^3.15.1", + "typescript": "~2.0.10", + "webpack": "2.2.0", + "webpack-dev-server": "2.2.0-rc.0", + "webpack-merge": "^2.4.0" + }, + "repository": {} +} diff --git a/aio/content/examples/pipes/e2e-spec.ts b/aio/content/examples/pipes/e2e-spec.ts new file mode 100644 index 0000000000..a2c4062dfd --- /dev/null +++ b/aio/content/examples/pipes/e2e-spec.ts @@ -0,0 +1,111 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by } from 'protractor'; + +describe('Pipes', function () { + + beforeAll(function () { + browser.get(''); + }); + + it('should open correctly', function () { + expect(element.all(by.tagName('h1')).get(0).getText()).toEqual('Pipes'); + expect(element(by.css('hero-birthday p')).getText()).toEqual(`The hero's birthday is Apr 15, 1988`); + }); + + it('should show 4 heroes', function () { + expect(element.all(by.css('hero-list div')).count()).toEqual(4); + }); + + it('should show a familiar hero in json', function () { + expect(element(by.cssContainingText('hero-list p', 'Heroes as JSON')).getText()).toContain('Bombasto'); + }); + + it('should show alternate birthday formats', function () { + expect(element(by.cssContainingText('my-app > p', `The hero's birthday is Apr 15, 1988`)).isDisplayed()).toBe(true); + expect(element(by.cssContainingText('my-app > p', `The hero's birthday is 04/15/88`)).isDisplayed()).toBe(true); + }); + + it('should be able to toggle birthday formats', function () { + let birthDayEle = element(by.css('hero-birthday2 > p')); + expect(birthDayEle.getText()).toEqual(`The hero's birthday is 4/15/1988`); + let buttonEle = element(by.cssContainingText('hero-birthday2 > button', 'Toggle Format')); + expect(buttonEle.isDisplayed()).toBe(true); + buttonEle.click().then(function() { + expect(birthDayEle.getText()).toEqual(`The hero's birthday is Friday, April 15, 1988`); + }); + }); + + it('should be able to chain and compose pipes', function () { + let chainedPipeEles = element.all(by.cssContainingText('my-app p', `The chained hero's`)); + expect(chainedPipeEles.count()).toBe(3, 'should have 3 chained pipe examples'); + expect(chainedPipeEles.get(0).getText()).toContain('APR 15, 1988'); + expect(chainedPipeEles.get(1).getText()).toContain('FRIDAY, APRIL 15, 1988'); + expect(chainedPipeEles.get(2).getText()).toContain('FRIDAY, APRIL 15, 1988'); + }); + + it('should be able to use ExponentialStrengthPipe pipe', function () { + let ele = element(by.css('power-booster p')); + expect(ele.getText()).toContain('Super power boost: 1024'); + }); + + it('should be able to use the exponential calculator', function () { + let eles = element.all(by.css('power-boost-calculator input')); + let baseInputEle = eles.get(0); + let factorInputEle = eles.get(1); + let outputEle = element(by.css('power-boost-calculator p')); + baseInputEle.clear().then(function() { + baseInputEle.sendKeys('7'); + return factorInputEle.clear(); + }).then(function() { + factorInputEle.sendKeys('3'); + expect(outputEle.getText()).toContain('343'); + }); + }); + + + xit('should support flying heroes (pure) ', function () { + let nameEle = element(by.css('flying-heroes input[type="text"]')); + let canFlyCheckEle = element(by.css('flying-heroes #can-fly')); + let mutateCheckEle = element(by.css('flying-heroes #mutate')); + let resetEle = element(by.css('flying-heroes button')); + let flyingHeroesEle = element.all(by.css('flying-heroes #flyers div')); + + expect(canFlyCheckEle.getAttribute('checked')).toEqual('true', 'should default to "can fly"'); + expect(mutateCheckEle.getAttribute('checked')).toEqual('true', 'should default to mutating array'); + expect(flyingHeroesEle.count()).toEqual(2, 'only two of the original heroes can fly'); + + nameEle.sendKeys('test1\n'); + expect(flyingHeroesEle.count()).toEqual(2, 'no change while mutating array'); + mutateCheckEle.click().then(function() { + nameEle.sendKeys('test2\n'); + expect(flyingHeroesEle.count()).toEqual(4, 'not mutating; should see both adds'); + expect(flyingHeroesEle.get(2).getText()).toContain('test1'); + expect(flyingHeroesEle.get(3).getText()).toContain('test2'); + return resetEle.click(); + }) + .then(function() { + expect(flyingHeroesEle.count()).toEqual(2, 'reset should restore orginal flying heroes'); + }); + }); + + + xit('should support flying heroes (impure) ', function () { + let nameEle = element(by.css('flying-heroes-impure input[type="text"]')); + let canFlyCheckEle = element(by.css('flying-heroes-impure #can-fly')); + let mutateCheckEle = element(by.css('flying-heroes-impure #mutate')); + let flyingHeroesEle = element.all(by.css('flying-heroes-impure #flyers div')); + + expect(canFlyCheckEle.getAttribute('checked')).toEqual('true', 'should default to "can fly"'); + expect(mutateCheckEle.getAttribute('checked')).toEqual('true', 'should default to mutating array'); + expect(flyingHeroesEle.count()).toEqual(2, 'only two of the original heroes can fly'); + + nameEle.sendKeys('test1\n'); + expect(flyingHeroesEle.count()).toEqual(3, 'new flying hero should show in mutating array'); + }); + + it('should show an async hero message', function () { + expect(element.all(by.tagName('hero-message')).get(0).getText()).toContain('hero'); + }); + +}); diff --git a/aio/content/examples/pipes/ts/example-config.json b/aio/content/examples/pipes/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/pipes/ts/plnkr.json b/aio/content/examples/pipes/ts/plnkr.json new file mode 100644 index 0000000000..3c07266109 --- /dev/null +++ b/aio/content/examples/pipes/ts/plnkr.json @@ -0,0 +1,8 @@ +{ + "description": "Pipes", + "basePath": "src/", + "files":[ + "!**/*.d.ts", + "!**/*.js"], + "tags": ["pipe"] +} diff --git a/aio/content/examples/pipes/ts/plnkr.no-link.html b/aio/content/examples/pipes/ts/plnkr.no-link.html new file mode 100644 index 0000000000..009b0e1944 --- /dev/null +++ b/aio/content/examples/pipes/ts/plnkr.no-link.html @@ -0,0 +1,663 @@ +

    \ No newline at end of file diff --git a/aio/content/examples/pipes/ts/src/app/app.component.html b/aio/content/examples/pipes/ts/src/app/app.component.html new file mode 100644 index 0000000000..a27d587fcd --- /dev/null +++ b/aio/content/examples/pipes/ts/src/app/app.component.html @@ -0,0 +1,83 @@ + +

    Pipes

    +Happy Birthday v1
    +Birthday DatePipe
    +Happy Birthday v2
    +Birthday Pipe Chaining
    +Power Booster custom pipe
    +Power Boost Calculator custom pipe with params
    +Flying Heroes filter pipe (pure)
    +Flying Heroes filter pipe (impure)
    +Async Hero Message and AsyncPipe
    +Hero List with caching FetchJsonPipe
    + + +
    + +

    Hero Birthday v1

    + + +
    + +

    Birthday DatePipe

    + +

    The hero's birthday is {{ birthday | date }}

    + + + +

    The hero's birthday is {{ birthday | date:"MM/dd/yy" }}

    + + +
    + +

    Hero Birthday v2

    + + +
    + +

    Birthday Pipe Chaining

    +

    + + The chained hero's birthday is + {{ birthday | date | uppercase}} + +

    + +

    + + The chained hero's birthday is + {{ birthday | date:'fullDate' | uppercase}} + +

    +

    + + The chained hero's birthday is + {{ ( birthday | date:'fullDate' ) | uppercase}} + +

    +
    + + + +
    + +loading + +
    + + + +
    + + + +
    + + + + +
    + + + +
    diff --git a/aio/content/examples/pipes/ts/src/app/app.component.ts b/aio/content/examples/pipes/ts/src/app/app.component.ts new file mode 100644 index 0000000000..d21801ddcf --- /dev/null +++ b/aio/content/examples/pipes/ts/src/app/app.component.ts @@ -0,0 +1,11 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + moduleId: module.id, + selector: 'my-app', + templateUrl: './app.component.html' +}) +export class AppComponent { + birthday = new Date(1988, 3, 15); // April 15, 1988 +} diff --git a/aio/content/examples/pipes/ts/src/app/app.module.ts b/aio/content/examples/pipes/ts/src/app/app.module.ts new file mode 100644 index 0000000000..89a3a29505 --- /dev/null +++ b/aio/content/examples/pipes/ts/src/app/app.module.ts @@ -0,0 +1,48 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { FormsModule } from '@angular/forms'; +import { HttpModule } from '@angular/http'; + +import { AppComponent } from './app.component'; +import { + FlyingHeroesComponent, + FlyingHeroesImpureComponent +} from './flying-heroes.component'; +import { HeroAsyncMessageComponent } from './hero-async-message.component'; +import { HeroBirthdayComponent } from './hero-birthday1.component'; +import { HeroBirthday2Component } from './hero-birthday2.component'; +import { HeroListComponent } from './hero-list.component'; +import { PowerBoosterComponent } from './power-booster.component'; +import { PowerBoostCalculatorComponent } from './power-boost-calculator.component'; +import { + FlyingHeroesPipe, + FlyingHeroesImpurePipe +} from './flying-heroes.pipe'; +import { FetchJsonPipe } from './fetch-json.pipe'; +import { ExponentialStrengthPipe } from './exponential-strength.pipe'; + +@NgModule({ + imports: [ + BrowserModule, + FormsModule, + HttpModule + ], + declarations: [ + AppComponent, + FlyingHeroesComponent, + FlyingHeroesImpureComponent, + HeroAsyncMessageComponent, + HeroBirthdayComponent, + HeroBirthday2Component, + HeroListComponent, + PowerBoosterComponent, + PowerBoostCalculatorComponent, + FlyingHeroesPipe, + FlyingHeroesImpurePipe, + FetchJsonPipe, + ExponentialStrengthPipe + ], + bootstrap: [ AppComponent ] +}) +export class AppModule { } diff --git a/aio/content/examples/pipes/ts/src/app/exponential-strength.pipe.ts b/aio/content/examples/pipes/ts/src/app/exponential-strength.pipe.ts new file mode 100644 index 0000000000..0a703d7016 --- /dev/null +++ b/aio/content/examples/pipes/ts/src/app/exponential-strength.pipe.ts @@ -0,0 +1,18 @@ +// #docregion +import { Pipe, PipeTransform } from '@angular/core'; +/* + * Raise the value exponentially + * Takes an exponent argument that defaults to 1. + * Usage: + * value | exponentialStrength:exponent + * Example: + * {{ 2 | exponentialStrength:10}} + * formats to: 1024 +*/ +@Pipe({name: 'exponentialStrength'}) +export class ExponentialStrengthPipe implements PipeTransform { + transform(value: number, exponent: string): number { + let exp = parseFloat(exponent); + return Math.pow(value, isNaN(exp) ? 1 : exp); + } +} diff --git a/aio/content/examples/pipes/ts/src/app/fetch-json.pipe.ts b/aio/content/examples/pipes/ts/src/app/fetch-json.pipe.ts new file mode 100644 index 0000000000..4d56e865f3 --- /dev/null +++ b/aio/content/examples/pipes/ts/src/app/fetch-json.pipe.ts @@ -0,0 +1,30 @@ +// #docregion +import { Pipe, PipeTransform } from '@angular/core'; +import { Http } from '@angular/http'; + +import 'rxjs/add/operator/map'; + +// #docregion pipe-metadata +@Pipe({ + name: 'fetch', + pure: false +}) +// #enddocregion pipe-metadata +export class FetchJsonPipe implements PipeTransform { + private cachedData: any = null; + private cachedUrl = ''; + + constructor(private http: Http) { } + + transform(url: string): any { + if (url !== this.cachedUrl) { + this.cachedData = null; + this.cachedUrl = url; + this.http.get(url) + .map( result => result.json() ) + .subscribe( result => this.cachedData = result ); + } + + return this.cachedData; + } +} diff --git a/aio/content/examples/pipes/ts/src/app/flying-heroes-impure.component.html b/aio/content/examples/pipes/ts/src/app/flying-heroes-impure.component.html new file mode 100644 index 0000000000..66bd86f81c --- /dev/null +++ b/aio/content/examples/pipes/ts/src/app/flying-heroes-impure.component.html @@ -0,0 +1,38 @@ + + +

    {{title}}

    +

    + +New hero: + + + can fly +

    +

    + Mutate array + + + +

    + +

    Heroes who fly (piped)

    +
    + +
    + {{hero.name}} +
    + +
    + +

    All Heroes (no pipe)

    +
    + + +
    + {{hero.name}} +
    + + +
    diff --git a/aio/content/examples/pipes/ts/src/app/flying-heroes.component.html b/aio/content/examples/pipes/ts/src/app/flying-heroes.component.html new file mode 100644 index 0000000000..93e635b662 --- /dev/null +++ b/aio/content/examples/pipes/ts/src/app/flying-heroes.component.html @@ -0,0 +1,38 @@ + + +

    {{title}}

    +

    + +New hero: + + + can fly +

    +

    + Mutate array + + + +

    + +

    Heroes who fly (piped)

    +
    + +
    + {{hero.name}} +
    + +
    + +

    All Heroes (no pipe)

    +
    + + +
    + {{hero.name}} +
    + + +
    diff --git a/aio/content/examples/pipes/ts/src/app/flying-heroes.component.ts b/aio/content/examples/pipes/ts/src/app/flying-heroes.component.ts new file mode 100644 index 0000000000..295620310b --- /dev/null +++ b/aio/content/examples/pipes/ts/src/app/flying-heroes.component.ts @@ -0,0 +1,63 @@ +// #docplaster +// #docregion +import { Component } from '@angular/core'; + +import { HEROES } from './heroes'; + +@Component({ + moduleId: module.id, + selector: 'flying-heroes', + templateUrl: './flying-heroes.component.html', + styles: ['#flyers, #all {font-style: italic}'] +}) +// #docregion v1 +export class FlyingHeroesComponent { + heroes: any[] = []; + canFly = true; +// #enddocregion v1 + mutate = true; + title = 'Flying Heroes (pure pipe)'; + +// #docregion v1 + constructor() { this.reset(); } + + addHero(name: string) { + name = name.trim(); + if (!name) { return; } + let hero = {name, canFly: this.canFly}; +// #enddocregion v1 + if (this.mutate) { + // Pure pipe won't update display because heroes array reference is unchanged + // Impure pipe will display +// #docregion v1 +// #docregion push + this.heroes.push(hero); +// #enddocregion push +// #enddocregion v1 + } else { + // Pipe updates display because heroes array is a new object +// #docregion concat + this.heroes = this.heroes.concat(hero); +// #enddocregion concat + } +// #docregion v1 + } + + reset() { this.heroes = HEROES.slice(); } +} +// #enddocregion v1 + +////// Identical except for impure pipe ////// +// #docregion impure-component +@Component({ + moduleId: module.id, + selector: 'flying-heroes-impure', + templateUrl: './flying-heroes-impure.component.html', +// #enddocregion impure-component + styles: ['.flyers, .all {font-style: italic}'], +// #docregion impure-component +}) +export class FlyingHeroesImpureComponent extends FlyingHeroesComponent { + title = 'Flying Heroes (impure pipe)'; +} +// #enddocregion impure-component diff --git a/aio/content/examples/pipes/ts/src/app/flying-heroes.pipe.ts b/aio/content/examples/pipes/ts/src/app/flying-heroes.pipe.ts new file mode 100644 index 0000000000..87db9c277e --- /dev/null +++ b/aio/content/examples/pipes/ts/src/app/flying-heroes.pipe.ts @@ -0,0 +1,27 @@ +/* tslint:disable use-pipe-transform-interface */ +// #docregion +// #docregion pure +import { Pipe, PipeTransform } from '@angular/core'; + +import { Flyer } from './heroes'; + +@Pipe({ name: 'flyingHeroes' }) +export class FlyingHeroesPipe implements PipeTransform { + transform(allHeroes: Flyer[]) { + // #docregion filter + return allHeroes.filter(hero => hero.canFly); + // #enddocregion filter + } +} +// #enddocregion pure + +/////// Identical except for the pure flag +// #docregion impure +// #docregion pipe-decorator +@Pipe({ + name: 'flyingHeroesImpure', + pure: false +}) +// #enddocregion pipe-decorator +export class FlyingHeroesImpurePipe extends FlyingHeroesPipe {} +// #enddocregion impure diff --git a/aio/content/examples/pipes/ts/src/app/hero-async-message.component.ts b/aio/content/examples/pipes/ts/src/app/hero-async-message.component.ts new file mode 100644 index 0000000000..d5bbd9fb0e --- /dev/null +++ b/aio/content/examples/pipes/ts/src/app/hero-async-message.component.ts @@ -0,0 +1,38 @@ +// #docregion +import { Component } from '@angular/core'; + +import { Observable } from 'rxjs/Observable'; +import 'rxjs/add/observable/interval'; +import 'rxjs/add/operator/map'; +import 'rxjs/add/operator/take'; + +@Component({ + selector: 'hero-message', + template: ` +

    Async Hero Message and AsyncPipe

    +

    Message: {{ message$ | async }}

    + `, +}) +export class HeroAsyncMessageComponent { + message$: Observable; + + private messages = [ + 'You are my hero!', + 'You are the best hero!', + 'Will you be my hero?' + ]; + + constructor() { this.resend(); } + + resend() { + this.message$ = Observable.interval(500) + .map(i => this.messages[i]) + .take(this.messages.length); + } +} +// #enddocregion + +// Alternative message$ formula: +// this.message$ = Observable.fromArray(this.messages) +// .map(message => Observable.timer(500).map(() => message)) +// .concatAll(); diff --git a/aio/content/examples/pipes/ts/src/app/hero-birthday1.component.ts b/aio/content/examples/pipes/ts/src/app/hero-birthday1.component.ts new file mode 100644 index 0000000000..a670a807a8 --- /dev/null +++ b/aio/content/examples/pipes/ts/src/app/hero-birthday1.component.ts @@ -0,0 +1,12 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'hero-birthday', + // #docregion hero-birthday-template + template: `

    The hero's birthday is {{ birthday | date }}

    ` + // #enddocregion hero-birthday-template +}) +export class HeroBirthdayComponent { + birthday = new Date(1988, 3, 15); // April 15, 1988 +} diff --git a/aio/content/examples/pipes/ts/src/app/hero-birthday2.component.ts b/aio/content/examples/pipes/ts/src/app/hero-birthday2.component.ts new file mode 100644 index 0000000000..87481aa121 --- /dev/null +++ b/aio/content/examples/pipes/ts/src/app/hero-birthday2.component.ts @@ -0,0 +1,20 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'hero-birthday2', + // #docregion template + template: ` +

    The hero's birthday is {{ birthday | date:format }}

    + + ` + // #enddocregion template +}) +// #docregion class +export class HeroBirthday2Component { + birthday = new Date(1988, 3, 15); // April 15, 1988 + toggle = true; // start with true == shortDate + + get format() { return this.toggle ? 'shortDate' : 'fullDate'; } + toggleFormat() { this.toggle = !this.toggle; } +} diff --git a/aio/content/examples/pipes/ts/src/app/hero-list.component.ts b/aio/content/examples/pipes/ts/src/app/hero-list.component.ts new file mode 100644 index 0000000000..df231120ce --- /dev/null +++ b/aio/content/examples/pipes/ts/src/app/hero-list.component.ts @@ -0,0 +1,17 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'hero-list', + template: ` +

    Heroes from JSON File

    + +
    + {{hero.name}} +
    + +

    Heroes as JSON: + {{'heroes.json' | fetch | json}} +

    ` +}) +export class HeroListComponent { } diff --git a/aio/content/examples/pipes/ts/src/app/heroes.ts b/aio/content/examples/pipes/ts/src/app/heroes.ts new file mode 100644 index 0000000000..b2edabe0da --- /dev/null +++ b/aio/content/examples/pipes/ts/src/app/heroes.ts @@ -0,0 +1,7 @@ +export interface Flyer { canFly: boolean; } +export const HEROES = [ + {name: 'Windstorm', canFly: true}, + {name: 'Bombasto', canFly: false}, + {name: 'Magneto', canFly: false}, + {name: 'Tornado', canFly: true} +]; diff --git a/aio/content/examples/pipes/ts/src/app/power-boost-calculator.component.ts b/aio/content/examples/pipes/ts/src/app/power-boost-calculator.component.ts new file mode 100644 index 0000000000..e65e29ad4c --- /dev/null +++ b/aio/content/examples/pipes/ts/src/app/power-boost-calculator.component.ts @@ -0,0 +1,18 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'power-boost-calculator', + template: ` +

    Power Boost Calculator

    +
    Normal power:
    +
    Boost factor:
    +

    + Super Hero Power: {{power | exponentialStrength: factor}} +

    + ` +}) +export class PowerBoostCalculatorComponent { + power = 5; + factor = 1; +} diff --git a/aio/content/examples/pipes/ts/src/app/power-booster.component.ts b/aio/content/examples/pipes/ts/src/app/power-booster.component.ts new file mode 100644 index 0000000000..08e3e24c7b --- /dev/null +++ b/aio/content/examples/pipes/ts/src/app/power-booster.component.ts @@ -0,0 +1,11 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'power-booster', + template: ` +

    Power Booster

    +

    Super power boost: {{2 | exponentialStrength: 10}}

    + ` +}) +export class PowerBoosterComponent { } diff --git a/aio/content/examples/pipes/ts/src/heroes.json b/aio/content/examples/pipes/ts/src/heroes.json new file mode 100644 index 0000000000..e5f0b77262 --- /dev/null +++ b/aio/content/examples/pipes/ts/src/heroes.json @@ -0,0 +1,6 @@ +[ + {"name": "Windstorm", "canFly": true}, + {"name": "Bombasto", "canFly": false}, + {"name": "Magneto", "canFly": false}, + {"name": "Tornado", "canFly": true} +] diff --git a/aio/content/examples/pipes/ts/src/index.html b/aio/content/examples/pipes/ts/src/index.html new file mode 100644 index 0000000000..fedb5c2e5e --- /dev/null +++ b/aio/content/examples/pipes/ts/src/index.html @@ -0,0 +1,26 @@ + + + + Pipes + + + + + + + + + + + + + + + + + my-app loading ... + + + diff --git a/aio/content/examples/pipes/ts/src/main.ts b/aio/content/examples/pipes/ts/src/main.ts new file mode 100644 index 0000000000..6b6532d428 --- /dev/null +++ b/aio/content/examples/pipes/ts/src/main.ts @@ -0,0 +1,5 @@ +// #docregion +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/protractor-helpers.ts b/aio/content/examples/protractor-helpers.ts new file mode 100644 index 0000000000..61af74ba30 --- /dev/null +++ b/aio/content/examples/protractor-helpers.ts @@ -0,0 +1,35 @@ +import { browser } from 'protractor'; + +export var appLang = { + appIsTs: false, + appIsJs: false, + appIsDart: false, + appIsUnknown: false +}; + +export function describeIf(cond: boolean, name: string, func: () => void): void { + if (cond) { + describe(name, func); + } else { + xdescribe(name, func); + } +} + +export function itIf(cond: boolean, name: string, func: (done: DoneFn) => void): void { + if (cond) { + it(name, func); + } else { + xit(name, func); + } +} + +// protractor.config.js is set to ng2 mode by default, so we must manually +// change it for upgradeAdapter tests +export function setProtractorToNg1Mode(): void { + browser.rootEl = 'body'; +} + +export function setProtractorToHybridMode() { + setProtractorToNg1Mode(); + browser.ng12Hybrid = true; +} diff --git a/aio/content/examples/protractor.config.js b/aio/content/examples/protractor.config.js new file mode 100644 index 0000000000..92b5e1fda5 --- /dev/null +++ b/aio/content/examples/protractor.config.js @@ -0,0 +1,175 @@ +// FIRST TIME ONLY- run: +// ./node_modules/.bin/webdriver-manager update +// +// Try: `npm run webdriver:update` +// +// AND THEN EVERYTIME ... +// 1. Compile with `tsc` +// 2. Make sure the test server (e.g., http-server: localhost:8080) is running. +// 3. ./node_modules/.bin/protractor protractor.config.js +// +// To do all steps, try: `npm run e2e` + +var fs = require('fs'); +var path = require('canonical-path'); +var _ = require('lodash'); + + +exports.config = { + directConnect: true, + + // Capabilities to be passed to the webdriver instance. + capabilities: { + 'browserName': 'chrome' + }, + + // Framework to use. Jasmine is recommended. + framework: 'jasmine', + + // For angular tests + useAllAngular2AppRoots: true, + + // Base URL for application server + baseUrl: 'http://localhost:8080', + + // doesn't seem to work. + // resultJsonOutputFile: "foo.json", + + onPrepare: function() { + //// SpecReporter + //var SpecReporter = require('jasmine-spec-reporter'); + //jasmine.getEnv().addReporter(new SpecReporter({displayStacktrace: 'none'})); + //// jasmine.getEnv().addReporter(new SpecReporter({displayStacktrace: 'all'})); + + // debugging + // console.log('browser.params:' + JSON.stringify(browser.params)); + var protractorHelpers = require('./protractor-helpers.ts'); + + var appDir = browser.params.appDir; + if (appDir) { + if (appDir.match('/ts') != null) { + protractorHelpers.appLang.appIsTs = true; + } else if (appDir.match('/js') != null) { + protractorHelpers.appLang.appIsJs = true; + } else if (appDir.match('/dart') != null) { + protractorHelpers.appLang.appIsDart = true; + } else { + protractorHelpers.appLang.appIsUnknown = true; + } + } else { + protractorHelpers.appLang.appIsUnknown = true; + } + jasmine.getEnv().addReporter(new Reporter( browser.params )); + }, + + jasmineNodeOpts: { + // defaultTimeoutInterval: 60000, + defaultTimeoutInterval: 10000, + showTiming: true, + print: function() {} + }, + + beforeLaunch: function() { + // add TS support for specs + require('ts-node').register({ + project: './tsconfig.json' + }); + } +}; + +// See http://jasmine.github.io/2.1/custom_reporter.html +function Reporter(options) { + var _defaultOutputFile = path.resolve(process.cwd(), "../../../", 'protractor-results.txt'); + options.outputFile = options.outputFile || _defaultOutputFile; + + var _root = { appDir: options.appDir, suites: [] }; + log('AppDir: ' + options.appDir, +1); + var _currentSuite; + + this.suiteStarted = function(suite) { + _currentSuite = { description: suite.description, status: null, specs: [] }; + _root.suites.push(_currentSuite); + log('Suite: ' + suite.description, +1); + }; + + this.suiteDone = function(suite) { + var statuses = _currentSuite.specs.map(function(spec) { + return spec.status; + }); + statuses = _.uniq(statuses); + var status = statuses.indexOf('failed') >= 0 ? 'failed' : statuses.join(', '); + _currentSuite.status = status; + log('Suite ' + _currentSuite.status + ': ' + suite.description, -1); + }; + + this.specStarted = function(spec) { + + }; + + this.specDone = function(spec) { + var currentSpec = { + description: spec.description, + status: spec.status + }; + if (spec.failedExpectations.length > 0) { + currentSpec.failedExpectations = spec.failedExpectations; + } + + _currentSuite.specs.push(currentSpec); + log(spec.status + ' - ' + spec.description); + if (spec.status === 'failed') { + spec.failedExpectations.forEach(function(err) { + log(err.message); + }); + } + }; + + this.jasmineDone = function() { + outputFile = options.outputFile; + //// Alternate approach - just stringify the _root - not as pretty + //// but might be more useful for automation. + // var output = JSON.stringify(_root, null, 2); + var output = formatOutput(_root); + fs.appendFileSync(outputFile, output); + }; + + // for output file output + function formatOutput(output) { + var indent = ' '; + var pad = ' '; + var results = []; + results.push('AppDir:' + output.appDir); + output.suites.forEach(function(suite) { + results.push(pad + 'Suite: ' + suite.description + ' -- ' + suite.status); + pad+=indent; + suite.specs.forEach(function(spec) { + results.push(pad + spec.status + ' - ' + spec.description); + if (spec.failedExpectations) { + pad+=indent; + spec.failedExpectations.forEach(function (fe) { + results.push(pad + 'message: ' + fe.message); + }); + pad=pad.substr(2); + } + }); + pad = pad.substr(2); + results.push(''); + }); + results.push(''); + return results.join('\n'); + } + + // for console output + var _pad; + function log(str, indent) { + _pad = _pad || ''; + if (indent == -1) { + _pad = _pad.substr(2); + } + console.log(_pad + str); + if (indent == 1) { + _pad = _pad + ' '; + } + } + +} diff --git a/aio/content/examples/quickstart/e2e-spec.ts b/aio/content/examples/quickstart/e2e-spec.ts new file mode 100644 index 0000000000..73921707ee --- /dev/null +++ b/aio/content/examples/quickstart/e2e-spec.ts @@ -0,0 +1,17 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by } from 'protractor'; + +describe('QuickStart E2E Tests', function () { + + let expectedMsg = 'Hello Angular'; + + beforeEach(function () { + browser.get(''); + }); + + it(`should display: ${expectedMsg}`, function () { + expect(element(by.css('h1')).getText()).toEqual(expectedMsg); + }); + +}); diff --git a/aio/content/examples/quickstart/js/bs-config.1.json b/aio/content/examples/quickstart/js/bs-config.1.json new file mode 100644 index 0000000000..4e58595267 --- /dev/null +++ b/aio/content/examples/quickstart/js/bs-config.1.json @@ -0,0 +1,8 @@ +{ + "server": { + "baseDir": "src", + "routes": { + "/node_modules": "node_modules" + } + } +} diff --git a/aio/content/examples/quickstart/js/example-config.json b/aio/content/examples/quickstart/js/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/quickstart/js/package.1.json b/aio/content/examples/quickstart/js/package.1.json new file mode 100644 index 0000000000..541a11373a --- /dev/null +++ b/aio/content/examples/quickstart/js/package.1.json @@ -0,0 +1,29 @@ +{ + "name": "angular-quickstart", + "version": "1.0.0", + "scripts": { + "start": "npm run lite", + "lite": "lite-server" + }, + "license": "MIT", + "dependencies": { + "@angular/common": "~2.4.0", + "@angular/compiler": "~2.4.0", + "@angular/core": "~2.4.0", + "@angular/forms": "~2.4.0", + "@angular/http": "~2.4.0", + "@angular/platform-browser": "~2.4.0", + "@angular/platform-browser-dynamic": "~2.4.0", + "@angular/router": "~3.4.0", + "@angular/upgrade": "~2.4.0", + + "angular-in-memory-web-api": "~0.2.4", + "core-js": "^2.4.1", + "rxjs": "5.0.1", + "zone.js": "^0.7.4" + }, + "devDependencies": { + "concurrently": "^3.0.0", + "lite-server": "^2.2.2" + } +} diff --git a/aio/content/examples/quickstart/js/plnkr.json b/aio/content/examples/quickstart/js/plnkr.json new file mode 100644 index 0000000000..5e24ad9790 --- /dev/null +++ b/aio/content/examples/quickstart/js/plnkr.json @@ -0,0 +1,8 @@ +{ + "description": "QuickStart", + "basePath": "src/", + "files": [ + "!**/*.[1].*" + ], + "tags": ["quickstart"] +} diff --git a/aio/content/examples/quickstart/js/plnkr.no-link.html b/aio/content/examples/quickstart/js/plnkr.no-link.html new file mode 100644 index 0000000000..152dbf3f07 --- /dev/null +++ b/aio/content/examples/quickstart/js/plnkr.no-link.html @@ -0,0 +1,204 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/quickstart/js/src/app/app.component.js b/aio/content/examples/quickstart/js/src/app/app.component.js new file mode 100644 index 0000000000..26ba116efe --- /dev/null +++ b/aio/content/examples/quickstart/js/src/app/app.component.js @@ -0,0 +1,27 @@ +// #docplaster +// #docregion +// #docregion iife +(function(app) { + // #enddocregion iife + // #docregion ng-namespace-funcs, export + app.AppComponent = + // #enddocregion export + // #docregion component + ng.core.Component({ + // #enddocregion ng-namespace-funcs + selector: 'my-app', + template: '

    Hello Angular

    ' + // #docregion ng-namespace-funcs + }) + // #enddocregion component + // #docregion class + .Class({ + // #enddocregion ng-namespace-funcs + constructor: function() {} + // #docregion ng-namespace-funcs + }); + // #enddocregion class + // #enddocregion ng-namespace-funcs +// #docregion iife +})(window.app || (window.app = {})); +// #enddocregion iife diff --git a/aio/content/examples/quickstart/js/src/app/app.module.js b/aio/content/examples/quickstart/js/src/app/app.module.js new file mode 100644 index 0000000000..0f3d5f82cf --- /dev/null +++ b/aio/content/examples/quickstart/js/src/app/app.module.js @@ -0,0 +1,15 @@ +// #docplaster +// #docregion +(function(app) { + app.AppModule = + ng.core.NgModule({ + imports: [ ng.platformBrowser.BrowserModule ], + // #docregion import + declarations: [ app.AppComponent ], + // #enddocregion import + bootstrap: [ app.AppComponent ] + }) + .Class({ + constructor: function() {} + }); +})(window.app || (window.app = {})); diff --git a/aio/content/examples/quickstart/js/src/index.html b/aio/content/examples/quickstart/js/src/index.html new file mode 100644 index 0000000000..43d63e9c83 --- /dev/null +++ b/aio/content/examples/quickstart/js/src/index.html @@ -0,0 +1,42 @@ + + + + + Angular QuickStart JS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Loading... + + + + diff --git a/aio/content/examples/quickstart/js/src/main.js b/aio/content/examples/quickstart/js/src/main.js new file mode 100644 index 0000000000..785823fa84 --- /dev/null +++ b/aio/content/examples/quickstart/js/src/main.js @@ -0,0 +1,8 @@ +// #docregion +(function(app) { + document.addEventListener('DOMContentLoaded', function() { + ng.platformBrowserDynamic + .platformBrowserDynamic() + .bootstrapModule(app.AppModule); + }); +})(window.app || (window.app = {})); diff --git a/aio/content/examples/quickstart/js/src/styles.1.css b/aio/content/examples/quickstart/js/src/styles.1.css new file mode 100644 index 0000000000..fbc30e2c9e --- /dev/null +++ b/aio/content/examples/quickstart/js/src/styles.1.css @@ -0,0 +1,14 @@ +/* #docregion */ +h1 { + color: #369; + font-family: Arial, Helvetica, sans-serif; + font-size: 250%; +} +body { + margin: 2em; +} + + /* + * See https://github.com/angular/angular.io/blob/master/public/docs/_examples/styles.css + * for the full set of master styles used by the documentation samples + */ diff --git a/aio/content/examples/quickstart/ts/bs-config.1.json b/aio/content/examples/quickstart/ts/bs-config.1.json new file mode 100644 index 0000000000..4e58595267 --- /dev/null +++ b/aio/content/examples/quickstart/ts/bs-config.1.json @@ -0,0 +1,8 @@ +{ + "server": { + "baseDir": "src", + "routes": { + "/node_modules": "node_modules" + } + } +} diff --git a/aio/content/examples/quickstart/ts/example-config.json b/aio/content/examples/quickstart/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/quickstart/ts/plnkr.json b/aio/content/examples/quickstart/ts/plnkr.json new file mode 100644 index 0000000000..8edf7c25ea --- /dev/null +++ b/aio/content/examples/quickstart/ts/plnkr.json @@ -0,0 +1,12 @@ +{ + "description": "QuickStart", + "basePath": "src/", + "files": [ + "app/app.component.ts", + "app/app.module.ts", + "main.ts", + "index.html" + ], + "open": "app/app.component.ts", + "tags": ["quickstart"] +} diff --git a/aio/content/examples/quickstart/ts/plnkr.no-link.html b/aio/content/examples/quickstart/ts/plnkr.no-link.html new file mode 100644 index 0000000000..63a97cf8d8 --- /dev/null +++ b/aio/content/examples/quickstart/ts/plnkr.no-link.html @@ -0,0 +1,74 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/quickstart/ts/src/app/app.component.ts b/aio/content/examples/quickstart/ts/src/app/app.component.ts new file mode 100644 index 0000000000..1ef28fc5c4 --- /dev/null +++ b/aio/content/examples/quickstart/ts/src/app/app.component.ts @@ -0,0 +1,8 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'my-app', + template: `

    Hello {{name}}

    ` +}) +export class AppComponent { name = 'Angular'; } diff --git a/aio/content/examples/quickstart/ts/src/app/app.module.ts b/aio/content/examples/quickstart/ts/src/app/app.module.ts new file mode 100644 index 0000000000..50a0e6eb47 --- /dev/null +++ b/aio/content/examples/quickstart/ts/src/app/app.module.ts @@ -0,0 +1,11 @@ +// #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/aio/content/examples/quickstart/ts/src/index.html b/aio/content/examples/quickstart/ts/src/index.html new file mode 100644 index 0000000000..21fb56edb9 --- /dev/null +++ b/aio/content/examples/quickstart/ts/src/index.html @@ -0,0 +1,31 @@ + + + + Angular Quickstart + + + + + + + + + + + + + + + + + + + Loading AppComponent content here ... + + + + diff --git a/aio/content/examples/quickstart/ts/src/main.ts b/aio/content/examples/quickstart/ts/src/main.ts new file mode 100644 index 0000000000..311c44b76d --- /dev/null +++ b/aio/content/examples/quickstart/ts/src/main.ts @@ -0,0 +1,5 @@ +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/quickstart/ts/src/tsconfig.1.json b/aio/content/examples/quickstart/ts/src/tsconfig.1.json new file mode 100644 index 0000000000..2c7260d1bc --- /dev/null +++ b/aio/content/examples/quickstart/ts/src/tsconfig.1.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "target": "es5", + "module": "commonjs", + "moduleResolution": "node", + "sourceMap": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "lib": [ "es2015", "dom" ], + "noImplicitAny": true, + "suppressImplicitAnyIndexErrors": true + } +} diff --git a/aio/content/examples/reactive-forms/e2e-spec.ts b/aio/content/examples/reactive-forms/e2e-spec.ts new file mode 100644 index 0000000000..bb788397ef --- /dev/null +++ b/aio/content/examples/reactive-forms/e2e-spec.ts @@ -0,0 +1,1020 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by } from 'protractor'; + +function finalDemoAddressForm(element: any, index: number) { + let form = { + street: element.all(by.css('input[formcontrolname=street]')).get(index).getAttribute('value'), + city: element.all(by.css('input[formcontrolname=city]')).get(index).getAttribute('value'), + state: element.all(by.css('select[formcontrolname=state]')).get(index).getAttribute('value'), + zip: element.all(by.css('input[formcontrolname=zip]')).get(index).getAttribute('value') + }; + return form; +} + +describe('Reactive forms', function() { + let select: any; + + beforeEach(function() { + browser.get(''); + select = element(by.css('.container > h4 > select')); + }); + + describe('navigation', function() { + it('should display the title', function() { + let title = element(by.css('.container > h1')); + expect(title.getText()).toBe('Reactive Forms'); + }); + + it('should contain a dropdown with each example', function() { + expect(select.isDisplayed()).toBe(true); + }); + + it('should have 9 options for different demos', function() { + let options = select.all(by.tagName('option')); + expect(options.count()).toBe(9); + }); + + it('should start with Final Demo', function() { + select.getAttribute('value').then(function(demo: string) { + expect(demo).toBe('Final Demo'); + }); + }); + }); + +// *************Begin Final Demo test******************************* + + describe('final demo', function() { + it('does not select any hero by default', function() { + let heroSection = element(by.css('hero-list > div')); + expect(heroSection.isPresent()).toBe(false); + }); + + it('refreshes the page upon button click', function() { + // We move to another page... + let whirlwindButton = element.all(by.css('nav a')).get(0); + whirlwindButton.click(); + let refresh = element(by.css('button')); + refresh.click(); + let heroSection = element(by.css('hero-list > div')); + expect(heroSection.isPresent()).toBe(false); + }); + + describe('Whirlwind form', function() { + beforeEach(function() { + let whirlwindButton = element.all(by.css('nav a')).get(0); + whirlwindButton.click(); + }); + + it('should show a hero information when the button is clicked', function() { + let editMessage = element(by.css('hero-list > div > h3')); + expect(editMessage.getText()).toBe('Editing: Whirlwind'); + }); + + it('should show a form with the selected hero information', function() { + let nameInput = element(by.css('input[formcontrolname=name]')); + expect(nameInput.getAttribute('value')).toBe('Whirlwind'); + let address1 = finalDemoAddressForm(element, 0); + expect(address1.street).toBe('123 Main'); + expect(address1.state).toBe('CA'); + expect(address1.zip).toBe('94801'); + expect(address1.city).toBe('Anywhere'); + let address2 = finalDemoAddressForm(element, 1); + expect(address2.street).toBe('456 Maple'); + expect(address2.state).toBe('VA'); + expect(address2.zip).toBe('23226'); + expect(address2.city).toBe('Somewhere'); + }); + + it('shows a json output from the form', function() { + let json = element(by.css('hero-detail > p')); + expect(json.getText()).toContain('Whirlwind'); + expect(json.getText()).toContain('Anywhere'); + expect(json.getText()).toContain('Somewhere'); + expect(json.getText()).toContain('VA'); + }); + + it('has two disabled buttons by default', function() { + let buttons = element.all(by.css('hero-detail > form > div > button')); + expect(buttons.get(0).getAttribute('disabled')).toBe('true'); + expect(buttons.get(1).getAttribute('disabled')).toBe('true'); + }); + + it('enables the buttons after we edit the form', function() { + let nameInput = element(by.css('input[formcontrolname=name]')); + nameInput.sendKeys('a'); + let buttons = element.all(by.css('hero-detail > form > div > button')); + expect(buttons.get(0).getAttribute('disabled')).toBeNull(); + expect(buttons.get(1).getAttribute('disabled')).toBeNull(); + }); + + it('saves the changes when the save button is clicked', function() { + let nameInput = element(by.css('input[formcontrolname=name]')); + nameInput.sendKeys('a'); + let save = element.all(by.css('hero-detail > form > div > button')).get(0); + save.click(); + let editMessage = element(by.css('hero-list > div > h3')); + expect(editMessage.getText()).toBe('Editing: Whirlwinda'); + }); + + it('reverts the changes when the revert button is clicked', function() { + let nameInput = element(by.css('input[formcontrolname=name]')); + nameInput.sendKeys('a'); + let revert = element.all(by.css('hero-detail > form > div > button')).get(1); + revert.click(); + let editMessage = element(by.css('hero-list > div > h3')); + expect(editMessage.getText()).toBe('Editing: Whirlwind'); + expect(nameInput.getAttribute('value')).toBe('Whirlwind'); + }); + + it('is able to add a new empty address', function() { + let newLairButton = element.all(by.css('button')).get(3); + newLairButton.click(); + let address3 = finalDemoAddressForm(element, 2); + expect(address3.street).toBe(''); + expect(address3.state).toBe(''); + expect(address3.zip).toBe(''); + expect(address3.city).toBe(''); + }); + + it('should show three radio buttons', function() { + let radioButtons = element.all(by.css('input[formcontrolname=power]')); + expect(radioButtons.get(0).getAttribute('value')).toBe('flight'); + expect(radioButtons.get(1).getAttribute('value')).toBe('x-ray vision'); + expect(radioButtons.get(2).getAttribute('value')).toBe('strength'); + }); + + it('should show a checkbox', function() { + let checkbox = element(by.css('input[formcontrolname=sidekick]')); + expect(checkbox.getAttribute('checked')).toBe(null); + }); + }); + + describe('Bombastic form', function() { + beforeEach(function() { + let bombastaButton = element.all(by.css('nav a')).get(1); + bombastaButton.click(); + }); + + it('should show a hero information when the button is clicked', function() { + let editMessage = element(by.css('hero-list > div > h3')); + expect(editMessage.getText()).toBe('Editing: Bombastic'); + }); + + it('should show a form with the selected hero information', function() { + let nameInput = element(by.css('input[formcontrolname=name]')); + expect(nameInput.getAttribute('value')).toBe('Bombastic'); + let address1 = finalDemoAddressForm(element, 0); + expect(address1.street).toBe('789 Elm'); + // expect(address1.state).toBe('OH'); + expect(address1.zip).toBe('04501'); + expect(address1.city).toBe('Smallville'); + }); + + it('shows a json output from the form', function() { + let json = element(by.css('hero-detail > p')); + expect(json.getText()).toContain('Bombastic'); + expect(json.getText()).toContain('Smallville'); + expect(json.getText()).toContain('OH'); + expect(json.getText()).toContain('04501'); + }); + + it('has two disabled buttons by default', function() { + let buttons = element.all(by.css('hero-detail > form > div > button')); + expect(buttons.get(0).getAttribute('disabled')).toBe('true'); + expect(buttons.get(1).getAttribute('disabled')).toBe('true'); + }); + + it('enables the buttons after we edit the form', function() { + let nameInput = element(by.css('input[formcontrolname=name]')); + nameInput.sendKeys('a'); + let buttons = element.all(by.css('hero-detail > form > div > button')); + expect(buttons.get(0).getAttribute('disabled')).toBeNull(); + expect(buttons.get(1).getAttribute('disabled')).toBeNull(); + }); + + it('saves the changes when the save button is clicked', function() { + let nameInput = element(by.css('input[formcontrolname=name]')); + nameInput.sendKeys('a'); + let save = element.all(by.css('hero-detail > form > div > button')).get(0); + save.click(); + let editMessage = element(by.css('hero-list > div > h3')); + expect(editMessage.getText()).toBe('Editing: Bombastica'); + }); + + it('reverts the changes when the revert button is clicked', function() { + let nameInput = element(by.css('input[formcontrolname=name]')); + nameInput.sendKeys('a'); + let revert = element.all(by.css('hero-detail > form > div > button')).get(1); + revert.click(); + let editMessage = element(by.css('hero-list > div > h3')); + expect(editMessage.getText()).toBe('Editing: Bombastic'); + expect(nameInput.getAttribute('value')).toBe('Bombastic'); + }); + + it('is able to add a new empty address', function() { + let newLairButton = element.all(by.css('button')).get(3); + newLairButton.click(); + let address2 = finalDemoAddressForm(element, 1); + expect(address2.street).toBe(''); + expect(address2.state).toBe(''); + expect(address2.zip).toBe(''); + expect(address2.city).toBe(''); + }); + + it('should show three radio buttons', function() { + let radioButtons = element.all(by.css('input[formcontrolname=power]')); + expect(radioButtons.get(0).getAttribute('value')).toBe('flight'); + expect(radioButtons.get(1).getAttribute('value')).toBe('x-ray vision'); + expect(radioButtons.get(2).getAttribute('value')).toBe('strength'); + }); + + it('should show a checbox', function() { + let checkbox = element(by.css('input[formcontrolname=sidekick]')); + expect(checkbox.getAttribute('checked')).toBe(null); + }); + }); + + describe('Magneta form', function() { + + beforeEach(function() { + let magnetaButton = element.all(by.css('nav a')).get(2); + magnetaButton.click(); + }); + + it('should show hero information when the button is clicked', function() { + let editMessage = element(by.css('hero-list > div > h3')); + expect(editMessage.getText()).toBe('Editing: Magneta'); + }); + + it('should show a form with the selected hero information', function() { + let nameInput = element(by.css('input[formcontrolname=name]')); + expect(nameInput.getAttribute('value')).toBe('Magneta'); + }); + + it('shows a json output from the form', function() { + let json = element(by.css('hero-detail > p')); + expect(json.getText()).toContain('Magneta'); + }); + + it('has two disabled buttons by default', function() { + let buttons = element.all(by.css('hero-detail > form > div > button')); + expect(buttons.get(0).getAttribute('disabled')).toBe('true'); + expect(buttons.get(1).getAttribute('disabled')).toBe('true'); + }); + + it('enables the buttons after we edit the form', function() { + let nameInput = element(by.css('input[formcontrolname=name]')); + nameInput.sendKeys('a'); + let buttons = element.all(by.css('hero-detail > form > div > button')); + expect(buttons.get(0).getAttribute('disabled')).toBeNull(); + expect(buttons.get(1).getAttribute('disabled')).toBeNull(); + }); + + it('saves the changes when the save button is clicked', function() { + let nameInput = element(by.css('input[formcontrolname=name]')); + nameInput.sendKeys('a'); + let save = element.all(by.css('hero-detail > form > div > button')).get(0); + save.click(); + let editMessage = element(by.css('hero-list > div > h3')); + expect(editMessage.getText()).toBe('Editing: Magnetaa'); + }); + + it('reverts the changes when the revert button is clicked', function() { + let nameInput = element(by.css('input[formcontrolname=name]')); + nameInput.sendKeys('a'); + let revert = element.all(by.css('hero-detail > form > div > button')).get(1); + revert.click(); + let editMessage = element(by.css('hero-list > div > h3')); + expect(editMessage.getText()).toBe('Editing: Magneta'); + expect(nameInput.getAttribute('value')).toBe('Magneta'); + }); + + it('is able to add a new empty address', function() { + let newLairButton = element.all(by.css('button')).get(3); + newLairButton.click(); + let address = finalDemoAddressForm(element, 0); + expect(address.street).toBe(''); + expect(address.state).toBe(''); + expect(address.zip).toBe(''); + expect(address.city).toBe(''); + }); + + it('should show three radio buttons', function() { + let radioButtons = element.all(by.css('input[formcontrolname=power]')); + expect(radioButtons.get(0).getAttribute('value')).toBe('flight'); + expect(radioButtons.get(1).getAttribute('value')).toBe('x-ray vision'); + expect(radioButtons.get(2).getAttribute('value')).toBe('strength'); + }); + + it('should show a checkbox', function() { + let checkbox = element(by.css('input[formcontrolname=sidekick]')); + expect(checkbox.getAttribute('checked')).toBe(null); + }); + }); + }); // final demo + +// *************Begin FormArray Demo test******************************* + + + describe('formArray demo', function() { + beforeEach(function() { + let FormArrayOption = element.all(by.css('select option')).get(7); + FormArrayOption.click(); + }); + + it('should show FormArray Demo', function() { + select.getAttribute('value').then(function(demo: string) { + expect(demo).toBe('FormArray Demo'); + }); + }); + + it('does not select any hero by default', function() { + let heroSection = element(by.css('hero-list > div')); + expect(heroSection.isPresent()).toBe(false); + }); + + it('refreshes the page upon button click', function() { + // We move to another page... + let whirlwindButton = element.all(by.css('nav a')).get(0); + whirlwindButton.click(); + let refresh = element(by.css('button')); + refresh.click(); + let heroSection = element(by.css('hero-list > div')); + expect(heroSection.isPresent()).toBe(false); + }); + + describe('Whirlwind form', function() { + beforeEach(function() { + let whirlwindButton = element.all(by.css('nav a')).get(0); + whirlwindButton.click(); + }); + + it('should show hero information when the button is clicked', function() { + let editMessage = element(by.css('div.demo > div > div > h3')); + expect(editMessage.getText()).toBe('Editing: Whirlwind'); + }); + + it('should show a form with the selected hero information', function() { + let nameInput = element(by.css('input[formcontrolname=name]')); + expect(nameInput.getAttribute('value')).toBe('Whirlwind'); + let address1 = finalDemoAddressForm(element, 0); + expect(address1.street).toBe('123 Main'); + expect(address1.state).toBe('CA'); + expect(address1.zip).toBe('94801'); + expect(address1.city).toBe('Anywhere'); + let address2 = finalDemoAddressForm(element, 1); + expect(address2.street).toBe('456 Maple'); + expect(address2.state).toBe('VA'); + expect(address2.zip).toBe('23226'); + expect(address2.city).toBe('Somewhere'); + }); + it('shows a json output from the form', function() { + let json = element(by.css('hero-detail-8 > p')); + expect(json.getText()).toContain('Whirlwind'); + expect(json.getText()).toContain('Anywhere'); + expect(json.getText()).toContain('Somewhere'); + expect(json.getText()).toContain('VA'); + }); + + it('is able to add a new empty address', function() { + let newLairButton = element.all(by.css('button')).get(1); + newLairButton.click(); + let address2 = finalDemoAddressForm(element, 2); + expect(address2.street).toBe(''); + expect(address2.state).toBe(''); + expect(address2.zip).toBe(''); + expect(address2.city).toBe(''); + }); + + it('should show three radio buttons', function() { + let radioButtons = element.all(by.css('input[formcontrolname=power]')); + expect(radioButtons.get(0).getAttribute('value')).toBe('flight'); + expect(radioButtons.get(1).getAttribute('value')).toBe('x-ray vision'); + expect(radioButtons.get(2).getAttribute('value')).toBe('strength'); + }); + + it('should show a checkbox', function() { + let checkbox = element(by.css('input[formcontrolname=sidekick]')); + expect(checkbox.getAttribute('checked')).toBe(null); + }); + + }); // Whirlwind form + + describe('Bombastic FormArray form', function() { + beforeEach(function() { + let bombasticButton = element.all(by.css('nav a')).get(1); + bombasticButton.click(); + }); + + it('should show a hero information when the button is clicked', function() { + let editMessage = element(by.css('div.demo > div > div > h3')); + expect(editMessage.getText()).toBe('Editing: Bombastic'); + }); + + it('should show a form with the selected hero information', function() { + let nameInput = element(by.css('input[formcontrolname=name]')); + // nameInput.getAttribute('value').then(function(name: string) { + // expect(name).toBe('Whirlwind'); + // }); + expect(nameInput.getAttribute('value')).toBe('Bombastic'); + let address1 = finalDemoAddressForm(element, 0); + expect(address1.street).toBe('789 Elm'); + // expect(address1.state).toBe('OH'); + // This select should be OH not CA, which it shows in the UI, the JSON shows OH. + expect(address1.zip).toBe('04501'); + expect(address1.city).toBe('Smallville'); + }); + + it('shows a json output from the form', function() { + let json = element(by.css('hero-detail-8 > p')); + expect(json.getText()).toContain('Bombastic'); + expect(json.getText()).toContain('Smallville'); + expect(json.getText()).toContain('04501'); + expect(json.getText()).toContain('789 Elm'); + }); + + it('is able to add a new empty address', function() { + let newLairButton = element.all(by.css('button')).get(1); + newLairButton.click(); + let address1 = finalDemoAddressForm(element, 1); + expect(address1.street).toBe(''); + expect(address1.state).toBe(''); + expect(address1.zip).toBe(''); + expect(address1.city).toBe(''); + }); + + it('should show three radio buttons', function() { + let radioButtons = element.all(by.css('input[formcontrolname=power]')); + expect(radioButtons.get(0).getAttribute('value')).toBe('flight'); + expect(radioButtons.get(1).getAttribute('value')).toBe('x-ray vision'); + expect(radioButtons.get(2).getAttribute('value')).toBe('strength'); + }); + + it('should show a checkbox', function() { + let checkbox = element(by.css('input[formcontrolname=sidekick]')); + expect(checkbox.getAttribute('checked')).toBe(null); + }); + + }); // Bombastic FormArray form + + describe('Magneta FormArray form', function() { + beforeEach(function() { + let magnetaButton = element.all(by.css('nav a')).get(2); + magnetaButton.click(); + }); + + it('should show a hero information when the button is clicked', function() { + let editMessage = element(by.css('div.demo > div > div > h3')); + expect(editMessage.getText()).toBe('Editing: Magneta'); + }); + + it('should show a form with the selected hero information', function() { + let nameInput = element(by.css('input[formcontrolname=name]')); + expect(nameInput.getAttribute('value')).toBe('Magneta'); + }); + + it('shows a json output from the form', function() { + let json = element(by.css('hero-detail-8 > p')); + expect(json.getText()).toContain('Magneta'); + }); + + it('is able to add a new empty address', function() { + let newLairButton = element.all(by.css('button')).get(1); + newLairButton.click(); + let address1 = finalDemoAddressForm(element, 0); + expect(address1.street).toBe(''); + expect(address1.state).toBe(''); + expect(address1.zip).toBe(''); + expect(address1.city).toBe(''); + }); + + it('should show three radio buttons', function() { + let radioButtons = element.all(by.css('input[formcontrolname=power]')); + expect(radioButtons.get(0).getAttribute('value')).toBe('flight'); + expect(radioButtons.get(1).getAttribute('value')).toBe('x-ray vision'); + expect(radioButtons.get(2).getAttribute('value')).toBe('strength'); + }); + + it('should show a checkbox', function() { + let checkbox = element(by.css('input[formcontrolname=sidekick]')); + expect(checkbox.getAttribute('checked')).toBe(null); + }); + + }); // Magneta FormArray form + + }); // formArray demo + + +// *************Begin SetValue Demo test******************************* + + describe('SetValue demo', function() { + beforeEach(function() { + let SetValueOption = element.all(by.css('select option')).get(6); + SetValueOption.click(); + }); + + it('should show SetValue Demo', function() { + select.getAttribute('value').then(function(demo: string) { + expect(demo).toBe('SetValue Demo'); + }); + }); + + it('does not select any hero by default', function() { + let heroSection = element(by.css('hero-list > div')); + expect(heroSection.isPresent()).toBe(false); + }); + + it('refreshes the page upon button click', function() { + // We move to another page... + let whirlwindButton = element.all(by.css('nav a')).get(0); + whirlwindButton.click(); + let refresh = element(by.css('button')); + refresh.click(); + let heroSection = element(by.css('hero-list > div')); + expect(heroSection.isPresent()).toBe(false); + }); + + describe('Whirlwind setValue form', function() { + beforeEach(function() { + let whirlwindButton = element.all(by.css('nav a')).get(0); + whirlwindButton.click(); + }); + + it('should show a hero information when the button is clicked', function() { + let editMessage = element(by.css('.demo > div > div > h3')); + expect(editMessage.getText()).toBe('Editing: Whirlwind'); + }); + + it('should show a form with the selected hero information', function() { + let nameInput = element(by.css('input[formcontrolname=name]')); + expect(nameInput.getAttribute('value')).toBe('Whirlwind'); + let address1 = finalDemoAddressForm(element, 0); + expect(address1.street).toBe('123 Main'); + expect(address1.state).toBe('CA'); + expect(address1.zip).toBe('94801'); + expect(address1.city).toBe('Anywhere'); + }); + + it('shows a json output from the form', function() { + let json = element(by.css('hero-detail-7 > p')); + expect(json.getText()).toContain('Whirlwind'); + expect(json.getText()).toContain('Anywhere'); + let nameOutput = element(by.css('hero-detail-7 > p ~ p')); + expect(nameOutput.getText()).toContain('Name value: Whirlwind'); + let streetOutput = element(by.css('hero-detail-7 > p ~ p ~ p')); + expect(streetOutput.getText()).toContain('Street value: 123 Main'); + }); + + it('should show three radio buttons', function() { + let radioButtons = element.all(by.css('input[formcontrolname=power]')); + expect(radioButtons.get(0).getAttribute('value')).toBe('flight'); + expect(radioButtons.get(1).getAttribute('value')).toBe('x-ray vision'); + expect(radioButtons.get(2).getAttribute('value')).toBe('strength'); + }); + + it('should show a checkbox', function() { + let checkbox = element(by.css('input[formcontrolname=sidekick]')); + expect(checkbox.getAttribute('checked')).toBe(null); + }); + + }); // Whirlwind setValue form + + describe('Bombastic setValue form', function() { + beforeEach(function() { + let bombasticButton = element.all(by.css('nav a')).get(1); + bombasticButton.click(); + }); + + it('should show a hero information when the button is clicked', function() { + let editMessage = element(by.css('.demo > div > div > h3')); + expect(editMessage.getText()).toBe('Editing: Bombastic'); + }); + + it('should show a form with the selected hero information', function() { + let nameInput = element(by.css('input[formcontrolname=name]')); + expect(nameInput.getAttribute('value')).toBe('Bombastic'); + let address1 = finalDemoAddressForm(element, 0); + expect(address1.street).toBe('789 Elm'); + expect(address1.state).toBe('OH'); + expect(address1.zip).toBe('04501'); + expect(address1.city).toBe('Smallville'); + }); + + it('shows a json output from the form', function() { + let json = element(by.css('hero-detail-7 > p')); + expect(json.getText()).toContain('Bombastic'); + expect(json.getText()).toContain('Smallville'); + expect(json.getText()).toContain('04501'); + expect(json.getText()).toContain('789 Elm'); + let nameOutput = element(by.css('hero-detail-7 > p ~ p')); + expect(nameOutput.getText()).toContain('Name value: Bombastic'); + let streetOutput = element(by.css('hero-detail-7 > p ~ p ~ p')); + expect(streetOutput.getText()).toContain('Street value: 789 Elm'); + }); + + it('should show three radio buttons', function() { + let radioButtons = element.all(by.css('input[formcontrolname=power]')); + expect(radioButtons.get(0).getAttribute('value')).toBe('flight'); + expect(radioButtons.get(1).getAttribute('value')).toBe('x-ray vision'); + expect(radioButtons.get(2).getAttribute('value')).toBe('strength'); + }); + + it('should show a checkbox', function() { + let checkbox = element(by.css('input[formcontrolname=sidekick]')); + expect(checkbox.getAttribute('checked')).toBe(null); + }); + + }); // Bombastic setValue form + + describe('Magneta setValue form', function() { + beforeEach(function() { + let magnetaButton = element.all(by.css('nav a')).get(2); + magnetaButton.click(); + }); + + it('should show a hero information when the button is clicked', function() { + let editMessage = element(by.css('.demo > div > div > h3')); + expect(editMessage.getText()).toBe('Editing: Magneta'); + }); + + it('should show a form with the selected hero information', function() { + let nameInput = element(by.css('input[formcontrolname=name]')); + expect(nameInput.getAttribute('value')).toBe('Magneta'); + }); + + it('should show three radio buttons', function() { + let radioButtons = element.all(by.css('input[formcontrolname=power]')); + expect(radioButtons.get(0).getAttribute('value')).toBe('flight'); + expect(radioButtons.get(1).getAttribute('value')).toBe('x-ray vision'); + expect(radioButtons.get(2).getAttribute('value')).toBe('strength'); + }); + + it('should show a checkbox', function() { + let checkbox = element(by.css('input[formcontrolname=sidekick]')); + expect(checkbox.getAttribute('checked')).toBe(null); + }); + + it('shows a json output from the form', function() { + let json = element(by.css('hero-detail-7 > p')); + expect(json.getText()).toContain('Magneta'); + let nameOutput = element(by.css('hero-detail-7 > p ~ p')); + expect(nameOutput.getText()).toContain('Name value: Magneta'); + let streetOutput = element(by.css('hero-detail-7 > p ~ p ~ p')); + expect(streetOutput.getText()).toContain('Street value:'); + }); + + }); // Magneta setValue form + }); // SetValue demo + +// *************Begin patchValue Demo test******************************* + + describe('patchValue demo', function() { + beforeEach(function() { + let SetValueOption = element.all(by.css('select option')).get(5); + SetValueOption.click(); + }); + + it('should show patchValue Demo', function() { + select.getAttribute('value').then(function(demo: string) { + expect(demo).toBe('PatchValue Demo'); + }); + }); + + it('does not select any hero by default', function() { + let heroSection = element(by.css('.demo > div > div')); + expect(heroSection.isPresent()).toBe(false); + }); + + it('refreshes the page upon button click', function() { + // We move to another page... + let whirlwindButton = element.all(by.css('nav a')).get(0); + whirlwindButton.click(); + let refresh = element(by.css('button')); + refresh.click(); + let heroSection = element(by.css('.demo > div > div')); + expect(heroSection.isPresent()).toBe(false); + }); + + describe('Whirlwind patchValue form', function() { + beforeEach(function() { + let whirlwindButton = element.all(by.css('nav a')).get(0); + whirlwindButton.click(); + }); + + it('should show a hero information when the button is clicked', function() { + let editMessage = element(by.css('h2 ~ h3')); + expect(editMessage.getText()).toBe('Editing: Whirlwind'); + }); + + it('should show a form with the selected hero information', function() { + let nameInput = element(by.css('input[formcontrolname=name]')); + expect(nameInput.getAttribute('value')).toBe('Whirlwind'); + let address1 = finalDemoAddressForm(element, 0); + expect(address1.street).toBe(''); + expect(address1.state).toBe(''); + expect(address1.zip).toBe(''); + expect(address1.city).toBe(''); + }); + + it('should show three radio buttons', function() { + let radioButtons = element.all(by.css('input[formcontrolname=power]')); + expect(radioButtons.get(0).getAttribute('value')).toBe('flight'); + expect(radioButtons.get(1).getAttribute('value')).toBe('x-ray vision'); + expect(radioButtons.get(2).getAttribute('value')).toBe('strength'); + }); + + it('should show a checkbox', function() { + let checkbox = element(by.css('input[formcontrolname=sidekick]')); + expect(checkbox.getAttribute('checked')).toBe(null); + }); + + it('shows a json output from the form', function() { + let json = element(by.css('hero-detail-6 > p')); + expect(json.getText()).toContain('Whirlwind'); + let nameOutput = element(by.css('hero-detail-6 > p ~ p')); + expect(nameOutput.getText()).toContain('Name value: Whirlwind'); + let streetOutput = element(by.css('hero-detail-6 > p ~ p ~ p')); + expect(streetOutput.getText()).toContain('Street value:'); + }); + + + }); // Bombastic patchValue form + describe('Bombastic patchValue form', function() { + beforeEach(function() { + let bombasticButton = element.all(by.css('nav a')).get(1); + bombasticButton.click(); + }); + + it('should show a hero information when the button is clicked', function() { + let editMessage = element(by.css('h2 ~ h3')); + expect(editMessage.getText()).toBe('Editing: Bombastic'); + }); + + it('should show a form with the selected hero information', function() { + let nameInput = element(by.css('input[formcontrolname=name]')); + expect(nameInput.getAttribute('value')).toBe('Bombastic'); + let address1 = finalDemoAddressForm(element, 0); + expect(address1.street).toBe(''); + expect(address1.state).toBe(''); + expect(address1.zip).toBe(''); + expect(address1.city).toBe(''); + }); + + it('should show three radio buttons', function() { + let radioButtons = element.all(by.css('input[formcontrolname=power]')); + expect(radioButtons.get(0).getAttribute('value')).toBe('flight'); + expect(radioButtons.get(1).getAttribute('value')).toBe('x-ray vision'); + expect(radioButtons.get(2).getAttribute('value')).toBe('strength'); + }); + + it('should show a checkbox', function() { + let checkbox = element(by.css('input[formcontrolname=sidekick]')); + expect(checkbox.getAttribute('checked')).toBe(null); + }); + + it('shows a json output from the form', function() { + let json = element(by.css('hero-detail-6 > p')); + expect(json.getText()).toContain('Bombastic'); + let nameOutput = element(by.css('hero-detail-6 > p ~ p')); + expect(nameOutput.getText()).toContain('Name value: Bombastic'); + let streetOutput = element(by.css('hero-detail-6 > p ~ p ~ p')); + expect(streetOutput.getText()).toContain('Street value:'); + }); + }); // Bombastic patchValue form + + describe('Magneta patchValue form', function() { + beforeEach(function() { + let magnetaButton = element.all(by.css('nav a')).get(2); + magnetaButton.click(); + }); + + it('should show a hero information when the button is clicked', function() { + let editMessage = element(by.css('h2 ~ h3')); + expect(editMessage.getText()).toBe('Editing: Magneta'); + }); + + it('should show a form with the selected hero information', function() { + let nameInput = element(by.css('input[formcontrolname=name]')); + expect(nameInput.getAttribute('value')).toBe('Magneta'); + let address1 = finalDemoAddressForm(element, 0); + expect(address1.street).toBe(''); + expect(address1.state).toBe(''); + expect(address1.zip).toBe(''); + expect(address1.city).toBe(''); + }); + + it('should show three radio buttons', function() { + let radioButtons = element.all(by.css('input[formcontrolname=power]')); + expect(radioButtons.get(0).getAttribute('value')).toBe('flight'); + expect(radioButtons.get(1).getAttribute('value')).toBe('x-ray vision'); + expect(radioButtons.get(2).getAttribute('value')).toBe('strength'); + }); + + it('should show a checkbox', function() { + let checkbox = element(by.css('input[formcontrolname=sidekick]')); + expect(checkbox.getAttribute('checked')).toBe(null); + }); + + it('shows a json output from the form', function() { + let json = element(by.css('hero-detail-6 > p')); + expect(json.getText()).toContain('Magneta'); + let nameOutput = element(by.css('hero-detail-6 > p ~ p')); + expect(nameOutput.getText()).toContain('Name value: Magneta'); + let streetOutput = element(by.css('hero-detail-6 > p ~ p ~ p')); + expect(streetOutput.getText()).toContain('Street value:'); + }); + + }); // Magneta patchValue form + }); // PatchValue demo + + + +// *************Begin Nested FormBuilder Demo test******************************* + + describe('Nested FormBuilder demo', function() { + beforeEach(function() { + let NestedFormBuilderOption = element.all(by.css('select option')).get(4); + NestedFormBuilderOption.click(); + }); + + it('should show Nested FormBuilder Demo', function() { + select.getAttribute('value').then(function(demo: string) { + expect(demo).toBe('Nested FormBuilder group Demo'); + }); + }); + + it('should show a form for hero information', function() { + let nameInput = element(by.css('input[formcontrolname=name]')); + expect(nameInput.getAttribute('value')).toBe(''); + let address1 = finalDemoAddressForm(element, 0); + expect(address1.street).toBe(''); + expect(address1.state).toBe(''); + expect(address1.zip).toBe(''); + expect(address1.city).toBe(''); + }); + + it('should show three radio buttons', function() { + let radioButtons = element.all(by.css('input[formcontrolname=power]')); + expect(radioButtons.get(0).getAttribute('value')).toBe('flight'); + expect(radioButtons.get(1).getAttribute('value')).toBe('x-ray vision'); + expect(radioButtons.get(2).getAttribute('value')).toBe('strength'); + }); + + it('should show a checkbox', function() { + let checkbox = element(by.css('input[formcontrolname=sidekick]')); + expect(checkbox.getAttribute('checked')).toBe(null); + }); + + it('shows a json output from the form', function() { + let json = element(by.css('hero-detail-5 > p')); + expect(json.getText()).toContain('address'); + let nameOutput = element(by.css('hero-detail-5 > p ~ p')); + expect(nameOutput.getText()).toContain('Name value:'); + let streetOutput = element(by.css('hero-detail-5 > p ~ p ~ p')); + expect(streetOutput.getText()).toContain('Street value:'); + }); + + }); // Nested FormBuilder demo + +// *************Begin Group with multiple controls Demo test******************************* + + describe('Group with multiple controls demo', function() { + beforeEach(function() { + let NestedFormBuilderOption = element.all(by.css('select option')).get(3); + NestedFormBuilderOption.click(); + }); + + it('should show Group with multiple controls Demo', function() { + select.getAttribute('value').then(function(demo: string) { + expect(demo).toBe('Group with multiple controls Demo'); + }); + }); + + it('should show header', function() { + let header = element(by.css('hero-detail-4 > h3')); + expect(header.getText()).toBe('A FormGroup with multiple FormControls'); + }); + + it('should show a form for hero information', function() { + let nameInput = element(by.css('input[formcontrolname=name]')); + expect(nameInput.getAttribute('value')).toBe(''); + let address1 = finalDemoAddressForm(element, 0); + expect(address1.street).toBe(''); + expect(address1.state).toBe(''); + expect(address1.zip).toBe(''); + expect(address1.city).toBe(''); + }); + + it('should show three radio buttons', function() { + let radioButtons = element.all(by.css('input[formcontrolname=power]')); + expect(radioButtons.get(0).getAttribute('value')).toBe('flight'); + expect(radioButtons.get(1).getAttribute('value')).toBe('x-ray vision'); + expect(radioButtons.get(2).getAttribute('value')).toBe('strength'); + }); + it('should show a checkbox', function() { + let checkbox = element(by.css('input[formcontrolname=sidekick]')); + expect(checkbox.getAttribute('checked')).toBe(null); + }); + it('shows a json output from the form', function() { + let json = element(by.css('hero-detail-4 > p')); + expect(json.getText()).toContain('power'); + }); + +}); // Group with multiple controls demo + + + +// *************Begin Group with multiple controls Demo test******************************* + + describe('Simple FormBuilder Group demo', function() { + beforeEach(function() { + let SimpleFormBuilderOption = element.all(by.css('select option')).get(2); + SimpleFormBuilderOption.click(); + }); + + it('should show Simple FormBuilder group Demo', function() { + select.getAttribute('value').then(function(demo: string) { + expect(demo).toBe('Simple FormBuilder group Demo'); + }); + }); + + it('should show header', function() { + let header = element(by.css('hero-detail-3 > h3')); + expect(header.getText()).toBe('A FormGroup with a single FormControl using FormBuilder'); + }); + + it('should show a form for hero information', function() { + let nameInput = element(by.css('input[formcontrolname=name]')); + expect(nameInput.getAttribute('value')).toBe(''); + }); + + it('shows a json output from the form', function() { + let json = element(by.css('hero-detail-3 > p')); + expect(json.getText()).toContain('name'); + let validStatus = element(by.css('hero-detail-3 > p ~ p')); + expect(validStatus.getText()).toContain('INVALID'); + }); + +}); // Group with multiple controls demo + + +// *************Begin FormControl in a FormGroup Demo test******************************* + + describe('FormControl in a FormGroup demo', function() { + beforeEach(function() { + let SimpleFormBuilderOption = element.all(by.css('select option')).get(1); + SimpleFormBuilderOption.click(); + }); + + it('should show FormControl in a FormGroup Demo', function() { + select.getAttribute('value').then(function(demo: string) { + expect(demo).toBe('FormControl in a FormGroup Demo'); + }); + }); + + it('should show header', function() { + let header = element(by.css('hero-detail-2 > h3')); + expect(header.getText()).toBe('FormControl in a FormGroup'); + }); + + it('should show a form for hero information', function() { + let nameInput = element(by.css('input[formcontrolname=name]')); + expect(nameInput.getAttribute('value')).toBe(''); + }); + + it('shows a json output from the form', function() { + let json = element(by.css('hero-detail-2 > p')); + expect(json.getText()).toContain('name'); + }); + +}); // Group with multiple controls demo + +// *************Begin Just A FormControl Demo test******************************* + + describe('Just a FormControl demo', function() { + beforeEach(function() { + let FormControlOption = element.all(by.css('select option')).get(0); + FormControlOption.click(); + }); + + it('should show Just a FormControl demo', function() { + select.getAttribute('value').then(function(demo: string) { + expect(demo).toBe('Just a FormControl Demo'); + }); + }); + + it('should show header', function() { + let header = element(by.css('hero-detail-1 > h3')); + expect(header.getText()).toBe('Just a FormControl'); + }); + + it('should show a form for hero information', function() { + let nameInput = element(by.css('input')); + expect(nameInput.getAttribute('value')).toBe(''); + }); + + }); // Just a FormControl demo test + + +}); // reactive forms diff --git a/aio/content/examples/reactive-forms/ts/example-config.json b/aio/content/examples/reactive-forms/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/reactive-forms/ts/final.plnkr.json b/aio/content/examples/reactive-forms/ts/final.plnkr.json new file mode 100644 index 0000000000..41481acc99 --- /dev/null +++ b/aio/content/examples/reactive-forms/ts/final.plnkr.json @@ -0,0 +1,21 @@ +{ + "description": "Angular Reactive Forms (final)", + "basePath": "src/", + "files":[ + "styles.css", + + "app/app.component.ts", + "app/app.module.ts", + "app/data-model.ts", + "app/hero.service.ts", + "app/hero-detail.component.html", + "app/hero-detail.component.ts", + "app/hero-list.component.html", + "app/hero-list.component.ts", + + "main-final.ts", + "index-final.html" + ], + "main": "index-final.html", + "tags": ["reactive", "forms"] +} diff --git a/aio/content/examples/reactive-forms/ts/final.plnkr.no-link.html b/aio/content/examples/reactive-forms/ts/final.plnkr.no-link.html new file mode 100644 index 0000000000..758f006eaf --- /dev/null +++ b/aio/content/examples/reactive-forms/ts/final.plnkr.no-link.html @@ -0,0 +1,515 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/reactive-forms/ts/plnkr.json b/aio/content/examples/reactive-forms/ts/plnkr.json new file mode 100644 index 0000000000..f0daeb4aad --- /dev/null +++ b/aio/content/examples/reactive-forms/ts/plnkr.json @@ -0,0 +1,15 @@ +{ + "description": "Angular Reactive Forms (Demo runner)", + "basePath": "src/", + "files":[ + "!**/*.d.ts", + "!**/*.js", + + "!app/app.component.1.ts", + "!app/hero-list.component.1.html", + + "!app/main-final.ts", + "!index-final.html" + ], + "tags": ["reactive", "forms"] +} diff --git a/aio/content/examples/reactive-forms/ts/plnkr.no-link.html b/aio/content/examples/reactive-forms/ts/plnkr.no-link.html new file mode 100644 index 0000000000..fb7fd71c4d --- /dev/null +++ b/aio/content/examples/reactive-forms/ts/plnkr.no-link.html @@ -0,0 +1,1325 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/reactive-forms/ts/src/app/app.component.1.ts b/aio/content/examples/reactive-forms/ts/src/app/app.component.1.ts new file mode 100644 index 0000000000..4ab3949863 --- /dev/null +++ b/aio/content/examples/reactive-forms/ts/src/app/app.component.1.ts @@ -0,0 +1,13 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + moduleId: module.id, + selector: 'my-app', + template: ` +
    +

    Reactive Forms

    + +
    ` +}) +export class AppComponent { } diff --git a/aio/content/examples/reactive-forms/ts/src/app/app.component.ts b/aio/content/examples/reactive-forms/ts/src/app/app.component.ts new file mode 100644 index 0000000000..e41b9f8b35 --- /dev/null +++ b/aio/content/examples/reactive-forms/ts/src/app/app.component.ts @@ -0,0 +1,13 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + moduleId: module.id, + selector: 'my-app', + template: ` +
    +

    Reactive Forms

    + +
    ` +}) +export class AppComponent { } diff --git a/aio/content/examples/reactive-forms/ts/src/app/app.module.ts b/aio/content/examples/reactive-forms/ts/src/app/app.module.ts new file mode 100644 index 0000000000..b9f2ea8f99 --- /dev/null +++ b/aio/content/examples/reactive-forms/ts/src/app/app.module.ts @@ -0,0 +1,39 @@ +// #docplaster +// #docregion +// #docregion v1 +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { ReactiveFormsModule } from '@angular/forms'; // <-- #1 import module + +import { AppComponent } from './app.component'; +import { HeroDetailComponent } from './hero-detail.component'; // <-- #1 import component +// #enddocregion v1 +import { HeroListComponent } from './hero-list.component'; + +import { HeroService } from './hero.service'; // <-- #1 import service +// #docregion v1 + +@NgModule({ + imports: [ + BrowserModule, + ReactiveFormsModule // <-- #2 add to Angular module imports + ], + declarations: [ + AppComponent, + HeroDetailComponent, // <-- #3 declare app component +// #enddocregion v1 + HeroListComponent +// #docregion v1 + ], +// #enddocregion v1 + exports: [ // export for the DemoModule + AppComponent, + HeroDetailComponent, + HeroListComponent + ], + providers: [ HeroService ], // <-- #4 provide HeroService +// #docregion v1 + bootstrap: [ AppComponent ] +}) +export class AppModule { } +// #enddocregion v1 diff --git a/aio/content/examples/reactive-forms/ts/src/app/data-model.ts b/aio/content/examples/reactive-forms/ts/src/app/data-model.ts new file mode 100644 index 0000000000..ad01ddee56 --- /dev/null +++ b/aio/content/examples/reactive-forms/ts/src/app/data-model.ts @@ -0,0 +1,40 @@ +// #docregion +// #docregion model-classes +export class Hero { + id = 0; + name = ''; + addresses: Address[]; +} + +export class Address { + street = ''; + city = ''; + state = ''; + zip = ''; +} +// #enddocregion model-classes + +export const heroes: Hero[] = [ + { + id: 1, + name: 'Whirlwind', + addresses: [ + {street: '123 Main', city: 'Anywhere', state: 'CA', zip: '94801'}, + {street: '456 Maple', city: 'Somewhere', state: 'VA', zip: '23226'}, + ] + }, + { + id: 2, + name: 'Bombastic', + addresses: [ + {street: '789 Elm', city: 'Smallville', state: 'OH', zip: '04501'}, + ] + }, + { + id: 3, + name: 'Magneta', + addresses: [ ] + }, +]; + +export const states = ['CA', 'MD', 'OH', 'VA']; diff --git a/aio/content/examples/reactive-forms/ts/src/app/demo.component.html b/aio/content/examples/reactive-forms/ts/src/app/demo.component.html new file mode 100644 index 0000000000..1caae127af --- /dev/null +++ b/aio/content/examples/reactive-forms/ts/src/app/demo.component.html @@ -0,0 +1,40 @@ +
    +

    Reactive Forms

    +

    Pick a demo: + +

    + +
    + +
    + + + + + + + +
    + +

    Loading heroes ...

    +

    Select a hero:

    + + + +
    +
    +

    Hero Detail

    +

    Editing: {{selectedHero.name}}

    + + + + +
    +
    +
    +
    diff --git a/aio/content/examples/reactive-forms/ts/src/app/demo.component.ts b/aio/content/examples/reactive-forms/ts/src/app/demo.component.ts new file mode 100644 index 0000000000..5e3a95636d --- /dev/null +++ b/aio/content/examples/reactive-forms/ts/src/app/demo.component.ts @@ -0,0 +1,48 @@ +/* tslint:disable:member-ordering */ +import { Component } from '@angular/core'; +import { Observable } from 'rxjs/Observable'; + +import { Hero } from './data-model'; +import { HeroService } from './hero.service'; + +@Component({ + moduleId: module.id, + selector: 'my-app', + templateUrl: 'demo.component.html' +}) +export class DemoComponent { + + demos: string[] = [ + 'Just a FormControl', + 'FormControl in a FormGroup', + 'Simple FormBuilder group', + 'Group with multiple controls', + 'Nested FormBuilder group', + 'PatchValue', + 'SetValue', + 'FormArray', + 'Final'].map(n => n + ' Demo'); + + final = this.demos.length; + demo = this.final; // current demo + + heroes: Observable; + isLoading = false; + selectedHero: Hero; + + constructor(private heroService: HeroService) { } + + getHeroes() { + this.isLoading = true; + this.heroes = this.heroService.getHeroes() + .finally(() => this.isLoading = false); + this.selectedHero = undefined; + } + + select(hero: Hero) { this.selectedHero = hero; } + + selectDemo(demo: number) { + this.demo = demo + 1; + this.getHeroes(); + } +} diff --git a/aio/content/examples/reactive-forms/ts/src/app/demo.module.ts b/aio/content/examples/reactive-forms/ts/src/app/demo.module.ts new file mode 100644 index 0000000000..dac9145ca9 --- /dev/null +++ b/aio/content/examples/reactive-forms/ts/src/app/demo.module.ts @@ -0,0 +1,33 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { ReactiveFormsModule } from '@angular/forms'; + +import { AppModule } from './app.module'; +import { DemoComponent } from './demo.component'; +import { HeroDetailComponent1 } from './hero-detail-1.component'; +import { HeroDetailComponent2 } from './hero-detail-2.component'; +import { HeroDetailComponent3 } from './hero-detail-3.component'; +import { HeroDetailComponent4 } from './hero-detail-4.component'; +import { HeroDetailComponent5 } from './hero-detail-5.component'; +import { HeroDetailComponent6 } from './hero-detail-6.component'; +import { HeroDetailComponent7 } from './hero-detail-7.component'; +import { HeroDetailComponent8 } from './hero-detail-8.component'; + +@NgModule({ + imports: [ + BrowserModule, + ReactiveFormsModule, + AppModule, + ], + declarations: [ DemoComponent, + HeroDetailComponent1, + HeroDetailComponent2, + HeroDetailComponent3, + HeroDetailComponent4, + HeroDetailComponent5, + HeroDetailComponent6, + HeroDetailComponent7, + HeroDetailComponent8], + bootstrap: [ DemoComponent ] +}) +export class DemoModule { } diff --git a/aio/content/examples/reactive-forms/ts/src/app/hero-detail-1.component.html b/aio/content/examples/reactive-forms/ts/src/app/hero-detail-1.component.html new file mode 100644 index 0000000000..7217708d22 --- /dev/null +++ b/aio/content/examples/reactive-forms/ts/src/app/hero-detail-1.component.html @@ -0,0 +1,8 @@ + +

    Hero Detail

    +

    Just a FormControl

    + + + diff --git a/aio/content/examples/reactive-forms/ts/src/app/hero-detail-1.component.ts b/aio/content/examples/reactive-forms/ts/src/app/hero-detail-1.component.ts new file mode 100644 index 0000000000..586ca36e76 --- /dev/null +++ b/aio/content/examples/reactive-forms/ts/src/app/hero-detail-1.component.ts @@ -0,0 +1,15 @@ +/* tslint:disable:component-class-suffix */ +// #docregion imports +import { Component } from '@angular/core'; +import { FormControl } from '@angular/forms'; +// #enddocregion + +@Component({ + moduleId: module.id, + selector: 'hero-detail-1', + templateUrl: './hero-detail-1.component.html' +}) +// #docregion v1 +export class HeroDetailComponent1 { + name = new FormControl(); +} diff --git a/aio/content/examples/reactive-forms/ts/src/app/hero-detail-2.component.html b/aio/content/examples/reactive-forms/ts/src/app/hero-detail-2.component.html new file mode 100644 index 0000000000..1e98354842 --- /dev/null +++ b/aio/content/examples/reactive-forms/ts/src/app/hero-detail-2.component.html @@ -0,0 +1,18 @@ + +

    Hero Detail

    +

    FormControl in a FormGroup

    +
    +
    + +
    +
    + + + +

    Form value: {{ heroForm.value | json }}

    + + + + diff --git a/aio/content/examples/reactive-forms/ts/src/app/hero-detail-2.component.ts b/aio/content/examples/reactive-forms/ts/src/app/hero-detail-2.component.ts new file mode 100644 index 0000000000..e3c0448a7f --- /dev/null +++ b/aio/content/examples/reactive-forms/ts/src/app/hero-detail-2.component.ts @@ -0,0 +1,18 @@ +/* tslint:disable:component-class-suffix */ +// #docregion imports +import { Component } from '@angular/core'; +import { FormControl, FormGroup } from '@angular/forms'; +// #enddocregion imports + +@Component({ + moduleId: module.id, + selector: 'hero-detail-2', + templateUrl: './hero-detail-2.component.html' +}) +// #docregion v2 +export class HeroDetailComponent2 { + heroForm = new FormGroup ({ + name: new FormControl() + }); +} +// #enddocregion v2 diff --git a/aio/content/examples/reactive-forms/ts/src/app/hero-detail-3.component.html b/aio/content/examples/reactive-forms/ts/src/app/hero-detail-3.component.html new file mode 100644 index 0000000000..8edc544dd4 --- /dev/null +++ b/aio/content/examples/reactive-forms/ts/src/app/hero-detail-3.component.html @@ -0,0 +1,16 @@ + +

    Hero Detail

    +

    A FormGroup with a single FormControl using FormBuilder

    +
    +
    + +
    +
    + + + +

    Form value: {{ heroForm.value | json }}

    +

    Form status: {{ heroForm.status | json }}

    + diff --git a/aio/content/examples/reactive-forms/ts/src/app/hero-detail-3.component.ts b/aio/content/examples/reactive-forms/ts/src/app/hero-detail-3.component.ts new file mode 100644 index 0000000000..400c6911d6 --- /dev/null +++ b/aio/content/examples/reactive-forms/ts/src/app/hero-detail-3.component.ts @@ -0,0 +1,28 @@ +/* tslint:disable:component-class-suffix */ +// #docregion imports +import { Component } from '@angular/core'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +// #enddocregion imports + +@Component({ + moduleId: module.id, + selector: 'hero-detail-3', + templateUrl: './hero-detail-3.component.html' +}) +// #docregion v3 +export class HeroDetailComponent3 { + heroForm: FormGroup; // <--- heroForm is of type FormGroup + + constructor(private fb: FormBuilder) { // <--- inject FormBuilder + this.createForm(); + } + + createForm() { + // #docregion required + this.heroForm = this.fb.group({ + name: ['', Validators.required ], + }); + // #enddocregion required + } +} +// #enddocregion v3 diff --git a/aio/content/examples/reactive-forms/ts/src/app/hero-detail-3a.component.ts b/aio/content/examples/reactive-forms/ts/src/app/hero-detail-3a.component.ts new file mode 100644 index 0000000000..b76803d7ed --- /dev/null +++ b/aio/content/examples/reactive-forms/ts/src/app/hero-detail-3a.component.ts @@ -0,0 +1,26 @@ +/* tslint:disable:component-class-suffix */ +// #docregion imports +import { Component } from '@angular/core'; +import { FormBuilder, FormGroup } from '@angular/forms'; +// #enddocregion imports + +@Component({ + moduleId: module.id, + selector: 'hero-detail-3', + templateUrl: './hero-detail-3.component.html' +}) +// #docregion v3a +export class HeroDetailComponent3 { + heroForm: FormGroup; // <--- heroForm is of type FormGroup + + constructor(private fb: FormBuilder) { // <--- inject FormBuilder + this.createForm(); + } + + createForm() { + this.heroForm = this.fb.group({ + name: '', // <--- the FormControl called "name" + }); + } +} +// #enddocregion v3a diff --git a/aio/content/examples/reactive-forms/ts/src/app/hero-detail-4.component.html b/aio/content/examples/reactive-forms/ts/src/app/hero-detail-4.component.html new file mode 100644 index 0000000000..30529868e9 --- /dev/null +++ b/aio/content/examples/reactive-forms/ts/src/app/hero-detail-4.component.html @@ -0,0 +1,46 @@ + +

    Hero Detail

    +

    A FormGroup with multiple FormControls

    +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    +

    Super power:

    + + + +
    +
    + +
    +
    + + +

    Form value: {{ heroForm.value | json }}

    diff --git a/aio/content/examples/reactive-forms/ts/src/app/hero-detail-4.component.ts b/aio/content/examples/reactive-forms/ts/src/app/hero-detail-4.component.ts new file mode 100644 index 0000000000..8705765a56 --- /dev/null +++ b/aio/content/examples/reactive-forms/ts/src/app/hero-detail-4.component.ts @@ -0,0 +1,35 @@ +/* tslint:disable:component-class-suffix */ +// #docregion imports +import { Component } from '@angular/core'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; + +import { states } from './data-model'; +// #enddocregion imports + +@Component({ + moduleId: module.id, + selector: 'hero-detail-4', + templateUrl: './hero-detail-4.component.html' +}) +// #docregion v4 +export class HeroDetailComponent4 { + heroForm: FormGroup; + states = states; + + constructor(private fb: FormBuilder) { + this.createForm(); + } + + createForm() { + this.heroForm = this.fb.group({ + name: ['', Validators.required ], + street: '', + city: '', + state: '', + zip: '', + power: '', + sidekick: '' + }); + } +} +// #enddocregion v4 diff --git a/aio/content/examples/reactive-forms/ts/src/app/hero-detail-5.component.html b/aio/content/examples/reactive-forms/ts/src/app/hero-detail-5.component.html new file mode 100644 index 0000000000..2a41b4f2f9 --- /dev/null +++ b/aio/content/examples/reactive-forms/ts/src/app/hero-detail-5.component.html @@ -0,0 +1,56 @@ + +
    +
    + +
    + +
    +

    Secret Lair

    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +

    Super power:

    + + + +
    +
    + +
    +
    + +

    heroForm value: {{ heroForm.value | json}}

    +

    Extra info for the curious:

    + +

    Name value: {{ heroForm.get('name').value }}

    + + + +

    Street value: {{ heroForm.get('address.street').value}}

    + diff --git a/aio/content/examples/reactive-forms/ts/src/app/hero-detail-5.component.ts b/aio/content/examples/reactive-forms/ts/src/app/hero-detail-5.component.ts new file mode 100644 index 0000000000..2bafd0709e --- /dev/null +++ b/aio/content/examples/reactive-forms/ts/src/app/hero-detail-5.component.ts @@ -0,0 +1,36 @@ +/* tslint:disable:component-class-suffix */ +import { Component } from '@angular/core'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; + +import { states } from './data-model'; + +@Component({ + moduleId: module.id, + selector: 'hero-detail-5', + templateUrl: './hero-detail-5.component.html' +}) +// #docregion v5 +export class HeroDetailComponent5 { + heroForm: FormGroup; + states = states; + + constructor(private fb: FormBuilder) { + this.createForm(); + } + + createForm() { + this.heroForm = this.fb.group({ // <-- the parent FormGroup + name: ['', Validators.required ], + address: this.fb.group({ // <-- the child FormGroup + street: '', + city: '', + state: '', + zip: '' + }), + power: '', + sidekick: '' + }); + } +} +// #enddocregion v5 + diff --git a/aio/content/examples/reactive-forms/ts/src/app/hero-detail-6.component.html b/aio/content/examples/reactive-forms/ts/src/app/hero-detail-6.component.html new file mode 100644 index 0000000000..4c8b5c9e05 --- /dev/null +++ b/aio/content/examples/reactive-forms/ts/src/app/hero-detail-6.component.html @@ -0,0 +1,46 @@ + +

    Hero Detail

    +

    PatchValue to initialize a value

    +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    +

    Super power:

    + + + +
    +
    + +
    +
    + + +

    Form value: {{ heroForm.value | json }}

    diff --git a/aio/content/examples/reactive-forms/ts/src/app/hero-detail-6.component.ts b/aio/content/examples/reactive-forms/ts/src/app/hero-detail-6.component.ts new file mode 100644 index 0000000000..9c592a953e --- /dev/null +++ b/aio/content/examples/reactive-forms/ts/src/app/hero-detail-6.component.ts @@ -0,0 +1,59 @@ +/* tslint:disable:component-class-suffix */ +// #docregion import-input +import { Component, Input, OnChanges } from '@angular/core'; +// #enddocregion import-input +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; + +// #docregion import-hero +import { Hero, states } from './data-model'; +// #enddocregion import-hero + +////////// 6 //////////////////// + +@Component({ + moduleId: module.id, + selector: 'hero-detail-6', + templateUrl: './hero-detail-5.component.html' +}) +// #docregion v6 +export class HeroDetailComponent6 implements OnChanges { + // #docregion hero + @Input() hero: Hero; + // #enddocregion hero + + heroForm: FormGroup; + states = states; + + constructor(private fb: FormBuilder) { + this.createForm(); + } + + createForm() { + // #docregion hero-form-model + this.heroForm = this.fb.group({ + name: ['', Validators.required ], + address: this.fb.group({ + street: '', + city: '', + state: '', + zip: '' + }), + power: '', + sidekick: '' + }); + // #enddocregion hero-form-model + } + + // #docregion patch-value-on-changes + ngOnChanges() { // <-- wrap patchValue in ngOnChanges + this.heroForm.reset(); + // #docregion patch-value + this.heroForm.patchValue({ + name: this.hero.name + }); + // #enddocregion patch-value + } + // #enddocregion patch-value-on-changes +} + +// #enddocregion v6 diff --git a/aio/content/examples/reactive-forms/ts/src/app/hero-detail-7.component.html b/aio/content/examples/reactive-forms/ts/src/app/hero-detail-7.component.html new file mode 100644 index 0000000000..6d68b49b4d --- /dev/null +++ b/aio/content/examples/reactive-forms/ts/src/app/hero-detail-7.component.html @@ -0,0 +1,46 @@ + +

    Hero Detail

    +

    A FormGroup with multiple FormControls

    +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    +

    Super power:

    + + + +
    +
    + +
    +
    + + +

    Form value: {{ heroForm.value | json }}

    diff --git a/aio/content/examples/reactive-forms/ts/src/app/hero-detail-7.component.ts b/aio/content/examples/reactive-forms/ts/src/app/hero-detail-7.component.ts new file mode 100644 index 0000000000..60a220b6bd --- /dev/null +++ b/aio/content/examples/reactive-forms/ts/src/app/hero-detail-7.component.ts @@ -0,0 +1,67 @@ +/* tslint:disable:component-class-suffix */ +// #docplaster +// #docregion imports +import { Component, Input, OnChanges } from '@angular/core'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; + +import { Address, Hero, states } from './data-model'; +// #enddocregion imports + +@Component({ + moduleId: module.id, + selector: 'hero-detail-7', + templateUrl: './hero-detail-5.component.html' +}) +// #docregion v7 +export class HeroDetailComponent7 implements OnChanges { + @Input() hero: Hero; + + heroForm: FormGroup; + states = states; + + constructor(private fb: FormBuilder) { + this.createForm(); + } + + createForm() { + // #docregion address-form-group + this.heroForm = this.fb.group({ + name: ['', Validators.required ], + address: this.fb.group(new Address()), // <-- a FormGroup with a new address + power: '', + sidekick: '' + }); + // #enddocregion address-form-group + } + + // #docregion ngOnChanges + ngOnChanges() { + this.heroForm.reset({ + name: this.hero.name, + address: this.hero.addresses[0] || new Address() + }); + } + // #enddocregion ngOnChanges + + /* First version of ngOnChanges + // #docregion ngOnChanges-1 + ngOnChanges() + // #enddocregion ngOnChanges-1 + */ + ngOnChanges1() { + // #docregion reset + this.heroForm.reset(); + // #enddocregion reset + // #docregion ngOnChanges-1 + // #docregion set-value + this.heroForm.setValue({ + name: this.hero.name, + // #docregion set-value-address + address: this.hero.addresses[0] || new Address() + // #enddocregion set-value-address + }); + // #enddocregion set-value + } + // #enddocregion ngOnChanges-1 +} + diff --git a/aio/content/examples/reactive-forms/ts/src/app/hero-detail-8.component.html b/aio/content/examples/reactive-forms/ts/src/app/hero-detail-8.component.html new file mode 100644 index 0000000000..d8e47ae798 --- /dev/null +++ b/aio/content/examples/reactive-forms/ts/src/app/hero-detail-8.component.html @@ -0,0 +1,70 @@ + +

    Using FormArray to add groups

    + +
    +

    Form Changed: {{ heroForm.dirty }}

    + +
    + +
    + + +
    +
    + + +

    Address #{{i + 1}}

    +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    + + +
    + + + + + + + +
    + + +
    +

    Super power:

    + + + +
    +
    + +
    +
    + +

    heroForm value: {{ heroForm.value | json}}

    diff --git a/aio/content/examples/reactive-forms/ts/src/app/hero-detail-8.component.ts b/aio/content/examples/reactive-forms/ts/src/app/hero-detail-8.component.ts new file mode 100644 index 0000000000..99cd6f822a --- /dev/null +++ b/aio/content/examples/reactive-forms/ts/src/app/hero-detail-8.component.ts @@ -0,0 +1,69 @@ +/* tslint:disable:component-class-suffix */ +// #docregion imports +import { Component, Input, OnChanges } from '@angular/core'; +import { FormArray, FormBuilder, FormGroup, Validators } from '@angular/forms'; + +import { Address, Hero, states } from './data-model'; +// #enddocregion imports + +@Component({ + moduleId: module.id, + selector: 'hero-detail-8', + templateUrl: './hero-detail-8.component.html' +}) +// #docregion v8 +export class HeroDetailComponent8 implements OnChanges { + @Input() hero: Hero; + + heroForm: FormGroup; + states = states; + + // #docregion ctor + constructor(private fb: FormBuilder) { + this.createForm(); + this.logNameChange(); + } + // #enddocregion ctor + + createForm() { + // #docregion secretLairs-form-array + this.heroForm = this.fb.group({ + name: ['', Validators.required ], + secretLairs: this.fb.array([]), // <-- secretLairs as an empty FormArray + power: '', + sidekick: '' + }); + // #enddocregion secretLairs-form-array + } + + logNameChange() {/* Coming soon */} + + // #docregion onchanges + ngOnChanges() { + this.heroForm.reset({ + name: this.hero.name + }); + this.setAddresses(this.hero.addresses); + } + // #enddocregion onchanges + + // #docregion get-secret-lairs + get secretLairs(): FormArray { + return this.heroForm.get('secretLairs') as FormArray; + }; + // #enddocregion get-secret-lairs + + // #docregion set-addresses + setAddresses(addresses: Address[]) { + const addressFGs = addresses.map(address => this.fb.group(address)); + const addressFormArray = this.fb.array(addressFGs); + this.heroForm.setControl('secretLairs', addressFormArray); + } + // #enddocregion set-addresses + + // #docregion add-lair + addLair() { + this.secretLairs.push(this.fb.group(new Address())); + } + // #enddocregion add-lair +} diff --git a/aio/content/examples/reactive-forms/ts/src/app/hero-detail.component.html b/aio/content/examples/reactive-forms/ts/src/app/hero-detail.component.html new file mode 100644 index 0000000000..8f5b8bf2c8 --- /dev/null +++ b/aio/content/examples/reactive-forms/ts/src/app/hero-detail.component.html @@ -0,0 +1,73 @@ + + + +
    +
    +   + +
    + + + +
    + +
    + +
    +
    + +

    Address #{{i + 1}}

    +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    + +
    + +
    + +
    +

    Super power:

    + + + +
    +
    + +
    +
    + + +

    heroForm value: {{ heroForm.value | json}}

    + + +

    Name change log

    +
    {{name}}
    + diff --git a/aio/content/examples/reactive-forms/ts/src/app/hero-detail.component.ts b/aio/content/examples/reactive-forms/ts/src/app/hero-detail.component.ts new file mode 100644 index 0000000000..a644e54ffb --- /dev/null +++ b/aio/content/examples/reactive-forms/ts/src/app/hero-detail.component.ts @@ -0,0 +1,108 @@ +// #docplaster +// #docregion +import { Component, Input, OnChanges } from '@angular/core'; +import { FormArray, FormBuilder, FormGroup } from '@angular/forms'; + +import { Address, Hero, states } from './data-model'; +// #docregion import-service +import { HeroService } from './hero.service'; +// #enddocregion import-service + +// #docregion metadata +@Component({ + moduleId: module.id, + selector: 'hero-detail', + templateUrl: './hero-detail.component.html' +}) +// #enddocregion metadata +export class HeroDetailComponent implements OnChanges { + @Input() hero: Hero; + + heroForm: FormGroup; + // #docregion log-name-change + nameChangeLog: string[] = []; + // #enddocregion log-name-change + states = states; + + // #docregion ctor + constructor( + private fb: FormBuilder, + private heroService: HeroService) { + + this.createForm(); + this.logNameChange(); + } + // #enddocregion ctor + + createForm() { + this.heroForm = this.fb.group({ + name: '', + secretLairs: this.fb.array([]), + power: '', + sidekick: '' + }); + } + + ngOnChanges() { + this.heroForm.reset({ + name: this.hero.name + }); + this.setAddresses(this.hero.addresses); + } + + get secretLairs(): FormArray { + return this.heroForm.get('secretLairs') as FormArray; + }; + + setAddresses(addresses: Address[]) { + const addressFGs = addresses.map(address => this.fb.group(address)); + const addressFormArray = this.fb.array(addressFGs); + this.heroForm.setControl('secretLairs', addressFormArray); + } + + addLair() { + this.secretLairs.push(this.fb.group(new Address())); + } + + // #docregion on-submit + onSubmit() { + this.hero = this.prepareSaveHero(); + this.heroService.updateHero(this.hero).subscribe(/* error handling */); + this.ngOnChanges(); + } + // #enddocregion on-submit + + // #docregion prepare-save-hero + prepareSaveHero(): Hero { + const formModel = this.heroForm.value; + + // deep copy of form model lairs + const secretLairsDeepCopy: Address[] = formModel.secretLairs.map( + (address: Address) => Object.assign({}, address) + ); + + // return new `Hero` object containing a combination of original hero value(s) + // and deep copies of changed form model values + const saveHero: Hero = { + id: this.hero.id, + name: formModel.name as string, + // addresses: formModel.secretLairs // <-- bad! + addresses: secretLairsDeepCopy + }; + return saveHero; + } + // #enddocregion prepare-save-hero + + // #docregion revert + revert() { this.ngOnChanges(); } + // #enddocregion revert + + // #docregion log-name-change + logNameChange() { + const nameControl = this.heroForm.get('name'); + nameControl.valueChanges.forEach( + (value: string) => this.nameChangeLog.push(value) + ); + } + // #enddocregion log-name-change +} diff --git a/aio/content/examples/reactive-forms/ts/src/app/hero-list.component.1.html b/aio/content/examples/reactive-forms/ts/src/app/hero-list.component.1.html new file mode 100644 index 0000000000..fa76c84f54 --- /dev/null +++ b/aio/content/examples/reactive-forms/ts/src/app/hero-list.component.1.html @@ -0,0 +1,8 @@ + + + +
    + +
    diff --git a/aio/content/examples/reactive-forms/ts/src/app/hero-list.component.html b/aio/content/examples/reactive-forms/ts/src/app/hero-list.component.html new file mode 100644 index 0000000000..d0fb2ee920 --- /dev/null +++ b/aio/content/examples/reactive-forms/ts/src/app/hero-list.component.html @@ -0,0 +1,17 @@ + +

    Loading heroes ...

    +

    Select a hero:

    + + + +
    +
    +

    Hero Detail

    +

    Editing: {{selectedHero.name}}

    + + + +
    diff --git a/aio/content/examples/reactive-forms/ts/src/app/hero-list.component.ts b/aio/content/examples/reactive-forms/ts/src/app/hero-list.component.ts new file mode 100644 index 0000000000..58fb2e7991 --- /dev/null +++ b/aio/content/examples/reactive-forms/ts/src/app/hero-list.component.ts @@ -0,0 +1,32 @@ +// #docregion +import { Component, OnInit } from '@angular/core'; +import { Observable } from 'rxjs/Observable'; +import 'rxjs/add/operator/finally'; + +import { Hero } from './data-model'; +import { HeroService } from './hero.service'; + +@Component({ + moduleId: module.id, + selector: 'hero-list', + templateUrl: 'hero-list.component.html' +}) +export class HeroListComponent implements OnInit { + heroes: Observable; + isLoading = false; + selectedHero: Hero; + + constructor(private heroService: HeroService) { } + + ngOnInit() { this.getHeroes(); } + + getHeroes() { + this.isLoading = true; + this.heroes = this.heroService.getHeroes() + // Todo: error handling + .finally(() => this.isLoading = false); + this.selectedHero = undefined; + } + + select(hero: Hero) { this.selectedHero = hero; } +} diff --git a/aio/content/examples/reactive-forms/ts/src/app/hero.service.ts b/aio/content/examples/reactive-forms/ts/src/app/hero.service.ts new file mode 100644 index 0000000000..6600586de7 --- /dev/null +++ b/aio/content/examples/reactive-forms/ts/src/app/hero.service.ts @@ -0,0 +1,26 @@ +// #docregion +import { Injectable } from '@angular/core'; + +import { Observable } from 'rxjs/Observable'; +import { of } from 'rxjs/observable/of'; +import 'rxjs/add/operator/delay'; + +import { Hero, heroes } from './data-model'; + +@Injectable() +export class HeroService { + + delayMs = 500; + + // Fake server get; assume nothing can go wrong + getHeroes(): Observable { + return of(heroes).delay(this.delayMs); // simulate latency with delay + } + + // Fake server update; assume nothing can go wrong + updateHero(hero: Hero): Observable { + const oldHero = heroes.find(h => h.id === hero.id); + const newHero = Object.assign(oldHero, hero); // Demo: mutate cached hero + return of(newHero).delay(this.delayMs); // simulate latency with delay + } +} diff --git a/aio/content/examples/reactive-forms/ts/src/index-final.html b/aio/content/examples/reactive-forms/ts/src/index-final.html new file mode 100644 index 0000000000..9ef0a379e0 --- /dev/null +++ b/aio/content/examples/reactive-forms/ts/src/index-final.html @@ -0,0 +1,31 @@ + + + + + Hero Form + + + + + + + + + + + + + + + + + + + + + Loading... + + + diff --git a/aio/content/examples/reactive-forms/ts/src/index.html b/aio/content/examples/reactive-forms/ts/src/index.html new file mode 100644 index 0000000000..802d12f211 --- /dev/null +++ b/aio/content/examples/reactive-forms/ts/src/index.html @@ -0,0 +1,31 @@ + + + + + Hero Form + + + + + + + + + + + + + + + + + + + + + Loading... + + + diff --git a/aio/content/examples/reactive-forms/ts/src/main-final.ts b/aio/content/examples/reactive-forms/ts/src/main-final.ts new file mode 100644 index 0000000000..7572d1f1d3 --- /dev/null +++ b/aio/content/examples/reactive-forms/ts/src/main-final.ts @@ -0,0 +1,5 @@ +// tslint:disable:no-unused-variable +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/reactive-forms/ts/src/main.ts b/aio/content/examples/reactive-forms/ts/src/main.ts new file mode 100644 index 0000000000..f415a71708 --- /dev/null +++ b/aio/content/examples/reactive-forms/ts/src/main.ts @@ -0,0 +1,6 @@ +// tslint:disable:no-unused-variable +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module'; // just the final version +import { DemoModule } from './app/demo.module'; // demo picker + +platformBrowserDynamic().bootstrapModule(DemoModule); // (AppModule); diff --git a/aio/content/examples/router/e2e-spec.ts b/aio/content/examples/router/e2e-spec.ts new file mode 100644 index 0000000000..ed93fa20d7 --- /dev/null +++ b/aio/content/examples/router/e2e-spec.ts @@ -0,0 +1,166 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by, ElementFinder } from 'protractor'; + +describe('Router', function () { + + beforeAll(function () { + browser.get(''); + }); + + function getPageStruct() { + let hrefEles = element.all(by.css('my-app a')); + + return { + hrefs: hrefEles, + routerParent: element(by.css('my-app > ng-component')), + routerTitle: element(by.css('my-app > ng-component > h2')), + + crisisHref: hrefEles.get(0), + crisisList: element.all(by.css('my-app > ng-component > ng-component li')), + crisisDetail: element(by.css('my-app > ng-component > ng-component > ng-component > div')), + crisisDetailTitle: element(by.css('my-app > ng-component > ng-component > ng-component > div > h3')), + + heroesHref: hrefEles.get(1), + heroesList: element.all(by.css('my-app > ng-component li')), + heroDetail: element(by.css('my-app > ng-component > div')), + heroDetailTitle: element(by.css('my-app > ng-component > div > h3')), + + adminHref: hrefEles.get(2), + adminPreloadList: element.all(by.css('my-app > ng-component > ng-component > ul > li')), + + loginHref: hrefEles.get(3), + loginButton: element.all(by.css('my-app > ng-component > p > button')), + + contactHref: hrefEles.get(4), + contactCancelButton: element.all(by.buttonText('Cancel')), + + outletComponents: element.all(by.css('my-app > ng-component')) + }; + } + + it('should be able to see the start screen', function () { + let page = getPageStruct(); + expect(page.hrefs.count()).toEqual(5, 'should be 5 dashboard choices'); + expect(page.crisisHref.getText()).toEqual('Crisis Center'); + expect(page.heroesHref.getText()).toEqual('Heroes'); + expect(page.adminHref.getText()).toEqual('Admin'); + expect(page.loginHref.getText()).toEqual('Login'); + expect(page.contactHref.getText()).toEqual('Contact'); + }); + + it('should be able to see crises center items', function () { + let page = getPageStruct(); + page.crisisHref.click().then(function() { + expect(page.crisisList.count()).toBe(4, 'should be 4 crisis center entries at start'); + }); + }); + + it('should be able to see hero items', function () { + let page = getPageStruct(); + page.heroesHref.click().then(function() { + expect(page.routerTitle.getText()).toContain('HEROES'); + expect(page.heroesList.count()).toBe(6, 'should be 6 heroes'); + }); + }); + + it('should be able to toggle the views', function () { + let page = getPageStruct(); + page.crisisHref.click().then(function() { + expect(page.crisisList.count()).toBe(4, 'should be 4 crisis center entries'); + return page.heroesHref.click(); + }).then(function() { + expect(page.heroesList.count()).toBe(6, 'should be 6 heroes'); + }); + }); + + it('should be able to edit and save details from the crisis center view', function () { + let page = getPageStruct(); + page.crisisHref.click().then(function() { + crisisCenterEdit(2, true); + }); + }); + + xit('should be able to edit and cancel details from the crisis center view', function () { + let page = getPageStruct(); + page.crisisHref.click().then(function() { + crisisCenterEdit(3, false); + }); + }); + + it('should be able to edit and save details from the heroes view', function () { + let page = getPageStruct(); + let heroEle: ElementFinder; + let heroText: string; + page.heroesHref.click().then(function() { + heroEle = page.heroesList.get(4); + return heroEle.getText(); + }).then(function(text: string) { + expect(text.length).toBeGreaterThan(0, 'should have some text'); + // remove leading id from text + heroText = text.substr(text.indexOf(' ')).trim(); + return heroEle.click(); + }).then(function() { + expect(page.heroesList.count()).toBe(0, 'should no longer see crisis center entries'); + expect(page.heroDetail.isPresent()).toBe(true, 'should be able to see crisis detail'); + expect(page.heroDetailTitle.getText()).toContain(heroText); + let inputEle = page.heroDetail.element(by.css('input')); + inputEle.sendKeys('-foo'); + expect(page.heroDetailTitle.getText()).toContain(heroText + '-foo'); + let buttonEle = page.heroDetail.element(by.css('button')); + return buttonEle.click(); + }).then(function() { + expect(heroEle.getText()).toContain(heroText + '-foo'); + }); + }); + + it('should be able to see the preloaded modules', function () { + let page = getPageStruct(); + page.loginHref.click().then(function() { + return page.loginButton.click(); + }).then(function() { + expect(page.adminPreloadList.count()).toBe(1, 'should be 1 preloaded module'); + expect(page.adminPreloadList.first().getText()).toBe('crisis-center', 'first preload should be crisis center'); + }); + }); + + it('should be able to see the secondary route', function () { + let page = getPageStruct(); + page.heroesHref.click().then(function() { + return page.contactHref.click(); + }).then(function() { + expect(page.outletComponents.count()).toBe(2, 'should be 2 displayed routes'); + }); + }); + + function crisisCenterEdit(index: number, shouldSave: boolean) { + let page = getPageStruct(); + let crisisEle: ElementFinder; + let crisisText: string; + page.crisisHref.click() + .then(function () { + crisisEle = page.crisisList.get(index); + return crisisEle.getText(); + }).then(function(text: string) { + expect(text.length).toBeGreaterThan(0, 'should have some text'); + // remove leading id from text + crisisText = text.substr(text.indexOf(' ')).trim(); + return crisisEle.click(); + }).then(function () { + expect(page.crisisDetail.isPresent()).toBe(true, 'should be able to see crisis detail'); + expect(page.crisisDetailTitle.getText()).toContain(crisisText); + let inputEle = page.crisisDetail.element(by.css('input')); + inputEle.sendKeys('-foo'); + expect(page.crisisDetailTitle.getText()).toContain(crisisText + '-foo'); + let buttonEle = page.crisisDetail.element(by.cssContainingText('button', shouldSave ? 'Save' : 'Cancel')); + return buttonEle.click(); + }).then(function () { + if (shouldSave) { + expect(crisisEle.getText()).toContain(crisisText + '-foo'); + } else { + expect(crisisEle.getText()).not.toContain(crisisText + '-foo'); + } + }); + } + +}); diff --git a/aio/content/examples/router/ts/example-config.json b/aio/content/examples/router/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/router/ts/plnkr.json b/aio/content/examples/router/ts/plnkr.json new file mode 100644 index 0000000000..23ed1a1606 --- /dev/null +++ b/aio/content/examples/router/ts/plnkr.json @@ -0,0 +1,12 @@ +{ + "description": "Router", + "basePath": "src/", + "files":[ + "!**/*.d.ts", + "!**/*.js", + "!**/*.[0-9].*", + "!app/crisis-list.component.ts", + "!app/hero-list.component.ts" + ], + "tags": ["router"] +} diff --git a/aio/content/examples/router/ts/plnkr.no-link.html b/aio/content/examples/router/ts/plnkr.no-link.html new file mode 100644 index 0000000000..c275a01f14 --- /dev/null +++ b/aio/content/examples/router/ts/plnkr.no-link.html @@ -0,0 +1,1353 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/router/ts/src/app/admin/admin-dashboard.component.1.ts b/aio/content/examples/router/ts/src/app/admin/admin-dashboard.component.1.ts new file mode 100644 index 0000000000..ffa3e3cb8f --- /dev/null +++ b/aio/content/examples/router/ts/src/app/admin/admin-dashboard.component.1.ts @@ -0,0 +1,9 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + template: ` +

    Dashboard

    + ` +}) +export class AdminDashboardComponent { } diff --git a/aio/content/examples/router/ts/src/app/admin/admin-dashboard.component.2.ts b/aio/content/examples/router/ts/src/app/admin/admin-dashboard.component.2.ts new file mode 100644 index 0000000000..8c8e481643 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/admin/admin-dashboard.component.2.ts @@ -0,0 +1,33 @@ +// #docregion +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { Observable } from 'rxjs/Observable'; +import 'rxjs/add/operator/map'; + +@Component({ + template: ` +

    Dashboard

    + +

    Session ID: {{ sessionId | async }}

    + +

    Token: {{ token | async }}

    + ` +}) +export class AdminDashboardComponent implements OnInit { + sessionId: Observable; + token: Observable; + + constructor(private route: ActivatedRoute) {} + + ngOnInit() { + // Capture the session ID if available + this.sessionId = this.route + .queryParams + .map(params => params['session_id'] || 'None'); + + // Capture the fragment if available + this.token = this.route + .fragment + .map(fragment => fragment || 'None'); + } +} diff --git a/aio/content/examples/router/ts/src/app/admin/admin-dashboard.component.ts b/aio/content/examples/router/ts/src/app/admin/admin-dashboard.component.ts new file mode 100644 index 0000000000..b3fc839616 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/admin/admin-dashboard.component.ts @@ -0,0 +1,47 @@ +// #docregion +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { Observable } from 'rxjs/Observable'; + +import { SelectivePreloadingStrategy } from '../selective-preloading-strategy'; + +import 'rxjs/add/operator/map'; + +@Component({ + template: ` +

    Dashboard

    + +

    Session ID: {{ sessionId | async }}

    + +

    Token: {{ token | async }}

    + + Preloaded Modules +
      +
    • {{ module }}
    • +
    + ` +}) +export class AdminDashboardComponent implements OnInit { + sessionId: Observable; + token: Observable; + modules: string[]; + + constructor( + private route: ActivatedRoute, + private preloadStrategy: SelectivePreloadingStrategy + ) { + this.modules = preloadStrategy.preloadedModules; + } + + ngOnInit() { + // Capture the session ID if available + this.sessionId = this.route + .queryParams + .map(params => params['session_id'] || 'None'); + + // Capture the fragment if available + this.token = this.route + .fragment + .map(fragment => fragment || 'None'); + } +} diff --git a/aio/content/examples/router/ts/src/app/admin/admin-routing.module.1.ts b/aio/content/examples/router/ts/src/app/admin/admin-routing.module.1.ts new file mode 100644 index 0000000000..e7d83f113f --- /dev/null +++ b/aio/content/examples/router/ts/src/app/admin/admin-routing.module.1.ts @@ -0,0 +1,39 @@ +// #docplaster +// #docregion +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +import { AdminComponent } from './admin.component'; +import { AdminDashboardComponent } from './admin-dashboard.component'; +import { ManageCrisesComponent } from './manage-crises.component'; +import { ManageHeroesComponent } from './manage-heroes.component'; + +// #docregion admin-routes +const adminRoutes: Routes = [ + { + path: 'admin', + component: AdminComponent, + children: [ + { + path: '', + children: [ + { path: 'crises', component: ManageCrisesComponent }, + { path: 'heroes', component: ManageHeroesComponent }, + { path: '', component: AdminDashboardComponent } + ] + } + ] + } +]; + +@NgModule({ + imports: [ + RouterModule.forChild(adminRoutes) + ], + exports: [ + RouterModule + ] +}) +export class AdminRoutingModule {} +// #enddocregion admin-routes +// #enddocregion diff --git a/aio/content/examples/router/ts/src/app/admin/admin-routing.module.2.ts b/aio/content/examples/router/ts/src/app/admin/admin-routing.module.2.ts new file mode 100644 index 0000000000..d945201afe --- /dev/null +++ b/aio/content/examples/router/ts/src/app/admin/admin-routing.module.2.ts @@ -0,0 +1,44 @@ +// #docplaster +// #docregion +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +import { AdminComponent } from './admin.component'; +import { AdminDashboardComponent } from './admin-dashboard.component'; +import { ManageCrisesComponent } from './manage-crises.component'; +import { ManageHeroesComponent } from './manage-heroes.component'; + +// #docregion admin-route +import { AuthGuard } from '../auth-guard.service'; + +const adminRoutes: Routes = [ + { + path: 'admin', + component: AdminComponent, + canActivate: [AuthGuard], + children: [ + { + path: '', + children: [ + { path: 'crises', component: ManageCrisesComponent }, + { path: 'heroes', component: ManageHeroesComponent }, + { path: '', component: AdminDashboardComponent } + ], + // #enddocregion admin-route + canActivateChild: [AuthGuard] + // #docregion admin-route + } + ] + } +]; + +@NgModule({ + imports: [ + RouterModule.forChild(adminRoutes) + ], + exports: [ + RouterModule + ] +}) +export class AdminRoutingModule {} +// #enddocregion diff --git a/aio/content/examples/router/ts/src/app/admin/admin-routing.module.3.ts b/aio/content/examples/router/ts/src/app/admin/admin-routing.module.3.ts new file mode 100644 index 0000000000..63f1c9aaf4 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/admin/admin-routing.module.3.ts @@ -0,0 +1,43 @@ +// #docplaster +// #docregion +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +import { AdminComponent } from './admin.component'; +import { AdminDashboardComponent } from './admin-dashboard.component'; +import { ManageCrisesComponent } from './manage-crises.component'; +import { ManageHeroesComponent } from './manage-heroes.component'; + +// #docregion admin-route +import { AuthGuard } from '../auth-guard.service'; + +// #docregion can-activate-child +const adminRoutes: Routes = [ + { + path: 'admin', + component: AdminComponent, + canActivate: [AuthGuard], + children: [ + { + path: '', + canActivateChild: [AuthGuard], + children: [ + { path: 'crises', component: ManageCrisesComponent }, + { path: 'heroes', component: ManageHeroesComponent }, + { path: '', component: AdminDashboardComponent } + ] + } + ] + } +]; + +@NgModule({ + imports: [ + RouterModule.forChild(adminRoutes) + ], + exports: [ + RouterModule + ] +}) +export class AdminRoutingModule {} +// #enddocregion diff --git a/aio/content/examples/router/ts/src/app/admin/admin-routing.module.ts b/aio/content/examples/router/ts/src/app/admin/admin-routing.module.ts new file mode 100644 index 0000000000..2b1048d110 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/admin/admin-routing.module.ts @@ -0,0 +1,41 @@ +// #docplaster +// #docregion +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +import { AdminComponent } from './admin.component'; +import { AdminDashboardComponent } from './admin-dashboard.component'; +import { ManageCrisesComponent } from './manage-crises.component'; +import { ManageHeroesComponent } from './manage-heroes.component'; + +import { AuthGuard } from '../auth-guard.service'; + +const adminRoutes: Routes = [ + { + path: '', + component: AdminComponent, + canActivate: [AuthGuard], + children: [ + { + path: '', + canActivateChild: [AuthGuard], + children: [ + { path: 'crises', component: ManageCrisesComponent }, + { path: 'heroes', component: ManageHeroesComponent }, + { path: '', component: AdminDashboardComponent } + ] + } + ] + } +]; + +@NgModule({ + imports: [ + RouterModule.forChild(adminRoutes) + ], + exports: [ + RouterModule + ] +}) +export class AdminRoutingModule {} +// #enddocregion diff --git a/aio/content/examples/router/ts/src/app/admin/admin.component.ts b/aio/content/examples/router/ts/src/app/admin/admin.component.ts new file mode 100644 index 0000000000..30abfa4524 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/admin/admin.component.ts @@ -0,0 +1,17 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + template: ` +

    ADMIN

    + + + ` +}) +export class AdminComponent { +} diff --git a/aio/content/examples/router/ts/src/app/admin/admin.module.ts b/aio/content/examples/router/ts/src/app/admin/admin.module.ts new file mode 100644 index 0000000000..2736f00e1d --- /dev/null +++ b/aio/content/examples/router/ts/src/app/admin/admin.module.ts @@ -0,0 +1,24 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +import { AdminComponent } from './admin.component'; +import { AdminDashboardComponent } from './admin-dashboard.component'; +import { ManageCrisesComponent } from './manage-crises.component'; +import { ManageHeroesComponent } from './manage-heroes.component'; + +import { AdminRoutingModule } from './admin-routing.module'; + +@NgModule({ + imports: [ + CommonModule, + AdminRoutingModule + ], + declarations: [ + AdminComponent, + AdminDashboardComponent, + ManageCrisesComponent, + ManageHeroesComponent + ] +}) +export class AdminModule {} diff --git a/aio/content/examples/router/ts/src/app/admin/manage-crises.component.ts b/aio/content/examples/router/ts/src/app/admin/manage-crises.component.ts new file mode 100644 index 0000000000..d3176563eb --- /dev/null +++ b/aio/content/examples/router/ts/src/app/admin/manage-crises.component.ts @@ -0,0 +1,9 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + template: ` +

    Manage your crises here

    + ` +}) +export class ManageCrisesComponent { } diff --git a/aio/content/examples/router/ts/src/app/admin/manage-heroes.component.ts b/aio/content/examples/router/ts/src/app/admin/manage-heroes.component.ts new file mode 100644 index 0000000000..7f3a39893d --- /dev/null +++ b/aio/content/examples/router/ts/src/app/admin/manage-heroes.component.ts @@ -0,0 +1,9 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + template: ` +

    Manage your heroes here

    + ` +}) +export class ManageHeroesComponent { } diff --git a/aio/content/examples/router/ts/src/app/animations.ts b/aio/content/examples/router/ts/src/app/animations.ts new file mode 100644 index 0000000000..d7a55d721f --- /dev/null +++ b/aio/content/examples/router/ts/src/app/animations.ts @@ -0,0 +1,26 @@ +// #docregion +import { animate, AnimationEntryMetadata, state, style, transition, trigger } from '@angular/core'; + +// Component transition animations +export const slideInDownAnimation: AnimationEntryMetadata = + trigger('routeAnimation', [ + state('*', + style({ + opacity: 1, + transform: 'translateX(0)' + }) + ), + transition(':enter', [ + style({ + opacity: 0, + transform: 'translateX(-100%)' + }), + animate('0.2s ease-in') + ]), + transition(':leave', [ + animate('0.5s ease-out', style({ + opacity: 0, + transform: 'translateY(100%)' + })) + ]) + ]); diff --git a/aio/content/examples/router/ts/src/app/app-routing.module.1.ts b/aio/content/examples/router/ts/src/app/app-routing.module.1.ts new file mode 100644 index 0000000000..8146e54671 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/app-routing.module.1.ts @@ -0,0 +1,26 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +import { CrisisListComponent } from './crisis-list.component'; +import { HeroListComponent } from './hero-list.component'; +import { PageNotFoundComponent } from './not-found.component'; + +// #docregion appRoutes +const appRoutes: Routes = [ + { path: 'crisis-center', component: CrisisListComponent }, + { path: 'heroes', component: HeroListComponent }, + { path: '', redirectTo: '/heroes', pathMatch: 'full' }, + { path: '**', component: PageNotFoundComponent } +]; +// #enddocregion appRoutes + +@NgModule({ + imports: [ + RouterModule.forRoot(appRoutes) + ], + exports: [ + RouterModule + ] +}) +export class AppRoutingModule {} diff --git a/aio/content/examples/router/ts/src/app/app-routing.module.2.ts b/aio/content/examples/router/ts/src/app/app-routing.module.2.ts new file mode 100644 index 0000000000..42ac84a481 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/app-routing.module.2.ts @@ -0,0 +1,24 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +import { CrisisListComponent } from './crisis-list.component'; +// import { HeroListComponent } from './hero-list.component'; // <-- delete this line +import { PageNotFoundComponent } from './not-found.component'; + +const appRoutes: Routes = [ + { path: 'crisis-center', component: CrisisListComponent }, + // { path: 'heroes', component: HeroListComponent }, // <-- delete this line + { path: '', redirectTo: '/heroes', pathMatch: 'full' }, + { path: '**', component: PageNotFoundComponent } +]; + +@NgModule({ + imports: [ + RouterModule.forRoot(appRoutes) + ], + exports: [ + RouterModule + ] +}) +export class AppRoutingModule {} diff --git a/aio/content/examples/router/ts/src/app/app-routing.module.3.ts b/aio/content/examples/router/ts/src/app/app-routing.module.3.ts new file mode 100644 index 0000000000..538ff9aafc --- /dev/null +++ b/aio/content/examples/router/ts/src/app/app-routing.module.3.ts @@ -0,0 +1,31 @@ +// #docplaster +// #docregion , v3 +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +import { ComposeMessageComponent } from './compose-message.component'; +import { PageNotFoundComponent } from './not-found.component'; + +const appRoutes: Routes = [ +// #enddocregion v3 +// #docregion compose + { + path: 'compose', + component: ComposeMessageComponent, + outlet: 'popup' + }, +// #enddocregion compose +// #docregion v3 + { path: '', redirectTo: '/heroes', pathMatch: 'full' }, + { path: '**', component: PageNotFoundComponent } +]; + +@NgModule({ + imports: [ + RouterModule.forRoot(appRoutes) + ], + exports: [ + RouterModule + ] +}) +export class AppRoutingModule {} diff --git a/aio/content/examples/router/ts/src/app/app-routing.module.4.ts b/aio/content/examples/router/ts/src/app/app-routing.module.4.ts new file mode 100644 index 0000000000..6835d24a85 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/app-routing.module.4.ts @@ -0,0 +1,30 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +import { ComposeMessageComponent } from './compose-message.component'; +import { CanDeactivateGuard } from './can-deactivate-guard.service'; +import { PageNotFoundComponent } from './not-found.component'; + +const appRoutes: Routes = [ + { + path: 'compose', + component: ComposeMessageComponent, + outlet: 'popup' + }, + { path: '', redirectTo: '/heroes', pathMatch: 'full' }, + { path: '**', component: PageNotFoundComponent } +]; + +@NgModule({ + imports: [ + RouterModule.forRoot(appRoutes) + ], + exports: [ + RouterModule + ], + providers: [ + CanDeactivateGuard + ] +}) +export class AppRoutingModule {} diff --git a/aio/content/examples/router/ts/src/app/app-routing.module.5.ts b/aio/content/examples/router/ts/src/app/app-routing.module.5.ts new file mode 100644 index 0000000000..2badf7f593 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/app-routing.module.5.ts @@ -0,0 +1,45 @@ +// #docplaster +// #docregion +import { NgModule } from '@angular/core'; +// #docregion import-router +import { RouterModule, Routes } from '@angular/router'; +// #enddocregion import-router + +import { ComposeMessageComponent } from './compose-message.component'; +import { PageNotFoundComponent } from './not-found.component'; + +import { CanDeactivateGuard } from './can-deactivate-guard.service'; +import { AuthGuard } from './auth-guard.service'; + + +const appRoutes: Routes = [ + { + path: 'compose', + component: ComposeMessageComponent, + outlet: 'popup' + }, +// #docregion admin, admin-1 + { + path: 'admin', + loadChildren: 'app/admin/admin.module#AdminModule', +// #enddocregion admin-1 + canLoad: [AuthGuard] +// #docregion admin-1 + }, +// #enddocregion admin, admin-1 + { path: '', redirectTo: '/heroes', pathMatch: 'full' }, + { path: '**', component: PageNotFoundComponent } +]; + +@NgModule({ + imports: [ + RouterModule.forRoot(appRoutes) + ], + exports: [ + RouterModule + ], + providers: [ + CanDeactivateGuard + ] +}) +export class AppRoutingModule {} diff --git a/aio/content/examples/router/ts/src/app/app-routing.module.6.ts b/aio/content/examples/router/ts/src/app/app-routing.module.6.ts new file mode 100644 index 0000000000..df2c8c097d --- /dev/null +++ b/aio/content/examples/router/ts/src/app/app-routing.module.6.ts @@ -0,0 +1,54 @@ +// #docplaster +// #docregion, preload-v1 +import { NgModule } from '@angular/core'; +import { + RouterModule, Routes, +// #enddocregion preload-v1 + PreloadAllModules +// #docregion preload-v1 +} from '@angular/router'; + +import { ComposeMessageComponent } from './compose-message.component'; +import { PageNotFoundComponent } from './not-found.component'; + +import { CanDeactivateGuard } from './can-deactivate-guard.service'; +import { AuthGuard } from './auth-guard.service'; + +const appRoutes: Routes = [ + { + path: 'compose', + component: ComposeMessageComponent, + outlet: 'popup' + }, + { + path: 'admin', + loadChildren: 'app/admin/admin.module#AdminModule', + canLoad: [AuthGuard] + }, + { + path: 'crisis-center', + loadChildren: 'app/crisis-center/crisis-center.module#CrisisCenterModule' + }, + { path: '', redirectTo: '/heroes', pathMatch: 'full' }, + { path: '**', component: PageNotFoundComponent } +]; + +@NgModule({ + imports: [ + // #docregion forRoot + RouterModule.forRoot( + appRoutes + // #enddocregion preload-v1 + , { preloadingStrategy: PreloadAllModules } + // #docregion preload-v1 + ) + // #enddocregion forRoot + ], + exports: [ + RouterModule + ], + providers: [ + CanDeactivateGuard + ] +}) +export class AppRoutingModule {} diff --git a/aio/content/examples/router/ts/src/app/app-routing.module.ts b/aio/content/examples/router/ts/src/app/app-routing.module.ts new file mode 100644 index 0000000000..cc01ced890 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/app-routing.module.ts @@ -0,0 +1,50 @@ +// #docplaster +// #docregion, preload-v1 +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +import { ComposeMessageComponent } from './compose-message.component'; +import { PageNotFoundComponent } from './not-found.component'; + +import { CanDeactivateGuard } from './can-deactivate-guard.service'; +import { AuthGuard } from './auth-guard.service'; +import { SelectivePreloadingStrategy } from './selective-preloading-strategy'; + +const appRoutes: Routes = [ + { + path: 'compose', + component: ComposeMessageComponent, + outlet: 'popup' + }, + { + path: 'admin', + loadChildren: 'app/admin/admin.module#AdminModule', + canLoad: [AuthGuard] + }, + // #docregion preload-v2 + { + path: 'crisis-center', + loadChildren: 'app/crisis-center/crisis-center.module#CrisisCenterModule', + data: { preload: true } + }, + // #enddocregion preload-v2 + { path: '', redirectTo: '/heroes', pathMatch: 'full' }, + { path: '**', component: PageNotFoundComponent } +]; + +@NgModule({ + imports: [ + RouterModule.forRoot( + appRoutes, + { preloadingStrategy: SelectivePreloadingStrategy } + ) + ], + exports: [ + RouterModule + ], + providers: [ + CanDeactivateGuard, + SelectivePreloadingStrategy + ] +}) +export class AppRoutingModule { } diff --git a/aio/content/examples/router/ts/src/app/app.component.1.ts b/aio/content/examples/router/ts/src/app/app.component.1.ts new file mode 100644 index 0000000000..21e9aa417d --- /dev/null +++ b/aio/content/examples/router/ts/src/app/app.component.1.ts @@ -0,0 +1,18 @@ +/* First version */ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'my-app', + // #docregion template + template: ` +

    Angular Router

    + + + ` + // #enddocregion template +}) +export class AppComponent { } diff --git a/aio/content/examples/router/ts/src/app/app.component.2.ts b/aio/content/examples/router/ts/src/app/app.component.2.ts new file mode 100644 index 0000000000..ffd4d8dfae --- /dev/null +++ b/aio/content/examples/router/ts/src/app/app.component.2.ts @@ -0,0 +1,16 @@ +/* Second Heroes version */ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'my-app', + template: ` +

    Angular Router

    + + + ` +}) +export class AppComponent { } diff --git a/aio/content/examples/router/ts/src/app/app.component.3.ts b/aio/content/examples/router/ts/src/app/app.component.3.ts new file mode 100644 index 0000000000..6013df6321 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/app.component.3.ts @@ -0,0 +1,48 @@ +/* tslint:disable:no-unused-variable */ +// #docplaster +import { Component } from '@angular/core'; +import { Router } from '@angular/router'; + +@Component({ + selector: 'my-app', + /* Typical link + // #docregion h-anchor + Heroes + // #enddocregion h-anchor + */ + /* Incomplete Crisis Center link when CC lacks a default + // #docregion cc-anchor-fail + // The link now fails with a "non-terminal link" error + // #docregion cc-anchor-w-default + Crisis Center + // #enddocregion cc-anchor-w-default + // #enddocregion cc-anchor-fail + */ + /* Crisis Center link when CC lacks a default + // #docregion cc-anchor-no-default + Crisis Center + // #enddocregion cc-anchor-no-default + */ + /* Crisis Center Detail link + // #docregion Dragon-anchor + Dragon Crisis + // #enddocregion Dragon-anchor + */ + /* Crisis Center link with optional query params + // #docregion cc-query-params + Crisis Center + // #enddocregion cc-query-params + */ +// #docregion template + template: ` +

    Angular Router

    + + + ` +// #enddocregion template +}) +export class AppComponent { } diff --git a/aio/content/examples/router/ts/src/app/app.component.4.ts b/aio/content/examples/router/ts/src/app/app.component.4.ts new file mode 100644 index 0000000000..a630703c28 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/app.component.4.ts @@ -0,0 +1,23 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'my-app', + // #docregion template + template: ` +

    Angular Router

    + + // #docregion outlets + + + // #enddocregion outlets + ` + // #enddocregion template +}) +export class AppComponent { } diff --git a/aio/content/examples/router/ts/src/app/app.component.5.ts b/aio/content/examples/router/ts/src/app/app.component.5.ts new file mode 100644 index 0000000000..24162c6136 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/app.component.5.ts @@ -0,0 +1,20 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'my-app', + // #docregion template + template: ` +

    Angular Router

    + + + + ` + // #enddocregion template +}) +export class AppComponent { } diff --git a/aio/content/examples/router/ts/src/app/app.component.ts b/aio/content/examples/router/ts/src/app/app.component.ts new file mode 100644 index 0000000000..a479680cbe --- /dev/null +++ b/aio/content/examples/router/ts/src/app/app.component.ts @@ -0,0 +1,23 @@ +// #docplaster +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'my-app', + // #docregion template + template: ` +

    Angular Router

    + + + + ` + // #enddocregion template +}) +export class AppComponent { +} diff --git a/aio/content/examples/router/ts/src/app/app.module.0.ts b/aio/content/examples/router/ts/src/app/app.module.0.ts new file mode 100644 index 0000000000..a195dbdd7a --- /dev/null +++ b/aio/content/examples/router/ts/src/app/app.module.0.ts @@ -0,0 +1,41 @@ +// NEVER USED. For docs only. Should compile though +// #docplaster +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +import { HeroListComponent } from './hero-list.component'; +import { CrisisListComponent } from './crisis-list.component'; +import { PageNotFoundComponent } from './not-found.component'; +import { PageNotFoundComponent as HeroDetailComponent } from './not-found.component'; + +// #docregion +const appRoutes: Routes = [ + { path: 'crisis-center', component: CrisisListComponent }, + { path: 'hero/:id', component: HeroDetailComponent }, + { + path: 'heroes', + component: HeroListComponent, + data: { title: 'Heroes List' } + }, + { path: '', + redirectTo: '/heroes', + pathMatch: 'full' + }, + { path: '**', component: PageNotFoundComponent } +]; + +@NgModule({ + imports: [ + RouterModule.forRoot(appRoutes) + // other imports here + ], +// #enddocregion +/* +// #docregion + ... +}) +export class AppModule { } +// #enddocregion +*/ +}) +export class AppModule0 { } diff --git a/aio/content/examples/router/ts/src/app/app.module.1.ts b/aio/content/examples/router/ts/src/app/app.module.1.ts new file mode 100644 index 0000000000..32f93b8f79 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/app.module.1.ts @@ -0,0 +1,49 @@ +// #docplaster +// #docregion +// #docregion first-config +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { FormsModule } from '@angular/forms'; +// #docregion import-router +import { RouterModule, Routes } from '@angular/router'; +// #enddocregion import-router + +import { AppComponent } from './app.component'; +import { CrisisListComponent } from './crisis-list.component'; +import { HeroListComponent } from './hero-list.component'; +// #enddocregion first-config +import { PageNotFoundComponent } from './not-found.component'; +// #docregion first-config + +// #docregion appRoutes +const appRoutes: Routes = [ + { path: 'crisis-center', component: CrisisListComponent }, + { path: 'heroes', component: HeroListComponent }, +// #enddocregion first-config + + { path: '', redirectTo: '/heroes', pathMatch: 'full' }, +// #docregion wildcard + { path: '**', component: PageNotFoundComponent } +// #enddocregion wildcard +// #docregion first-config +]; +// #enddocregion appRoutes + +@NgModule({ + imports: [ + BrowserModule, + FormsModule, + RouterModule.forRoot(appRoutes) + ], + declarations: [ + AppComponent, + HeroListComponent, + CrisisListComponent, +// #enddocregion first-config + PageNotFoundComponent +// #docregion first-config + ], + bootstrap: [ AppComponent ] +}) +export class AppModule { } +// #enddocregion diff --git a/aio/content/examples/router/ts/src/app/app.module.2.ts b/aio/content/examples/router/ts/src/app/app.module.2.ts new file mode 100644 index 0000000000..2ba739168c --- /dev/null +++ b/aio/content/examples/router/ts/src/app/app.module.2.ts @@ -0,0 +1,31 @@ +// #docplaster +// #docregion +// #docregion hero-import +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { FormsModule } from '@angular/forms'; + +import { AppComponent } from './app.component'; +import { AppRoutingModule } from './app-routing.module'; + +import { CrisisListComponent } from './crisis-list.component'; +import { HeroListComponent } from './hero-list.component'; +import { PageNotFoundComponent } from './not-found.component'; + +@NgModule({ + imports: [ + BrowserModule, + FormsModule, + AppRoutingModule + ], + declarations: [ + AppComponent, + HeroListComponent, + CrisisListComponent, + PageNotFoundComponent + ], + bootstrap: [ AppComponent ] +}) +// #enddocregion hero-import +export class AppModule { } +// #enddocregion diff --git a/aio/content/examples/router/ts/src/app/app.module.3.ts b/aio/content/examples/router/ts/src/app/app.module.3.ts new file mode 100644 index 0000000000..862faf1c51 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/app.module.3.ts @@ -0,0 +1,29 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { FormsModule } from '@angular/forms'; + +import { AppComponent } from './app.component'; +import { AppRoutingModule } from './app-routing.module'; +import { HeroesModule } from './heroes/heroes.module'; + +import { CrisisListComponent } from './crisis-list.component'; +import { PageNotFoundComponent } from './not-found.component'; + +@NgModule({ +// #docregion module-imports + imports: [ + BrowserModule, + FormsModule, + HeroesModule, + AppRoutingModule + ], +// #enddocregion module-imports + declarations: [ + AppComponent, + CrisisListComponent, + PageNotFoundComponent + ], + bootstrap: [ AppComponent ] +}) +export class AppModule { } diff --git a/aio/content/examples/router/ts/src/app/app.module.4.ts b/aio/content/examples/router/ts/src/app/app.module.4.ts new file mode 100644 index 0000000000..4825572361 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/app.module.4.ts @@ -0,0 +1,46 @@ +// #docplaster +// #docregion +// #docregion crisis-center-module, admin-module +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; + +import { AppComponent } from './app.component'; +import { PageNotFoundComponent } from './not-found.component'; + +import { AppRoutingModule } from './app-routing.module'; +import { HeroesModule } from './heroes/heroes.module'; +import { CrisisCenterModule } from './crisis-center/crisis-center.module'; +// #enddocregion crisis-center-module, admin-module +import { ComposeMessageComponent } from './compose-message.component'; +// #docregion admin-module +import { AdminModule } from './admin/admin.module'; +// #docregion crisis-center-module + +import { DialogService } from './dialog.service'; + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + HeroesModule, + CrisisCenterModule, +// #enddocregion crisis-center-module + AdminModule, +// #docregion crisis-center-module + AppRoutingModule + ], + declarations: [ + AppComponent, +// #enddocregion admin-module, crisis-center-module + ComposeMessageComponent, +// #docregion admin-module, crisis-center-module + PageNotFoundComponent + ], + providers: [ + DialogService + ], + bootstrap: [ AppComponent ] +}) +export class AppModule { } +// #enddocregion diff --git a/aio/content/examples/router/ts/src/app/app.module.5.ts b/aio/content/examples/router/ts/src/app/app.module.5.ts new file mode 100644 index 0000000000..ad34668cea --- /dev/null +++ b/aio/content/examples/router/ts/src/app/app.module.5.ts @@ -0,0 +1,38 @@ +// #docplaster +// #docregion +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; + +import { AppComponent } from './app.component'; +import { AppRoutingModule } from './app-routing.module'; + +import { HeroesModule } from './heroes/heroes.module'; +import { CrisisCenterModule } from './crisis-center/crisis-center.module'; + +import { ComposeMessageComponent } from './compose-message.component'; +import { PageNotFoundComponent } from './not-found.component'; + +import { AdminModule } from './admin/admin.module'; +import { DialogService } from './dialog.service'; + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + HeroesModule, + CrisisCenterModule, + AdminModule, + AppRoutingModule + ], + declarations: [ + AppComponent, + ComposeMessageComponent, + PageNotFoundComponent + ], + providers: [ + DialogService + ], + bootstrap: [ AppComponent ] +}) +export class AppModule { } diff --git a/aio/content/examples/router/ts/src/app/app.module.6.ts b/aio/content/examples/router/ts/src/app/app.module.6.ts new file mode 100644 index 0000000000..4cb0b1fdd5 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/app.module.6.ts @@ -0,0 +1,29 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { FormsModule } from '@angular/forms'; +import { Routes, RouterModule } from '@angular/router'; + +import { AppComponent } from './app.component'; +import { PageNotFoundComponent } from './not-found.component'; + +const routes: Routes = [ + +]; + +@NgModule({ + imports: [ + BrowserModule, + FormsModule, + RouterModule.forRoot(routes, { useHash: true }) // .../#/crisis-center/ + ], + declarations: [ + AppComponent, + PageNotFoundComponent + ], + providers: [ + + ], + bootstrap: [ AppComponent ] +}) +export class AppModule { } diff --git a/aio/content/examples/router/ts/src/app/app.module.7.ts b/aio/content/examples/router/ts/src/app/app.module.7.ts new file mode 100644 index 0000000000..b6ca81ddea --- /dev/null +++ b/aio/content/examples/router/ts/src/app/app.module.7.ts @@ -0,0 +1,38 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { FormsModule } from '@angular/forms'; + +import { AppComponent } from './app.component'; +import { AppRoutingModule } from './app-routing.module'; + +import { HeroesModule } from './heroes/heroes.module'; +import { CrisisCenterModule } from './crisis-center/crisis-center.module'; +import { ComposeMessageComponent } from './compose-message.component'; +import { LoginRoutingModule } from './login-routing.module'; +import { LoginComponent } from './login.component'; +import { PageNotFoundComponent } from './not-found.component'; + +import { DialogService } from './dialog.service'; + +@NgModule({ + imports: [ + BrowserModule, + FormsModule, + HeroesModule, + CrisisCenterModule, + LoginRoutingModule, + AppRoutingModule + ], + declarations: [ + AppComponent, + ComposeMessageComponent, + LoginComponent, + PageNotFoundComponent + ], + providers: [ + DialogService + ], + bootstrap: [ AppComponent ] +}) +export class AppModule { } diff --git a/aio/content/examples/router/ts/src/app/app.module.ts b/aio/content/examples/router/ts/src/app/app.module.ts new file mode 100644 index 0000000000..d580964e52 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/app.module.ts @@ -0,0 +1,47 @@ +// #docplaster +// #docregion +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { FormsModule } from '@angular/forms'; +// #docregion inspect-config +import { Router } from '@angular/router'; + +// #enddocregion inspect-config +import { AppComponent } from './app.component'; +import { AppRoutingModule } from './app-routing.module'; + +import { HeroesModule } from './heroes/heroes.module'; +import { ComposeMessageComponent } from './compose-message.component'; +import { LoginRoutingModule } from './login-routing.module'; +import { LoginComponent } from './login.component'; +import { PageNotFoundComponent } from './not-found.component'; + +import { DialogService } from './dialog.service'; + +@NgModule({ + imports: [ + BrowserModule, + FormsModule, + HeroesModule, + LoginRoutingModule, + AppRoutingModule + ], + declarations: [ + AppComponent, + ComposeMessageComponent, + LoginComponent, + PageNotFoundComponent + ], + providers: [ + DialogService + ], + bootstrap: [ AppComponent ] +}) +// #docregion inspect-config +export class AppModule { + // Diagnostic only: inspect router configuration + constructor(router: Router) { + console.log('Routes: ', JSON.stringify(router.config, undefined, 2)); + } +} +// #enddocregion inspect-config diff --git a/aio/content/examples/router/ts/src/app/auth-guard.service.1.ts b/aio/content/examples/router/ts/src/app/auth-guard.service.1.ts new file mode 100644 index 0000000000..c824bcb208 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/auth-guard.service.1.ts @@ -0,0 +1,11 @@ +// #docregion +import { Injectable } from '@angular/core'; +import { CanActivate } from '@angular/router'; + +@Injectable() +export class AuthGuard implements CanActivate { + canActivate() { + console.log('AuthGuard#canActivate called'); + return true; + } +} diff --git a/aio/content/examples/router/ts/src/app/auth-guard.service.2.ts b/aio/content/examples/router/ts/src/app/auth-guard.service.2.ts new file mode 100644 index 0000000000..8fd00e151a --- /dev/null +++ b/aio/content/examples/router/ts/src/app/auth-guard.service.2.ts @@ -0,0 +1,37 @@ +// #docregion +import { Injectable } from '@angular/core'; +import { + CanActivate, Router, + ActivatedRouteSnapshot, + RouterStateSnapshot +} from '@angular/router'; +import { AuthService } from './auth.service'; + +@Injectable() +export class AuthGuard implements CanActivate { + constructor(private authService: AuthService, private router: Router) {} + + canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { + let url: string = state.url; + + return this.checkLogin(url); + } + + checkLogin(url: string): boolean { + if (this.authService.isLoggedIn) { return true; } + + // Store the attempted URL for redirecting + this.authService.redirectUrl = url; + + // Navigate to the login page with extras + this.router.navigate(['/login']); + return false; + } +} +// #enddocregion + +/* +// #docregion can-load-interface +export class AuthGuard implements CanActivate, CanLoad { +// #enddocregion can-load-interface +*/ diff --git a/aio/content/examples/router/ts/src/app/auth-guard.service.3.ts b/aio/content/examples/router/ts/src/app/auth-guard.service.3.ts new file mode 100644 index 0000000000..dd89006411 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/auth-guard.service.3.ts @@ -0,0 +1,39 @@ +// #docregion +// #docregion can-activate-child +import { Injectable } from '@angular/core'; +import { + CanActivate, Router, + ActivatedRouteSnapshot, + RouterStateSnapshot, + CanActivateChild +} from '@angular/router'; +import { AuthService } from './auth.service'; + +@Injectable() +export class AuthGuard implements CanActivate, CanActivateChild { + constructor(private authService: AuthService, private router: Router) {} + + canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { + let url: string = state.url; + + return this.checkLogin(url); + } + + canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { + return this.canActivate(route, state); + } + +// #enddocregion can-activate-child + checkLogin(url: string): boolean { + if (this.authService.isLoggedIn) { return true; } + + // Store the attempted URL for redirecting + this.authService.redirectUrl = url; + + // Navigate to the login page + this.router.navigate(['/login']); + return false; + } +// #docregion can-activate-child +} +// #enddocregion diff --git a/aio/content/examples/router/ts/src/app/auth-guard.service.4.ts b/aio/content/examples/router/ts/src/app/auth-guard.service.4.ts new file mode 100644 index 0000000000..5d239a8432 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/auth-guard.service.4.ts @@ -0,0 +1,47 @@ +// #docplaster +// #docregion +import { Injectable } from '@angular/core'; +import { + CanActivate, Router, + ActivatedRouteSnapshot, + RouterStateSnapshot, + CanActivateChild, + NavigationExtras +} from '@angular/router'; +import { AuthService } from './auth.service'; + +@Injectable() +export class AuthGuard implements CanActivate, CanActivateChild { + constructor(private authService: AuthService, private router: Router) {} + + canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { + let url: string = state.url; + + return this.checkLogin(url); + } + + canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { + return this.canActivate(route, state); + } + + checkLogin(url: string): boolean { + if (this.authService.isLoggedIn) { return true; } + + // Store the attempted URL for redirecting + this.authService.redirectUrl = url; + + // Create a dummy session id + let sessionId = 123456789; + + // Set our navigation extras object + // that contains our global query params and fragment + let navigationExtras: NavigationExtras = { + queryParams: { 'session_id': sessionId }, + fragment: 'anchor' + }; + + // Navigate to the login page with extras + this.router.navigate(['/login'], navigationExtras); + return false; + } +} diff --git a/aio/content/examples/router/ts/src/app/auth-guard.service.ts b/aio/content/examples/router/ts/src/app/auth-guard.service.ts new file mode 100644 index 0000000000..a32b5cc2b8 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/auth-guard.service.ts @@ -0,0 +1,56 @@ +// #docplaster +import { Injectable } from '@angular/core'; +import { + CanActivate, Router, + ActivatedRouteSnapshot, + RouterStateSnapshot, + CanActivateChild, + NavigationExtras, + CanLoad, Route +} from '@angular/router'; +import { AuthService } from './auth.service'; + +@Injectable() +export class AuthGuard implements CanActivate, CanActivateChild, CanLoad { + constructor(private authService: AuthService, private router: Router) {} + + canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { + let url: string = state.url; + + return this.checkLogin(url); + } + + canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { + return this.canActivate(route, state); + } + +// #docregion, canLoad + canLoad(route: Route): boolean { + let url = `/${route.path}`; + + return this.checkLogin(url); + } +// #enddocregion canLoad + + checkLogin(url: string): boolean { + if (this.authService.isLoggedIn) { return true; } + + // Store the attempted URL for redirecting + this.authService.redirectUrl = url; + + // Create a dummy session id + let sessionId = 123456789; + + // Set our navigation extras object + // that contains our global query params and fragment + let navigationExtras: NavigationExtras = { + queryParams: { 'session_id': sessionId }, + fragment: 'anchor' + }; + + // Navigate to the login page with extras + this.router.navigate(['/login'], navigationExtras); + return false; + } +// #docregion admin-can-load +} diff --git a/aio/content/examples/router/ts/src/app/auth.service.ts b/aio/content/examples/router/ts/src/app/auth.service.ts new file mode 100644 index 0000000000..f86a80ebfe --- /dev/null +++ b/aio/content/examples/router/ts/src/app/auth.service.ts @@ -0,0 +1,23 @@ +// #docregion +import { Injectable } from '@angular/core'; + +import { Observable } from 'rxjs/Observable'; +import 'rxjs/add/observable/of'; +import 'rxjs/add/operator/do'; +import 'rxjs/add/operator/delay'; + +@Injectable() +export class AuthService { + isLoggedIn: boolean = false; + + // store the URL so we can redirect after logging in + redirectUrl: string; + + login(): Observable { + return Observable.of(true).delay(1000).do(val => this.isLoggedIn = true); + } + + logout(): void { + this.isLoggedIn = false; + } +} diff --git a/aio/content/examples/router/ts/src/app/can-deactivate-guard.service.1.ts b/aio/content/examples/router/ts/src/app/can-deactivate-guard.service.1.ts new file mode 100644 index 0000000000..0b7c8247cf --- /dev/null +++ b/aio/content/examples/router/ts/src/app/can-deactivate-guard.service.1.ts @@ -0,0 +1,31 @@ +// #docregion +import { Injectable } from '@angular/core'; +import { CanDeactivate, + ActivatedRouteSnapshot, + RouterStateSnapshot } from '@angular/router'; + +import { CrisisDetailComponent } from './crisis-center/crisis-detail.component'; + +@Injectable() +export class CanDeactivateGuard implements CanDeactivate { + + canDeactivate( + component: CrisisDetailComponent, + route: ActivatedRouteSnapshot, + state: RouterStateSnapshot + ): Promise | boolean { + // Get the Crisis Center ID + console.log(route.params['id']); + + // Get the current URL + console.log(state.url); + + // Allow synchronous navigation (`true`) if no crisis or the crisis is unchanged + if (!component.crisis || component.crisis.name === component.editName) { + return true; + } + // Otherwise ask the user with the dialog service and return its + // promise which resolves to true or false when the user decides + return component.dialogService.confirm('Discard changes?'); + } +} diff --git a/aio/content/examples/router/ts/src/app/can-deactivate-guard.service.ts b/aio/content/examples/router/ts/src/app/can-deactivate-guard.service.ts new file mode 100644 index 0000000000..44da69f9c7 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/can-deactivate-guard.service.ts @@ -0,0 +1,15 @@ +// #docregion +import { Injectable } from '@angular/core'; +import { CanDeactivate } from '@angular/router'; +import { Observable } from 'rxjs/Observable'; + +export interface CanComponentDeactivate { + canDeactivate: () => Observable | Promise | boolean; +} + +@Injectable() +export class CanDeactivateGuard implements CanDeactivate { + canDeactivate(component: CanComponentDeactivate) { + return component.canDeactivate ? component.canDeactivate() : true; + } +} diff --git a/aio/content/examples/router/ts/src/app/compose-message.component.html b/aio/content/examples/router/ts/src/app/compose-message.component.html new file mode 100644 index 0000000000..f0b964e6ac --- /dev/null +++ b/aio/content/examples/router/ts/src/app/compose-message.component.html @@ -0,0 +1,17 @@ + +

    Contact Crisis Center

    +
    + {{ details }} +
    +
    +
    + +
    +
    + +
    +
    +

    + + +

    diff --git a/aio/content/examples/router/ts/src/app/compose-message.component.ts b/aio/content/examples/router/ts/src/app/compose-message.component.ts new file mode 100644 index 0000000000..38fd47fded --- /dev/null +++ b/aio/content/examples/router/ts/src/app/compose-message.component.ts @@ -0,0 +1,44 @@ +// #docregion +import { Component, HostBinding } from '@angular/core'; +import { Router } from '@angular/router'; + +import { slideInDownAnimation } from './animations'; + +@Component({ + moduleId: module.id, + templateUrl: './compose-message.component.html', + styles: [ ':host { position: relative; bottom: 10%; }' ], + animations: [ slideInDownAnimation ] +}) +export class ComposeMessageComponent { + @HostBinding('@routeAnimation') routeAnimation = true; + @HostBinding('style.display') display = 'block'; + @HostBinding('style.position') position = 'absolute'; + + details: string; + sending: boolean = false; + + constructor(private router: Router) {} + + send() { + this.sending = true; + this.details = 'Sending Message...'; + + setTimeout(() => { + this.sending = false; + this.closePopup(); + }, 1000); + } + + cancel() { + this.closePopup(); + } + + // #docregion closePopup + closePopup() { + // Providing a `null` value to the named outlet + // clears the contents of the named outlet + this.router.navigate([{ outlets: { popup: null }}]); + } + // #enddocregion closePopup +} diff --git a/aio/content/examples/router/ts/src/app/crisis-center/crisis-center-home.component.ts b/aio/content/examples/router/ts/src/app/crisis-center/crisis-center-home.component.ts new file mode 100644 index 0000000000..a71d485c02 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/crisis-center/crisis-center-home.component.ts @@ -0,0 +1,13 @@ +// #docregion +// #docplaster +import { Component } from '@angular/core'; + +// #docregion minus-imports +@Component({ + template: ` +

    Welcome to the Crisis Center

    + ` +}) +export class CrisisCenterHomeComponent { } +// #enddocregion minus-imports +// #enddocregion diff --git a/aio/content/examples/router/ts/src/app/crisis-center/crisis-center-routing.module.1.ts b/aio/content/examples/router/ts/src/app/crisis-center/crisis-center-routing.module.1.ts new file mode 100644 index 0000000000..e646f467d1 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/crisis-center/crisis-center-routing.module.1.ts @@ -0,0 +1,44 @@ +// #docplaster +// #docregion +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +import { CrisisCenterHomeComponent } from './crisis-center-home.component'; +import { CrisisListComponent } from './crisis-list.component'; +import { CrisisCenterComponent } from './crisis-center.component'; +import { CrisisDetailComponent } from './crisis-detail.component'; + +// #docregion routes +const crisisCenterRoutes: Routes = [ + { + path: 'crisis-center', + component: CrisisCenterComponent, + children: [ + { + path: '', + component: CrisisListComponent, + children: [ + { + path: ':id', + component: CrisisDetailComponent + }, + { + path: '', + component: CrisisCenterHomeComponent + } + ] + } + ] + } +]; + +@NgModule({ + imports: [ + RouterModule.forChild(crisisCenterRoutes) + ], + exports: [ + RouterModule + ] +}) +export class CrisisCenterRoutingModule { } +// #enddocregion diff --git a/aio/content/examples/router/ts/src/app/crisis-center/crisis-center-routing.module.2.ts b/aio/content/examples/router/ts/src/app/crisis-center/crisis-center-routing.module.2.ts new file mode 100644 index 0000000000..9e9b514968 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/crisis-center/crisis-center-routing.module.2.ts @@ -0,0 +1,72 @@ +// #docplaster +// #docregion routes +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +import { CrisisCenterHomeComponent } from './crisis-center-home.component'; +import { CrisisListComponent } from './crisis-list.component'; +import { CrisisCenterComponent } from './crisis-center.component'; +import { CrisisDetailComponent } from './crisis-detail.component'; +// #enddocregion routes + +// #docregion can-deactivate-guard +import { CanDeactivateGuard } from '../can-deactivate-guard.service'; +// #enddocregion can-deactivate-guard +// #docregion crisis-detail-resolver +import { CrisisDetailResolver } from './crisis-detail-resolver.service'; + +// #enddocregion crisis-detail-resolver +// #docregion routes + +const crisisCenterRoutes: Routes = [ +// #enddocregion routes + // #docregion redirect, routes + { + path: '', + redirectTo: '/crisis-center', + pathMatch: 'full' + }, + // #enddocregion redirect, routes + // #docregion routes + { + path: 'crisis-center', + component: CrisisCenterComponent, + children: [ + { + path: '', + component: CrisisListComponent, + children: [ + { + path: ':id', + component: CrisisDetailComponent, + // #enddocregion routes + // #docregion can-deactivate-guard + canDeactivate: [CanDeactivateGuard], + // #enddocregion can-deactivate-guard + // #docregion crisis-detail-resolver + resolve: { + crisis: CrisisDetailResolver + } + // #enddocregion crisis-detail-resolver + // #docregion routes + }, + { + path: '', + component: CrisisCenterHomeComponent + } + ] + } + ] + } + // #enddocregion routes +]; + +@NgModule({ + imports: [ + RouterModule.forChild(crisisCenterRoutes) + ], + exports: [ + RouterModule + ] +}) +export class CrisisCenterRoutingModule { } diff --git a/aio/content/examples/router/ts/src/app/crisis-center/crisis-center-routing.module.3.ts b/aio/content/examples/router/ts/src/app/crisis-center/crisis-center-routing.module.3.ts new file mode 100644 index 0000000000..6d605dbe84 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/crisis-center/crisis-center-routing.module.3.ts @@ -0,0 +1,52 @@ +// #docplaster +// #docregion +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +import { CrisisCenterHomeComponent } from './crisis-center-home.component'; +import { CrisisListComponent } from './crisis-list.component'; +import { CrisisCenterComponent } from './crisis-center.component'; +import { CrisisDetailComponent } from './crisis-detail.component'; + +// #docregion can-deactivate-guard +import { CanDeactivateGuard } from '../can-deactivate-guard.service'; + +const crisisCenterRoutes: Routes = [ + { + path: '', + redirectTo: '/crisis-center', + pathMatch: 'full' + }, + { + path: 'crisis-center', + component: CrisisCenterComponent, + children: [ + { + path: '', + component: CrisisListComponent, + children: [ + { + path: ':id', + component: CrisisDetailComponent, + canDeactivate: [CanDeactivateGuard] + }, + { + path: '', + component: CrisisCenterHomeComponent + } + ] + } + ] + } +]; + +@NgModule({ + imports: [ + RouterModule.forChild(crisisCenterRoutes) + ], + exports: [ + RouterModule + ] +}) +export class CrisisCenterRoutingModule { } +// #enddocregion diff --git a/aio/content/examples/router/ts/src/app/crisis-center/crisis-center-routing.module.4.ts b/aio/content/examples/router/ts/src/app/crisis-center/crisis-center-routing.module.4.ts new file mode 100644 index 0000000000..b7ac88e852 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/crisis-center/crisis-center-routing.module.4.ts @@ -0,0 +1,65 @@ +// #docplaster +// #docregion +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +import { CrisisCenterHomeComponent } from './crisis-center-home.component'; +import { CrisisListComponent } from './crisis-list.component'; +import { CrisisCenterComponent } from './crisis-center.component'; +import { CrisisDetailComponent } from './crisis-detail.component'; + +import { CanDeactivateGuard } from '../can-deactivate-guard.service'; + +// #docregion crisis-detail-resolver +import { CrisisDetailResolver } from './crisis-detail-resolver.service'; + +// #enddocregion crisis-detail-resolver +const crisisCenterRoutes: Routes = [ + // #docregion redirect + { + path: '', + redirectTo: '/crisis-center', + pathMatch: 'full' + }, + // #enddocregion redirect + { + path: 'crisis-center', + component: CrisisCenterComponent, + children: [ + { + path: '', + component: CrisisListComponent, + children: [ + { + path: ':id', + component: CrisisDetailComponent, + canDeactivate: [CanDeactivateGuard], + resolve: { + crisis: CrisisDetailResolver + } + }, + { + path: '', + component: CrisisCenterHomeComponent + } + ] + } + ] + } +]; + +// #docregion crisis-detail-resolver +@NgModule({ + imports: [ + RouterModule.forChild(crisisCenterRoutes) + ], + exports: [ + RouterModule + ], + providers: [ + CrisisDetailResolver + ] +}) +export class CrisisCenterRoutingModule { } +// #enddocregion crisis-detail-resolver +// #enddocregion diff --git a/aio/content/examples/router/ts/src/app/crisis-center/crisis-center-routing.module.ts b/aio/content/examples/router/ts/src/app/crisis-center/crisis-center-routing.module.ts new file mode 100644 index 0000000000..c01d592455 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/crisis-center/crisis-center-routing.module.ts @@ -0,0 +1,53 @@ +// #docplaster +// #docregion +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +import { CrisisCenterHomeComponent } from './crisis-center-home.component'; +import { CrisisListComponent } from './crisis-list.component'; +import { CrisisCenterComponent } from './crisis-center.component'; +import { CrisisDetailComponent } from './crisis-detail.component'; + +import { CanDeactivateGuard } from '../can-deactivate-guard.service'; +import { CrisisDetailResolver } from './crisis-detail-resolver.service'; + +const crisisCenterRoutes: Routes = [ + { + path: '', + component: CrisisCenterComponent, + children: [ + { + path: '', + component: CrisisListComponent, + children: [ + { + path: ':id', + component: CrisisDetailComponent, + canDeactivate: [CanDeactivateGuard], + resolve: { + crisis: CrisisDetailResolver + } + }, + { + path: '', + component: CrisisCenterHomeComponent + } + ] + } + ] + } +]; + +@NgModule({ + imports: [ + RouterModule.forChild(crisisCenterRoutes) + ], + exports: [ + RouterModule + ], + providers: [ + CrisisDetailResolver + ] +}) +export class CrisisCenterRoutingModule { } +// #enddocregion diff --git a/aio/content/examples/router/ts/src/app/crisis-center/crisis-center.component.ts b/aio/content/examples/router/ts/src/app/crisis-center/crisis-center.component.ts new file mode 100644 index 0000000000..31d1790f45 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/crisis-center/crisis-center.component.ts @@ -0,0 +1,14 @@ +// #docregion +// #docplaster +import { Component } from '@angular/core'; + +// #docregion minus-imports +@Component({ + template: ` +

    CRISIS CENTER

    + + ` +}) +export class CrisisCenterComponent { } +// #enddocregion minus-imports +// #enddocregion diff --git a/aio/content/examples/router/ts/src/app/crisis-center/crisis-center.module.1.ts b/aio/content/examples/router/ts/src/app/crisis-center/crisis-center.module.1.ts new file mode 100644 index 0000000000..5a3e45f58f --- /dev/null +++ b/aio/content/examples/router/ts/src/app/crisis-center/crisis-center.module.1.ts @@ -0,0 +1,36 @@ +// #docplaster +// #docregion +import { NgModule } from '@angular/core'; +import { FormsModule } from '@angular/forms'; +import { CommonModule } from '@angular/common'; + +import { CrisisService } from './crisis.service'; + +import { CrisisCenterComponent } from './crisis-center.component'; +import { CrisisListComponent } from './crisis-list.component'; +import { CrisisCenterHomeComponent } from './crisis-center-home.component'; +import { CrisisDetailComponent } from './crisis-detail.component'; + +import { CrisisCenterRoutingModule } from './crisis-center-routing.module'; + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + CrisisCenterRoutingModule + ], + declarations: [ + CrisisCenterComponent, + CrisisListComponent, + CrisisCenterHomeComponent, + CrisisDetailComponent + ], + + // #docregion providers + providers: [ + CrisisService + ] + // #enddocregion providers +}) +export class CrisisCenterModule {} +// #enddocregion diff --git a/aio/content/examples/router/ts/src/app/crisis-center/crisis-center.module.ts b/aio/content/examples/router/ts/src/app/crisis-center/crisis-center.module.ts new file mode 100644 index 0000000000..4061ceac60 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/crisis-center/crisis-center.module.ts @@ -0,0 +1,35 @@ +// #docplaster +// #docregion +import { NgModule } from '@angular/core'; +import { FormsModule } from '@angular/forms'; +import { CommonModule } from '@angular/common'; + +import { CrisisService } from './crisis.service'; + +import { CrisisCenterComponent } from './crisis-center.component'; +import { CrisisListComponent } from './crisis-list.component'; +import { CrisisCenterHomeComponent } from './crisis-center-home.component'; +import { CrisisDetailComponent } from './crisis-detail.component'; + +import { CrisisCenterRoutingModule } from './crisis-center-routing.module'; + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + CrisisCenterRoutingModule + ], + declarations: [ + CrisisCenterComponent, + CrisisListComponent, + CrisisCenterHomeComponent, + CrisisDetailComponent + ], + providers: [ + CrisisService + ] +}) +// #docregion crisis-center-module-export +export class CrisisCenterModule {} +// #enddocregion crisis-center-module-export +// #enddocregion diff --git a/aio/content/examples/router/ts/src/app/crisis-center/crisis-detail-resolver.service.ts b/aio/content/examples/router/ts/src/app/crisis-center/crisis-detail-resolver.service.ts new file mode 100644 index 0000000000..94b4cd33e7 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/crisis-center/crisis-detail-resolver.service.ts @@ -0,0 +1,24 @@ +// #docregion +import { Injectable } from '@angular/core'; +import { Router, Resolve, RouterStateSnapshot, + ActivatedRouteSnapshot } from '@angular/router'; + +import { Crisis, CrisisService } from './crisis.service'; + +@Injectable() +export class CrisisDetailResolver implements Resolve { + constructor(private cs: CrisisService, private router: Router) {} + + resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise { + let id = route.params['id']; + + return this.cs.getCrisis(id).then(crisis => { + if (crisis) { + return crisis; + } else { // id not found + this.router.navigate(['/crisis-center']); + return null; + } + }); + } +} diff --git a/aio/content/examples/router/ts/src/app/crisis-center/crisis-detail.component.1.ts b/aio/content/examples/router/ts/src/app/crisis-center/crisis-detail.component.1.ts new file mode 100644 index 0000000000..d6fa27f629 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/crisis-center/crisis-detail.component.1.ts @@ -0,0 +1,87 @@ +// #docplaster +// #docregion +import 'rxjs/add/operator/switchMap'; +import { Component, OnInit, HostBinding } from '@angular/core'; +import { ActivatedRoute, Router, Params } from '@angular/router'; + +import { slideInDownAnimation } from '../animations'; +import { Crisis, CrisisService } from './crisis.service'; +import { DialogService } from '../dialog.service'; + +@Component({ + template: ` +
    +

    "{{ editName }}"

    +
    + {{ crisis.id }}
    +
    + + +
    +

    + + +

    +
    + `, + styles: ['input {width: 20em}'], + animations: [ slideInDownAnimation ] +}) +export class CrisisDetailComponent implements OnInit { + @HostBinding('@routeAnimation') routeAnimation = true; + @HostBinding('style.display') display = 'block'; + @HostBinding('style.position') position = 'absolute'; + + crisis: Crisis; + editName: string; + + constructor( + private service: CrisisService, + private router: Router, + private route: ActivatedRoute, + public dialogService: DialogService + ) {} + + // #docregion ngOnInit + ngOnInit() { + this.route.params + .switchMap((params: Params) => this.service.getCrisis(params['id'])) + .subscribe((crisis: Crisis) => { + if (crisis) { + this.editName = crisis.name; + this.crisis = crisis; + } else { // id not found + this.gotoCrises(); + } + }); + } + // #enddocregion ngOnInit + + cancel() { + this.gotoCrises(); + } + + save() { + this.crisis.name = this.editName; + this.gotoCrises(); + } + + canDeactivate(): Promise | boolean { + // Allow synchronous navigation (`true`) if no crisis or the crisis is unchanged + if (!this.crisis || this.crisis.name === this.editName) { + return true; + } + // Otherwise ask the user with the dialog service and return its + // promise which resolves to true or false when the user decides + return this.dialogService.confirm('Discard changes?'); + } + + gotoCrises() { + let crisisId = this.crisis ? this.crisis.id : null; + // Pass along the crisis id if available + // so that the CrisisListComponent can select that crisis. + // Add a totally useless `foo` parameter for kicks. + // Relative navigation back to the crises + this.router.navigate(['../', { id: crisisId, foo: 'foo' }], { relativeTo: this.route }); + } +} diff --git a/aio/content/examples/router/ts/src/app/crisis-center/crisis-detail.component.ts b/aio/content/examples/router/ts/src/app/crisis-center/crisis-detail.component.ts new file mode 100644 index 0000000000..f0939b47a8 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/crisis-center/crisis-detail.component.ts @@ -0,0 +1,86 @@ +// #docplaster +// #docregion +import { Component, OnInit, HostBinding } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; + +import { slideInDownAnimation } from '../animations'; +import { Crisis } from './crisis.service'; +import { DialogService } from '../dialog.service'; + +@Component({ + template: ` +
    +

    "{{ editName }}"

    +
    + {{ crisis.id }}
    +
    + + +
    +

    + + +

    +
    + `, + styles: ['input {width: 20em}'], + animations: [ slideInDownAnimation ] +}) +export class CrisisDetailComponent implements OnInit { + @HostBinding('@routeAnimation') routeAnimation = true; + @HostBinding('style.display') display = 'block'; + @HostBinding('style.position') position = 'absolute'; + + crisis: Crisis; + editName: string; + + constructor( + private route: ActivatedRoute, + private router: Router, + public dialogService: DialogService + ) {} + +// #docregion ngOnInit + ngOnInit() { + this.route.data + .subscribe((data: { crisis: Crisis }) => { + this.editName = data.crisis.name; + this.crisis = data.crisis; + }); + } +// #enddocregion ngOnInit + + // #docregion cancel-save + cancel() { + this.gotoCrises(); + } + + save() { + this.crisis.name = this.editName; + this.gotoCrises(); + } + // #enddocregion cancel-save + + // #docregion canDeactivate + canDeactivate(): Promise | boolean { + // Allow synchronous navigation (`true`) if no crisis or the crisis is unchanged + if (!this.crisis || this.crisis.name === this.editName) { + return true; + } + // Otherwise ask the user with the dialog service and return its + // promise which resolves to true or false when the user decides + return this.dialogService.confirm('Discard changes?'); + } + // #enddocregion canDeactivate + + gotoCrises() { + let crisisId = this.crisis ? this.crisis.id : null; + // Pass along the crisis id if available + // so that the CrisisListComponent can select that crisis. + // Add a totally useless `foo` parameter for kicks. + // #docregion gotoCrises-navigate + // Relative navigation back to the crises + this.router.navigate(['../', { id: crisisId, foo: 'foo' }], { relativeTo: this.route }); + // #enddocregion gotoCrises-navigate + } +} diff --git a/aio/content/examples/router/ts/src/app/crisis-center/crisis-list.component.1.ts b/aio/content/examples/router/ts/src/app/crisis-center/crisis-list.component.1.ts new file mode 100644 index 0000000000..0000dde082 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/crisis-center/crisis-list.component.1.ts @@ -0,0 +1,44 @@ +import 'rxjs/add/operator/do'; +import 'rxjs/add/operator/switchMap'; +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute, Router, Params } from '@angular/router'; + +import { Crisis, CrisisService } from './crisis.service'; +import { Observable } from 'rxjs/Observable'; + +@Component({ + // #docregion relative-navigation-router-link + template: ` + ` + // #enddocregion relative-navigation-router-link +}) +export class CrisisListComponent implements OnInit { + crises: Observable; + selectedId: number; + + constructor( + private service: CrisisService, + private route: ActivatedRoute, + private router: Router + ) {} + + ngOnInit() { + this.crises = this.route.params + .switchMap((params: Params) => { + this.selectedId = +params['id']; + return this.service.getCrises(); + }); + } + + isSelected(crisis: Crisis) { + return crisis.id === this.selectedId; + } +} diff --git a/aio/content/examples/router/ts/src/app/crisis-center/crisis-list.component.ts b/aio/content/examples/router/ts/src/app/crisis-center/crisis-list.component.ts new file mode 100644 index 0000000000..4498a55c0f --- /dev/null +++ b/aio/content/examples/router/ts/src/app/crisis-center/crisis-list.component.ts @@ -0,0 +1,56 @@ +// #docregion +import 'rxjs/add/operator/switchMap'; +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute, Router, Params } from '@angular/router'; + +import { Observable } from 'rxjs/Observable'; + +import { Crisis, CrisisService } from './crisis.service'; + +@Component({ + template: ` +
      +
    • + {{ crisis.id }} + {{ crisis.name }} +
    • +
    + + + ` +}) +export class CrisisListComponent implements OnInit { + crises: Observable; + selectedId: number; + + // #docregion ctor + constructor( + private service: CrisisService, + private route: ActivatedRoute, + private router: Router + ) {} + // #enddocregion ctor + + isSelected(crisis: Crisis) { + return crisis.id === this.selectedId; + } + + ngOnInit() { + this.crises = this.route.params + .switchMap((params: Params) => { + this.selectedId = +params['id']; + return this.service.getCrises(); + }); + } + + // #docregion onSelect + onSelect(crisis: Crisis) { + this.selectedId = crisis.id; + + // Navigate with relative link + this.router.navigate([crisis.id], { relativeTo: this.route }); + } + // #enddocregion onSelect +} diff --git a/aio/content/examples/router/ts/src/app/crisis-center/crisis.service.ts b/aio/content/examples/router/ts/src/app/crisis-center/crisis.service.ts new file mode 100644 index 0000000000..e7fd34d387 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/crisis-center/crisis.service.ts @@ -0,0 +1,40 @@ +// #docplaster +// #docregion , mock-crises +export class Crisis { + constructor(public id: number, public name: string) { } +} + +const CRISES = [ + new Crisis(1, 'Dragon Burning Cities'), + new Crisis(2, 'Sky Rains Great White Sharks'), + new Crisis(3, 'Giant Asteroid Heading For Earth'), + new Crisis(4, 'Procrastinators Meeting Delayed Again'), +]; +// #enddocregion mock-crises + +let crisesPromise = Promise.resolve(CRISES); + +import { Injectable } from '@angular/core'; + +@Injectable() +export class CrisisService { + + static nextCrisisId = 100; + + getCrises() { return crisesPromise; } + + getCrisis(id: number | string) { + return crisesPromise + .then(crises => crises.find(crisis => crisis.id === +id)); + } + + // #enddocregion + addCrisis(name: string) { + name = name.trim(); + if (name) { + let crisis = new Crisis(CrisisService.nextCrisisId++, name); + crisesPromise.then(crises => crises.push(crisis)); + } + } + // #docregion +} diff --git a/aio/content/examples/router/ts/src/app/crisis-list.component.ts b/aio/content/examples/router/ts/src/app/crisis-list.component.ts new file mode 100644 index 0000000000..6caa3653b5 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/crisis-list.component.ts @@ -0,0 +1,10 @@ +// Initial empty version +// #docregion +import { Component } from '@angular/core'; + +@Component({ + template: ` +

    CRISIS CENTER

    +

    Get your crisis here

    ` +}) +export class CrisisListComponent { } diff --git a/aio/content/examples/router/ts/src/app/dialog.service.ts b/aio/content/examples/router/ts/src/app/dialog.service.ts new file mode 100644 index 0000000000..0f09e4936d --- /dev/null +++ b/aio/content/examples/router/ts/src/app/dialog.service.ts @@ -0,0 +1,19 @@ +// #docregion +import { Injectable } from '@angular/core'; +/** + * Async modal dialog service + * DialogService makes this app easier to test by faking this service. + * TODO: better modal implementation that doesn't use window.confirm + */ +@Injectable() +export class DialogService { + /** + * Ask user to confirm an action. `message` explains the action and choices. + * Returns promise resolving to `true`=confirm or `false`=cancel + */ + confirm(message?: string) { + return new Promise(resolve => { + return resolve(window.confirm(message || 'Is it OK?')); + }); + }; +} diff --git a/aio/content/examples/router/ts/src/app/hero-list.component.ts b/aio/content/examples/router/ts/src/app/hero-list.component.ts new file mode 100644 index 0000000000..7a8f97ca1e --- /dev/null +++ b/aio/content/examples/router/ts/src/app/hero-list.component.ts @@ -0,0 +1,13 @@ +/// Initial empty version +// #docregion +import { Component } from '@angular/core'; + +@Component({ + template: ` +

    HEROES

    +

    Get your heroes here

    + + + ` +}) +export class HeroListComponent { } diff --git a/aio/content/examples/router/ts/src/app/heroes/hero-detail.component.1.ts b/aio/content/examples/router/ts/src/app/heroes/hero-detail.component.1.ts new file mode 100644 index 0000000000..93f0efaf0b --- /dev/null +++ b/aio/content/examples/router/ts/src/app/heroes/hero-detail.component.1.ts @@ -0,0 +1,55 @@ +// #docplaster +// #docregion +// #docregion rxjs-operator-import +import 'rxjs/add/operator/switchMap'; +// #enddocregion rxjs-operator-import +import { Component, OnInit } from '@angular/core'; +// #docregion imports +import { Router, ActivatedRoute, Params } from '@angular/router'; +// #enddocregion imports + +import { Hero, HeroService } from './hero.service'; + +@Component({ + template: ` +

    HEROES

    +
    +

    "{{ hero.name }}"

    +
    + {{ hero.id }}
    +
    + + +
    +

    + +

    +
    + ` +}) +export class HeroDetailComponent implements OnInit { + hero: Hero; + + // #docregion ctor + constructor( + private route: ActivatedRoute, + private router: Router, + private service: HeroService + ) {} + // #enddocregion ctor + + // #docregion ngOnInit + ngOnInit() { + this.route.params + // (+) converts string 'id' to a number + .switchMap((params: Params) => this.service.getHero(+params['id'])) + .subscribe((hero: Hero) => this.hero = hero); + } + // #enddocregion ngOnInit + + // #docregion gotoHeroes + gotoHeroes() { + this.router.navigate(['/heroes']); + } + // #enddocregion gotoHeroes +} diff --git a/aio/content/examples/router/ts/src/app/heroes/hero-detail.component.2.ts b/aio/content/examples/router/ts/src/app/heroes/hero-detail.component.2.ts new file mode 100644 index 0000000000..c3b69be965 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/heroes/hero-detail.component.2.ts @@ -0,0 +1,47 @@ +// Snapshot version +// #docregion +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; + +import { Hero, HeroService } from './hero.service'; + +@Component({ + template: ` +

    HEROES

    +
    +

    "{{ hero.name }}"

    +
    + {{ hero.id }}
    +
    + + +
    +

    + +

    +
    + ` +}) +export class HeroDetailComponent implements OnInit { + hero: Hero; + + constructor( + private route: ActivatedRoute, + private router: Router, + private service: HeroService + ) {} + + // #docregion snapshot + ngOnInit() { + // (+) converts string 'id' to a number + let id = +this.route.snapshot.params['id']; + + this.service.getHero(id) + .then((hero: Hero) => this.hero = hero); + } + // #enddocregion snapshot + + gotoHeroes() { + this.router.navigate(['/heroes']); + } +} diff --git a/aio/content/examples/router/ts/src/app/heroes/hero-detail.component.ts b/aio/content/examples/router/ts/src/app/heroes/hero-detail.component.ts new file mode 100644 index 0000000000..8135d37d32 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/heroes/hero-detail.component.ts @@ -0,0 +1,66 @@ +// #docplaster +// #docregion +// #docregion rxjs-operator-import +import 'rxjs/add/operator/switchMap'; +// #enddocregion rxjs-operator-import +import { Component, OnInit, HostBinding } from '@angular/core'; +import { Router, ActivatedRoute, Params } from '@angular/router'; + +import { slideInDownAnimation } from '../animations'; + +import { Hero, HeroService } from './hero.service'; + +@Component({ + template: ` +

    HEROES

    +
    +

    "{{ hero.name }}"

    +
    + {{ hero.id }}
    +
    + + +
    +

    + +

    +
    + `, + animations: [ slideInDownAnimation ] +}) +export class HeroDetailComponent implements OnInit { +// #docregion host-bindings + @HostBinding('@routeAnimation') routeAnimation = true; + @HostBinding('style.display') display = 'block'; + @HostBinding('style.position') position = 'absolute'; +// #enddocregion host-bindings + + hero: Hero; + + // #docregion ctor + constructor( + private route: ActivatedRoute, + private router: Router, + private service: HeroService + ) {} + // #enddocregion ctor + + // #docregion ngOnInit + ngOnInit() { + this.route.params + // (+) converts string 'id' to a number + .switchMap((params: Params) => this.service.getHero(+params['id'])) + .subscribe((hero: Hero) => this.hero = hero); + } + // #enddocregion ngOnInit + + // #docregion gotoHeroes + gotoHeroes() { + let heroId = this.hero ? this.hero.id : null; + // Pass along the hero id if available + // so that the HeroList component can select that hero. + // Include a junk 'foo' property for fun. + this.router.navigate(['/heroes', { id: heroId, foo: 'foo' }]); + } + // #enddocregion gotoHeroes +} diff --git a/aio/content/examples/router/ts/src/app/heroes/hero-list.component.1.ts b/aio/content/examples/router/ts/src/app/heroes/hero-list.component.1.ts new file mode 100644 index 0000000000..59552830a4 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/heroes/hero-list.component.1.ts @@ -0,0 +1,52 @@ +// #docplaster +// #docregion +// TODO SOMEDAY: Feature Componetized like HeroCenter +import { Component, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; + +import { Hero, HeroService } from './hero.service'; + +@Component({ + // #docregion template + template: ` +

    HEROES

    +
      +
    • + {{ hero.id }} {{ hero.name }} +
    • +
    + + + ` + // #enddocregion template +}) +export class HeroListComponent implements OnInit { + heroes: Promise; + + // #docregion ctor + constructor( + private router: Router, + private service: HeroService + ) {} + // #enddocregion ctor + + ngOnInit() { + this.heroes = this.service.getHeroes(); + } + + // #docregion select + onSelect(hero: Hero) { + // #docregion nav-to-detail + this.router.navigate(['/hero', hero.id]); + // #enddocregion nav-to-detail + } + // #enddocregion select +} +// #enddocregion + +/* A link parameters array +// #docregion link-parameters-array +['/hero', hero.id] // { 15 } +// #enddocregion link-parameters-array +*/ diff --git a/aio/content/examples/router/ts/src/app/heroes/hero-list.component.ts b/aio/content/examples/router/ts/src/app/heroes/hero-list.component.ts new file mode 100644 index 0000000000..c7dcc3877e --- /dev/null +++ b/aio/content/examples/router/ts/src/app/heroes/hero-list.component.ts @@ -0,0 +1,63 @@ +// #docplaster +// #docregion +// TODO SOMEDAY: Feature Componetized like CrisisCenter +// #docregion rxjs-imports +import 'rxjs/add/operator/switchMap'; +import { Observable } from 'rxjs/Observable'; +// #enddocregion rxjs-imports +import { Component, OnInit } from '@angular/core'; +// #docregion import-router +import { Router, ActivatedRoute, Params } from '@angular/router'; +// #enddocregion import-router + +import { Hero, HeroService } from './hero.service'; + +@Component({ + // #docregion template + template: ` +

    HEROES

    +
      +
    • + {{ hero.id }} {{ hero.name }} +
    • +
    + + + ` + // #enddocregion template +}) +// #docregion ctor +export class HeroListComponent implements OnInit { + heroes: Observable; + + private selectedId: number; + + constructor( + private service: HeroService, + private route: ActivatedRoute, + private router: Router + ) {} + + ngOnInit() { + this.heroes = this.route.params + .switchMap((params: Params) => { + this.selectedId = +params['id']; + return this.service.getHeroes(); + }); + } + // #enddocregion ctor + + // #docregion isSelected + isSelected(hero: Hero) { return hero.id === this.selectedId; } + // #enddocregion isSelected + + // #docregion select + onSelect(hero: Hero) { + this.router.navigate(['/hero', hero.id]); + } + // #enddocregion select +// #docregion ctor +} +// #enddocregion diff --git a/aio/content/examples/router/ts/src/app/heroes/hero.service.ts b/aio/content/examples/router/ts/src/app/heroes/hero.service.ts new file mode 100644 index 0000000000..6e4e7bee60 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/heroes/hero.service.ts @@ -0,0 +1,27 @@ +// #docregion +import { Injectable } from '@angular/core'; + +export class Hero { + constructor(public id: number, public name: string) { } +} + +let HEROES = [ + new Hero(11, 'Mr. Nice'), + new Hero(12, 'Narco'), + new Hero(13, 'Bombasto'), + new Hero(14, 'Celeritas'), + new Hero(15, 'Magneta'), + new Hero(16, 'RubberMan') +]; + +let heroesPromise = Promise.resolve(HEROES); + +@Injectable() +export class HeroService { + getHeroes() { return heroesPromise; } + + getHero(id: number | string) { + return heroesPromise + .then(heroes => heroes.find(hero => hero.id === +id)); + } +} diff --git a/aio/content/examples/router/ts/src/app/heroes/heroes-routing.module.ts b/aio/content/examples/router/ts/src/app/heroes/heroes-routing.module.ts new file mode 100644 index 0000000000..dbee521793 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/heroes/heroes-routing.module.ts @@ -0,0 +1,24 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +import { HeroListComponent } from './hero-list.component'; +import { HeroDetailComponent } from './hero-detail.component'; + +const heroesRoutes: Routes = [ + { path: 'heroes', component: HeroListComponent }, +// #docregion hero-detail-route + { path: 'hero/:id', component: HeroDetailComponent } +// #enddocregion hero-detail-route +]; + +@NgModule({ + imports: [ + RouterModule.forChild(heroesRoutes) + ], + exports: [ + RouterModule + ] +}) +export class HeroRoutingModule { } +// #enddocregion diff --git a/aio/content/examples/router/ts/src/app/heroes/heroes.module.ts b/aio/content/examples/router/ts/src/app/heroes/heroes.module.ts new file mode 100644 index 0000000000..95ee64a182 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/heroes/heroes.module.ts @@ -0,0 +1,33 @@ +// #docplaster +// #docregion +// #docregion v1 +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; + +import { HeroListComponent } from './hero-list.component'; +import { HeroDetailComponent } from './hero-detail.component'; + +import { HeroService } from './hero.service'; + +// #enddocregion v1 +import { HeroRoutingModule } from './heroes-routing.module'; + +// #docregion v1 +@NgModule({ + imports: [ + CommonModule, + FormsModule, +// #enddocregion v1 + HeroRoutingModule +// #docregion v1 + ], + declarations: [ + HeroListComponent, + HeroDetailComponent + ], + providers: [ HeroService ] +}) +export class HeroesModule {} +// #enddocregion v1 +// #enddocregion diff --git a/aio/content/examples/router/ts/src/app/login-routing.module.ts b/aio/content/examples/router/ts/src/app/login-routing.module.ts new file mode 100644 index 0000000000..96d05e7972 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/login-routing.module.ts @@ -0,0 +1,24 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { AuthGuard } from './auth-guard.service'; +import { AuthService } from './auth.service'; +import { LoginComponent } from './login.component'; + +const loginRoutes: Routes = [ + { path: 'login', component: LoginComponent } +]; + +@NgModule({ + imports: [ + RouterModule.forChild(loginRoutes) + ], + exports: [ + RouterModule + ], + providers: [ + AuthGuard, + AuthService + ] +}) +export class LoginRoutingModule {} diff --git a/aio/content/examples/router/ts/src/app/login.component.1.ts b/aio/content/examples/router/ts/src/app/login.component.1.ts new file mode 100644 index 0000000000..ddee339011 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/login.component.1.ts @@ -0,0 +1,46 @@ +// #docregion +import { Component } from '@angular/core'; +import { Router } from '@angular/router'; +import { AuthService } from './auth.service'; + +@Component({ + template: ` +

    LOGIN

    +

    {{message}}

    +

    + + +

    ` +}) +export class LoginComponent { + message: string; + + constructor(public authService: AuthService, public router: Router) { + this.setMessage(); + } + + setMessage() { + this.message = 'Logged ' + (this.authService.isLoggedIn ? 'in' : 'out'); + } + + login() { + this.message = 'Trying to log in ...'; + + this.authService.login().subscribe(() => { + this.setMessage(); + if (this.authService.isLoggedIn) { + // Get the redirect URL from our auth service + // If no redirect has been set, use the default + let redirect = this.authService.redirectUrl ? this.authService.redirectUrl : '/crisis-center/admin'; + + // Redirect the user + this.router.navigate([redirect]); + } + }); + } + + logout() { + this.authService.logout(); + this.setMessage(); + } +} diff --git a/aio/content/examples/router/ts/src/app/login.component.ts b/aio/content/examples/router/ts/src/app/login.component.ts new file mode 100644 index 0000000000..41c88f4068 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/login.component.ts @@ -0,0 +1,56 @@ +// #docregion +import { Component } from '@angular/core'; +import { Router, + NavigationExtras } from '@angular/router'; +import { AuthService } from './auth.service'; + +@Component({ + template: ` +

    LOGIN

    +

    {{message}}

    +

    + + +

    ` +}) +export class LoginComponent { + message: string; + + constructor(public authService: AuthService, public router: Router) { + this.setMessage(); + } + + setMessage() { + this.message = 'Logged ' + (this.authService.isLoggedIn ? 'in' : 'out'); + } + + login() { + this.message = 'Trying to log in ...'; + + this.authService.login().subscribe(() => { + this.setMessage(); + if (this.authService.isLoggedIn) { + // Get the redirect URL from our auth service + // If no redirect has been set, use the default + let redirect = this.authService.redirectUrl ? this.authService.redirectUrl : '/admin'; + + // #docregion preserve + // Set our navigation extras object + // that passes on our global query params and fragment + let navigationExtras: NavigationExtras = { + preserveQueryParams: true, + preserveFragment: true + }; + + // Redirect the user + this.router.navigate([redirect], navigationExtras); + // #enddocregion preserve + } + }); + } + + logout() { + this.authService.logout(); + this.setMessage(); + } +} diff --git a/aio/content/examples/router/ts/src/app/not-found.component.ts b/aio/content/examples/router/ts/src/app/not-found.component.ts new file mode 100644 index 0000000000..2e74544e17 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/not-found.component.ts @@ -0,0 +1,7 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + template: '

    Page not found

    ' +}) +export class PageNotFoundComponent {} diff --git a/aio/content/examples/router/ts/src/app/selective-preloading-strategy.ts b/aio/content/examples/router/ts/src/app/selective-preloading-strategy.ts new file mode 100644 index 0000000000..0e06cd8a38 --- /dev/null +++ b/aio/content/examples/router/ts/src/app/selective-preloading-strategy.ts @@ -0,0 +1,24 @@ +// #docregion +import 'rxjs/add/observable/of'; +import { Injectable } from '@angular/core'; +import { PreloadingStrategy, Route } from '@angular/router'; +import { Observable } from 'rxjs/Observable'; + +@Injectable() +export class SelectivePreloadingStrategy implements PreloadingStrategy { + preloadedModules: string[] = []; + + preload(route: Route, load: () => Observable): Observable { + if (route.data && route.data['preload']) { + // add the route path to our preloaded module array + this.preloadedModules.push(route.path); + + // log the route path to the console + console.log('Preloaded: ' + route.path); + + return load(); + } else { + return Observable.of(null); + } + } +} diff --git a/aio/content/examples/router/ts/src/index.html b/aio/content/examples/router/ts/src/index.html new file mode 100644 index 0000000000..0fa6453c36 --- /dev/null +++ b/aio/content/examples/router/ts/src/index.html @@ -0,0 +1,32 @@ + + + + + + + + + Angular Router + + + + + + + + + + + + + + + + loading... + + + + diff --git a/aio/content/examples/router/ts/src/main.ts b/aio/content/examples/router/ts/src/main.ts new file mode 100644 index 0000000000..f332d1d245 --- /dev/null +++ b/aio/content/examples/router/ts/src/main.ts @@ -0,0 +1,6 @@ +// #docregion +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/security/e2e-spec.ts b/aio/content/examples/security/e2e-spec.ts new file mode 100644 index 0000000000..23d11cd12b --- /dev/null +++ b/aio/content/examples/security/e2e-spec.ts @@ -0,0 +1,37 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, By } from 'protractor'; + +describe('Security E2E Tests', () => { + beforeAll(() => browser.get('')); + + it('sanitizes innerHTML', () => { + let interpolated = element(By.className('e2e-inner-html-interpolated')); + expect(interpolated.getText()) + .toContain('Template Syntax'); + let bound = element(By.className('e2e-inner-html-bound')); + expect(bound.getText()).toContain('Template alert("0wned") Syntax'); + let bold = element(By.css('.e2e-inner-html-bound b')); + expect(bold.getText()).toContain('Syntax'); + }); + + it('escapes untrusted URLs', () => { + let untrustedUrl = element(By.className('e2e-dangerous-url')); + expect(untrustedUrl.getAttribute('href')).toMatch(/^unsafe:javascript/); + }); + + it('binds trusted URLs', () => { + let trustedUrl = element(By.className('e2e-trusted-url')); + expect(trustedUrl.getAttribute('href')).toMatch(/^javascript:alert/); + }); + + it('escapes untrusted resource URLs', () => { + let iframe = element(By.className('e2e-iframe-untrusted-src')); + expect(iframe.getAttribute('src')).toBe(''); + }); + + it('binds trusted resource URLs', () => { + let iframe = element(By.className('e2e-iframe-trusted-src')); + expect(iframe.getAttribute('src')).toMatch(/^https:\/\/www.youtube.com\//); + }); +}); diff --git a/aio/content/examples/security/ts/example-config.json b/aio/content/examples/security/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/security/ts/plnkr.json b/aio/content/examples/security/ts/plnkr.json new file mode 100644 index 0000000000..4c9e85ce1e --- /dev/null +++ b/aio/content/examples/security/ts/plnkr.json @@ -0,0 +1,9 @@ +{ + "description": "Content Security", + "basePath": "src/", + "files": [ + "!**/*.d.ts", + "!**/*.js" + ], + "tags": ["security"] +} diff --git a/aio/content/examples/security/ts/plnkr.no-link.html b/aio/content/examples/security/ts/plnkr.no-link.html new file mode 100644 index 0000000000..1e348b3601 --- /dev/null +++ b/aio/content/examples/security/ts/plnkr.no-link.html @@ -0,0 +1,288 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/security/ts/src/app/app.component.ts b/aio/content/examples/security/ts/src/app/app.component.ts new file mode 100644 index 0000000000..c30235e8e7 --- /dev/null +++ b/aio/content/examples/security/ts/src/app/app.component.ts @@ -0,0 +1,13 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'my-app', + template: ` +

    Security

    + + + ` +}) +export class AppComponent { +} diff --git a/aio/content/examples/security/ts/src/app/app.module.ts b/aio/content/examples/security/ts/src/app/app.module.ts new file mode 100644 index 0000000000..21d880be3b --- /dev/null +++ b/aio/content/examples/security/ts/src/app/app.module.ts @@ -0,0 +1,18 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; + +import { AppComponent } from './app.component'; +import { BypassSecurityComponent } from './bypass-security.component'; +import { InnerHtmlBindingComponent } from './inner-html-binding.component'; + +@NgModule({ + imports: [ BrowserModule ], + declarations: [ + AppComponent, + BypassSecurityComponent, + InnerHtmlBindingComponent + ], + bootstrap: [ AppComponent ] +}) +export class AppModule { } diff --git a/aio/content/examples/security/ts/src/app/bypass-security.component.html b/aio/content/examples/security/ts/src/app/bypass-security.component.html new file mode 100644 index 0000000000..96adf058e2 --- /dev/null +++ b/aio/content/examples/security/ts/src/app/bypass-security.component.html @@ -0,0 +1,17 @@ + +

    Bypass Security Component

    + + +

    An untrusted URL:

    +

    Click me

    +

    A trusted URL:

    +

    Click me

    + + + +

    Resource URL:

    +

    Showing: {{dangerousVideoUrl}}

    +

    Trusted:

    + +

    Untrusted:

    + diff --git a/aio/content/examples/security/ts/src/app/bypass-security.component.ts b/aio/content/examples/security/ts/src/app/bypass-security.component.ts new file mode 100644 index 0000000000..769c0ba95a --- /dev/null +++ b/aio/content/examples/security/ts/src/app/bypass-security.component.ts @@ -0,0 +1,39 @@ +// #docplaster +// #docregion +import { Component } from '@angular/core'; +import { DomSanitizer, SafeResourceUrl, SafeUrl } from '@angular/platform-browser'; + +@Component({ + selector: 'bypass-security', + moduleId: module.id, + templateUrl: './bypass-security.component.html', +}) +export class BypassSecurityComponent { + dangerousUrl: string; + trustedUrl: SafeUrl; + dangerousVideoUrl: string; + videoUrl: SafeResourceUrl; + + // #docregion trust-url + constructor(private sanitizer: DomSanitizer) { + // javascript: URLs are dangerous if attacker controlled. + // Angular sanitizes them in data binding, but you can + // explicitly tell Angular to trust this value: + this.dangerousUrl = 'javascript:alert("Hi there")'; + this.trustedUrl = sanitizer.bypassSecurityTrustUrl(this.dangerousUrl); + // #enddocregion trust-url + this.updateVideoUrl('PUBnlbjZFAI'); + } + + // #docregion trust-video-url + updateVideoUrl(id: string) { + // Appending an ID to a YouTube URL is safe. + // Always make sure to construct SafeValue objects as + // close as possible to the input data so + // that it's easier to check if the value is safe. + this.dangerousVideoUrl = 'https://www.youtube.com/embed/' + id; + this.videoUrl = + this.sanitizer.bypassSecurityTrustResourceUrl(this.dangerousVideoUrl); + } + // #enddocregion trust-video-url +} diff --git a/aio/content/examples/security/ts/src/app/inner-html-binding.component.html b/aio/content/examples/security/ts/src/app/inner-html-binding.component.html new file mode 100644 index 0000000000..fe540d25fe --- /dev/null +++ b/aio/content/examples/security/ts/src/app/inner-html-binding.component.html @@ -0,0 +1,6 @@ + +

    Binding innerHTML

    +

    Bound value:

    +

    {{htmlSnippet}}

    +

    Result of binding to innerHTML:

    +

    diff --git a/aio/content/examples/security/ts/src/app/inner-html-binding.component.ts b/aio/content/examples/security/ts/src/app/inner-html-binding.component.ts new file mode 100644 index 0000000000..23c921e979 --- /dev/null +++ b/aio/content/examples/security/ts/src/app/inner-html-binding.component.ts @@ -0,0 +1,13 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + moduleId: module.id, + selector: 'inner-html-binding', + templateUrl: './inner-html-binding.component.html', +}) +// #docregion class +export class InnerHtmlBindingComponent { + // For example, a user/attacker-controlled value from a URL. + htmlSnippet = 'Template Syntax'; +} diff --git a/aio/content/examples/security/ts/src/index.html b/aio/content/examples/security/ts/src/index.html new file mode 100644 index 0000000000..d5dd11c038 --- /dev/null +++ b/aio/content/examples/security/ts/src/index.html @@ -0,0 +1,26 @@ + + + + + Angular Content Security + + + + + + + + + + + + + + + + + Loading... + + diff --git a/aio/content/examples/security/ts/src/main.ts b/aio/content/examples/security/ts/src/main.ts new file mode 100644 index 0000000000..105b06712d --- /dev/null +++ b/aio/content/examples/security/ts/src/main.ts @@ -0,0 +1,6 @@ +// #docregion +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); + diff --git a/aio/content/examples/server-communication/e2e-spec.ts b/aio/content/examples/server-communication/e2e-spec.ts new file mode 100644 index 0000000000..2b6571b039 --- /dev/null +++ b/aio/content/examples/server-communication/e2e-spec.ts @@ -0,0 +1,138 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by } from 'protractor'; + +describe('Server Communication', function () { + + beforeAll(function () { + browser.get(''); + }); + + describe('Tour of Heroes (Observable)', function () { + + let initialHeroCount = 4; + let newHeroName = 'Mr. IQ'; + let heroCountAfterAdd = 5; + + let heroListComp = element(by.tagName('hero-list')); + let addButton = heroListComp.element(by.tagName('button')); + let heroTags = heroListComp.all(by.tagName('li')); + let heroNameInput = heroListComp.element(by.tagName('input')); + + it('should exist', function() { + expect(heroListComp).toBeDefined(' must exist'); + }); + + it('should display ' + initialHeroCount + ' heroes after init', function () { + expect(heroTags.count()).toBe(initialHeroCount); + }); + + it('should not add hero with empty name', function () { + expect(addButton).toBeDefined('"Add Hero" button must be defined'); + addButton.click().then(function() { + expect(heroTags.count()).toBe(initialHeroCount, 'No new hero should be added'); + }); + }); + + it('should add a new hero to the list', function () { + expect(heroNameInput).toBeDefined(' for hero name must exist'); + expect(addButton).toBeDefined('"Add Hero" button must be defined'); + heroNameInput.sendKeys(newHeroName); + addButton.click().then(function() { + expect(heroTags.count()).toBe(heroCountAfterAdd, 'A new hero should be added'); + let newHeroInList = heroTags.get(heroCountAfterAdd - 1).getText(); + expect(newHeroInList).toBe(newHeroName, 'The hero should be added to the end of the list'); + }); + }); + }); + + describe('Wikipedia Demo', function () { + + it('should initialize the demo with empty result list', function () { + let myWikiComp = element(by.tagName('my-wiki')); + expect(myWikiComp).toBeDefined(' must exist'); + let resultList = myWikiComp.all(by.tagName('li')); + expect(resultList.count()).toBe(0, 'result list must be empty'); + }); + + describe('Fetches after each keystroke', function () { + it('should fetch results after "B"', function(done) { + testForRefreshedResult('B', done); + }); + + it('should fetch results after "Ba"', function(done) { + testForRefreshedResult('a', done); + }); + + it('should fetch results after "Bas"', function(done) { + testForRefreshedResult('s', done); + }); + + it('should fetch results after "Basic"', function(done) { + testForRefreshedResult('ic', done); + }); + }); + + function testForRefreshedResult(keyPressed: string, done: () => void) { + testForResult('my-wiki', keyPressed, false, done); + } + }); + + describe('Smarter Wikipedia Demo', function () { + + it('should initialize the demo with empty result list', function () { + let myWikiSmartComp = element(by.tagName('my-wiki-smart')); + expect(myWikiSmartComp).toBeDefined(' must exist'); + let resultList = myWikiSmartComp.all(by.tagName('li')); + expect(resultList.count()).toBe(0, 'result list must be empty'); + }); + + it('should fetch results after "Java"', function(done) { + testForNewResult('Java', done); + }); + + it('should fetch results after "JavaS"', function(done) { + testForStaleResult('S', done); + }); + + it('should fetch results after "JavaSc"', function(done) { + testForStaleResult('c', done); + }); + + it('should fetch results after "JavaScript"', function(done) { + testForStaleResult('ript', done); + }); + + + function testForNewResult(keyPressed: string, done: () => void) { + testForResult('my-wiki-smart', keyPressed, false, done); + } + + function testForStaleResult(keyPressed: string, done: () => void) { + testForResult('my-wiki-smart', keyPressed, true, done); + } + + }); + + function testForResult(componentTagName: string, keyPressed: string, hasListBeforeSearch: boolean, done: () => void) { + let searchWait = 1000; // Wait for wikipedia but not so long that tests timeout + let wikiComponent = element(by.tagName(componentTagName)); + expect(wikiComponent).toBeDefined('<' + componentTagName + '> must exist'); + let searchBox = wikiComponent.element(by.tagName('input')); + expect(searchBox).toBeDefined(' for search must exist'); + + searchBox.sendKeys(keyPressed).then(function () { + let resultList = wikiComponent.all(by.tagName('li')); + + if (hasListBeforeSearch) { + expect(resultList.count()).toBeGreaterThan(0, 'result list should not be empty before search'); + } + + setTimeout(function() { + expect(resultList.count()).toBeGreaterThan(0, 'result list should not be empty after search'); + done(); + }, searchWait); + }); + } + +}); diff --git a/aio/content/examples/server-communication/ts/example-config.json b/aio/content/examples/server-communication/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/server-communication/ts/plnkr.json b/aio/content/examples/server-communication/ts/plnkr.json new file mode 100644 index 0000000000..fe966be012 --- /dev/null +++ b/aio/content/examples/server-communication/ts/plnkr.json @@ -0,0 +1,10 @@ +{ + "description": "Http", + "basePath": "src/", + "files":[ + "!**/*.d.ts", + "!**/*.js", + "!**/*.[1].*" + ], + "tags": ["http", "jsonp"] +} diff --git a/aio/content/examples/server-communication/ts/plnkr.no-link.html b/aio/content/examples/server-communication/ts/plnkr.no-link.html new file mode 100644 index 0000000000..c54e18ab92 --- /dev/null +++ b/aio/content/examples/server-communication/ts/plnkr.no-link.html @@ -0,0 +1,610 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/server-communication/ts/src/app/app.component.ts b/aio/content/examples/server-communication/ts/src/app/app.component.ts new file mode 100644 index 0000000000..780d044cab --- /dev/null +++ b/aio/content/examples/server-communication/ts/src/app/app.component.ts @@ -0,0 +1,13 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'my-app', + template: ` + + + + + ` +}) +export class AppComponent { } diff --git a/aio/content/examples/server-communication/ts/src/app/app.module.1.ts b/aio/content/examples/server-communication/ts/src/app/app.module.1.ts new file mode 100644 index 0000000000..fb7012aa02 --- /dev/null +++ b/aio/content/examples/server-communication/ts/src/app/app.module.1.ts @@ -0,0 +1,23 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { FormsModule } from '@angular/forms'; +import { HttpModule, JsonpModule } from '@angular/http'; + +import { AppComponent } from './app.component'; + +@NgModule({ + imports: [ + BrowserModule, + FormsModule, + HttpModule, + JsonpModule + ], + declarations: [ AppComponent ], + bootstrap: [ AppComponent ] +}) +export class AppModule { +} + + + diff --git a/aio/content/examples/server-communication/ts/src/app/app.module.ts b/aio/content/examples/server-communication/ts/src/app/app.module.ts new file mode 100644 index 0000000000..fd0c720c3c --- /dev/null +++ b/aio/content/examples/server-communication/ts/src/app/app.module.ts @@ -0,0 +1,46 @@ +// #docplaster +// #docregion +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { FormsModule } from '@angular/forms'; +import { HttpModule, JsonpModule } from '@angular/http'; + + +import { InMemoryWebApiModule } from 'angular-in-memory-web-api'; +import { HeroData } from './hero-data'; +import { requestOptionsProvider } from './default-request-options.service'; + +import { AppComponent } from './app.component'; + +import { HeroListComponent } from './toh/hero-list.component'; +import { HeroListPromiseComponent } from './toh/hero-list.component.promise'; + +import { WikiComponent } from './wiki/wiki.component'; +import { WikiSmartComponent } from './wiki/wiki-smart.component'; + +@NgModule({ + imports: [ + BrowserModule, + FormsModule, + HttpModule, + JsonpModule, + // #docregion in-mem-web-api + InMemoryWebApiModule.forRoot(HeroData) + // #enddocregion in-mem-web-api + ], + declarations: [ + AppComponent, + HeroListComponent, + HeroListPromiseComponent, + WikiComponent, + WikiSmartComponent + ], +// #docregion provide-default-request-options + providers: [ requestOptionsProvider ], +// #enddocregion provide-default-request-options + bootstrap: [ AppComponent ] +}) +export class AppModule {} + + + diff --git a/aio/content/examples/server-communication/ts/src/app/default-request-options.service.ts b/aio/content/examples/server-communication/ts/src/app/default-request-options.service.ts new file mode 100644 index 0000000000..9ec52daa80 --- /dev/null +++ b/aio/content/examples/server-communication/ts/src/app/default-request-options.service.ts @@ -0,0 +1,16 @@ +// #docregion +import { Injectable } from '@angular/core'; +import { BaseRequestOptions, RequestOptions } from '@angular/http'; + +@Injectable() +export class DefaultRequestOptions extends BaseRequestOptions { + + constructor() { + super(); + + // Set the default 'Content-Type' header + this.headers.set('Content-Type', 'application/json'); + } +} + +export const requestOptionsProvider = { provide: RequestOptions, useClass: DefaultRequestOptions }; diff --git a/aio/content/examples/server-communication/ts/src/app/hero-data.ts b/aio/content/examples/server-communication/ts/src/app/hero-data.ts new file mode 100644 index 0000000000..4db6aca115 --- /dev/null +++ b/aio/content/examples/server-communication/ts/src/app/hero-data.ts @@ -0,0 +1,13 @@ +// #docregion +import { InMemoryDbService } from 'angular-in-memory-web-api'; +export class HeroData implements InMemoryDbService { + createDb() { + let heroes = [ + { id: 1, name: 'Windstorm' }, + { id: 2, name: 'Bombasto' }, + { id: 3, name: 'Magneta' }, + { id: 4, name: 'Tornado' } + ]; + return {heroes}; + } +} diff --git a/aio/content/examples/server-communication/ts/src/app/heroes.json b/aio/content/examples/server-communication/ts/src/app/heroes.json new file mode 100644 index 0000000000..dfb589066b --- /dev/null +++ b/aio/content/examples/server-communication/ts/src/app/heroes.json @@ -0,0 +1,8 @@ +{ + "data": [ + { "id": 1, "name": "Windstorm" }, + { "id": 2, "name": "Bombasto" }, + { "id": 3, "name": "Magneta" }, + { "id": 4, "name": "Tornado" } + ] +} diff --git a/aio/content/examples/server-communication/ts/src/app/toh/hero-list.component.html b/aio/content/examples/server-communication/ts/src/app/toh/hero-list.component.html new file mode 100644 index 0000000000..65ca9cfbb7 --- /dev/null +++ b/aio/content/examples/server-communication/ts/src/app/toh/hero-list.component.html @@ -0,0 +1,11 @@ + +

    Tour of Heroes ({{mode}})

    +

    Heroes:

    +
      +
    • {{hero.name}}
    • +
    + + + + +

    {{errorMessage}}

    diff --git a/aio/content/examples/server-communication/ts/src/app/toh/hero-list.component.promise.ts b/aio/content/examples/server-communication/ts/src/app/toh/hero-list.component.promise.ts new file mode 100644 index 0000000000..abe6a554e9 --- /dev/null +++ b/aio/content/examples/server-communication/ts/src/app/toh/hero-list.component.promise.ts @@ -0,0 +1,41 @@ +// #docregion +// Promise Version +import { Component, OnInit } from '@angular/core'; +import { Hero } from './hero'; +import { HeroService } from './hero.service.promise'; + +@Component({ + selector: 'hero-list-promise', + moduleId: module.id, + templateUrl: './hero-list.component.html', + providers: [ HeroService ], + styles: ['.error {color:red;}'] +}) +// #docregion component +export class HeroListPromiseComponent implements OnInit { + errorMessage: string; + heroes: Hero[]; + mode = 'Promise'; + + constructor (private heroService: HeroService) {} + + ngOnInit() { this.getHeroes(); } + + // #docregion methods + getHeroes() { + this.heroService.getHeroes() + .then( + heroes => this.heroes = heroes, + error => this.errorMessage = error); + } + + addHero (name: string) { + if (!name) { return; } + this.heroService.addHero(name) + .then( + hero => this.heroes.push(hero), + error => this.errorMessage = error); + } + // #enddocregion methods +} +// #enddocregion component diff --git a/aio/content/examples/server-communication/ts/src/app/toh/hero-list.component.ts b/aio/content/examples/server-communication/ts/src/app/toh/hero-list.component.ts new file mode 100644 index 0000000000..e28faacc0e --- /dev/null +++ b/aio/content/examples/server-communication/ts/src/app/toh/hero-list.component.ts @@ -0,0 +1,45 @@ +// #docregion +// Observable Version +import { Component, OnInit } from '@angular/core'; +import { Hero } from './hero'; +import { HeroService } from './hero.service'; + +@Component({ + moduleId: module.id, + selector: 'hero-list', + templateUrl: './hero-list.component.html', + providers: [ HeroService ], + styles: ['.error {color:red;}'] +}) +// #docregion component +export class HeroListComponent implements OnInit { + errorMessage: string; + heroes: Hero[]; + mode = 'Observable'; + + constructor (private heroService: HeroService) {} + + ngOnInit() { this.getHeroes(); } + + // #docregion methods + // #docregion getHeroes + getHeroes() { + this.heroService.getHeroes() + .subscribe( + heroes => this.heroes = heroes, + error => this.errorMessage = error); + } + // #enddocregion getHeroes + + // #docregion addHero + addHero (name: string) { + if (!name) { return; } + this.heroService.addHero(name) + .subscribe( + hero => this.heroes.push(hero), + error => this.errorMessage = error); + } + // #enddocregion addHero + // #enddocregion methods +} +// #enddocregion component diff --git a/aio/content/examples/server-communication/ts/src/app/toh/hero.service.promise.ts b/aio/content/examples/server-communication/ts/src/app/toh/hero.service.promise.ts new file mode 100644 index 0000000000..e38bd4bebf --- /dev/null +++ b/aio/content/examples/server-communication/ts/src/app/toh/hero.service.promise.ts @@ -0,0 +1,60 @@ +// #docplaster +// #docregion +// Promise Version +import { Injectable } from '@angular/core'; +import { Http, Response } from '@angular/http'; +import { Headers, RequestOptions } from '@angular/http'; + +// #docregion rxjs-imports +import 'rxjs/add/operator/toPromise'; +// #enddocregion rxjs-imports + +import { Hero } from './hero'; + +@Injectable() +export class HeroService { + // URL to web api + private heroesUrl = 'app/heroes'; + + constructor (private http: Http) {} + + // #docregion methods + getHeroes (): Promise { + return this.http.get(this.heroesUrl) + .toPromise() + .then(this.extractData) + .catch(this.handleError); + } + + addHero (name: string): Promise { + let headers = new Headers({ 'Content-Type': 'application/json' }); + let options = new RequestOptions({ headers: headers }); + + return this.http.post(this.heroesUrl, { name }, options) + .toPromise() + .then(this.extractData) + .catch(this.handleError); + } + + private extractData(res: Response) { + let body = res.json(); + return body.data || { }; + } + + private handleError (error: Response | any) { + // In a real world app, we might use a remote logging infrastructure + let errMsg: string; + if (error instanceof Response) { + const body = error.json() || ''; + const err = body.error || JSON.stringify(body); + errMsg = `${error.status} - ${error.statusText || ''} ${err}`; + } else { + errMsg = error.message ? error.message : error.toString(); + } + console.error(errMsg); + return Promise.reject(errMsg); + } + +// #enddocregion methods +} +// #enddocregion diff --git a/aio/content/examples/server-communication/ts/src/app/toh/hero.service.ts b/aio/content/examples/server-communication/ts/src/app/toh/hero.service.ts new file mode 100644 index 0000000000..804883d0e8 --- /dev/null +++ b/aio/content/examples/server-communication/ts/src/app/toh/hero.service.ts @@ -0,0 +1,80 @@ +// #docplaster +// #docregion +// Observable Version +// #docregion v1 +import { Injectable } from '@angular/core'; +import { Http, Response } from '@angular/http'; +// #enddocregion v1 +// #docregion import-request-options +import { Headers, RequestOptions } from '@angular/http'; +// #enddocregion import-request-options +// #docregion v1 + +// #docregion rxjs-imports +import { Observable } from 'rxjs/Observable'; +import 'rxjs/add/operator/catch'; +import 'rxjs/add/operator/map'; +// #enddocregion rxjs-imports + +import { Hero } from './hero'; + +@Injectable() +export class HeroService { + // #docregion endpoint + private heroesUrl = 'app/heroes'; // URL to web API + // #enddocregion endpoint + + // #docregion ctor + constructor (private http: Http) {} + // #enddocregion ctor + + // #docregion methods, error-handling, http-get + getHeroes (): Observable { + return this.http.get(this.heroesUrl) + .map(this.extractData) + .catch(this.handleError); + } + // #enddocregion error-handling, http-get, v1 + + // #docregion addhero, addhero-sig + addHero (name: string): Observable { + // #enddocregion addhero-sig + let headers = new Headers({ 'Content-Type': 'application/json' }); + let options = new RequestOptions({ headers: headers }); + + return this.http.post(this.heroesUrl, { name }, options) + .map(this.extractData) + .catch(this.handleError); + } + // #enddocregion addhero + + // #docregion v1, extract-data + private extractData(res: Response) { + let body = res.json(); + return body.data || { }; + } + // #enddocregion extract-data + // #docregion error-handling + + private handleError (error: Response | any) { + // In a real world app, we might use a remote logging infrastructure + let errMsg: string; + if (error instanceof Response) { + const body = error.json() || ''; + const err = body.error || JSON.stringify(body); + errMsg = `${error.status} - ${error.statusText || ''} ${err}`; + } else { + errMsg = error.message ? error.message : error.toString(); + } + console.error(errMsg); + return Observable.throw(errMsg); + } + // #enddocregion error-handling, methods +} +// #enddocregion + +/* + // #docregion endpoint-json + private heroesUrl = 'app/heroes.json'; // URL to JSON file + // #enddocregion endpoint-json +*/ diff --git a/aio/content/examples/server-communication/ts/src/app/toh/hero.ts b/aio/content/examples/server-communication/ts/src/app/toh/hero.ts new file mode 100644 index 0000000000..09b8d295ce --- /dev/null +++ b/aio/content/examples/server-communication/ts/src/app/toh/hero.ts @@ -0,0 +1,6 @@ +// #docregion +export class Hero { + constructor( + public id: number, + public name: string) { } +} diff --git a/aio/content/examples/server-communication/ts/src/app/wiki/wiki-smart.component.ts b/aio/content/examples/server-communication/ts/src/app/wiki/wiki-smart.component.ts new file mode 100644 index 0000000000..ec95472b98 --- /dev/null +++ b/aio/content/examples/server-communication/ts/src/app/wiki/wiki-smart.component.ts @@ -0,0 +1,48 @@ +/* tslint:disable: member-ordering forin */ +// #docplaster +// #docregion +import { Component, OnInit } from '@angular/core'; + +// #docregion rxjs-imports +import { Observable } from 'rxjs/Observable'; +import 'rxjs/add/operator/debounceTime'; +import 'rxjs/add/operator/distinctUntilChanged'; +import 'rxjs/add/operator/switchMap'; + +// #docregion import-subject +import { Subject } from 'rxjs/Subject'; +// #enddocregion import-subject + +import { WikipediaService } from './wikipedia.service'; + +@Component({ + moduleId: module.id, + selector: 'my-wiki-smart', + template: ` +

    Smarter Wikipedia Demo

    +

    Search when typing stops

    + +
      +
    • {{item}}
    • +
    `, + providers: [ WikipediaService ] +}) +export class WikiSmartComponent implements OnInit { + items: Observable; + + constructor (private wikipediaService: WikipediaService) {} + + // #docregion subject + private searchTermStream = new Subject(); + search(term: string) { this.searchTermStream.next(term); } + // #enddocregion subject + + ngOnInit() { + // #docregion observable-operators + this.items = this.searchTermStream + .debounceTime(300) + .distinctUntilChanged() + .switchMap((term: string) => this.wikipediaService.search(term)); + // #enddocregion observable-operators + } +} diff --git a/aio/content/examples/server-communication/ts/src/app/wiki/wiki.component.ts b/aio/content/examples/server-communication/ts/src/app/wiki/wiki.component.ts new file mode 100644 index 0000000000..4230df12a1 --- /dev/null +++ b/aio/content/examples/server-communication/ts/src/app/wiki/wiki.component.ts @@ -0,0 +1,26 @@ +// #docregion +import { Component } from '@angular/core'; +import { Observable } from 'rxjs/Observable'; + +import { WikipediaService } from './wikipedia.service'; + +@Component({ + selector: 'my-wiki', + template: ` +

    Wikipedia Demo

    +

    Search after each keystroke

    + +
      +
    • {{item}}
    • +
    `, + providers: [ WikipediaService ] +}) +export class WikiComponent { + items: Observable; + + constructor (private wikipediaService: WikipediaService) { } + + search (term: string) { + this.items = this.wikipediaService.search(term); + } +} diff --git a/aio/content/examples/server-communication/ts/src/app/wiki/wikipedia.service.1.ts b/aio/content/examples/server-communication/ts/src/app/wiki/wikipedia.service.1.ts new file mode 100644 index 0000000000..5cbcb7d707 --- /dev/null +++ b/aio/content/examples/server-communication/ts/src/app/wiki/wikipedia.service.1.ts @@ -0,0 +1,26 @@ +// Create the query string by hand +// #docregion +import { Injectable } from '@angular/core'; +import { Jsonp } from '@angular/http'; + +import 'rxjs/add/operator/map'; + +@Injectable() +export class WikipediaService { + constructor(private jsonp: Jsonp) { } + + // TODO: Add error handling + search(term: string) { + + let wikiUrl = 'http://en.wikipedia.org/w/api.php'; + + // #docregion query-string + let queryString = + `?search=${term}&action=opensearch&format=json&callback=JSONP_CALLBACK`; + + return this.jsonp + .get(wikiUrl + queryString) + .map(response => response.json()[1]); + // #enddocregion query-string + } +} diff --git a/aio/content/examples/server-communication/ts/src/app/wiki/wikipedia.service.ts b/aio/content/examples/server-communication/ts/src/app/wiki/wikipedia.service.ts new file mode 100644 index 0000000000..a38167d1c6 --- /dev/null +++ b/aio/content/examples/server-communication/ts/src/app/wiki/wikipedia.service.ts @@ -0,0 +1,30 @@ +// #docregion +import { Injectable } from '@angular/core'; +import { Jsonp, URLSearchParams } from '@angular/http'; + +import 'rxjs/add/operator/map'; + +@Injectable() +export class WikipediaService { + constructor(private jsonp: Jsonp) {} + + search (term: string) { + + let wikiUrl = 'http://en.wikipedia.org/w/api.php'; + + // #docregion search-parameters + let params = new URLSearchParams(); + params.set('search', term); // the user's search value + params.set('action', 'opensearch'); + params.set('format', 'json'); + params.set('callback', 'JSONP_CALLBACK'); + // #enddocregion search-parameters + + // #docregion call-jsonp + // TODO: Add error handling + return this.jsonp + .get(wikiUrl, { search: params }) + .map(response => response.json()[1]); + // #enddocregion call-jsonp + } +} diff --git a/aio/content/examples/server-communication/ts/src/index.html b/aio/content/examples/server-communication/ts/src/index.html new file mode 100644 index 0000000000..5c51f21c91 --- /dev/null +++ b/aio/content/examples/server-communication/ts/src/index.html @@ -0,0 +1,27 @@ + + + + + Angular Http Demo + + + + + + + + + + + + + + + + + Loading... + + + diff --git a/aio/content/examples/server-communication/ts/src/main.ts b/aio/content/examples/server-communication/ts/src/main.ts new file mode 100644 index 0000000000..6b6532d428 --- /dev/null +++ b/aio/content/examples/server-communication/ts/src/main.ts @@ -0,0 +1,5 @@ +// #docregion +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/setup/e2e-spec.ts b/aio/content/examples/setup/e2e-spec.ts new file mode 100644 index 0000000000..73921707ee --- /dev/null +++ b/aio/content/examples/setup/e2e-spec.ts @@ -0,0 +1,17 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by } from 'protractor'; + +describe('QuickStart E2E Tests', function () { + + let expectedMsg = 'Hello Angular'; + + beforeEach(function () { + browser.get(''); + }); + + it(`should display: ${expectedMsg}`, function () { + expect(element(by.css('h1')).getText()).toEqual(expectedMsg); + }); + +}); diff --git a/aio/content/examples/setup/ts/example-config.json b/aio/content/examples/setup/ts/example-config.json new file mode 100644 index 0000000000..6af3884d8d --- /dev/null +++ b/aio/content/examples/setup/ts/example-config.json @@ -0,0 +1,3 @@ +{ + "unittesting": true +} diff --git a/aio/content/examples/setup/ts/non-essential-files.txt b/aio/content/examples/setup/ts/non-essential-files.txt new file mode 100644 index 0000000000..6389af193c --- /dev/null +++ b/aio/content/examples/setup/ts/non-essential-files.txt @@ -0,0 +1,13 @@ +.git +.gitignore +.travis.yml +*.spec*.ts +CHANGELOG.md +e2e +favicon.ico +karma.conf.js +karma-test-shim.js +LICENSE +non-essential-files.txt +protractor.config.js +README.md diff --git a/aio/content/examples/setup/ts/plnkr.json b/aio/content/examples/setup/ts/plnkr.json new file mode 100644 index 0000000000..22b528eec5 --- /dev/null +++ b/aio/content/examples/setup/ts/plnkr.json @@ -0,0 +1,13 @@ +{ + "description": "QuickStart Setup", + "basePath": "src/", + "files": [ + "app/app.component.ts", + "app/app.module.ts", + "index.html", + "main.ts", + "styles.css" + ], + "open": "app/app.component.ts", + "tags": ["quickstart", "setup", "seed"] +} diff --git a/aio/content/examples/setup/ts/plnkr.no-link.html b/aio/content/examples/setup/ts/plnkr.no-link.html new file mode 100644 index 0000000000..0d03a82e7a --- /dev/null +++ b/aio/content/examples/setup/ts/plnkr.no-link.html @@ -0,0 +1,189 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/setup/ts/quickstart-specs.plnkr.json b/aio/content/examples/setup/ts/quickstart-specs.plnkr.json new file mode 100644 index 0000000000..a7dfedb595 --- /dev/null +++ b/aio/content/examples/setup/ts/quickstart-specs.plnkr.json @@ -0,0 +1,13 @@ +{ + "description": "Quickstart AppComponent Testing", + "basePath": "src/", + "files":[ + "browser-test-shim.js", + "app/app.component.ts", + "app/app.component.spec.ts", + "quickstart-specs.html" + ], + "main": "quickstart-specs.html", + "open": "app/app.component.spec.ts", + "tags": ["quickstart", "setup", "testing"] +} diff --git a/aio/content/examples/setup/ts/quickstart-specs.plnkr.no-link.html b/aio/content/examples/setup/ts/quickstart-specs.plnkr.no-link.html new file mode 100644 index 0000000000..d1dbb02d71 --- /dev/null +++ b/aio/content/examples/setup/ts/quickstart-specs.plnkr.no-link.html @@ -0,0 +1,264 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/setup/ts/src/app/app.component.spec.ts b/aio/content/examples/setup/ts/src/app/app.component.spec.ts new file mode 100644 index 0000000000..7769024464 --- /dev/null +++ b/aio/content/examples/setup/ts/src/app/app.component.spec.ts @@ -0,0 +1,33 @@ +import { AppComponent } from './app.component'; + +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { By } from '@angular/platform-browser'; +import { DebugElement } from '@angular/core'; + +describe('AppComponent', function () { + let de: DebugElement; + let comp: AppComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ AppComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(AppComponent); + comp = fixture.componentInstance; + de = fixture.debugElement.query(By.css('h1')); + }); + + it('should create component', () => expect(comp).toBeDefined() ); + + it('should have expected

    text', () => { + fixture.detectChanges(); + const h1 = de.nativeElement; + expect(h1.innerText).toMatch(/angular/i, + '

    should say something about "Angular"'); + }); +}); diff --git a/aio/content/examples/setup/ts/src/app/app.component.ts b/aio/content/examples/setup/ts/src/app/app.component.ts new file mode 100644 index 0000000000..1ef28fc5c4 --- /dev/null +++ b/aio/content/examples/setup/ts/src/app/app.component.ts @@ -0,0 +1,8 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'my-app', + template: `

    Hello {{name}}

    ` +}) +export class AppComponent { name = 'Angular'; } diff --git a/aio/content/examples/setup/ts/src/app/app.module.ts b/aio/content/examples/setup/ts/src/app/app.module.ts new file mode 100644 index 0000000000..50a0e6eb47 --- /dev/null +++ b/aio/content/examples/setup/ts/src/app/app.module.ts @@ -0,0 +1,11 @@ +// #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/aio/content/examples/setup/ts/src/index.html b/aio/content/examples/setup/ts/src/index.html new file mode 100644 index 0000000000..58e5112308 --- /dev/null +++ b/aio/content/examples/setup/ts/src/index.html @@ -0,0 +1,28 @@ + + + + + Angular Quickstart Seed + + + + + + + + + + + + + + + + + + + + + diff --git a/aio/content/examples/setup/ts/src/main.ts b/aio/content/examples/setup/ts/src/main.ts new file mode 100644 index 0000000000..02d58dceac --- /dev/null +++ b/aio/content/examples/setup/ts/src/main.ts @@ -0,0 +1,5 @@ +// #docregion +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/setup/ts/src/quickstart-specs.html b/aio/content/examples/setup/ts/src/quickstart-specs.html new file mode 100644 index 0000000000..9bc81ccf2e --- /dev/null +++ b/aio/content/examples/setup/ts/src/quickstart-specs.html @@ -0,0 +1,41 @@ + + + + + + + 1st Specs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/aio/content/examples/structural-directives/e2e-spec.ts b/aio/content/examples/structural-directives/e2e-spec.ts new file mode 100644 index 0000000000..51f30bf0bb --- /dev/null +++ b/aio/content/examples/structural-directives/e2e-spec.ts @@ -0,0 +1,58 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by } from 'protractor'; + +describe('Structural Directives', function () { + + beforeAll(function () { + browser.get(''); + }); + + it('first div should show hero name with *ngIf', function () { + const allDivs = element.all(by.tagName('div')); + expect(allDivs.get(0).getText()).toEqual('Mr. Nice'); + }); + + it('first li should show hero name with *ngFor', function () { + const allLis = element.all(by.tagName('li')); + expect(allLis.get(0).getText()).toEqual('Mr. Nice'); + }); + + it('ngSwitch have three instances', function () { + const happyHeroEls = element.all(by.tagName('happy-hero')); + expect(happyHeroEls.count()).toEqual(3); + }); + + it('should toggle *ngIf="hero" with a button', function () { + const toggleHeroButton = element.all(by.cssContainingText('button', 'Toggle hero')).get(0); + const paragraph = element.all(by.cssContainingText('p', 'I turned the corner')); + expect(paragraph.get(0).getText()).toContain('I waved'); + toggleHeroButton.click().then(() => { + expect(paragraph.get(0).getText()).not.toContain('I waved'); + }); + }); + + it('should have only one "Hip!" (the other is erased)', function () { + const paragraph = element.all(by.cssContainingText('p', 'Hip!')); + expect(paragraph.count()).toEqual(1); + }); + + it('myUnless should show 3 paragraph (A)s and (B)s at the start', function () { + const paragraph = element.all(by.css('p.unless')); + expect(paragraph.count()).toEqual(3); + for (let i = 0; i < 3; i++) { + expect(paragraph.get(i).getText()).toContain('(A)'); + } + }); + + it('myUnless should show 1 paragraph (B) after toggling condition', function () { + const toggleConditionButton = element.all(by.cssContainingText('button', 'Toggle condition')).get(0); + const paragraph = element.all(by.css('p.unless')); + + toggleConditionButton.click().then(() => { + expect(paragraph.count()).toEqual(1); + expect(paragraph.get(0).getText()).toContain('(B)'); + }); + }); +}); + diff --git a/aio/content/examples/structural-directives/ts/example-config.json b/aio/content/examples/structural-directives/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/structural-directives/ts/plnkr.json b/aio/content/examples/structural-directives/ts/plnkr.json new file mode 100644 index 0000000000..58a26d7b4f --- /dev/null +++ b/aio/content/examples/structural-directives/ts/plnkr.json @@ -0,0 +1,13 @@ +{ + "description": "Structural directives", + "basePath": "src/", + "files": [ + "!**/*.d.ts", + "!**/*.js", + "!app/scrap.txt" + ], + "tags": [ + "structural", "directives", "template", "ngIf", + "ngSwitch", "ngFor" + ] +} diff --git a/aio/content/examples/structural-directives/ts/plnkr.no-link.html b/aio/content/examples/structural-directives/ts/plnkr.no-link.html new file mode 100644 index 0000000000..1f7888664f --- /dev/null +++ b/aio/content/examples/structural-directives/ts/plnkr.no-link.html @@ -0,0 +1,612 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/structural-directives/ts/src/app/app.component.css b/aio/content/examples/structural-directives/ts/src/app/app.component.css new file mode 100644 index 0000000000..a3ed305907 --- /dev/null +++ b/aio/content/examples/structural-directives/ts/src/app/app.component.css @@ -0,0 +1,70 @@ +/* #docregion */ +button { + min-width: 100px; + font-size: 100%; +} + +.box { + border: 1px solid gray; + max-width: 600px; + padding: 4px; +} +.choices { + font-style: italic; +} + +code, .code { + background-color: #eee; + color: black; + font-family: Courier, sans-serif; + font-size: 85%; +} + +div.code { + width: 400px; +} + +.heroic { + font-size: 150%; + font-weight: bold; +} + +hr { + margin: 40px 0 +} + +.odd { + background-color: palegoldenrod; +} + +td, th { + text-align: left; + vertical-align: top; +} + +/* #docregion p-span */ +p span { color: red; font-size: 70%; } +/* #enddocregion p-span */ + +.unless { + border: 2px solid; + padding: 6px; +} + +p.unless { + width: 500px; +} + +button.a, span.a, .unless.a { + color: red; + border-color: gold; + background-color: yellow; + font-size: 100%; +} + +button.b, span.b, .unless.b { + color: black; + border-color: green; + background-color: lightgreen; + font-size: 100%; +} diff --git a/aio/content/examples/structural-directives/ts/src/app/app.component.html b/aio/content/examples/structural-directives/ts/src/app/app.component.html new file mode 100644 index 0000000000..2758553e39 --- /dev/null +++ b/aio/content/examples/structural-directives/ts/src/app/app.component.html @@ -0,0 +1,252 @@ + + +

    Structural Directives

    + +

    Conditional display of hero

    + +
    + +
    {{hero.name}}
    + +
    + +

    List of heroes

    + + +
      + +
    • {{hero.name}}
    • + +
    + + + +
    + +

    NgIf

    + + +

    + Expression is true and ngIf is true. + This paragraph is in the DOM. +

    +

    + Expression is false and ngIf is false. + This paragraph is not in the DOM. +

    + + + +

    + Expression sets display to "block"" . + This paragraph is visible. +

    +

    + Expression sets display to "none" . + This paragraph is hidden but still in the DOM. +

    + + +

    NgIf with template

    +

    <template> element

    + + + + +

    template attribute

    + +
    {{hero.name}}
    + + +
    + +

    <ng-container>

    + +

    *ngIf with a <ng-container>

    + + + + +

    + I turned the corner + + and saw {{hero.name}}. I waved + + and continued on my way. +

    + + +

    + I turned the corner + + and saw {{hero.name}}. I waved + + and continued on my way. +

    + + +

    <select> with <span>

    + +
    + Pick your favorite hero + () +
    + + + +

    <select> with <ng-container>

    + +
    + Pick your favorite hero + () +
    + + +

    + +
    + +

    NgFor

    + +
    + +

    <div *ngFor="let hero of heroes; let i=index; let odd=odd; trackBy: trackById" [class.odd]="odd">

    + +
    + ({{i}}) {{hero.name}} +
    + + +

    <div template="ngFor let hero of heroes; let i=index; let odd=odd; trackBy: trackById" [class.odd]="odd">

    + +
    + ({{i}}) {{hero.name}} +
    + + +

    <template ngFor let-hero [ngForOf]="heroes" let-i="index" let-odd="odd" [ngForTrackBy]="trackById">

    + + + + +
    +
    + +

    NgSwitch

    + +
    Pick your favorite hero
    +

    + + + + +

    + +

    NgSwitch

    + + +
    + + + + +
    + + +

    NgSwitch with template attribute

    + +
    + + + + +
    + + +

    NgSwitch with <template>

    + +
    + + + + +
    + + +
    + +

    <template>

    + +

    Hip!

    + +

    Hooray!

    + + +
    + +

    UnlessDirective

    +

    + The condition is currently + {{condition}}. + +

    + +

    + (A) This paragraph is displayed because the condition is false. +

    + +

    + (B) Although the condition is true, + this paragraph is displayed because myUnless is set to false. +

    + + + +

    UnlessDirective with template

    + + +

    Show this sentence unless the condition is true.

    + + +

    + (A) <p template="myUnless condition" class="code unless"> +

    + + + diff --git a/aio/content/examples/structural-directives/ts/src/app/app.component.ts b/aio/content/examples/structural-directives/ts/src/app/app.component.ts new file mode 100644 index 0000000000..5fd9dc417f --- /dev/null +++ b/aio/content/examples/structural-directives/ts/src/app/app.component.ts @@ -0,0 +1,24 @@ +// #docregion +import { Component } from '@angular/core'; + +import { Hero, heroes } from './hero'; + +@Component({ + moduleId: module.id, + selector: 'my-app', + templateUrl: './app.component.html', + styleUrls: [ './app.component.css' ] +}) +export class AppComponent { + heroes = heroes; + hero = this.heroes[0]; + + condition = false; + logs: string[] = []; + showSad = true; + status = 'ready'; + + // #docregion trackByHero + trackById(index: number, hero: Hero): number { return hero.id; } + // #enddocregion trackByHero +} diff --git a/aio/content/examples/structural-directives/ts/src/app/app.module.ts b/aio/content/examples/structural-directives/ts/src/app/app.module.ts new file mode 100644 index 0000000000..b6ffb456c9 --- /dev/null +++ b/aio/content/examples/structural-directives/ts/src/app/app.module.ts @@ -0,0 +1,19 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { FormsModule } from '@angular/forms'; +import { BrowserModule } from '@angular/platform-browser'; + +import { AppComponent } from './app.component'; +import { heroSwitchComponents } from './hero-switch.components'; +import { UnlessDirective } from './unless.directive'; + +@NgModule({ + imports: [ BrowserModule, FormsModule ], + declarations: [ + AppComponent, + heroSwitchComponents, + UnlessDirective + ], + bootstrap: [ AppComponent ] +}) +export class AppModule { } diff --git a/aio/content/examples/structural-directives/ts/src/app/hero-switch.components.ts b/aio/content/examples/structural-directives/ts/src/app/hero-switch.components.ts new file mode 100644 index 0000000000..bb31563611 --- /dev/null +++ b/aio/content/examples/structural-directives/ts/src/app/hero-switch.components.ts @@ -0,0 +1,43 @@ +// #docregion +import { Component, Input } from '@angular/core'; +import { Hero } from './hero'; + +@Component({ + selector: 'happy-hero', + template: `Wow. You like {{hero.name}}. What a happy hero ... just like you.` +}) +export class HappyHeroComponent { + @Input() hero: Hero; +} + +@Component({ + selector: 'sad-hero', + template: `You like {{hero.name}}? Such a sad hero. Are you sad too?` +}) +export class SadHeroComponent { + @Input() hero: Hero; +} + +@Component({ + selector: 'confused-hero', + template: `Are you as confused as {{hero.name}}?` +}) +export class ConfusedHeroComponent { + @Input() hero: Hero; +} + +@Component({ + selector: 'unknown-hero', + template: `{{message}}` +}) +export class UnknownHeroComponent { + @Input() hero: Hero; + get message() { + return this.hero && this.hero.name ? + `${this.hero.name} is strange and mysterious.` : + 'Are you feeling indecisive?'; + } +} + +export const heroSwitchComponents = + [ HappyHeroComponent, SadHeroComponent, ConfusedHeroComponent, UnknownHeroComponent ]; diff --git a/aio/content/examples/structural-directives/ts/src/app/hero.ts b/aio/content/examples/structural-directives/ts/src/app/hero.ts new file mode 100644 index 0000000000..89f0cbfdf8 --- /dev/null +++ b/aio/content/examples/structural-directives/ts/src/app/hero.ts @@ -0,0 +1,13 @@ +// #docregion +export class Hero { + id: number; + name: string; + emotion?: string; +} + +export const heroes: Hero[] = [ + { id: 1, name: 'Mr. Nice', emotion: 'happy'}, + { id: 2, name: 'Narco', emotion: 'sad' }, + { id: 3, name: 'Windstorm', emotion: 'confused' }, + { id: 4, name: 'Magneta'} +]; diff --git a/aio/content/examples/structural-directives/ts/src/app/scrap.txt b/aio/content/examples/structural-directives/ts/src/app/scrap.txt new file mode 100644 index 0000000000..f2e4766bdb --- /dev/null +++ b/aio/content/examples/structural-directives/ts/src/app/scrap.txt @@ -0,0 +1,21 @@ +// interesting but unused code + heroChooser(picker: HTMLFieldSetElement) { + let choices = picker.children; + this.favoriteHero = undefined; + for (let i = 0; i < choices.length; i++) { + let choice = choices[i].children[0] as HTMLInputElement; + if (choice.checked) { this.favoriteHero = this.heroes[i]; } + } + } + + +

    Switch with *ngFor repeated switchCases using <ng-container>

    + +
    + Your favorite hero is ... + + {{hero.name}} + + None of the above +
    + diff --git a/aio/content/examples/structural-directives/ts/src/app/unless.directive.ts b/aio/content/examples/structural-directives/ts/src/app/unless.directive.ts new file mode 100644 index 0000000000..19d48b4453 --- /dev/null +++ b/aio/content/examples/structural-directives/ts/src/app/unless.directive.ts @@ -0,0 +1,55 @@ +// #docplaster +// #docregion +// #docregion no-docs +// #docregion skeleton +import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core'; + +// #enddocregion skeleton +/** + * Add the template content to the DOM unless the condition is true. +// #enddocregion no-docs + * + * If the expression assigned to `myUnless` evaluates to a truthy value + * then the templated elements are removed removed from the DOM, + * the templated elements are (re)inserted into the DOM. + * + *
    + * Congrats! Everything is great! + *
    + * + * ### Syntax + * * + * - `
    ...
    ` + * - `
    ...
    ` + * - `` + * +// #docregion no-docs + */ +// #docregion skeleton +@Directive({ selector: '[myUnless]'}) +export class UnlessDirective { + // #enddocregion skeleton + private hasView = false; + + // #docregion ctor + constructor( + private templateRef: TemplateRef, + private viewContainer: ViewContainerRef) { } + // #enddocregion ctor + + // #docregion set + @Input() set myUnless(condition: boolean) { + if (!condition && !this.hasView) { + this.viewContainer.createEmbeddedView(this.templateRef); + this.hasView = true; + } else if (condition && this.hasView) { + this.viewContainer.clear(); + this.hasView = false; + } + } + // #enddocregion set + // #docregion skeleton +} +// #enddocregion skeleton +// #enddocregion no-docs +// #enddocregion diff --git a/aio/content/examples/structural-directives/ts/src/index.html b/aio/content/examples/structural-directives/ts/src/index.html new file mode 100644 index 0000000000..ce7a33266d --- /dev/null +++ b/aio/content/examples/structural-directives/ts/src/index.html @@ -0,0 +1,27 @@ + + + + + Angular Structural Directives + + + + + + + + + + + + + + + + + Loading... + + + diff --git a/aio/content/examples/structural-directives/ts/src/main.ts b/aio/content/examples/structural-directives/ts/src/main.ts new file mode 100644 index 0000000000..105b06712d --- /dev/null +++ b/aio/content/examples/structural-directives/ts/src/main.ts @@ -0,0 +1,6 @@ +// #docregion +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); + diff --git a/aio/content/examples/style-guide/e2e-spec.ts b/aio/content/examples/style-guide/e2e-spec.ts new file mode 100644 index 0000000000..d143ae5573 --- /dev/null +++ b/aio/content/examples/style-guide/e2e-spec.ts @@ -0,0 +1,191 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by } from 'protractor'; + +describe('Style Guide', function () { + it('01-01', function () { + browser.get('#/01-01'); + + let pre = element(by.tagName('toh-heroes > pre')); + expect(pre.getText()).toContain('Bombasto'); + expect(pre.getText()).toContain('Tornado'); + expect(pre.getText()).toContain('Magneta'); + }); + + it('02-07', function () { + browser.get('#/02-07'); + + let hero = element(by.tagName('toh-hero > div')); + let users = element(by.tagName('admin-users > div')); + + expect(hero.getText()).toBe('hero component'); + expect(users.getText()).toBe('users component'); + }); + + it('02-08', function () { + browser.get('#/02-08'); + + let input = element(by.tagName('input[tohvalidate]')); + expect(input.isPresent()).toBe(true); + }); + + it('03-01', function () { + browser.get('#/03-01'); + + let div = element(by.tagName('sg-app > div')); + expect(div.getText()).toBe('The expected error is 42'); + }); + + it('03-02', function () { + browser.get('#/03-02'); + + let divs = element.all(by.tagName('sg-app > div')); + expect(divs.get(0).getText()).toBe('Heroes url: api/heroes'); + expect(divs.get(1).getText()).toBe('Villains url: api/villains'); + }); + + it('03-03', function () { + browser.get('#/03-03'); + + let div = element(by.tagName('sg-app > div')); + expect(div.getText()).toBe('Our hero is RubberMan and He is so elastic'); + }); + + it('03-04', function () { + browser.get('#/03-04'); + + let buttons = element.all(by.tagName('sg-app > button')); + expect(buttons.get(0).getText()).toBe('Show toast'); + expect(buttons.get(1).getText()).toBe('Hide toast'); + }); + + it('03-06', function () { + browser.get('#/03-06'); + + let div = element(by.tagName('sg-app > div')); + expect(div.getText()).toBe('Actual favorite: Windstorm'); + + let lis = element.all(by.tagName('sg-app > ul > li')); + expect(lis.get(0).getText()).toBe('Windstorm'); + expect(lis.get(1).getText()).toBe('Bombasto'); + expect(lis.get(2).getText()).toBe('Magneta'); + expect(lis.get(3).getText()).toBe('Tornado'); + }); + + it('04-10', function () { + browser.get('#/04-10'); + + let div = element(by.tagName('sg-app > toh-heroes > div')); + expect(div.getText()).toBe('This is heroes component'); + }); + + it('05-02', function () { + browser.get('#/05-02'); + + let button = element(by.tagName('sg-app > toh-hero-button > button')); + expect(button.getText()).toBe('Hero button'); + }); + + it('05-03', function () { + browser.get('#/05-03'); + + let button = element(by.tagName('sg-app > toh-hero-button > button')); + expect(button.getText()).toBe('Hero button'); + }); + + it('05-04', function () { + browser.get('#/05-04'); + + let h2 = element(by.tagName('sg-app > toh-heroes > div > h2')); + expect(h2.getText()).toBe('My Heroes'); + }); + + it('05-12', function () { + browser.get('#/05-12'); + + let button = element(by.tagName('sg-app > toh-hero-button > button')); + expect(button.getText()).toBe('OK'); + }); + + it('05-13', function () { + browser.get('#/05-13'); + + let button = element(by.tagName('sg-app > toh-hero-button > button')); + expect(button.getText()).toBe('OK'); + }); + + it('05-14', function () { + browser.get('#/05-14'); + + let toast = element(by.tagName('sg-app > toh-toast')); + expect(toast.getText()).toBe('...'); + }); + + it('05-15', function () { + browser.get('#/05-15'); + + let heroList = element(by.tagName('sg-app > toh-hero-list')); + expect(heroList.getText()).toBe('...'); + }); + + it('05-16', function () { + browser.get('#/05-16'); + + let hero = element(by.tagName('sg-app > toh-hero')); + expect(hero.getText()).toBe('...'); + }); + + it('05-17', function () { + browser.get('#/05-17'); + + let section = element(by.tagName('sg-app > toh-hero-list > section')); + expect(section.getText()).toContain('Our list of heroes'); + expect(section.getText()).toContain('Total powers'); + expect(section.getText()).toContain('Average power'); + }); + + it('06-01', function () { + browser.get('#/06-01'); + + let div = element(by.tagName('sg-app > div[tohhighlight]')); + expect(div.getText()).toBe('Bombasta'); + }); + + it('06-03', function () { + browser.get('#/06-03'); + + let input = element(by.tagName('input[tohvalidator]')); + expect(input.isPresent()).toBe(true); + }); + + it('07-01', function () { + browser.get('#/07-01'); + + let lis = element.all(by.tagName('sg-app > ul > li')); + expect(lis.get(0).getText()).toBe('Windstorm'); + expect(lis.get(1).getText()).toBe('Bombasto'); + expect(lis.get(2).getText()).toBe('Magneta'); + expect(lis.get(3).getText()).toBe('Tornado'); + }); + + it('07-03', function () { + browser.get('#/07-03'); + + let pre = element(by.tagName('toh-heroes > pre')); + expect(pre.getText()).toContain('[]'); + }); + + it('07-04', function () { + browser.get('#/07-04'); + + let pre = element(by.tagName('toh-app > pre')); + expect(pre.getText()).toContain('[]'); + }); + + it('09-01', function () { + browser.get('#/09-01'); + + let button = element(by.tagName('sg-app > toh-hero-button > button')); + expect(button.getText()).toBe('OK'); + }); +}); diff --git a/aio/content/examples/style-guide/ts/.gitignore b/aio/content/examples/style-guide/ts/.gitignore new file mode 100644 index 0000000000..bd6423cecb --- /dev/null +++ b/aio/content/examples/style-guide/ts/.gitignore @@ -0,0 +1,2 @@ +*.js +!systemjs.custom.js diff --git a/aio/content/examples/style-guide/ts/example-config.json b/aio/content/examples/style-guide/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/style-guide/ts/plnkr.json b/aio/content/examples/style-guide/ts/plnkr.json new file mode 100644 index 0000000000..bf9e9681c5 --- /dev/null +++ b/aio/content/examples/style-guide/ts/plnkr.json @@ -0,0 +1,9 @@ +{ + "description": "Style Guide", + "basePath": "src/", + "files":[ + "!**/*.d.ts", + "!**/*.js" + ], + "tags": ["style guide, styleguide"] +} diff --git a/aio/content/examples/style-guide/ts/plnkr.no-link.html b/aio/content/examples/style-guide/ts/plnkr.no-link.html new file mode 100644 index 0000000000..f1edc0fe49 --- /dev/null +++ b/aio/content/examples/style-guide/ts/plnkr.no-link.html @@ -0,0 +1,4350 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/style-guide/ts/src/01-01/app/app.component.css b/aio/content/examples/style-guide/ts/src/01-01/app/app.component.css new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/style-guide/ts/src/01-01/app/app.component.ts b/aio/content/examples/style-guide/ts/src/01-01/app/app.component.ts new file mode 100644 index 0000000000..7997c4433c --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/01-01/app/app.component.ts @@ -0,0 +1,15 @@ +// #docregion +import { Component } from '@angular/core'; + +import { HeroService } from './heroes'; + +@Component({ + moduleId: module.id, + selector: 'toh-app', + template: ` + + `, + styleUrls: ['./app.component.css'], + providers: [ HeroService ] +}) +export class AppComponent { } diff --git a/aio/content/examples/style-guide/ts/src/01-01/app/app.module.ts b/aio/content/examples/style-guide/ts/src/01-01/app/app.module.ts new file mode 100644 index 0000000000..53f29ea8cb --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/01-01/app/app.module.ts @@ -0,0 +1,27 @@ +// #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/heroes.component'; + +@NgModule({ + imports: [ + BrowserModule, + // #enddocregion + RouterModule.forChild([{ path: '01-01', component: AppComponent }]) + // #docregion + ], + declarations: [ + AppComponent, + HeroesComponent + ], + exports: [ AppComponent ], + bootstrap: [ AppComponent ] +}) +export class AppModule { } +// #enddocregion + + diff --git a/aio/content/examples/style-guide/ts/src/01-01/app/heroes/hero.component.avoid.ts b/aio/content/examples/style-guide/ts/src/01-01/app/heroes/hero.component.avoid.ts new file mode 100644 index 0000000000..853e6ab64e --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/01-01/app/heroes/hero.component.avoid.ts @@ -0,0 +1,49 @@ +// #docregion +/* avoid */ + +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { BrowserModule } from '@angular/platform-browser'; +import { NgModule, Component, OnInit } from '@angular/core'; + +class Hero { + id: number; + name: string; +} + +@Component({ + selector: 'my-app', + template: ` +

    {{title}}

    +
    {{heroes | json}}
    + `, + styleUrls: ['app/app.component.css'] +}) +class AppComponent implements OnInit { + title = 'Tour of Heroes'; + + heroes: Hero[] = []; + + ngOnInit() { + getHeroes().then(heroes => this.heroes = heroes); + } +} + +@NgModule({ + imports: [ BrowserModule ], + declarations: [ AppComponent ], + exports: [ AppComponent ], + bootstrap: [ AppComponent ] +}) +export class AppModule { } + +platformBrowserDynamic().bootstrapModule(AppModule); + +const HEROES: Hero[] = [ + {id: 1, name: 'Bombasto'}, + {id: 2, name: 'Tornado'}, + {id: 3, name: 'Magneta'}, +]; + +function getHeroes(): Promise { + return Promise.resolve(HEROES); // TODO: get hero data from the server; +} diff --git a/aio/content/examples/style-guide/ts/src/01-01/app/heroes/heroes.component.ts b/aio/content/examples/style-guide/ts/src/01-01/app/heroes/heroes.component.ts new file mode 100644 index 0000000000..9e3546db90 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/01-01/app/heroes/heroes.component.ts @@ -0,0 +1,21 @@ +// #docregion +import { Component, OnInit } from '@angular/core'; + +import { Hero, HeroService } from './shared'; + +@Component({ + selector: 'toh-heroes', + template: ` +
    {{heroes | json}}
    + ` +}) +export class HeroesComponent implements OnInit { + heroes: Hero[] = []; + + constructor(private heroService: HeroService) {} + + ngOnInit() { + this.heroService.getHeroes() + .then(heroes => this.heroes = heroes); + } +} diff --git a/aio/content/examples/style-guide/ts/src/01-01/app/heroes/index.ts b/aio/content/examples/style-guide/ts/src/01-01/app/heroes/index.ts new file mode 100644 index 0000000000..a8d7f1d422 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/01-01/app/heroes/index.ts @@ -0,0 +1,2 @@ +export * from './shared'; +export * from './heroes.component'; diff --git a/aio/content/examples/style-guide/ts/src/01-01/app/heroes/shared/hero.model.ts b/aio/content/examples/style-guide/ts/src/01-01/app/heroes/shared/hero.model.ts new file mode 100644 index 0000000000..8f7cc205c8 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/01-01/app/heroes/shared/hero.model.ts @@ -0,0 +1,5 @@ +// #docregion +export class Hero { + id: number; + name: string; +} diff --git a/aio/content/examples/style-guide/ts/src/01-01/app/heroes/shared/hero.service.ts b/aio/content/examples/style-guide/ts/src/01-01/app/heroes/shared/hero.service.ts new file mode 100644 index 0000000000..d94e5bacac --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/01-01/app/heroes/shared/hero.service.ts @@ -0,0 +1,11 @@ +// #docregion +import { Injectable } from '@angular/core'; + +import { HEROES } from './mock-heroes'; + +@Injectable() +export class HeroService { + getHeroes() { + return Promise.resolve(HEROES); + } +} diff --git a/aio/content/examples/style-guide/ts/src/01-01/app/heroes/shared/index.ts b/aio/content/examples/style-guide/ts/src/01-01/app/heroes/shared/index.ts new file mode 100644 index 0000000000..c0c1a87eb2 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/01-01/app/heroes/shared/index.ts @@ -0,0 +1,3 @@ +export * from './hero.model'; +export * from './hero.service'; +export * from './mock-heroes'; diff --git a/aio/content/examples/style-guide/ts/src/01-01/app/heroes/shared/mock-heroes.ts b/aio/content/examples/style-guide/ts/src/01-01/app/heroes/shared/mock-heroes.ts new file mode 100644 index 0000000000..2e9a69f59d --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/01-01/app/heroes/shared/mock-heroes.ts @@ -0,0 +1,8 @@ +// #docregion +import { Hero } from './hero.model'; + +export const HEROES: Hero[] = [ + {id: 1, name: 'Bombasto'}, + {id: 2, name: 'Tornado'}, + {id: 3, name: 'Magneta'}, +]; diff --git a/aio/content/examples/style-guide/ts/src/01-01/app/index.ts b/aio/content/examples/style-guide/ts/src/01-01/app/index.ts new file mode 100644 index 0000000000..fe8300f1dd --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/01-01/app/index.ts @@ -0,0 +1,2 @@ +export * from './heroes'; +export * from './app.component'; diff --git a/aio/content/examples/style-guide/ts/src/01-01/main.ts b/aio/content/examples/style-guide/ts/src/01-01/main.ts new file mode 100644 index 0000000000..7e8269bd65 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/01-01/main.ts @@ -0,0 +1,6 @@ +// #docregion +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/style-guide/ts/src/02-05/app/app.component.ts b/aio/content/examples/style-guide/ts/src/02-05/app/app.component.ts new file mode 100644 index 0000000000..268a2f940b --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/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/aio/content/examples/style-guide/ts/src/02-05/app/app.module.ts b/aio/content/examples/style-guide/ts/src/02-05/app/app.module.ts new file mode 100644 index 0000000000..306ec125e0 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/02-05/app/app.module.ts @@ -0,0 +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'; + +@NgModule({ + imports: [ + BrowserModule, + // #enddocregion + RouterModule.forChild([{ path: '02-05', component: AppComponent }]) + // #docregion + ], + declarations: [ + AppComponent + ], + exports: [ AppComponent ], + bootstrap: [ AppComponent ] +}) +export class AppModule { } +// #enddocregion diff --git a/aio/content/examples/style-guide/ts/src/02-05/main.ts b/aio/content/examples/style-guide/ts/src/02-05/main.ts new file mode 100644 index 0000000000..6c32161f84 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/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/aio/content/examples/style-guide/ts/src/02-07/app/app.component.ts b/aio/content/examples/style-guide/ts/src/02-07/app/app.component.ts new file mode 100644 index 0000000000..c82e12624d --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/02-07/app/app.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'sg-app', + template: ` + + + ` +}) +export class AppComponent { } diff --git a/aio/content/examples/style-guide/ts/src/02-07/app/app.module.ts b/aio/content/examples/style-guide/ts/src/02-07/app/app.module.ts new file mode 100644 index 0000000000..4320fe67d5 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/02-07/app/app.module.ts @@ -0,0 +1,19 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import { AppComponent } from './app.component'; +import { HeroComponent } from './heroes'; +import { UsersComponent } from './users'; + +@NgModule({ + imports: [ + RouterModule.forChild([{ path: '02-07', component: AppComponent }]) + ], + declarations: [ + AppComponent, + HeroComponent, + UsersComponent + ], + exports: [ AppComponent ] +}) +export class AppModule {} diff --git a/aio/content/examples/style-guide/ts/src/02-07/app/heroes/hero.component.avoid.ts b/aio/content/examples/style-guide/ts/src/02-07/app/heroes/hero.component.avoid.ts new file mode 100644 index 0000000000..976fcb6cdf --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/02-07/app/heroes/hero.component.avoid.ts @@ -0,0 +1,11 @@ +// #docregion +import { Component } from '@angular/core'; +// #docregion example +/* avoid */ + +// HeroComponent is in the Tour of Heroes feature +@Component({ + selector: 'hero' +}) +export class HeroComponent {} +// #enddocregion example diff --git a/aio/content/examples/style-guide/ts/src/02-07/app/heroes/hero.component.ts b/aio/content/examples/style-guide/ts/src/02-07/app/heroes/hero.component.ts new file mode 100644 index 0000000000..44c04dd855 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/02-07/app/heroes/hero.component.ts @@ -0,0 +1,13 @@ +// #docplaster +// #docregion +import { Component } from '@angular/core'; + +// #docregion example +@Component({ + // #enddocregion example + template: '
    hero component
    ', + // #docregion example + selector: 'toh-hero' +}) +export class HeroComponent {} +// #enddocregion example diff --git a/aio/content/examples/style-guide/ts/src/02-07/app/heroes/index.ts b/aio/content/examples/style-guide/ts/src/02-07/app/heroes/index.ts new file mode 100644 index 0000000000..084f36d703 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/02-07/app/heroes/index.ts @@ -0,0 +1 @@ +export * from './hero.component'; diff --git a/aio/content/examples/style-guide/ts/src/02-07/app/index.ts b/aio/content/examples/style-guide/ts/src/02-07/app/index.ts new file mode 100644 index 0000000000..fc87f976b3 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/02-07/app/index.ts @@ -0,0 +1,3 @@ +export * from './heroes'; +export * from './users'; +export * from './app.component'; diff --git a/aio/content/examples/style-guide/ts/src/02-07/app/users/index.ts b/aio/content/examples/style-guide/ts/src/02-07/app/users/index.ts new file mode 100644 index 0000000000..475ba6d2a7 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/02-07/app/users/index.ts @@ -0,0 +1 @@ +export * from './users.component'; diff --git a/aio/content/examples/style-guide/ts/src/02-07/app/users/users.component.avoid.ts b/aio/content/examples/style-guide/ts/src/02-07/app/users/users.component.avoid.ts new file mode 100644 index 0000000000..9a5bd936e9 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/02-07/app/users/users.component.avoid.ts @@ -0,0 +1,11 @@ +// #docregion +import { Component } from '@angular/core'; +// #docregion example +/* avoid */ + +// UsersComponent is in an Admin feature +@Component({ + selector: 'users' +}) +export class UsersComponent {} +// #enddocregion example diff --git a/aio/content/examples/style-guide/ts/src/02-07/app/users/users.component.ts b/aio/content/examples/style-guide/ts/src/02-07/app/users/users.component.ts new file mode 100644 index 0000000000..2fb6d54ebe --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/02-07/app/users/users.component.ts @@ -0,0 +1,13 @@ +// #docplaster +// #docregion +import { Component } from '@angular/core'; + +// #docregion example +@Component({ + // #enddocregion example + template: '
    users component
    ', + // #docregion example + selector: 'admin-users' +}) +export class UsersComponent {} +// #enddocregion example diff --git a/aio/content/examples/style-guide/ts/src/02-08/app/app.component.ts b/aio/content/examples/style-guide/ts/src/02-08/app/app.component.ts new file mode 100644 index 0000000000..bf27aeaf8a --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/02-08/app/app.component.ts @@ -0,0 +1,7 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'sg-app', + template: '' +}) +export class AppComponent { } diff --git a/aio/content/examples/style-guide/ts/src/02-08/app/app.module.ts b/aio/content/examples/style-guide/ts/src/02-08/app/app.module.ts new file mode 100644 index 0000000000..e840cc50a5 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/02-08/app/app.module.ts @@ -0,0 +1,19 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import { AppComponent } from './app.component'; +import { InputHighlightDirective, + ValidateDirective } from './shared'; + +@NgModule({ + imports: [ + RouterModule.forChild([{ path: '02-08', component: AppComponent }]) + ], + declarations: [ + AppComponent, + InputHighlightDirective, + ValidateDirective + ], + exports: [ AppComponent ] +}) +export class AppModule {} diff --git a/aio/content/examples/style-guide/ts/src/02-08/app/index.ts b/aio/content/examples/style-guide/ts/src/02-08/app/index.ts new file mode 100644 index 0000000000..ebe5c92f03 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/02-08/app/index.ts @@ -0,0 +1,2 @@ +export * from './shared'; +export * from './app.component'; diff --git a/aio/content/examples/style-guide/ts/src/02-08/app/shared/index.ts b/aio/content/examples/style-guide/ts/src/02-08/app/shared/index.ts new file mode 100644 index 0000000000..b844b75492 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/02-08/app/shared/index.ts @@ -0,0 +1,2 @@ +export * from './input-highlight.directive'; +export * from './validate.directive'; diff --git a/aio/content/examples/style-guide/ts/src/02-08/app/shared/input-highlight.directive.ts b/aio/content/examples/style-guide/ts/src/02-08/app/shared/input-highlight.directive.ts new file mode 100644 index 0000000000..fd74771981 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/02-08/app/shared/input-highlight.directive.ts @@ -0,0 +1,10 @@ +// #docregion +import { Directive, ElementRef } from '@angular/core'; + +@Directive({ selector: 'input'}) +/** Highlight the attached input text element in blue */ +export class InputHighlightDirective { + constructor(el: ElementRef) { + el.nativeElement.style.backgroundColor = 'powderblue'; + } +} diff --git a/aio/content/examples/style-guide/ts/src/02-08/app/shared/validate.directive.avoid.ts b/aio/content/examples/style-guide/ts/src/02-08/app/shared/validate.directive.avoid.ts new file mode 100644 index 0000000000..b038f37075 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/02-08/app/shared/validate.directive.avoid.ts @@ -0,0 +1,10 @@ +// #docregion +import { Directive } from '@angular/core'; +// #docregion example +/* avoid */ + +@Directive({ + selector: '[validate]' +}) +export class ValidateDirective {} +// #enddocregion example diff --git a/aio/content/examples/style-guide/ts/src/02-08/app/shared/validate.directive.ts b/aio/content/examples/style-guide/ts/src/02-08/app/shared/validate.directive.ts new file mode 100644 index 0000000000..039afb846f --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/02-08/app/shared/validate.directive.ts @@ -0,0 +1,9 @@ +// #docregion +import { Directive } from '@angular/core'; + +// #docregion example +@Directive({ + selector: '[tohValidate]' +}) +export class ValidateDirective {} +// #enddocregion example diff --git a/aio/content/examples/style-guide/ts/src/03-01/app/app.component.ts b/aio/content/examples/style-guide/ts/src/03-01/app/app.component.ts new file mode 100644 index 0000000000..cb9479d2d9 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-01/app/app.component.ts @@ -0,0 +1,18 @@ +import { Component, OnInit } from '@angular/core'; + +import { ExceptionService } from './core'; + +@Component({ + selector: 'sg-app', + template: '
    The expected error is {{errorCode}}
    ', + providers: [ExceptionService] +}) +export class AppComponent implements OnInit { + errorCode: number; + + constructor(private exceptionService: ExceptionService) { } + + ngOnInit() { + this.errorCode = this.exceptionService.getException(); + } +} diff --git a/aio/content/examples/style-guide/ts/src/03-01/app/app.module.ts b/aio/content/examples/style-guide/ts/src/03-01/app/app.module.ts new file mode 100644 index 0000000000..48079f21c7 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-01/app/app.module.ts @@ -0,0 +1,15 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import { AppComponent } from './app.component'; + +@NgModule({ + imports: [ + RouterModule.forChild([{ path: '03-01', component: AppComponent }]) + ], + declarations: [ + AppComponent + ], + exports: [ AppComponent ] +}) +export class AppModule {} diff --git a/aio/content/examples/style-guide/ts/src/03-01/app/core/exception.service.avoid.ts b/aio/content/examples/style-guide/ts/src/03-01/app/core/exception.service.avoid.ts new file mode 100644 index 0000000000..0a22811fe3 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-01/app/core/exception.service.avoid.ts @@ -0,0 +1,11 @@ +// #docregion +import { Injectable } from '@angular/core'; + +@Injectable() +// #docregion example +/* avoid */ + +export class exceptionService { + constructor() { } +} +// #enddocregion example diff --git a/aio/content/examples/style-guide/ts/src/03-01/app/core/exception.service.ts b/aio/content/examples/style-guide/ts/src/03-01/app/core/exception.service.ts new file mode 100644 index 0000000000..dd77b4f7dc --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-01/app/core/exception.service.ts @@ -0,0 +1,14 @@ +// #docplaster +// #docregion +import { Injectable } from '@angular/core'; + +@Injectable() +// #docregion example +export class ExceptionService { + constructor() { } + // #enddocregion example + // testing harness + getException() { return 42; } + // #docregion example +} +// #enddocregion example diff --git a/aio/content/examples/style-guide/ts/src/03-01/app/core/index.ts b/aio/content/examples/style-guide/ts/src/03-01/app/core/index.ts new file mode 100644 index 0000000000..8acaa4bcf9 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-01/app/core/index.ts @@ -0,0 +1 @@ +export * from './exception.service'; diff --git a/aio/content/examples/style-guide/ts/src/03-01/app/index.ts b/aio/content/examples/style-guide/ts/src/03-01/app/index.ts new file mode 100644 index 0000000000..e120e2dbfd --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-01/app/index.ts @@ -0,0 +1,2 @@ +export * from './core'; +export * from './app.component'; diff --git a/aio/content/examples/style-guide/ts/src/03-02/app/app.component.ts b/aio/content/examples/style-guide/ts/src/03-02/app/app.component.ts new file mode 100644 index 0000000000..132ea54c85 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-02/app/app.component.ts @@ -0,0 +1,19 @@ +import { Component } from '@angular/core'; + +import { heroesUrl, mockHeroes, VILLAINS_URL } from './core'; + +@Component({ + selector: 'sg-app', + template: ` +
    Heroes url: {{heroesUrl}}
    +
    Villains url: {{villainsUrl}}
    + +

    Mock Heroes

    +
    {{hero}}
    + ` +}) +export class AppComponent { + heroes = mockHeroes; // prefer + heroesUrl = heroesUrl; // prefer + villainsUrl = VILLAINS_URL; // tolerate +} diff --git a/aio/content/examples/style-guide/ts/src/03-02/app/app.module.ts b/aio/content/examples/style-guide/ts/src/03-02/app/app.module.ts new file mode 100644 index 0000000000..2db4012ebf --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-02/app/app.module.ts @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { RouterModule } from '@angular/router'; + +import { AppComponent } from './app.component'; + +@NgModule({ + imports: [ + BrowserModule, + RouterModule.forChild([{ path: '03-02', component: AppComponent }]) + ], + declarations: [ + AppComponent + ], + exports: [ AppComponent ] +}) +export class AppModule {} diff --git a/aio/content/examples/style-guide/ts/src/03-02/app/core/data.service.ts b/aio/content/examples/style-guide/ts/src/03-02/app/core/data.service.ts new file mode 100644 index 0000000000..5c26478c7b --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-02/app/core/data.service.ts @@ -0,0 +1,4 @@ +// #docregion +export const mockHeroes = ['Sam', 'Jill']; // prefer +export const heroesUrl = 'api/heroes'; // prefer +export const VILLAINS_URL = 'api/villains'; // tolerate diff --git a/aio/content/examples/style-guide/ts/src/03-02/app/core/index.ts b/aio/content/examples/style-guide/ts/src/03-02/app/core/index.ts new file mode 100644 index 0000000000..2ba773ede8 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-02/app/core/index.ts @@ -0,0 +1 @@ +export * from './data.service'; diff --git a/aio/content/examples/style-guide/ts/src/03-02/app/index.ts b/aio/content/examples/style-guide/ts/src/03-02/app/index.ts new file mode 100644 index 0000000000..e120e2dbfd --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-02/app/index.ts @@ -0,0 +1,2 @@ +export * from './core'; +export * from './app.component'; diff --git a/aio/content/examples/style-guide/ts/src/03-03/app/app.component.ts b/aio/content/examples/style-guide/ts/src/03-03/app/app.component.ts new file mode 100644 index 0000000000..3ca522bc45 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-03/app/app.component.ts @@ -0,0 +1,18 @@ +import { Component, OnInit } from '@angular/core'; + +import { Hero, HeroCollectorService } from './core'; + +@Component({ + selector: 'sg-app', + template: '
    Our hero is {{hero.name}} and {{hero.power}}
    ', + providers: [HeroCollectorService] +}) +export class AppComponent implements OnInit { + hero: Hero; + + constructor(private heroCollectorService: HeroCollectorService) { } + + ngOnInit() { + this.hero = this.heroCollectorService.getHero(); + } +} diff --git a/aio/content/examples/style-guide/ts/src/03-03/app/app.module.ts b/aio/content/examples/style-guide/ts/src/03-03/app/app.module.ts new file mode 100644 index 0000000000..29b3d2e765 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-03/app/app.module.ts @@ -0,0 +1,15 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import { AppComponent } from './app.component'; + +@NgModule({ + imports: [ + RouterModule.forChild([{ path: '03-03', component: AppComponent }]) + ], + declarations: [ + AppComponent + ], + exports: [ AppComponent ] +}) +export class AppModule {} diff --git a/aio/content/examples/style-guide/ts/src/03-03/app/core/hero-collector.service.avoid.ts b/aio/content/examples/style-guide/ts/src/03-03/app/core/hero-collector.service.avoid.ts new file mode 100644 index 0000000000..f481af18b6 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-03/app/core/hero-collector.service.avoid.ts @@ -0,0 +1,15 @@ +// #docregion +// #docregion example +/* avoid */ + +import { Injectable } from '@angular/core'; + +import { IHero } from './hero.model.avoid'; + +@Injectable() +export class HeroCollectorService { + hero: IHero; + + constructor() { } +} +// #enddocregion example diff --git a/aio/content/examples/style-guide/ts/src/03-03/app/core/hero-collector.service.ts b/aio/content/examples/style-guide/ts/src/03-03/app/core/hero-collector.service.ts new file mode 100644 index 0000000000..1df5c0deb0 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-03/app/core/hero-collector.service.ts @@ -0,0 +1,25 @@ +// #docplaster +// #docregion +// #docregion example +import { Injectable } from '@angular/core'; + +import { Hero } from './hero.model'; + +@Injectable() +export class HeroCollectorService { + hero: Hero; + + constructor() { } + // #enddocregion example + // testing harness + getHero() { + this.hero = { + name: 'RubberMan', + power: 'He is so elastic' + }; + + return this.hero; + } + // #docregion example +} +// #enddocregion example diff --git a/aio/content/examples/style-guide/ts/src/03-03/app/core/hero.model.avoid.ts b/aio/content/examples/style-guide/ts/src/03-03/app/core/hero.model.avoid.ts new file mode 100644 index 0000000000..ce93b2c59a --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-03/app/core/hero.model.avoid.ts @@ -0,0 +1,14 @@ +// #docregion +// #docregion example +/* avoid */ + +export interface IHero { + name: string; + power: string; +} + +export class Hero implements IHero { + name: string; + power: string; +} +// #enddocregion example diff --git a/aio/content/examples/style-guide/ts/src/03-03/app/core/hero.model.ts b/aio/content/examples/style-guide/ts/src/03-03/app/core/hero.model.ts new file mode 100644 index 0000000000..c3277621cb --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-03/app/core/hero.model.ts @@ -0,0 +1,7 @@ +// #docregion +// #docregion example +export class Hero { + name: string; + power: string; +} +// #enddocregion example diff --git a/aio/content/examples/style-guide/ts/src/03-03/app/core/index.ts b/aio/content/examples/style-guide/ts/src/03-03/app/core/index.ts new file mode 100644 index 0000000000..17ad67b0b1 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-03/app/core/index.ts @@ -0,0 +1,2 @@ +export * from './hero-collector.service'; +export * from './hero.model'; diff --git a/aio/content/examples/style-guide/ts/src/03-03/app/index.ts b/aio/content/examples/style-guide/ts/src/03-03/app/index.ts new file mode 100644 index 0000000000..e120e2dbfd --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-03/app/index.ts @@ -0,0 +1,2 @@ +export * from './core'; +export * from './app.component'; diff --git a/aio/content/examples/style-guide/ts/src/03-04/app/app.component.ts b/aio/content/examples/style-guide/ts/src/03-04/app/app.component.ts new file mode 100644 index 0000000000..555c9e9441 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-04/app/app.component.ts @@ -0,0 +1,27 @@ +import { Component, OnInit } from '@angular/core'; + +import { ToastService } from './core'; + +@Component({ + selector: 'sg-app', + template: ` + + + `, + providers: [ToastService] +}) +export class AppComponent implements OnInit { + constructor(private toastService: ToastService) { } + + hide() { + this.toastService.hide(); + } + + show() { + this.toastService.show(); + } + + ngOnInit() { + this.toastService.activate('Hello style-guide!'); + } +} diff --git a/aio/content/examples/style-guide/ts/src/03-04/app/app.module.ts b/aio/content/examples/style-guide/ts/src/03-04/app/app.module.ts new file mode 100644 index 0000000000..a5a8d5bb4e --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-04/app/app.module.ts @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { RouterModule } from '@angular/router'; + +import { AppComponent } from './app.component'; + +@NgModule({ + imports: [ + BrowserModule, + RouterModule.forChild([{ path: '03-04', component: AppComponent }]) + ], + declarations: [ + AppComponent + ], + exports: [ AppComponent ] +}) +export class AppModule {} diff --git a/aio/content/examples/style-guide/ts/src/03-04/app/core/index.ts b/aio/content/examples/style-guide/ts/src/03-04/app/core/index.ts new file mode 100644 index 0000000000..e78b628f9c --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-04/app/core/index.ts @@ -0,0 +1 @@ +export * from './toast.service'; diff --git a/aio/content/examples/style-guide/ts/src/03-04/app/core/toast.service.avoid.ts b/aio/content/examples/style-guide/ts/src/03-04/app/core/toast.service.avoid.ts new file mode 100644 index 0000000000..0f3a7c25ea --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-04/app/core/toast.service.avoid.ts @@ -0,0 +1,27 @@ +// #docregion +// #docregion example +/* avoid */ + +import { Injectable } from '@angular/core'; + +@Injectable() +export class ToastService { + message: string; + + private _toastCount: number; + + hide() { + this._toastCount--; + this._log(); + } + + show() { + this._toastCount++; + this._log(); + } + + private _log() { + console.log(this.message); + } +} +// #enddocregion example diff --git a/aio/content/examples/style-guide/ts/src/03-04/app/core/toast.service.ts b/aio/content/examples/style-guide/ts/src/03-04/app/core/toast.service.ts new file mode 100644 index 0000000000..ab148a1732 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-04/app/core/toast.service.ts @@ -0,0 +1,32 @@ +// #docplaster +// #docregion +// #docregion example +import { Injectable } from '@angular/core'; + +@Injectable() +export class ToastService { + message: string; + + private toastCount: number; + + hide() { + this.toastCount--; + this.log(); + } + + show() { + this.toastCount++; + this.log(); + } + + private log() { + console.log(this.message); + } + // #enddocregion example + // testing harness + activate(message: string) { + this.message = message; + } + // #docregion example +} +// #enddocregion example diff --git a/aio/content/examples/style-guide/ts/src/03-04/app/index.ts b/aio/content/examples/style-guide/ts/src/03-04/app/index.ts new file mode 100644 index 0000000000..e120e2dbfd --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-04/app/index.ts @@ -0,0 +1,2 @@ +export * from './core'; +export * from './app.component'; diff --git a/aio/content/examples/style-guide/ts/src/03-06/app/app.component.html b/aio/content/examples/style-guide/ts/src/03-06/app/app.component.html new file mode 100644 index 0000000000..67fb0d5964 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-06/app/app.component.html @@ -0,0 +1,6 @@ +
    Actual favorite: {{favorite?.name}}
    +
      +
    • + {{hero.name}} +
    • +
    diff --git a/aio/content/examples/style-guide/ts/src/03-06/app/app.component.ts b/aio/content/examples/style-guide/ts/src/03-06/app/app.component.ts new file mode 100644 index 0000000000..b7c47f72d0 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-06/app/app.component.ts @@ -0,0 +1,22 @@ +import { Component, OnInit } from '@angular/core'; + +import { Hero, HeroService } from './heroes'; +import { ExceptionService, SpinnerService, ToastService } from './core'; + +@Component({ + moduleId: module.id, + selector: 'sg-app', + templateUrl: './app.component.html', + providers: [HeroService, ExceptionService, SpinnerService, ToastService] +}) +export class AppComponent implements OnInit { + favorite: Hero; + heroes: Hero[]; + + constructor(private heroService: HeroService) { } + + ngOnInit() { + this.heroService.getHero(1).subscribe(hero => this.favorite = hero); + this.heroService.getHeroes().subscribe(heroes => this.heroes = heroes); + } +} diff --git a/aio/content/examples/style-guide/ts/src/03-06/app/app.module.ts b/aio/content/examples/style-guide/ts/src/03-06/app/app.module.ts new file mode 100644 index 0000000000..f259ce23a2 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-06/app/app.module.ts @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { RouterModule } from '@angular/router'; + +import { AppComponent } from './app.component'; + +@NgModule({ + imports: [ + BrowserModule, + RouterModule.forChild([{ path: '03-06', component: AppComponent }]) + ], + declarations: [ + AppComponent + ], + exports: [ AppComponent ] +}) +export class AppModule {} diff --git a/aio/content/examples/style-guide/ts/src/03-06/app/core/exception.service.ts b/aio/content/examples/style-guide/ts/src/03-06/app/core/exception.service.ts new file mode 100644 index 0000000000..7180c88e6b --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-06/app/core/exception.service.ts @@ -0,0 +1,4 @@ +import { Injectable } from '@angular/core'; + +@Injectable() +export class ExceptionService { } diff --git a/aio/content/examples/style-guide/ts/src/03-06/app/core/index.ts b/aio/content/examples/style-guide/ts/src/03-06/app/core/index.ts new file mode 100644 index 0000000000..e4e6723f91 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-06/app/core/index.ts @@ -0,0 +1,6 @@ +// #docregion +// #docregion example +export * from './exception.service'; +export * from './spinner'; +export * from './toast'; +// #enddocregion example diff --git a/aio/content/examples/style-guide/ts/src/03-06/app/core/spinner/index.ts b/aio/content/examples/style-guide/ts/src/03-06/app/core/spinner/index.ts new file mode 100644 index 0000000000..1d619300c0 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-06/app/core/spinner/index.ts @@ -0,0 +1,3 @@ +// #docregion +export * from './spinner.component'; +export * from './spinner.service'; diff --git a/aio/content/examples/style-guide/ts/src/03-06/app/core/spinner/spinner.component.ts b/aio/content/examples/style-guide/ts/src/03-06/app/core/spinner/spinner.component.ts new file mode 100644 index 0000000000..1fd2a01500 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-06/app/core/spinner/spinner.component.ts @@ -0,0 +1,16 @@ +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/aio/content/examples/style-guide/ts/src/03-06/app/core/spinner/spinner.service.ts b/aio/content/examples/style-guide/ts/src/03-06/app/core/spinner/spinner.service.ts new file mode 100644 index 0000000000..ad5d2ed6e0 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-06/app/core/spinner/spinner.service.ts @@ -0,0 +1,12 @@ +import { Injectable } from '@angular/core'; + +export interface ISpinnerState { } + +@Injectable() +export class SpinnerService { + spinnerState: any; + + show() { } + + hide() { } +} diff --git a/aio/content/examples/style-guide/ts/src/03-06/app/core/toast/index.ts b/aio/content/examples/style-guide/ts/src/03-06/app/core/toast/index.ts new file mode 100644 index 0000000000..01b41aff98 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-06/app/core/toast/index.ts @@ -0,0 +1,3 @@ +// #docregion +export * from './toast.component'; +export * from './toast.service'; diff --git a/aio/content/examples/style-guide/ts/src/03-06/app/core/toast/toast.component.ts b/aio/content/examples/style-guide/ts/src/03-06/app/core/toast/toast.component.ts new file mode 100644 index 0000000000..dd0bba5eba --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-06/app/core/toast/toast.component.ts @@ -0,0 +1,13 @@ +import { Component, OnInit } from '@angular/core'; + +import { ToastService } from './toast.service'; + +@Component({ + selector: 'toh-toast', + template: '
    toast
    ' +}) +export class ToastComponent implements OnInit { + constructor(toastService: ToastService) { } + + ngOnInit() { } +} diff --git a/aio/content/examples/style-guide/ts/src/03-06/app/core/toast/toast.service.ts b/aio/content/examples/style-guide/ts/src/03-06/app/core/toast/toast.service.ts new file mode 100644 index 0000000000..e92e75ee45 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-06/app/core/toast/toast.service.ts @@ -0,0 +1,6 @@ +import { Injectable } from '@angular/core'; + +@Injectable() +export class ToastService { + activate: (message?: string, title?: string) => void; +} diff --git a/aio/content/examples/style-guide/ts/src/03-06/app/heroes/index.ts b/aio/content/examples/style-guide/ts/src/03-06/app/heroes/index.ts new file mode 100644 index 0000000000..c3da79f741 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-06/app/heroes/index.ts @@ -0,0 +1 @@ +export * from './shared'; diff --git a/aio/content/examples/style-guide/ts/src/03-06/app/heroes/shared/hero.model.ts b/aio/content/examples/style-guide/ts/src/03-06/app/heroes/shared/hero.model.ts new file mode 100644 index 0000000000..c3277621cb --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-06/app/heroes/shared/hero.model.ts @@ -0,0 +1,7 @@ +// #docregion +// #docregion example +export class Hero { + name: string; + power: string; +} +// #enddocregion example diff --git a/aio/content/examples/style-guide/ts/src/03-06/app/heroes/shared/hero.service.avoid.ts b/aio/content/examples/style-guide/ts/src/03-06/app/heroes/shared/hero.service.avoid.ts new file mode 100644 index 0000000000..8287c567a7 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-06/app/heroes/shared/hero.service.avoid.ts @@ -0,0 +1,32 @@ +// #docregion +// #docregion example +/* avoid */ + +import { ExceptionService, SpinnerService, ToastService } from '../../core'; +import { Http } from '@angular/http'; +import { Injectable } from '@angular/core'; +import { Hero } from './hero.model'; +// #enddocregion example + +@Injectable() +export class HeroService { + + constructor( + private exceptionService: ExceptionService, + private spinnerService: SpinnerService, + private toastService: ToastService, + private http: Http + ) { } + + getHero(id: number) { + return this.http.get(`api/heroes/${id}`) + .map(response => response.json().data as Hero); + } + + getHeroes() { + return this.http.get(`api/heroes`) + .map(response => response.json().data as Hero[]); + } + +} + diff --git a/aio/content/examples/style-guide/ts/src/03-06/app/heroes/shared/hero.service.ts b/aio/content/examples/style-guide/ts/src/03-06/app/heroes/shared/hero.service.ts new file mode 100644 index 0000000000..5792cd1ab2 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-06/app/heroes/shared/hero.service.ts @@ -0,0 +1,32 @@ +// #docregion +// #docregion example +import { Injectable } from '@angular/core'; +import { Http } from '@angular/http'; + +import { Hero } from './hero.model'; +import { ExceptionService, SpinnerService, ToastService } from '../../core'; +// #enddocregion example + +@Injectable() +export class HeroService { + cachedHeroes: Hero[]; + + constructor( + private exceptionService: ExceptionService, + private spinnerService: SpinnerService, + private toastService: ToastService, + private http: Http + ) { } + + getHero(id: number) { + return this.http.get(`api/heroes/${id}`) + .map(response => response.json().data as Hero); + } + + getHeroes() { + return this.http.get(`api/heroes`) + .map(response => response.json().data as Hero[]); + } + +} + diff --git a/aio/content/examples/style-guide/ts/src/03-06/app/heroes/shared/index.ts b/aio/content/examples/style-guide/ts/src/03-06/app/heroes/shared/index.ts new file mode 100644 index 0000000000..dbb150d3f8 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-06/app/heroes/shared/index.ts @@ -0,0 +1,2 @@ +export * from './hero.model'; +export * from './hero.service'; diff --git a/aio/content/examples/style-guide/ts/src/03-06/app/index.ts b/aio/content/examples/style-guide/ts/src/03-06/app/index.ts new file mode 100644 index 0000000000..cf861e261a --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-06/app/index.ts @@ -0,0 +1,3 @@ +export * from './heroes'; +export * from './core'; +export * from './app.component'; diff --git a/aio/content/examples/style-guide/ts/src/03-06/app/shared/toast/toast.component.ts b/aio/content/examples/style-guide/ts/src/03-06/app/shared/toast/toast.component.ts new file mode 100644 index 0000000000..e1c1ae6665 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/03-06/app/shared/toast/toast.component.ts @@ -0,0 +1,13 @@ +import { Component, OnInit } from '@angular/core'; + +import { ToastService } from '../../core'; + +@Component({ + selector: 'toh-toast', + template: '
    toast
    ' +}) +export class ToastComponent implements OnInit { + constructor(toastService: ToastService) { } + + ngOnInit() { } +} diff --git a/aio/content/examples/style-guide/ts/src/04-08/app/app.component.ts b/aio/content/examples/style-guide/ts/src/04-08/app/app.component.ts new file mode 100644 index 0000000000..fdd8e6ef56 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/04-08/app/app.component.ts @@ -0,0 +1,8 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'sg-app', + template: '' +}) +export class AppComponent { } diff --git a/aio/content/examples/style-guide/ts/src/04-08/app/app.module.ts b/aio/content/examples/style-guide/ts/src/04-08/app/app.module.ts new file mode 100644 index 0000000000..25568b7fb4 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/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/aio/content/examples/style-guide/ts/src/04-08/app/heroes/heroes.component.html b/aio/content/examples/style-guide/ts/src/04-08/app/heroes/heroes.component.html new file mode 100644 index 0000000000..1244e68a4a --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/04-08/app/heroes/heroes.component.html @@ -0,0 +1 @@ +
    This is heroes component
    diff --git a/aio/content/examples/style-guide/ts/src/04-08/app/heroes/heroes.component.ts b/aio/content/examples/style-guide/ts/src/04-08/app/heroes/heroes.component.ts new file mode 100644 index 0000000000..f9e67391ec --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/04-08/app/heroes/heroes.component.ts @@ -0,0 +1,12 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + moduleId: module.id, + selector: 'toh-heroes', + templateUrl: './heroes.component.html' +}) +export class HeroesComponent implements OnInit { + constructor() { /* ... */ } + + ngOnInit() { /* ... */ } +} diff --git a/aio/content/examples/style-guide/ts/src/04-10/app/app.component.ts b/aio/content/examples/style-guide/ts/src/04-10/app/app.component.ts new file mode 100644 index 0000000000..fdd8e6ef56 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/04-10/app/app.component.ts @@ -0,0 +1,8 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'sg-app', + template: '' +}) +export class AppComponent { } diff --git a/aio/content/examples/style-guide/ts/src/04-10/app/app.module.ts b/aio/content/examples/style-guide/ts/src/04-10/app/app.module.ts new file mode 100644 index 0000000000..78106657ad --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/04-10/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 { SharedModule } from './shared/shared.module'; + +@NgModule({ + imports: [ + BrowserModule, + SharedModule, +// #enddocregion example + RouterModule.forChild([{ path: '04-10', component: AppComponent }]) +// #docregion example + ], + declarations: [ + AppComponent, + HeroesComponent + ], + exports: [ AppComponent ], + entryComponents: [ AppComponent ] +}) +export class AppModule {} +// #enddocregion example diff --git a/aio/content/examples/style-guide/ts/src/04-10/app/heroes/heroes.component.html b/aio/content/examples/style-guide/ts/src/04-10/app/heroes/heroes.component.html new file mode 100644 index 0000000000..170f76aee1 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/04-10/app/heroes/heroes.component.html @@ -0,0 +1,8 @@ + +
    This is heroes component
    +
      +
    • + {{hero.name}} +
    • +
    + diff --git a/aio/content/examples/style-guide/ts/src/04-10/app/heroes/heroes.component.ts b/aio/content/examples/style-guide/ts/src/04-10/app/heroes/heroes.component.ts new file mode 100644 index 0000000000..eb496ccde5 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/04-10/app/heroes/heroes.component.ts @@ -0,0 +1,28 @@ +// #docregion +import { Component } from '@angular/core'; + +import { FilterTextService } from '../shared/filter-text/filter-text.service'; + +@Component({ + moduleId: module.id, + selector: 'toh-heroes', + templateUrl: './heroes.component.html' +}) +export class HeroesComponent { + + heroes = [ + { id: 1, name: 'Windstorm' }, + { id: 2, name: 'Bombasto' }, + { id: 3, name: 'Magneta' }, + { id: 4, name: 'Tornado' } + ]; + + filteredHeroes = this.heroes; + + constructor(private filterService: FilterTextService) { } + + filterChanged(searchText: string) { + this.filteredHeroes = this.filterService.filter(searchText, ['id', 'name'], this.heroes); + } +} + diff --git a/aio/content/examples/style-guide/ts/src/04-10/app/shared/filter-text/filter-text.component.ts b/aio/content/examples/style-guide/ts/src/04-10/app/shared/filter-text/filter-text.component.ts new file mode 100644 index 0000000000..e23987d2f0 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/04-10/app/shared/filter-text/filter-text.component.ts @@ -0,0 +1,27 @@ +// #docregion +import { Component, EventEmitter, Output } from '@angular/core'; + +@Component({ + moduleId: module.id, + selector: 'toh-filter-text', + template: '' +}) +export class FilterTextComponent { + @Output() changed: EventEmitter; + + filter: string; + + 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/aio/content/examples/style-guide/ts/src/04-10/app/shared/filter-text/filter-text.service.ts b/aio/content/examples/style-guide/ts/src/04-10/app/shared/filter-text/filter-text.service.ts new file mode 100644 index 0000000000..87978e10e5 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/04-10/app/shared/filter-text/filter-text.service.ts @@ -0,0 +1,30 @@ +// #docregion +import { Injectable } from '@angular/core'; + +@Injectable() +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/aio/content/examples/style-guide/ts/src/04-10/app/shared/init-caps.pipe.ts b/aio/content/examples/style-guide/ts/src/04-10/app/shared/init-caps.pipe.ts new file mode 100644 index 0000000000..5019bcb234 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/04-10/app/shared/init-caps.pipe.ts @@ -0,0 +1,7 @@ +// #docregion +import { Pipe, PipeTransform } from '@angular/core'; + +@Pipe({ name: 'initCaps' }) +export class InitCapsPipe implements PipeTransform { + transform = (value: string) => value; +} diff --git a/aio/content/examples/style-guide/ts/src/04-10/app/shared/shared.module.ts b/aio/content/examples/style-guide/ts/src/04-10/app/shared/shared.module.ts new file mode 100644 index 0000000000..6160abcc84 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/04-10/app/shared/shared.module.ts @@ -0,0 +1,24 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; + +import { FilterTextComponent } from './filter-text/filter-text.component'; +import { FilterTextService } from './filter-text/filter-text.service'; +import { InitCapsPipe } from './init-caps.pipe'; + +@NgModule({ + imports: [CommonModule, FormsModule], + declarations: [ + FilterTextComponent, + InitCapsPipe + ], + providers: [FilterTextService], + exports: [ + CommonModule, + FormsModule, + FilterTextComponent, + InitCapsPipe + ] +}) +export class SharedModule { } diff --git a/aio/content/examples/style-guide/ts/src/04-11/app/app.component.ts b/aio/content/examples/style-guide/ts/src/04-11/app/app.component.ts new file mode 100644 index 0000000000..693619a982 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/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/aio/content/examples/style-guide/ts/src/04-11/app/app.module.ts b/aio/content/examples/style-guide/ts/src/04-11/app/app.module.ts new file mode 100644 index 0000000000..ef3c156bcf --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/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/aio/content/examples/style-guide/ts/src/04-11/app/core/core.module.ts b/aio/content/examples/style-guide/ts/src/04-11/app/core/core.module.ts new file mode 100644 index 0000000000..4ba5c79a14 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/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/aio/content/examples/style-guide/ts/src/04-11/app/core/index.ts b/aio/content/examples/style-guide/ts/src/04-11/app/core/index.ts new file mode 100644 index 0000000000..098f40c7d5 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/04-11/app/core/index.ts @@ -0,0 +1,4 @@ +// #docregion +export * from './logger.service'; +export * from './spinner/spinner.service'; +export * from './nav/nav.component'; diff --git a/aio/content/examples/style-guide/ts/src/04-11/app/core/logger.service.ts b/aio/content/examples/style-guide/ts/src/04-11/app/core/logger.service.ts new file mode 100644 index 0000000000..9c7080f07a --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/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/aio/content/examples/style-guide/ts/src/04-11/app/core/nav/nav.component.css b/aio/content/examples/style-guide/ts/src/04-11/app/core/nav/nav.component.css new file mode 100644 index 0000000000..c7903fd25c --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/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/aio/content/examples/style-guide/ts/src/04-11/app/core/nav/nav.component.html b/aio/content/examples/style-guide/ts/src/04-11/app/core/nav/nav.component.html new file mode 100644 index 0000000000..b3c7e441e0 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/04-11/app/core/nav/nav.component.html @@ -0,0 +1,14 @@ + +
    +
    +

    Tour of Heroes

    +
    + +
    +
    diff --git a/aio/content/examples/style-guide/ts/src/04-11/app/core/nav/nav.component.ts b/aio/content/examples/style-guide/ts/src/04-11/app/core/nav/nav.component.ts new file mode 100644 index 0000000000..571040cce5 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/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/aio/content/examples/style-guide/ts/src/04-11/app/core/spinner/spinner.component.css b/aio/content/examples/style-guide/ts/src/04-11/app/core/spinner/spinner.component.css new file mode 100644 index 0000000000..afad0fe8e3 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/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/aio/content/examples/style-guide/ts/src/04-11/app/core/spinner/spinner.component.html b/aio/content/examples/style-guide/ts/src/04-11/app/core/spinner/spinner.component.html new file mode 100644 index 0000000000..a07e3378c0 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/04-11/app/core/spinner/spinner.component.html @@ -0,0 +1,2 @@ + +
    diff --git a/aio/content/examples/style-guide/ts/src/04-11/app/core/spinner/spinner.component.ts b/aio/content/examples/style-guide/ts/src/04-11/app/core/spinner/spinner.component.ts new file mode 100644 index 0000000000..ccd6ece7fb --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/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/aio/content/examples/style-guide/ts/src/04-11/app/core/spinner/spinner.service.ts b/aio/content/examples/style-guide/ts/src/04-11/app/core/spinner/spinner.service.ts new file mode 100644 index 0000000000..85e366c43e --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/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/aio/content/examples/style-guide/ts/src/04-11/app/heroes/heroes.component.html b/aio/content/examples/style-guide/ts/src/04-11/app/heroes/heroes.component.html new file mode 100644 index 0000000000..9035a4b8ff --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/04-11/app/heroes/heroes.component.html @@ -0,0 +1,12 @@ + +
    + + + +
      +
    • + {{hero.name}} +
    • +
    + +
    diff --git a/aio/content/examples/style-guide/ts/src/04-11/app/heroes/heroes.component.ts b/aio/content/examples/style-guide/ts/src/04-11/app/heroes/heroes.component.ts new file mode 100644 index 0000000000..cdbf1135f2 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/04-11/app/heroes/heroes.component.ts @@ -0,0 +1,33 @@ +import { Component } from '@angular/core'; + +import { LoggerService } from '../core/logger.service'; +import { SpinnerService } from '../core/spinner/spinner.service'; + +@Component({ + moduleId: module.id, + selector: 'toh-heroes', + templateUrl: './heroes.component.html' +}) +export class HeroesComponent { + 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); + } +} diff --git a/aio/content/examples/style-guide/ts/src/04-12/app/app.component.ts b/aio/content/examples/style-guide/ts/src/04-12/app/app.component.ts new file mode 100644 index 0000000000..dc85b06e9f --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/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/aio/content/examples/style-guide/ts/src/04-12/app/app.module.ts b/aio/content/examples/style-guide/ts/src/04-12/app/app.module.ts new file mode 100644 index 0000000000..7c9fb44182 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/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/aio/content/examples/style-guide/ts/src/04-12/app/core/core.module.ts b/aio/content/examples/style-guide/ts/src/04-12/app/core/core.module.ts new file mode 100644 index 0000000000..069141bf2a --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/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/aio/content/examples/style-guide/ts/src/04-12/app/core/index.ts b/aio/content/examples/style-guide/ts/src/04-12/app/core/index.ts new file mode 100644 index 0000000000..8768b77f41 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/04-12/app/core/index.ts @@ -0,0 +1,3 @@ +// #docregion +export * from './logger.service'; +export * from './nav/nav.component'; diff --git a/aio/content/examples/style-guide/ts/src/04-12/app/core/logger.service.ts b/aio/content/examples/style-guide/ts/src/04-12/app/core/logger.service.ts new file mode 100644 index 0000000000..9c7080f07a --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/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/aio/content/examples/style-guide/ts/src/04-12/app/core/module-import-guard.ts b/aio/content/examples/style-guide/ts/src/04-12/app/core/module-import-guard.ts new file mode 100644 index 0000000000..5248b15b2e --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/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/aio/content/examples/style-guide/ts/src/04-12/app/core/nav/nav.component.css b/aio/content/examples/style-guide/ts/src/04-12/app/core/nav/nav.component.css new file mode 100644 index 0000000000..c7903fd25c --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/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/aio/content/examples/style-guide/ts/src/04-12/app/core/nav/nav.component.html b/aio/content/examples/style-guide/ts/src/04-12/app/core/nav/nav.component.html new file mode 100644 index 0000000000..b3c7e441e0 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/04-12/app/core/nav/nav.component.html @@ -0,0 +1,14 @@ + +
    +
    +

    Tour of Heroes

    +
    + +
    +
    diff --git a/aio/content/examples/style-guide/ts/src/04-12/app/core/nav/nav.component.ts b/aio/content/examples/style-guide/ts/src/04-12/app/core/nav/nav.component.ts new file mode 100644 index 0000000000..571040cce5 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/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/aio/content/examples/style-guide/ts/src/04-12/app/heroes/heroes.component.html b/aio/content/examples/style-guide/ts/src/04-12/app/heroes/heroes.component.html new file mode 100644 index 0000000000..9035a4b8ff --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/04-12/app/heroes/heroes.component.html @@ -0,0 +1,12 @@ + +
    + + + +
      +
    • + {{hero.name}} +
    • +
    + +
    diff --git a/aio/content/examples/style-guide/ts/src/04-12/app/heroes/heroes.component.ts b/aio/content/examples/style-guide/ts/src/04-12/app/heroes/heroes.component.ts new file mode 100644 index 0000000000..3b3e169c0c --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/04-12/app/heroes/heroes.component.ts @@ -0,0 +1,25 @@ +import { Component } from '@angular/core'; + +import { LoggerService } from '../core/logger.service'; + +@Component({ + moduleId: module.id, + selector: 'toh-heroes', + templateUrl: './heroes.component.html' +}) +export class HeroesComponent { + 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`); + } +} diff --git a/aio/content/examples/style-guide/ts/src/05-02/app/app.component.html b/aio/content/examples/style-guide/ts/src/05-02/app/app.component.html new file mode 100644 index 0000000000..607d068557 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-02/app/app.component.html @@ -0,0 +1,2 @@ + + diff --git a/aio/content/examples/style-guide/ts/src/05-02/app/app.component.ts b/aio/content/examples/style-guide/ts/src/05-02/app/app.component.ts new file mode 100644 index 0000000000..d57163f06f --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-02/app/app.component.ts @@ -0,0 +1,8 @@ +import { Component } from '@angular/core'; + +@Component({ + moduleId: module.id, + selector: 'sg-app', + templateUrl: './app.component.html' +}) +export class AppComponent { } diff --git a/aio/content/examples/style-guide/ts/src/05-02/app/app.module.ts b/aio/content/examples/style-guide/ts/src/05-02/app/app.module.ts new file mode 100644 index 0000000000..1c458e2ca1 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-02/app/app.module.ts @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import { AppComponent } from './app.component'; +import { HeroButtonComponent } from './heroes'; + +@NgModule({ + imports: [ + RouterModule.forChild([{ path: '05-02', component: AppComponent }]) + ], + declarations: [ + AppComponent, + HeroButtonComponent + ], + exports: [ AppComponent ] +}) +export class AppModule {} diff --git a/aio/content/examples/style-guide/ts/src/05-02/app/heroes/index.ts b/aio/content/examples/style-guide/ts/src/05-02/app/heroes/index.ts new file mode 100644 index 0000000000..c3da79f741 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-02/app/heroes/index.ts @@ -0,0 +1 @@ +export * from './shared'; diff --git a/aio/content/examples/style-guide/ts/src/05-02/app/heroes/shared/hero-button/hero-button.component.avoid.ts b/aio/content/examples/style-guide/ts/src/05-02/app/heroes/shared/hero-button/hero-button.component.avoid.ts new file mode 100644 index 0000000000..fd055bf64f --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-02/app/heroes/shared/hero-button/hero-button.component.avoid.ts @@ -0,0 +1,12 @@ +// #docplaster +import { Component } from '@angular/core'; +// #docregion example +/* avoid */ + +@Component({ + moduleId: module.id, + selector: 'tohHeroButton', + templateUrl: './hero-button.component.html' +}) +export class HeroButtonComponent {} +// #enddocregion example diff --git a/aio/content/examples/style-guide/ts/src/05-02/app/heroes/shared/hero-button/hero-button.component.html b/aio/content/examples/style-guide/ts/src/05-02/app/heroes/shared/hero-button/hero-button.component.html new file mode 100644 index 0000000000..9ad67e50ac --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-02/app/heroes/shared/hero-button/hero-button.component.html @@ -0,0 +1 @@ + diff --git a/aio/content/examples/style-guide/ts/src/05-02/app/heroes/shared/hero-button/hero-button.component.ts b/aio/content/examples/style-guide/ts/src/05-02/app/heroes/shared/hero-button/hero-button.component.ts new file mode 100644 index 0000000000..8b9fbf95e5 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-02/app/heroes/shared/hero-button/hero-button.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +// #docregion example +@Component({ + moduleId: module.id, + selector: 'toh-hero-button', + templateUrl: './hero-button.component.html' +}) +export class HeroButtonComponent {} +// #enddocregion example diff --git a/aio/content/examples/style-guide/ts/src/05-02/app/heroes/shared/hero-button/index.ts b/aio/content/examples/style-guide/ts/src/05-02/app/heroes/shared/hero-button/index.ts new file mode 100644 index 0000000000..6bb67c5670 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-02/app/heroes/shared/hero-button/index.ts @@ -0,0 +1 @@ +export * from './hero-button.component'; diff --git a/aio/content/examples/style-guide/ts/src/05-02/app/heroes/shared/index.ts b/aio/content/examples/style-guide/ts/src/05-02/app/heroes/shared/index.ts new file mode 100644 index 0000000000..2334d49c9a --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-02/app/heroes/shared/index.ts @@ -0,0 +1 @@ +export * from './hero-button'; diff --git a/aio/content/examples/style-guide/ts/src/05-02/app/index.ts b/aio/content/examples/style-guide/ts/src/05-02/app/index.ts new file mode 100644 index 0000000000..fe8300f1dd --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-02/app/index.ts @@ -0,0 +1,2 @@ +export * from './heroes'; +export * from './app.component'; diff --git a/aio/content/examples/style-guide/ts/src/05-03/app/app.component.avoid.html b/aio/content/examples/style-guide/ts/src/05-03/app/app.component.avoid.html new file mode 100644 index 0000000000..91bdbe403c --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-03/app/app.component.avoid.html @@ -0,0 +1,4 @@ + + + +
    diff --git a/aio/content/examples/style-guide/ts/src/05-03/app/app.component.html b/aio/content/examples/style-guide/ts/src/05-03/app/app.component.html new file mode 100644 index 0000000000..607d068557 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-03/app/app.component.html @@ -0,0 +1,2 @@ + + diff --git a/aio/content/examples/style-guide/ts/src/05-03/app/app.component.ts b/aio/content/examples/style-guide/ts/src/05-03/app/app.component.ts new file mode 100644 index 0000000000..d57163f06f --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-03/app/app.component.ts @@ -0,0 +1,8 @@ +import { Component } from '@angular/core'; + +@Component({ + moduleId: module.id, + selector: 'sg-app', + templateUrl: './app.component.html' +}) +export class AppComponent { } diff --git a/aio/content/examples/style-guide/ts/src/05-03/app/app.module.ts b/aio/content/examples/style-guide/ts/src/05-03/app/app.module.ts new file mode 100644 index 0000000000..1b754e3ee5 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-03/app/app.module.ts @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import { AppComponent } from './app.component'; +import { HeroButtonComponent } from './heroes'; + +@NgModule({ + imports: [ + RouterModule.forChild([{ path: '05-03', component: AppComponent }]) + ], + declarations: [ + AppComponent, + HeroButtonComponent + ], + exports: [ AppComponent ] +}) +export class AppModule {} diff --git a/aio/content/examples/style-guide/ts/src/05-03/app/heroes/index.ts b/aio/content/examples/style-guide/ts/src/05-03/app/heroes/index.ts new file mode 100644 index 0000000000..c3da79f741 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-03/app/heroes/index.ts @@ -0,0 +1 @@ +export * from './shared'; diff --git a/aio/content/examples/style-guide/ts/src/05-03/app/heroes/shared/hero-button/hero-button.component.avoid.ts b/aio/content/examples/style-guide/ts/src/05-03/app/heroes/shared/hero-button/hero-button.component.avoid.ts new file mode 100644 index 0000000000..6edbc4cd9e --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-03/app/heroes/shared/hero-button/hero-button.component.avoid.ts @@ -0,0 +1,11 @@ +import { Component } from '@angular/core'; +// #docregion example +/* avoid */ + +@Component({ + moduleId: module.id, + selector: '[tohHeroButton]', + templateUrl: './hero-button.component.html' +}) +export class HeroButtonComponent {} +// #enddocregion example diff --git a/aio/content/examples/style-guide/ts/src/05-03/app/heroes/shared/hero-button/hero-button.component.html b/aio/content/examples/style-guide/ts/src/05-03/app/heroes/shared/hero-button/hero-button.component.html new file mode 100644 index 0000000000..9ad67e50ac --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-03/app/heroes/shared/hero-button/hero-button.component.html @@ -0,0 +1 @@ + diff --git a/aio/content/examples/style-guide/ts/src/05-03/app/heroes/shared/hero-button/hero-button.component.ts b/aio/content/examples/style-guide/ts/src/05-03/app/heroes/shared/hero-button/hero-button.component.ts new file mode 100644 index 0000000000..8b9fbf95e5 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-03/app/heroes/shared/hero-button/hero-button.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +// #docregion example +@Component({ + moduleId: module.id, + selector: 'toh-hero-button', + templateUrl: './hero-button.component.html' +}) +export class HeroButtonComponent {} +// #enddocregion example diff --git a/aio/content/examples/style-guide/ts/src/05-03/app/heroes/shared/hero-button/index.ts b/aio/content/examples/style-guide/ts/src/05-03/app/heroes/shared/hero-button/index.ts new file mode 100644 index 0000000000..6bb67c5670 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-03/app/heroes/shared/hero-button/index.ts @@ -0,0 +1 @@ +export * from './hero-button.component'; diff --git a/aio/content/examples/style-guide/ts/src/05-03/app/heroes/shared/index.ts b/aio/content/examples/style-guide/ts/src/05-03/app/heroes/shared/index.ts new file mode 100644 index 0000000000..2334d49c9a --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-03/app/heroes/shared/index.ts @@ -0,0 +1 @@ +export * from './hero-button'; diff --git a/aio/content/examples/style-guide/ts/src/05-03/app/index.ts b/aio/content/examples/style-guide/ts/src/05-03/app/index.ts new file mode 100644 index 0000000000..fe8300f1dd --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-03/app/index.ts @@ -0,0 +1,2 @@ +export * from './heroes'; +export * from './app.component'; diff --git a/aio/content/examples/style-guide/ts/src/05-04/app/app.component.ts b/aio/content/examples/style-guide/ts/src/05-04/app/app.component.ts new file mode 100644 index 0000000000..0e43893f7f --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-04/app/app.component.ts @@ -0,0 +1,7 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'sg-app', + template: '' +}) +export class AppComponent { } diff --git a/aio/content/examples/style-guide/ts/src/05-04/app/app.module.ts b/aio/content/examples/style-guide/ts/src/05-04/app/app.module.ts new file mode 100644 index 0000000000..07f97cc6e4 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-04/app/app.module.ts @@ -0,0 +1,21 @@ +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'; +import { HeroService } from './heroes/shared'; + +@NgModule({ + imports: [ + BrowserModule, + RouterModule.forChild([{ path: '05-04', component: AppComponent }]) + ], + declarations: [ + AppComponent, + HeroesComponent + ], + exports: [ AppComponent ], + providers: [ HeroService ] +}) +export class AppModule {} diff --git a/aio/content/examples/style-guide/ts/src/05-04/app/heroes/heroes.component.avoid.ts b/aio/content/examples/style-guide/ts/src/05-04/app/heroes/heroes.component.avoid.ts new file mode 100644 index 0000000000..0ceb37032d --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-04/app/heroes/heroes.component.avoid.ts @@ -0,0 +1,64 @@ +import { Component, OnInit } from '@angular/core'; +import { Observable } from 'rxjs/Observable'; + +import { Hero, HeroService } from './shared'; + +// #docregion example +/* avoid */ + +@Component({ + selector: 'toh-heroes', + template: ` +
    +

    My Heroes

    +
      +
    • + {{hero.id}} {{hero.name}} +
    • +
    +
    +

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

    +
    +
    + `, + styles: [` + .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; + } + `] +}) +export class HeroesComponent implements OnInit { + heroes: Observable; + selectedHero: Hero; + + constructor(private heroService: HeroService) { } + + ngOnInit() { + this.heroes = this.heroService.getHeroes(); + } +} +// #enddocregion example diff --git a/aio/content/examples/style-guide/ts/src/05-04/app/heroes/heroes.component.css b/aio/content/examples/style-guide/ts/src/05-04/app/heroes/heroes.component.css new file mode 100644 index 0000000000..82f0c1d0ab --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-04/app/heroes/heroes.component.css @@ -0,0 +1,28 @@ +/* #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/aio/content/examples/style-guide/ts/src/05-04/app/heroes/heroes.component.html b/aio/content/examples/style-guide/ts/src/05-04/app/heroes/heroes.component.html new file mode 100644 index 0000000000..bab05ceb2b --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-04/app/heroes/heroes.component.html @@ -0,0 +1,12 @@ + +
    +

    My Heroes

    +
      +
    • + {{hero.id}} {{hero.name}} +
    • +
    +
    +

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

    +
    +
    diff --git a/aio/content/examples/style-guide/ts/src/05-04/app/heroes/heroes.component.ts b/aio/content/examples/style-guide/ts/src/05-04/app/heroes/heroes.component.ts new file mode 100644 index 0000000000..ec5dadc4a0 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-04/app/heroes/heroes.component.ts @@ -0,0 +1,23 @@ +import { Component, OnInit } from '@angular/core'; +import { Observable } from 'rxjs/Observable'; + +import { Hero, HeroService } from './shared'; + +// #docregion example +@Component({ + moduleId: module.id, + selector: 'toh-heroes', + templateUrl: './heroes.component.html', + styleUrls: ['./heroes.component.css'] +}) +export class HeroesComponent implements OnInit { + heroes: Observable; + selectedHero: Hero; + + constructor(private heroService: HeroService) { } + + ngOnInit() { + this.heroes = this.heroService.getHeroes(); + } +} +// #enddocregion example diff --git a/aio/content/examples/style-guide/ts/src/05-04/app/heroes/index.ts b/aio/content/examples/style-guide/ts/src/05-04/app/heroes/index.ts new file mode 100644 index 0000000000..a8d7f1d422 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-04/app/heroes/index.ts @@ -0,0 +1,2 @@ +export * from './shared'; +export * from './heroes.component'; diff --git a/aio/content/examples/style-guide/ts/src/05-04/app/heroes/shared/hero.model.ts b/aio/content/examples/style-guide/ts/src/05-04/app/heroes/shared/hero.model.ts new file mode 100644 index 0000000000..8f7cc205c8 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-04/app/heroes/shared/hero.model.ts @@ -0,0 +1,5 @@ +// #docregion +export class Hero { + id: number; + name: string; +} diff --git a/aio/content/examples/style-guide/ts/src/05-04/app/heroes/shared/hero.service.ts b/aio/content/examples/style-guide/ts/src/05-04/app/heroes/shared/hero.service.ts new file mode 100644 index 0000000000..9d388780a6 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-04/app/heroes/shared/hero.service.ts @@ -0,0 +1,18 @@ +import { Injectable } from '@angular/core'; +import { Http } from '@angular/http'; + +import { Observable } from 'rxjs/Observable'; +import 'rxjs/add/operator/map'; + +import { Hero } from './hero.model'; + +@Injectable() +export class HeroService { + + constructor(private http: Http) {} + + getHeroes(): Observable { + return this.http.get('api/heroes') + .map(resp => resp.json().data as Hero[]); + } +} diff --git a/aio/content/examples/style-guide/ts/src/05-04/app/heroes/shared/index.ts b/aio/content/examples/style-guide/ts/src/05-04/app/heroes/shared/index.ts new file mode 100644 index 0000000000..dbb150d3f8 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-04/app/heroes/shared/index.ts @@ -0,0 +1,2 @@ +export * from './hero.model'; +export * from './hero.service'; diff --git a/aio/content/examples/style-guide/ts/src/05-04/app/index.ts b/aio/content/examples/style-guide/ts/src/05-04/app/index.ts new file mode 100644 index 0000000000..fe8300f1dd --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-04/app/index.ts @@ -0,0 +1,2 @@ +export * from './heroes'; +export * from './app.component'; diff --git a/aio/content/examples/style-guide/ts/src/05-12/app/app.component.ts b/aio/content/examples/style-guide/ts/src/05-12/app/app.component.ts new file mode 100644 index 0000000000..dac40205c9 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-12/app/app.component.ts @@ -0,0 +1,7 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'sg-app', + template: '' +}) +export class AppComponent { } diff --git a/aio/content/examples/style-guide/ts/src/05-12/app/app.module.ts b/aio/content/examples/style-guide/ts/src/05-12/app/app.module.ts new file mode 100644 index 0000000000..5177b2cc64 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-12/app/app.module.ts @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import { AppComponent } from './app.component'; +import { HeroButtonComponent } from './heroes'; + +@NgModule({ + imports: [ + RouterModule.forChild([{ path: '05-12', component: AppComponent }]) + ], + declarations: [ + AppComponent, + HeroButtonComponent + ], + exports: [ AppComponent ] +}) +export class AppModule {} diff --git a/aio/content/examples/style-guide/ts/src/05-12/app/heroes/index.ts b/aio/content/examples/style-guide/ts/src/05-12/app/heroes/index.ts new file mode 100644 index 0000000000..c3da79f741 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-12/app/heroes/index.ts @@ -0,0 +1 @@ +export * from './shared'; diff --git a/aio/content/examples/style-guide/ts/src/05-12/app/heroes/shared/hero-button/hero-button.component.avoid.ts b/aio/content/examples/style-guide/ts/src/05-12/app/heroes/shared/hero-button/hero-button.component.avoid.ts new file mode 100644 index 0000000000..8f393ddd32 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-12/app/heroes/shared/hero-button/hero-button.component.avoid.ts @@ -0,0 +1,20 @@ +// #docregion +import { Component, EventEmitter } from '@angular/core'; +// #docregion example +/* avoid */ + +@Component({ + selector: 'toh-hero-button', + template: ``, + inputs: [ + 'label' + ], + outputs: [ + 'change' + ] +}) +export class HeroButtonComponent { + change = new EventEmitter(); + label: string; +} +// #enddocregion example diff --git a/aio/content/examples/style-guide/ts/src/05-12/app/heroes/shared/hero-button/hero-button.component.ts b/aio/content/examples/style-guide/ts/src/05-12/app/heroes/shared/hero-button/hero-button.component.ts new file mode 100644 index 0000000000..b299740765 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-12/app/heroes/shared/hero-button/hero-button.component.ts @@ -0,0 +1,13 @@ +// #docregion +import { Component, EventEmitter, Input, Output } from '@angular/core'; + +// #docregion example +@Component({ + selector: 'toh-hero-button', + template: `` +}) +export class HeroButtonComponent { + @Output() change = new EventEmitter(); + @Input() label: string; +} +// #enddocregion example diff --git a/aio/content/examples/style-guide/ts/src/05-12/app/heroes/shared/hero-button/index.ts b/aio/content/examples/style-guide/ts/src/05-12/app/heroes/shared/hero-button/index.ts new file mode 100644 index 0000000000..6bb67c5670 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-12/app/heroes/shared/hero-button/index.ts @@ -0,0 +1 @@ +export * from './hero-button.component'; diff --git a/aio/content/examples/style-guide/ts/src/05-12/app/heroes/shared/index.ts b/aio/content/examples/style-guide/ts/src/05-12/app/heroes/shared/index.ts new file mode 100644 index 0000000000..2334d49c9a --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-12/app/heroes/shared/index.ts @@ -0,0 +1 @@ +export * from './hero-button'; diff --git a/aio/content/examples/style-guide/ts/src/05-12/app/index.ts b/aio/content/examples/style-guide/ts/src/05-12/app/index.ts new file mode 100644 index 0000000000..fe8300f1dd --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-12/app/index.ts @@ -0,0 +1,2 @@ +export * from './heroes'; +export * from './app.component'; diff --git a/aio/content/examples/style-guide/ts/src/05-13/app/app.component.avoid.html b/aio/content/examples/style-guide/ts/src/05-13/app/app.component.avoid.html new file mode 100644 index 0000000000..0a263a6a95 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-13/app/app.component.avoid.html @@ -0,0 +1,5 @@ + + + + + diff --git a/aio/content/examples/style-guide/ts/src/05-13/app/app.component.html b/aio/content/examples/style-guide/ts/src/05-13/app/app.component.html new file mode 100644 index 0000000000..3cd94ca772 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-13/app/app.component.html @@ -0,0 +1,6 @@ + + + + + +

    The Great Bombasto

    diff --git a/aio/content/examples/style-guide/ts/src/05-13/app/app.component.ts b/aio/content/examples/style-guide/ts/src/05-13/app/app.component.ts new file mode 100644 index 0000000000..d57163f06f --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-13/app/app.component.ts @@ -0,0 +1,8 @@ +import { Component } from '@angular/core'; + +@Component({ + moduleId: module.id, + selector: 'sg-app', + templateUrl: './app.component.html' +}) +export class AppComponent { } diff --git a/aio/content/examples/style-guide/ts/src/05-13/app/app.module.ts b/aio/content/examples/style-guide/ts/src/05-13/app/app.module.ts new file mode 100644 index 0000000000..7ebe91dbbc --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-13/app/app.module.ts @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import { AppComponent } from './app.component'; +import { HeroButtonComponent, HeroHighlightDirective } from './heroes'; + +@NgModule({ + imports: [ + RouterModule.forChild([{ path: '05-13', component: AppComponent }]) + ], + declarations: [ + AppComponent, + HeroButtonComponent, HeroHighlightDirective + ], + exports: [ AppComponent ] +}) +export class AppModule {} diff --git a/aio/content/examples/style-guide/ts/src/05-13/app/heroes/index.ts b/aio/content/examples/style-guide/ts/src/05-13/app/heroes/index.ts new file mode 100644 index 0000000000..c3da79f741 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-13/app/heroes/index.ts @@ -0,0 +1 @@ +export * from './shared'; diff --git a/aio/content/examples/style-guide/ts/src/05-13/app/heroes/shared/hero-button/hero-button.component.avoid.ts b/aio/content/examples/style-guide/ts/src/05-13/app/heroes/shared/hero-button/hero-button.component.avoid.ts new file mode 100644 index 0000000000..4e67a14113 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-13/app/heroes/shared/hero-button/hero-button.component.avoid.ts @@ -0,0 +1,14 @@ +import { Component, EventEmitter, Input, Output } from '@angular/core'; +// #docregion example +/* avoid pointless aliasing */ + +@Component({ + selector: 'toh-hero-button', + template: `` +}) +export class HeroButtonComponent { + // Pointless aliases + @Output('changeEvent') change = new EventEmitter(); + @Input('labelAttribute') label: string; +} +// #enddocregion example diff --git a/aio/content/examples/style-guide/ts/src/05-13/app/heroes/shared/hero-button/hero-button.component.ts b/aio/content/examples/style-guide/ts/src/05-13/app/heroes/shared/hero-button/hero-button.component.ts new file mode 100644 index 0000000000..af6e7d46b7 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-13/app/heroes/shared/hero-button/hero-button.component.ts @@ -0,0 +1,14 @@ +// #docregion +import { Component, EventEmitter, Input, Output } from '@angular/core'; + +// #docregion example +@Component({ + selector: 'toh-hero-button', + template: `` +}) +export class HeroButtonComponent { + // No aliases + @Output() change = new EventEmitter(); + @Input() label: string; +} +// #enddocregion example diff --git a/aio/content/examples/style-guide/ts/src/05-13/app/heroes/shared/hero-button/index.ts b/aio/content/examples/style-guide/ts/src/05-13/app/heroes/shared/hero-button/index.ts new file mode 100644 index 0000000000..6bb67c5670 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-13/app/heroes/shared/hero-button/index.ts @@ -0,0 +1 @@ +export * from './hero-button.component'; diff --git a/aio/content/examples/style-guide/ts/src/05-13/app/heroes/shared/hero-highlight.directive.ts b/aio/content/examples/style-guide/ts/src/05-13/app/heroes/shared/hero-highlight.directive.ts new file mode 100644 index 0000000000..737af31f4f --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-13/app/heroes/shared/hero-highlight.directive.ts @@ -0,0 +1,15 @@ +// #docregion +import { Directive, ElementRef, Input, OnChanges } from '@angular/core'; + +@Directive({ selector: '[heroHighlight]' }) +export class HeroHighlightDirective implements OnChanges { + + // Aliased because `color` is a better property name than `heroHighlight` + @Input('heroHighlight') color: string; + + constructor(private el: ElementRef) {} + + ngOnChanges() { + this.el.nativeElement.style.backgroundColor = this.color || 'yellow'; + } +} diff --git a/aio/content/examples/style-guide/ts/src/05-13/app/heroes/shared/index.ts b/aio/content/examples/style-guide/ts/src/05-13/app/heroes/shared/index.ts new file mode 100644 index 0000000000..565f46cf4f --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-13/app/heroes/shared/index.ts @@ -0,0 +1,2 @@ +export * from './hero-button'; +export * from './hero-highlight.directive'; diff --git a/aio/content/examples/style-guide/ts/src/05-13/app/index.ts b/aio/content/examples/style-guide/ts/src/05-13/app/index.ts new file mode 100644 index 0000000000..fe8300f1dd --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-13/app/index.ts @@ -0,0 +1,2 @@ +export * from './heroes'; +export * from './app.component'; diff --git a/aio/content/examples/style-guide/ts/src/05-14/app/app.component.ts b/aio/content/examples/style-guide/ts/src/05-14/app/app.component.ts new file mode 100644 index 0000000000..8ed6da4c82 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-14/app/app.component.ts @@ -0,0 +1,7 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'sg-app', + template: `` +}) +export class AppComponent { } diff --git a/aio/content/examples/style-guide/ts/src/05-14/app/app.module.ts b/aio/content/examples/style-guide/ts/src/05-14/app/app.module.ts new file mode 100644 index 0000000000..0b294573d2 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-14/app/app.module.ts @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import { AppComponent } from './app.component'; +import { ToastComponent } from './shared'; + +@NgModule({ + imports: [ + RouterModule.forChild([{ path: '05-14', component: AppComponent }]) + ], + declarations: [ + AppComponent, + ToastComponent + ], + exports: [ AppComponent ] +}) +export class AppModule {} diff --git a/aio/content/examples/style-guide/ts/src/05-14/app/index.ts b/aio/content/examples/style-guide/ts/src/05-14/app/index.ts new file mode 100644 index 0000000000..ebe5c92f03 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-14/app/index.ts @@ -0,0 +1,2 @@ +export * from './shared'; +export * from './app.component'; diff --git a/aio/content/examples/style-guide/ts/src/05-14/app/shared/index.ts b/aio/content/examples/style-guide/ts/src/05-14/app/shared/index.ts new file mode 100644 index 0000000000..7ff6d415e7 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-14/app/shared/index.ts @@ -0,0 +1 @@ +export * from './toast'; diff --git a/aio/content/examples/style-guide/ts/src/05-14/app/shared/toast/index.ts b/aio/content/examples/style-guide/ts/src/05-14/app/shared/toast/index.ts new file mode 100644 index 0000000000..6502de796e --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-14/app/shared/toast/index.ts @@ -0,0 +1 @@ +export * from './toast.component'; diff --git a/aio/content/examples/style-guide/ts/src/05-14/app/shared/toast/toast.component.avoid.ts b/aio/content/examples/style-guide/ts/src/05-14/app/shared/toast/toast.component.avoid.ts new file mode 100644 index 0000000000..037ff2c8b5 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-14/app/shared/toast/toast.component.avoid.ts @@ -0,0 +1,40 @@ +// #docregion +import { OnInit } from '@angular/core'; +// #docregion example +/* avoid */ + +export class ToastComponent implements OnInit { + + private defaults = { + title: '', + message: 'May the Force be with you' + }; + message: string; + title: string; + private toastElement: any; + + ngOnInit() { + this.toastElement = document.getElementById('toh-toast'); + } + + // private methods + private hide() { + this.toastElement.style.opacity = 0; + window.setTimeout(() => this.toastElement.style.zIndex = 0, 400); + } + + activate(message = this.defaults.message, title = this.defaults.title) { + this.title = title; + this.message = message; + this.show(); + } + + private show() { + console.log(this.message); + this.toastElement.style.opacity = 1; + this.toastElement.style.zIndex = 9999; + + window.setTimeout(() => this.hide(), 2500); + } +} +// #enddocregion example diff --git a/aio/content/examples/style-guide/ts/src/05-14/app/shared/toast/toast.component.ts b/aio/content/examples/style-guide/ts/src/05-14/app/shared/toast/toast.component.ts new file mode 100644 index 0000000000..d7b8ea4af0 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-14/app/shared/toast/toast.component.ts @@ -0,0 +1,45 @@ +// #docregion +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'toh-toast', + template: `...` +}) +// #docregion example +export class ToastComponent implements OnInit { + // public properties + message: string; + title: string; + + // private fields + private defaults = { + title: '', + message: 'May the Force be with you' + }; + private toastElement: any; + + // public methods + activate(message = this.defaults.message, title = this.defaults.title) { + this.title = title; + this.message = message; + this.show(); + } + + ngOnInit() { + this.toastElement = document.getElementById('toh-toast'); + } + + // private methods + private hide() { + this.toastElement.style.opacity = 0; + window.setTimeout(() => this.toastElement.style.zIndex = 0, 400); + } + + private show() { + console.log(this.message); + this.toastElement.style.opacity = 1; + this.toastElement.style.zIndex = 9999; + window.setTimeout(() => this.hide(), 2500); + } +} +// #enddocregion example diff --git a/aio/content/examples/style-guide/ts/src/05-15/app/app.component.ts b/aio/content/examples/style-guide/ts/src/05-15/app/app.component.ts new file mode 100644 index 0000000000..91b569b1e7 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-15/app/app.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +import { HeroService } from './heroes'; + +@Component({ + selector: 'sg-app', + template: '', + providers: [HeroService] +}) +export class AppComponent { } diff --git a/aio/content/examples/style-guide/ts/src/05-15/app/app.module.ts b/aio/content/examples/style-guide/ts/src/05-15/app/app.module.ts new file mode 100644 index 0000000000..9bd4b8c9a2 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-15/app/app.module.ts @@ -0,0 +1,19 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { RouterModule } from '@angular/router'; + +import { AppComponent } from './app.component'; +import { HeroListComponent } from './heroes'; + +@NgModule({ + imports: [ + BrowserModule, + RouterModule.forChild([{ path: '05-15', component: AppComponent }]) + ], + declarations: [ + AppComponent, + HeroListComponent + ], + exports: [ AppComponent ] +}) +export class AppModule {} diff --git a/aio/content/examples/style-guide/ts/src/05-15/app/heroes/hero-list/hero-list.component.avoid.ts b/aio/content/examples/style-guide/ts/src/05-15/app/heroes/hero-list/hero-list.component.avoid.ts new file mode 100644 index 0000000000..c323ba2b1c --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-15/app/heroes/hero-list/hero-list.component.avoid.ts @@ -0,0 +1,39 @@ +// #docregion +/* avoid */ + +import { OnInit } from '@angular/core'; +import { Http, Response } from '@angular/http'; + +import { Observable } from 'rxjs/Observable'; +import 'rxjs/add/operator/catch'; +import 'rxjs/add/operator/finally'; +import 'rxjs/add/operator/map'; + +import { Hero } from '../shared/hero.model'; + +const heroesUrl = 'http://angular.io'; + +export class HeroListComponent implements OnInit { + heroes: Hero[]; + constructor(private http: Http) {} + getHeroes() { + this.heroes = []; + this.http.get(heroesUrl) + .map((response: Response) => response.json().data) + .catch(this.catchBadResponse) + .finally(() => this.hideSpinner()) + .subscribe((heroes: Hero[]) => this.heroes = heroes); + } + ngOnInit() { + this.getHeroes(); + } + + private catchBadResponse(err: any, source: Observable) { + // log and handle the exception + return new Observable(); + } + + private hideSpinner() { + // hide the spinner + } +} diff --git a/aio/content/examples/style-guide/ts/src/05-15/app/heroes/hero-list/hero-list.component.ts b/aio/content/examples/style-guide/ts/src/05-15/app/heroes/hero-list/hero-list.component.ts new file mode 100644 index 0000000000..1fdb893c13 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-15/app/heroes/hero-list/hero-list.component.ts @@ -0,0 +1,23 @@ +// #docregion example +import { Component, OnInit } from '@angular/core'; + +import { Hero, HeroService } from '../shared'; + +@Component({ + selector: 'toh-hero-list', + template: `...` +}) +export class HeroListComponent implements OnInit { + heroes: Hero[]; + constructor(private heroService: HeroService) {} + getHeroes() { + this.heroes = []; + this.heroService.getHeroes() + .subscribe(heroes => this.heroes = heroes); + } + ngOnInit() { + this.getHeroes(); + } +} +// #enddocregion example + diff --git a/aio/content/examples/style-guide/ts/src/05-15/app/heroes/hero-list/index.ts b/aio/content/examples/style-guide/ts/src/05-15/app/heroes/hero-list/index.ts new file mode 100644 index 0000000000..c4bcb3278e --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-15/app/heroes/hero-list/index.ts @@ -0,0 +1 @@ +export * from './hero-list.component'; diff --git a/aio/content/examples/style-guide/ts/src/05-15/app/heroes/index.ts b/aio/content/examples/style-guide/ts/src/05-15/app/heroes/index.ts new file mode 100644 index 0000000000..f1112f1c7c --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-15/app/heroes/index.ts @@ -0,0 +1,2 @@ +export * from './hero-list'; +export * from './shared'; diff --git a/aio/content/examples/style-guide/ts/src/05-15/app/heroes/shared/hero.model.ts b/aio/content/examples/style-guide/ts/src/05-15/app/heroes/shared/hero.model.ts new file mode 100644 index 0000000000..8f7cc205c8 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-15/app/heroes/shared/hero.model.ts @@ -0,0 +1,5 @@ +// #docregion +export class Hero { + id: number; + name: string; +} diff --git a/aio/content/examples/style-guide/ts/src/05-15/app/heroes/shared/hero.service.ts b/aio/content/examples/style-guide/ts/src/05-15/app/heroes/shared/hero.service.ts new file mode 100644 index 0000000000..72d07bbed4 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-15/app/heroes/shared/hero.service.ts @@ -0,0 +1,15 @@ +// #docregion +import { Injectable } from '@angular/core'; + +import { Observable } from 'rxjs/Observable'; +import 'rxjs/add/observable/of'; + +import { Hero } from './hero.model'; + +@Injectable() +export class HeroService { + getHeroes() { + let heroes: Hero[] = []; + return Observable.of(heroes); + } +} diff --git a/aio/content/examples/style-guide/ts/src/05-15/app/heroes/shared/index.ts b/aio/content/examples/style-guide/ts/src/05-15/app/heroes/shared/index.ts new file mode 100644 index 0000000000..27516fdedd --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-15/app/heroes/shared/index.ts @@ -0,0 +1,3 @@ +// #docregion +export * from './hero.model'; +export * from './hero.service'; diff --git a/aio/content/examples/style-guide/ts/src/05-15/app/index.ts b/aio/content/examples/style-guide/ts/src/05-15/app/index.ts new file mode 100644 index 0000000000..fe8300f1dd --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-15/app/index.ts @@ -0,0 +1,2 @@ +export * from './heroes'; +export * from './app.component'; diff --git a/aio/content/examples/style-guide/ts/src/05-16/app/app.component.avoid.html b/aio/content/examples/style-guide/ts/src/05-16/app/app.component.avoid.html new file mode 100644 index 0000000000..2c0cea58e2 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-16/app/app.component.avoid.html @@ -0,0 +1,4 @@ + + + + diff --git a/aio/content/examples/style-guide/ts/src/05-16/app/app.component.html b/aio/content/examples/style-guide/ts/src/05-16/app/app.component.html new file mode 100644 index 0000000000..4883a6940a --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-16/app/app.component.html @@ -0,0 +1,2 @@ + + diff --git a/aio/content/examples/style-guide/ts/src/05-16/app/app.component.ts b/aio/content/examples/style-guide/ts/src/05-16/app/app.component.ts new file mode 100644 index 0000000000..d57163f06f --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-16/app/app.component.ts @@ -0,0 +1,8 @@ +import { Component } from '@angular/core'; + +@Component({ + moduleId: module.id, + selector: 'sg-app', + templateUrl: './app.component.html' +}) +export class AppComponent { } diff --git a/aio/content/examples/style-guide/ts/src/05-16/app/app.module.ts b/aio/content/examples/style-guide/ts/src/05-16/app/app.module.ts new file mode 100644 index 0000000000..c3fb36f8ac --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-16/app/app.module.ts @@ -0,0 +1,19 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { RouterModule } from '@angular/router'; + +import { AppComponent } from './app.component'; +import { HeroComponent } from './heroes'; + +@NgModule({ + imports: [ + BrowserModule, + RouterModule.forChild([{ path: '05-16', component: AppComponent }]) + ], + declarations: [ + AppComponent, + HeroComponent + ], + exports: [ AppComponent ] +}) +export class AppModule {} diff --git a/aio/content/examples/style-guide/ts/src/05-16/app/heroes/hero.component.avoid.ts b/aio/content/examples/style-guide/ts/src/05-16/app/heroes/hero.component.avoid.ts new file mode 100644 index 0000000000..823aa2e1c7 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-16/app/heroes/hero.component.avoid.ts @@ -0,0 +1,13 @@ +// #docregion +import { Component, EventEmitter, Output } from '@angular/core'; +// #docregion example +/* avoid */ + +@Component({ + selector: 'toh-hero', + template: `...` +}) +export class HeroComponent { + @Output() onSavedTheDay = new EventEmitter(); +} +// #enddocregion example diff --git a/aio/content/examples/style-guide/ts/src/05-16/app/heroes/hero.component.ts b/aio/content/examples/style-guide/ts/src/05-16/app/heroes/hero.component.ts new file mode 100644 index 0000000000..bbd4a4b5f3 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-16/app/heroes/hero.component.ts @@ -0,0 +1,14 @@ +// #docregion +import { Component, EventEmitter, Output } from '@angular/core'; + +@Component({ + selector: 'toh-hero', + template: `...` +}) +// #docregion example +export class HeroComponent { + @Output() savedTheDay = new EventEmitter(); +} +// #enddocregion example + + diff --git a/aio/content/examples/style-guide/ts/src/05-16/app/heroes/index.ts b/aio/content/examples/style-guide/ts/src/05-16/app/heroes/index.ts new file mode 100644 index 0000000000..084f36d703 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-16/app/heroes/index.ts @@ -0,0 +1 @@ +export * from './hero.component'; diff --git a/aio/content/examples/style-guide/ts/src/05-16/app/index.ts b/aio/content/examples/style-guide/ts/src/05-16/app/index.ts new file mode 100644 index 0000000000..fe8300f1dd --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-16/app/index.ts @@ -0,0 +1,2 @@ +export * from './heroes'; +export * from './app.component'; diff --git a/aio/content/examples/style-guide/ts/src/05-17/app/app.component.ts b/aio/content/examples/style-guide/ts/src/05-17/app/app.component.ts new file mode 100644 index 0000000000..86728b8b80 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-17/app/app.component.ts @@ -0,0 +1,7 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'sg-app', + template: '' +}) +export class AppComponent { } diff --git a/aio/content/examples/style-guide/ts/src/05-17/app/app.module.ts b/aio/content/examples/style-guide/ts/src/05-17/app/app.module.ts new file mode 100644 index 0000000000..e850d80ae3 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-17/app/app.module.ts @@ -0,0 +1,20 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { RouterModule } from '@angular/router'; + +import { AppComponent } from './app.component'; +import { HeroComponent, HeroListComponent } from './heroes'; + +@NgModule({ + imports: [ + BrowserModule, + RouterModule.forChild([{ path: '05-17', component: AppComponent }]) + ], + declarations: [ + AppComponent, + HeroComponent, + HeroListComponent + ], + exports: [ AppComponent ] +}) +export class AppModule {} diff --git a/aio/content/examples/style-guide/ts/src/05-17/app/heroes/hero-list/hero-list.component.avoid.ts b/aio/content/examples/style-guide/ts/src/05-17/app/heroes/hero-list/hero-list.component.avoid.ts new file mode 100644 index 0000000000..f007512949 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-17/app/heroes/hero-list/hero-list.component.avoid.ts @@ -0,0 +1,24 @@ +// #docregion +import { Component } from '@angular/core'; + +import { Hero } from '../shared/hero.model'; +// #docregion example +/* avoid */ + +@Component({ + selector: 'toh-hero-list', + template: ` +
    + Our list of heroes: + + + Total powers: {{totalPowers}}
    + Average power: {{totalPowers / heroes.length}} +
    + ` +}) +export class HeroListComponent { + heroes: Hero[]; + totalPowers: number; +} +// #enddocregion example diff --git a/aio/content/examples/style-guide/ts/src/05-17/app/heroes/hero-list/hero-list.component.ts b/aio/content/examples/style-guide/ts/src/05-17/app/heroes/hero-list/hero-list.component.ts new file mode 100644 index 0000000000..5f18cc5b0c --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-17/app/heroes/hero-list/hero-list.component.ts @@ -0,0 +1,35 @@ +// #docplaster +// #docregion +import { Component } from '@angular/core'; + +import { Hero } from '../shared/hero.model'; + +// #docregion example +@Component({ + selector: 'toh-hero-list', + template: ` +
    + Our list of heroes: + + + Total powers: {{totalPowers}}
    + Average power: {{avgPower}} +
    + ` +}) +export class HeroListComponent { + heroes: Hero[]; + totalPowers: number; + + // #enddocregion example + // testing harness + constructor() { + this.heroes = []; + } + + // #docregion example + get avgPower() { + return this.totalPowers / this.heroes.length; + } +} +// #enddocregion example diff --git a/aio/content/examples/style-guide/ts/src/05-17/app/heroes/hero-list/index.ts b/aio/content/examples/style-guide/ts/src/05-17/app/heroes/hero-list/index.ts new file mode 100644 index 0000000000..c4bcb3278e --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-17/app/heroes/hero-list/index.ts @@ -0,0 +1 @@ +export * from './hero-list.component'; diff --git a/aio/content/examples/style-guide/ts/src/05-17/app/heroes/hero/hero.component.ts b/aio/content/examples/style-guide/ts/src/05-17/app/heroes/hero/hero.component.ts new file mode 100644 index 0000000000..334f836a7d --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-17/app/heroes/hero/hero.component.ts @@ -0,0 +1,13 @@ +import { Component, Input } from '@angular/core'; + +import { Hero } from '../shared/hero.model'; + +@Component({ + selector: 'toh-hero', + template: `...` +}) +export class HeroComponent { + @Input() hero: Hero; +} + + diff --git a/aio/content/examples/style-guide/ts/src/05-17/app/heroes/hero/index.ts b/aio/content/examples/style-guide/ts/src/05-17/app/heroes/hero/index.ts new file mode 100644 index 0000000000..084f36d703 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-17/app/heroes/hero/index.ts @@ -0,0 +1 @@ +export * from './hero.component'; diff --git a/aio/content/examples/style-guide/ts/src/05-17/app/heroes/index.ts b/aio/content/examples/style-guide/ts/src/05-17/app/heroes/index.ts new file mode 100644 index 0000000000..dcf3e79bd3 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-17/app/heroes/index.ts @@ -0,0 +1,3 @@ +export * from './hero'; +export * from './hero-list'; +export * from './shared'; diff --git a/aio/content/examples/style-guide/ts/src/05-17/app/heroes/shared/hero.model.ts b/aio/content/examples/style-guide/ts/src/05-17/app/heroes/shared/hero.model.ts new file mode 100644 index 0000000000..8f7cc205c8 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-17/app/heroes/shared/hero.model.ts @@ -0,0 +1,5 @@ +// #docregion +export class Hero { + id: number; + name: string; +} diff --git a/aio/content/examples/style-guide/ts/src/05-17/app/heroes/shared/index.ts b/aio/content/examples/style-guide/ts/src/05-17/app/heroes/shared/index.ts new file mode 100644 index 0000000000..0dceb684c4 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-17/app/heroes/shared/index.ts @@ -0,0 +1 @@ +export * from './hero.model'; diff --git a/aio/content/examples/style-guide/ts/src/05-17/app/index.ts b/aio/content/examples/style-guide/ts/src/05-17/app/index.ts new file mode 100644 index 0000000000..fe8300f1dd --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/05-17/app/index.ts @@ -0,0 +1,2 @@ +export * from './heroes'; +export * from './app.component'; diff --git a/aio/content/examples/style-guide/ts/src/06-01/app/app.component.html b/aio/content/examples/style-guide/ts/src/06-01/app/app.component.html new file mode 100644 index 0000000000..2ccf87d0f5 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/06-01/app/app.component.html @@ -0,0 +1,2 @@ + +
    Bombasta
    diff --git a/aio/content/examples/style-guide/ts/src/06-01/app/app.component.ts b/aio/content/examples/style-guide/ts/src/06-01/app/app.component.ts new file mode 100644 index 0000000000..d57163f06f --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/06-01/app/app.component.ts @@ -0,0 +1,8 @@ +import { Component } from '@angular/core'; + +@Component({ + moduleId: module.id, + selector: 'sg-app', + templateUrl: './app.component.html' +}) +export class AppComponent { } diff --git a/aio/content/examples/style-guide/ts/src/06-01/app/app.module.ts b/aio/content/examples/style-guide/ts/src/06-01/app/app.module.ts new file mode 100644 index 0000000000..318cd306d7 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/06-01/app/app.module.ts @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import { AppComponent } from './app.component'; +import { HighlightDirective } from './shared'; + +@NgModule({ + imports: [ + RouterModule.forChild([{ path: '06-01', component: AppComponent }]) + ], + declarations: [ + AppComponent, + HighlightDirective + ], + exports: [ AppComponent ] +}) +export class AppModule {} diff --git a/aio/content/examples/style-guide/ts/src/06-01/app/index.ts b/aio/content/examples/style-guide/ts/src/06-01/app/index.ts new file mode 100644 index 0000000000..ebe5c92f03 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/06-01/app/index.ts @@ -0,0 +1,2 @@ +export * from './shared'; +export * from './app.component'; diff --git a/aio/content/examples/style-guide/ts/src/06-01/app/shared/highlight.directive.ts b/aio/content/examples/style-guide/ts/src/06-01/app/shared/highlight.directive.ts new file mode 100644 index 0000000000..991a6c5d25 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/06-01/app/shared/highlight.directive.ts @@ -0,0 +1,13 @@ +// #docregion +import { Directive, HostListener } from '@angular/core'; + +// #docregion example +@Directive({ + selector: '[tohHighlight]' +}) +export class HighlightDirective { + @HostListener('mouseover') onMouseEnter() { + // do highlight work + } +} +// #enddocregion example diff --git a/aio/content/examples/style-guide/ts/src/06-01/app/shared/index.ts b/aio/content/examples/style-guide/ts/src/06-01/app/shared/index.ts new file mode 100644 index 0000000000..105a035680 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/06-01/app/shared/index.ts @@ -0,0 +1 @@ +export * from './highlight.directive'; diff --git a/aio/content/examples/style-guide/ts/src/06-03/app/app.component.ts b/aio/content/examples/style-guide/ts/src/06-03/app/app.component.ts new file mode 100644 index 0000000000..0d0a7d107b --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/06-03/app/app.component.ts @@ -0,0 +1,9 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'sg-app', + template: ` + + ` +}) +export class AppComponent { } diff --git a/aio/content/examples/style-guide/ts/src/06-03/app/app.module.ts b/aio/content/examples/style-guide/ts/src/06-03/app/app.module.ts new file mode 100644 index 0000000000..b19f3fdc00 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/06-03/app/app.module.ts @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import { AppComponent } from './app.component'; +import { ValidatorDirective, Validator2Directive } from './shared'; + +@NgModule({ + imports: [ + RouterModule.forChild([{ path: '06-03', component: AppComponent }]) + ], + declarations: [ + AppComponent, + ValidatorDirective, Validator2Directive + ], + exports: [ AppComponent ] +}) +export class AppModule {} diff --git a/aio/content/examples/style-guide/ts/src/06-03/app/index.ts b/aio/content/examples/style-guide/ts/src/06-03/app/index.ts new file mode 100644 index 0000000000..ebe5c92f03 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/06-03/app/index.ts @@ -0,0 +1,2 @@ +export * from './shared'; +export * from './app.component'; diff --git a/aio/content/examples/style-guide/ts/src/06-03/app/shared/index.ts b/aio/content/examples/style-guide/ts/src/06-03/app/shared/index.ts new file mode 100644 index 0000000000..ba25e4c458 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/06-03/app/shared/index.ts @@ -0,0 +1,2 @@ +export * from './validator.directive'; +export * from './validator2.directive'; diff --git a/aio/content/examples/style-guide/ts/src/06-03/app/shared/validator.directive.ts b/aio/content/examples/style-guide/ts/src/06-03/app/shared/validator.directive.ts new file mode 100644 index 0000000000..d9e32c017f --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/06-03/app/shared/validator.directive.ts @@ -0,0 +1,12 @@ +// #docregion +import { Directive, HostBinding, HostListener } from '@angular/core'; + +@Directive({ + selector: '[tohValidator]' +}) +export class ValidatorDirective { + @HostBinding('attr.role') role = 'button'; + @HostListener('mouseenter') onMouseEnter() { + // do work + } +} diff --git a/aio/content/examples/style-guide/ts/src/06-03/app/shared/validator2.directive.ts b/aio/content/examples/style-guide/ts/src/06-03/app/shared/validator2.directive.ts new file mode 100644 index 0000000000..7936a83cb1 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/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/aio/content/examples/style-guide/ts/src/07-01/app/app.component.html b/aio/content/examples/style-guide/ts/src/07-01/app/app.component.html new file mode 100644 index 0000000000..3c05329f3f --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/07-01/app/app.component.html @@ -0,0 +1,5 @@ +
      +
    • + {{hero.name}} +
    • +
    diff --git a/aio/content/examples/style-guide/ts/src/07-01/app/app.component.ts b/aio/content/examples/style-guide/ts/src/07-01/app/app.component.ts new file mode 100644 index 0000000000..638da66caf --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/07-01/app/app.component.ts @@ -0,0 +1,19 @@ +import { Component, OnInit } from '@angular/core'; + +import { Hero, HeroService } from './heroes'; + +@Component({ + moduleId: module.id, + selector: 'sg-app', + templateUrl: './app.component.html', + providers: [HeroService] +}) +export class AppComponent implements OnInit { + heroes: Hero[]; + + constructor(private heroService: HeroService) { } + + ngOnInit() { + this.heroService.getHeroes().subscribe(heroes => this.heroes = heroes); + } +} diff --git a/aio/content/examples/style-guide/ts/src/07-01/app/app.module.ts b/aio/content/examples/style-guide/ts/src/07-01/app/app.module.ts new file mode 100644 index 0000000000..0077500dea --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/07-01/app/app.module.ts @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { RouterModule } from '@angular/router'; + +import { AppComponent } from './app.component'; + +@NgModule({ + imports: [ + BrowserModule, + RouterModule.forChild([{ path: '07-01', component: AppComponent }]) + ], + declarations: [ + AppComponent + ], + exports: [ AppComponent ] +}) +export class AppModule {} diff --git a/aio/content/examples/style-guide/ts/src/07-01/app/heroes/index.ts b/aio/content/examples/style-guide/ts/src/07-01/app/heroes/index.ts new file mode 100644 index 0000000000..c3da79f741 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/07-01/app/heroes/index.ts @@ -0,0 +1 @@ +export * from './shared'; diff --git a/aio/content/examples/style-guide/ts/src/07-01/app/heroes/shared/hero.model.ts b/aio/content/examples/style-guide/ts/src/07-01/app/heroes/shared/hero.model.ts new file mode 100644 index 0000000000..8f7cc205c8 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/07-01/app/heroes/shared/hero.model.ts @@ -0,0 +1,5 @@ +// #docregion +export class Hero { + id: number; + name: string; +} diff --git a/aio/content/examples/style-guide/ts/src/07-01/app/heroes/shared/hero.service.ts b/aio/content/examples/style-guide/ts/src/07-01/app/heroes/shared/hero.service.ts new file mode 100644 index 0000000000..b5aba5d00c --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/07-01/app/heroes/shared/hero.service.ts @@ -0,0 +1,17 @@ +// #docregion +import { Injectable } from '@angular/core'; +import { Http, Response } from '@angular/http'; + +import { Hero } from './hero.model'; + +@Injectable() +// #docregion example +export class HeroService { + constructor(private http: Http) { } + + getHeroes() { + return this.http.get('api/heroes') + .map((response: Response) => response.json().data); + } +} +// #enddocregion example diff --git a/aio/content/examples/style-guide/ts/src/07-01/app/heroes/shared/index.ts b/aio/content/examples/style-guide/ts/src/07-01/app/heroes/shared/index.ts new file mode 100644 index 0000000000..dbb150d3f8 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/07-01/app/heroes/shared/index.ts @@ -0,0 +1,2 @@ +export * from './hero.model'; +export * from './hero.service'; diff --git a/aio/content/examples/style-guide/ts/src/07-01/app/index.ts b/aio/content/examples/style-guide/ts/src/07-01/app/index.ts new file mode 100644 index 0000000000..fe8300f1dd --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/07-01/app/index.ts @@ -0,0 +1,2 @@ +export * from './heroes'; +export * from './app.component'; diff --git a/aio/content/examples/style-guide/ts/src/07-03/app/app.component.ts b/aio/content/examples/style-guide/ts/src/07-03/app/app.component.ts new file mode 100644 index 0000000000..f4d25e1ab6 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/07-03/app/app.component.ts @@ -0,0 +1,13 @@ +// #docregion +import { Component } from '@angular/core'; + +import { HeroService } from './heroes'; + +@Component({ + selector: 'toh-app', + template: ` + + `, + providers: [HeroService] +}) +export class AppComponent {} diff --git a/aio/content/examples/style-guide/ts/src/07-03/app/app.module.ts b/aio/content/examples/style-guide/ts/src/07-03/app/app.module.ts new file mode 100644 index 0000000000..8ba06d22be --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/07-03/app/app.module.ts @@ -0,0 +1,19 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { RouterModule } from '@angular/router'; + +import { AppComponent } from './app.component'; +import { HeroListComponent } from './heroes'; + +@NgModule({ + imports: [ + BrowserModule, + RouterModule.forChild([{ path: '07-03', component: AppComponent }]) + ], + declarations: [ + AppComponent, + HeroListComponent + ], + exports: [ AppComponent ] +}) +export class AppModule {} diff --git a/aio/content/examples/style-guide/ts/src/07-03/app/heroes/hero-list/hero-list.component.ts b/aio/content/examples/style-guide/ts/src/07-03/app/heroes/hero-list/hero-list.component.ts new file mode 100644 index 0000000000..cf9bb19243 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/07-03/app/heroes/hero-list/hero-list.component.ts @@ -0,0 +1,20 @@ +// #docregion +import { Component, OnInit } from '@angular/core'; + +import { Hero, HeroService } from '../shared'; + +@Component({ + selector: 'toh-heroes', + template: ` +
    {{heroes | json}}
    + ` +}) +export class HeroListComponent implements OnInit { + heroes: Hero[] = []; + + constructor(private heroService: HeroService) { } + + ngOnInit() { + this.heroService.getHeroes().subscribe(heroes => this.heroes = heroes); + } +} diff --git a/aio/content/examples/style-guide/ts/src/07-03/app/heroes/hero-list/index.ts b/aio/content/examples/style-guide/ts/src/07-03/app/heroes/hero-list/index.ts new file mode 100644 index 0000000000..c4bcb3278e --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/07-03/app/heroes/hero-list/index.ts @@ -0,0 +1 @@ +export * from './hero-list.component'; diff --git a/aio/content/examples/style-guide/ts/src/07-03/app/heroes/index.ts b/aio/content/examples/style-guide/ts/src/07-03/app/heroes/index.ts new file mode 100644 index 0000000000..f1112f1c7c --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/07-03/app/heroes/index.ts @@ -0,0 +1,2 @@ +export * from './hero-list'; +export * from './shared'; diff --git a/aio/content/examples/style-guide/ts/src/07-03/app/heroes/shared/hero.model.ts b/aio/content/examples/style-guide/ts/src/07-03/app/heroes/shared/hero.model.ts new file mode 100644 index 0000000000..8f7cc205c8 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/07-03/app/heroes/shared/hero.model.ts @@ -0,0 +1,5 @@ +// #docregion +export class Hero { + id: number; + name: string; +} diff --git a/aio/content/examples/style-guide/ts/src/07-03/app/heroes/shared/hero.service.ts b/aio/content/examples/style-guide/ts/src/07-03/app/heroes/shared/hero.service.ts new file mode 100644 index 0000000000..72d07bbed4 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/07-03/app/heroes/shared/hero.service.ts @@ -0,0 +1,15 @@ +// #docregion +import { Injectable } from '@angular/core'; + +import { Observable } from 'rxjs/Observable'; +import 'rxjs/add/observable/of'; + +import { Hero } from './hero.model'; + +@Injectable() +export class HeroService { + getHeroes() { + let heroes: Hero[] = []; + return Observable.of(heroes); + } +} diff --git a/aio/content/examples/style-guide/ts/src/07-03/app/heroes/shared/index.ts b/aio/content/examples/style-guide/ts/src/07-03/app/heroes/shared/index.ts new file mode 100644 index 0000000000..27516fdedd --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/07-03/app/heroes/shared/index.ts @@ -0,0 +1,3 @@ +// #docregion +export * from './hero.model'; +export * from './hero.service'; diff --git a/aio/content/examples/style-guide/ts/src/07-03/app/index.ts b/aio/content/examples/style-guide/ts/src/07-03/app/index.ts new file mode 100644 index 0000000000..fe8300f1dd --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/07-03/app/index.ts @@ -0,0 +1,2 @@ +export * from './heroes'; +export * from './app.component'; diff --git a/aio/content/examples/style-guide/ts/src/07-04/app/app.component.ts b/aio/content/examples/style-guide/ts/src/07-04/app/app.component.ts new file mode 100644 index 0000000000..b0bc9677fe --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/07-04/app/app.component.ts @@ -0,0 +1,19 @@ +// #docregion +import { Component, OnInit } from '@angular/core'; + +import { HeroArena, HeroService, Hero } from './heroes'; + +@Component({ + selector: 'toh-app', + template: '
    {{heroes | json}}
    ', + providers: [HeroArena, HeroService] +}) +export class AppComponent implements OnInit { + heroes: Hero[] = []; + + constructor(private heroArena: HeroArena) { } + + ngOnInit() { + this.heroArena.getParticipants().subscribe(heroes => this.heroes = heroes); + } +} diff --git a/aio/content/examples/style-guide/ts/src/07-04/app/app.module.ts b/aio/content/examples/style-guide/ts/src/07-04/app/app.module.ts new file mode 100644 index 0000000000..71c515c9c9 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/07-04/app/app.module.ts @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { RouterModule } from '@angular/router'; + +import { AppComponent } from './app.component'; + +@NgModule({ + imports: [ + BrowserModule, + RouterModule.forChild([{ path: '07-04', component: AppComponent }]) + ], + declarations: [ + AppComponent + ], + exports: [ AppComponent ] +}) +export class AppModule {} diff --git a/aio/content/examples/style-guide/ts/src/07-04/app/heroes/index.ts b/aio/content/examples/style-guide/ts/src/07-04/app/heroes/index.ts new file mode 100644 index 0000000000..c3da79f741 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/07-04/app/heroes/index.ts @@ -0,0 +1 @@ +export * from './shared'; diff --git a/aio/content/examples/style-guide/ts/src/07-04/app/heroes/shared/hero-arena.service.avoid.ts b/aio/content/examples/style-guide/ts/src/07-04/app/heroes/shared/hero-arena.service.avoid.ts new file mode 100644 index 0000000000..698fa65239 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/07-04/app/heroes/shared/hero-arena.service.avoid.ts @@ -0,0 +1,14 @@ +// #docregion +import { Inject } from '@angular/core'; +import { Http } from '@angular/http'; + +import { HeroService } from './hero.service'; +// #docregion example +/* avoid */ + +export class HeroArena { + constructor( + @Inject(HeroService) private heroService: HeroService, + @Inject(Http) private http: Http) {} +} +// #enddocregion example diff --git a/aio/content/examples/style-guide/ts/src/07-04/app/heroes/shared/hero-arena.service.ts b/aio/content/examples/style-guide/ts/src/07-04/app/heroes/shared/hero-arena.service.ts new file mode 100644 index 0000000000..42bc51f9e9 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/07-04/app/heroes/shared/hero-arena.service.ts @@ -0,0 +1,21 @@ +// #docplaster +// #docregion +import { Injectable } from '@angular/core'; +import { Http } from '@angular/http'; + +import { HeroService } from './index'; + +// #docregion example +@Injectable() +export class HeroArena { + constructor( + private heroService: HeroService, + private http: Http) {} + // #enddocregion example + // test harness + getParticipants() { + return this.heroService.getHeroes(); + } + // #docregion example +} +// #enddocregion example diff --git a/aio/content/examples/style-guide/ts/src/07-04/app/heroes/shared/hero.model.ts b/aio/content/examples/style-guide/ts/src/07-04/app/heroes/shared/hero.model.ts new file mode 100644 index 0000000000..8f7cc205c8 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/07-04/app/heroes/shared/hero.model.ts @@ -0,0 +1,5 @@ +// #docregion +export class Hero { + id: number; + name: string; +} diff --git a/aio/content/examples/style-guide/ts/src/07-04/app/heroes/shared/hero.service.ts b/aio/content/examples/style-guide/ts/src/07-04/app/heroes/shared/hero.service.ts new file mode 100644 index 0000000000..72d07bbed4 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/07-04/app/heroes/shared/hero.service.ts @@ -0,0 +1,15 @@ +// #docregion +import { Injectable } from '@angular/core'; + +import { Observable } from 'rxjs/Observable'; +import 'rxjs/add/observable/of'; + +import { Hero } from './hero.model'; + +@Injectable() +export class HeroService { + getHeroes() { + let heroes: Hero[] = []; + return Observable.of(heroes); + } +} diff --git a/aio/content/examples/style-guide/ts/src/07-04/app/heroes/shared/index.ts b/aio/content/examples/style-guide/ts/src/07-04/app/heroes/shared/index.ts new file mode 100644 index 0000000000..e8ba54b540 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/07-04/app/heroes/shared/index.ts @@ -0,0 +1,4 @@ +// #docregion +export * from './hero.model'; +export * from './hero.service'; +export * from './hero-arena.service'; diff --git a/aio/content/examples/style-guide/ts/src/07-04/app/index.ts b/aio/content/examples/style-guide/ts/src/07-04/app/index.ts new file mode 100644 index 0000000000..fe8300f1dd --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/07-04/app/index.ts @@ -0,0 +1,2 @@ +export * from './heroes'; +export * from './app.component'; diff --git a/aio/content/examples/style-guide/ts/src/09-01/app/app.component.ts b/aio/content/examples/style-guide/ts/src/09-01/app/app.component.ts new file mode 100644 index 0000000000..ebc904f722 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/09-01/app/app.component.ts @@ -0,0 +1,7 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'sg-app', + template: '' +}) +export class AppComponent { } diff --git a/aio/content/examples/style-guide/ts/src/09-01/app/app.module.ts b/aio/content/examples/style-guide/ts/src/09-01/app/app.module.ts new file mode 100644 index 0000000000..5872e801d6 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/09-01/app/app.module.ts @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import { AppComponent } from './app.component'; +import { HeroButtonComponent } from './heroes'; + +@NgModule({ + imports: [ + RouterModule.forChild([{ path: '09-01', component: AppComponent }]) + ], + declarations: [ + AppComponent, + HeroButtonComponent + ], + exports: [ AppComponent ] +}) +export class AppModule {} diff --git a/aio/content/examples/style-guide/ts/src/09-01/app/heroes/index.ts b/aio/content/examples/style-guide/ts/src/09-01/app/heroes/index.ts new file mode 100644 index 0000000000..c3da79f741 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/09-01/app/heroes/index.ts @@ -0,0 +1 @@ +export * from './shared'; diff --git a/aio/content/examples/style-guide/ts/src/09-01/app/heroes/shared/hero-button/hero-button.component.avoid.ts b/aio/content/examples/style-guide/ts/src/09-01/app/heroes/shared/hero-button/hero-button.component.avoid.ts new file mode 100644 index 0000000000..7dc42c2f40 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/09-01/app/heroes/shared/hero-button/hero-button.component.avoid.ts @@ -0,0 +1,15 @@ +// #docregion +import { Component } from '@angular/core'; +// #docregion example +/* avoid */ + +@Component({ + selector: 'toh-hero-button', + template: `` +}) +export class HeroButtonComponent implements OnInit { + ngOnInit() { + console.log('The component is initialized'); + } +} +// #enddocregion example diff --git a/aio/content/examples/style-guide/ts/src/09-01/app/heroes/shared/hero-button/index.ts b/aio/content/examples/style-guide/ts/src/09-01/app/heroes/shared/hero-button/index.ts new file mode 100644 index 0000000000..6bb67c5670 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/09-01/app/heroes/shared/hero-button/index.ts @@ -0,0 +1 @@ +export * from './hero-button.component'; diff --git a/aio/content/examples/style-guide/ts/src/09-01/app/heroes/shared/index.ts b/aio/content/examples/style-guide/ts/src/09-01/app/heroes/shared/index.ts new file mode 100644 index 0000000000..2334d49c9a --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/09-01/app/heroes/shared/index.ts @@ -0,0 +1 @@ +export * from './hero-button'; diff --git a/aio/content/examples/style-guide/ts/src/09-01/app/index.ts b/aio/content/examples/style-guide/ts/src/09-01/app/index.ts new file mode 100644 index 0000000000..fe8300f1dd --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/09-01/app/index.ts @@ -0,0 +1,2 @@ +export * from './heroes'; +export * from './app.component'; diff --git a/aio/content/examples/style-guide/ts/src/app/app.component.html b/aio/content/examples/style-guide/ts/src/app/app.component.html new file mode 100644 index 0000000000..0680b43f9c --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/app/app.component.html @@ -0,0 +1 @@ + diff --git a/aio/content/examples/style-guide/ts/src/app/app.component.ts b/aio/content/examples/style-guide/ts/src/app/app.component.ts new file mode 100644 index 0000000000..ab2d3d9c33 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/app/app.component.ts @@ -0,0 +1,8 @@ +import { Component } from '@angular/core'; + +@Component({ + moduleId: module.id, + selector: 'my-app', + templateUrl: './app.component.html' +}) +export class AppComponent { } diff --git a/aio/content/examples/style-guide/ts/src/app/app.routes.ts b/aio/content/examples/style-guide/ts/src/app/app.routes.ts new file mode 100644 index 0000000000..bce6b4df06 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/app/app.routes.ts @@ -0,0 +1,8 @@ +import { Routes } from '@angular/router'; + +import { AppComponent as S0101 } from '../01-01/app'; + +export const routes: Routes = [ + { path: '', redirectTo: '/01-01', pathMatch: 'full' }, + { path: '01-01', component: S0101 }, +]; diff --git a/aio/content/examples/style-guide/ts/src/app/hero-data.ts b/aio/content/examples/style-guide/ts/src/app/hero-data.ts new file mode 100644 index 0000000000..f3e6feb91c --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/app/hero-data.ts @@ -0,0 +1,11 @@ +export class HeroData { + createDb() { + let heroes = [ + { id: 1, name: 'Windstorm' }, + { id: 2, name: 'Bombasto' }, + { id: 3, name: 'Magneta' }, + { id: 4, name: 'Tornado' } + ]; + return {heroes}; + } +} diff --git a/aio/content/examples/style-guide/ts/src/index.html b/aio/content/examples/style-guide/ts/src/index.html new file mode 100644 index 0000000000..188c2c26a1 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/index.html @@ -0,0 +1,30 @@ + + + + + + + Style Guide Sample + + + + + + + + + + + + + + + + + loading... + + + + diff --git a/aio/content/examples/style-guide/ts/src/main.ts b/aio/content/examples/style-guide/ts/src/main.ts new file mode 100644 index 0000000000..5b4c98ba69 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/main.ts @@ -0,0 +1,99 @@ +import { NgModule } from '@angular/core'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { BrowserModule } from '@angular/platform-browser'; + +import { HttpModule } from '@angular/http'; +import { InMemoryWebApiModule } from 'angular-in-memory-web-api'; + +import { RouterModule } from '@angular/router'; + +import { HashLocationStrategy, + LocationStrategy } from '@angular/common'; + +import 'rxjs/add/operator/map'; + +import { HeroData } from './app/hero-data'; +import { AppComponent } from './app/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'; +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 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'; +import * as s0512 from './05-12/app/app.module'; +import * as s0513 from './05-13/app/app.module'; +import * as s0514 from './05-14/app/app.module'; +import * as s0515 from './05-15/app/app.module'; +import * as s0516 from './05-16/app/app.module'; +import * as s0517 from './05-17/app/app.module'; +import * as s0601 from './06-01/app/app.module'; +import * as s0603 from './06-03/app/app.module'; +import * as s0701 from './07-01/app/app.module'; +import * as s0703 from './07-03/app/app.module'; +import * as s0704 from './07-04/app/app.module'; +import * as s0901 from './09-01/app/app.module'; + +/////////////////// +const moduleMetadata = { + imports: [ + BrowserModule, + HttpModule, + InMemoryWebApiModule.forRoot(HeroData), + + s0101.AppModule, + s0205.AppModule, + s0207.AppModule, + s0208.AppModule, + s0301.AppModule, + s0302.AppModule, + s0303.AppModule, + s0304.AppModule, + s0306.AppModule, + s0408.AppModule, + s0410.AppModule, + s0411.AppModule, + s0412.AppModule, + s0502.AppModule, + s0503.AppModule, + s0504.AppModule, + s0512.AppModule, + s0513.AppModule, + s0514.AppModule, + s0515.AppModule, + s0516.AppModule, + s0517.AppModule, + s0601.AppModule, + s0603.AppModule, + s0701.AppModule, + s0703.AppModule, + s0704.AppModule, + s0901.AppModule, + + RouterModule.forRoot([ + { path: '', redirectTo: '/01-01', pathMatch: 'full' } + ], {/* enableTracing: true */}), + ], + providers: [ + { provide: LocationStrategy, useClass: HashLocationStrategy } + ], + declarations: [ AppComponent ], + bootstrap: [ AppComponent ] +}; + +@NgModule(moduleMetadata) +class MainModule { } + +platformBrowserDynamic().bootstrapModule(MainModule); + + diff --git a/aio/content/examples/style-guide/ts/src/systemjs.custom.js b/aio/content/examples/style-guide/ts/src/systemjs.custom.js new file mode 100644 index 0000000000..8181979346 --- /dev/null +++ b/aio/content/examples/style-guide/ts/src/systemjs.custom.js @@ -0,0 +1,51 @@ +(function(global) { + // 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/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/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-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', + '05-12', '05-12/app', '05-12/app/heroes', '05-12/app/heroes/shared', '05-12/app/heroes/shared/hero-button', + '05-13', '05-13/app', '05-13/app/heroes', '05-13/app/heroes/shared', '05-13/app/heroes/shared/hero-button', + '05-14', '05-14/app', '05-14/app/shared', '05-14/app/shared/toast', + '05-15', '05-15/app', '05-15/app/heroes', '05-15/app/heroes/hero-list', '05-15/app/heroes/shared', + '05-16', '05-16/app', '05-16/app/heroes', + '05-17', '05-17/app', '05-17/app/heroes', '05-17/app/heroes/hero', '05-17/app/heroes/hero-list', + '05-17/app/heroes/shared', + '06-01', '06-01/app', '06-01/app/shared', + '06-03', '06-03/app', '06-03/app/shared', + '07-01', '07-01/app', '07-01/app/heroes', '07-01/app/heroes/shared', + '07-03', '07-03/app', '07-03/app/heroes', '07-03/app/heroes/hero-list', '07-03/app/heroes/shared', + '07-04', '07-04/app', '07-04/app/heroes', '07-04/app/heroes/shared', + '09-01', '09-01/app', '09-01/app/heroes', '09-01/app/heroes/shared', '09-01/app/heroes/shared/hero-button' + ]; + + var packages = {}; + packageNames.forEach(function(pkgName) { + packages[pkgName] = { main: 'index.js', defaultExtension: 'js' }; + }); + + var config = { + packages: packages + } + + System.config(config); + +})(this); diff --git a/aio/content/examples/styleguide/e2e-spec.ts b/aio/content/examples/styleguide/e2e-spec.ts new file mode 100644 index 0000000000..af10d2b71d --- /dev/null +++ b/aio/content/examples/styleguide/e2e-spec.ts @@ -0,0 +1,16 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by } from 'protractor'; + +describe('Documentation StyleGuide E2E Tests', function() { + + let expectedMsg = 'My First Angular App'; + + beforeEach(function () { + browser.get(''); + }); + + it('should display: ' + expectedMsg, function() { + expect(element(by.id('output')).getText()).toEqual(expectedMsg); + }); +}); diff --git a/aio/content/examples/styleguide/foo.dart b/aio/content/examples/styleguide/foo.dart new file mode 100644 index 0000000000..aeea7eb657 --- /dev/null +++ b/aio/content/examples/styleguide/foo.dart @@ -0,0 +1,17 @@ +library angular2.src.core.application_static; + +// #docregion import +import 'dart:async'; +import 'application_common.dart'; +import 'package:angular2/src/core/linker/dynamic_component_loader.dart' show ComponentRef; +// #enddocregion import +/// Starts an application from a root component. +/// +/// See [commonBootstrap] for detailed documentation. +Future bootstrapStatic(Type appComponentType, + [List componentInjectableBindings, void initReflector()]) { + if (initReflector != null) { + initReflector(); + } + return commonBootstrap(appComponentType, componentInjectableBindings); +} diff --git a/aio/content/examples/styleguide/foo.yaml b/aio/content/examples/styleguide/foo.yaml new file mode 100644 index 0000000000..37f8b7ab22 --- /dev/null +++ b/aio/content/examples/styleguide/foo.yaml @@ -0,0 +1,21 @@ +name: benchpress +version: <%= packageJson.version %> +authors: +<%= Object.keys(packageJson.contributors).map(function(name) { + return '- '+name+' <'+packageJson.contributors[name]+'>'; +}).join('\n') %> +description: Benchpress - a framework for e2e performance tests +homepage: <%= packageJson.homepage %> +environment: + sdk: '>=1.10.0 <2.0.0' +# #docregion dependencies +dependencies: + angular2: '^<%= packageJson.version %>' + stack_trace: '^1.1.1' + webdriver: '^0.9.0' +dev_dependencies: + guinness: '^0.1.17' +dependency_overrides: + angular2: + path: ../angular2 +# #enddocregion diff --git a/aio/content/examples/styleguide/js/example-config.json b/aio/content/examples/styleguide/js/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/styleguide/js/spec.js b/aio/content/examples/styleguide/js/spec.js new file mode 100644 index 0000000000..590ccc5dc4 --- /dev/null +++ b/aio/content/examples/styleguide/js/spec.js @@ -0,0 +1,8 @@ +// #docregion +describe("Jasmine sample test", function() { + + it("1+1 should be 2", function() { + var result = 1 + 1; + expect(result).toBe(2); + }); +}); \ No newline at end of file diff --git a/aio/content/examples/styleguide/js/src/app.js b/aio/content/examples/styleguide/js/src/app.js new file mode 100644 index 0000000000..d38669cd78 --- /dev/null +++ b/aio/content/examples/styleguide/js/src/app.js @@ -0,0 +1,55 @@ +(function(app) { + +// #docregion +// #docregion class-w-annotations +app.AppComponent = + // #docregion component + ng.core.Component({ + selector: 'my-app', + // #enddocregion + // #docregion view + template: '

    My First Angular App

    ' + }) + // #enddocregion + // #docregion class + .Class({ + constructor: function () { } + }); + // #enddocregion +// #enddocregion + +// #docregion bootstrap +app.AppModule = + ng.core.NgModule({ + imports: [ ng.platformBrowser.BrowserModule ], + declarations: [ app.AppComponent ], + bootstrap: [ app.AppComponent ] + }) + .Class({ + constructor: function() {} + }); + +document.addEventListener('DOMContentLoaded', function() { + ng.platformBrowserDynamic + .platformBrowserDynamic() + .bootstrapModule(app.AppModule); +}); +// #enddocregion +// #enddocregion + +})(window.app || (window.app = {})); + +/* Non DSL Approach */ +(function(app) { + +// #docregion no-dsl +app.AppComponent = function AppComponent () {} + +app.AppComponent.annotations = [ + new ng.core.Component({ + selector: 'my-app', + template: '

    My First Angular App

    ' + }) +]; +// #enddocregion +})(window.app || (window.app = {})); diff --git a/aio/content/examples/styleguide/js/src/index.html b/aio/content/examples/styleguide/js/src/index.html new file mode 100644 index 0000000000..ac2d34ba5d --- /dev/null +++ b/aio/content/examples/styleguide/js/src/index.html @@ -0,0 +1,27 @@ + + + + Documentation Style + + + + + + + + + + + + + + + + + + + + foo2 + + + diff --git a/aio/content/examples/styleguide/jsonly.zipconfig.json b/aio/content/examples/styleguide/jsonly.zipconfig.json new file mode 100644 index 0000000000..118c776bdc --- /dev/null +++ b/aio/content/examples/styleguide/jsonly.zipconfig.json @@ -0,0 +1,3 @@ +{ + "files": ["**/*.js"] +} \ No newline at end of file diff --git a/aio/content/examples/styleguide/package.1.json b/aio/content/examples/styleguide/package.1.json new file mode 100644 index 0000000000..481f99fb12 --- /dev/null +++ b/aio/content/examples/styleguide/package.1.json @@ -0,0 +1,23 @@ +{ + "name": "angular2-quickstart", + "version": "1.0.0", + "scripts": { + "tsc": "tsc", + "tsc:w": "tsc -w", + "lite": "lite-server", + "start": "concurrently \"npm run tsc:w\" \"npm run lite\" " + }, + "license": "MIT", + "dependencies": { + "angular2": "2.0.0-beta.0", + "systemjs": "0.19.6", + "core-js": "^2.4.0", + "rxjs": "5.0.0-beta.0", + "zone.js": "0.5.10" + }, + "devDependencies": { + "concurrently": "^1.0.0", + "lite-server": "^1.3.1", + "typescript": "^1.7.3" + } +} diff --git a/aio/content/examples/styleguide/ts/example-config.json b/aio/content/examples/styleguide/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/styleguide/ts/src/app/app.component.ts b/aio/content/examples/styleguide/ts/src/app/app.component.ts new file mode 100644 index 0000000000..8b71f6ddc4 --- /dev/null +++ b/aio/content/examples/styleguide/ts/src/app/app.component.ts @@ -0,0 +1,7 @@ +import { Component } from '@angular/core'; +@Component({ + selector: 'my-app', + template: '

    My First Angular App

    ' +}) +export class AppComponent { } + diff --git a/aio/content/examples/styleguide/ts/src/app/app.module.ts b/aio/content/examples/styleguide/ts/src/app/app.module.ts new file mode 100644 index 0000000000..0a9ee6adf7 --- /dev/null +++ b/aio/content/examples/styleguide/ts/src/app/app.module.ts @@ -0,0 +1,11 @@ +// #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/aio/content/examples/styleguide/ts/src/index.html b/aio/content/examples/styleguide/ts/src/index.html new file mode 100644 index 0000000000..5cb8919509 --- /dev/null +++ b/aio/content/examples/styleguide/ts/src/index.html @@ -0,0 +1,25 @@ + + + + + Documentation Style + + + + + + + + + + + + + + + + + + diff --git a/aio/content/examples/styleguide/ts/src/main.ts b/aio/content/examples/styleguide/ts/src/main.ts new file mode 100644 index 0000000000..6b6532d428 --- /dev/null +++ b/aio/content/examples/styleguide/ts/src/main.ts @@ -0,0 +1,5 @@ +// #docregion +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/styleguide/zipconfig.json b/aio/content/examples/styleguide/zipconfig.json new file mode 100644 index 0000000000..74ca947f2b --- /dev/null +++ b/aio/content/examples/styleguide/zipconfig.json @@ -0,0 +1,4 @@ +{ + "zipRegion": "class", + "files": ["**/*.*", "!**/*zipconfig.json"] +} \ No newline at end of file diff --git a/aio/content/examples/template-syntax/e2e-spec.ts b/aio/content/examples/template-syntax/e2e-spec.ts new file mode 100644 index 0000000000..71f1c58165 --- /dev/null +++ b/aio/content/examples/template-syntax/e2e-spec.ts @@ -0,0 +1,43 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by } from 'protractor'; + +// Not yet complete +describe('Template Syntax', function () { + + beforeAll(function () { + browser.get(''); + }); + + it('should be able to use interpolation with a hero', function () { + let heroInterEle = element.all(by.css('h2+p')).get(0); + expect(heroInterEle.getText()).toEqual('My current hero is Hercules'); + }); + + it('should be able to use interpolation with a calculation', function () { + let theSumEles = element.all(by.cssContainingText('h3~p', 'The sum of')); + expect(theSumEles.count()).toBe(2); + expect(theSumEles.get(0).getText()).toEqual('The sum of 1 + 1 is 2'); + expect(theSumEles.get(1).getText()).toEqual('The sum of 1 + 1 is not 4'); + }); + + it('should be able to use class binding syntax', function () { + let specialEle = element(by.cssContainingText('div', 'Special')); + expect(specialEle.getAttribute('class')).toMatch('special'); + }); + + it('should be able to use style binding syntax', function () { + let specialButtonEle = element(by.cssContainingText('div.special~button', 'button')); + expect(specialButtonEle.getAttribute('style')).toMatch('color: red'); + }); + + it('should two-way bind to sizer', async () => { + let div = element(by.css('div#two-way-1')); + let incButton = div.element(by.buttonText('+')); + let input = div.element(by.css('input')); + let initSize = await input.getAttribute('value'); + incButton.click(); + expect(input.getAttribute('value')).toEqual((+initSize + 1).toString()); + }); +}); + diff --git a/aio/content/examples/template-syntax/ts/example-config.json b/aio/content/examples/template-syntax/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/template-syntax/ts/plnkr.json b/aio/content/examples/template-syntax/ts/plnkr.json new file mode 100644 index 0000000000..099616ad7c --- /dev/null +++ b/aio/content/examples/template-syntax/ts/plnkr.json @@ -0,0 +1,6 @@ +{ + "description": "Template Syntax Collection", + "basePath": "src/", + "files":["!**/*.d.ts", "!**/*.js"], + "tags": ["template"] +} diff --git a/aio/content/examples/template-syntax/ts/plnkr.no-link.html b/aio/content/examples/template-syntax/ts/plnkr.no-link.html new file mode 100644 index 0000000000..4650d4a520 --- /dev/null +++ b/aio/content/examples/template-syntax/ts/plnkr.no-link.html @@ -0,0 +1,1414 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/template-syntax/ts/src/app/app.component.css b/aio/content/examples/template-syntax/ts/src/app/app.component.css new file mode 100644 index 0000000000..23f9667623 --- /dev/null +++ b/aio/content/examples/template-syntax/ts/src/app/app.component.css @@ -0,0 +1,17 @@ +a.to-toc { margin: 30px 0; } +button { font-size: 100%; margin: 0 2px; } +div[clickable] {cursor: pointer; max-width: 200px; margin: 16px 0} +#noTrackByCnt, #withTrackByCnt {color: darkred; max-width: 450px; margin: 4px;} +img {height: 100px;} +.box {border: 1px solid black; padding: 6px; max-width: 450px;} +.child-div {margin-left: 1em; font-weight: normal} +.context {margin-left: 1em;} +.hidden {display: none} +.parent-div {margin-top: 1em; font-weight: bold} +.special {font-weight:bold; font-size: x-large} +.bad {color: red;} +.saveable {color: limegreen;} +.curly, .modified {font-family: "Brush Script MT"} +.toe {margin-left: 1em; font-style: italic;} +little-hero {color:blue; font-size: smaller; background-color: Turquoise } +.to-toc {margin-top: 10px; display: block} diff --git a/aio/content/examples/template-syntax/ts/src/app/app.component.html b/aio/content/examples/template-syntax/ts/src/app/app.component.html new file mode 100644 index 0000000000..b3d6c29be5 --- /dev/null +++ b/aio/content/examples/template-syntax/ts/src/app/app.component.html @@ -0,0 +1,822 @@ + + +

    Template Syntax

    +Interpolation
    +Expression context
    +Statement context
    +Mental Model
    +Buttons
    +Properties vs. Attributes
    +
    +Property Binding
    + +
    +Event Binding
    +Two-way Binding
    +
    +
    Directives
    + +
    +Template reference variables
    +Inputs and outputs
    +Pipes
    +Safe navigation operator ?.
    +Enums
    + + +

    Interpolation

    + + +

    My current hero is {{currentHero.name}}

    + + + +

    + {{title}} + +

    + + + + +

    The sum of 1 + 1 is {{1 + 1}}

    + + + + +

    The sum of 1 + 1 is not {{1 + 1 + getVal()}}

    + + +top + +

    Expression context

    + +

    Component expression context ({{title}}, [hidden]="isUnchanged")

    +
    + + {{title}} + changed + +
    + + +

    Template input variable expression context (let hero)

    + + + +

    Template reference variable expression context (#heroInput)

    +
    + Type something: + + {{heroInput.value}} + +
    + +top + +

    Statement context

    + +

    Component statement context ( (click)="onSave() ) +

    + + + +
    + +

    Template $event statement context

    +
    + + + +
    + +

    Template input variable statement context (let hero)

    + +
    + + + +
    + +

    Template reference variable statement context (#heroForm)

    +
    + +
    ...
    + +
    + +top + + +

    New Mental Model

    + + + + +
    Mental Model
    + + + +

    + +
    + + +
    Mental Model
    + + + +
    +

    + +
    + + + + +
    +

    + +
    + + + +
    + +
    +

    + + + + +
    click me
    + +{{clicked}} +

    + +
    + Hero Name: + + + + {{heroName}} +
    +

    + + + + +

    + + +
    Special
    + +

    + + + + +top + + +

    Property vs. Attribute (img examples)

    + + + +

    + + + + + +top + + +

    Buttons

    + + + + +

    + + +

    + + + +top + + +

    Property Binding

    + + + + + + + + +
    [ngClass] binding to the classes property
    + + + + + + + + + + + +
    + + + +
    + + + + + +

    is the interpolated image.

    +

    is the property bound image.

    + +

    "{{title}}" is the interpolated title.

    +

    "" is the property bound title.

    + + + + +

    "{{evilTitle}}" is the interpolated evil title.

    +

    "" is the property bound evil title.

    + + +top + + +

    Attribute Binding

    + + + + + + + + + + +
    One-Two
    FiveSix
    + + +
    + + + + +

    + + +
    + + + + + + + +
    + +top + + +

    Class Binding

    + + + +
    Bad curly special
    + + + + +
    Bad curly
    + + + + + +
    The class binding is special
    + + + +
    This one is not so special
    + + +
    This class binding is special too
    + +top + + +

    Style Binding

    + + + + + + + + + + + +top + + +

    Event Binding

    + + + + + + + + + +
    + + + +
    click with myClick
    + + +{{clickMessage}} +
    + + + + + + +
    + + + + + +
    Click me +
    Click me too!
    +
    + + + + +
    + +
    + + + + +
    + +
    + + +top + +

    Two-way Binding

    +
    + + +
    Resizable Text
    + + +
    +
    +
    +

    De-sugared two-way binding

    + + + +
    + +top + + +

    NgModel (two-way) Binding

    + +

    Result: {{currentHero.name}}

    + + + + +without NgModel +
    + + + +[(ngModel)] +
    + + + +bindon-ngModel +
    + + + +(ngModelChange) = "...name=$event" +
    + + + +(ngModelChange) = "setUppercaseName($event)" + +top + + +

    NgClass Binding

    + +

    currentClasses returns {{currentClasses | json}}

    + +
    This div is initially saveable, unchanged, and special
    + + + +
    + | + | + + +

    +
    + This div should be {{ canSave ? "": "not"}} saveable, + {{ isUnchanged ? "unchanged" : "modified" }} and, + {{ isSpecial ? "": "not"}} special after clicking "refresh".
    +

    + +
    This div is special
    + +
    Bad curly special
    +
    Curly special
    + +top + + +

    NgStyle Binding

    + + +
    + This div is x-large. +
    + + +

    [ngStyle] binding to `currentStyles` - CSS property names

    +

    currentStyles returns {{currentStyles | json}}

    + +
    + This div is initially italic, normal weight, and extra large (24px). +
    + + + +
    + | + | + + +

    +
    + This div should be {{ canSave ? "italic": "plain"}}, + {{ isUnchanged ? "normal weight" : "bold" }} and, + {{ isSpecial ? "extra large": "normal size"}} after clicking "refresh".
    + +top + + +

    NgIf Binding

    + + + + + + +
    Hello, {{currentHero.name}}
    +
    Hello, {{nullHero.name}}
    + + + + + + + +
    Hero Detail removed from DOM (via template) because isActive is false
    + + + + +
    Show with class
    +
    Hide with class
    + + + + +
    Show with style
    +
    Hide with style
    + + +top + + +

    NgFor Binding

    + +
    + +
    {{hero.name}}
    + +
    +
    + +
    + + + + +
    + +top + +

    *ngFor with index

    +

    with semi-colon separator

    +
    + +
    {{i + 1}} - {{hero.name}}
    + +
    + +

    with comma separator

    +
    + +
    {{i + 1}} - {{hero.name}}
    +
    + +top + +

    *ngFor trackBy

    + + + + +

    without trackBy

    +
    +
    ({{hero.id}}) {{hero.name}}
    + +
    + Hero DOM elements change #{{heroesNoTrackByCount}} without trackBy +
    +
    + +

    with trackBy

    +
    +
    ({{hero.id}}) {{hero.name}}
    + +
    + Hero DOM elements change #{{heroesWithTrackByCount}} with trackBy +
    +
    + +


    + +

    with trackBy and semi-colon separator

    +
    + +
    + ({{hero.id}}) {{hero.name}} +
    + +
    + +

    with trackBy and comma separator

    +
    +
    ({{hero.id}}) {{hero.name}}
    +
    + +

    with trackBy and space separator

    +
    +
    ({{hero.id}}) {{hero.name}}
    +
    + +

    with generic trackById function

    +
    +
    ({{hero.id}}) {{hero.name}}
    +
    + +top + + +

    NgSwitch Binding

    + +
    Pick your favorite hero
    +

    + + + +

    + + +
    + + + + + +
    Are you as confused as {{currentHero.name}}?
    + + + +
    + + +top + + +

    Template reference variables

    + + + + + + + + + + + + + + + + + + + + +

    Example Form

    + + +top + + +

    Inputs and Outputs

    + + + + + + + + + + + +
    myClick2
    +{{clickMessage2}} + +top + + +

    Pipes

    + + +
    Title through uppercase pipe: {{title | uppercase}}
    + + + + +
    + Title through a pipe chain: + {{title | uppercase | lowercase}} +
    + + + + +
    Birthdate: {{currentHero?.birthdate | date:'longDate'}}
    + + + +
    {{currentHero | json}}
    + + +
    Birthdate: {{(currentHero?.birthdate | date:'longDate') | uppercase}}
    + +
    + + {{product.price | currency:'USD':true}} +
    + +top + + +

    Safe navigation operator ?.

    + +
    + + The title is {{title}} + +
    + +
    + + The current hero's name is {{currentHero?.name}} + +
    + +
    + + The current hero's name is {{currentHero.name}} + +
    + + + + + + +
    The null hero's name is {{nullHero.name}}
    + + +
    + +The null hero's name is {{nullHero && nullHero.name}} + +
    + +
    + + + The null hero's name is {{nullHero?.name}} + +
    + +top + + + +

    Enums in binding

    + +

    + + The name of the Color.Red enum is {{Color[Color.Red]}}.
    + The current color is {{Color[color]}} and its number is {{color}}.
    + + +

    + +top diff --git a/aio/content/examples/template-syntax/ts/src/app/app.component.ts b/aio/content/examples/template-syntax/ts/src/app/app.component.ts new file mode 100644 index 0000000000..166948362f --- /dev/null +++ b/aio/content/examples/template-syntax/ts/src/app/app.component.ts @@ -0,0 +1,213 @@ +/* tslint:disable:forin member-ordering */ +// #docplaster + +import { AfterViewInit, Component, ElementRef, OnInit, QueryList, ViewChildren } from '@angular/core'; + +import { Hero } from './hero'; + +// Alerter fn: monkey patch during test +export function alerter(msg?: string) { + window.alert(msg); +} + +export enum Color {Red, Green, Blue}; + +/** + * Giant grab bag of stuff to drive the chapter + */ +@Component({ + moduleId: module.id, + selector: 'my-app', + templateUrl: './app.component.html', + styleUrls: [ './app.component.css' ] +}) +export class AppComponent implements AfterViewInit, OnInit { + + ngOnInit() { + this.resetHeroes(); + this.setCurrentClasses(); + this.setCurrentStyles(); + } + + ngAfterViewInit() { + // Detect effects of NgForTrackBy + trackChanges(this.heroesNoTrackBy, () => this.heroesNoTrackByCount += 1); + trackChanges(this.heroesWithTrackBy, () => this.heroesWithTrackByCount += 1); + } + + @ViewChildren('noTrackBy') heroesNoTrackBy: QueryList; + @ViewChildren('withTrackBy') heroesWithTrackBy: QueryList; + + actionName = 'Go for it'; + alert = alerter; + badCurly = 'bad curly'; + classes = 'special'; + + callFax(value: string) {this.alert(`Faxing ${value} ...`); } + callPhone(value: string) {this.alert(`Calling ${value} ...`); } + canSave = true; + + changeIds() { + this.resetHeroes(); + this.heroes.forEach(h => h.id += 10 * this.heroIdIncrement++); + this.heroesWithTrackByCountReset = -1; + } + + clearTrackByCounts() { + const trackByCountReset = this.heroesWithTrackByCountReset; + this.resetHeroes(); + this.heroesNoTrackByCount = -1; + this.heroesWithTrackByCount = trackByCountReset; + this.heroIdIncrement = 1; + } + + clicked = ''; + clickMessage = ''; + clickMessage2 = ''; + + Color = Color; + color = Color.Red; + colorToggle() {this.color = (this.color === Color.Red) ? Color.Blue : Color.Red; } + + currentHero: Hero; + + deleteHero(hero: Hero) { + this.alert(`Delete ${hero ? hero.name : 'the hero'}.`); + } + + // #docregion evil-title + evilTitle = 'Template Syntax'; + // #enddocregion evil-title + + fontSizePx = 16; + + title = 'Template Syntax'; + + getStyles(el: Element) { + let styles = window.getComputedStyle(el); + let showStyles = {}; + for (let p in this.currentStyles) { // only interested in these styles + showStyles[p] = styles[p]; + } + return JSON.stringify(showStyles); + } + + getVal() { return this.val; } + + hero: Hero; // defined to demonstrate template context precedence + heroes: Hero[]; + + // trackBy change counting + heroesNoTrackByCount = 0; + heroesWithTrackByCount = 0; + heroesWithTrackByCountReset = 0; + + heroIdIncrement = 1; + + // heroImageUrl = 'http://www.wpclipart.com/cartoon/people/hero/hero_silhoutte_T.png'; + // Public Domain terms of use: http://www.wpclipart.com/terms.html + heroImageUrl = 'images/hero.png'; + + iconUrl = 'images/ng-logo.png'; + isActive = false; + isSpecial = true; + isUnchanged = true; + + nullHero: Hero = null; + + onCancel(event: KeyboardEvent) { + let evtMsg = event ? ' Event target is ' + (event.target).innerHTML : ''; + this.alert('Canceled.' + evtMsg); + } + + onClickMe(event: KeyboardEvent) { + let evtMsg = event ? ' Event target class is ' + (event.target).className : ''; + this.alert('Click me.' + evtMsg); + } + + onSave(event: KeyboardEvent) { + let evtMsg = event ? ' Event target is ' + (event.target).innerText : ''; + this.alert('Saved.' + evtMsg); + } + + onSubmit() { /* referenced but not used */} + + product = { + name: 'frimfram', + price: 42 + }; + + // updates with fresh set of cloned heroes + resetHeroes() { + this.heroes = Hero.heroes.map(hero => hero.clone()); + this.currentHero = this.heroes[0]; + this.heroesWithTrackByCountReset = 0; + } + + private samenessCount = 5; + moreOfTheSame() { this.samenessCount++; }; + get sameAsItEverWas() { + let result: string[] = Array(this.samenessCount); + for ( let i = result.length; i-- > 0; ) { result[i] = 'same as it ever was ...'; } + return result; + // return [1,2,3,4,5].map(id => { + // return {id:id, text: 'same as it ever was ...'}; + // }); + } + + setUppercaseName(name: string) { + this.currentHero.name = name.toUpperCase(); + } + + // #docregion setClasses + currentClasses: {}; + setCurrentClasses() { + // CSS classes: added/removed per current state of component properties + this.currentClasses = { + saveable: this.canSave, + modified: !this.isUnchanged, + special: this.isSpecial + }; + } + // #enddocregion setClasses + + // #docregion setStyles + currentStyles: {}; + setCurrentStyles() { + this.currentStyles = { + // CSS styles: set per current state of component properties + 'font-style': this.canSave ? 'italic' : 'normal', + 'font-weight': !this.isUnchanged ? 'bold' : 'normal', + 'font-size': this.isSpecial ? '24px' : '12px' + }; + } + // #enddocregion setStyles + + // #docregion trackByHeroes + trackByHeroes(index: number, hero: Hero): number { return hero.id; } + // #enddocregion trackByHeroes + + // #docregion trackById + trackById(index: number, item: any): number { return item['id']; } + // #enddocregion trackById + + val = 2; + // villainImageUrl = 'http://www.clker.com/cliparts/u/s/y/L/x/9/villain-man-hi.png' + // Public Domain terms of use http://www.clker.com/disclaimer.html + villainImageUrl = 'images/villain.png'; +} + +// helper to track changes to viewChildren +function trackChanges(views: QueryList, changed: () => void) { + let oldRefs = views.toArray(); + views.changes.subscribe((changes: QueryList) => { + const changedRefs = changes.toArray(); + // Is every changed ElemRef the same as old and in the same position + const isSame = oldRefs.every((v, i) => v === changedRefs[i]); + if (!isSame) { + oldRefs = changedRefs; + // wait a tick because called after views are constructed + setTimeout(changed, 0); + } + }); +} diff --git a/aio/content/examples/template-syntax/ts/src/app/app.module.1.ts b/aio/content/examples/template-syntax/ts/src/app/app.module.1.ts new file mode 100644 index 0000000000..8ea0d3d207 --- /dev/null +++ b/aio/content/examples/template-syntax/ts/src/app/app.module.1.ts @@ -0,0 +1,15 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { FormsModule } from '@angular/forms'; // <--- JavaScript import from Angular + +/* Other imports */ + +@NgModule({ + imports: [ + BrowserModule, + FormsModule // <--- import into the NgModule + ], + /* Other module metadata */ +}) +export class AppModule { } diff --git a/aio/content/examples/template-syntax/ts/src/app/app.module.ts b/aio/content/examples/template-syntax/ts/src/app/app.module.ts new file mode 100644 index 0000000000..5c2fbed6f1 --- /dev/null +++ b/aio/content/examples/template-syntax/ts/src/app/app.module.ts @@ -0,0 +1,29 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { FormsModule } from '@angular/forms'; + +import { AppComponent } from './app.component'; +import { BigHeroDetailComponent, HeroDetailComponent } from './hero-detail.component'; +import { ClickDirective, ClickDirective2 } from './click.directive'; +import { HeroFormComponent } from './hero-form.component'; +import { heroSwitchComponents } from './hero-switch.components'; +import { SizerComponent } from './sizer.component'; + +@NgModule({ + imports: [ + BrowserModule, + FormsModule + ], + declarations: [ + AppComponent, + BigHeroDetailComponent, + HeroDetailComponent, + HeroFormComponent, + heroSwitchComponents, + ClickDirective, + ClickDirective2, + SizerComponent + ], + bootstrap: [ AppComponent ] +}) +export class AppModule { } diff --git a/aio/content/examples/template-syntax/ts/src/app/click.directive.ts b/aio/content/examples/template-syntax/ts/src/app/click.directive.ts new file mode 100644 index 0000000000..09757bfeaf --- /dev/null +++ b/aio/content/examples/template-syntax/ts/src/app/click.directive.ts @@ -0,0 +1,41 @@ +/* tslint:disable use-output-property-decorator */ +// #docplaster +import { Directive, ElementRef, EventEmitter, Output } from '@angular/core'; + +@Directive({selector: '[myClick]'}) +export class ClickDirective { + // #docregion output-myClick + @Output('myClick') clicks = new EventEmitter(); // @Output(alias) propertyName = ... + // #enddocregion output-myClick + + toggle = false; + + constructor(el: ElementRef) { + el.nativeElement + .addEventListener('click', (event: Event) => { + this.toggle = !this.toggle; + this.clicks.emit(this.toggle ? 'Click!' : ''); + }); + } +} + +// #docregion output-myClick2 +@Directive({ + // #enddocregion output-myClick2 + selector: '[myClick2]', + // #docregion output-myClick2 + outputs: ['clicks:myClick'] // propertyName:alias +}) +// #enddocregion output-myClick2 +export class ClickDirective2 { + clicks = new EventEmitter(); + toggle = false; + + constructor(el: ElementRef) { + el.nativeElement + .addEventListener('click', (event: Event) => { + this.toggle = !this.toggle; + this.clicks.emit(this.toggle ? 'Click2!' : ''); + }); + } +} diff --git a/aio/content/examples/template-syntax/ts/src/app/hero-detail.component.ts b/aio/content/examples/template-syntax/ts/src/app/hero-detail.component.ts new file mode 100644 index 0000000000..486e6ac370 --- /dev/null +++ b/aio/content/examples/template-syntax/ts/src/app/hero-detail.component.ts @@ -0,0 +1,80 @@ +/* tslint:disable use-input-property-decorator use-output-property-decorator */ +// #docplaster +import { Component, EventEmitter, Input, Output } from '@angular/core'; + +import { Hero } from './hero'; + +// #docregion input-output-2 +@Component({ +// #enddocregion input-output-2 + selector: 'hero-detail', + // #docregion input-output-2 + inputs: ['hero'], + outputs: ['deleteRequest'], + // #enddocregion input-output-2 + styles: ['button { margin-left: 8px} div {margin: 8px 0} img {height:24px}'], + // #docregion template-1 + template: ` +
    + + + {{prefix}} {{hero?.name}} + + +
    ` + // #enddocregion template-1 +// #docregion input-output-2 +}) +// #enddocregion input-output-2 +export class HeroDetailComponent { + hero: Hero = new Hero(-1, '', 'Zzzzzzzz'); // default sleeping hero + // heroImageUrl = 'http://www.wpclipart.com/cartoon/people/hero/hero_silhoutte_T.png'; + // Public Domain terms of use: http://www.wpclipart.com/terms.html + heroImageUrl = 'images/hero.png'; + lineThrough = ''; + @Input() prefix = ''; + +// #docregion deleteRequest + // This component make a request but it can't actually delete a hero. + deleteRequest = new EventEmitter(); + + delete() { + this.deleteRequest.emit(this.hero); + // #enddocregion deleteRequest + this.lineThrough = this.lineThrough ? '' : 'line-through'; + // #docregion deleteRequest + } +// #enddocregion deleteRequest +} + +@Component({ + selector: 'big-hero-detail', + template: ` +
    + +
    {{hero?.name}}
    +
    Name: {{hero?.name}}
    +
    Emotion: {{hero?.emotion}}
    +
    Birthdate: {{hero?.birthdate | date:'longDate'}}
    + +
    Rate/hr: {{hero?.rate | currency:'EUR'}}
    +
    + +
    + `, + styles: [` + .detail { border: 1px solid black; padding: 4px; max-width: 450px; } + img { float: left; margin-right: 8px; height: 100px; } + `] +}) +export class BigHeroDetailComponent extends HeroDetailComponent { + + // #docregion input-output-1 + @Input() hero: Hero; + @Output() deleteRequest = new EventEmitter(); + // #enddocregion input-output-1 + + delete() { + this.deleteRequest.emit(this.hero); + } +} diff --git a/aio/content/examples/template-syntax/ts/src/app/hero-form.component.html b/aio/content/examples/template-syntax/ts/src/app/hero-form.component.html new file mode 100644 index 0000000000..e61e268f74 --- /dev/null +++ b/aio/content/examples/template-syntax/ts/src/app/hero-form.component.html @@ -0,0 +1,16 @@ +
    + +
    +
    + +
    + +
    +
    + {{submitMessage}} +
    + +
    + diff --git a/aio/content/examples/template-syntax/ts/src/app/hero-form.component.ts b/aio/content/examples/template-syntax/ts/src/app/hero-form.component.ts new file mode 100644 index 0000000000..83685284e5 --- /dev/null +++ b/aio/content/examples/template-syntax/ts/src/app/hero-form.component.ts @@ -0,0 +1,31 @@ +import { Component, Input, ViewChild } from '@angular/core'; +import { NgForm } from '@angular/forms'; + +import { Hero } from './hero'; + +@Component({ + moduleId: module.id, + selector: 'hero-form', + templateUrl: './hero-form.component.html', + styles: [` + button { margin: 6px 0; } + #heroForm { border: 1px solid black; margin: 20px 0; padding: 8px; max-width: 350px; } + `] +}) +export class HeroFormComponent { + @Input() hero: Hero; + @ViewChild('heroForm') form: NgForm; + + private _submitMessage = ''; + + get submitMessage() { + if (!this.form.valid) { + this._submitMessage = ''; + } + return this._submitMessage; + } + + onSubmit(form: NgForm) { + this._submitMessage = 'Submitted. form value is ' + JSON.stringify(form.value); + } +} diff --git a/aio/content/examples/template-syntax/ts/src/app/hero-switch.components.ts b/aio/content/examples/template-syntax/ts/src/app/hero-switch.components.ts new file mode 100644 index 0000000000..2dad8a0ba0 --- /dev/null +++ b/aio/content/examples/template-syntax/ts/src/app/hero-switch.components.ts @@ -0,0 +1,42 @@ +import { Component, Input } from '@angular/core'; +import { Hero } from './hero'; + +@Component({ + selector: 'happy-hero', + template: `Wow. You like {{hero.name}}. What a happy hero ... just like you.` +}) +export class HappyHeroComponent { + @Input() hero: Hero; +} + +@Component({ + selector: 'sad-hero', + template: `You like {{hero.name}}? Such a sad hero. Are you sad too?` +}) +export class SadHeroComponent { + @Input() hero: Hero; +} + +@Component({ + selector: 'confused-hero', + template: `Are you as confused as {{hero.name}}?` +}) +export class ConfusedHeroComponent { + @Input() hero: Hero; +} + +@Component({ + selector: 'unknown-hero', + template: `{{message}}` +}) +export class UnknownHeroComponent { + @Input() hero: Hero; + get message() { + return this.hero && this.hero.name ? + `${this.hero.name} is strange and mysterious.` : + 'Are you feeling indecisive?'; + } +} + +export const heroSwitchComponents = + [ HappyHeroComponent, SadHeroComponent, ConfusedHeroComponent, UnknownHeroComponent ]; diff --git a/aio/content/examples/template-syntax/ts/src/app/hero.ts b/aio/content/examples/template-syntax/ts/src/app/hero.ts new file mode 100644 index 0000000000..6331b62a7b --- /dev/null +++ b/aio/content/examples/template-syntax/ts/src/app/hero.ts @@ -0,0 +1,33 @@ +export class Hero { + static nextId = 1; + + static heroes: Hero[] = [ + new Hero( + 325, + 'Hercules', + 'happy', + new Date(1970, 1, 25), + 'http://www.imdb.com/title/tt0065832/' + ), + new Hero(1, 'Mr. Nice', 'happy'), + new Hero(2, 'Narco', 'sad' ), + new Hero(3, 'Windstorm', 'confused' ), + new Hero(4, 'Magneta') + ]; + + + constructor( + public id?: number, + public name?: string, + public emotion?: string, + public birthdate?: Date, + public url?: string, + public rate = 100, + ) { + this.id = id ? id : Hero.nextId++; + } + + clone(): Hero { + return Object.assign(new Hero(), this); + } +} diff --git a/aio/content/examples/template-syntax/ts/src/app/sizer.component.ts b/aio/content/examples/template-syntax/ts/src/app/sizer.component.ts new file mode 100644 index 0000000000..b6065c8cd1 --- /dev/null +++ b/aio/content/examples/template-syntax/ts/src/app/sizer.component.ts @@ -0,0 +1,24 @@ +// #docregion +import { Component, EventEmitter, Input, Output } from '@angular/core'; + +@Component({ + selector: 'my-sizer', + template: ` +
    + + + +
    ` +}) +export class SizerComponent { + @Input() size: number | string; + @Output() sizeChange = new EventEmitter(); + + dec() { this.resize(-1); } + inc() { this.resize(+1); } + + resize(delta: number) { + this.size = Math.min(40, Math.max(8, +this.size + delta)); + this.sizeChange.emit(this.size); + } +} diff --git a/aio/content/examples/template-syntax/ts/src/images/hero.png b/aio/content/examples/template-syntax/ts/src/images/hero.png new file mode 100644 index 0000000000000000000000000000000000000000..2a128ac3679a5001bf3373ac96ae841e78295ff8 GIT binary patch literal 7312 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 Gk^c{49goZa literal 0 HcmV?d00001 diff --git a/aio/content/examples/template-syntax/ts/src/images/ng-logo.png b/aio/content/examples/template-syntax/ts/src/images/ng-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1e488b1a4946d1684393920b7bca5fa3017365f6 GIT binary patch literal 7229 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

    &nr2Koo_x(>IKF?Ga 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�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 literal 0 HcmV?d00001 diff --git a/aio/content/examples/template-syntax/ts/src/index.html b/aio/content/examples/template-syntax/ts/src/index.html new file mode 100644 index 0000000000..3e711397cb --- /dev/null +++ b/aio/content/examples/template-syntax/ts/src/index.html @@ -0,0 +1,26 @@ + + + + Template Syntax + + + + + + + + + + + + + + + + + Loading... + + + diff --git a/aio/content/examples/template-syntax/ts/src/main.ts b/aio/content/examples/template-syntax/ts/src/main.ts new file mode 100644 index 0000000000..311c44b76d --- /dev/null +++ b/aio/content/examples/template-syntax/ts/src/main.ts @@ -0,0 +1,5 @@ +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/template-syntax/ts/src/template-syntax.css b/aio/content/examples/template-syntax/ts/src/template-syntax.css new file mode 100644 index 0000000000..6ae25b396c --- /dev/null +++ b/aio/content/examples/template-syntax/ts/src/template-syntax.css @@ -0,0 +1,13 @@ +fieldset {border-style:none} +img {height: 100px;} +.box {border: 1px solid black; padding:3px} +.child-div {margin-left: 1em; font-weight: normal} +.hidden {display: none} +.parent-div {margin-top: 1em; font-weight: bold} +.special {font-weight:bold; font-size: x-large} +.bad {color: red;} +.saveable {color: limegreen;} +.curly, .modified {font-family: "Brush Script MT"} +.toe {margin-left: 1em; font-style: italic;} +little-hero {color:blue; font-size: smaller; background-color: Turquoise } +.to-toc {margin-top: 10px; display: block} diff --git a/aio/content/examples/testing/ts/.gitignore b/aio/content/examples/testing/ts/.gitignore new file mode 100644 index 0000000000..5374943421 --- /dev/null +++ b/aio/content/examples/testing/ts/.gitignore @@ -0,0 +1 @@ +!src/browser-test-shim.js diff --git a/aio/content/examples/testing/ts/1st-specs.plnkr.json b/aio/content/examples/testing/ts/1st-specs.plnkr.json new file mode 100644 index 0000000000..9fe15ddef1 --- /dev/null +++ b/aio/content/examples/testing/ts/1st-specs.plnkr.json @@ -0,0 +1,14 @@ +{ + "description": "Testing - 1st.specs", + "basePath": "src/", + "files":[ + "browser-test-shim.js", + "styles.css", + + "app/1st.spec.ts", + "1st-specs.html" + ], + "main": "1st-specs.html", + "open": "app/1st.spec.ts", + "tags": ["testing"] +} diff --git a/aio/content/examples/testing/ts/1st-specs.plnkr.no-link.html b/aio/content/examples/testing/ts/1st-specs.plnkr.no-link.html new file mode 100644 index 0000000000..41897d0b0d --- /dev/null +++ b/aio/content/examples/testing/ts/1st-specs.plnkr.no-link.html @@ -0,0 +1,339 @@ +

    \ No newline at end of file diff --git a/aio/content/examples/testing/ts/app-specs.plnkr.json b/aio/content/examples/testing/ts/app-specs.plnkr.json new file mode 100644 index 0000000000..d97bf82c86 --- /dev/null +++ b/aio/content/examples/testing/ts/app-specs.plnkr.json @@ -0,0 +1,24 @@ +{ + "description": "Testing - app.specs", + "basePath": "src/", + "files":[ + "browser-test-shim.js", + "systemjs.config.extras.js", + "styles.css", + + "app/**/*.css", + "app/**/*.html", + "app/**/*.ts", + "app/**/*.spec.ts", + + "testing/*.ts", + + "!main.ts", + "!app/bag/*.*", + "!app/1st.spec.ts", + + "app-specs.html" + ], + "main": "app-specs.html", + "tags": ["testing"] +} diff --git a/aio/content/examples/testing/ts/app-specs.plnkr.no-link.html b/aio/content/examples/testing/ts/app-specs.plnkr.no-link.html new file mode 100644 index 0000000000..63c497e00e --- /dev/null +++ b/aio/content/examples/testing/ts/app-specs.plnkr.no-link.html @@ -0,0 +1,3378 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/testing/ts/bag-specs.plnkr.json b/aio/content/examples/testing/ts/bag-specs.plnkr.json new file mode 100644 index 0000000000..cd22e10c28 --- /dev/null +++ b/aio/content/examples/testing/ts/bag-specs.plnkr.json @@ -0,0 +1,21 @@ +{ + "description": "Testing - bag.specs", + "basePath": "src/", + "files":[ + "browser-test-shim.js", + "systemjs.config.extras.js", + "styles.css", + + "app/bag/**/*.html", + "app/bag/**/*.ts", + "app/bag/**/*.spec.ts", + + "!app/bag/bag-main.ts", + + "testing/*.ts", + + "bag-specs.html" + ], + "main": "bag-specs.html", + "tags": ["testing"] +} diff --git a/aio/content/examples/testing/ts/bag-specs.plnkr.no-link.html b/aio/content/examples/testing/ts/bag-specs.plnkr.no-link.html new file mode 100644 index 0000000000..04d30a5e0c --- /dev/null +++ b/aio/content/examples/testing/ts/bag-specs.plnkr.no-link.html @@ -0,0 +1,1828 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/testing/ts/bag.plnkr.json b/aio/content/examples/testing/ts/bag.plnkr.json new file mode 100644 index 0000000000..4bb0ac9c5b --- /dev/null +++ b/aio/content/examples/testing/ts/bag.plnkr.json @@ -0,0 +1,14 @@ +{ + "description": "Running the bag", + "basePath": "src/", + "files":[ + "styles.css", + + "app/bag/bag.ts", + "app/bag/bag-external-template.html", + "app/bag/bag-main.ts", + "bag.html" + ], + "main": "bag.html", + "tags": ["testing"] +} diff --git a/aio/content/examples/testing/ts/bag.plnkr.no-link.html b/aio/content/examples/testing/ts/bag.plnkr.no-link.html new file mode 100644 index 0000000000..c1b05024a3 --- /dev/null +++ b/aio/content/examples/testing/ts/bag.plnkr.no-link.html @@ -0,0 +1,623 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/testing/ts/banner-inline-specs.plnkr.json b/aio/content/examples/testing/ts/banner-inline-specs.plnkr.json new file mode 100644 index 0000000000..77b8c212cf --- /dev/null +++ b/aio/content/examples/testing/ts/banner-inline-specs.plnkr.json @@ -0,0 +1,15 @@ +{ + "description": "Testing - banner-inline.component.specs", + "basePath": "src/", + "files":[ + "browser-test-shim.js", + "systemjs.config.extras.js", + + "app/banner-inline.component.ts", + "app/banner-inline.component.spec.ts", + "banner-inline-specs.html" + ], + "main": "banner-inline-specs.html", + "open": "app/banner-inline.component.spec.ts", + "tags": ["testing"] +} diff --git a/aio/content/examples/testing/ts/banner-inline-specs.plnkr.no-link.html b/aio/content/examples/testing/ts/banner-inline-specs.plnkr.no-link.html new file mode 100644 index 0000000000..d7aadb1963 --- /dev/null +++ b/aio/content/examples/testing/ts/banner-inline-specs.plnkr.no-link.html @@ -0,0 +1,289 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/testing/ts/banner-specs.plnkr.json b/aio/content/examples/testing/ts/banner-specs.plnkr.json new file mode 100644 index 0000000000..6e5f20bccb --- /dev/null +++ b/aio/content/examples/testing/ts/banner-specs.plnkr.json @@ -0,0 +1,17 @@ +{ + "description": "Testing - banner.component.specs", + "basePath": "src/", + "files":[ + "browser-test-shim.js", + "systemjs.config.extras.js", + + "app/banner.component.css", + "app/banner.component.html", + "app/banner.component.ts", + "app/banner.component.spec.ts", + "banner-specs.html" + ], + "main": "banner-specs.html", + "open": "app/banner.component.spec.ts", + "tags": ["testing"] +} diff --git a/aio/content/examples/testing/ts/banner-specs.plnkr.no-link.html b/aio/content/examples/testing/ts/banner-specs.plnkr.no-link.html new file mode 100644 index 0000000000..4c0fcce861 --- /dev/null +++ b/aio/content/examples/testing/ts/banner-specs.plnkr.no-link.html @@ -0,0 +1,311 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/testing/ts/example-config.json b/aio/content/examples/testing/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/testing/ts/plnkr.json b/aio/content/examples/testing/ts/plnkr.json new file mode 100644 index 0000000000..899867159f --- /dev/null +++ b/aio/content/examples/testing/ts/plnkr.json @@ -0,0 +1,18 @@ +{ + "description": "Heroes Test App", + "basePath": "src/", + "files":[ + "styles.css", + "systemjs.config.extras.js", + + "app/**/*.css", + "app/**/*.html", + "app/**/*.ts", + + "!app/bag/*.*", + + "main.ts", + "index.html" + ], + "tags": ["testing"] +} diff --git a/aio/content/examples/testing/ts/plnkr.no-link.html b/aio/content/examples/testing/ts/plnkr.no-link.html new file mode 100644 index 0000000000..a85bd8674c --- /dev/null +++ b/aio/content/examples/testing/ts/plnkr.no-link.html @@ -0,0 +1,1160 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/testing/ts/src/1st-specs.html b/aio/content/examples/testing/ts/src/1st-specs.html new file mode 100644 index 0000000000..5876a65b9a --- /dev/null +++ b/aio/content/examples/testing/ts/src/1st-specs.html @@ -0,0 +1,41 @@ + + + + + + + 1st Specs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/aio/content/examples/testing/ts/src/app-specs.html b/aio/content/examples/testing/ts/src/app-specs.html new file mode 100644 index 0000000000..7b7292ed7c --- /dev/null +++ b/aio/content/examples/testing/ts/src/app-specs.html @@ -0,0 +1,56 @@ + + + + + + + Sample App Specs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/aio/content/examples/testing/ts/src/app/1st.spec.ts b/aio/content/examples/testing/ts/src/app/1st.spec.ts new file mode 100644 index 0000000000..63f1ab134c --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/1st.spec.ts @@ -0,0 +1,5 @@ +// #docplaster +// #docregion +describe('1st tests', () => { + it('true is true', () => expect(true).toBe(true)); +}); diff --git a/aio/content/examples/testing/ts/src/app/about.component.spec.ts b/aio/content/examples/testing/ts/src/app/about.component.spec.ts new file mode 100644 index 0000000000..0909e74434 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/about.component.spec.ts @@ -0,0 +1,27 @@ +import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { By } from '@angular/platform-browser'; + +import { AboutComponent } from './about.component'; +import { HighlightDirective } from './shared/highlight.directive'; + +let fixture: ComponentFixture; + +describe('AboutComponent (highlightDirective)', () => { + // #docregion tests + beforeEach(() => { + fixture = TestBed.configureTestingModule({ + declarations: [ AboutComponent, HighlightDirective], + schemas: [ NO_ERRORS_SCHEMA ] + }) + .createComponent(AboutComponent); + fixture.detectChanges(); // initial binding + }); + + it('should have skyblue

    ', () => { + const de = fixture.debugElement.query(By.css('h2')); + const bgColor = de.nativeElement.style.backgroundColor; + expect(bgColor).toBe('skyblue'); + }); + // #enddocregion tests +}); diff --git a/aio/content/examples/testing/ts/src/app/about.component.ts b/aio/content/examples/testing/ts/src/app/about.component.ts new file mode 100644 index 0000000000..90e7132b4c --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/about.component.ts @@ -0,0 +1,9 @@ +// #docregion +import { Component } from '@angular/core'; +@Component({ + template: ` +

    About

    + +

    All about this sample

    ` +}) +export class AboutComponent { } diff --git a/aio/content/examples/testing/ts/src/app/app-routing.module.ts b/aio/content/examples/testing/ts/src/app/app-routing.module.ts new file mode 100644 index 0000000000..6096a513df --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/app-routing.module.ts @@ -0,0 +1,16 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import { AboutComponent } from './about.component'; + +@NgModule({ + imports: [ + RouterModule.forRoot([ + { path: '', redirectTo: 'dashboard', pathMatch: 'full'}, + { path: 'about', component: AboutComponent }, + { path: 'heroes', loadChildren: 'app/hero/hero.module#HeroModule'} + ]) + ], + exports: [ RouterModule ] // re-export the module declarations +}) +export class AppRoutingModule { }; diff --git a/aio/content/examples/testing/ts/src/app/app.component.html b/aio/content/examples/testing/ts/src/app/app.component.html new file mode 100644 index 0000000000..232bcebb6d --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/app.component.html @@ -0,0 +1,11 @@ + + + + +
    + + diff --git a/aio/content/examples/testing/ts/src/app/app.component.router.spec.ts b/aio/content/examples/testing/ts/src/app/app.component.router.spec.ts new file mode 100644 index 0000000000..de22db8ceb --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/app.component.router.spec.ts @@ -0,0 +1,198 @@ +// For more examples: +// https://github.com/angular/angular/blob/master/modules/@angular/router/test/integration.spec.ts + +import { async, ComponentFixture, fakeAsync, TestBed, tick, +} from '@angular/core/testing'; + +import { RouterTestingModule } from '@angular/router/testing'; +import { SpyLocation } from '@angular/common/testing'; + +import { click } from '../testing'; + +// r - for relatively obscure router symbols +import * as r from '@angular/router'; +import { Router, RouterLinkWithHref } from '@angular/router'; + +import { By } from '@angular/platform-browser'; +import { DebugElement, Type } from '@angular/core'; +import { Location } from '@angular/common'; + +import { AppModule } from './app.module'; +import { AppComponent } from './app.component'; +import { AboutComponent } from './about.component'; +import { DashboardHeroComponent } from './dashboard/dashboard-hero.component'; +import { TwainService } from './shared/twain.service'; + +let comp: AppComponent; +let fixture: ComponentFixture; +let page: Page; +let router: Router; +let location: SpyLocation; + +describe('AppComponent & RouterTestingModule', () => { + + beforeEach( async(() => { + TestBed.configureTestingModule({ + imports: [ AppModule, RouterTestingModule ] + }) + .compileComponents(); + })); + + it('should navigate to "Dashboard" immediately', fakeAsync(() => { + createComponent(); + expect(location.path()).toEqual('/dashboard', 'after initialNavigation()'); + expectElementOf(DashboardHeroComponent); + })); + + it('should navigate to "About" on click', fakeAsync(() => { + createComponent(); + click(page.aboutLinkDe); + // page.aboutLinkDe.nativeElement.click(); // ok but fails in phantom + + advance(); + expectPathToBe('/about'); + expectElementOf(AboutComponent); + + page.expectEvents([ + [r.NavigationStart, '/about'], [r.RoutesRecognized, '/about'], + [r.NavigationEnd, '/about'] + ]); + })); + + it('should navigate to "About" w/ browser location URL change', fakeAsync(() => { + createComponent(); + location.simulateHashChange('/about'); + // location.go('/about'); // also works ... except in plunker + advance(); + expectPathToBe('/about'); + expectElementOf(AboutComponent); + })); + + // Can't navigate to lazy loaded modules with this technique + xit('should navigate to "Heroes" on click', fakeAsync(() => { + createComponent(); + page.heroesLinkDe.nativeElement.click(); + advance(); + expectPathToBe('/heroes'); + })); + +}); + + +/////////////// +import { NgModuleFactoryLoader } from '@angular/core'; +import { SpyNgModuleFactoryLoader } from '@angular/router/testing'; + +import { HeroModule } from './hero/hero.module'; // should be lazy loaded +import { HeroListComponent } from './hero/hero-list.component'; + +let loader: SpyNgModuleFactoryLoader; + +///////// Can't get lazy loaded Heroes to work yet +xdescribe('AppComponent & Lazy Loading', () => { + + beforeEach( async(() => { + TestBed.configureTestingModule({ + imports: [ AppModule, RouterTestingModule ] + }) + .compileComponents(); + })); + + beforeEach(fakeAsync(() => { + createComponent(); + loader = TestBed.get(NgModuleFactoryLoader); + loader.stubbedModules = {expected: HeroModule}; + router.resetConfig([{path: 'heroes', loadChildren: 'expected'}]); + })); + + it('dummy', () => expect(true).toBe(true) ); + + + it('should navigate to "Heroes" on click', async(() => { + page.heroesLinkDe.nativeElement.click(); + advance(); + expectPathToBe('/heroes'); + expectElementOf(HeroListComponent); + })); + + xit('can navigate to "Heroes" w/ browser location URL change', fakeAsync(() => { + location.go('/heroes'); + advance(); + expectPathToBe('/heroes'); + expectElementOf(HeroListComponent); + + page.expectEvents([ + [r.NavigationStart, '/heroes'], [r.RoutesRecognized, '/heroes'], + [r.NavigationEnd, '/heroes'] + ]); + })); +}); + +////// Helpers ///////// + +/** Wait a tick, then detect changes */ +function advance(): void { + tick(); + fixture.detectChanges(); +} + +function createComponent() { + fixture = TestBed.createComponent(AppComponent); + comp = fixture.componentInstance; + + const injector = fixture.debugElement.injector; + location = injector.get(Location); + router = injector.get(Router); + router.initialNavigation(); + spyOn(injector.get(TwainService), 'getQuote') + .and.returnValue(Promise.resolve('Test Quote')); // fakes it + + advance(); + + page = new Page(); +} + +class Page { + aboutLinkDe: DebugElement; + dashboardLinkDe: DebugElement; + heroesLinkDe: DebugElement; + recordedEvents: any[] = []; + + // for debugging + comp: AppComponent; + location: SpyLocation; + router: Router; + fixture: ComponentFixture; + + expectEvents(pairs: any[]) { + const events = this.recordedEvents; + expect(events.length).toEqual(pairs.length, 'actual/expected events length mismatch'); + for (let i = 0; i < events.length; ++i) { + expect((events[i].constructor).name).toBe(pairs[i][0].name, 'unexpected event name'); + expect((events[i]).url).toBe(pairs[i][1], 'unexpected event url'); + } + } + + constructor() { + router.events.subscribe(e => this.recordedEvents.push(e)); + const links = fixture.debugElement.queryAll(By.directive(RouterLinkWithHref)); + this.aboutLinkDe = links[2]; + this.dashboardLinkDe = links[0]; + this.heroesLinkDe = links[1]; + + // for debugging + this.comp = comp; + this.fixture = fixture; + this.router = router; + } +} + +function expectPathToBe(path: string, expectationFailOutput?: any) { + expect(location.path()).toEqual(path, expectationFailOutput || 'location.path()'); +} + +function expectElementOf(type: Type): any { + const el = fixture.debugElement.query(By.directive(type)); + expect(el).toBeTruthy('expected an element for ' + type.name); + return el; +} diff --git a/aio/content/examples/testing/ts/src/app/app.component.spec.ts b/aio/content/examples/testing/ts/src/app/app.component.spec.ts new file mode 100644 index 0000000000..20c40767c0 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/app.component.spec.ts @@ -0,0 +1,148 @@ +// #docplaster +import { async, ComponentFixture, TestBed +} from '@angular/core/testing'; + +import { DebugElement } from '@angular/core'; +import { By } from '@angular/platform-browser'; + + // #docregion setup-schemas + import { NO_ERRORS_SCHEMA } from '@angular/core'; + // #enddocregion setup-schemas + // #docregion setup-stubs-w-imports + import { Component } from '@angular/core'; + // #docregion setup-schemas + import { AppComponent } from './app.component'; + // #enddocregion setup-schemas + import { BannerComponent } from './banner.component'; + import { RouterLinkStubDirective } from '../testing'; + // #docregion setup-schemas + import { RouterOutletStubComponent } from '../testing'; + + // #enddocregion setup-schemas + @Component({selector: 'app-welcome', template: ''}) + class WelcomeStubComponent {} + + // #enddocregion setup-stubs-w-imports + +let comp: AppComponent; +let fixture: ComponentFixture; + +describe('AppComponent & TestModule', () => { + // #docregion setup-stubs, setup-stubs-w-imports + beforeEach( async(() => { + TestBed.configureTestingModule({ + declarations: [ + AppComponent, + BannerComponent, WelcomeStubComponent, + RouterLinkStubDirective, RouterOutletStubComponent + ] + }) + + .compileComponents() + .then(() => { + fixture = TestBed.createComponent(AppComponent); + comp = fixture.componentInstance; + }); + })); + // #enddocregion setup-stubs, setup-stubs-w-imports + tests(); +}); + +//////// Testing w/ NO_ERRORS_SCHEMA ////// +describe('AppComponent & NO_ERRORS_SCHEMA', () => { + // #docregion setup-schemas + beforeEach( async(() => { + TestBed.configureTestingModule({ + declarations: [ AppComponent, RouterLinkStubDirective ], + schemas: [ NO_ERRORS_SCHEMA ] + }) + + .compileComponents() + .then(() => { + fixture = TestBed.createComponent(AppComponent); + comp = fixture.componentInstance; + }); + })); + // #enddocregion setup-schemas + tests(); +}); + +//////// Testing w/ real root module ////// +// Tricky because we are disabling the router and its configuration +// Better to use RouterTestingModule +import { AppModule } from './app.module'; +import { AppRoutingModule } from './app-routing.module'; + +describe('AppComponent & AppModule', () => { + + beforeEach( async(() => { + + TestBed.configureTestingModule({ + imports: [ AppModule ] + }) + + // Get rid of app's Router configuration otherwise many failures. + // Doing so removes Router declarations; add the Router stubs + .overrideModule(AppModule, { + remove: { + imports: [ AppRoutingModule ] + }, + add: { + declarations: [ RouterLinkStubDirective, RouterOutletStubComponent ] + } + }) + + .compileComponents() + + .then(() => { + fixture = TestBed.createComponent(AppComponent); + comp = fixture.componentInstance; + }); + })); + + tests(); +}); + +function tests() { + let links: RouterLinkStubDirective[]; + let linkDes: DebugElement[]; + + // #docregion test-setup + beforeEach(() => { + // trigger initial data binding + fixture.detectChanges(); + + // find DebugElements with an attached RouterLinkStubDirective + linkDes = fixture.debugElement + .queryAll(By.directive(RouterLinkStubDirective)); + + // get the attached link directive instances using the DebugElement injectors + links = linkDes + .map(de => de.injector.get(RouterLinkStubDirective) as RouterLinkStubDirective); + }); + // #enddocregion test-setup + + it('can instantiate it', () => { + expect(comp).not.toBeNull(); + }); + + // #docregion tests + it('can get RouterLinks from template', () => { + expect(links.length).toBe(3, 'should have 3 links'); + expect(links[0].linkParams).toBe('/dashboard', '1st link should go to Dashboard'); + expect(links[1].linkParams).toBe('/heroes', '1st link should go to Heroes'); + }); + + it('can click Heroes link in template', () => { + const heroesLinkDe = linkDes[1]; + const heroesLink = links[1]; + + expect(heroesLink.navigatedTo).toBeNull('link should not have navigated yet'); + + heroesLinkDe.triggerEventHandler('click', null); + fixture.detectChanges(); + + expect(heroesLink.navigatedTo).toBe('/heroes'); + }); + // #enddocregion tests +} diff --git a/aio/content/examples/testing/ts/src/app/app.component.ts b/aio/content/examples/testing/ts/src/app/app.component.ts new file mode 100644 index 0000000000..a917088410 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/app.component.ts @@ -0,0 +1,8 @@ +// #docregion +import { Component } from '@angular/core'; +@Component({ + moduleId: module.id, + selector: 'my-app', + templateUrl: './app.component.html' +}) +export class AppComponent { } diff --git a/aio/content/examples/testing/ts/src/app/app.module.ts b/aio/content/examples/testing/ts/src/app/app.module.ts new file mode 100644 index 0000000000..d3c288ad11 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/app.module.ts @@ -0,0 +1,29 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; + +import { AppComponent } from './app.component'; +import { AppRoutingModule } from './app-routing.module'; + +import { AboutComponent } from './about.component'; +import { BannerComponent } from './banner.component'; +import { HeroService, + UserService } from './model'; +import { TwainService } from './shared/twain.service'; +import { WelcomeComponent } from './welcome.component'; + + +import { DashboardModule } from './dashboard/dashboard.module'; +import { SharedModule } from './shared/shared.module'; + +@NgModule({ + imports: [ + BrowserModule, + DashboardModule, + AppRoutingModule, + SharedModule + ], + providers: [ HeroService, TwainService, UserService ], + declarations: [ AppComponent, AboutComponent, BannerComponent, WelcomeComponent ], + bootstrap: [ AppComponent ] +}) +export class AppModule { } diff --git a/aio/content/examples/testing/ts/src/app/bag/async-helper.spec.ts b/aio/content/examples/testing/ts/src/app/bag/async-helper.spec.ts new file mode 100644 index 0000000000..5106361a58 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/bag/async-helper.spec.ts @@ -0,0 +1,68 @@ +// tslint:disable-next-line:no-unused-variable +import { async, fakeAsync, tick } from '@angular/core/testing'; + +import { Observable } from 'rxjs/Observable'; + +describe('Angular async helper', () => { + let actuallyDone = false; + + beforeEach(() => { actuallyDone = false; }); + + afterEach(() => { expect(actuallyDone).toBe(true, 'actuallyDone should be true'); }); + + it('should run normal test', () => { actuallyDone = true; }); + + it('should run normal async test', (done: DoneFn) => { + setTimeout(() => { + actuallyDone = true; + done(); + }, 0); + }); + + it('should run async test with task', + async(() => { setTimeout(() => { actuallyDone = true; }, 0); })); + + it('should run async test with successful promise', async(() => { + const p = new Promise(resolve => { setTimeout(resolve, 10); }); + p.then(() => { actuallyDone = true; }); + })); + + it('should run async test with failed promise', async(() => { + const p = new Promise((resolve, reject) => { setTimeout(reject, 10); }); + p.catch(() => { actuallyDone = true; }); + })); + + // Use done. Cannot use setInterval with async or fakeAsync + // See https://github.com/angular/angular/issues/10127 + it('should run async test with successful delayed Observable', done => { + const source = Observable.of(true).delay(10); + source.subscribe( + val => actuallyDone = true, + err => fail(err), + done + ); + }); + + // Cannot use setInterval from within an async zone test + // See https://github.com/angular/angular/issues/10127 + // xit('should run async test with successful delayed Observable', async(() => { + // const source = Observable.of(true).delay(10); + // source.subscribe( + // val => actuallyDone = true, + // err => fail(err) + // ); + // })); + + // // Fail message: Error: 1 periodic timer(s) still in the queue + // // See https://github.com/angular/angular/issues/10127 + // xit('should run async test with successful delayed Observable', fakeAsync(() => { + // const source = Observable.of(true).delay(10); + // source.subscribe( + // val => actuallyDone = true, + // err => fail(err) + // ); + + // tick(); + // })); + +}); diff --git a/aio/content/examples/testing/ts/src/app/bag/bag-external-template.html b/aio/content/examples/testing/ts/src/app/bag/bag-external-template.html new file mode 100644 index 0000000000..4c2b23755f --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/bag/bag-external-template.html @@ -0,0 +1 @@ +from external template diff --git a/aio/content/examples/testing/ts/src/app/bag/bag-main.ts b/aio/content/examples/testing/ts/src/app/bag/bag-main.ts new file mode 100644 index 0000000000..27b78200ae --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/bag/bag-main.ts @@ -0,0 +1,5 @@ +// main app entry point +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { BagModule } from './bag'; + +platformBrowserDynamic().bootstrapModule(BagModule); diff --git a/aio/content/examples/testing/ts/src/app/bag/bag.no-testbed.spec.ts b/aio/content/examples/testing/ts/src/app/bag/bag.no-testbed.spec.ts new file mode 100644 index 0000000000..6bdbe86cd0 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/bag/bag.no-testbed.spec.ts @@ -0,0 +1,130 @@ +// #docplaster +import { DependentService, FancyService } from './bag'; + +///////// Fakes ///////// +export class FakeFancyService extends FancyService { + value: string = 'faked value'; +} +//////////////////////// +// #docregion FancyService +// Straight Jasmine - no imports from Angular test libraries + +describe('FancyService without the TestBed', () => { + let service: FancyService; + + beforeEach(() => { service = new FancyService(); }); + + it('#getValue should return real value', () => { + expect(service.getValue()).toBe('real value'); + }); + + it('#getAsyncValue should return async value', done => { + service.getAsyncValue().then(value => { + expect(value).toBe('async value'); + done(); + }); + }); + + // #docregion getTimeoutValue + it('#getTimeoutValue should return timeout value', done => { + service = new FancyService(); + service.getTimeoutValue().then(value => { + expect(value).toBe('timeout value'); + done(); + }); + }); + // #enddocregion getTimeoutValue + + it('#getObservableValue should return observable value', done => { + service.getObservableValue().subscribe(value => { + expect(value).toBe('observable value'); + done(); + }); + }); + +}); +// #enddocregion FancyService + +// DependentService requires injection of a FancyService +// #docregion DependentService +describe('DependentService without the TestBed', () => { + let service: DependentService; + + it('#getValue should return real value by way of the real FancyService', () => { + service = new DependentService(new FancyService()); + expect(service.getValue()).toBe('real value'); + }); + + it('#getValue should return faked value by way of a fakeService', () => { + service = new DependentService(new FakeFancyService()); + expect(service.getValue()).toBe('faked value'); + }); + + it('#getValue should return faked value from a fake object', () => { + const fake = { getValue: () => 'fake value' }; + service = new DependentService(fake as FancyService); + expect(service.getValue()).toBe('fake value'); + }); + + it('#getValue should return stubbed value from a FancyService spy', () => { + const fancy = new FancyService(); + const stubValue = 'stub value'; + const spy = spyOn(fancy, 'getValue').and.returnValue(stubValue); + service = new DependentService(fancy); + + expect(service.getValue()).toBe(stubValue, 'service returned stub value'); + expect(spy.calls.count()).toBe(1, 'stubbed method was called once'); + expect(spy.calls.mostRecent().returnValue).toBe(stubValue); + }); +}); +// #enddocregion DependentService + +// #docregion ReversePipe +import { ReversePipe } from './bag'; + +describe('ReversePipe', () => { + let pipe: ReversePipe; + + beforeEach(() => { pipe = new ReversePipe(); }); + + it('transforms "abc" to "cba"', () => { + expect(pipe.transform('abc')).toBe('cba'); + }); + + it('no change to palindrome: "able was I ere I saw elba"', () => { + const palindrome = 'able was I ere I saw elba'; + expect(pipe.transform(palindrome)).toBe(palindrome); + }); + +}); +// #enddocregion ReversePipe + + +import { ButtonComponent } from './bag'; +// #docregion ButtonComp +describe('ButtonComp', () => { + let comp: ButtonComponent; + beforeEach(() => comp = new ButtonComponent()); + + it('#isOn should be false initially', () => { + expect(comp.isOn).toBe(false); + }); + + it('#clicked() should set #isOn to true', () => { + comp.clicked(); + expect(comp.isOn).toBe(true); + }); + + it('#clicked() should set #message to "is on"', () => { + comp.clicked(); + expect(comp.message).toMatch(/is on/i); + }); + + it('#clicked() should toggle #isOn', () => { + comp.clicked(); + expect(comp.isOn).toBe(true); + comp.clicked(); + expect(comp.isOn).toBe(false); + }); +}); +// #enddocregion ButtonComp diff --git a/aio/content/examples/testing/ts/src/app/bag/bag.spec.ts b/aio/content/examples/testing/ts/src/app/bag/bag.spec.ts new file mode 100644 index 0000000000..3890d8844d --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/bag/bag.spec.ts @@ -0,0 +1,680 @@ +// #docplaster +import { + BagModule, + BankAccountComponent, BankAccountParentComponent, + ButtonComponent, + Child1Component, Child2Component, Child3Component, + FancyService, + ExternalTemplateComponent, + InputComponent, + IoComponent, IoParentComponent, + MyIfComponent, MyIfChildComponent, MyIfParentComponent, + NeedsContentComponent, ParentComponent, + TestProvidersComponent, TestViewProvidersComponent, + ReversePipeComponent, ShellComponent +} from './bag'; + +import { By } from '@angular/platform-browser'; +import { Component, + DebugElement, + Injectable } from '@angular/core'; +import { FormsModule } from '@angular/forms'; + +// Forms symbols imported only for a specific test below +import { NgModel, NgControl } from '@angular/forms'; + +import { async, ComponentFixture, fakeAsync, inject, TestBed, tick +} from '@angular/core/testing'; + +import { addMatchers, newEvent, click } from '../../testing'; + +beforeEach( addMatchers ); + +//////// Service Tests ///////////// +// #docregion FancyService +describe('use inject helper in beforeEach', () => { + let service: FancyService; + + beforeEach(() => { + TestBed.configureTestingModule({ providers: [FancyService] }); + + // `TestBed.get` returns the injectable or an + // alternative object (including null) if the service provider is not found. + // Of course it will be found in this case because we're providing it. + // #docregion testbed-get + service = TestBed.get(FancyService, null); + // #enddocregion testbed-get + }); + + it('should use FancyService', () => { + expect(service.getValue()).toBe('real value'); + }); + + it('should use FancyService', () => { + expect(service.getValue()).toBe('real value'); + }); + + it('test should wait for FancyService.getAsyncValue', async(() => { + service.getAsyncValue().then( + value => expect(value).toBe('async value') + ); + })); + + it('test should wait for FancyService.getTimeoutValue', async(() => { + service.getTimeoutValue().then( + value => expect(value).toBe('timeout value') + ); + })); + + it('test should wait for FancyService.getObservableValue', async(() => { + service.getObservableValue().subscribe( + value => expect(value).toBe('observable value') + ); + })); + + // Must use done. See https://github.com/angular/angular/issues/10127 + it('test should wait for FancyService.getObservableDelayValue', done => { + service.getObservableDelayValue().subscribe(value => { + expect(value).toBe('observable delay value'); + done(); + }); + }); + + it('should allow the use of fakeAsync', fakeAsync(() => { + let value: any; + service.getAsyncValue().then((val: any) => value = val); + tick(); // Trigger JS engine cycle until all promises resolve. + expect(value).toBe('async value'); + })); +}); +// #enddocregion FancyService + +describe('use inject within `it`', () => { + // #docregion getTimeoutValue + beforeEach(() => { + TestBed.configureTestingModule({ providers: [FancyService] }); + }); + + // #enddocregion getTimeoutValue + + it('should use modified providers', + inject([FancyService], (service: FancyService) => { + service.setValue('value modified in beforeEach'); + expect(service.getValue()).toBe('value modified in beforeEach'); + }) + ); + + // #docregion getTimeoutValue + it('test should wait for FancyService.getTimeoutValue', + async(inject([FancyService], (service: FancyService) => { + + service.getTimeoutValue().then( + value => expect(value).toBe('timeout value') + ); + }))); + // #enddocregion getTimeoutValue +}); + +describe('using async(inject) within beforeEach', () => { + let serviceValue: string; + + beforeEach(() => { + TestBed.configureTestingModule({ providers: [FancyService] }); + }); + + beforeEach( async(inject([FancyService], (service: FancyService) => { + service.getAsyncValue().then(value => serviceValue = value); + }))); + + it('should use asynchronously modified value ... in synchronous test', () => { + expect(serviceValue).toBe('async value'); + }); +}); + + +/////////// Component Tests ////////////////// + +describe('TestBed Component Tests', () => { + + beforeEach( async(() => { + TestBed + .configureTestingModule({ + imports: [BagModule], + }) + // Compile everything in BagModule + .compileComponents(); + })); + + it('should create a component with inline template', () => { + const fixture = TestBed.createComponent(Child1Component); + fixture.detectChanges(); + + expect(fixture).toHaveText('Child'); + }); + + it('should create a component with external template', () => { + const fixture = TestBed.createComponent(ExternalTemplateComponent); + fixture.detectChanges(); + + expect(fixture).toHaveText('from external template'); + }); + + it('should allow changing members of the component', () => { + const fixture = TestBed.createComponent(MyIfComponent); + + fixture.detectChanges(); + expect(fixture).toHaveText('MyIf()'); + + fixture.componentInstance.showMore = true; + fixture.detectChanges(); + expect(fixture).toHaveText('MyIf(More)'); + }); + + it('should create a nested component bound to inputs/outputs', () => { + const fixture = TestBed.createComponent(IoParentComponent); + + fixture.detectChanges(); + const heroes = fixture.debugElement.queryAll(By.css('.hero')); + expect(heroes.length).toBeGreaterThan(0, 'has heroes'); + + const comp = fixture.componentInstance; + const hero = comp.heroes[0]; + + click(heroes[0]); + fixture.detectChanges(); + + const selected = fixture.debugElement.query(By.css('p')); + expect(selected).toHaveText(hero.name); + }); + + it('can access the instance variable of an `*ngFor` row', () => { + const fixture = TestBed.createComponent(IoParentComponent); + const comp = fixture.componentInstance; + + fixture.detectChanges(); + const heroEl = fixture.debugElement.query(By.css('.hero')); // first hero + + const ngForRow = heroEl.parent; // Angular's NgForRow wrapper element + + // jasmine.any is instance-of-type test. + expect(ngForRow.componentInstance).toEqual(jasmine.any(IoComponent), 'component is IoComp'); + + const hero = ngForRow.context['$implicit']; // the hero object + expect(hero.name).toBe(comp.heroes[0].name, '1st hero\'s name'); + }); + + + // #docregion ButtonComp + it('should support clicking a button', () => { + const fixture = TestBed.createComponent(ButtonComponent); + const btn = fixture.debugElement.query(By.css('button')); + const span = fixture.debugElement.query(By.css('span')).nativeElement; + + fixture.detectChanges(); + expect(span.textContent).toMatch(/is off/i, 'before click'); + + click(btn); + fixture.detectChanges(); + expect(span.textContent).toMatch(/is on/i, 'after click'); + }); + // #enddocregion ButtonComp + + // ngModel is async so we must wait for it with promise-based `whenStable` + it('should support entering text in input box (ngModel)', async(() => { + const expectedOrigName = 'John'; + const expectedNewName = 'Sally'; + + const fixture = TestBed.createComponent(InputComponent); + fixture.detectChanges(); + + const comp = fixture.componentInstance; + const input = fixture.debugElement.query(By.css('input')).nativeElement; + + expect(comp.name).toBe(expectedOrigName, + `At start name should be ${expectedOrigName} `); + + // wait until ngModel binds comp.name to input box + fixture.whenStable().then(() => { + expect(input.value).toBe(expectedOrigName, + `After ngModel updates input box, input.value should be ${expectedOrigName} `); + + // simulate user entering new name in input + input.value = expectedNewName; + + // that change doesn't flow to the component immediately + expect(comp.name).toBe(expectedOrigName, + `comp.name should still be ${expectedOrigName} after value change, before binding happens`); + + // dispatch a DOM event so that Angular learns of input value change. + // then wait while ngModel pushes input.box value to comp.name + input.dispatchEvent(newEvent('input')); + return fixture.whenStable(); + }) + .then(() => { + expect(comp.name).toBe(expectedNewName, + `After ngModel updates the model, comp.name should be ${expectedNewName} `); + }); + })); + + // fakeAsync version of ngModel input test enables sync test style + // synchronous `tick` replaces asynchronous promise-base `whenStable` + it('should support entering text in input box (ngModel) - fakeAsync', fakeAsync(() => { + const expectedOrigName = 'John'; + const expectedNewName = 'Sally'; + + const fixture = TestBed.createComponent(InputComponent); + fixture.detectChanges(); + + const comp = fixture.componentInstance; + const input = fixture.debugElement.query(By.css('input')).nativeElement; + + expect(comp.name).toBe(expectedOrigName, + `At start name should be ${expectedOrigName} `); + + // wait until ngModel binds comp.name to input box + tick(); + expect(input.value).toBe(expectedOrigName, + `After ngModel updates input box, input.value should be ${expectedOrigName} `); + + // simulate user entering new name in input + input.value = expectedNewName; + + // that change doesn't flow to the component immediately + expect(comp.name).toBe(expectedOrigName, + `comp.name should still be ${expectedOrigName} after value change, before binding happens`); + + // dispatch a DOM event so that Angular learns of input value change. + // then wait a tick while ngModel pushes input.box value to comp.name + input.dispatchEvent(newEvent('input')); + tick(); + expect(comp.name).toBe(expectedNewName, + `After ngModel updates the model, comp.name should be ${expectedNewName} `); + })); + + // #docregion ReversePipeComp + it('ReversePipeComp should reverse the input text', fakeAsync(() => { + const inputText = 'the quick brown fox.'; + const expectedText = '.xof nworb kciuq eht'; + + const fixture = TestBed.createComponent(ReversePipeComponent); + fixture.detectChanges(); + + const comp = fixture.componentInstance; + const input = fixture.debugElement.query(By.css('input')).nativeElement as HTMLInputElement; + const span = fixture.debugElement.query(By.css('span')).nativeElement as HTMLElement; + + // simulate user entering new name in input + input.value = inputText; + + // dispatch a DOM event so that Angular learns of input value change. + // then wait a tick while ngModel pushes input.box value to comp.text + // and Angular updates the output span + input.dispatchEvent(newEvent('input')); + tick(); + fixture.detectChanges(); + expect(span.textContent).toBe(expectedText, 'output span'); + expect(comp.text).toBe(inputText, 'component.text'); + })); + // #enddocregion ReversePipeComp + + // Use this technique to find attached directives of any kind + it('can examine attached directives and listeners', () => { + const fixture = TestBed.createComponent(InputComponent); + fixture.detectChanges(); + + const inputEl = fixture.debugElement.query(By.css('input')); + + expect(inputEl.providerTokens).toContain(NgModel, 'NgModel directive'); + + const ngControl = inputEl.injector.get(NgControl); + expect(ngControl).toEqual(jasmine.any(NgControl), 'NgControl directive'); + + expect(inputEl.listeners.length).toBeGreaterThan(2, 'several listeners attached'); + }); + + // #docregion dom-attributes + it('BankAccountComponent should set attributes, styles, classes, and properties', () => { + const fixture = TestBed.createComponent(BankAccountParentComponent); + fixture.detectChanges(); + const comp = fixture.componentInstance; + + // the only child is debugElement of the BankAccount component + const el = fixture.debugElement.children[0]; + const childComp = el.componentInstance as BankAccountComponent; + expect(childComp).toEqual(jasmine.any(BankAccountComponent)); + + expect(el.context).toBe(comp, 'context is the parent component'); + + expect(el.attributes['account']).toBe(childComp.id, 'account attribute'); + expect(el.attributes['bank']).toBe(childComp.bank, 'bank attribute'); + + expect(el.classes['closed']).toBe(true, 'closed class'); + expect(el.classes['open']).toBe(false, 'open class'); + + expect(el.styles['color']).toBe(comp.color, 'color style'); + expect(el.styles['width']).toBe(comp.width + 'px', 'width style'); + // #enddocregion dom-attributes + + // Removed on 12/02/2016 when ceased public discussion of the `Renderer`. Revive in future? + // expect(el.properties['customProperty']).toBe(true, 'customProperty'); + + // #docregion dom-attributes + }); + // #enddocregion dom-attributes + + +}); + +describe('TestBed Component Overrides:', () => { + + it('should override ChildComp\'s template', () => { + + const fixture = TestBed.configureTestingModule({ + declarations: [Child1Component], + }) + .overrideComponent(Child1Component, { + set: { template: 'Fake' } + }) + .createComponent(Child1Component); + + fixture.detectChanges(); + expect(fixture).toHaveText('Fake'); + }); + + it('should override TestProvidersComp\'s FancyService provider', () => { + const fixture = TestBed.configureTestingModule({ + declarations: [TestProvidersComponent], + }) + .overrideComponent(TestProvidersComponent, { + remove: { providers: [FancyService]}, + add: { providers: [{ provide: FancyService, useClass: FakeFancyService }] }, + + // Or replace them all (this component has only one provider) + // set: { providers: [{ provide: FancyService, useClass: FakeFancyService }] }, + }) + .createComponent(TestProvidersComponent); + + fixture.detectChanges(); + expect(fixture).toHaveText('injected value: faked value', 'text'); + + // Explore the providerTokens + const tokens = fixture.debugElement.providerTokens; + expect(tokens).toContain(fixture.componentInstance.constructor, 'component ctor'); + expect(tokens).toContain(TestProvidersComponent, 'TestProvidersComp'); + expect(tokens).toContain(FancyService, 'FancyService'); + }); + + it('should override TestViewProvidersComp\'s FancyService viewProvider', () => { + const fixture = TestBed.configureTestingModule({ + declarations: [TestViewProvidersComponent], + }) + .overrideComponent(TestViewProvidersComponent, { + // remove: { viewProviders: [FancyService]}, + // add: { viewProviders: [{ provide: FancyService, useClass: FakeFancyService }] }, + + // Or replace them all (this component has only one viewProvider) + set: { viewProviders: [{ provide: FancyService, useClass: FakeFancyService }] }, + }) + .createComponent(TestViewProvidersComponent); + + fixture.detectChanges(); + expect(fixture).toHaveText('injected value: faked value'); + }); + + it('injected provider should not be same as component\'s provider', () => { + + // TestComponent is parent of TestProvidersComponent + @Component({ template: '' }) + class TestComponent {} + + // 3 levels of FancyService provider: module, TestCompomponent, TestProvidersComponent + const fixture = TestBed.configureTestingModule({ + declarations: [TestComponent, TestProvidersComponent], + providers: [FancyService] + }) + .overrideComponent(TestComponent, { + set: { providers: [{ provide: FancyService, useValue: {} }] } + }) + .overrideComponent(TestProvidersComponent, { + set: { providers: [{ provide: FancyService, useClass: FakeFancyService }] } + }) + .createComponent(TestComponent); + + let testBedProvider: FancyService; + let tcProvider: {}; + let tpcProvider: FakeFancyService; + + // `inject` uses TestBed's injector + inject([FancyService], (s: FancyService) => testBedProvider = s)(); + tcProvider = fixture.debugElement.injector.get(FancyService); + tpcProvider = fixture.debugElement.children[0].injector.get(FancyService); + + expect(testBedProvider).not.toBe(tcProvider, 'testBed/tc not same providers'); + expect(testBedProvider).not.toBe(tpcProvider, 'testBed/tpc not same providers'); + + expect(testBedProvider instanceof FancyService).toBe(true, 'testBedProvider is FancyService'); + expect(tcProvider).toEqual({}, 'tcProvider is {}'); + expect(tpcProvider instanceof FakeFancyService).toBe(true, 'tpcProvider is FakeFancyService'); + }); + + it('can access template local variables as references', () => { + const fixture = TestBed.configureTestingModule({ + declarations: [ShellComponent, NeedsContentComponent, Child1Component, Child2Component, Child3Component], + }) + .overrideComponent(ShellComponent, { + set: { + selector: 'test-shell', + template: ` + + + + + +
    !
    +
    + ` + } + }) + .createComponent(ShellComponent); + + fixture.detectChanges(); + + // NeedsContentComp is the child of ShellComp + const el = fixture.debugElement.children[0]; + const comp = el.componentInstance; + + expect(comp.children.toArray().length).toBe(4, + 'three different child components and an ElementRef with #content'); + + expect(el.references['nc']).toBe(comp, '#nc reference to component'); + + // #docregion custom-predicate + // Filter for DebugElements with a #content reference + const contentRefs = el.queryAll( de => de.references['content']); + // #enddocregion custom-predicate + expect(contentRefs.length).toBe(4, 'elements w/ a #content reference'); + }); + +}); + +describe('Nested (one-deep) component override', () => { + + beforeEach( async(() => { + TestBed.configureTestingModule({ + declarations: [ParentComponent, FakeChildComponent] + }) + .compileComponents(); + })); + + it('ParentComp should use Fake Child component', () => { + const fixture = TestBed.createComponent(ParentComponent); + fixture.detectChanges(); + expect(fixture).toHaveText('Parent(Fake Child)'); + }); +}); + +describe('Nested (two-deep) component override', () => { + + beforeEach( async(() => { + TestBed.configureTestingModule({ + declarations: [ParentComponent, FakeChildWithGrandchildComponent, FakeGrandchildComponent] + }) + .compileComponents(); + })); + + it('should use Fake Grandchild component', () => { + const fixture = TestBed.createComponent(ParentComponent); + fixture.detectChanges(); + expect(fixture).toHaveText('Parent(Fake Child(Fake Grandchild))'); + }); +}); + +describe('Lifecycle hooks w/ MyIfParentComp', () => { + let fixture: ComponentFixture; + let parent: MyIfParentComponent; + let child: MyIfChildComponent; + + beforeEach( async(() => { + TestBed.configureTestingModule({ + imports: [FormsModule], + declarations: [MyIfChildComponent, MyIfParentComponent] + }) + .compileComponents().then(() => { + fixture = TestBed.createComponent(MyIfParentComponent); + parent = fixture.componentInstance; + }); + })); + + it('should instantiate parent component', () => { + expect(parent).not.toBeNull('parent component should exist'); + }); + + it('parent component OnInit should NOT be called before first detectChanges()', () => { + expect(parent.ngOnInitCalled).toBe(false); + }); + + it('parent component OnInit should be called after first detectChanges()', () => { + fixture.detectChanges(); + expect(parent.ngOnInitCalled).toBe(true); + }); + + it('child component should exist after OnInit', () => { + fixture.detectChanges(); + getChild(); + expect(child instanceof MyIfChildComponent).toBe(true, 'should create child'); + }); + + it('should have called child component\'s OnInit ', () => { + fixture.detectChanges(); + getChild(); + expect(child.ngOnInitCalled).toBe(true); + }); + + it('child component called OnChanges once', () => { + fixture.detectChanges(); + getChild(); + expect(child.ngOnChangesCounter).toBe(1); + }); + + it('changed parent value flows to child', () => { + fixture.detectChanges(); + getChild(); + + parent.parentValue = 'foo'; + fixture.detectChanges(); + + expect(child.ngOnChangesCounter).toBe(2, + 'expected 2 changes: initial value and changed value'); + expect(child.childValue).toBe('foo', + 'childValue should eq changed parent value'); + }); + + // must be async test to see child flow to parent + it('changed child value flows to parent', async(() => { + fixture.detectChanges(); + getChild(); + + child.childValue = 'bar'; + + return new Promise(resolve => { + // Wait one JS engine turn! + setTimeout(() => resolve(), 0); + }) + .then(() => { + fixture.detectChanges(); + + expect(child.ngOnChangesCounter).toBe(2, + 'expected 2 changes: initial value and changed value'); + expect(parent.parentValue).toBe('bar', + 'parentValue should eq changed parent value'); + }); + + })); + + it('clicking "Close Child" triggers child OnDestroy', () => { + fixture.detectChanges(); + getChild(); + + const btn = fixture.debugElement.query(By.css('button')); + click(btn); + + fixture.detectChanges(); + expect(child.ngOnDestroyCalled).toBe(true); + }); + + ////// helpers /// + /** + * Get the MyIfChildComp from parent; fail w/ good message if cannot. + */ + function getChild() { + + let childDe: DebugElement; // DebugElement that should hold the MyIfChildComp + + // The Hard Way: requires detailed knowledge of the parent template + try { + childDe = fixture.debugElement.children[4].children[0]; + } catch (err) { /* we'll report the error */ } + + // DebugElement.queryAll: if we wanted all of many instances: + childDe = fixture.debugElement + .queryAll(function (de) { return de.componentInstance instanceof MyIfChildComponent; })[0]; + + // WE'LL USE THIS APPROACH ! + // DebugElement.query: find first instance (if any) + childDe = fixture.debugElement + .query(function (de) { return de.componentInstance instanceof MyIfChildComponent; }); + + if (childDe && childDe.componentInstance) { + child = childDe.componentInstance; + } else { + fail('Unable to find MyIfChildComp within MyIfParentComp'); + } + + return child; + } +}); + +////////// Fakes /////////// + +@Component({ + selector: 'child-1', + template: `Fake Child` +}) +class FakeChildComponent { } + +@Component({ + selector: 'child-1', + template: `Fake Child()` +}) +class FakeChildWithGrandchildComponent { } + +@Component({ + selector: 'grandchild-1', + template: `Fake Grandchild` +}) +class FakeGrandchildComponent { } + +@Injectable() +class FakeFancyService extends FancyService { + value: string = 'faked value'; +} diff --git a/aio/content/examples/testing/ts/src/app/bag/bag.ts b/aio/content/examples/testing/ts/src/app/bag/bag.ts new file mode 100644 index 0000000000..41608d7acd --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/bag/bag.ts @@ -0,0 +1,456 @@ +/* tslint:disable:forin */ +import { Component, ContentChildren, Directive, EventEmitter, + Injectable, Input, Output, Optional, + HostBinding, HostListener, + OnInit, OnChanges, OnDestroy, + Pipe, PipeTransform, + SimpleChange } from '@angular/core'; + +import { Observable } from 'rxjs/Observable'; +import 'rxjs/add/observable/of'; +import 'rxjs/add/operator/delay'; + +////////// The App: Services and Components for the tests. ////////////// + +export class Hero { + name: string; +} + +////////// Services /////////////// +// #docregion FancyService +@Injectable() +export class FancyService { + protected value: string = 'real value'; + + getValue() { return this.value; } + setValue(value: string) { this.value = value; } + + getAsyncValue() { return Promise.resolve('async value'); } + + getObservableValue() { return Observable.of('observable value'); } + + getTimeoutValue() { + return new Promise((resolve) => { + setTimeout(() => { resolve('timeout value'); }, 10); + }); + } + + getObservableDelayValue() { + return Observable.of('observable delay value').delay(10); + } +} +// #enddocregion FancyService + +// #docregion DependentService +@Injectable() +export class DependentService { + constructor(private dependentService: FancyService) { } + getValue() { return this.dependentService.getValue(); } +} +// #enddocregion DependentService + +/////////// Pipe //////////////// +/* + * Reverse the input string. +*/ +// #docregion ReversePipe +@Pipe({ name: 'reverse' }) +export class ReversePipe implements PipeTransform { + transform(s: string) { + let r = ''; + for (let i = s.length; i; ) { r += s[--i]; }; + return r; + } +} +// #enddocregion ReversePipe + +//////////// Components ///////////// +@Component({ + selector: 'bank-account', + template: ` + Bank Name: {{bank}} + Account Id: {{id}} + ` +}) +export class BankAccountComponent { + @Input() bank: string; + @Input('account') id: string; + + // Removed on 12/02/2016 when ceased public discussion of the `Renderer`. Revive in future? + // constructor(private renderer: Renderer, private el: ElementRef ) { + // renderer.setElementProperty(el.nativeElement, 'customProperty', true); + // } +} + +/** A component with attributes, styles, classes, and property setting */ +@Component({ + selector: 'bank-account-parent', + template: ` + + + ` +}) +export class BankAccountParentComponent { + width = 200; + color = 'red'; + isClosed = true; +} + +// #docregion ButtonComp +@Component({ + selector: 'button-comp', + template: ` + + {{message}}` +}) +export class ButtonComponent { + isOn = false; + clicked() { this.isOn = !this.isOn; } + get message() { return `The light is ${this.isOn ? 'On' : 'Off'}`; } +} +// #enddocregion ButtonComp + +@Component({ + selector: 'child-1', + template: `Child-1({{text}})` +}) +export class Child1Component { + @Input() text = 'Original'; +} + +@Component({ + selector: 'child-2', + template: '
    Child-2({{text}})
    ' +}) +export class Child2Component { + @Input() text: string; +} + +@Component({ + selector: 'child-3', + template: '
    Child-3({{text}})
    ' +}) +export class Child3Component { + @Input() text: string; +} + +@Component({ + selector: 'input-comp', + template: `` +}) +export class InputComponent { + name = 'John'; +} + +/* Prefer this metadata syntax */ +// @Directive({ +// selector: 'input[value]', +// host: { +// '[value]': 'value', +// '(input)': 'valueChange.emit($event.target.value)' +// }, +// inputs: ['value'], +// outputs: ['valueChange'] +// }) +// export class InputValueBinderDirective { +// value: any; +// valueChange: EventEmitter = new EventEmitter(); +// } + +// As the style-guide recommends +@Directive({ selector: 'input[value]' }) +export class InputValueBinderDirective { + @HostBinding() + @Input() + value: any; + + @Output() + valueChange: EventEmitter = new EventEmitter(); + + @HostListener('input', ['$event.target.value']) + onInput(value: any) { this.valueChange.emit(value); } +} + +@Component({ + selector: 'input-value-comp', + template: ` + Name: {{name}} + ` +}) +export class InputValueBinderComponent { + name = 'Sally'; // initial value +} + +@Component({ + selector: 'parent-comp', + template: `Parent()` +}) +export class ParentComponent { } + +@Component({ + selector: 'io-comp', + template: `
    Original {{hero.name}}
    ` +}) +export class IoComponent { + @Input() hero: Hero; + @Output() selected = new EventEmitter(); + click() { this.selected.emit(this.hero); } +} + +@Component({ + selector: 'io-parent-comp', + template: ` +

    Click to select a hero

    +

    The selected hero is {{selectedHero.name}}

    + + + ` +}) +export class IoParentComponent { + heroes: Hero[] = [ {name: 'Bob'}, {name: 'Carol'}, {name: 'Ted'}, {name: 'Alice'} ]; + selectedHero: Hero; + onSelect(hero: Hero) { this.selectedHero = hero; } +} + +@Component({ + selector: 'my-if-comp', + template: `MyIf(More)` +}) +export class MyIfComponent { + showMore = false; +} + +@Component({ + selector: 'my-service-comp', + template: `injected value: {{fancyService.value}}`, + providers: [FancyService] +}) +export class TestProvidersComponent { + constructor(private fancyService: FancyService) {} +} + + +@Component({ + selector: 'my-service-comp', + template: `injected value: {{fancyService.value}}`, + viewProviders: [FancyService] +}) +export class TestViewProvidersComponent { + constructor(private fancyService: FancyService) {} +} + +@Component({ + moduleId: module.id, + selector: 'external-template-comp', + templateUrl: './bag-external-template.html' +}) +export class ExternalTemplateComponent implements OnInit { + serviceValue: string; + + constructor(@Optional() private service: FancyService) { } + + ngOnInit() { + if (this.service) { this.serviceValue = this.service.getValue(); } + } +} + +@Component({ + selector: 'comp-w-ext-comp', + template: ` +

    comp-w-ext-comp

    + + ` +}) +export class InnerCompWithExternalTemplateComponent { } + +@Component({ + moduleId: module.id, + selector: 'bad-template-comp', + templateUrl: './non-existant.html' +}) +export class BadTemplateUrlComponent { } + + + +@Component({selector: 'needs-content', template: ''}) +export class NeedsContentComponent { + // children with #content local variable + @ContentChildren('content') children: any; +} + +///////// MyIfChildComp //////// +@Component({ + selector: 'my-if-child-1', + + template: ` +

    MyIfChildComp

    +
    + +
    +

    Change log:

    +
    {{i + 1}} - {{log}}
    ` +}) +export class MyIfChildComponent implements OnInit, OnChanges, OnDestroy { + @Input() value = ''; + @Output() valueChange = new EventEmitter(); + + get childValue() { return this.value; } + set childValue(v: string) { + if (this.value === v) { return; } + this.value = v; + this.valueChange.emit(v); + } + + changeLog: string[] = []; + + ngOnInitCalled = false; + ngOnChangesCounter = 0; + ngOnDestroyCalled = false; + + ngOnInit() { + this.ngOnInitCalled = true; + this.changeLog.push('ngOnInit called'); + } + + ngOnDestroy() { + this.ngOnDestroyCalled = true; + this.changeLog.push('ngOnDestroy called'); + } + + ngOnChanges(changes: {[propertyName: string]: SimpleChange}) { + for (let propName in changes) { + this.ngOnChangesCounter += 1; + let prop = changes[propName]; + let cur = JSON.stringify(prop.currentValue); + let prev = JSON.stringify(prop.previousValue); + this.changeLog.push(`${propName}: currentValue = ${cur}, previousValue = ${prev}`); + } + } +} + +///////// MyIfParentComp //////// + +@Component({ + selector: 'my-if-parent-comp', + template: ` +

    MyIfParentComp

    + +
    +
    + +
    + ` +}) +export class MyIfParentComponent implements OnInit { + ngOnInitCalled = false; + parentValue = 'Hello, World'; + showChild = false; + toggleLabel = 'Unknown'; + + ngOnInit() { + this.ngOnInitCalled = true; + this.clicked(); + } + + clicked() { + this.showChild = !this.showChild; + this.toggleLabel = this.showChild ? 'Close' : 'Show'; + } +} + + +@Component({ + selector: 'reverse-pipe-comp', + template: ` + + {{text | reverse}} + ` +}) +export class ReversePipeComponent { + text = 'my dog has fleas.'; +} + +@Component({template: '
    Replace Me
    '}) +export class ShellComponent { } + +@Component({ + selector: 'bag-comp', + template: ` +

    Specs Bag

    + +
    +

    Input/Output Component

    + +
    +

    External Template Component

    + +
    +

    Component With External Template Component

    + +
    +

    Reverse Pipe

    + +
    +

    InputValueBinder Directive

    + +
    +

    Button Component

    + +
    +

    Needs Content

    + + + + + +
    !
    +
    + ` +}) +export class BagComponent { } +//////// Aggregations //////////// + +export const bagDeclarations = [ + BagComponent, + BankAccountComponent, BankAccountParentComponent, + ButtonComponent, + Child1Component, Child2Component, Child3Component, + ExternalTemplateComponent, InnerCompWithExternalTemplateComponent, + InputComponent, + InputValueBinderDirective, InputValueBinderComponent, + IoComponent, IoParentComponent, + MyIfComponent, MyIfChildComponent, MyIfParentComponent, + NeedsContentComponent, ParentComponent, + TestProvidersComponent, TestViewProvidersComponent, + ReversePipe, ReversePipeComponent, ShellComponent +]; + +export const bagProviders = [DependentService, FancyService]; + +//////////////////// +//////////// +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { FormsModule } from '@angular/forms'; + +@NgModule({ + imports: [BrowserModule, FormsModule], + declarations: bagDeclarations, + providers: bagProviders, + entryComponents: [BagComponent], + bootstrap: [BagComponent] +}) +export class BagModule { } + diff --git a/aio/content/examples/testing/ts/src/app/banner-inline.component.spec.ts b/aio/content/examples/testing/ts/src/app/banner-inline.component.spec.ts new file mode 100644 index 0000000000..7f35d6b956 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/banner-inline.component.spec.ts @@ -0,0 +1,55 @@ +// #docplaster +// #docregion imports +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { By } from '@angular/platform-browser'; +import { DebugElement } from '@angular/core'; + +import { BannerComponent } from './banner-inline.component'; +// #enddocregion imports + +// #docregion setup +describe('BannerComponent (inline template)', () => { + + let comp: BannerComponent; + let fixture: ComponentFixture; + let de: DebugElement; + let el: HTMLElement; + +// #docregion before-each + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [ BannerComponent ], // declare the test component + }); + + fixture = TestBed.createComponent(BannerComponent); + + comp = fixture.componentInstance; // BannerComponent test instance + + // query for the title

    by CSS element selector + de = fixture.debugElement.query(By.css('h1')); + el = de.nativeElement; + }); +// #enddocregion before-each +// #enddocregion setup + + // #docregion test-w-o-detect-changes + it('no title in the DOM until manually call `detectChanges`', () => { + expect(el.textContent).toEqual(''); + }); + // #enddocregion test-w-o-detect-changes + + // #docregion tests + it('should display original title', () => { + fixture.detectChanges(); + expect(el.textContent).toContain(comp.title); + }); + + it('should display a different test title', () => { + comp.title = 'Test Title'; + fixture.detectChanges(); + expect(el.textContent).toContain('Test Title'); + }); + // #enddocregion tests +// #docregion setup +}); +// #enddocregion setup diff --git a/aio/content/examples/testing/ts/src/app/banner-inline.component.ts b/aio/content/examples/testing/ts/src/app/banner-inline.component.ts new file mode 100644 index 0000000000..7ec4ef6999 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/banner-inline.component.ts @@ -0,0 +1,11 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-banner', + template: '

    {{title}}

    ' +}) +export class BannerComponent { + title = 'Test Tour of Heroes'; +} + diff --git a/aio/content/examples/testing/ts/src/app/banner.component.css b/aio/content/examples/testing/ts/src/app/banner.component.css new file mode 100644 index 0000000000..cd09a55b3c --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/banner.component.css @@ -0,0 +1 @@ +h1 { color: green; font-size: 350%} diff --git a/aio/content/examples/testing/ts/src/app/banner.component.detect-changes.spec.ts b/aio/content/examples/testing/ts/src/app/banner.component.detect-changes.spec.ts new file mode 100644 index 0000000000..412f5be586 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/banner.component.detect-changes.spec.ts @@ -0,0 +1,59 @@ +// #docplaster +// #docregion +// #docregion import-async +import { async } from '@angular/core/testing'; +// #enddocregion import-async +// #docregion import-ComponentFixtureAutoDetect +import { ComponentFixtureAutoDetect } from '@angular/core/testing'; +// #enddocregion import-ComponentFixtureAutoDetect +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { By } from '@angular/platform-browser'; +import { DebugElement } from '@angular/core'; + +import { BannerComponent } from './banner.component'; + +describe('BannerComponent (AutoChangeDetect)', () => { + let comp: BannerComponent; + let fixture: ComponentFixture; + let de: DebugElement; + let el: HTMLElement; + + beforeEach(async(() => { + // #docregion auto-detect + TestBed.configureTestingModule({ + declarations: [ BannerComponent ], + providers: [ + { provide: ComponentFixtureAutoDetect, useValue: true } + ] + }) + // #enddocregion auto-detect + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(BannerComponent); + comp = fixture.componentInstance; + de = fixture.debugElement.query(By.css('h1')); + el = de.nativeElement; + }); + + // #docregion auto-detect-tests + it('should display original title', () => { + // Hooray! No `fixture.detectChanges()` needed + expect(el.textContent).toContain(comp.title); + }); + + it('should still see original title after comp.title change', () => { + const oldTitle = comp.title; + comp.title = 'Test Title'; + // Displayed title is old because Angular didn't hear the change :( + expect(el.textContent).toContain(oldTitle); + }); + + it('should display updated title after detectChanges', () => { + comp.title = 'Test Title'; + fixture.detectChanges(); // detect changes explicitly + expect(el.textContent).toContain(comp.title); + }); + // #enddocregion auto-detect-tests +}); diff --git a/aio/content/examples/testing/ts/src/app/banner.component.html b/aio/content/examples/testing/ts/src/app/banner.component.html new file mode 100644 index 0000000000..6213adcb47 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/banner.component.html @@ -0,0 +1 @@ +

    {{title}}

    diff --git a/aio/content/examples/testing/ts/src/app/banner.component.spec.ts b/aio/content/examples/testing/ts/src/app/banner.component.spec.ts new file mode 100644 index 0000000000..a564c45c85 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/banner.component.spec.ts @@ -0,0 +1,53 @@ +// #docplaster +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { By } from '@angular/platform-browser'; +import { DebugElement } from '@angular/core'; + +import { BannerComponent } from './banner.component'; + +describe('BannerComponent (templateUrl)', () => { + + let comp: BannerComponent; + let fixture: ComponentFixture; + let de: DebugElement; + let el: HTMLElement; + + // #docregion async-before-each + // async beforeEach + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ BannerComponent ], // declare the test component + }) + .compileComponents(); // compile template and css + })); + // #enddocregion async-before-each + + // #docregion sync-before-each + // synchronous beforeEach + beforeEach(() => { + fixture = TestBed.createComponent(BannerComponent); + + comp = fixture.componentInstance; // BannerComponent test instance + + // query for the title

    by CSS element selector + de = fixture.debugElement.query(By.css('h1')); + el = de.nativeElement; + }); + // #enddocregion sync-before-each + + it('no title in the DOM until manually call `detectChanges`', () => { + expect(el.textContent).toEqual(''); + }); + + it('should display original title', () => { + fixture.detectChanges(); + expect(el.textContent).toContain(comp.title); + }); + + it('should display a different test title', () => { + comp.title = 'Test Title'; + fixture.detectChanges(); + expect(el.textContent).toContain('Test Title'); + }); + +}); diff --git a/aio/content/examples/testing/ts/src/app/banner.component.ts b/aio/content/examples/testing/ts/src/app/banner.component.ts new file mode 100644 index 0000000000..333f37bbcd --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/banner.component.ts @@ -0,0 +1,13 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + moduleId: module.id, + selector: 'app-banner', + templateUrl: './banner.component.html', + styleUrls: ['./banner.component.css'] +}) +export class BannerComponent { + title = 'Test Tour of Heroes'; +} + diff --git a/aio/content/examples/testing/ts/src/app/dashboard/dashboard-hero.component.css b/aio/content/examples/testing/ts/src/app/dashboard/dashboard-hero.component.css new file mode 100644 index 0000000000..eb54d181d8 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/dashboard/dashboard-hero.component.css @@ -0,0 +1,28 @@ +.hero { + padding: 20px; + position: relative; + text-align: center; + color: #eee; + max-height: 120px; + min-width: 120px; + background-color: #607D8B; + border-radius: 2px; +} + +.hero:hover { + background-color: #EEE; + cursor: pointer; + color: #607d8b; +} + +@media (max-width: 600px) { + .hero { + font-size: 10px; + max-height: 75px; } +} + +@media (max-width: 1024px) { + .hero { + min-width: 60px; + } +} diff --git a/aio/content/examples/testing/ts/src/app/dashboard/dashboard-hero.component.html b/aio/content/examples/testing/ts/src/app/dashboard/dashboard-hero.component.html new file mode 100644 index 0000000000..ff49bd17a5 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/dashboard/dashboard-hero.component.html @@ -0,0 +1,4 @@ + +
    + {{hero.name | uppercase}} +
    diff --git a/aio/content/examples/testing/ts/src/app/dashboard/dashboard-hero.component.spec.ts b/aio/content/examples/testing/ts/src/app/dashboard/dashboard-hero.component.spec.ts new file mode 100644 index 0000000000..40c01571e6 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/dashboard/dashboard-hero.component.spec.ts @@ -0,0 +1,124 @@ +import { async, ComponentFixture, TestBed +} from '@angular/core/testing'; + +import { By } from '@angular/platform-browser'; +import { DebugElement } from '@angular/core'; + +import { addMatchers, click } from '../../testing'; + +import { Hero } from '../model/hero'; +import { DashboardHeroComponent } from './dashboard-hero.component'; + +beforeEach( addMatchers ); + +describe('DashboardHeroComponent when tested directly', () => { + + let comp: DashboardHeroComponent; + let expectedHero: Hero; + let fixture: ComponentFixture; + let heroEl: DebugElement; + + // #docregion setup, compile-components + // async beforeEach + beforeEach( async(() => { + TestBed.configureTestingModule({ + declarations: [ DashboardHeroComponent ], + }) + .compileComponents(); // compile template and css + })); + // #enddocregion compile-components + + // synchronous beforeEach + beforeEach(() => { + fixture = TestBed.createComponent(DashboardHeroComponent); + comp = fixture.componentInstance; + heroEl = fixture.debugElement.query(By.css('.hero')); // find hero element + + // pretend that it was wired to something that supplied a hero + expectedHero = new Hero(42, 'Test Name'); + comp.hero = expectedHero; + fixture.detectChanges(); // trigger initial data binding + }); + // #enddocregion setup + + // #docregion name-test + it('should display hero name', () => { + const expectedPipedName = expectedHero.name.toUpperCase(); + expect(heroEl.nativeElement.textContent).toContain(expectedPipedName); + }); + // #enddocregion name-test + + // #docregion click-test + it('should raise selected event when clicked', () => { + let selectedHero: Hero; + comp.selected.subscribe((hero: Hero) => selectedHero = hero); + + // #docregion trigger-event-handler + heroEl.triggerEventHandler('click', null); + // #enddocregion trigger-event-handler + expect(selectedHero).toBe(expectedHero); + }); + // #enddocregion click-test + + // #docregion click-test-2 + it('should raise selected event when clicked', () => { + let selectedHero: Hero; + comp.selected.subscribe((hero: Hero) => selectedHero = hero); + + click(heroEl); // triggerEventHandler helper + expect(selectedHero).toBe(expectedHero); + }); + // #enddocregion click-test-2 +}); + +////////////////// + +describe('DashboardHeroComponent when inside a test host', () => { + let testHost: TestHostComponent; + let fixture: ComponentFixture; + let heroEl: DebugElement; + + // #docregion test-host-setup + beforeEach( async(() => { + TestBed.configureTestingModule({ + declarations: [ DashboardHeroComponent, TestHostComponent ], // declare both + }).compileComponents(); + })); + + beforeEach(() => { + // create TestHostComponent instead of DashboardHeroComponent + fixture = TestBed.createComponent(TestHostComponent); + testHost = fixture.componentInstance; + heroEl = fixture.debugElement.query(By.css('.hero')); // find hero + fixture.detectChanges(); // trigger initial data binding + }); + // #enddocregion test-host-setup + + // #docregion test-host-tests + it('should display hero name', () => { + const expectedPipedName = testHost.hero.name.toUpperCase(); + expect(heroEl.nativeElement.textContent).toContain(expectedPipedName); + }); + + it('should raise selected event when clicked', () => { + click(heroEl); + // selected hero should be the same data bound hero + expect(testHost.selectedHero).toBe(testHost.hero); + }); + // #enddocregion test-host-tests +}); + +////// Test Host Component ////// +import { Component } from '@angular/core'; + +// #docregion test-host +@Component({ + template: ` + ` +}) +class TestHostComponent { + hero = new Hero(42, 'Test Name'); + selectedHero: Hero; + onSelected(hero: Hero) { this.selectedHero = hero; } +} +// #enddocregion test-host diff --git a/aio/content/examples/testing/ts/src/app/dashboard/dashboard-hero.component.ts b/aio/content/examples/testing/ts/src/app/dashboard/dashboard-hero.component.ts new file mode 100644 index 0000000000..4a8c4974fd --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/dashboard/dashboard-hero.component.ts @@ -0,0 +1,18 @@ +// #docregion +import { Component, EventEmitter, Input, Output } from '@angular/core'; + +import { Hero } from '../model'; + +// #docregion component +@Component({ + moduleId: module.id, + selector: 'dashboard-hero', + templateUrl: './dashboard-hero.component.html', + styleUrls: [ './dashboard-hero.component.css' ] +}) +export class DashboardHeroComponent { + @Input() hero: Hero; + @Output() selected = new EventEmitter(); + click() { this.selected.emit(this.hero); } +} +// #enddocregion component diff --git a/aio/content/examples/testing/ts/src/app/dashboard/dashboard.component.css b/aio/content/examples/testing/ts/src/app/dashboard/dashboard.component.css new file mode 100644 index 0000000000..98130b61c6 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/dashboard/dashboard.component.css @@ -0,0 +1,35 @@ +[class*='col-'] { + float: left; +} +*, *:after, *:before { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +h3 { + text-align: center; margin-bottom: 0; +} +[class*='col-'] { + padding-right: 20px; + padding-bottom: 20px; +} +[class*='col-']:last-of-type { + padding-right: 0; +} +.grid { + margin: 0; +} +.col-1-4 { + width: 25%; +} +.grid-pad { + padding: 10px 0; +} +.grid-pad > [class*='col-']:last-of-type { + padding-right: 20px; +} +@media (max-width: 1024px) { + .grid { + margin: 0; + } +} diff --git a/aio/content/examples/testing/ts/src/app/dashboard/dashboard.component.html b/aio/content/examples/testing/ts/src/app/dashboard/dashboard.component.html new file mode 100644 index 0000000000..b26e16b828 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/dashboard/dashboard.component.html @@ -0,0 +1,9 @@ +

    {{title}}

    + +
    + + + + +
    diff --git a/aio/content/examples/testing/ts/src/app/dashboard/dashboard.component.no-testbed.spec.ts b/aio/content/examples/testing/ts/src/app/dashboard/dashboard.component.no-testbed.spec.ts new file mode 100644 index 0000000000..125e5193b7 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/dashboard/dashboard.component.no-testbed.spec.ts @@ -0,0 +1,57 @@ +import { Router } from '@angular/router'; + +import { DashboardComponent } from './dashboard.component'; +import { Hero } from '../model'; + +import { addMatchers } from '../../testing'; +import { FakeHeroService } from '../model/testing'; + +class FakeRouter { + navigateByUrl(url: string) { return url; } +} + +describe('DashboardComponent: w/o Angular TestBed', () => { + let comp: DashboardComponent; + let heroService: FakeHeroService; + let router: Router; + + beforeEach(() => { + addMatchers(); + router = new FakeRouter() as any as Router; + heroService = new FakeHeroService(); + comp = new DashboardComponent(router, heroService); + }); + + it('should NOT have heroes before calling OnInit', () => { + expect(comp.heroes.length).toBe(0, + 'should not have heroes before OnInit'); + }); + + it('should NOT have heroes immediately after OnInit', () => { + comp.ngOnInit(); // ngOnInit -> getHeroes + expect(comp.heroes.length).toBe(0, + 'should not have heroes until service promise resolves'); + }); + + it('should HAVE heroes after HeroService gets them', (done: DoneFn) => { + comp.ngOnInit(); // ngOnInit -> getHeroes + heroService.lastPromise // the one from getHeroes + .then(() => { + // throw new Error('deliberate error'); // see it fail gracefully + expect(comp.heroes.length).toBeGreaterThan(0, + 'should have heroes after service promise resolves'); + }) + .then(done, done.fail); + }); + + it('should tell ROUTER to navigate by hero id', () => { + const hero = new Hero(42, 'Abbracadabra'); + const spy = spyOn(router, 'navigateByUrl'); + + comp.gotoDetail(hero); + + const navArgs = spy.calls.mostRecent().args[0]; + expect(navArgs).toBe('/heroes/42', 'should nav to HeroDetail for Hero 42'); + }); + +}); diff --git a/aio/content/examples/testing/ts/src/app/dashboard/dashboard.component.spec.ts b/aio/content/examples/testing/ts/src/app/dashboard/dashboard.component.spec.ts new file mode 100644 index 0000000000..0b0f9e213a --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/dashboard/dashboard.component.spec.ts @@ -0,0 +1,147 @@ +// #docplaster +import { async, inject, ComponentFixture, TestBed +} from '@angular/core/testing'; + +import { addMatchers, click } from '../../testing'; +import { HeroService } from '../model'; +import { FakeHeroService } from '../model/testing'; + +import { By } from '@angular/platform-browser'; +import { Router } from '@angular/router'; + +import { DashboardComponent } from './dashboard.component'; +import { DashboardModule } from './dashboard.module'; + +// #docregion router-stub +class RouterStub { + navigateByUrl(url: string) { return url; } +} +// #enddocregion router-stub + +beforeEach ( addMatchers ); + +let comp: DashboardComponent; +let fixture: ComponentFixture; + +//////// Deep //////////////// + +describe('DashboardComponent (deep)', () => { + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [ DashboardModule ] + }); + }); + + compileAndCreate(); + + tests(clickForDeep); + + function clickForDeep() { + // get first
    DebugElement + const heroEl = fixture.debugElement.query(By.css('.hero')); + click(heroEl); + } +}); + +//////// Shallow //////////////// + +import { NO_ERRORS_SCHEMA } from '@angular/core'; + +describe('DashboardComponent (shallow)', () => { + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [ DashboardComponent ], + schemas: [NO_ERRORS_SCHEMA] + }); + }); + + compileAndCreate(); + + tests(clickForShallow); + + function clickForShallow() { + // get first DebugElement + const heroEl = fixture.debugElement.query(By.css('dashboard-hero')); + heroEl.triggerEventHandler('selected', comp.heroes[0]); + } +}); + +/** Add TestBed providers, compile, and create DashboardComponent */ +function compileAndCreate() { + // #docregion compile-and-create-body + beforeEach( async(() => { + TestBed.configureTestingModule({ + providers: [ + { provide: HeroService, useClass: FakeHeroService }, + { provide: Router, useClass: RouterStub } + ] + }) + .compileComponents().then(() => { + fixture = TestBed.createComponent(DashboardComponent); + comp = fixture.componentInstance; + }); + // #enddocregion compile-and-create-body + })); +} + +/** + * The (almost) same tests for both. + * Only change: the way that the first hero is clicked + */ +function tests(heroClick: Function) { + + it('should NOT have heroes before ngOnInit', () => { + expect(comp.heroes.length).toBe(0, + 'should not have heroes before ngOnInit'); + }); + + it('should NOT have heroes immediately after ngOnInit', () => { + fixture.detectChanges(); // runs initial lifecycle hooks + + expect(comp.heroes.length).toBe(0, + 'should not have heroes until service promise resolves'); + }); + + describe('after get dashboard heroes', () => { + + // Trigger component so it gets heroes and binds to them + beforeEach( async(() => { + fixture.detectChanges(); // runs ngOnInit -> getHeroes + fixture.whenStable() // No need for the `lastPromise` hack! + .then(() => fixture.detectChanges()); // bind to heroes + })); + + it('should HAVE heroes', () => { + expect(comp.heroes.length).toBeGreaterThan(0, + 'should have heroes after service promise resolves'); + }); + + it('should DISPLAY heroes', () => { + // Find and examine the displayed heroes + // Look for them in the DOM by css class + const heroes = fixture.debugElement.queryAll(By.css('dashboard-hero')); + expect(heroes.length).toBe(4, 'should display 4 heroes'); + }); + + // #docregion navigate-test, inject + it('should tell ROUTER to navigate when hero clicked', + inject([Router], (router: Router) => { // ... + // #enddocregion inject + + const spy = spyOn(router, 'navigateByUrl'); + + heroClick(); // trigger click on first inner
    + + // args passed to router.navigateByUrl() + const navArgs = spy.calls.first().args[0]; + + // expecting to navigate to id of the component's first hero + const id = comp.heroes[0].id; + expect(navArgs).toBe('/heroes/' + id, + 'should nav to HeroDetail for first hero'); + // #docregion inject + })); + // #enddocregion navigate-test, inject + }); +} + diff --git a/aio/content/examples/testing/ts/src/app/dashboard/dashboard.component.ts b/aio/content/examples/testing/ts/src/app/dashboard/dashboard.component.ts new file mode 100644 index 0000000000..40581094f6 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/dashboard/dashboard.component.ts @@ -0,0 +1,41 @@ +// #docregion +import { Component, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; + +import { Hero, HeroService } from '../model'; + +@Component({ + moduleId: module.id, + selector: 'app-dashboard', + templateUrl: './dashboard.component.html', + styleUrls: [ './dashboard.component.css' ] +}) +export class DashboardComponent implements OnInit { + + heroes: Hero[] = []; + + // #docregion ctor + constructor( + private router: Router, + private heroService: HeroService) { + } + // #enddocregion ctor + + ngOnInit() { + this.heroService.getHeroes() + .then(heroes => this.heroes = heroes.slice(1, 5)); + } + + // #docregion goto-detail + gotoDetail(hero: Hero) { + let url = `/heroes/${hero.id}`; + this.router.navigateByUrl(url); + } + // #enddocregion goto-detail + + get title() { + let cnt = this.heroes.length; + return cnt === 0 ? 'No Heroes' : + cnt === 1 ? 'Top Hero' : `Top ${cnt} Heroes`; + } +} diff --git a/aio/content/examples/testing/ts/src/app/dashboard/dashboard.module.ts b/aio/content/examples/testing/ts/src/app/dashboard/dashboard.module.ts new file mode 100644 index 0000000000..8a70c851a0 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/dashboard/dashboard.module.ts @@ -0,0 +1,20 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +import { SharedModule } from '../shared/shared.module'; + +import { DashboardComponent } from './dashboard.component'; +import { DashboardHeroComponent } from './dashboard-hero.component'; + +const routes: Routes = [ + { path: 'dashboard', component: DashboardComponent }, +]; + +@NgModule({ + imports: [ + SharedModule, + RouterModule.forChild(routes) + ], + declarations: [ DashboardComponent, DashboardHeroComponent ] +}) +export class DashboardModule { } diff --git a/aio/content/examples/testing/ts/src/app/hero/hero-detail.component.css b/aio/content/examples/testing/ts/src/app/hero/hero-detail.component.css new file mode 100644 index 0000000000..f6139ba274 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/hero/hero-detail.component.css @@ -0,0 +1,29 @@ +label { + display: inline-block; + width: 3em; + margin: .5em 0; + color: #607D8B; + font-weight: bold; +} +input { + height: 2em; + font-size: 1em; + padding-left: .4em; +} +button { + margin-top: 20px; + font-family: Arial; + background-color: #eee; + border: none; + padding: 5px 10px; + border-radius: 4px; + cursor: pointer; cursor: hand; +} +button:hover { + background-color: #cfd8dc; +} +button:disabled { + background-color: #eee; + color: #ccc; + cursor: auto; +} diff --git a/aio/content/examples/testing/ts/src/app/hero/hero-detail.component.html b/aio/content/examples/testing/ts/src/app/hero/hero-detail.component.html new file mode 100644 index 0000000000..7e86a668f6 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/hero/hero-detail.component.html @@ -0,0 +1,12 @@ + +
    +

    {{hero.name | titlecase}} Details

    +
    + {{hero.id}}
    +
    + + +
    + + +
    diff --git a/aio/content/examples/testing/ts/src/app/hero/hero-detail.component.no-testbed.spec.ts b/aio/content/examples/testing/ts/src/app/hero/hero-detail.component.no-testbed.spec.ts new file mode 100644 index 0000000000..a6c1af98d7 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/hero/hero-detail.component.no-testbed.spec.ts @@ -0,0 +1,58 @@ +import { HeroDetailComponent } from './hero-detail.component'; +import { Hero } from '../model'; + +import { ActivatedRouteStub } from '../../testing'; + +////////// Tests //////////////////// + +describe('HeroDetailComponent - no TestBed', () => { + let activatedRoute: ActivatedRouteStub; + let comp: HeroDetailComponent; + let expectedHero: Hero; + let hds: any; + let router: any; + + beforeEach( done => { + expectedHero = new Hero(42, 'Bubba'); + activatedRoute = new ActivatedRouteStub(); + activatedRoute.testParams = { id: expectedHero.id }; + + router = jasmine.createSpyObj('router', ['navigate']); + + hds = jasmine.createSpyObj('HeroDetailService', ['getHero', 'saveHero']); + hds.getHero.and.returnValue(Promise.resolve(expectedHero)); + hds.saveHero.and.returnValue(Promise.resolve(expectedHero)); + + comp = new HeroDetailComponent(hds, activatedRoute, router); + comp.ngOnInit(); + + // OnInit calls HDS.getHero; wait for it to get the fake hero + hds.getHero.calls.first().returnValue.then(done); + }); + + it('should expose the hero retrieved from the service', () => { + expect(comp.hero).toBe(expectedHero); + }); + + it('should navigate when click cancel', () => { + comp.cancel(); + expect(router.navigate.calls.any()).toBe(true, 'router.navigate called'); + }); + + it('should save when click save', () => { + comp.save(); + expect(hds.saveHero.calls.any()).toBe(true, 'HeroDetailService.save called'); + expect(router.navigate.calls.any()).toBe(false, 'router.navigate not called yet'); + }); + + it('should navigate when click save resolves', done => { + comp.save(); + // waits for async save to complete before navigating + hds.saveHero.calls.first().returnValue + .then(() => { + expect(router.navigate.calls.any()).toBe(true, 'router.navigate called'); + done(); + }); + }); + +}); diff --git a/aio/content/examples/testing/ts/src/app/hero/hero-detail.component.spec.ts b/aio/content/examples/testing/ts/src/app/hero/hero-detail.component.spec.ts new file mode 100644 index 0000000000..4e1ee034d7 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/hero/hero-detail.component.spec.ts @@ -0,0 +1,364 @@ +// #docplaster +import { + async, ComponentFixture, fakeAsync, inject, TestBed, tick +} from '@angular/core/testing'; + +import { By } from '@angular/platform-browser'; +import { DebugElement } from '@angular/core'; + +import { + ActivatedRoute, ActivatedRouteStub, click, newEvent, Router, RouterStub +} from '../../testing'; + +import { Hero } from '../model'; +import { HeroDetailComponent } from './hero-detail.component'; +import { HeroDetailService } from './hero-detail.service'; +import { HeroModule } from './hero.module'; + +////// Testing Vars ////// +let activatedRoute: ActivatedRouteStub; +let comp: HeroDetailComponent; +let fixture: ComponentFixture; +let page: Page; + +////// Tests ////// +describe('HeroDetailComponent', () => { + beforeEach(() => { + activatedRoute = new ActivatedRouteStub(); + }); + describe('with HeroModule setup', heroModuleSetup); + describe('when override its provided HeroDetailService', overrideSetup); + describe('with FormsModule setup', formsModuleSetup); + describe('with SharedModule setup', sharedModuleSetup); +}); + +//////////////////// +function overrideSetup() { + // #docregion hds-spy + class HeroDetailServiceSpy { + testHero = new Hero(42, 'Test Hero'); + + getHero = jasmine.createSpy('getHero').and.callFake( + () => Promise + .resolve(true) + .then(() => Object.assign({}, this.testHero)) + ); + + saveHero = jasmine.createSpy('saveHero').and.callFake( + (hero: Hero) => Promise + .resolve(true) + .then(() => Object.assign(this.testHero, hero)) + ); + } + // #enddocregion hds-spy + + // the `id` value is irrelevant because ignored by service stub + beforeEach(() => activatedRoute.testParams = { id: 99999 } ); + + // #docregion setup-override + beforeEach( async(() => { + TestBed.configureTestingModule({ + imports: [ HeroModule ], + providers: [ + { provide: ActivatedRoute, useValue: activatedRoute }, + { provide: Router, useClass: RouterStub}, + // #enddocregion setup-override + // HeroDetailService at this level is IRRELEVANT! + { provide: HeroDetailService, useValue: {} } + // #docregion setup-override + ] + }) + + // Override component's own provider + // #docregion override-component-method + .overrideComponent(HeroDetailComponent, { + set: { + providers: [ + { provide: HeroDetailService, useClass: HeroDetailServiceSpy } + ] + } + }) + // #enddocregion override-component-method + + .compileComponents(); + })); + // #enddocregion setup-override + + // #docregion override-tests + let hdsSpy: HeroDetailServiceSpy; + + beforeEach( async(() => { + createComponent(); + // get the component's injected HeroDetailServiceSpy + hdsSpy = fixture.debugElement.injector.get(HeroDetailService); + })); + + it('should have called `getHero`', () => { + expect(hdsSpy.getHero.calls.count()).toBe(1, 'getHero called once'); + }); + + it('should display stub hero\'s name', () => { + expect(page.nameDisplay.textContent).toBe(hdsSpy.testHero.name); + }); + + it('should save stub hero change', fakeAsync(() => { + const origName = hdsSpy.testHero.name; + const newName = 'New Name'; + + page.nameInput.value = newName; + page.nameInput.dispatchEvent(newEvent('input')); // tell Angular + + expect(comp.hero.name).toBe(newName, 'component hero has new name'); + expect(hdsSpy.testHero.name).toBe(origName, 'service hero unchanged before save'); + + click(page.saveBtn); + expect(hdsSpy.saveHero.calls.count()).toBe(1, 'saveHero called once'); + + tick(); // wait for async save to complete + expect(hdsSpy.testHero.name).toBe(newName, 'service hero has new name after save'); + expect(page.navSpy.calls.any()).toBe(true, 'router.navigate called'); + })); + // #enddocregion override-tests + + it('fixture injected service is not the component injected service', + inject([HeroDetailService], (service: HeroDetailService) => { + + expect(service).toEqual({}, 'service injected from fixture'); + expect(hdsSpy).toBeTruthy('service injected into component'); + })); +} + +//////////////////// +import { HEROES, FakeHeroService } from '../model/testing'; +import { HeroService } from '../model'; + +const firstHero = HEROES[0]; + +function heroModuleSetup() { + // #docregion setup-hero-module + beforeEach( async(() => { + TestBed.configureTestingModule({ + imports: [ HeroModule ], + // #enddocregion setup-hero-module + // declarations: [ HeroDetailComponent ], // NO! DOUBLE DECLARATION + // #docregion setup-hero-module + providers: [ + { provide: ActivatedRoute, useValue: activatedRoute }, + { provide: HeroService, useClass: FakeHeroService }, + { provide: Router, useClass: RouterStub}, + ] + }) + .compileComponents(); + })); + // #enddocregion setup-hero-module + + // #docregion route-good-id + describe('when navigate to existing hero', () => { + let expectedHero: Hero; + + beforeEach( async(() => { + expectedHero = firstHero; + activatedRoute.testParams = { id: expectedHero.id }; + createComponent(); + })); + + // #docregion selected-tests + it('should display that hero\'s name', () => { + expect(page.nameDisplay.textContent).toBe(expectedHero.name); + }); + // #enddocregion route-good-id + + it('should navigate when click cancel', () => { + click(page.cancelBtn); + expect(page.navSpy.calls.any()).toBe(true, 'router.navigate called'); + }); + + it('should save when click save but not navigate immediately', () => { + // Get service injected into component and spy on its`saveHero` method. + // It delegates to fake `HeroService.updateHero` which delivers a safe test result. + const hds = fixture.debugElement.injector.get(HeroDetailService); + const saveSpy = spyOn(hds, 'saveHero').and.callThrough(); + + click(page.saveBtn); + expect(saveSpy.calls.any()).toBe(true, 'HeroDetailService.save called'); + expect(page.navSpy.calls.any()).toBe(false, 'router.navigate not called'); + }); + + it('should navigate when click save and save resolves', fakeAsync(() => { + click(page.saveBtn); + tick(); // wait for async save to complete + expect(page.navSpy.calls.any()).toBe(true, 'router.navigate called'); + })); + + // #docregion title-case-pipe + it('should convert hero name to Title Case', () => { + const inputName = 'quick BROWN fox'; + const titleCaseName = 'Quick Brown Fox'; + + // simulate user entering new name into the input box + page.nameInput.value = inputName; + + // dispatch a DOM event so that Angular learns of input value change. + page.nameInput.dispatchEvent(newEvent('input')); + + // Tell Angular to update the output span through the title pipe + fixture.detectChanges(); + + expect(page.nameDisplay.textContent).toBe(titleCaseName); + }); + // #enddocregion title-case-pipe + // #enddocregion selected-tests + // #docregion route-good-id + }); + // #enddocregion route-good-id + + // #docregion route-no-id + describe('when navigate with no hero id', () => { + beforeEach( async( createComponent )); + + it('should have hero.id === 0', () => { + expect(comp.hero.id).toBe(0); + }); + + it('should display empty hero name', () => { + expect(page.nameDisplay.textContent).toBe(''); + }); + }); + // #enddocregion route-no-id + + // #docregion route-bad-id + describe('when navigate to non-existant hero id', () => { + beforeEach( async(() => { + activatedRoute.testParams = { id: 99999 }; + createComponent(); + })); + + it('should try to navigate back to hero list', () => { + expect(page.gotoSpy.calls.any()).toBe(true, 'comp.gotoList called'); + expect(page.navSpy.calls.any()).toBe(true, 'router.navigate called'); + }); + }); + // #enddocregion route-bad-id + + // Why we must use `fixture.debugElement.injector` in `Page()` + it('cannot use `inject` to get component\'s provided HeroDetailService', () => { + let service: HeroDetailService; + fixture = TestBed.createComponent(HeroDetailComponent); + expect( + // Throws because `inject` only has access to TestBed's injector + // which is an ancestor of the component's injector + inject([HeroDetailService], (hds: HeroDetailService) => service = hds ) + ) + .toThrowError(/No provider for HeroDetailService/); + + // get `HeroDetailService` with component's own injector + service = fixture.debugElement.injector.get(HeroDetailService); + expect(service).toBeDefined('debugElement.injector'); + }); +} + +///////////////////// +import { FormsModule } from '@angular/forms'; +import { TitleCasePipe } from '../shared/title-case.pipe'; + +function formsModuleSetup() { + // #docregion setup-forms-module + beforeEach( async(() => { + TestBed.configureTestingModule({ + imports: [ FormsModule ], + declarations: [ HeroDetailComponent, TitleCasePipe ], + providers: [ + { provide: ActivatedRoute, useValue: activatedRoute }, + { provide: HeroService, useClass: FakeHeroService }, + { provide: Router, useClass: RouterStub}, + ] + }) + .compileComponents(); + })); + // #enddocregion setup-forms-module + + it('should display 1st hero\'s name', fakeAsync(() => { + const expectedHero = firstHero; + activatedRoute.testParams = { id: expectedHero.id }; + createComponent().then(() => { + expect(page.nameDisplay.textContent).toBe(expectedHero.name); + }); + })); +} + +/////////////////////// +import { SharedModule } from '../shared/shared.module'; + +function sharedModuleSetup() { + // #docregion setup-shared-module + beforeEach( async(() => { + TestBed.configureTestingModule({ + imports: [ SharedModule ], + declarations: [ HeroDetailComponent ], + providers: [ + { provide: ActivatedRoute, useValue: activatedRoute }, + { provide: HeroService, useClass: FakeHeroService }, + { provide: Router, useClass: RouterStub}, + ] + }) + .compileComponents(); + })); + // #enddocregion setup-shared-module + + it('should display 1st hero\'s name', fakeAsync(() => { + const expectedHero = firstHero; + activatedRoute.testParams = { id: expectedHero.id }; + createComponent().then(() => { + expect(page.nameDisplay.textContent).toBe(expectedHero.name); + }); + })); +} + +/////////// Helpers ///// + +// #docregion create-component +/** Create the HeroDetailComponent, initialize it, set test variables */ +function createComponent() { + fixture = TestBed.createComponent(HeroDetailComponent); + comp = fixture.componentInstance; + page = new Page(); + + // 1st change detection triggers ngOnInit which gets a hero + fixture.detectChanges(); + return fixture.whenStable().then(() => { + // 2nd change detection displays the async-fetched hero + fixture.detectChanges(); + page.addPageElements(); + }); +} +// #enddocregion create-component + +// #docregion page +class Page { + gotoSpy: jasmine.Spy; + navSpy: jasmine.Spy; + + saveBtn: DebugElement; + cancelBtn: DebugElement; + nameDisplay: HTMLElement; + nameInput: HTMLInputElement; + + constructor() { + const router = TestBed.get(Router); // get router from root injector + this.gotoSpy = spyOn(comp, 'gotoList').and.callThrough(); + this.navSpy = spyOn(router, 'navigate'); + } + + /** Add page elements after hero arrives */ + addPageElements() { + if (comp.hero) { + // have a hero so these elements are now in the DOM + const buttons = fixture.debugElement.queryAll(By.css('button')); + this.saveBtn = buttons[0]; + this.cancelBtn = buttons[1]; + this.nameDisplay = fixture.debugElement.query(By.css('span')).nativeElement; + this.nameInput = fixture.debugElement.query(By.css('input')).nativeElement; + } + } +} +// #enddocregion page diff --git a/aio/content/examples/testing/ts/src/app/hero/hero-detail.component.ts b/aio/content/examples/testing/ts/src/app/hero/hero-detail.component.ts new file mode 100644 index 0000000000..763c921650 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/hero/hero-detail.component.ts @@ -0,0 +1,64 @@ +/* tslint:disable:member-ordering */ +// #docplaster +import { Component, Input, OnInit } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import 'rxjs/add/operator/map'; + +import { Hero } from '../model'; +import { HeroDetailService } from './hero-detail.service'; + +// #docregion prototype +@Component({ + moduleId: module.id, + selector: 'app-hero-detail', + templateUrl: './hero-detail.component.html', + styleUrls: ['./hero-detail.component.css' ], + providers: [ HeroDetailService ] +}) +export class HeroDetailComponent implements OnInit { + // #docregion ctor + constructor( + private heroDetailService: HeroDetailService, + private route: ActivatedRoute, + private router: Router) { + } + // #enddocregion ctor +// #enddocregion prototype + + @Input() hero: Hero; + + // #docregion ng-on-init + ngOnInit(): void { + // get hero when `id` param changes + this.route.params.subscribe(p => this.getHero(p && p['id'])); + } + // #enddocregion ng-on-init + + private getHero(id: string): void { + // when no id or id===0, create new hero + if (!id) { + this.hero = new Hero(); + return; + } + + this.heroDetailService.getHero(id).then(hero => { + if (hero) { + this.hero = hero; + } else { + this.gotoList(); // id not found; navigate to list + } + }); + } + + save(): void { + this.heroDetailService.saveHero(this.hero).then(() => this.gotoList()); + } + + cancel() { this.gotoList(); } + + gotoList() { + this.router.navigate(['../'], {relativeTo: this.route}); + } +// #docregion prototype +} +// #enddocregion prototype diff --git a/aio/content/examples/testing/ts/src/app/hero/hero-detail.service.ts b/aio/content/examples/testing/ts/src/app/hero/hero-detail.service.ts new file mode 100644 index 0000000000..6239ae5b80 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/hero/hero-detail.service.ts @@ -0,0 +1,26 @@ +import { Injectable } from '@angular/core'; + +import { Hero, HeroService } from '../model'; + +// #docregion prototype +@Injectable() +export class HeroDetailService { + constructor(private heroService: HeroService) { } +// #enddocregion prototype + + // Returns a clone which caller may modify safely + getHero(id: number | string): Promise { + if (typeof id === 'string') { + id = parseInt(id as string, 10); + } + return this.heroService.getHero(id).then(hero => { + return hero ? Object.assign({}, hero) : null; // clone or null + }); + } + + saveHero(hero: Hero) { + return this.heroService.updateHero(hero); + } +// #docregion prototype +} +// #enddocregion prototype diff --git a/aio/content/examples/testing/ts/src/app/hero/hero-list.component.css b/aio/content/examples/testing/ts/src/app/hero/hero-list.component.css new file mode 100644 index 0000000000..d939ab565d --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/hero/hero-list.component.css @@ -0,0 +1,59 @@ +.selected { + background-color: #CFD8DC !important; + color: white; +} +.heroes { + margin: 0 0 2em 0; + list-style-type: none; + padding: 0; + width: 10em; +} +.heroes li { + cursor: pointer; + position: relative; + left: 0; + background-color: #EEE; + margin: .5em; + padding: .3em 0; + height: 1.6em; + border-radius: 4px; +} +.heroes li:hover { + color: #607D8B; + background-color: #DDD; + left: .1em; +} +.heroes li.selected:hover { + background-color: #BBD8DC !important; + color: white; +} +.heroes .text { + position: relative; + top: -3px; +} +.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; +} +button { + font-family: Arial; + background-color: #eee; + border: none; + padding: 5px 10px; + border-radius: 4px; + cursor: pointer; + cursor: hand; +} +button:hover { + background-color: #cfd8dc; +} diff --git a/aio/content/examples/testing/ts/src/app/hero/hero-list.component.html b/aio/content/examples/testing/ts/src/app/hero/hero-list.component.html new file mode 100644 index 0000000000..cd37301fd6 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/hero/hero-list.component.html @@ -0,0 +1,8 @@ +

    My Heroes

    +
      +
    • + {{hero.id}} {{hero.name}} +
    • +
    diff --git a/aio/content/examples/testing/ts/src/app/hero/hero-list.component.spec.ts b/aio/content/examples/testing/ts/src/app/hero/hero-list.component.spec.ts new file mode 100644 index 0000000000..dbf9d37d71 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/hero/hero-list.component.spec.ts @@ -0,0 +1,139 @@ +import { async, ComponentFixture, fakeAsync, TestBed, tick +} from '@angular/core/testing'; + +import { By } from '@angular/platform-browser'; +import { DebugElement } from '@angular/core'; + +import { addMatchers, newEvent, Router, RouterStub +} from '../../testing'; + +import { HEROES, FakeHeroService } from '../model/testing'; + +import { HeroModule } from './hero.module'; +import { HeroListComponent } from './hero-list.component'; +import { HighlightDirective } from '../shared/highlight.directive'; +import { HeroService } from '../model'; + +let comp: HeroListComponent; +let fixture: ComponentFixture; +let page: Page; + +/////// Tests ////// + +describe('HeroListComponent', () => { + + beforeEach( async(() => { + addMatchers(); + TestBed.configureTestingModule({ + imports: [HeroModule], + providers: [ + { provide: HeroService, useClass: FakeHeroService }, + { provide: Router, useClass: RouterStub} + ] + }) + .compileComponents() + .then(createComponent); + })); + + it('should display heroes', () => { + expect(page.heroRows.length).toBeGreaterThan(0); + }); + + it('1st hero should match 1st test hero', () => { + const expectedHero = HEROES[0]; + const actualHero = page.heroRows[0].textContent; + expect(actualHero).toContain(expectedHero.id, 'hero.id'); + expect(actualHero).toContain(expectedHero.name, 'hero.name'); + }); + + it('should select hero on click', fakeAsync(() => { + const expectedHero = HEROES[1]; + const li = page.heroRows[1]; + li.dispatchEvent(newEvent('click')); + tick(); + // `.toEqual` because selectedHero is clone of expectedHero; see FakeHeroService + expect(comp.selectedHero).toEqual(expectedHero); + })); + + it('should navigate to selected hero detail on click', fakeAsync(() => { + const expectedHero = HEROES[1]; + const li = page.heroRows[1]; + li.dispatchEvent(newEvent('click')); + tick(); + + // should have navigated + expect(page.navSpy.calls.any()).toBe(true, 'navigate called'); + + // composed hero detail will be URL like 'heroes/42' + // expect link array with the route path and hero id + // first argument to router.navigate is link array + const navArgs = page.navSpy.calls.first().args[0]; + expect(navArgs[0]).toContain('heroes', 'nav to heroes detail URL'); + expect(navArgs[1]).toBe(expectedHero.id, 'expected hero.id'); + + })); + + it('should find `HighlightDirective` with `By.directive', () => { + // #docregion by + // Can find DebugElement either by css selector or by directive + const h2 = fixture.debugElement.query(By.css('h2')); + const directive = fixture.debugElement.query(By.directive(HighlightDirective)); + // #enddocregion by + expect(h2).toBe(directive); + }); + + it('should color header with `HighlightDirective`', () => { + const h2 = page.highlightDe.nativeElement as HTMLElement; + const bgColor = h2.style.backgroundColor; + + // different browsers report color values differently + const isExpectedColor = bgColor === 'gold' || bgColor === 'rgb(255, 215, 0)'; + expect(isExpectedColor).toBe(true, 'backgroundColor'); + }); + + it('the `HighlightDirective` is among the element\'s providers', () => { + expect(page.highlightDe.providerTokens).toContain(HighlightDirective, 'HighlightDirective'); + }); +}); + +/////////// Helpers ///// + +/** Create the component and set the `page` test variables */ +function createComponent() { + fixture = TestBed.createComponent(HeroListComponent); + comp = fixture.componentInstance; + + // change detection triggers ngOnInit which gets a hero + fixture.detectChanges(); + + return fixture.whenStable().then(() => { + // got the heroes and updated component + // change detection updates the view + fixture.detectChanges(); + page = new Page(); + }); +} + +class Page { + /** Hero line elements */ + heroRows: HTMLLIElement[]; + + /** Highlighted element */ + highlightDe: DebugElement; + + /** Spy on router navigate method */ + navSpy: jasmine.Spy; + + constructor() { + this.heroRows = fixture.debugElement.queryAll(By.css('li')).map(de => de.nativeElement); + + // Find the first element with an attached HighlightDirective + this.highlightDe = fixture.debugElement.query(By.directive(HighlightDirective)); + + // Get the component's injected router and spy on it + const router = fixture.debugElement.injector.get(Router); + this.navSpy = spyOn(router, 'navigate'); + }; +} + + diff --git a/aio/content/examples/testing/ts/src/app/hero/hero-list.component.ts b/aio/content/examples/testing/ts/src/app/hero/hero-list.component.ts new file mode 100644 index 0000000000..501e0000b6 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/hero/hero-list.component.ts @@ -0,0 +1,28 @@ +import { Component, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; + +import { Hero, HeroService } from '../model'; + +@Component({ + moduleId: module.id, + selector: 'app-heroes', + templateUrl: './hero-list.component.html', + styleUrls: [ './hero-list.component.css' ] +}) +export class HeroListComponent implements OnInit { + heroes: Promise; + selectedHero: Hero; + + constructor( + private router: Router, + private heroService: HeroService) { } + + ngOnInit() { + this.heroes = this.heroService.getHeroes(); + } + + onSelect(hero: Hero) { + this.selectedHero = hero; + this.router.navigate(['../heroes', this.selectedHero.id ]); + } +} diff --git a/aio/content/examples/testing/ts/src/app/hero/hero-routing.module.ts b/aio/content/examples/testing/ts/src/app/hero/hero-routing.module.ts new file mode 100644 index 0000000000..59ec14474c --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/hero/hero-routing.module.ts @@ -0,0 +1,18 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +import { HeroListComponent } from './hero-list.component'; +import { HeroDetailComponent } from './hero-detail.component'; + +const routes: Routes = [ + { path: '', component: HeroListComponent }, + { path: ':id', component: HeroDetailComponent } +]; + +export const routedComponents = [HeroDetailComponent, HeroListComponent]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class HeroRoutingModule {} diff --git a/aio/content/examples/testing/ts/src/app/hero/hero.module.ts b/aio/content/examples/testing/ts/src/app/hero/hero.module.ts new file mode 100644 index 0000000000..dfe33cc199 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/hero/hero.module.ts @@ -0,0 +1,9 @@ +import { NgModule } from '@angular/core'; +import { SharedModule } from '../shared/shared.module'; +import { routedComponents, HeroRoutingModule } from './hero-routing.module'; + +@NgModule({ + imports: [ SharedModule, HeroRoutingModule ], + declarations: [ routedComponents ] +}) +export class HeroModule { } diff --git a/aio/content/examples/testing/ts/src/app/model/hero.service.ts b/aio/content/examples/testing/ts/src/app/model/hero.service.ts new file mode 100644 index 0000000000..667d47312b --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/model/hero.service.ts @@ -0,0 +1,30 @@ +import { Injectable } from '@angular/core'; + +import { Hero } from './hero'; +import { HEROES } from './test-heroes'; + +@Injectable() +/** Dummy HeroService. Pretend it makes real http requests */ +export class HeroService { + getHeroes() { + return Promise.resolve(HEROES); + } + + getHero(id: number | string): Promise { + if (typeof id === 'string') { + id = parseInt(id as string, 10); + } + return this.getHeroes().then( + heroes => heroes.find(hero => hero.id === id) + ); + } + + updateHero(hero: Hero): Promise { + return this.getHero(hero.id).then(h => { + if (!h) { + throw new Error(`Hero ${hero.id} not found`); + } + return Object.assign(h, hero); + }); + } +} diff --git a/aio/content/examples/testing/ts/src/app/model/hero.spec.ts b/aio/content/examples/testing/ts/src/app/model/hero.spec.ts new file mode 100644 index 0000000000..e8acf913f2 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/model/hero.spec.ts @@ -0,0 +1,20 @@ +// #docregion +import { Hero } from './hero'; + +describe('Hero', () => { + it('has name', () => { + const hero = new Hero(1, 'Super Cat'); + expect(hero.name).toBe('Super Cat'); + }); + + it('has id', () => { + const hero = new Hero(1, 'Super Cat'); + expect(hero.id).toBe(1); + }); + + it('can clone itself', () => { + const hero = new Hero(1, 'Super Cat'); + const clone = hero.clone(); + expect(hero).toEqual(clone); + }); +}); diff --git a/aio/content/examples/testing/ts/src/app/model/hero.ts b/aio/content/examples/testing/ts/src/app/model/hero.ts new file mode 100644 index 0000000000..6a98f0dfdc --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/model/hero.ts @@ -0,0 +1,4 @@ +export class Hero { + constructor(public id = 0, public name = '') { } + clone() { return new Hero(this.id, this.name); } +} diff --git a/aio/content/examples/testing/ts/src/app/model/http-hero.service.spec.ts b/aio/content/examples/testing/ts/src/app/model/http-hero.service.spec.ts new file mode 100644 index 0000000000..c16b421274 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/model/http-hero.service.spec.ts @@ -0,0 +1,127 @@ +import { + async, inject, TestBed +} from '@angular/core/testing'; + +import { + MockBackend, + MockConnection +} from '@angular/http/testing'; + +import { + HttpModule, Http, XHRBackend, Response, ResponseOptions +} from '@angular/http'; + +import { Observable } from 'rxjs/Observable'; +import 'rxjs/add/observable/of'; + +import 'rxjs/add/operator/catch'; +import 'rxjs/add/operator/do'; +import 'rxjs/add/operator/toPromise'; + +import { Hero } from './hero'; +import { HttpHeroService as HeroService } from './http-hero.service'; + +const makeHeroData = () => [ + { id: 1, name: 'Windstorm' }, + { id: 2, name: 'Bombasto' }, + { id: 3, name: 'Magneta' }, + { id: 4, name: 'Tornado' } +] as Hero[]; + +//////// Tests ///////////// +describe('Http-HeroService (mockBackend)', () => { + + beforeEach( async(() => { + TestBed.configureTestingModule({ + imports: [ HttpModule ], + providers: [ + HeroService, + { provide: XHRBackend, useClass: MockBackend } + ] + }) + .compileComponents(); + })); + + it('can instantiate service when inject service', + inject([HeroService], (service: HeroService) => { + expect(service instanceof HeroService).toBe(true); + })); + + + + it('can instantiate service with "new"', inject([Http], (http: Http) => { + expect(http).not.toBeNull('http should be provided'); + let service = new HeroService(http); + expect(service instanceof HeroService).toBe(true, 'new service should be ok'); + })); + + + it('can provide the mockBackend as XHRBackend', + inject([XHRBackend], (backend: MockBackend) => { + expect(backend).not.toBeNull('backend should be provided'); + })); + + describe('when getHeroes', () => { + let backend: MockBackend; + let service: HeroService; + let fakeHeroes: Hero[]; + let response: Response; + + beforeEach(inject([Http, XHRBackend], (http: Http, be: MockBackend) => { + backend = be; + service = new HeroService(http); + fakeHeroes = makeHeroData(); + let options = new ResponseOptions({status: 200, body: {data: fakeHeroes}}); + response = new Response(options); + })); + + it('should have expected fake heroes (then)', async(inject([], () => { + backend.connections.subscribe((c: MockConnection) => c.mockRespond(response)); + + service.getHeroes().toPromise() + // .then(() => Promise.reject('deliberate')) + .then(heroes => { + expect(heroes.length).toBe(fakeHeroes.length, + 'should have expected no. of heroes'); + }); + }))); + + it('should have expected fake heroes (Observable.do)', async(inject([], () => { + backend.connections.subscribe((c: MockConnection) => c.mockRespond(response)); + + service.getHeroes() + .do(heroes => { + expect(heroes.length).toBe(fakeHeroes.length, + 'should have expected no. of heroes'); + }) + .toPromise(); + }))); + + + it('should be OK returning no heroes', async(inject([], () => { + let resp = new Response(new ResponseOptions({status: 200, body: {data: []}})); + backend.connections.subscribe((c: MockConnection) => c.mockRespond(resp)); + + service.getHeroes() + .do(heroes => { + expect(heroes.length).toBe(0, 'should have no heroes'); + }) + .toPromise(); + }))); + + it('should treat 404 as an Observable error', async(inject([], () => { + let resp = new Response(new ResponseOptions({status: 404})); + backend.connections.subscribe((c: MockConnection) => c.mockRespond(resp)); + + service.getHeroes() + .do(heroes => { + fail('should not respond with heroes'); + }) + .catch(err => { + expect(err).toMatch(/Bad response status/, 'should catch bad response status code'); + return Observable.of(null); // failure is the expected test result + }) + .toPromise(); + }))); + }); +}); diff --git a/aio/content/examples/testing/ts/src/app/model/http-hero.service.ts b/aio/content/examples/testing/ts/src/app/model/http-hero.service.ts new file mode 100644 index 0000000000..a5fe46b801 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/model/http-hero.service.ts @@ -0,0 +1,68 @@ +// #docplaster +// #docregion +import { Injectable } from '@angular/core'; +import { Http, Response } from '@angular/http'; +import { Headers, RequestOptions } from '@angular/http'; +import { Hero } from './hero'; + +import { Observable } from 'rxjs/Observable'; +import 'rxjs/add/observable/throw'; + +import 'rxjs/add/operator/do'; +import 'rxjs/add/operator/catch'; +import 'rxjs/add/operator/map'; + +@Injectable() +export class HttpHeroService { + private _heroesUrl = 'app/heroes'; // URL to web api + + constructor (private http: Http) {} + + getHeroes (): Observable { + return this.http.get(this._heroesUrl) + .map(this.extractData) + // .do(data => console.log(data)) // eyeball results in the console + .catch(this.handleError); + } + + getHero(id: number | string) { + return this.http + .get('app/heroes/?id=${id}') + .map((r: Response) => r.json().data as Hero[]); + } + + addHero (name: string): Observable { + let body = JSON.stringify({ name }); + let headers = new Headers({ 'Content-Type': 'application/json' }); + let options = new RequestOptions({ headers: headers }); + + return this.http.post(this._heroesUrl, body, options) + .map(this.extractData) + .catch(this.handleError); + } + + updateHero (hero: Hero): Observable { + let body = JSON.stringify(hero); + let headers = new Headers({ 'Content-Type': 'application/json' }); + let options = new RequestOptions({ headers: headers }); + + return this.http.put(this._heroesUrl, body, options) + .map(this.extractData) + .catch(this.handleError); + } + + private extractData(res: Response) { + if (res.status < 200 || res.status >= 300) { + throw new Error('Bad response status: ' + res.status); + } + let body = res.json(); + return body.data || { }; + } + + private handleError (error: any) { + // In a real world app, we might send the error to remote logging infrastructure + let errMsg = error.message || 'Server error'; + console.error(errMsg); // log to console instead + return Observable.throw(errMsg); + } +} diff --git a/aio/content/examples/testing/ts/src/app/model/index.ts b/aio/content/examples/testing/ts/src/app/model/index.ts new file mode 100644 index 0000000000..227004d5be --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/model/index.ts @@ -0,0 +1,7 @@ +// Model barrel +export * from './hero'; +export * from './hero.service'; +export * from './http-hero.service'; +export * from './test-heroes'; + +export * from './user.service'; diff --git a/aio/content/examples/testing/ts/src/app/model/test-heroes.ts b/aio/content/examples/testing/ts/src/app/model/test-heroes.ts new file mode 100644 index 0000000000..d40ce5d564 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/model/test-heroes.ts @@ -0,0 +1,11 @@ +// #docregion +import { Hero } from './hero'; + +export var HEROES: Hero[] = [ + new Hero(11, 'Mr. Nice'), + new Hero(12, 'Narco'), + new Hero(13, 'Bombasto'), + new Hero(14, 'Celeritas'), + new Hero(15, 'Magneta'), + new Hero(16, 'RubberMan') +]; diff --git a/aio/content/examples/testing/ts/src/app/model/testing/fake-hero.service.ts b/aio/content/examples/testing/ts/src/app/model/testing/fake-hero.service.ts new file mode 100644 index 0000000000..79a865cc44 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/model/testing/fake-hero.service.ts @@ -0,0 +1,41 @@ +// re-export for tester convenience +export { Hero } from '../hero'; +export { HeroService } from '../hero.service'; + +import { Hero } from '../hero'; +import { HeroService } from '../hero.service'; + +export var HEROES: Hero[] = [ + new Hero(41, 'Bob'), + new Hero(42, 'Carol'), + new Hero(43, 'Ted'), + new Hero(44, 'Alice'), + new Hero(45, 'Speedy'), + new Hero(46, 'Stealthy') +]; + +export class FakeHeroService implements HeroService { + + heroes = HEROES.map(h => h.clone()); + lastPromise: Promise; // remember so we can spy on promise calls + + getHero(id: number | string) { + if (typeof id === 'string') { + id = parseInt(id as string, 10); + } + let hero = this.heroes.find(h => h.id === id); + return this.lastPromise = Promise.resolve(hero); + } + + getHeroes() { + return this.lastPromise = Promise.resolve(this.heroes); + } + + updateHero(hero: Hero): Promise { + return this.lastPromise = this.getHero(hero.id).then(h => { + return h ? + Object.assign(h, hero) : + Promise.reject(`Hero ${hero.id} not found`) as any as Promise; + }); + } +} diff --git a/aio/content/examples/testing/ts/src/app/model/testing/index.ts b/aio/content/examples/testing/ts/src/app/model/testing/index.ts new file mode 100644 index 0000000000..6da76e67db --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/model/testing/index.ts @@ -0,0 +1 @@ +export * from './fake-hero.service'; diff --git a/aio/content/examples/testing/ts/src/app/model/user.service.ts b/aio/content/examples/testing/ts/src/app/model/user.service.ts new file mode 100644 index 0000000000..280efefeec --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/model/user.service.ts @@ -0,0 +1,7 @@ +import { Injectable } from '@angular/core'; + +@Injectable() +export class UserService { + isLoggedIn = true; + user = {name: 'Sam Spade'}; +} diff --git a/aio/content/examples/testing/ts/src/app/shared/highlight.directive.spec.ts b/aio/content/examples/testing/ts/src/app/shared/highlight.directive.spec.ts new file mode 100644 index 0000000000..b990f20b69 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/shared/highlight.directive.spec.ts @@ -0,0 +1,104 @@ +import { Component, DebugElement } from '@angular/core'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { By } from '@angular/platform-browser'; + +import { HighlightDirective } from './highlight.directive'; +import { newEvent } from '../../testing'; + +// #docregion test-component +@Component({ + template: ` +

    Something Yellow

    +

    The Default (Gray)

    +

    No Highlight

    + ` +}) +class TestComponent { } +// #enddocregion test-component + +describe('HighlightDirective', () => { + + let fixture: ComponentFixture; + let des: DebugElement[]; // the three elements w/ the directive + let bareH2: DebugElement; // the

    w/o the directive + + // #docregion selected-tests + beforeEach(() => { + fixture = TestBed.configureTestingModule({ + declarations: [ HighlightDirective, TestComponent ] + }) + .createComponent(TestComponent); + + fixture.detectChanges(); // initial binding + + // all elements with an attached HighlightDirective + des = fixture.debugElement.queryAll(By.directive(HighlightDirective)); + + // the h2 without the HighlightDirective + bareH2 = fixture.debugElement.query(By.css('h2:not([highlight])')); + }); + + // color tests + it('should have three highlighted elements', () => { + expect(des.length).toBe(3); + }); + + it('should color 1st

    background "yellow"', () => { + const bgColor = des[0].nativeElement.style.backgroundColor; + expect(bgColor).toBe('yellow'); + }); + + it('should color 2nd

    background w/ default color', () => { + const dir = des[1].injector.get(HighlightDirective) as HighlightDirective; + const bgColor = des[1].nativeElement.style.backgroundColor; + expect(bgColor).toBe(dir.defaultColor); + }); + + it('should bind background to value color', () => { + // easier to work with nativeElement + const input = des[2].nativeElement as HTMLInputElement; + expect(input.style.backgroundColor).toBe('cyan', 'initial backgroundColor'); + + // dispatch a DOM event so that Angular responds to the input value change. + input.value = 'green'; + input.dispatchEvent(newEvent('input')); + fixture.detectChanges(); + + expect(input.style.backgroundColor).toBe('green', 'changed backgroundColor'); + }); + + + it('bare

    should not have a customProperty', () => { + expect(bareH2.properties['customProperty']).toBeUndefined(); + }); + // #enddocregion selected-tests + + // Removed on 12/02/2016 when ceased public discussion of the `Renderer`. Revive in future? + // // customProperty tests + // it('all highlighted elements should have a true customProperty', () => { + // const allTrue = des.map(de => !!de.properties['customProperty']).every(v => v === true); + // expect(allTrue).toBe(true); + // }); + + // injected directive + // attached HighlightDirective can be injected + it('can inject `HighlightDirective` in 1st

    ', () => { + const dir = des[0].injector.get(HighlightDirective); + expect(dir).toBeTruthy(); + }); + + it('cannot inject `HighlightDirective` in 3rd

    ', () => { + const dir = bareH2.injector.get(HighlightDirective, null); + expect(dir).toBe(null); + }); + + // DebugElement.providerTokens + // attached HighlightDirective should be listed in the providerTokens + it('should have `HighlightDirective` in 1st

    providerTokens', () => { + expect(des[0].providerTokens).toContain(HighlightDirective); + }); + + it('should not have `HighlightDirective` in 3rd

    providerTokens', () => { + expect(bareH2.providerTokens).not.toContain(HighlightDirective); + }); +}); diff --git a/aio/content/examples/testing/ts/src/app/shared/highlight.directive.ts b/aio/content/examples/testing/ts/src/app/shared/highlight.directive.ts new file mode 100644 index 0000000000..20901878c4 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/shared/highlight.directive.ts @@ -0,0 +1,20 @@ +// #docregion +import { Directive, ElementRef, Input, OnChanges } from '@angular/core'; + +@Directive({ selector: '[highlight]' }) +/** Set backgroundColor for the attached element to highlight color + * and set the element's customProperty to true */ +export class HighlightDirective implements OnChanges { + + defaultColor = 'rgb(211, 211, 211)'; // lightgray + + @Input('highlight') bgColor: string; + + constructor(private el: ElementRef) { + el.nativeElement.style.customProperty = true; + } + + ngOnChanges() { + this.el.nativeElement.style.backgroundColor = this.bgColor || this.defaultColor; + } +} diff --git a/aio/content/examples/testing/ts/src/app/shared/shared.module.ts b/aio/content/examples/testing/ts/src/app/shared/shared.module.ts new file mode 100644 index 0000000000..17c41c0410 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/shared/shared.module.ts @@ -0,0 +1,15 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; + +import { HighlightDirective } from './highlight.directive'; +import { TitleCasePipe } from './title-case.pipe'; +import { TwainComponent } from './twain.component'; + +@NgModule({ + imports: [ CommonModule ], + exports: [ CommonModule, FormsModule, + HighlightDirective, TitleCasePipe, TwainComponent ], + declarations: [ HighlightDirective, TitleCasePipe, TwainComponent ] +}) +export class SharedModule { } diff --git a/aio/content/examples/testing/ts/src/app/shared/title-case.pipe.spec.ts b/aio/content/examples/testing/ts/src/app/shared/title-case.pipe.spec.ts new file mode 100644 index 0000000000..5dfc5d91b0 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/shared/title-case.pipe.spec.ts @@ -0,0 +1,34 @@ +// #docplaster +// #docregion +import { TitleCasePipe } from './title-case.pipe'; + +// #docregion excerpt, mini-excerpt +describe('TitleCasePipe', () => { + // This pipe is a pure, stateless function so no need for BeforeEach + let pipe = new TitleCasePipe(); + + it('transforms "abc" to "Abc"', () => { + expect(pipe.transform('abc')).toBe('Abc'); + }); +// #enddocregion mini-excerpt + + it('transforms "abc def" to "Abc Def"', () => { + expect(pipe.transform('abc def')).toBe('Abc Def'); + }); + + // ... more tests ... +// #enddocregion excerpt + it('leaves "Abc Def" unchanged', () => { + expect(pipe.transform('Abc Def')).toBe('Abc Def'); + }); + + it('transforms "abc-def" to "Abc-def"', () => { + expect(pipe.transform('abc-def')).toBe('Abc-def'); + }); + + it('transforms " abc def" to " Abc Def" (preserves spaces) ', () => { + expect(pipe.transform(' abc def')).toBe(' Abc Def'); + }); +// #docregion excerpt, mini-excerpt +}); +// #enddocregion excerpt, mini-excerpt diff --git a/aio/content/examples/testing/ts/src/app/shared/title-case.pipe.ts b/aio/content/examples/testing/ts/src/app/shared/title-case.pipe.ts new file mode 100644 index 0000000000..df2567778d --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/shared/title-case.pipe.ts @@ -0,0 +1,11 @@ +// #docregion +import { Pipe, PipeTransform } from '@angular/core'; + +@Pipe({name: 'titlecase', pure: false}) +/** Transform to Title Case: uppercase the first letter of the words in a string.*/ +export class TitleCasePipe implements PipeTransform { + transform(input: string): string { + return input.length === 0 ? '' : + input.replace(/\w\S*/g, (txt => txt[0].toUpperCase() + txt.substr(1).toLowerCase() )); + } +} diff --git a/aio/content/examples/testing/ts/src/app/shared/twain.component.spec.ts b/aio/content/examples/testing/ts/src/app/shared/twain.component.spec.ts new file mode 100644 index 0000000000..b80993cc0b --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/shared/twain.component.spec.ts @@ -0,0 +1,92 @@ +// #docplaster +import { async, fakeAsync, ComponentFixture, TestBed, tick } from '@angular/core/testing'; +import { By } from '@angular/platform-browser'; +import { DebugElement } from '@angular/core'; + +import { TwainService } from './twain.service'; +import { TwainComponent } from './twain.component'; + +describe('TwainComponent', () => { + + let comp: TwainComponent; + let fixture: ComponentFixture; + + let spy: jasmine.Spy; + let de: DebugElement; + let el: HTMLElement; + let twainService: TwainService; // the actually injected service + + const testQuote = 'Test Quote'; + + // #docregion setup + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [ TwainComponent ], + providers: [ TwainService ], + }); + + fixture = TestBed.createComponent(TwainComponent); + comp = fixture.componentInstance; + + // TwainService actually injected into the component + twainService = fixture.debugElement.injector.get(TwainService); + + // Setup spy on the `getQuote` method + // #docregion spy + spy = spyOn(twainService, 'getQuote') + .and.returnValue(Promise.resolve(testQuote)); + // #enddocregion spy + + // Get the Twain quote element by CSS selector (e.g., by class name) + de = fixture.debugElement.query(By.css('.twain')); + el = de.nativeElement; + }); + // #enddocregion setup + + // #docregion tests + it('should not show quote before OnInit', () => { + expect(el.textContent).toBe('', 'nothing displayed'); + expect(spy.calls.any()).toBe(false, 'getQuote not yet called'); + }); + + it('should still not show quote after component initialized', () => { + fixture.detectChanges(); + // getQuote service is async => still has not returned with quote + expect(el.textContent).toBe('...', 'no quote yet'); + expect(spy.calls.any()).toBe(true, 'getQuote called'); + }); + + // #docregion async-test + it('should show quote after getQuote promise (async)', async(() => { + fixture.detectChanges(); + + fixture.whenStable().then(() => { // wait for async getQuote + fixture.detectChanges(); // update view with quote + expect(el.textContent).toBe(testQuote); + }); + })); + // #enddocregion async-test + + // #docregion fake-async-test + it('should show quote after getQuote promise (fakeAsync)', fakeAsync(() => { + fixture.detectChanges(); + tick(); // wait for async getQuote + fixture.detectChanges(); // update view with quote + expect(el.textContent).toBe(testQuote); + })); + // #enddocregion fake-async-test + // #enddocregion tests + + // #docregion done-test + it('should show quote after getQuote promise (done)', done => { + fixture.detectChanges(); + + // get the spy promise and wait for it to resolve + spy.calls.mostRecent().returnValue.then(() => { + fixture.detectChanges(); // update view with quote + expect(el.textContent).toBe(testQuote); + done(); + }); + }); + // #enddocregion done-test +}); diff --git a/aio/content/examples/testing/ts/src/app/shared/twain.component.timer.spec.ts.no-work b/aio/content/examples/testing/ts/src/app/shared/twain.component.timer.spec.ts.no-work new file mode 100644 index 0000000000..74dec3e766 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/shared/twain.component.timer.spec.ts.no-work @@ -0,0 +1,116 @@ +// #docplaster +// When AppComponent learns to present quote with intervalTimer +import { async, discardPeriodicTasks, fakeAsync, ComponentFixture, TestBed, tick } from '@angular/core/testing'; +import { By } from '@angular/platform-browser'; +import { DebugElement } from '@angular/core'; + +import { TwainService } from './model'; +import { TwainComponent } from './twain.component'; + +xdescribe('TwainComponent', () => { + + let comp: TwainComponent; + let fixture: ComponentFixture; + + const quotes = [ + 'Test Quote 1', + 'Test Quote 2', + 'Test Quote 3' + ]; + + let spy: jasmine.Spy; + let twainEl: DebugElement; // the element with the Twain quote + let twainService: TwainService; // the actually injected service + + function getQuote() { return twainEl.nativeElement.textContent; } + + // #docregion setup + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [ TwainComponent ], + providers: [ TwainService ], + }); + + fixture = TestBed.createComponent(TwainComponent); + comp = fixture.componentInstance; + + // TwainService actually injected into the component + twainService = fixture.debugElement.injector.get(TwainService); + + // Setup spy on the `getQuote` method + spy = spyOn(twainService, 'getQuote') + .and.returnValues(...quotes.map(q => Promise.resolve(q))); + + // Get the Twain quote element by CSS selector (e.g., by class name) + twainEl = fixture.debugElement.query(By.css('.twain')); + }); + + afterEach(() => { + // destroy component to stop the component timer + fixture.destroy(); + }); + // #enddocregion setup + + // #docregion tests + it('should not show quote before OnInit', () => { + expect(getQuote()).toBe(''); + }); + + it('should still not show quote after component initialized', () => { + // because the getQuote service is async + fixture.detectChanges(); // trigger data binding + expect(getQuote()).toContain('not initialized'); + }); + + // WIP + // If go this way, add jasmine.clock().uninstall(); to afterEach + // it('should show quote after Angular "settles"', async(() => { + // //jasmine.clock().install(); + // fixture.detectChanges(); // trigger data binding + // fixture.whenStable().then(() => { + // fixture.detectChanges(); // update view with the quote + // expect(getQuote()).toBe(quotes[0]); + // }); + // // jasmine.clock().tick(5000); + // // fixture.whenStable().then(() => { + // // fixture.detectChanges(); // update view with the quote + // // expect(getQuote()).toBe(quotes[1]); + // // }); + // })); + + it('should show quote after getQuote promise returns', fakeAsync(() => { + fixture.detectChanges(); // trigger data binding + tick(); // wait for first async getQuote to return + fixture.detectChanges(); // update view with the quote + expect(getQuote()).toBe(quotes[0]); + + // destroy component to stop the component timer before test ends + // else test errors because still have timer in the queue + fixture.destroy(); + })); + + it('should show 2nd quote after 5 seconds pass', fakeAsync(() => { + fixture.detectChanges(); // trigger data binding + tick(5000); // wait for second async getQuote to return + fixture.detectChanges(); // update view with the quote + expect(getQuote()).toBe(quotes[1]); + + // still have intervalTimer queuing requres + // discardPeriodicTasks() else test errors + discardPeriodicTasks(); + })); + + fit('should show 3rd quote after 10 seconds pass', fakeAsync(() => { + fixture.detectChanges(); // trigger data binding + tick(5000); // wait for second async getQuote to return + fixture.detectChanges(); // update view with the 2nd quote + tick(5000); // wait for third async getQuote to return + fixture.detectChanges(); // update view with the 3rd quote + expect(getQuote()).toBe(quotes[2]); + + // still have intervalTimer queuing requres + // discardPeriodicTasks() else test errors + discardPeriodicTasks(); + })); + // #enddocregion tests +}); diff --git a/aio/content/examples/testing/ts/src/app/shared/twain.component.timer.ts.no-work b/aio/content/examples/testing/ts/src/app/shared/twain.component.timer.ts.no-work new file mode 100644 index 0000000000..d3dc1f205d --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/shared/twain.component.timer.ts.no-work @@ -0,0 +1,27 @@ +// #docregion +import { Component, OnInit, OnDestroy } from '@angular/core'; + +import { TwainService } from './twain.service'; + +@Component({ + selector: 'twain-quote', + template: '

    {{quote}}

    ' +}) +export class TwainComponent implements OnInit, OnDestroy { + intervalId: number; + quote = '-- not initialized yet --'; + constructor(private twainService: TwainService) { } + + getQuote() { + this.twainService.getQuote().then(quote => this.quote = quote); + } + + ngOnInit(): void { + this.getQuote(); + this.intervalId = window.setInterval(() => this.getQuote(), 5000); + } + + ngOnDestroy(): void { + clearInterval(this.intervalId); + } +} diff --git a/aio/content/examples/testing/ts/src/app/shared/twain.component.ts b/aio/content/examples/testing/ts/src/app/shared/twain.component.ts new file mode 100644 index 0000000000..29f24459ab --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/shared/twain.component.ts @@ -0,0 +1,20 @@ +// #docregion +import { Component, OnInit } from '@angular/core'; + +import { TwainService } from './twain.service'; + +// #docregion component +@Component({ + selector: 'twain-quote', + template: '

    {{quote}}

    ' +}) +export class TwainComponent implements OnInit { + intervalId: number; + quote = '...'; + constructor(private twainService: TwainService) { } + + ngOnInit(): void { + this.twainService.getQuote().then(quote => this.quote = quote); + } +} +// #enddocregion component diff --git a/aio/content/examples/testing/ts/src/app/shared/twain.service.ts b/aio/content/examples/testing/ts/src/app/shared/twain.service.ts new file mode 100644 index 0000000000..9e394df1ee --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/shared/twain.service.ts @@ -0,0 +1,32 @@ +import { Injectable } from '@angular/core'; + +const quotes = [ +'Always do right. This will gratify some people and astonish the rest.', +'I have never let my schooling interfere with my education.', +'Don\'t go around saying the world owes you a living. The world owes you nothing. It was here first.', +'Whenever you find yourself on the side of the majority, it is time to pause and reflect.', +'If you tell the truth, you don\'t have to remember anything.', +'Clothes make the man. Naked people have little or no influence on society.', +'It\'s not the size of the dog in the fight, it\'s the size of the fight in the dog.', +'Truth is stranger than fiction, but it is because Fiction is obliged to stick to possibilities; Truth isn\'t.', +'The man who does not read good books has no advantage over the man who cannot read them.', +'Get your facts first, and then you can distort them as much as you please.', +]; + +@Injectable() +export class TwainService { + private next = 0; + + // Imaginary todo: get quotes from a remote quote service + // returns quote after delay simulating server latency + getQuote(): Promise { + return new Promise(resolve => { + setTimeout( () => resolve(this.nextQuote()), 500 ); + }); + } + + private nextQuote() { + if (this.next === quotes.length) { this.next = 0; } + return quotes[ this.next++ ]; + } +} diff --git a/aio/content/examples/testing/ts/src/app/welcome.component.spec.ts b/aio/content/examples/testing/ts/src/app/welcome.component.spec.ts new file mode 100644 index 0000000000..e506dda396 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/welcome.component.spec.ts @@ -0,0 +1,108 @@ +// #docplaster +import { ComponentFixture, inject, TestBed } from '@angular/core/testing'; +import { By } from '@angular/platform-browser'; +import { DebugElement } from '@angular/core'; + +import { UserService } from './model'; +import { WelcomeComponent } from './welcome.component'; + +describe('WelcomeComponent', () => { + + let comp: WelcomeComponent; + let fixture: ComponentFixture; + let componentUserService: UserService; // the actually injected service + let userService: UserService; // the TestBed injected service + let de: DebugElement; // the DebugElement with the welcome message + let el: HTMLElement; // the DOM element with the welcome message + + let userServiceStub: { + isLoggedIn: boolean; + user: { name: string} + }; + + // #docregion setup + beforeEach(() => { + // stub UserService for test purposes + // #docregion user-service-stub + userServiceStub = { + isLoggedIn: true, + user: { name: 'Test User'} + }; + // #enddocregion user-service-stub + + // #docregion config-test-module + TestBed.configureTestingModule({ + declarations: [ WelcomeComponent ], + // #enddocregion setup + // providers: [ UserService ] // NO! Don't provide the real service! + // Provide a test-double instead + // #docregion setup + providers: [ {provide: UserService, useValue: userServiceStub } ] + }); + // #enddocregion config-test-module + + fixture = TestBed.createComponent(WelcomeComponent); + comp = fixture.componentInstance; + + // #enddocregion setup + // #docregion injected-service + // UserService actually injected into the component + userService = fixture.debugElement.injector.get(UserService); + // #enddocregion injected-service + componentUserService = userService; + // #docregion setup + // #docregion inject-from-testbed + // UserService from the root injector + userService = TestBed.get(UserService); + // #enddocregion inject-from-testbed + + // get the "welcome" element by CSS selector (e.g., by class name) + de = fixture.debugElement.query(By.css('.welcome')); + el = de.nativeElement; + }); + // #enddocregion setup + + // #docregion tests + it('should welcome the user', () => { + fixture.detectChanges(); + const content = el.textContent; + expect(content).toContain('Welcome', '"Welcome ..."'); + expect(content).toContain('Test User', 'expected name'); + }); + + it('should welcome "Bubba"', () => { + userService.user.name = 'Bubba'; // welcome message hasn't been shown yet + fixture.detectChanges(); + expect(el.textContent).toContain('Bubba'); + }); + + it('should request login if not logged in', () => { + userService.isLoggedIn = false; // welcome message hasn't been shown yet + fixture.detectChanges(); + const content = el.textContent; + expect(content).not.toContain('Welcome', 'not welcomed'); + expect(content).toMatch(/log in/i, '"log in"'); + }); + // #enddocregion tests + + // #docregion inject-it + it('should inject the component\'s UserService instance', + inject([UserService], (service: UserService) => { + expect(service).toBe(componentUserService); + })); + // #enddocregion inject-it + + it('TestBed and Component UserService should be the same', () => { + expect(userService === componentUserService).toBe(true); + }); + + // #docregion stub-not-injected + it('stub object and injected UserService should not be the same', () => { + expect(userServiceStub === userService).toBe(false); + + // Changing the stub object has no effect on the injected service + userServiceStub.isLoggedIn = false; + expect(userService.isLoggedIn).toBe(true); + }); + // #enddocregion stub-not-injected +}); diff --git a/aio/content/examples/testing/ts/src/app/welcome.component.ts b/aio/content/examples/testing/ts/src/app/welcome.component.ts new file mode 100644 index 0000000000..35958cc5c9 --- /dev/null +++ b/aio/content/examples/testing/ts/src/app/welcome.component.ts @@ -0,0 +1,18 @@ +// #docregion +import { Component, OnInit } from '@angular/core'; +import { UserService } from './model'; + +@Component({ + selector: 'app-welcome', + template: '

    {{welcome}}

    ' +}) +export class WelcomeComponent implements OnInit { + welcome = '-- not initialized yet --'; + constructor(private userService: UserService) { } + + ngOnInit(): void { + this.welcome = this.userService.isLoggedIn ? + 'Welcome, ' + this.userService.user.name : + 'Please log in.'; + } +} diff --git a/aio/content/examples/testing/ts/src/bag-specs.html b/aio/content/examples/testing/ts/src/bag-specs.html new file mode 100644 index 0000000000..89b46f7056 --- /dev/null +++ b/aio/content/examples/testing/ts/src/bag-specs.html @@ -0,0 +1,42 @@ + + + + + + + Specs Bag + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/aio/content/examples/testing/ts/src/bag.html b/aio/content/examples/testing/ts/src/bag.html new file mode 100644 index 0000000000..3e0fcb9025 --- /dev/null +++ b/aio/content/examples/testing/ts/src/bag.html @@ -0,0 +1,26 @@ + + + + + + Specs Bag + + + + + + + + + + + + + + + + Loading ... + + diff --git a/aio/content/examples/testing/ts/src/banner-inline-specs.html b/aio/content/examples/testing/ts/src/banner-inline-specs.html new file mode 100644 index 0000000000..2a512a5647 --- /dev/null +++ b/aio/content/examples/testing/ts/src/banner-inline-specs.html @@ -0,0 +1,40 @@ + + + + + + + Banner Component (inline template) Specs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/aio/content/examples/testing/ts/src/banner-specs.html b/aio/content/examples/testing/ts/src/banner-specs.html new file mode 100644 index 0000000000..d16dd977a4 --- /dev/null +++ b/aio/content/examples/testing/ts/src/banner-specs.html @@ -0,0 +1,40 @@ + + + + + + + Banner Component Specs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/aio/content/examples/testing/ts/src/browser-test-shim.js b/aio/content/examples/testing/ts/src/browser-test-shim.js new file mode 100644 index 0000000000..ee21831e22 --- /dev/null +++ b/aio/content/examples/testing/ts/src/browser-test-shim.js @@ -0,0 +1,87 @@ +// BROWSER TESTING SHIM +// Keep it in-sync with what karma-test-shim does +// #docregion +/*global jasmine, __karma__, window*/ +(function () { + +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 = 3000; + +var baseURL = document.baseURI; +baseURL = baseURL + baseURL[baseURL.length-1] ? '' : '/'; + +System.config({ + baseURL: baseURL, + // 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(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( + 'Note: System.import could not load "systemjs.config.extras.js" where you might have added more configuration. It is an optional file so we will continue 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()); + }) +} + +// Import all spec files defined in the html (__spec_files__) +// and start Jasmine testrunner +function initTesting () { + console.log('loading spec files: '+__spec_files__.join(', ')); + return Promise.all( + __spec_files__.map(function(spec) { + return System.import(spec); + }) + ) + // After all imports load, re-execute `window.onload` which + // triggers the Jasmine test-runner start or explain what went wrong + .then(success, console.error.bind(console)); + + function success () { + console.log('Spec files loaded; starting Jasmine testrunner'); + window.onload(); + } +} + +})(); diff --git a/aio/content/examples/testing/ts/src/index.html b/aio/content/examples/testing/ts/src/index.html new file mode 100644 index 0000000000..fff2464efc --- /dev/null +++ b/aio/content/examples/testing/ts/src/index.html @@ -0,0 +1,27 @@ + + + + + + App Under Test + + + + + + + + + + + + + + + + + Loading... + + diff --git a/aio/content/examples/testing/ts/src/main.ts b/aio/content/examples/testing/ts/src/main.ts new file mode 100644 index 0000000000..fadce2f3c1 --- /dev/null +++ b/aio/content/examples/testing/ts/src/main.ts @@ -0,0 +1,5 @@ +// main app entry point +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/testing/ts/src/testing/index.ts b/aio/content/examples/testing/ts/src/testing/index.ts new file mode 100644 index 0000000000..e3de5164ca --- /dev/null +++ b/aio/content/examples/testing/ts/src/testing/index.ts @@ -0,0 +1,43 @@ +import { DebugElement } from '@angular/core'; +import { tick, ComponentFixture } from '@angular/core/testing'; + +export * from './jasmine-matchers'; +export * from './router-stubs'; + +///// Short utilities ///// + +/** Wait a tick, then detect changes */ +export function advance(f: ComponentFixture): void { + tick(); + f.detectChanges(); +} + +/** + * Create custom DOM event the old fashioned way + * + * https://developer.mozilla.org/en-US/docs/Web/API/Event/initEvent + * Although officially deprecated, some browsers (phantom) don't accept the preferred "new Event(eventName)" + */ +export function newEvent(eventName: string, bubbles = false, cancelable = false) { + let evt = document.createEvent('CustomEvent'); // MUST be 'CustomEvent' + evt.initCustomEvent(eventName, bubbles, cancelable, null); + return evt; +} + +// See https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/button +// #docregion click-event +/** Button events to pass to `DebugElement.triggerEventHandler` for RouterLink event handler */ +export const ButtonClickEvents = { + left: { button: 0 }, + right: { button: 2 } +}; + +/** Simulate element click. Defaults to mouse left-button click event. */ +export function click(el: DebugElement | HTMLElement, eventObj: any = ButtonClickEvents.left): void { + if (el instanceof HTMLElement) { + el.click(); + } else { + el.triggerEventHandler('click', eventObj); + } +} +// #enddocregion click-event diff --git a/aio/content/examples/testing/ts/src/testing/jasmine-matchers.d.ts b/aio/content/examples/testing/ts/src/testing/jasmine-matchers.d.ts new file mode 100644 index 0000000000..f1c5acf77c --- /dev/null +++ b/aio/content/examples/testing/ts/src/testing/jasmine-matchers.d.ts @@ -0,0 +1,5 @@ +declare namespace jasmine { + interface Matchers { + toHaveText(actual: any, expectationFailOutput?: any): jasmine.CustomMatcher; + } +} diff --git a/aio/content/examples/testing/ts/src/testing/jasmine-matchers.ts b/aio/content/examples/testing/ts/src/testing/jasmine-matchers.ts new file mode 100644 index 0000000000..4cab02e148 --- /dev/null +++ b/aio/content/examples/testing/ts/src/testing/jasmine-matchers.ts @@ -0,0 +1,45 @@ +/// + +//// Jasmine Custom Matchers //// +// Be sure to extend jasmine-matchers.d.ts when adding matchers + +export function addMatchers(): void { + jasmine.addMatchers({ + toHaveText: toHaveText + }); +} + +function toHaveText(): jasmine.CustomMatcher { + return { + compare: function (actual: any, expectedText: string, expectationFailOutput?: any): jasmine.CustomMatcherResult { + const actualText = elementText(actual); + const pass = actualText.indexOf(expectedText) > -1; + const message = pass ? '' : composeMessage(); + return { pass, message }; + + function composeMessage () { + const a = (actualText.length < 100 ? actualText : actualText.substr(0, 100) + '...'); + const efo = expectationFailOutput ? ` '${expectationFailOutput}'` : ''; + return `Expected element to have text content '${expectedText}' instead of '${a}'${efo}`; + } + } + }; +} + +function elementText(n: any): string { + if (n instanceof Array) { + return n.map(elementText).join(''); + } + + if (n.nodeType === Node.COMMENT_NODE) { + return ''; + } + + if (n.nodeType === Node.ELEMENT_NODE && n.hasChildNodes()) { + return elementText(Array.prototype.slice.call(n.childNodes)); + } + + if (n.nativeElement) { n = n.nativeElement; } + + return n.textContent; +} diff --git a/aio/content/examples/testing/ts/src/testing/router-stubs.ts b/aio/content/examples/testing/ts/src/testing/router-stubs.ts new file mode 100644 index 0000000000..75a2858f65 --- /dev/null +++ b/aio/content/examples/testing/ts/src/testing/router-stubs.ts @@ -0,0 +1,57 @@ + // export for convenience. +export { ActivatedRoute, Router, RouterLink, RouterOutlet} from '@angular/router'; + +import { Component, Directive, Injectable, Input } from '@angular/core'; +import { NavigationExtras } from '@angular/router'; + +// #docregion router-link +@Directive({ + selector: '[routerLink]', + host: { + '(click)': 'onClick()' + } +}) +export class RouterLinkStubDirective { + @Input('routerLink') linkParams: any; + navigatedTo: any = null; + + onClick() { + this.navigatedTo = this.linkParams; + } +} +// #enddocregion router-link + +@Component({selector: 'router-outlet', template: ''}) +export class RouterOutletStubComponent { } + +@Injectable() +export class RouterStub { + navigate(commands: any[], extras?: NavigationExtras) { } +} + + +// Only implements params and part of snapshot.params +// #docregion activated-route-stub +import { BehaviorSubject } from 'rxjs/BehaviorSubject'; + +@Injectable() +export class ActivatedRouteStub { + + // ActivatedRoute.params is Observable + private subject = new BehaviorSubject(this.testParams); + params = this.subject.asObservable(); + + // Test parameters + private _testParams: {}; + get testParams() { return this._testParams; } + set testParams(params: {}) { + this._testParams = params; + this.subject.next(params); + } + + // ActivatedRoute.snapshot.params + get snapshot() { + return { params: this.testParams }; + } +} +// #enddocregion activated-route-stub diff --git a/aio/content/examples/toh-1/dart-snippets/app_component_snippets_pt1.dart b/aio/content/examples/toh-1/dart-snippets/app_component_snippets_pt1.dart new file mode 100644 index 0000000000..3bfa89762d --- /dev/null +++ b/aio/content/examples/toh-1/dart-snippets/app_component_snippets_pt1.dart @@ -0,0 +1,37 @@ +// #docregion show-hero +template: '

    {{title}}

    {{hero}} details!

    ' +// #enddocregion show-hero + +// #docregion show-hero-2 +template: '

    {{title}}

    {{hero.name}} details!

    ' +// #enddocregion show-hero-2 + +// #docregion show-hero-properties +template: '

    {{title}}

    {{hero.name}} details!

    {{hero.id}}
    {{hero.name}}
    ' +// #enddocregion show-hero-properties + +// #docregion multi-line-strings +template: ''' +

    {{title}}

    +

    {{hero.name}} details!

    +
    {{hero.id}}
    +
    {{hero.name}}
    ''' +// #enddocregion multi-line-strings + +// #docregion editing-Hero +template: ''' +

    {{title}}

    +

    {{hero.name}} details!

    +
    {{hero.id}}
    +
    + + +
    ''' +// #enddocregion editing-Hero + +// #docregion app-component-1 +class AppComponent { + String title = 'Tour of Heroes'; + var hero = 'Windstorm'; +} +// #enddocregion app-component-1 diff --git a/aio/content/examples/toh-1/e2e-spec.ts b/aio/content/examples/toh-1/e2e-spec.ts new file mode 100644 index 0000000000..75f99788a6 --- /dev/null +++ b/aio/content/examples/toh-1/e2e-spec.ts @@ -0,0 +1,70 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by, ElementFinder } from 'protractor'; +import { promise } from 'selenium-webdriver'; + +const expectedH1 = 'Tour of Heroes'; +const expectedTitle = `Angular ${expectedH1}`; + +class Hero { + id: number; + name: string; + + // Factory method + // Get hero id and name from the given detail element. + static async fromDetail(detail: ElementFinder): Promise { + // Get hero id from the first
    + let _id = await detail.all(by.css('div')).first().getText(); + // Get name from the h2 + let _name = await detail.element(by.css('h2')).getText(); + return { + id: +_id.substr(_id.indexOf(' ') + 1), + name: _name.substr(0, _name.lastIndexOf(' ')) + }; + } +} + +const nameSuffix = 'X'; +function addToHeroName(text: string): promise.Promise { + let input = element(by.css('input')); + return input.sendKeys(text); +} + +describe('Tutorial part 1', () => { + + const expectedHero = { id: 1, name: 'Windstorm' }; + + beforeAll(() => browser.get('')); + + it(`has title '${expectedTitle}'`, () => { + expect(browser.getTitle()).toEqual(expectedTitle); + }); + + it(`has h1 '${expectedH1}'`, () => { + let hText = element(by.css('h1')).getText(); + expect(hText).toEqual(expectedH1, 'h1'); + }); + + it(`shows initial hero details`, async () => { + let page = getPageElts(); + let hero = await Hero.fromDetail(page.heroDetail); + expect(hero.id).toEqual(expectedHero.id); + expect(hero.name).toEqual(expectedHero.name); + }); + + it(`shows updated hero name`, async () => { + addToHeroName(nameSuffix); + let page = getPageElts(); + let hero = await Hero.fromDetail(page.heroDetail); + let newName = expectedHero.name + nameSuffix; + expect(hero.id).toEqual(expectedHero.id); + expect(hero.name).toEqual(newName); + }); + +}); + +function getPageElts() { + return { + heroDetail: element(by.css('my-app')) + }; +} diff --git a/aio/content/examples/toh-1/ts-snippets/app.component.snippets.pt1.ts b/aio/content/examples/toh-1/ts-snippets/app.component.snippets.pt1.ts new file mode 100644 index 0000000000..05180b0c83 --- /dev/null +++ b/aio/content/examples/toh-1/ts-snippets/app.component.snippets.pt1.ts @@ -0,0 +1,39 @@ +// #docregion show-hero +template: '

    {{title}}

    {{hero}} details!

    ' +// #enddocregion show-hero + +// #docregion show-hero-2 +template: '

    {{title}}

    {{hero.name}} details!

    ' +// #enddocregion show-hero-2 + +// #docregion show-hero-properties +template: '

    {{title}}

    {{hero.name}} details!

    {{hero.id}}
    {{hero.name}}
    ' +// #enddocregion show-hero-properties + +// #docregion multi-line-strings +template:` +

    {{title}}

    +

    {{hero.name}} details!

    +
    {{hero.id}}
    +
    {{hero.name}}
    + ` +// #enddocregion multi-line-strings + +// #docregion editing-Hero +template:` +

    {{title}}

    +

    {{hero.name}} details!

    +
    {{hero.id}}
    +
    + + +
    + ` +// #enddocregion editing-Hero + +// #docregion app-component-1 +export class AppComponent { + title = 'Tour of Heroes'; + hero = 'Windstorm'; +} +// #enddocregion app-component-1 diff --git a/aio/content/examples/toh-1/ts/example-config.json b/aio/content/examples/toh-1/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/toh-1/ts/plnkr.json b/aio/content/examples/toh-1/ts/plnkr.json new file mode 100644 index 0000000000..b5d016f282 --- /dev/null +++ b/aio/content/examples/toh-1/ts/plnkr.json @@ -0,0 +1,9 @@ +{ + "description": "Tour of Heroes: Part 1", + "basePath": "src/", + "files":[ + "!**/*.d.ts", + "!**/*.js" + ], + "tags": ["tutorial", "tour", "heroes"] +} diff --git a/aio/content/examples/toh-1/ts/plnkr.no-link.html b/aio/content/examples/toh-1/ts/plnkr.no-link.html new file mode 100644 index 0000000000..47d25fa4af --- /dev/null +++ b/aio/content/examples/toh-1/ts/plnkr.no-link.html @@ -0,0 +1,215 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/toh-1/ts/src/app/app.component.ts b/aio/content/examples/toh-1/ts/src/app/app.component.ts new file mode 100644 index 0000000000..b61fac3c0b --- /dev/null +++ b/aio/content/examples/toh-1/ts/src/app/app.component.ts @@ -0,0 +1,32 @@ +// #docregion pt1 +import { Component } from '@angular/core'; + +// #docregion hero-class-1 +export class Hero { + id: number; + name: string; +} +// #enddocregion hero-class-1 + +@Component({ + selector: 'my-app', + template: ` +

    {{title}}

    +

    {{hero.name}} details!

    +
    {{hero.id}}
    +
    + + +
    + ` +}) +export class AppComponent { + title = 'Tour of Heroes'; + // #docregion hero-property-1 + hero: Hero = { + id: 1, + name: 'Windstorm' + }; + // #enddocregion hero-property-1 +} +// #enddocregion pt1 diff --git a/aio/content/examples/toh-1/ts/src/app/app.module.ts b/aio/content/examples/toh-1/ts/src/app/app.module.ts new file mode 100644 index 0000000000..4c0b77ea48 --- /dev/null +++ b/aio/content/examples/toh-1/ts/src/app/app.module.ts @@ -0,0 +1,18 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { FormsModule } from '@angular/forms'; + +import { AppComponent } from './app.component'; + +@NgModule({ + imports: [ + BrowserModule, + FormsModule + ], + declarations: [ + AppComponent + ], + bootstrap: [ AppComponent ] +}) +export class AppModule { } diff --git a/aio/content/examples/toh-1/ts/src/index.html b/aio/content/examples/toh-1/ts/src/index.html new file mode 100644 index 0000000000..a217238c6c --- /dev/null +++ b/aio/content/examples/toh-1/ts/src/index.html @@ -0,0 +1,25 @@ + + + + Angular Tour of Heroes + + + + + + + + + + + + + + + + + Loading... + + diff --git a/aio/content/examples/toh-1/ts/src/main.ts b/aio/content/examples/toh-1/ts/src/main.ts new file mode 100644 index 0000000000..80ece654a5 --- /dev/null +++ b/aio/content/examples/toh-1/ts/src/main.ts @@ -0,0 +1,6 @@ +// #docregion +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); +// #enddocregion diff --git a/aio/content/examples/toh-2/dart-snippets/app_component_snippets_pt2.dart b/aio/content/examples/toh-2/dart-snippets/app_component_snippets_pt2.dart new file mode 100644 index 0000000000..9f805c5bc5 --- /dev/null +++ b/aio/content/examples/toh-2/dart-snippets/app_component_snippets_pt2.dart @@ -0,0 +1,69 @@ +// #docregion ng-for +
  • + {{hero.id}} {{hero.name}} +
  • +// #enddocregion ng-for + +// #docregion heroes-styled +

    My Heroes

    +
      +
    • + {{hero.id}} {{hero.name}} +
    • +
    +// #enddocregion heroes-styled + +// #docregion selectedHero-click +
  • + {{hero.id}} {{hero.name}} +
  • +// #enddocregion selectedHero-click + +// #docregion selectedHero-details +

    {{selectedHero.name}} details!

    +
    {{selectedHero.id}}
    +
    + + +
    +// #enddocregion selectedHero-details + +// #docregion ng-if +
    +

    {{selectedHero.name}} details!

    +
    {{selectedHero.id}}
    +
    + + +
    +
    +// #enddocregion ng-if + +// #docregion hero-array-1 +final List heroes = mockHeroes; +// #enddocregion hero-array-1 + +// #docregion heroes-template-1 +

    My Heroes

    +
      +
    • + +
    • +
    +// #enddocregion heroes-template-1 + +// #docregion heroes-ngfor-1 +
  • +// #enddocregion heroes-ngfor-1 + +// #docregion class-selected-1 +[class.selected]="hero == selectedHero" +// #enddocregion class-selected-1 + +// #docregion class-selected-2 +
  • + {{hero.id}} {{hero.name}} +
  • +// #enddocregion class-selected-2 diff --git a/aio/content/examples/toh-2/e2e-spec.ts b/aio/content/examples/toh-2/e2e-spec.ts new file mode 100644 index 0000000000..b5df938cd3 --- /dev/null +++ b/aio/content/examples/toh-2/e2e-spec.ts @@ -0,0 +1,133 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by, ElementFinder } from 'protractor'; +import { promise } from 'selenium-webdriver'; + +const expectedH1 = 'Tour of Heroes'; +const expectedTitle = `Angular ${expectedH1}`; +const expectedH2 = 'My Heroes'; +const targetHero = { id: 16, name: 'RubberMan' }; +const nameSuffix = 'X'; + +class Hero { + id: number; + name: string; + + // Factory methods + + // Get hero from s formatted as ' '. + static fromString(s: string): Hero { + return { + id: +s.substr(0, s.indexOf(' ')), + name: s.substr(s.indexOf(' ') + 1), + }; + } + + // Get hero id and name from the given detail element. + static async fromDetail(detail: ElementFinder): Promise { + // Get hero id from the first
    + let _id = await detail.all(by.css('div')).first().getText(); + // Get name from the h2 + let _name = await detail.element(by.css('h2')).getText(); + return { + id: +_id.substr(_id.indexOf(' ') + 1), + name: _name.substr(0, _name.lastIndexOf(' ')) + }; + } +} + +describe('Tutorial part 2', () => { + beforeAll(() => browser.get('')); + describe('Initial page', initialPageTests); + describe('Select hero', selectHeroTests); + describe('Update hero', updateHeroTests); +}); + +function initialPageTests() { + it(`has title '${expectedTitle}'`, () => { + expect(browser.getTitle()).toEqual(expectedTitle); + }); + + it(`has h1 '${expectedH1}'`, () => { + expectHeading(1, expectedH1); + }); + + it(`has h2 '${expectedH2}'`, () => { + expectHeading(2, expectedH2); + }); + + it('has the right number of heroes', () => { + let page = getPageElts(); + expect(page.heroes.count()).toEqual(10); + }); + + it('has no selected hero and no hero details', function () { + let page = getPageElts(); + expect(page.selected.isPresent()).toBeFalsy('selected hero'); + expect(page.heroDetail.isPresent()).toBeFalsy('no hero detail'); + }); +} + +function selectHeroTests() { + it(`selects ${targetHero.name} from hero list`, function () { + let hero = element(by.cssContainingText('li span.badge', targetHero.id.toString())); + hero.click(); + // Nothing specific to expect other than lack of exceptions. + }); + + it(`has selected ${targetHero.name}`, function () { + let page = getPageElts(); + let expectedText = `${targetHero.id} ${targetHero.name}`; + expect(page.selected.getText()).toBe(expectedText); + }); + + it('shows selected hero details', async () => { + let page = getPageElts(); + let hero = await Hero.fromDetail(page.heroDetail); + expect(hero.id).toEqual(targetHero.id); + expect(hero.name).toEqual(targetHero.name); + }); +} + +function updateHeroTests() { + it(`can update hero name`, () => { + addToHeroName(nameSuffix); + // Nothing specific to expect other than lack of exceptions. + }); + + it(`shows updated hero name in details`, async () => { + let page = getPageElts(); + let hero = await Hero.fromDetail(page.heroDetail); + let newName = targetHero.name + nameSuffix; + expect(hero.id).toEqual(targetHero.id); + expect(hero.name).toEqual(newName); + }); + + it(`shows updated hero name in list`, async () => { + let page = getPageElts(); + let hero = Hero.fromString(await page.selected.getText()); + let newName = targetHero.name + nameSuffix; + expect(hero.id).toEqual(targetHero.id); + expect(hero.name).toEqual(newName); + }); + +} + +function addToHeroName(text: string): promise.Promise { + let input = element(by.css('input')); + return input.sendKeys(text); +} + +function expectHeading(hLevel: number, expectedText: string): void { + let hTag = `h${hLevel}`; + let hText = element(by.css(hTag)).getText(); + expect(hText).toEqual(expectedText, hTag); +}; + +function getPageElts() { + return { + heroes: element.all(by.css('my-app li')), + selected: element(by.css('my-app li.selected')), + heroDetail: element(by.css('my-app > div, my-app > my-hero-detail > div')) + }; +} diff --git a/aio/content/examples/toh-2/ts-snippets/app.component.snippets.pt2.ts b/aio/content/examples/toh-2/ts-snippets/app.component.snippets.pt2.ts new file mode 100644 index 0000000000..801c550130 --- /dev/null +++ b/aio/content/examples/toh-2/ts-snippets/app.component.snippets.pt2.ts @@ -0,0 +1,69 @@ +// #docregion ng-for +
  • + {{hero.id}} {{hero.name}} +
  • +// #enddocregion ng-for + +// #docregion heroes-styled +

    My Heroes

    +
      +
    • + {{hero.id}} {{hero.name}} +
    • +
    +// #enddocregion heroes-styled + +// #docregion selectedHero-click +
  • + {{hero.id}} {{hero.name}} +
  • +// #enddocregion selectedHero-click + +// #docregion selectedHero-details +

    {{selectedHero.name}} details!

    +
    {{selectedHero.id}}
    +
    + + +
    +// #enddocregion selectedHero-details + +// #docregion ng-if +
    +

    {{selectedHero.name}} details!

    +
    {{selectedHero.id}}
    +
    + + +
    +
    +// #enddocregion ng-if + +// #docregion hero-array-1 +heroes = HEROES; +// #enddocregion hero-array-1 + +// #docregion heroes-template-1 +

    My Heroes

    +
      +
    • + +
    • +
    +// #enddocregion heroes-template-1 + +// #docregion heroes-ngfor-1 +
  • +// #enddocregion heroes-ngfor-1 + +// #docregion class-selected-1 +[class.selected]="hero === selectedHero" +// #enddocregion class-selected-1 + +// #docregion class-selected-2 +
  • + {{hero.id}} {{hero.name}} +
  • +// #enddocregion class-selected-2 diff --git a/aio/content/examples/toh-2/ts/example-config.json b/aio/content/examples/toh-2/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/toh-2/ts/plnkr.json b/aio/content/examples/toh-2/ts/plnkr.json new file mode 100644 index 0000000000..19c4e7f720 --- /dev/null +++ b/aio/content/examples/toh-2/ts/plnkr.json @@ -0,0 +1,9 @@ +{ + "description": "Tour of Heroes: Part 2", + "basePath": "src/", + "files":[ + "!**/*.d.ts", + "!**/*.js" + ], + "tags": ["tutorial", "tour", "heroes"] +} diff --git a/aio/content/examples/toh-2/ts/plnkr.no-link.html b/aio/content/examples/toh-2/ts/plnkr.no-link.html new file mode 100644 index 0000000000..254fbe58d8 --- /dev/null +++ b/aio/content/examples/toh-2/ts/plnkr.no-link.html @@ -0,0 +1,289 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/toh-2/ts/src/app/app.component.ts b/aio/content/examples/toh-2/ts/src/app/app.component.ts new file mode 100644 index 0000000000..3e7c86f150 --- /dev/null +++ b/aio/content/examples/toh-2/ts/src/app/app.component.ts @@ -0,0 +1,109 @@ +// #docregion +import { Component } from '@angular/core'; + +export class Hero { + id: number; + name: string; +} + +// #docregion hero-array +const HEROES: Hero[] = [ + { id: 11, name: 'Mr. Nice' }, + { id: 12, name: 'Narco' }, + { id: 13, name: 'Bombasto' }, + { id: 14, name: 'Celeritas' }, + { id: 15, name: 'Magneta' }, + { id: 16, name: 'RubberMan' }, + { id: 17, name: 'Dynama' }, + { id: 18, name: 'Dr IQ' }, + { id: 19, name: 'Magma' }, + { id: 20, name: 'Tornado' } +]; +// #enddocregion hero-array + +@Component({ + selector: 'my-app', + template: ` +

    {{title}}

    +

    My Heroes

    +
      +
    • + {{hero.id}} {{hero.name}} +
    • +
    +
    +

    {{selectedHero.name}} details!

    +
    {{selectedHero.id}}
    +
    + + +
    +
    + `, + // #docregion styles + styles: [` + .selected { + background-color: #CFD8DC !important; + color: white; + } + .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 li.selected:hover { + background-color: #BBD8DC !important; + color: white; + } + .heroes li:hover { + color: #607D8B; + background-color: #DDD; + left: .1em; + } + .heroes .text { + position: relative; + top: -3px; + } + .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; + } + `] + // #enddocregion styles +}) +export class AppComponent { + title = 'Tour of Heroes'; + heroes = HEROES; + // #docregion selected-hero + selectedHero: Hero; + // #enddocregion selected-hero + + // #docregion on-select + onSelect(hero: Hero): void { + this.selectedHero = hero; + } + // #enddocregion on-select +} diff --git a/aio/content/examples/toh-2/ts/src/app/app.module.ts b/aio/content/examples/toh-2/ts/src/app/app.module.ts new file mode 100644 index 0000000000..4c0b77ea48 --- /dev/null +++ b/aio/content/examples/toh-2/ts/src/app/app.module.ts @@ -0,0 +1,18 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { FormsModule } from '@angular/forms'; + +import { AppComponent } from './app.component'; + +@NgModule({ + imports: [ + BrowserModule, + FormsModule + ], + declarations: [ + AppComponent + ], + bootstrap: [ AppComponent ] +}) +export class AppModule { } diff --git a/aio/content/examples/toh-2/ts/src/index.html b/aio/content/examples/toh-2/ts/src/index.html new file mode 100644 index 0000000000..a217238c6c --- /dev/null +++ b/aio/content/examples/toh-2/ts/src/index.html @@ -0,0 +1,25 @@ + + + + Angular Tour of Heroes + + + + + + + + + + + + + + + + + Loading... + + diff --git a/aio/content/examples/toh-2/ts/src/main.ts b/aio/content/examples/toh-2/ts/src/main.ts new file mode 100644 index 0000000000..80ece654a5 --- /dev/null +++ b/aio/content/examples/toh-2/ts/src/main.ts @@ -0,0 +1,6 @@ +// #docregion +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); +// #enddocregion diff --git a/aio/content/examples/toh-3/e2e-spec.ts b/aio/content/examples/toh-3/e2e-spec.ts new file mode 100644 index 0000000000..cce266dcaa --- /dev/null +++ b/aio/content/examples/toh-3/e2e-spec.ts @@ -0,0 +1,133 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by, ElementFinder } from 'protractor'; +import { promise } from 'selenium-webdriver'; + +const expectedH1 = 'Tour of Heroes'; +const expectedTitle = `Angular ${expectedH1}`; +const expectedH2 = 'My Heroes'; +const targetHero = { id: 16, name: 'RubberMan' }; +const nameSuffix = 'X'; + +class Hero { + id: number; + name: string; + + // Factory methods + + // Get hero from s formatted as ' '. + static fromString(s: string): Hero { + return { + id: +s.substr(0, s.indexOf(' ')), + name: s.substr(s.indexOf(' ') + 1), + }; + } + + // Get hero id and name from the given detail element. + static async fromDetail(detail: ElementFinder): Promise { + // Get hero id from the first
    + let _id = await detail.all(by.css('div')).first().getText(); + // Get name from the h2 + let _name = await detail.element(by.css('h2')).getText(); + return { + id: +_id.substr(_id.indexOf(' ') + 1), + name: _name.substr(0, _name.lastIndexOf(' ')) + }; + } +} + +describe('Tutorial part 3', () => { + beforeAll(() => browser.get('')); + describe('Initial page', initialPageTests); + describe('Select hero', selectHeroTests); + describe('Update hero', updateHeroTests); +}); + +function initialPageTests() { + it(`has title '${expectedTitle}'`, () => { + expect(browser.getTitle()).toEqual(expectedTitle); + }); + + it(`has h1 '${expectedH1}'`, () => { + expectHeading(1, expectedH1); + }); + + it(`has h2 '${expectedH2}'`, () => { + expectHeading(2, expectedH2); + }); + + it('has the right number of heroes', () => { + let page = getPageElts(); + expect(page.heroes.count()).toEqual(10); + }); + + it('has no selected hero and no hero details', function () { + let page = getPageElts(); + expect(page.selected.isPresent()).toBeFalsy('selected hero'); + expect(page.heroDetail.isPresent()).toBeFalsy('no hero detail'); + }); +} + +function selectHeroTests() { + it(`selects ${targetHero.name} from hero list`, function () { + let hero = element(by.cssContainingText('li span.badge', targetHero.id.toString())); + hero.click(); + // Nothing specific to expect other than lack of exceptions. + }); + + it(`has selected ${targetHero.name}`, function () { + let page = getPageElts(); + let expectedText = `${targetHero.id} ${targetHero.name}`; + expect(page.selected.getText()).toBe(expectedText); + }); + + it('shows selected hero details', async () => { + let page = getPageElts(); + let hero = await Hero.fromDetail(page.heroDetail); + expect(hero.id).toEqual(targetHero.id); + expect(hero.name).toEqual(targetHero.name); + }); +} + +function updateHeroTests() { + it(`can update hero name`, () => { + addToHeroName(nameSuffix); + // Nothing specific to expect other than lack of exceptions. + }); + + it(`shows updated hero name in details`, async () => { + let page = getPageElts(); + let hero = await Hero.fromDetail(page.heroDetail); + let newName = targetHero.name + nameSuffix; + expect(hero.id).toEqual(targetHero.id); + expect(hero.name).toEqual(newName); + }); + + it(`shows updated hero name in list`, async () => { + let page = getPageElts(); + let hero = Hero.fromString(await page.selected.getText()); + let newName = targetHero.name + nameSuffix; + expect(hero.id).toEqual(targetHero.id); + expect(hero.name).toEqual(newName); + }); + +} + +function addToHeroName(text: string): promise.Promise { + let input = element(by.css('input')); + return input.sendKeys(text); +} + +function expectHeading(hLevel: number, expectedText: string): void { + let hTag = `h${hLevel}`; + let hText = element(by.css(hTag)).getText(); + expect(hText).toEqual(expectedText, hTag); +}; + +function getPageElts() { + return { + heroes: element.all(by.css('my-app li')), + selected: element(by.css('my-app li.selected')), + heroDetail: element(by.css('my-app > div, my-app > my-hero-detail > div')) + }; +} diff --git a/aio/content/examples/toh-3/ts/example-config.json b/aio/content/examples/toh-3/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/toh-3/ts/plnkr.json b/aio/content/examples/toh-3/ts/plnkr.json new file mode 100644 index 0000000000..086f8bd05c --- /dev/null +++ b/aio/content/examples/toh-3/ts/plnkr.json @@ -0,0 +1,9 @@ +{ + "description": "Tour of Heroes: Part 3", + "basePath": "src/", + "files":[ + "!**/*.d.ts", + "!**/*.js" + ], + "tags": ["tutorial", "tour", "heroes"] +} diff --git a/aio/content/examples/toh-3/ts/plnkr.no-link.html b/aio/content/examples/toh-3/ts/plnkr.no-link.html new file mode 100644 index 0000000000..766bb4578e --- /dev/null +++ b/aio/content/examples/toh-3/ts/plnkr.no-link.html @@ -0,0 +1,318 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/toh-3/ts/src/app/app.component.ts b/aio/content/examples/toh-3/ts/src/app/app.component.ts new file mode 100644 index 0000000000..022efc31eb --- /dev/null +++ b/aio/content/examples/toh-3/ts/src/app/app.component.ts @@ -0,0 +1,95 @@ +// #docregion +import { Component } from '@angular/core'; + +// #docregion hero-import +import { Hero } from './hero'; +// #enddocregion hero-import + +const HEROES: Hero[] = [ + { id: 11, name: 'Mr. Nice' }, + { id: 12, name: 'Narco' }, + { id: 13, name: 'Bombasto' }, + { id: 14, name: 'Celeritas' }, + { id: 15, name: 'Magneta' }, + { id: 16, name: 'RubberMan' }, + { id: 17, name: 'Dynama' }, + { id: 18, name: 'Dr IQ' }, + { id: 19, name: 'Magma' }, + { id: 20, name: 'Tornado' } +]; + +@Component({ + selector: 'my-app', +// #docregion hero-detail-template + template: ` +

    {{title}}

    +

    My Heroes

    +
      +
    • + {{hero.id}} {{hero.name}} +
    • +
    + + `, +// #enddocregion hero-detail-template + styles: [` + .selected { + background-color: #CFD8DC !important; + color: white; + } + .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 li.selected:hover { + background-color: #BBD8DC !important; + color: white; + } + .heroes li:hover { + color: #607D8B; + background-color: #DDD; + left: .1em; + } + .heroes .text { + position: relative; + top: -3px; + } + .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; + } + `] +}) +export class AppComponent { + title = 'Tour of Heroes'; + heroes = HEROES; + selectedHero: Hero; + + onSelect(hero: Hero): void { + this.selectedHero = hero; + } +} diff --git a/aio/content/examples/toh-3/ts/src/app/app.module.ts b/aio/content/examples/toh-3/ts/src/app/app.module.ts new file mode 100644 index 0000000000..26b63938ad --- /dev/null +++ b/aio/content/examples/toh-3/ts/src/app/app.module.ts @@ -0,0 +1,24 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { FormsModule } from '@angular/forms'; + +import { AppComponent } from './app.component'; +// #docregion hero-detail-import +import { HeroDetailComponent } from './hero-detail.component'; +// #enddocregion hero-detail-import + +// #docregion declarations +@NgModule({ + imports: [ + BrowserModule, + FormsModule + ], + declarations: [ + AppComponent, + HeroDetailComponent + ], + bootstrap: [ AppComponent ] +}) +export class AppModule { } +// #enddocregion declarations diff --git a/aio/content/examples/toh-3/ts/src/app/hero-detail.component.ts b/aio/content/examples/toh-3/ts/src/app/hero-detail.component.ts new file mode 100644 index 0000000000..a2f1942904 --- /dev/null +++ b/aio/content/examples/toh-3/ts/src/app/hero-detail.component.ts @@ -0,0 +1,39 @@ +// #docplaster +// #docregion +// #docregion v1 +import { Component, Input } from '@angular/core'; + +// #enddocregion v1 +// #docregion hero-import +import { Hero } from './hero'; +// #enddocregion hero-import + +// #docregion v1 +@Component({ + selector: 'my-hero-detail', +// #enddocregion v1 + // #docregion template + template: ` +
    +

    {{hero.name}} details!

    +
    {{hero.id}}
    +
    + + +
    +
    + ` + // #enddocregion template +// #docregion v1 +}) +export class HeroDetailComponent { +// #enddocregion v1 +// #docregion hero-input + @Input() +// #docregion hero + hero: Hero; +// #enddocregion hero +// #enddocregion hero-input +// #docregion v1 +} +// #enddocregion v1 diff --git a/aio/content/examples/toh-3/ts/src/app/hero.ts b/aio/content/examples/toh-3/ts/src/app/hero.ts new file mode 100644 index 0000000000..f4b0cd6b35 --- /dev/null +++ b/aio/content/examples/toh-3/ts/src/app/hero.ts @@ -0,0 +1,6 @@ +// #docregion +export class Hero { + id: number; + name: string; +} +// #enddocregion diff --git a/aio/content/examples/toh-3/ts/src/index.html b/aio/content/examples/toh-3/ts/src/index.html new file mode 100644 index 0000000000..a217238c6c --- /dev/null +++ b/aio/content/examples/toh-3/ts/src/index.html @@ -0,0 +1,25 @@ + + + + Angular Tour of Heroes + + + + + + + + + + + + + + + + + Loading... + + diff --git a/aio/content/examples/toh-3/ts/src/main.ts b/aio/content/examples/toh-3/ts/src/main.ts new file mode 100644 index 0000000000..aa939b3241 --- /dev/null +++ b/aio/content/examples/toh-3/ts/src/main.ts @@ -0,0 +1,6 @@ +// #docregion pt1 +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); +// #enddocregion pt1 diff --git a/aio/content/examples/toh-4/e2e-spec.ts b/aio/content/examples/toh-4/e2e-spec.ts new file mode 100644 index 0000000000..2307ba17c9 --- /dev/null +++ b/aio/content/examples/toh-4/e2e-spec.ts @@ -0,0 +1,133 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by, ElementFinder } from 'protractor'; +import { promise } from 'selenium-webdriver'; + +const expectedH1 = 'Tour of Heroes'; +const expectedTitle = `Angular ${expectedH1}`; +const expectedH2 = 'My Heroes'; +const targetHero = { id: 16, name: 'RubberMan' }; +const nameSuffix = 'X'; + +class Hero { + id: number; + name: string; + + // Factory methods + + // Get hero from s formatted as ' '. + static fromString(s: string): Hero { + return { + id: +s.substr(0, s.indexOf(' ')), + name: s.substr(s.indexOf(' ') + 1), + }; + } + + // Get hero id and name from the given detail element. + static async fromDetail(detail: ElementFinder): Promise { + // Get hero id from the first
    + let _id = await detail.all(by.css('div')).first().getText(); + // Get name from the h2 + let _name = await detail.element(by.css('h2')).getText(); + return { + id: +_id.substr(_id.indexOf(' ') + 1), + name: _name.substr(0, _name.lastIndexOf(' ')) + }; + } +} + +describe('Tutorial part 4', () => { + beforeAll(() => browser.get('')); + describe('Initial page', initialPageTests); + describe('Select hero', selectHeroTests); + describe('Update hero', updateHeroTests); +}); + +function initialPageTests() { + it(`has title '${expectedTitle}'`, () => { + expect(browser.getTitle()).toEqual(expectedTitle); + }); + + it(`has h1 '${expectedH1}'`, () => { + expectHeading(1, expectedH1); + }); + + it(`has h2 '${expectedH2}'`, () => { + expectHeading(2, expectedH2); + }); + + it('has the right number of heroes', () => { + let page = getPageElts(); + expect(page.heroes.count()).toEqual(10); + }); + + it('has no selected hero and no hero details', function () { + let page = getPageElts(); + expect(page.selected.isPresent()).toBeFalsy('selected hero'); + expect(page.heroDetail.isPresent()).toBeFalsy('no hero detail'); + }); +} + +function selectHeroTests() { + it(`selects ${targetHero.name} from hero list`, function () { + let hero = element(by.cssContainingText('li span.badge', targetHero.id.toString())); + hero.click(); + // Nothing specific to expect other than lack of exceptions. + }); + + it(`has selected ${targetHero.name}`, function () { + let page = getPageElts(); + let expectedText = `${targetHero.id} ${targetHero.name}`; + expect(page.selected.getText()).toBe(expectedText); + }); + + it('shows selected hero details', async () => { + let page = getPageElts(); + let hero = await Hero.fromDetail(page.heroDetail); + expect(hero.id).toEqual(targetHero.id); + expect(hero.name).toEqual(targetHero.name); + }); +} + +function updateHeroTests() { + it(`can update hero name`, () => { + addToHeroName(nameSuffix); + // Nothing specific to expect other than lack of exceptions. + }); + + it(`shows updated hero name in details`, async () => { + let page = getPageElts(); + let hero = await Hero.fromDetail(page.heroDetail); + let newName = targetHero.name + nameSuffix; + expect(hero.id).toEqual(targetHero.id); + expect(hero.name).toEqual(newName); + }); + + it(`shows updated hero name in list`, async () => { + let page = getPageElts(); + let hero = Hero.fromString(await page.selected.getText()); + let newName = targetHero.name + nameSuffix; + expect(hero.id).toEqual(targetHero.id); + expect(hero.name).toEqual(newName); + }); + +} + +function addToHeroName(text: string): promise.Promise { + let input = element(by.css('input')); + return input.sendKeys(text); +} + +function expectHeading(hLevel: number, expectedText: string): void { + let hTag = `h${hLevel}`; + let hText = element(by.css(hTag)).getText(); + expect(hText).toEqual(expectedText, hTag); +}; + +function getPageElts() { + return { + heroes: element.all(by.css('my-app li')), + selected: element(by.css('my-app li.selected')), + heroDetail: element(by.css('my-app > div, my-app > my-hero-detail > div')) + }; +} diff --git a/aio/content/examples/toh-4/ts/example-config.json b/aio/content/examples/toh-4/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/toh-4/ts/plnkr.json b/aio/content/examples/toh-4/ts/plnkr.json new file mode 100644 index 0000000000..95987d95ce --- /dev/null +++ b/aio/content/examples/toh-4/ts/plnkr.json @@ -0,0 +1,10 @@ +{ + "description": "Tour of Heroes: Part 4", + "basePath": "src/", + "files":[ + "!**/*.d.ts", + "!**/*.js", + "!**/*.[1,2].*" + ], + "tags": ["tutorial", "tour", "heroes"] +} diff --git a/aio/content/examples/toh-4/ts/plnkr.no-link.html b/aio/content/examples/toh-4/ts/plnkr.no-link.html new file mode 100644 index 0000000000..265b4fa6ce --- /dev/null +++ b/aio/content/examples/toh-4/ts/plnkr.no-link.html @@ -0,0 +1,362 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/toh-4/ts/src/app/app.component.1.ts b/aio/content/examples/toh-4/ts/src/app/app.component.1.ts new file mode 100644 index 0000000000..675c7a64d0 --- /dev/null +++ b/aio/content/examples/toh-4/ts/src/app/app.component.1.ts @@ -0,0 +1,65 @@ +// #docplaster +// #docregion on-init +import { OnInit } from '@angular/core'; + +// #enddocregion on-init +import { Component } from '@angular/core'; + +import { Hero } from './hero'; +// #docregion hero-service-import +import { HeroService } from './hero.service.2'; +// #enddocregion hero-service-import + +// Testable but never shown +@Component({ + selector: 'my-app', + template: ` +
    + {{hero.name}} +
    + + `, + // #docregion providers + providers: [HeroService] + // #enddocregion providers +}) +// #docregion on-init +export class AppComponent implements OnInit { + // #enddocregion on-init + title = 'Tour of Heroes'; + // #docregion heroes-prop + heroes: Hero[]; + // #enddocregion heroes-prop + selectedHero: Hero; + + /* + // #docregion new-service + heroService = new HeroService(); // don't do this + // #enddocregion new-service + */ + // #docregion ctor + constructor(private heroService: HeroService) { } + // #enddocregion ctor + // #docregion getHeroes + getHeroes(): void { + // #docregion get-heroes + this.heroes = this.heroService.getHeroes(); + // #enddocregion get-heroes + } + // #enddocregion getHeroes + + // #docregion ng-on-init + // #docregion on-init + ngOnInit(): void { + // #enddocregion on-init + this.getHeroes(); + // #docregion on-init + } + // #enddocregion on-init + // #enddocregion ng-on-init + + onSelect(hero: Hero): void { + this.selectedHero = hero; + } + // #docregion on-init +} diff --git a/aio/content/examples/toh-4/ts/src/app/app.component.ts b/aio/content/examples/toh-4/ts/src/app/app.component.ts new file mode 100644 index 0000000000..b16acb8375 --- /dev/null +++ b/aio/content/examples/toh-4/ts/src/app/app.component.ts @@ -0,0 +1,97 @@ +// #docplaster +// #docregion +import { Component, OnInit } from '@angular/core'; + +import { Hero } from './hero'; +// #docregion hero-service-import +import { HeroService } from './hero.service'; +// #enddocregion hero-service-import + +@Component({ + selector: 'my-app', + // #docregion template + template: ` +

    {{title}}

    +

    My Heroes

    +
      +
    • + {{hero.id}} {{hero.name}} +
    • +
    + + `, + // #enddocregion template + styles: [` + .selected { + background-color: #CFD8DC !important; + color: white; + } + .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 li.selected:hover { + background-color: #BBD8DC !important; + color: white; + } + .heroes li:hover { + color: #607D8B; + background-color: #DDD; + left: .1em; + } + .heroes .text { + position: relative; + top: -3px; + } + .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; + } + `], + providers: [HeroService] +}) +export class AppComponent implements OnInit { + title = 'Tour of Heroes'; + heroes: Hero[]; + selectedHero: Hero; + + constructor(private heroService: HeroService) { } + +// #docregion get-heroes + getHeroes(): void { + this.heroService.getHeroes().then(heroes => this.heroes = heroes); + } +// #enddocregion get-heroes + + ngOnInit(): void { + this.getHeroes(); + } + + onSelect(hero: Hero): void { + this.selectedHero = hero; + } +} diff --git a/aio/content/examples/toh-4/ts/src/app/app.module.ts b/aio/content/examples/toh-4/ts/src/app/app.module.ts new file mode 100644 index 0000000000..3df186c62a --- /dev/null +++ b/aio/content/examples/toh-4/ts/src/app/app.module.ts @@ -0,0 +1,19 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { FormsModule } from '@angular/forms'; + +import { AppComponent } from './app.component'; +import { HeroDetailComponent } from './hero-detail.component'; + +@NgModule({ + imports: [ + BrowserModule, + FormsModule + ], + declarations: [ + AppComponent, + HeroDetailComponent + ], + bootstrap: [ AppComponent ] +}) +export class AppModule { } diff --git a/aio/content/examples/toh-4/ts/src/app/hero-detail.component.ts b/aio/content/examples/toh-4/ts/src/app/hero-detail.component.ts new file mode 100644 index 0000000000..b36b0ae36c --- /dev/null +++ b/aio/content/examples/toh-4/ts/src/app/hero-detail.component.ts @@ -0,0 +1,22 @@ +// #docregion +import { Component, Input } from '@angular/core'; +import { Hero } from './hero'; + +@Component({ + selector: 'my-hero-detail', + template: ` +
    +

    {{hero.name}} details!

    +
    + {{hero.id}} +
    +
    + + +
    +
    + ` +}) +export class HeroDetailComponent { + @Input() hero: Hero; +} diff --git a/aio/content/examples/toh-4/ts/src/app/hero.service.1.ts b/aio/content/examples/toh-4/ts/src/app/hero.service.1.ts new file mode 100644 index 0000000000..2366215259 --- /dev/null +++ b/aio/content/examples/toh-4/ts/src/app/hero.service.1.ts @@ -0,0 +1,24 @@ +// #docplaster +// #docregion +// #docregion empty-class, full +import { Injectable } from '@angular/core'; + +// #enddocregion empty-class +import { Hero } from './hero'; +import { HEROES } from './mock-heroes'; + +// #docregion empty-class, getHeroes-stub +@Injectable() +export class HeroService { + // #enddocregion empty-class, getHeroes-stub, full + /* + // #docregion getHeroes-stub + getHeroes(): void {} // stub + // #enddocregion getHeroes-stub + */ + // #docregion full + getHeroes(): Hero[] { + return HEROES; + } + // #docregion empty-class, getHeroes-stub +} diff --git a/aio/content/examples/toh-4/ts/src/app/hero.service.2.ts b/aio/content/examples/toh-4/ts/src/app/hero.service.2.ts new file mode 100644 index 0000000000..d14fe02410 --- /dev/null +++ b/aio/content/examples/toh-4/ts/src/app/hero.service.2.ts @@ -0,0 +1,13 @@ +// #docregion +import { Injectable } from '@angular/core'; + +import { Hero } from './hero'; +import { HEROES } from './mock-heroes'; + +@Injectable() +export class HeroService { + + getHeroes(): Hero[] { + return HEROES; + } +} diff --git a/aio/content/examples/toh-4/ts/src/app/hero.service.ts b/aio/content/examples/toh-4/ts/src/app/hero.service.ts new file mode 100644 index 0000000000..03a1c10a4a --- /dev/null +++ b/aio/content/examples/toh-4/ts/src/app/hero.service.ts @@ -0,0 +1,29 @@ +// #docplaster +// #docregion +// #docregion just-get-heroes +import { Injectable } from '@angular/core'; + +import { Hero } from './hero'; +import { HEROES } from './mock-heroes'; + +@Injectable() +export class HeroService { + // #docregion get-heroes + getHeroes(): Promise { + return Promise.resolve(HEROES); + } + // #enddocregion get-heroes, just-get-heroes + // #enddocregion + + // See the "Take it slow" appendix + // #docregion get-heroes-slowly + getHeroesSlowly(): Promise { + return new Promise(resolve => { + // Simulate server latency with 2 second delay + setTimeout(() => resolve(this.getHeroes()), 2000); + }); + } + // #enddocregion get-heroes-slowly + // #docregion + // #docregion just-get-heroes +} diff --git a/aio/content/examples/toh-4/ts/src/app/hero.ts b/aio/content/examples/toh-4/ts/src/app/hero.ts new file mode 100644 index 0000000000..e3eac516da --- /dev/null +++ b/aio/content/examples/toh-4/ts/src/app/hero.ts @@ -0,0 +1,4 @@ +export class Hero { + id: number; + name: string; +} diff --git a/aio/content/examples/toh-4/ts/src/app/mock-heroes.ts b/aio/content/examples/toh-4/ts/src/app/mock-heroes.ts new file mode 100644 index 0000000000..6f7c5d83a0 --- /dev/null +++ b/aio/content/examples/toh-4/ts/src/app/mock-heroes.ts @@ -0,0 +1,15 @@ +// #docregion +import { Hero } from './hero'; + +export const HEROES: Hero[] = [ + {id: 11, name: 'Mr. Nice'}, + {id: 12, name: 'Narco'}, + {id: 13, name: 'Bombasto'}, + {id: 14, name: 'Celeritas'}, + {id: 15, name: 'Magneta'}, + {id: 16, name: 'RubberMan'}, + {id: 17, name: 'Dynama'}, + {id: 18, name: 'Dr IQ'}, + {id: 19, name: 'Magma'}, + {id: 20, name: 'Tornado'} +]; diff --git a/aio/content/examples/toh-4/ts/src/index.html b/aio/content/examples/toh-4/ts/src/index.html new file mode 100644 index 0000000000..a217238c6c --- /dev/null +++ b/aio/content/examples/toh-4/ts/src/index.html @@ -0,0 +1,25 @@ + + + + Angular Tour of Heroes + + + + + + + + + + + + + + + + + Loading... + + diff --git a/aio/content/examples/toh-4/ts/src/main.1.ts b/aio/content/examples/toh-4/ts/src/main.1.ts new file mode 100644 index 0000000000..f22933ba8e --- /dev/null +++ b/aio/content/examples/toh-4/ts/src/main.1.ts @@ -0,0 +1,4 @@ +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/toh-4/ts/src/main.ts b/aio/content/examples/toh-4/ts/src/main.ts new file mode 100644 index 0000000000..f22933ba8e --- /dev/null +++ b/aio/content/examples/toh-4/ts/src/main.ts @@ -0,0 +1,4 @@ +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/toh-5/e2e-spec.ts b/aio/content/examples/toh-5/e2e-spec.ts new file mode 100644 index 0000000000..9da4fc7765 --- /dev/null +++ b/aio/content/examples/toh-5/e2e-spec.ts @@ -0,0 +1,190 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by, ElementFinder } from 'protractor'; +import { promise } from 'selenium-webdriver'; + +const expectedH1 = 'Tour of Heroes'; +const expectedTitle = `Angular ${expectedH1}`; +const targetHero = { id: 15, name: 'Magneta' }; +const targetHeroDashboardIndex = 3; +const nameSuffix = 'X'; +const newHeroName = targetHero.name + nameSuffix; + +class Hero { + id: number; + name: string; + + // Factory methods + + // Get hero from s formatted as ' '. + static fromString(s: string): Hero { + return { + id: +s.substr(0, s.indexOf(' ')), + name: s.substr(s.indexOf(' ') + 1), + }; + } + + // Get hero id and name from the given detail element. + static async fromDetail(detail: ElementFinder): Promise { + // Get hero id from the first
    + let _id = await detail.all(by.css('div')).first().getText(); + // Get name from the h2 + let _name = await detail.element(by.css('h2')).getText(); + return { + id: +_id.substr(_id.indexOf(' ') + 1), + name: _name.substr(0, _name.lastIndexOf(' ')) + }; + } +} + +describe('Tutorial part 5', () => { + + beforeAll(() => browser.get('')); + + function getPageElts() { + let navElts = element.all(by.css('my-app nav a')); + + return { + navElts: navElts, + + myDashboardHref: navElts.get(0), + myDashboard: element(by.css('my-app my-dashboard')), + topHeroes: element.all(by.css('my-app my-dashboard > div h4')), + + myHeroesHref: navElts.get(1), + myHeroes: element(by.css('my-app my-heroes')), + allHeroes: element.all(by.css('my-app my-heroes li')), + selectedHero: element(by.css('my-app li.selected')), + selectedHeroSubview: element(by.css('my-app my-heroes > div')), + + heroDetail: element(by.css('my-app my-hero-detail > div')) + }; + } + + describe('Initial page', () => { + + it(`has title '${expectedTitle}'`, () => { + expect(browser.getTitle()).toEqual(expectedTitle); + }); + + it(`has h1 '${expectedH1}'`, () => { + expectHeading(1, expectedH1); + }); + + const expectedViewNames = ['Dashboard', 'Heroes']; + it(`has views ${expectedViewNames}`, () => { + let viewNames = getPageElts().navElts.map((el: ElementFinder) => el.getText()); + expect(viewNames).toEqual(expectedViewNames); + }); + + it('has dashboard as the active view', () => { + let page = getPageElts(); + expect(page.myDashboard.isPresent()).toBeTruthy(); + }); + + }); + + describe('Dashboard tests', () => { + + beforeAll(() => browser.get('')); + + it('has top heroes', () => { + let page = getPageElts(); + expect(page.topHeroes.count()).toEqual(4); + }); + + it(`selects and routes to ${targetHero.name} details`, dashboardSelectTargetHero); + + it(`updates hero name (${newHeroName}) in details view`, updateHeroNameInDetailView); + + it(`saves and shows ${newHeroName} in Dashboard`, () => { + element(by.buttonText('Back')).click(); + let targetHeroElt = getPageElts().topHeroes.get(targetHeroDashboardIndex); + expect(targetHeroElt.getText()).toEqual(newHeroName); + }); + + }); + + describe('Heroes tests', () => { + + beforeAll(() => browser.get('')); + + it('can switch to Heroes view', () => { + getPageElts().myHeroesHref.click(); + let page = getPageElts(); + expect(page.myHeroes.isPresent()).toBeTruthy(); + expect(page.allHeroes.count()).toEqual(10, 'number of heroes'); + }); + + it(`selects and shows ${targetHero.name} as selected in list`, () => { + getHeroLiEltById(targetHero.id).click(); + let expectedText = `${targetHero.id} ${targetHero.name}`; + expect(getPageElts().selectedHero.getText()).toBe(expectedText); + }); + + it('shows selected hero subview', async () => { + let page = getPageElts(); + let title = page.selectedHeroSubview.element(by.css('h2')).getText(); + let expectedTitle = `${targetHero.name.toUpperCase()} is my hero`; + expect(title).toEqual(expectedTitle); + }); + + it('can route to hero details', async () => { + element(by.buttonText('View Details')).click(); + + let page = getPageElts(); + expect(page.heroDetail.isPresent()).toBeTruthy('shows hero detail'); + let hero = await Hero.fromDetail(page.heroDetail); + expect(hero.id).toEqual(targetHero.id); + expect(hero.name).toEqual(targetHero.name); + }); + + it(`updates hero name (${newHeroName}) in details view`, updateHeroNameInDetailView); + + it(`shows ${newHeroName} in Heroes list`, () => { + element(by.buttonText('Back')).click(); + let expectedText = `${targetHero.id} ${newHeroName}`; + expect(getHeroLiEltById(targetHero.id).getText()).toEqual(expectedText); + }); + + }); + + async function dashboardSelectTargetHero() { + let targetHeroElt = getPageElts().topHeroes.get(targetHeroDashboardIndex); + expect(targetHeroElt.getText()).toEqual(targetHero.name); + targetHeroElt.click(); + + let page = getPageElts(); + expect(page.heroDetail.isPresent()).toBeTruthy('shows hero detail'); + let hero = await Hero.fromDetail(page.heroDetail); + expect(hero.id).toEqual(targetHero.id); + expect(hero.name).toEqual(targetHero.name); + } + + async function updateHeroNameInDetailView() { + // Assumes that the current view is the hero details view. + addToHeroName(nameSuffix); + + let page = getPageElts(); + let hero = await Hero.fromDetail(page.heroDetail); + expect(hero.id).toEqual(targetHero.id); + expect(hero.name).toEqual(newHeroName); + } + +}); + +function addToHeroName(text: string): promise.Promise { + let input = element(by.css('input')); + return input.sendKeys(text); +} + +function expectHeading(hLevel: number, expectedText: string): void { + let hTag = `h${hLevel}`; + let hText = element(by.css(hTag)).getText(); + expect(hText).toEqual(expectedText, hTag); +}; + +function getHeroLiEltById(id: number) { + let spanForId = element(by.cssContainingText('li span.badge', id.toString())); + return spanForId.element(by.xpath('..')); +} diff --git a/aio/content/examples/toh-5/ts/example-config.json b/aio/content/examples/toh-5/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/toh-5/ts/plnkr.json b/aio/content/examples/toh-5/ts/plnkr.json new file mode 100644 index 0000000000..db4b15d160 --- /dev/null +++ b/aio/content/examples/toh-5/ts/plnkr.json @@ -0,0 +1,10 @@ +{ + "description": "Tour of Heroes: Part 5", + "basePath": "src/", + "files":[ + "!**/*.d.ts", + "!**/*.js", + "!**/*.[1,2,3].*" + ], + "tags": ["tutorial", "tour", "heroes", "router"] +} diff --git a/aio/content/examples/toh-5/ts/plnkr.no-link.html b/aio/content/examples/toh-5/ts/plnkr.no-link.html new file mode 100644 index 0000000000..12a5e23630 --- /dev/null +++ b/aio/content/examples/toh-5/ts/plnkr.no-link.html @@ -0,0 +1,661 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/toh-5/ts/src/app/app-routing.module.ts b/aio/content/examples/toh-5/ts/src/app/app-routing.module.ts new file mode 100644 index 0000000000..dfd957782b --- /dev/null +++ b/aio/content/examples/toh-5/ts/src/app/app-routing.module.ts @@ -0,0 +1,20 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +import { DashboardComponent } from './dashboard.component'; +import { HeroesComponent } from './heroes.component'; +import { HeroDetailComponent } from './hero-detail.component'; + +const routes: Routes = [ + { path: '', redirectTo: '/dashboard', pathMatch: 'full' }, + { path: 'dashboard', component: DashboardComponent }, + { path: 'detail/:id', component: HeroDetailComponent }, + { path: 'heroes', component: HeroesComponent } +]; + +@NgModule({ + imports: [ RouterModule.forRoot(routes) ], + exports: [ RouterModule ] +}) +export class AppRoutingModule {} diff --git a/aio/content/examples/toh-5/ts/src/app/app.component.1.ts b/aio/content/examples/toh-5/ts/src/app/app.component.1.ts new file mode 100644 index 0000000000..c9f5db9712 --- /dev/null +++ b/aio/content/examples/toh-5/ts/src/app/app.component.1.ts @@ -0,0 +1,42 @@ +// #docplaster +// #docregion , v2 +import { Component } from '@angular/core'; + +// #enddocregion v2 +@Component({ + selector: 'my-app', + template: ` +

    {{title}}

    + + ` +}) +// #enddocregion +// #docregion v2 +@Component({ + selector: 'my-app', + // #docregion template-v2 + template: ` +

    {{title}}

    + Heroes + + ` + // #enddocregion template-v2 +}) +// #enddocregion +@Component({ + selector: 'my-app', + // #docregion template-v3 + template: ` +

    {{title}}

    + + + ` + // #enddocregion template-v3 +}) +// #docregion , v2 +export class AppComponent { + title = 'Tour of Heroes'; +} diff --git a/aio/content/examples/toh-5/ts/src/app/app.component.css b/aio/content/examples/toh-5/ts/src/app/app.component.css new file mode 100644 index 0000000000..071e665767 --- /dev/null +++ b/aio/content/examples/toh-5/ts/src/app/app.component.css @@ -0,0 +1,29 @@ +/* #docregion */ +h1 { + font-size: 1.2em; + color: #999; + margin-bottom: 0; +} +h2 { + font-size: 2em; + margin-top: 0; + padding-top: 0; +} +nav a { + padding: 5px 10px; + text-decoration: none; + margin-top: 10px; + display: inline-block; + background-color: #eee; + border-radius: 4px; +} +nav a:visited, a:link { + color: #607D8B; +} +nav a:hover { + color: #039be5; + background-color: #CFD8DC; +} +nav a.active { + color: #039be5; +} diff --git a/aio/content/examples/toh-5/ts/src/app/app.component.ts b/aio/content/examples/toh-5/ts/src/app/app.component.ts new file mode 100644 index 0000000000..c3f92ec46b --- /dev/null +++ b/aio/content/examples/toh-5/ts/src/app/app.component.ts @@ -0,0 +1,23 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + moduleId: module.id, + selector: 'my-app', + // #docregion template + template: ` +

    {{title}}

    + + + `, + // #enddocregion template + // #docregion styleUrls + styleUrls: ['./app.component.css'], + // #enddocregion styleUrls +}) +export class AppComponent { + title = 'Tour of Heroes'; +} diff --git a/aio/content/examples/toh-5/ts/src/app/app.module.1.ts b/aio/content/examples/toh-5/ts/src/app/app.module.1.ts new file mode 100644 index 0000000000..e1cda9b620 --- /dev/null +++ b/aio/content/examples/toh-5/ts/src/app/app.module.1.ts @@ -0,0 +1,28 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { FormsModule } from '@angular/forms'; + +import { AppComponent } from './app.component'; +import { HeroDetailComponent } from './hero-detail.component'; +import { HeroesComponent } from './heroes.component'; +import { HeroService } from './hero.service'; + +@NgModule({ + imports: [ + BrowserModule, + FormsModule + ], + declarations: [ + AppComponent, + HeroDetailComponent, + HeroesComponent + ], + providers: [ + HeroService + ], + bootstrap: [ AppComponent ] +}) +export class AppModule { +} +// #enddocregion diff --git a/aio/content/examples/toh-5/ts/src/app/app.module.2.ts b/aio/content/examples/toh-5/ts/src/app/app.module.2.ts new file mode 100644 index 0000000000..00876570f3 --- /dev/null +++ b/aio/content/examples/toh-5/ts/src/app/app.module.2.ts @@ -0,0 +1,48 @@ +// #docplaster +// #docregion +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { FormsModule } from '@angular/forms'; +import { RouterModule } from '@angular/router'; + +import { AppComponent } from './app.component'; +import { HeroDetailComponent } from './hero-detail.component'; +import { HeroesComponent } from './heroes.component'; +import { HeroService } from './hero.service'; + +@NgModule({ + imports: [ + BrowserModule, + FormsModule, + RouterModule.forRoot([ + { + path: 'heroes', + component: HeroesComponent + } + ]) + ], + declarations: [ + AppComponent, + HeroDetailComponent, + HeroesComponent + ], + providers: [ + HeroService + ], + bootstrap: [ AppComponent ] +}) +export class AppModule { +} +// #enddocregion +/* +// #docregion heroes, routing +import { RouterModule } from '@angular/router'; + +RouterModule.forRoot([ + { + path: 'heroes', + component: HeroesComponent + } +]) +// #enddocregion heroes, routing +*/ diff --git a/aio/content/examples/toh-5/ts/src/app/app.module.3.ts b/aio/content/examples/toh-5/ts/src/app/app.module.3.ts new file mode 100644 index 0000000000..306d9958f0 --- /dev/null +++ b/aio/content/examples/toh-5/ts/src/app/app.module.3.ts @@ -0,0 +1,58 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { FormsModule } from '@angular/forms'; +import { RouterModule } from '@angular/router'; + +import { AppComponent } from './app.component'; +import { HeroDetailComponent } from './hero-detail.component'; +import { DashboardComponent } from './dashboard.component'; +import { HeroesComponent } from './heroes.component'; +import { HeroService } from './hero.service'; + +@NgModule({ + imports: [ + BrowserModule, + FormsModule, + RouterModule.forRoot([ + // #docregion redirect + { + path: '', + redirectTo: '/dashboard', + pathMatch: 'full' + }, + // #enddocregion redirect + // #docregion dashboard + { + path: 'dashboard', + component: DashboardComponent + }, + // #enddocregion dashboard + // #docregion hero-detail + { + path: 'detail/:id', + component: HeroDetailComponent + }, + // #enddocregion hero-detail + // #docregion heroes, routing + { + path: 'heroes', + component: HeroesComponent + } + // #enddocregion heroes, routing + ]) + ], + declarations: [ + AppComponent, + DashboardComponent, + HeroDetailComponent, + HeroesComponent + ], + providers: [ + HeroService + ], + bootstrap: [ AppComponent ] +}) +export class AppModule { +} +// #enddocregion diff --git a/aio/content/examples/toh-5/ts/src/app/app.module.ts b/aio/content/examples/toh-5/ts/src/app/app.module.ts new file mode 100644 index 0000000000..b376d69aba --- /dev/null +++ b/aio/content/examples/toh-5/ts/src/app/app.module.ts @@ -0,0 +1,35 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { FormsModule } from '@angular/forms'; + +import { AppComponent } from './app.component'; +import { DashboardComponent } from './dashboard.component'; +import { HeroDetailComponent } from './hero-detail.component'; +import { HeroesComponent } from './heroes.component'; +import { HeroService } from './hero.service'; + +// #docregion routing-module +import { AppRoutingModule } from './app-routing.module'; + +@NgModule({ + imports: [ + BrowserModule, + FormsModule, + AppRoutingModule + ], +// #enddocregion routing-module + // #docregion dashboard + declarations: [ + AppComponent, + DashboardComponent, + HeroDetailComponent, + HeroesComponent + ], + // #enddocregion dashboard + providers: [ HeroService ], + bootstrap: [ AppComponent ] +// #docregion routing-module +}) +export class AppModule { } +// #enddocregion routing-module diff --git a/aio/content/examples/toh-5/ts/src/app/dashboard.component.1.html b/aio/content/examples/toh-5/ts/src/app/dashboard.component.1.html new file mode 100644 index 0000000000..0c556b8de0 --- /dev/null +++ b/aio/content/examples/toh-5/ts/src/app/dashboard.component.1.html @@ -0,0 +1,9 @@ + +

    Top Heroes

    +
    +
    +
    +

    {{hero.name}}

    +
    +
    +
    diff --git a/aio/content/examples/toh-5/ts/src/app/dashboard.component.1.ts b/aio/content/examples/toh-5/ts/src/app/dashboard.component.1.ts new file mode 100644 index 0000000000..3c92b205c8 --- /dev/null +++ b/aio/content/examples/toh-5/ts/src/app/dashboard.component.1.ts @@ -0,0 +1,8 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'my-dashboard', + template: '

    My Dashboard

    ' +}) +export class DashboardComponent { } diff --git a/aio/content/examples/toh-5/ts/src/app/dashboard.component.css b/aio/content/examples/toh-5/ts/src/app/dashboard.component.css new file mode 100644 index 0000000000..dc7fb7ce06 --- /dev/null +++ b/aio/content/examples/toh-5/ts/src/app/dashboard.component.css @@ -0,0 +1,62 @@ +/* #docregion */ +[class*='col-'] { + float: left; + padding-right: 20px; + padding-bottom: 20px; +} +[class*='col-']:last-of-type { + padding-right: 0; +} +a { + text-decoration: none; +} +*, *:after, *:before { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +h3 { + text-align: center; margin-bottom: 0; +} +h4 { + position: relative; +} +.grid { + margin: 0; +} +.col-1-4 { + width: 25%; +} +.module { + padding: 20px; + text-align: center; + color: #eee; + max-height: 120px; + min-width: 120px; + background-color: #607D8B; + border-radius: 2px; +} +.module:hover { + background-color: #EEE; + cursor: pointer; + color: #607d8b; +} +.grid-pad { + padding: 10px 0; +} +.grid-pad > [class*='col-']:last-of-type { + padding-right: 20px; +} +@media (max-width: 600px) { + .module { + font-size: 10px; + max-height: 75px; } +} +@media (max-width: 1024px) { + .grid { + margin: 0; + } + .module { + min-width: 60px; + } +} diff --git a/aio/content/examples/toh-5/ts/src/app/dashboard.component.html b/aio/content/examples/toh-5/ts/src/app/dashboard.component.html new file mode 100644 index 0000000000..49e77c460c --- /dev/null +++ b/aio/content/examples/toh-5/ts/src/app/dashboard.component.html @@ -0,0 +1,11 @@ + +

    Top Heroes

    + diff --git a/aio/content/examples/toh-5/ts/src/app/dashboard.component.ts b/aio/content/examples/toh-5/ts/src/app/dashboard.component.ts new file mode 100644 index 0000000000..eb026eb6be --- /dev/null +++ b/aio/content/examples/toh-5/ts/src/app/dashboard.component.ts @@ -0,0 +1,34 @@ +// #docplaster +// #docregion , imports +import { Component, OnInit } from '@angular/core'; + +import { Hero } from './hero'; +import { HeroService } from './hero.service'; +// #enddocregion imports + +// #docregion metadata +@Component({ + moduleId: module.id, + selector: 'my-dashboard', + templateUrl: './dashboard.component.html', + // #enddocregion metadata + // #docregion css + styleUrls: [ './dashboard.component.css' ] + // #enddocregion css + // #docregion metadata +}) +// #enddocregion metadata +// #docregion class +export class DashboardComponent implements OnInit { + + heroes: Hero[] = []; + + // #docregion ctor + constructor(private heroService: HeroService) { } + // #enddocregion ctor + + ngOnInit(): void { + this.heroService.getHeroes() + .then(heroes => this.heroes = heroes.slice(1, 5)); + } +} diff --git a/aio/content/examples/toh-5/ts/src/app/hero-detail.component.1.ts b/aio/content/examples/toh-5/ts/src/app/hero-detail.component.1.ts new file mode 100644 index 0000000000..6713ce4dc7 --- /dev/null +++ b/aio/content/examples/toh-5/ts/src/app/hero-detail.component.1.ts @@ -0,0 +1,29 @@ +// Imports in comments cause problems when the app is executed +// (some error about 'traceur' missing). Hence this separate file +// is solely for containing the transitory state of the imports. + +// #docregion added-imports +// Keep the Input import for now, we'll remove it later: +import { Component, Input, OnInit } from '@angular/core'; +import { ActivatedRoute, Params } from '@angular/router'; +import { Location } from '@angular/common'; + +import { HeroService } from './hero.service'; +// #enddocregion added-imports + +// Bogus code below this point. It is only here to make lint happy. +import { Hero } from './hero'; + +@Component({}) +export class HeroDetailComponent implements OnInit { + @Input() hero: Hero; + bogus: Params; + + constructor( + private heroService: HeroService, + private route: ActivatedRoute, + private location: Location + ) {} + + ngOnInit() {} +} diff --git a/aio/content/examples/toh-5/ts/src/app/hero-detail.component.css b/aio/content/examples/toh-5/ts/src/app/hero-detail.component.css new file mode 100644 index 0000000000..ab2437efd8 --- /dev/null +++ b/aio/content/examples/toh-5/ts/src/app/hero-detail.component.css @@ -0,0 +1,30 @@ +/* #docregion */ +label { + display: inline-block; + width: 3em; + margin: .5em 0; + color: #607D8B; + font-weight: bold; +} +input { + height: 2em; + font-size: 1em; + padding-left: .4em; +} +button { + margin-top: 20px; + font-family: Arial; + background-color: #eee; + border: none; + padding: 5px 10px; + border-radius: 4px; + cursor: pointer; cursor: hand; +} +button:hover { + background-color: #cfd8dc; +} +button:disabled { + background-color: #eee; + color: #ccc; + cursor: auto; +} diff --git a/aio/content/examples/toh-5/ts/src/app/hero-detail.component.html b/aio/content/examples/toh-5/ts/src/app/hero-detail.component.html new file mode 100644 index 0000000000..8f2ff9d90c --- /dev/null +++ b/aio/content/examples/toh-5/ts/src/app/hero-detail.component.html @@ -0,0 +1,14 @@ + + +
    +

    {{hero.name}} details!

    +
    + {{hero.id}}
    +
    + + +
    + + + +
    diff --git a/aio/content/examples/toh-5/ts/src/app/hero-detail.component.ts b/aio/content/examples/toh-5/ts/src/app/hero-detail.component.ts new file mode 100644 index 0000000000..5b9bea89fa --- /dev/null +++ b/aio/content/examples/toh-5/ts/src/app/hero-detail.component.ts @@ -0,0 +1,47 @@ +// #docplaster +// #docregion , v2, rxjs-import +import 'rxjs/add/operator/switchMap'; +// #enddocregion rxjs-import +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute, Params } from '@angular/router'; +import { Location } from '@angular/common'; + +import { Hero } from './hero'; +import { HeroService } from './hero.service'; +// #docregion metadata +@Component({ + moduleId: module.id, + selector: 'my-hero-detail', + templateUrl: './hero-detail.component.html', + // #enddocregion metadata, v2 + styleUrls: [ './hero-detail.component.css' ] + // #docregion metadata, v2 +}) +// #enddocregion metadata +// #docregion implement +export class HeroDetailComponent implements OnInit { +// #enddocregion implement + hero: Hero; + + // #docregion ctor + constructor( + private heroService: HeroService, + private route: ActivatedRoute, + private location: Location + ) {} + // #enddocregion ctor + + // #docregion ngOnInit + ngOnInit(): void { + this.route.params + .switchMap((params: Params) => this.heroService.getHero(+params['id'])) + .subscribe(hero => this.hero = hero); + } + // #enddocregion ngOnInit + + // #docregion goBack + goBack(): void { + this.location.back(); + } +// #enddocregion goBack +} diff --git a/aio/content/examples/toh-5/ts/src/app/hero.service.ts b/aio/content/examples/toh-5/ts/src/app/hero.service.ts new file mode 100644 index 0000000000..ee5a684762 --- /dev/null +++ b/aio/content/examples/toh-5/ts/src/app/hero.service.ts @@ -0,0 +1,26 @@ +// #docplaster +// #docregion +import { Hero } from './hero'; +import { HEROES } from './mock-heroes'; +import { Injectable } from '@angular/core'; + +@Injectable() +export class HeroService { + getHeroes(): Promise { + return Promise.resolve(HEROES); + } + + getHeroesSlowly(): Promise { + return new Promise(resolve => { + // Simulate server latency with 2 second delay + setTimeout(() => resolve(this.getHeroes()), 2000); + }); + } + + // #docregion getHero + getHero(id: number): Promise { + return this.getHeroes() + .then(heroes => heroes.find(hero => hero.id === id)); + } + // #enddocregion getHero +} diff --git a/aio/content/examples/toh-5/ts/src/app/hero.ts b/aio/content/examples/toh-5/ts/src/app/hero.ts new file mode 100644 index 0000000000..e3eac516da --- /dev/null +++ b/aio/content/examples/toh-5/ts/src/app/hero.ts @@ -0,0 +1,4 @@ +export class Hero { + id: number; + name: string; +} diff --git a/aio/content/examples/toh-5/ts/src/app/heroes.component.css b/aio/content/examples/toh-5/ts/src/app/heroes.component.css new file mode 100644 index 0000000000..35e45af98d --- /dev/null +++ b/aio/content/examples/toh-5/ts/src/app/heroes.component.css @@ -0,0 +1,59 @@ +.selected { + background-color: #CFD8DC !important; + color: white; +} +.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 li:hover { + color: #607D8B; + background-color: #DDD; + left: .1em; +} +.heroes li.selected:hover { + background-color: #BBD8DC !important; + color: white; +} +.heroes .text { + position: relative; + top: -3px; +} +.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; +} +button { + font-family: Arial; + background-color: #eee; + border: none; + padding: 5px 10px; + border-radius: 4px; + cursor: pointer; + cursor: hand; +} +button:hover { + background-color: #cfd8dc; +} diff --git a/aio/content/examples/toh-5/ts/src/app/heroes.component.html b/aio/content/examples/toh-5/ts/src/app/heroes.component.html new file mode 100644 index 0000000000..db41c4692e --- /dev/null +++ b/aio/content/examples/toh-5/ts/src/app/heroes.component.html @@ -0,0 +1,19 @@ + + +

    My Heroes

    +
      +
    • + {{hero.id}} {{hero.name}} +
    • +
    + +
    +

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

    + +
    diff --git a/aio/content/examples/toh-5/ts/src/app/heroes.component.ts b/aio/content/examples/toh-5/ts/src/app/heroes.component.ts new file mode 100644 index 0000000000..ab6928addd --- /dev/null +++ b/aio/content/examples/toh-5/ts/src/app/heroes.component.ts @@ -0,0 +1,49 @@ +// #docplaster +// #docregion +import { Component, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; + +import { Hero } from './hero'; +import { HeroService } from './hero.service'; + +// #docregion renaming, metadata +@Component({ + // #enddocregion renaming + moduleId: module.id, + // #docregion renaming + selector: 'my-heroes', + // #enddocregion renaming + templateUrl: './heroes.component.html', + styleUrls: [ './heroes.component.css' ] + // #docregion renaming +}) +// #enddocregion metadata +// #docregion class +export class HeroesComponent implements OnInit { + // #enddocregion renaming + heroes: Hero[]; + selectedHero: Hero; + + constructor( + private router: Router, + private heroService: HeroService) { } + + getHeroes(): void { + this.heroService.getHeroes().then(heroes => this.heroes = heroes); + } + + ngOnInit(): void { + this.getHeroes(); + } + + onSelect(hero: Hero): void { + this.selectedHero = hero; + } + + // #docregion gotoDetail + gotoDetail(): void { + this.router.navigate(['/detail', this.selectedHero.id]); + } + // #enddocregion gotoDetail + // #docregion renaming +} diff --git a/aio/content/examples/toh-5/ts/src/app/mock-heroes.ts b/aio/content/examples/toh-5/ts/src/app/mock-heroes.ts new file mode 100644 index 0000000000..69afde3d34 --- /dev/null +++ b/aio/content/examples/toh-5/ts/src/app/mock-heroes.ts @@ -0,0 +1,15 @@ +// #docregion +import { Hero } from './hero'; + +export var HEROES: Hero[] = [ + {id: 11, name: 'Mr. Nice'}, + {id: 12, name: 'Narco'}, + {id: 13, name: 'Bombasto'}, + {id: 14, name: 'Celeritas'}, + {id: 15, name: 'Magneta'}, + {id: 16, name: 'RubberMan'}, + {id: 17, name: 'Dynama'}, + {id: 18, name: 'Dr IQ'}, + {id: 19, name: 'Magma'}, + {id: 20, name: 'Tornado'} +]; diff --git a/aio/content/examples/toh-5/ts/src/index.html b/aio/content/examples/toh-5/ts/src/index.html new file mode 100644 index 0000000000..cbacc9b83b --- /dev/null +++ b/aio/content/examples/toh-5/ts/src/index.html @@ -0,0 +1,33 @@ + + + + + + + + Angular Tour of Heroes + + + + + + + + + + + + + + + + + + + + + Loading... + + diff --git a/aio/content/examples/toh-5/ts/src/main.ts b/aio/content/examples/toh-5/ts/src/main.ts new file mode 100644 index 0000000000..505f60b35b --- /dev/null +++ b/aio/content/examples/toh-5/ts/src/main.ts @@ -0,0 +1,6 @@ +// #docregion +// main entry point +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/toh-6/e2e-spec.ts b/aio/content/examples/toh-6/e2e-spec.ts new file mode 100644 index 0000000000..c4a68aec52 --- /dev/null +++ b/aio/content/examples/toh-6/e2e-spec.ts @@ -0,0 +1,283 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by, ElementFinder, ElementArrayFinder } from 'protractor'; +import { promise } from 'selenium-webdriver'; + +const expectedH1 = 'Tour of Heroes'; +const expectedTitle = `Angular ${expectedH1}`; +const targetHero = { id: 15, name: 'Magneta' }; +const targetHeroDashboardIndex = 3; +const nameSuffix = 'X'; +const newHeroName = targetHero.name + nameSuffix; + +class Hero { + id: number; + name: string; + + // Factory methods + + // Hero from string formatted as ' '. + static fromString(s: string): Hero { + return { + id: +s.substr(0, s.indexOf(' ')), + name: s.substr(s.indexOf(' ') + 1), + }; + } + + // Hero from hero list
  • element. + static async fromLi(li: ElementFinder): Promise { + let strings = await li.all(by.xpath('span')).getText(); + return { id: +strings[0], name: strings[1] }; + } + + // Hero id and name from the given detail element. + static async fromDetail(detail: ElementFinder): Promise { + // Get hero id from the first
    + let _id = await detail.all(by.css('div')).first().getText(); + // Get name from the h2 + let _name = await detail.element(by.css('h2')).getText(); + return { + id: +_id.substr(_id.indexOf(' ') + 1), + name: _name.substr(0, _name.lastIndexOf(' ')) + }; + } +} + +describe('Tutorial part 6', () => { + + beforeAll(() => browser.get('')); + + function getPageElts() { + let navElts = element.all(by.css('my-app nav a')); + + return { + navElts: navElts, + + myDashboardHref: navElts.get(0), + myDashboard: element(by.css('my-app my-dashboard')), + topHeroes: element.all(by.css('my-app my-dashboard > div h4')), + + myHeroesHref: navElts.get(1), + myHeroes: element(by.css('my-app my-heroes')), + allHeroes: element.all(by.css('my-app my-heroes li')), + selectedHero: element(by.css('my-app li.selected')), + selectedHeroSubview: element(by.css('my-app my-heroes > div:last-child')), + + heroDetail: element(by.css('my-app my-hero-detail > div')), + + searchBox: element(by.css('#search-box')), + searchResults: element.all(by.css('.search-result')) + }; + } + + describe('Initial page', () => { + + it(`has title '${expectedTitle}'`, () => { + expect(browser.getTitle()).toEqual(expectedTitle); + }); + + it(`has h1 '${expectedH1}'`, () => { + expectHeading(1, expectedH1); + }); + + const expectedViewNames = ['Dashboard', 'Heroes']; + it(`has views ${expectedViewNames}`, () => { + let viewNames = getPageElts().navElts.map((el: ElementFinder) => el.getText()); + expect(viewNames).toEqual(expectedViewNames); + }); + + it('has dashboard as the active view', () => { + let page = getPageElts(); + expect(page.myDashboard.isPresent()).toBeTruthy(); + }); + + }); + + describe('Dashboard tests', () => { + + beforeAll(() => browser.get('')); + + it('has top heroes', () => { + let page = getPageElts(); + expect(page.topHeroes.count()).toEqual(4); + }); + + it(`selects and routes to ${targetHero.name} details`, dashboardSelectTargetHero); + + it(`updates hero name (${newHeroName}) in details view`, updateHeroNameInDetailView); + + it(`cancels and shows ${targetHero.name} in Dashboard`, () => { + element(by.buttonText('Back')).click(); + browser.waitForAngular(); // seems necessary to gets tests to past for toh-6 + + let targetHeroElt = getPageElts().topHeroes.get(targetHeroDashboardIndex); + expect(targetHeroElt.getText()).toEqual(targetHero.name); + }); + + it(`selects and routes to ${targetHero.name} details`, dashboardSelectTargetHero); + + it(`updates hero name (${newHeroName}) in details view`, updateHeroNameInDetailView); + + it(`saves and shows ${newHeroName} in Dashboard`, () => { + element(by.buttonText('Save')).click(); + browser.waitForAngular(); // seems necessary to gets tests to past for toh-6 + + let targetHeroElt = getPageElts().topHeroes.get(targetHeroDashboardIndex); + expect(targetHeroElt.getText()).toEqual(newHeroName); + }); + + }); + + describe('Heroes tests', () => { + + beforeAll(() => browser.get('')); + + it('can switch to Heroes view', () => { + getPageElts().myHeroesHref.click(); + let page = getPageElts(); + expect(page.myHeroes.isPresent()).toBeTruthy(); + expect(page.allHeroes.count()).toEqual(10, 'number of heroes'); + }); + + it(`selects and shows ${targetHero.name} as selected in list`, () => { + getHeroLiEltById(targetHero.id).click(); + expect(Hero.fromLi(getPageElts().selectedHero)).toEqual(targetHero); + }); + + it('shows selected hero subview', () => { + let page = getPageElts(); + let title = page.selectedHeroSubview.element(by.css('h2')).getText(); + let expectedTitle = `${targetHero.name.toUpperCase()} is my hero`; + expect(title).toEqual(expectedTitle); + }); + + it('can route to hero details', () => { + element(by.buttonText('View Details')).click(); + + let page = getPageElts(); + expect(page.heroDetail.isPresent()).toBeTruthy('shows hero detail'); + let hero = Hero.fromDetail(page.heroDetail); + expect(hero).toEqual(targetHero); + }); + + it(`updates hero name (${newHeroName}) in details view`, updateHeroNameInDetailView); + + it(`shows ${newHeroName} in Heroes list`, () => { + element(by.buttonText('Save')).click(); + browser.waitForAngular(); // seems necessary to gets tests to past for toh-6 + let expectedHero = {id: targetHero.id, name: newHeroName}; + expect(Hero.fromLi(getHeroLiEltById(targetHero.id))).toEqual(expectedHero); + }); + + it(`deletes ${newHeroName} from Heroes list`, async () => { + const heroesBefore = await toHeroArray(getPageElts().allHeroes); + const li = getHeroLiEltById(targetHero.id); + li.element(by.buttonText('x')).click(); + + const page = getPageElts(); + expect(page.myHeroes.isPresent()).toBeTruthy(); + expect(page.allHeroes.count()).toEqual(9, 'number of heroes'); + const heroesAfter = await toHeroArray(page.allHeroes); + const expectedHeroes = heroesBefore.filter(h => h.name !== newHeroName); + expect(heroesAfter).toEqual(expectedHeroes); + expect(page.selectedHeroSubview.isPresent()).toBeFalsy(); + }); + + it(`adds back ${targetHero.name}`, async () => { + const newHeroName = 'Alice'; + const heroesBefore = await toHeroArray(getPageElts().allHeroes); + const numHeroes = heroesBefore.length; + + element(by.css('input')).sendKeys(newHeroName); + element(by.buttonText('Add')).click(); + + let page = getPageElts(); + let heroesAfter = await toHeroArray(page.allHeroes); + expect(heroesAfter.length).toEqual(numHeroes + 1, 'number of heroes'); + + expect(heroesAfter.slice(0, numHeroes)).toEqual(heroesBefore, 'Old heroes are still there'); + + const maxId = heroesBefore[heroesBefore.length - 1].id; + expect(heroesAfter[numHeroes]).toEqual({id: maxId + 1, name: newHeroName}); + }); + }); + + describe('Progressive hero search', () => { + + beforeAll(() => browser.get('')); + + it(`searches for 'Ma'`, async () => { + getPageElts().searchBox.sendKeys('Ma'); + browser.sleep(1000); + expect(getPageElts().searchResults.count()).toBe(4); + }); + + it(`continues search with 'g'`, async () => { + getPageElts().searchBox.sendKeys('g'); + browser.sleep(1000); + expect(getPageElts().searchResults.count()).toBe(2); + }); + + it(`continues search with 'n' and gets ${targetHero.name}`, async () => { + getPageElts().searchBox.sendKeys('n'); + browser.sleep(1000); + let page = getPageElts(); + expect(page.searchResults.count()).toBe(1); + let hero = page.searchResults.get(0); + expect(hero.getText()).toEqual(targetHero.name); + }); + + it(`navigates to ${targetHero.name} details view`, async () => { + let hero = getPageElts().searchResults.get(0); + expect(hero.getText()).toEqual(targetHero.name); + hero.click(); + + let page = getPageElts(); + expect(page.heroDetail.isPresent()).toBeTruthy('shows hero detail'); + expect(Hero.fromDetail(page.heroDetail)).toEqual(targetHero); + }); + }); + + function dashboardSelectTargetHero() { + let targetHeroElt = getPageElts().topHeroes.get(targetHeroDashboardIndex); + expect(targetHeroElt.getText()).toEqual(targetHero.name); + targetHeroElt.click(); + browser.waitForAngular(); // seems necessary to gets tests to past for toh-6 + + let page = getPageElts(); + expect(page.heroDetail.isPresent()).toBeTruthy('shows hero detail'); + let hero = Hero.fromDetail(page.heroDetail); + expect(hero).toEqual(targetHero); + } + + async function updateHeroNameInDetailView() { + // Assumes that the current view is the hero details view. + addToHeroName(nameSuffix); + + let hero = await Hero.fromDetail(getPageElts().heroDetail); + expect(hero).toEqual({id: targetHero.id, name: newHeroName}); + } + +}); + +function addToHeroName(text: string): promise.Promise { + let input = element(by.css('input')); + return input.sendKeys(text); +} + +function expectHeading(hLevel: number, expectedText: string): void { + let hTag = `h${hLevel}`; + let hText = element(by.css(hTag)).getText(); + expect(hText).toEqual(expectedText, hTag); +}; + +function getHeroLiEltById(id: number): ElementFinder { + let spanForId = element(by.cssContainingText('li span.badge', id.toString())); + return spanForId.element(by.xpath('..')); +} + +async function toHeroArray(allHeroes: ElementArrayFinder): Promise { + let promisedHeroes = await allHeroes.map(Hero.fromLi); + // The cast is necessary to get around issuing with the signature of Promise.all() + return > Promise.all(promisedHeroes); +} diff --git a/aio/content/examples/toh-6/ts/.gitignore b/aio/content/examples/toh-6/ts/.gitignore new file mode 100644 index 0000000000..804879d44a --- /dev/null +++ b/aio/content/examples/toh-6/ts/.gitignore @@ -0,0 +1,8 @@ +aot/**/*.ts +**/*.ngfactory.ts +**/*.ngsummary.json +**/*.metadata.json +**/*.js +dist +!app/tsconfig.json +!rollup-config.js diff --git a/aio/content/examples/toh-6/ts/aot/index.html b/aio/content/examples/toh-6/ts/aot/index.html new file mode 100644 index 0000000000..1a64ca8cac --- /dev/null +++ b/aio/content/examples/toh-6/ts/aot/index.html @@ -0,0 +1,22 @@ + + + + + + Angular Tour of Heroes + + + + + + + + + + + + + Loading... + + + diff --git a/aio/content/examples/toh-6/ts/aot/styles.css b/aio/content/examples/toh-6/ts/aot/styles.css new file mode 100644 index 0000000000..d81835d0cd --- /dev/null +++ b/aio/content/examples/toh-6/ts/aot/styles.css @@ -0,0 +1,116 @@ +/* #docregion , quickstart, toh */ +/* Master Styles */ +h1 { + color: #369; + font-family: Arial, Helvetica, sans-serif; + font-size: 250%; +} +h2, h3 { + color: #444; + font-family: Arial, Helvetica, sans-serif; + font-weight: lighter; +} +body { + margin: 2em; +} +/* #enddocregion quickstart */ +body, input[text], button { + color: #888; + font-family: Cambria, Georgia; +} +/* #enddocregion toh */ +a { + cursor: pointer; + cursor: hand; +} +button { + font-family: Arial; + background-color: #eee; + border: none; + padding: 5px 10px; + border-radius: 4px; + cursor: pointer; + cursor: hand; +} +button:hover { + background-color: #cfd8dc; +} +button:disabled { + background-color: #eee; + color: #aaa; + cursor: auto; +} + +/* Navigation link styles */ +nav a { + padding: 5px 10px; + text-decoration: none; + margin-right: 10px; + margin-top: 10px; + display: inline-block; + background-color: #eee; + border-radius: 4px; +} +nav a:visited, a:link { + color: #607D8B; +} +nav a:hover { + color: #039be5; + background-color: #CFD8DC; +} +nav a.active { + color: #039be5; +} + +/* items class */ +.items { + margin: 0 0 2em 0; + list-style-type: none; + padding: 0; + width: 24em; +} +.items li { + cursor: pointer; + position: relative; + left: 0; + background-color: #EEE; + margin: .5em; + padding: .3em 0; + height: 1.6em; + border-radius: 4px; +} +.items li:hover { + color: #607D8B; + background-color: #DDD; + left: .1em; +} +.items li.selected { + background-color: #CFD8DC; + color: white; +} +.items li.selected:hover { + background-color: #BBD8DC; +} +.items .text { + position: relative; + top: -3px; +} +.items .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; +} +/* #docregion toh */ +/* everywhere else */ +* { + font-family: Arial, Helvetica, sans-serif; +} diff --git a/aio/content/examples/toh-6/ts/bs-config.aot.json b/aio/content/examples/toh-6/ts/bs-config.aot.json new file mode 100644 index 0000000000..e59a7403a0 --- /dev/null +++ b/aio/content/examples/toh-6/ts/bs-config.aot.json @@ -0,0 +1,14 @@ +{ + "open": false, + "logLevel": "silent", + "port": 8080, + "server": { + "baseDir": "aot", + "routes": { + "/node_modules": "node_modules" + }, + "middleware": { + "0": null + } + } +} diff --git a/aio/content/examples/toh-6/ts/example-config.json b/aio/content/examples/toh-6/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/toh-6/ts/plnkr.json b/aio/content/examples/toh-6/ts/plnkr.json new file mode 100644 index 0000000000..d355bc9ff2 --- /dev/null +++ b/aio/content/examples/toh-6/ts/plnkr.json @@ -0,0 +1,10 @@ +{ + "description": "Tour of Heroes: Part 6", + "basePath": "src/", + "files":[ + "!**/*.d.ts", + "!**/*.js", + "!**/*.[1,2].*" + ], + "tags": ["tutorial", "tour", "heroes", "http"] +} diff --git a/aio/content/examples/toh-6/ts/plnkr.no-link.html b/aio/content/examples/toh-6/ts/plnkr.no-link.html new file mode 100644 index 0000000000..0407009dc2 --- /dev/null +++ b/aio/content/examples/toh-6/ts/plnkr.no-link.html @@ -0,0 +1,883 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/toh-6/ts/rollup-config.js b/aio/content/examples/toh-6/ts/rollup-config.js new file mode 100644 index 0000000000..d5d07e07e5 --- /dev/null +++ b/aio/content/examples/toh-6/ts/rollup-config.js @@ -0,0 +1,32 @@ +// #docregion +import rollup from 'rollup' +import nodeResolve from 'rollup-plugin-node-resolve' +import commonjs from 'rollup-plugin-commonjs'; +import uglify from 'rollup-plugin-uglify' + +//paths are relative to the execution path +export default { + entry: 'src/main-aot.js', + dest: 'aot/dist/build.js', // output a single application bundle + sourceMap: true, + sourceMapFile: 'aot/dist/build.js.map', + format: 'iife', + onwarn: function(warning) { + // Skip certain warnings + + // should intercept ... but doesn't in some rollup versions + if ( warning.code === 'THIS_IS_UNDEFINED' ) { return; } + // intercepts in some rollup versions + if ( warning.indexOf("The 'this' keyword is equivalent to 'undefined'") > -1 ) { return; } + + // console.warn everything else + console.warn( warning.message ); + }, + plugins: [ + nodeResolve({jsnext: true, module: true}), + commonjs({ + include: ['node_modules/rxjs/**'] + }), + uglify() + ] +} diff --git a/aio/content/examples/toh-6/ts/src/app/app-routing.module.ts b/aio/content/examples/toh-6/ts/src/app/app-routing.module.ts new file mode 100644 index 0000000000..bc070f6c31 --- /dev/null +++ b/aio/content/examples/toh-6/ts/src/app/app-routing.module.ts @@ -0,0 +1,19 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +import { DashboardComponent } from './dashboard.component'; +import { HeroesComponent } from './heroes.component'; +import { HeroDetailComponent } from './hero-detail.component'; + +const routes: Routes = [ + { path: '', redirectTo: '/dashboard', pathMatch: 'full' }, + { path: 'dashboard', component: DashboardComponent }, + { path: 'detail/:id', component: HeroDetailComponent }, + { path: 'heroes', component: HeroesComponent } +]; + +@NgModule({ + imports: [ RouterModule.forRoot(routes) ], + exports: [ RouterModule ] +}) +export class AppRoutingModule {} diff --git a/aio/content/examples/toh-6/ts/src/app/app.component.css b/aio/content/examples/toh-6/ts/src/app/app.component.css new file mode 100644 index 0000000000..071e665767 --- /dev/null +++ b/aio/content/examples/toh-6/ts/src/app/app.component.css @@ -0,0 +1,29 @@ +/* #docregion */ +h1 { + font-size: 1.2em; + color: #999; + margin-bottom: 0; +} +h2 { + font-size: 2em; + margin-top: 0; + padding-top: 0; +} +nav a { + padding: 5px 10px; + text-decoration: none; + margin-top: 10px; + display: inline-block; + background-color: #eee; + border-radius: 4px; +} +nav a:visited, a:link { + color: #607D8B; +} +nav a:hover { + color: #039be5; + background-color: #CFD8DC; +} +nav a.active { + color: #039be5; +} diff --git a/aio/content/examples/toh-6/ts/src/app/app.component.ts b/aio/content/examples/toh-6/ts/src/app/app.component.ts new file mode 100644 index 0000000000..d8a8507985 --- /dev/null +++ b/aio/content/examples/toh-6/ts/src/app/app.component.ts @@ -0,0 +1,20 @@ +// #docplaster +// #docregion +import { Component } from '@angular/core'; + +@Component({ + moduleId: module.id, + selector: 'my-app', + template: ` +

    {{title}}

    + + + `, + styleUrls: ['./app.component.css'] +}) +export class AppComponent { + title = 'Tour of Heroes'; +} diff --git a/aio/content/examples/toh-6/ts/src/app/app.module.ts b/aio/content/examples/toh-6/ts/src/app/app.module.ts new file mode 100644 index 0000000000..58eeb10c54 --- /dev/null +++ b/aio/content/examples/toh-6/ts/src/app/app.module.ts @@ -0,0 +1,52 @@ +// #docplaster +// #docregion +// #docregion v1, v2 +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'; + +// #enddocregion v1 +// Imports for loading & configuring the in-memory web api +import { InMemoryWebApiModule } from 'angular-in-memory-web-api'; +import { InMemoryDataService } from './in-memory-data.service'; + +// #docregion v1 +import { AppComponent } from './app.component'; +import { DashboardComponent } from './dashboard.component'; +import { HeroesComponent } from './heroes.component'; +import { HeroDetailComponent } from './hero-detail.component'; +import { HeroService } from './hero.service'; +// #enddocregion v1, v2 +import { HeroSearchComponent } from './hero-search.component'; +// #docregion v1, v2 + +@NgModule({ + imports: [ + BrowserModule, + FormsModule, + HttpModule, + // #enddocregion v1 + // #docregion in-mem-web-api + InMemoryWebApiModule.forRoot(InMemoryDataService), + // #enddocregion in-mem-web-api + // #docregion v1 + AppRoutingModule + ], + // #docregion search + declarations: [ + AppComponent, + DashboardComponent, + HeroDetailComponent, + HeroesComponent, + // #enddocregion v1, v2 + HeroSearchComponent + // #docregion v1, v2 + ], + // #enddocregion search + providers: [ HeroService ], + bootstrap: [ AppComponent ] +}) +export class AppModule { } diff --git a/aio/content/examples/toh-6/ts/src/app/dashboard.component.css b/aio/content/examples/toh-6/ts/src/app/dashboard.component.css new file mode 100644 index 0000000000..dc7fb7ce06 --- /dev/null +++ b/aio/content/examples/toh-6/ts/src/app/dashboard.component.css @@ -0,0 +1,62 @@ +/* #docregion */ +[class*='col-'] { + float: left; + padding-right: 20px; + padding-bottom: 20px; +} +[class*='col-']:last-of-type { + padding-right: 0; +} +a { + text-decoration: none; +} +*, *:after, *:before { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +h3 { + text-align: center; margin-bottom: 0; +} +h4 { + position: relative; +} +.grid { + margin: 0; +} +.col-1-4 { + width: 25%; +} +.module { + padding: 20px; + text-align: center; + color: #eee; + max-height: 120px; + min-width: 120px; + background-color: #607D8B; + border-radius: 2px; +} +.module:hover { + background-color: #EEE; + cursor: pointer; + color: #607d8b; +} +.grid-pad { + padding: 10px 0; +} +.grid-pad > [class*='col-']:last-of-type { + padding-right: 20px; +} +@media (max-width: 600px) { + .module { + font-size: 10px; + max-height: 75px; } +} +@media (max-width: 1024px) { + .grid { + margin: 0; + } + .module { + min-width: 60px; + } +} diff --git a/aio/content/examples/toh-6/ts/src/app/dashboard.component.html b/aio/content/examples/toh-6/ts/src/app/dashboard.component.html new file mode 100644 index 0000000000..db8546ccd2 --- /dev/null +++ b/aio/content/examples/toh-6/ts/src/app/dashboard.component.html @@ -0,0 +1,10 @@ + +

    Top Heroes

    + + diff --git a/aio/content/examples/toh-6/ts/src/app/dashboard.component.ts b/aio/content/examples/toh-6/ts/src/app/dashboard.component.ts new file mode 100644 index 0000000000..1eb93f9c01 --- /dev/null +++ b/aio/content/examples/toh-6/ts/src/app/dashboard.component.ts @@ -0,0 +1,23 @@ +// #docregion , search +import { Component, OnInit } from '@angular/core'; + +import { Hero } from './hero'; +import { HeroService } from './hero.service'; + +@Component({ + moduleId: module.id, + selector: 'my-dashboard', + templateUrl: './dashboard.component.html', + styleUrls: [ './dashboard.component.css' ] +}) +// #enddocregion search +export class DashboardComponent implements OnInit { + heroes: Hero[] = []; + + constructor(private heroService: HeroService) { } + + ngOnInit(): void { + this.heroService.getHeroes() + .then(heroes => this.heroes = heroes.slice(1, 5)); + } +} diff --git a/aio/content/examples/toh-6/ts/src/app/hero-detail.component.css b/aio/content/examples/toh-6/ts/src/app/hero-detail.component.css new file mode 100644 index 0000000000..ab2437efd8 --- /dev/null +++ b/aio/content/examples/toh-6/ts/src/app/hero-detail.component.css @@ -0,0 +1,30 @@ +/* #docregion */ +label { + display: inline-block; + width: 3em; + margin: .5em 0; + color: #607D8B; + font-weight: bold; +} +input { + height: 2em; + font-size: 1em; + padding-left: .4em; +} +button { + margin-top: 20px; + font-family: Arial; + background-color: #eee; + border: none; + padding: 5px 10px; + border-radius: 4px; + cursor: pointer; cursor: hand; +} +button:hover { + background-color: #cfd8dc; +} +button:disabled { + background-color: #eee; + color: #ccc; + cursor: auto; +} diff --git a/aio/content/examples/toh-6/ts/src/app/hero-detail.component.html b/aio/content/examples/toh-6/ts/src/app/hero-detail.component.html new file mode 100644 index 0000000000..32fe6d4391 --- /dev/null +++ b/aio/content/examples/toh-6/ts/src/app/hero-detail.component.html @@ -0,0 +1,14 @@ + +
    +

    {{hero.name}} details!

    +
    + {{hero.id}}
    +
    + + +
    + + + + +
    diff --git a/aio/content/examples/toh-6/ts/src/app/hero-detail.component.ts b/aio/content/examples/toh-6/ts/src/app/hero-detail.component.ts new file mode 100644 index 0000000000..3f1c7b72f9 --- /dev/null +++ b/aio/content/examples/toh-6/ts/src/app/hero-detail.component.ts @@ -0,0 +1,41 @@ +// #docregion +import 'rxjs/add/operator/switchMap'; +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute, Params } from '@angular/router'; +import { Location } from '@angular/common'; + +import { Hero } from './hero'; +import { HeroService } from './hero.service'; + +@Component({ + moduleId: module.id, + selector: 'my-hero-detail', + templateUrl: './hero-detail.component.html', + styleUrls: [ './hero-detail.component.css' ] +}) +export class HeroDetailComponent implements OnInit { + hero: Hero; + + constructor( + private heroService: HeroService, + private route: ActivatedRoute, + private location: Location + ) {} + + ngOnInit(): void { + this.route.params + .switchMap((params: Params) => this.heroService.getHero(+params['id'])) + .subscribe(hero => this.hero = hero); + } + + // #docregion save + save(): void { + this.heroService.update(this.hero) + .then(() => this.goBack()); + } + // #enddocregion save + + goBack(): void { + this.location.back(); + } +} diff --git a/aio/content/examples/toh-6/ts/src/app/hero-search.component.css b/aio/content/examples/toh-6/ts/src/app/hero-search.component.css new file mode 100644 index 0000000000..741b379356 --- /dev/null +++ b/aio/content/examples/toh-6/ts/src/app/hero-search.component.css @@ -0,0 +1,16 @@ +/* #docregion */ +.search-result{ + border-bottom: 1px solid gray; + border-left: 1px solid gray; + border-right: 1px solid gray; + width:195px; + height: 20px; + padding: 5px; + background-color: white; + cursor: pointer; +} + +#search-box{ + width: 200px; + height: 20px; +} diff --git a/aio/content/examples/toh-6/ts/src/app/hero-search.component.html b/aio/content/examples/toh-6/ts/src/app/hero-search.component.html new file mode 100644 index 0000000000..08c0560c5b --- /dev/null +++ b/aio/content/examples/toh-6/ts/src/app/hero-search.component.html @@ -0,0 +1,11 @@ + +
    +

    Hero Search

    + +
    +
    + {{hero.name}} +
    +
    +
    diff --git a/aio/content/examples/toh-6/ts/src/app/hero-search.component.ts b/aio/content/examples/toh-6/ts/src/app/hero-search.component.ts new file mode 100644 index 0000000000..949ef897db --- /dev/null +++ b/aio/content/examples/toh-6/ts/src/app/hero-search.component.ts @@ -0,0 +1,70 @@ +// #docplaster +// #docregion +import { Component, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; + +// #docregion rxjs-imports +import { Observable } from 'rxjs/Observable'; +import { Subject } from 'rxjs/Subject'; + +// Observable class extensions +import 'rxjs/add/observable/of'; + +// Observable operators +import 'rxjs/add/operator/catch'; +import 'rxjs/add/operator/debounceTime'; +import 'rxjs/add/operator/distinctUntilChanged'; +// #enddocregion rxjs-imports + +import { HeroSearchService } from './hero-search.service'; +import { Hero } from './hero'; + +@Component({ + moduleId: module.id, + selector: 'hero-search', + templateUrl: './hero-search.component.html', + styleUrls: [ './hero-search.component.css' ], + providers: [HeroSearchService] +}) +export class HeroSearchComponent implements OnInit { + // #docregion search + heroes: Observable; + // #enddocregion search + // #docregion searchTerms + private searchTerms = new Subject(); + // #enddocregion searchTerms + + constructor( + private heroSearchService: HeroSearchService, + private router: Router) {} + // #docregion searchTerms + + // Push a search term into the observable stream. + search(term: string): void { + this.searchTerms.next(term); + } + // #enddocregion searchTerms + // #docregion search + + ngOnInit(): void { + this.heroes = this.searchTerms + .debounceTime(300) // wait 300ms after each keystroke before considering the term + .distinctUntilChanged() // ignore if next search term is same as previous + .switchMap(term => term // switch to new observable each time the term changes + // return the http search observable + ? this.heroSearchService.search(term) + // or the observable of empty heroes if there was no search term + : Observable.of([])) + .catch(error => { + // TODO: add real error handling + console.log(error); + return Observable.of([]); + }); + } + // #enddocregion search + + gotoDetail(hero: Hero): void { + let link = ['/detail', hero.id]; + this.router.navigate(link); + } +} diff --git a/aio/content/examples/toh-6/ts/src/app/hero-search.service.ts b/aio/content/examples/toh-6/ts/src/app/hero-search.service.ts new file mode 100644 index 0000000000..d24e0fba41 --- /dev/null +++ b/aio/content/examples/toh-6/ts/src/app/hero-search.service.ts @@ -0,0 +1,20 @@ +// #docregion +import { Injectable } from '@angular/core'; +import { Http } from '@angular/http'; + +import { Observable } from 'rxjs/Observable'; +import 'rxjs/add/operator/map'; + +import { Hero } from './hero'; + +@Injectable() +export class HeroSearchService { + + constructor(private http: Http) {} + + search(term: string): Observable { + return this.http + .get(`app/heroes/?name=${term}`) + .map(response => response.json().data as Hero[]); + } +} diff --git a/aio/content/examples/toh-6/ts/src/app/hero.service.ts b/aio/content/examples/toh-6/ts/src/app/hero.service.ts new file mode 100644 index 0000000000..18af476123 --- /dev/null +++ b/aio/content/examples/toh-6/ts/src/app/hero.service.ts @@ -0,0 +1,87 @@ +// #docplaster +// #docregion , imports +import { Injectable } from '@angular/core'; +import { Headers, Http } from '@angular/http'; + +// #docregion rxjs +import 'rxjs/add/operator/toPromise'; +// #enddocregion rxjs + +import { Hero } from './hero'; +// #enddocregion imports + +@Injectable() +export class HeroService { + + // #docregion update + private headers = new Headers({'Content-Type': 'application/json'}); + // #enddocregion update + // #docregion getHeroes + private heroesUrl = 'api/heroes'; // URL to web api + + constructor(private http: Http) { } + + getHeroes(): Promise { + return this.http.get(this.heroesUrl) + // #docregion to-promise + .toPromise() + // #enddocregion to-promise + // #docregion to-data + .then(response => response.json().data as Hero[]) + // #enddocregion to-data + // #docregion catch + .catch(this.handleError); + // #enddocregion catch + } + + // #enddocregion getHeroes + + // #docregion getHero + getHero(id: number): Promise { + const url = `${this.heroesUrl}/${id}`; + return this.http.get(url) + .toPromise() + .then(response => response.json().data as Hero) + .catch(this.handleError); + } + // #enddocregion getHero + + // #docregion delete + delete(id: number): Promise { + const url = `${this.heroesUrl}/${id}`; + return this.http.delete(url, {headers: this.headers}) + .toPromise() + .then(() => null) + .catch(this.handleError); + } + // #enddocregion delete + + // #docregion create + create(name: string): Promise { + return this.http + .post(this.heroesUrl, JSON.stringify({name: name}), {headers: this.headers}) + .toPromise() + .then(res => res.json().data) + .catch(this.handleError); + } + // #enddocregion create + // #docregion update + + update(hero: Hero): Promise { + const url = `${this.heroesUrl}/${hero.id}`; + return this.http + .put(url, JSON.stringify(hero), {headers: this.headers}) + .toPromise() + .then(() => hero) + .catch(this.handleError); + } + // #enddocregion update + + // #docregion getHeroes, handleError + private handleError(error: any): Promise { + console.error('An error occurred', error); // for demo purposes only + return Promise.reject(error.message || error); + } + // #enddocregion getHeroes, handleError +} + diff --git a/aio/content/examples/toh-6/ts/src/app/hero.ts b/aio/content/examples/toh-6/ts/src/app/hero.ts new file mode 100644 index 0000000000..e3eac516da --- /dev/null +++ b/aio/content/examples/toh-6/ts/src/app/hero.ts @@ -0,0 +1,4 @@ +export class Hero { + id: number; + name: string; +} diff --git a/aio/content/examples/toh-6/ts/src/app/heroes.component.css b/aio/content/examples/toh-6/ts/src/app/heroes.component.css new file mode 100644 index 0000000000..d2c958a911 --- /dev/null +++ b/aio/content/examples/toh-6/ts/src/app/heroes.component.css @@ -0,0 +1,68 @@ +/* #docregion */ +.selected { + background-color: #CFD8DC !important; + color: white; +} +.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 li:hover { + color: #607D8B; + background-color: #DDD; + left: .1em; +} +.heroes li.selected:hover { + background-color: #BBD8DC !important; + color: white; +} +.heroes .text { + position: relative; + top: -3px; +} +.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; +} +button { + font-family: Arial; + background-color: #eee; + border: none; + padding: 5px 10px; + border-radius: 4px; + cursor: pointer; + cursor: hand; +} +button:hover { + background-color: #cfd8dc; +} +/* #docregion additions */ +button.delete { + float:right; + margin-top: 2px; + margin-right: .8em; + background-color: gray !important; + color:white; +} diff --git a/aio/content/examples/toh-6/ts/src/app/heroes.component.html b/aio/content/examples/toh-6/ts/src/app/heroes.component.html new file mode 100644 index 0000000000..392d241d52 --- /dev/null +++ b/aio/content/examples/toh-6/ts/src/app/heroes.component.html @@ -0,0 +1,29 @@ + +

    My Heroes

    + +
    + + +
    + +
      + +
    • + {{hero.id}} + {{hero.name}} + + + +
    • + +
    +
    +

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

    + +
    diff --git a/aio/content/examples/toh-6/ts/src/app/heroes.component.ts b/aio/content/examples/toh-6/ts/src/app/heroes.component.ts new file mode 100644 index 0000000000..2a92adfaa8 --- /dev/null +++ b/aio/content/examples/toh-6/ts/src/app/heroes.component.ts @@ -0,0 +1,62 @@ +// #docregion +import { Component, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; + +import { Hero } from './hero'; +import { HeroService } from './hero.service'; + +@Component({ + moduleId: module.id, + selector: 'my-heroes', + templateUrl: './heroes.component.html', + styleUrls: [ './heroes.component.css' ] +}) +export class HeroesComponent implements OnInit { + heroes: Hero[]; + selectedHero: Hero; + + constructor( + private heroService: HeroService, + private router: Router) { } + + getHeroes(): void { + this.heroService + .getHeroes() + .then(heroes => this.heroes = heroes); + } + + // #docregion add + add(name: string): void { + name = name.trim(); + if (!name) { return; } + this.heroService.create(name) + .then(hero => { + this.heroes.push(hero); + this.selectedHero = null; + }); + } + // #enddocregion add + + // #docregion delete + delete(hero: Hero): void { + this.heroService + .delete(hero.id) + .then(() => { + this.heroes = this.heroes.filter(h => h !== hero); + if (this.selectedHero === hero) { this.selectedHero = null; } + }); + } + // #enddocregion delete + + ngOnInit(): void { + this.getHeroes(); + } + + onSelect(hero: Hero): void { + this.selectedHero = hero; + } + + gotoDetail(): void { + this.router.navigate(['/detail', this.selectedHero.id]); + } +} diff --git a/aio/content/examples/toh-6/ts/src/app/in-memory-data.service.ts b/aio/content/examples/toh-6/ts/src/app/in-memory-data.service.ts new file mode 100644 index 0000000000..c915955e22 --- /dev/null +++ b/aio/content/examples/toh-6/ts/src/app/in-memory-data.service.ts @@ -0,0 +1,19 @@ +// #docregion , init +import { InMemoryDbService } from 'angular-in-memory-web-api'; +export class InMemoryDataService implements InMemoryDbService { + createDb() { + let heroes = [ + {id: 11, name: 'Mr. Nice'}, + {id: 12, name: 'Narco'}, + {id: 13, name: 'Bombasto'}, + {id: 14, name: 'Celeritas'}, + {id: 15, name: 'Magneta'}, + {id: 16, name: 'RubberMan'}, + {id: 17, name: 'Dynama'}, + {id: 18, name: 'Dr IQ'}, + {id: 19, name: 'Magma'}, + {id: 20, name: 'Tornado'} + ]; + return {heroes}; + } +} diff --git a/aio/content/examples/toh-6/ts/src/index.html b/aio/content/examples/toh-6/ts/src/index.html new file mode 100644 index 0000000000..18977969bb --- /dev/null +++ b/aio/content/examples/toh-6/ts/src/index.html @@ -0,0 +1,26 @@ + + + + + + Angular Tour of Heroes + + + + + + + + + + + + + + + + Loading... + + diff --git a/aio/content/examples/toh-6/ts/src/main-aot.ts b/aio/content/examples/toh-6/ts/src/main-aot.ts new file mode 100644 index 0000000000..bd2ca604a3 --- /dev/null +++ b/aio/content/examples/toh-6/ts/src/main-aot.ts @@ -0,0 +1,6 @@ +// #docregion +import { platformBrowser } from '@angular/platform-browser'; + +import { AppModuleNgFactory } from '../aot/src/app/app.module.ngfactory'; + +platformBrowser().bootstrapModuleFactory(AppModuleNgFactory); diff --git a/aio/content/examples/toh-6/ts/src/main.ts b/aio/content/examples/toh-6/ts/src/main.ts new file mode 100644 index 0000000000..f332d1d245 --- /dev/null +++ b/aio/content/examples/toh-6/ts/src/main.ts @@ -0,0 +1,6 @@ +// #docregion +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/toh-6/ts/src/tsconfig.1.json b/aio/content/examples/toh-6/ts/src/tsconfig.1.json new file mode 100644 index 0000000000..05839ec2ff --- /dev/null +++ b/aio/content/examples/toh-6/ts/src/tsconfig.1.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "target": "es5", + "module": "commonjs", + "moduleResolution": "node", + "sourceMap": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "lib": [ "es2015", "dom" ], + "noImplicitAny": true, + "suppressImplicitAnyIndexErrors": true, + "typeRoots": [ + "../../../node_modules/@types/" + ] + }, + "compileOnSave": true, + "exclude": [ + "node_modules/*", + "**/*-aot.ts" + ] +} diff --git a/aio/content/examples/toh-6/ts/tsconfig-aot.json b/aio/content/examples/toh-6/ts/tsconfig-aot.json new file mode 100644 index 0000000000..fe1e6df520 --- /dev/null +++ b/aio/content/examples/toh-6/ts/tsconfig-aot.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "target": "es5", + "module": "es2015", + "moduleResolution": "node", + "sourceMap": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "lib": ["es2015", "dom"], + "noImplicitAny": true, + "suppressImplicitAnyIndexErrors": true, + "typeRoots": [ + "../../node_modules/@types/" + ] + }, + + "files": [ + "src/app/app.module.ts", + "src/main-aot.ts" + ], + + "angularCompilerOptions": { + "genDir": "aot", + "skipMetadataEmit" : true + } +} diff --git a/aio/content/examples/toh-6/ts/tsconfig-aot.json.annotated b/aio/content/examples/toh-6/ts/tsconfig-aot.json.annotated new file mode 100644 index 0000000000..d11a88c599 --- /dev/null +++ b/aio/content/examples/toh-6/ts/tsconfig-aot.json.annotated @@ -0,0 +1,28 @@ +// #docregion +{ + "compilerOptions": { + "target": "es5", + "module": "es2015", + "moduleResolution": "node", + "sourceMap": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "lib": ["es2015", "dom"], + "noImplicitAny": true, + "suppressImplicitAnyIndexErrors": true, + "typeRoots": [ + "../../node_modules/@types/" + ] + }, + + "files": [ + "src/app/app.module.ts", + "src/main-aot.ts" + ], + + "angularCompilerOptions": { + "genDir": "aot", + "skipMetadataEmit" : true + } +} +// #enddocregion \ No newline at end of file diff --git a/aio/content/examples/tsconfig.json b/aio/content/examples/tsconfig.json new file mode 100644 index 0000000000..41a6efb13d --- /dev/null +++ b/aio/content/examples/tsconfig.json @@ -0,0 +1,24 @@ +// this tsconfig is used for protractor tests +// see _boilerplate/tsconfig.json for the the tsconfig used in examples +{ + "compilerOptions": { + "target": "es6", + "module": "commonjs", + "moduleResolution": "node", + "sourceMap": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "lib": ["es2015", "dom"], + "noImplicitAny": true, + "suppressImplicitAnyIndexErrors": true, + "typeRoots": [ + "node_modules/@types" + ] + }, + "files": [ + "protractor-helpers.ts" + ], + "include": [ + "*/e2e-spec.ts" + ] +} diff --git a/aio/content/examples/upgrade-module/e2e-spec.ts b/aio/content/examples/upgrade-module/e2e-spec.ts new file mode 100644 index 0000000000..0c45fb78b8 --- /dev/null +++ b/aio/content/examples/upgrade-module/e2e-spec.ts @@ -0,0 +1,182 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by } from 'protractor'; +import { setProtractorToHybridMode } from '../protractor-helpers'; + +describe('Upgrade Tests', function () { + + beforeAll(function () { + setProtractorToHybridMode(); + }); + + describe('AngularJS Auto-bootstrap', function() { + + beforeAll(function () { + browser.get('/index-ng-app.html'); + }); + + it('bootstraps as expected', function () { + expect(element(by.css('#message')).getText()).toEqual('Hello world'); + }); + + }); + + describe('AngularJS JavaScript Bootstrap', function() { + + beforeAll(function () { + browser.get('/index-bootstrap.html'); + }); + + it('bootstraps as expected', function () { + expect(element(by.css('#message')).getText()).toEqual('Hello world'); + }); + + }); + + describe('AngularJS-Angular Hybrid Bootstrap', function() { + + beforeAll(function () { + browser.get('/index-ajs-a-hybrid-bootstrap.html'); + }); + + it('bootstraps as expected', function () { + expect(element(by.css('#message')).getText()).toEqual('Hello world'); + }); + + }); + + describe('Upgraded static component', function() { + + beforeAll(function () { + browser.get('/index-upgrade-static.html'); + }); + + it('renders', function () { + expect(element(by.css('h2')).getText()).toEqual('Windstorm details!'); + }); + + }); + + + describe('Upgraded component with IO', function() { + + beforeAll(function () { + browser.get('/index-upgrade-io.html'); + }); + + it('has inputs', function () { + expect(element(by.css('h2')).getText()).toEqual('Windstorm details!'); + }); + + it('has outputs', function () { + element(by.buttonText('Delete')).click(); + expect(element(by.css('h2')).getText()).toEqual('Ex-Windstorm details!'); + }); + + }); + + + describe('Downgraded static component', function() { + + beforeAll(function () { + browser.get('/index-downgrade-static.html'); + }); + + it('renders', function () { + expect(element(by.css('h2')).getText()).toEqual('Windstorm details!'); + }); + + }); + + describe('Downgraded component with IO', function() { + + beforeAll(function () { + browser.get('/index-downgrade-io.html'); + }); + + it('has inputs', function () { + expect(element.all(by.css('h2')).first().getText()).toEqual('Windstorm details!'); + }); + + it('has outputs', function () { + element.all(by.buttonText('Delete')).first().click(); + expect(element.all(by.css('h2')).first().getText()).toEqual('Ex-Windstorm details!'); + }); + + it('supports ng-repeat', function () { + expect(element.all(by.css('hero-detail')).count()).toBe(3); + }); + + }); + + + describe('Downgraded component with content projection', function() { + + beforeAll(function () { + browser.get('/index-ajs-to-a-projection.html'); + }); + + it('can be transcluded into', function () { + expect(element(by.css('hero-detail')).getText()).toContain('Specific powers of controlling winds'); + }); + + }); + + + describe('Upgraded component with transclusion', function() { + + beforeAll(function () { + browser.get('/index-a-to-ajs-transclusion.html'); + }); + + it('can be projected into', function () { + expect(element(by.css('hero-detail')).getText()).toContain('Specific powers of controlling winds'); + }); + + }); + + + describe('Upgrading AngularJS Providers', function() { + + beforeAll(function () { + browser.get('/index-ajs-to-a-providers.html'); + }); + + it('works', function () { + expect(element(by.css('h2')).getText()).toBe('1: Windstorm'); + }); + + }); + + + describe('Downgrading Angular Providers', function() { + + beforeAll(function () { + browser.get('/index-a-to-ajs-providers.html'); + }); + + it('works', function () { + expect(element(by.css('h2')).getText()).toBe('1: Windstorm'); + }); + + }); + + describe('Dividing routes', function() { + + beforeAll(function () { + browser.get('/index-divide-routes.html'); + }); + + it('allows ng1 routes', function () { + browser.get('/index-divide-routes.html#/villain'); + expect(element(by.css('h2')).getText()).toBe('Mr. Nice - No More Mr. Nice Guy'); + }); + + it('allows ng2 routes', function () { + browser.get('/index-divide-routes.html#/hero'); + expect(element(by.css('h2')).getText()).toBe('Windstorm - Specific powers of controlling winds'); + }); + + }); + +}); diff --git a/aio/content/examples/upgrade-module/ts/.gitignore b/aio/content/examples/upgrade-module/ts/.gitignore new file mode 100644 index 0000000000..7f5c313a3e --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/.gitignore @@ -0,0 +1,7 @@ +**/*.js +aot/**/* +!aot/bs-config.json +!aot/index.html +!copy-dist-files.js +!rollup-config.js +!systemjs.config.1.js diff --git a/aio/content/examples/upgrade-module/ts/example-config.json b/aio/content/examples/upgrade-module/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/upgrade-module/ts/src/app/a-to-ajs-providers/app.module.ts b/aio/content/examples/upgrade-module/ts/src/app/a-to-ajs-providers/app.module.ts new file mode 100644 index 0000000000..91235a1485 --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/app/a-to-ajs-providers/app.module.ts @@ -0,0 +1,34 @@ +declare var angular: angular.IAngularStatic; +import { NgModule } from '@angular/core'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { BrowserModule } from '@angular/platform-browser'; +import { UpgradeModule } from '@angular/upgrade/static'; + +import { heroDetailComponent } from './hero-detail.component'; + +// #docregion ngmodule +import { Heroes } from './heroes'; + +@NgModule({ + imports: [ + BrowserModule, + UpgradeModule + ], + providers: [ Heroes ] +}) +export class AppModule { + ngDoBootstrap() {} +} +// #enddocregion ngmodule +// #docregion register +import { downgradeInjectable } from '@angular/upgrade/static'; + +angular.module('heroApp', []) + .factory('heroes', downgradeInjectable(Heroes)) + .component('heroDetail', heroDetailComponent); +// #enddocregion register + +platformBrowserDynamic().bootstrapModule(AppModule).then(platformRef => { + const upgrade = platformRef.injector.get(UpgradeModule) as UpgradeModule; + upgrade.bootstrap(document.body, ['heroApp'], {strictDi: true}); +}); diff --git a/aio/content/examples/upgrade-module/ts/src/app/a-to-ajs-providers/hero-detail.component.ts b/aio/content/examples/upgrade-module/ts/src/app/a-to-ajs-providers/hero-detail.component.ts new file mode 100644 index 0000000000..dd7aa10d79 --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/app/a-to-ajs-providers/hero-detail.component.ts @@ -0,0 +1,11 @@ +import { Heroes } from './heroes'; + +// #docregion +export const heroDetailComponent = { + template: ` +

    {{$ctrl.hero.id}}: {{$ctrl.hero.name}}

    + `, + controller: ['heroes', function(heroes: Heroes) { + this.hero = heroes.get()[0]; + }] +}; diff --git a/aio/content/examples/upgrade-module/ts/src/app/a-to-ajs-providers/heroes.ts b/aio/content/examples/upgrade-module/ts/src/app/a-to-ajs-providers/heroes.ts new file mode 100644 index 0000000000..f5f6d87ed8 --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/app/a-to-ajs-providers/heroes.ts @@ -0,0 +1,13 @@ +// #docregion +import { Injectable } from '@angular/core'; +import { Hero } from '../hero'; + +@Injectable() +export class Heroes { + get() { + return [ + new Hero(1, 'Windstorm'), + new Hero(2, 'Spiderman') + ]; + } +} diff --git a/aio/content/examples/upgrade-module/ts/src/app/a-to-ajs-transclusion/app.module.ts b/aio/content/examples/upgrade-module/ts/src/app/a-to-ajs-transclusion/app.module.ts new file mode 100644 index 0000000000..599e711b5e --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/app/a-to-ajs-transclusion/app.module.ts @@ -0,0 +1,39 @@ +declare var angular: angular.IAngularStatic; +import { NgModule } from '@angular/core'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { BrowserModule } from '@angular/platform-browser'; +import { UpgradeModule, downgradeComponent } from '@angular/upgrade/static'; + +import { heroDetail, HeroDetailDirective } from './hero-detail.component'; +import { ContainerComponent } from './container.component'; + +// #docregion heroupgrade +@NgModule({ + imports: [ + BrowserModule, + UpgradeModule + ], + declarations: [ + ContainerComponent, + HeroDetailDirective + ], + entryComponents: [ + ContainerComponent + ] +}) +export class AppModule { + ngDoBootstrap() {} +} +// #enddocregion heroupgrade + +angular.module('heroApp', []) + .component('heroDetail', heroDetail) + .directive( + 'myContainer', + downgradeComponent({component: ContainerComponent}) as angular.IDirectiveFactory + ); + +platformBrowserDynamic().bootstrapModule(AppModule).then(platformRef => { + const upgrade = platformRef.injector.get(UpgradeModule) as UpgradeModule; + upgrade.bootstrap(document.body, ['heroApp'], {strictDi: true}); +}); diff --git a/aio/content/examples/upgrade-module/ts/src/app/a-to-ajs-transclusion/container.component.ts b/aio/content/examples/upgrade-module/ts/src/app/a-to-ajs-transclusion/container.component.ts new file mode 100644 index 0000000000..1b740d6554 --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/app/a-to-ajs-transclusion/container.component.ts @@ -0,0 +1,16 @@ +// #docregion +import { Component } from '@angular/core'; +import { Hero } from '../hero'; + +@Component({ + selector: 'my-container', + template: ` + + +

    {{hero.description}}

    +
    + ` +}) +export class ContainerComponent { + hero = new Hero(1, 'Windstorm', 'Specific powers of controlling winds'); +} diff --git a/aio/content/examples/upgrade-module/ts/src/app/a-to-ajs-transclusion/hero-detail.component.ts b/aio/content/examples/upgrade-module/ts/src/app/a-to-ajs-transclusion/hero-detail.component.ts new file mode 100644 index 0000000000..a1bec385e0 --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/app/a-to-ajs-transclusion/hero-detail.component.ts @@ -0,0 +1,28 @@ +// #docregion +export const heroDetail = { + bindings: { + hero: '=' + }, + template: ` +

    {{$ctrl.hero.name}}

    +
    + +
    + ` +}; +// #enddocregion + +import { Directive, ElementRef, Injector, Input } from '@angular/core'; +import { UpgradeComponent } from '@angular/upgrade/static'; +import { Hero } from '../hero'; + +@Directive({ + selector: 'hero-detail' +}) +export class HeroDetailDirective extends UpgradeComponent { + @Input() hero: Hero; + + constructor(elementRef: ElementRef, injector: Injector) { + super('heroDetail', elementRef, injector); + } +} diff --git a/aio/content/examples/upgrade-module/ts/src/app/ajs-a-hybrid-bootstrap/app.module.ts b/aio/content/examples/upgrade-module/ts/src/app/ajs-a-hybrid-bootstrap/app.module.ts new file mode 100644 index 0000000000..7a6b82cf92 --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/app/ajs-a-hybrid-bootstrap/app.module.ts @@ -0,0 +1,29 @@ +declare var angular: angular.IAngularStatic; +// #docregion ngmodule +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { UpgradeModule } from '@angular/upgrade/static'; + +@NgModule({ + imports: [ + BrowserModule, + UpgradeModule + ] +}) +export class AppModule { + ngDoBootstrap() {} +} +// #enddocregion ngmodule +angular.module('heroApp', []) + .controller('MainCtrl', function() { + this.message = 'Hello world'; + }); + +// #docregion bootstrap +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +platformBrowserDynamic().bootstrapModule(AppModule).then(platformRef => { + const upgrade = platformRef.injector.get(UpgradeModule) as UpgradeModule; + upgrade.bootstrap(document.body, ['heroApp'], {strictDi: true}); +}); +// #enddocregion bootstrap diff --git a/aio/content/examples/upgrade-module/ts/src/app/ajs-bootstrap/app.module.ts b/aio/content/examples/upgrade-module/ts/src/app/ajs-bootstrap/app.module.ts new file mode 100644 index 0000000000..639b780d1b --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/app/ajs-bootstrap/app.module.ts @@ -0,0 +1,10 @@ +angular.module('heroApp', []) + .controller('MainCtrl', function() { + this.message = 'Hello world'; + }); + +document.addEventListener('DOMContentLoaded', function() { + // #docregion bootstrap + angular.bootstrap(document.body, ['heroApp'], {strictDi: true}); + // #enddocregion bootstrap +}); diff --git a/aio/content/examples/upgrade-module/ts/src/app/ajs-ng-app/app.module.ts b/aio/content/examples/upgrade-module/ts/src/app/ajs-ng-app/app.module.ts new file mode 100644 index 0000000000..904f7578b8 --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/app/ajs-ng-app/app.module.ts @@ -0,0 +1,4 @@ +angular.module('heroApp', []) + .controller('MainCtrl', function() { + this.message = 'Hello world'; + }); diff --git a/aio/content/examples/upgrade-module/ts/src/app/ajs-to-a-projection/app.module.ts b/aio/content/examples/upgrade-module/ts/src/app/ajs-to-a-projection/app.module.ts new file mode 100644 index 0000000000..080f80f0ef --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/app/ajs-to-a-projection/app.module.ts @@ -0,0 +1,36 @@ +declare var angular: angular.IAngularStatic; +import { NgModule } from '@angular/core'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { BrowserModule } from '@angular/platform-browser'; +import { UpgradeModule, downgradeComponent } from '@angular/upgrade/static'; + +import { MainController } from './main.controller'; +import { HeroDetailComponent } from './hero-detail.component'; + +@NgModule({ + imports: [ + BrowserModule, + UpgradeModule + ], + declarations: [ + HeroDetailComponent + ], + entryComponents: [ + HeroDetailComponent + ] +}) +export class AppModule { + ngDoBootstrap() {} +} + +angular.module('heroApp', []) + .controller('MainController', MainController) + .directive('heroDetail', downgradeComponent({ + component: HeroDetailComponent, + inputs: ['hero'] + }) as angular.IDirectiveFactory); + +platformBrowserDynamic().bootstrapModule(AppModule).then(platformRef => { + const upgrade = platformRef.injector.get(UpgradeModule) as UpgradeModule; + upgrade.bootstrap(document.body, ['heroApp'], {strictDi: true}); +}); diff --git a/aio/content/examples/upgrade-module/ts/src/app/ajs-to-a-projection/hero-detail.component.ts b/aio/content/examples/upgrade-module/ts/src/app/ajs-to-a-projection/hero-detail.component.ts new file mode 100644 index 0000000000..7a2956eb26 --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/app/ajs-to-a-projection/hero-detail.component.ts @@ -0,0 +1,16 @@ +// #docregion +import { Component, Input } from '@angular/core'; +import { Hero } from '../hero'; + +@Component({ + selector: 'hero-detail', + template: ` +

    {{hero.name}}

    +
    + +
    + ` +}) +export class HeroDetailComponent { + @Input() hero: Hero; +} diff --git a/aio/content/examples/upgrade-module/ts/src/app/ajs-to-a-projection/main.controller.ts b/aio/content/examples/upgrade-module/ts/src/app/ajs-to-a-projection/main.controller.ts new file mode 100644 index 0000000000..c6041ac788 --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/app/ajs-to-a-projection/main.controller.ts @@ -0,0 +1,5 @@ +import { Hero } from '../hero'; + +export class MainController { + hero = new Hero(1, 'Windstorm', 'Specific powers of controlling winds'); +} diff --git a/aio/content/examples/upgrade-module/ts/src/app/ajs-to-a-providers/ajs-upgraded-providers.ts b/aio/content/examples/upgrade-module/ts/src/app/ajs-to-a-providers/ajs-upgraded-providers.ts new file mode 100644 index 0000000000..52d4e74a1f --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/app/ajs-to-a-providers/ajs-upgraded-providers.ts @@ -0,0 +1,12 @@ +// #docregion +import { HeroesService } from './heroes.service'; + +export function heroesServiceFactory(i: any) { + return i.get('heroes'); +} + +export const heroesServiceProvider = { + provide: HeroesService, + useFactory: heroesServiceFactory, + deps: ['$injector'] +}; diff --git a/aio/content/examples/upgrade-module/ts/src/app/ajs-to-a-providers/app.module.ts b/aio/content/examples/upgrade-module/ts/src/app/ajs-to-a-providers/app.module.ts new file mode 100644 index 0000000000..4e0eca003a --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/app/ajs-to-a-providers/app.module.ts @@ -0,0 +1,44 @@ +declare var angular: angular.IAngularStatic; +import { NgModule } from '@angular/core'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { BrowserModule } from '@angular/platform-browser'; +import { UpgradeModule, downgradeComponent } from '@angular/upgrade/static'; + +import { HeroDetailComponent } from './hero-detail.component'; +import { HeroesService } from './heroes.service'; +// #docregion register +import { heroesServiceProvider } from './ajs-upgraded-providers'; + +@NgModule({ + imports: [ + BrowserModule, + UpgradeModule + ], + providers: [ + heroesServiceProvider + ], + // #enddocregion register + declarations: [ + HeroDetailComponent + ], + entryComponents: [ + HeroDetailComponent + ] +// #docregion register +}) +export class AppModule { + ngDoBootstrap() {} +} +// #enddocregion register + +angular.module('heroApp', []) + .service('heroes', HeroesService) + .directive( + 'heroDetail', + downgradeComponent({component: HeroDetailComponent}) as angular.IDirectiveFactory + ); + +platformBrowserDynamic().bootstrapModule(AppModule).then(platformRef => { + const upgrade = platformRef.injector.get(UpgradeModule) as UpgradeModule; + upgrade.bootstrap(document.body, ['heroApp'], {strictDi: true}); +}); diff --git a/aio/content/examples/upgrade-module/ts/src/app/ajs-to-a-providers/hero-detail.component.ts b/aio/content/examples/upgrade-module/ts/src/app/ajs-to-a-providers/hero-detail.component.ts new file mode 100644 index 0000000000..b02f85b99a --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/app/ajs-to-a-providers/hero-detail.component.ts @@ -0,0 +1,17 @@ +// #docregion +import { Component } from '@angular/core'; +import { HeroesService } from './heroes.service'; +import { Hero } from '../hero'; + +@Component({ + selector: 'hero-detail', + template: ` +

    {{hero.id}}: {{hero.name}}

    + ` +}) +export class HeroDetailComponent { + hero: Hero; + constructor(heroes: HeroesService) { + this.hero = heroes.get()[0]; + } +} diff --git a/aio/content/examples/upgrade-module/ts/src/app/ajs-to-a-providers/heroes.service.ts b/aio/content/examples/upgrade-module/ts/src/app/ajs-to-a-providers/heroes.service.ts new file mode 100644 index 0000000000..4a258e205a --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/app/ajs-to-a-providers/heroes.service.ts @@ -0,0 +1,11 @@ +// #docregion +import { Hero } from '../hero'; + +export class HeroesService { + get() { + return [ + new Hero(1, 'Windstorm'), + new Hero(2, 'Spiderman') + ]; + } +} diff --git a/aio/content/examples/upgrade-module/ts/src/app/divide-routes/app.component.ts b/aio/content/examples/upgrade-module/ts/src/app/divide-routes/app.component.ts new file mode 100644 index 0000000000..1fae3f84c6 --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/app/divide-routes/app.component.ts @@ -0,0 +1,11 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'my-app', + template: ` + +
    + `, +}) +export class AppComponent { } diff --git a/aio/content/examples/upgrade-module/ts/src/app/divide-routes/app.module.ts b/aio/content/examples/upgrade-module/ts/src/app/divide-routes/app.module.ts new file mode 100644 index 0000000000..7d85a23c94 --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/app/divide-routes/app.module.ts @@ -0,0 +1,62 @@ +// #docregion +declare var angular: angular.IAngularStatic; +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { UpgradeModule } from '@angular/upgrade/static'; + +import { HeroModule } from './hero.module'; + +// #docregion router-config +import { HashLocationStrategy, LocationStrategy } from '@angular/common'; +import { RouterModule, UrlHandlingStrategy, UrlTree } from '@angular/router'; +import { AppComponent } from './app.component'; + +class HybridUrlHandlingStrategy implements UrlHandlingStrategy { + // use only process the `/hero` url + shouldProcessUrl(url: UrlTree) { return url.toString().startsWith('/hero'); } + extract(url: UrlTree) { return url; } + merge(url: UrlTree, whole: UrlTree) { return url; } +} + +@NgModule({ + imports: [ + BrowserModule, + UpgradeModule, + HeroModule, + RouterModule.forRoot([]) + ], + providers: [ + // use hash location strategy + { provide: LocationStrategy, useClass: HashLocationStrategy }, + // use custom url handling strategy + { provide: UrlHandlingStrategy, useClass: HybridUrlHandlingStrategy } + ], + declarations: [ AppComponent ], + bootstrap: [ AppComponent ] +}) +export class AppModule { } +// #enddocregion router-config + +import { Villain } from '../villain'; + +export const villainDetail = { + template: ` +

    Villain detail

    +

    {{$ctrl.villain.name}} - {{$ctrl.villain.description}}

    + `, + controller: function() { + this.villain = new Villain(1, 'Mr. Nice', 'No More Mr. Nice Guy'); + } +}; + +angular.module('heroApp', ['ngRoute']) + .component('villainDetail', villainDetail) + .config(['$locationProvider', '$routeProvider', + function config($locationProvider: angular.ILocationProvider, + $routeProvider: angular.route.IRouteProvider) { + // #docregion ajs-route + $routeProvider + .when('/villain', { template: '' }); + // #enddocregion ajs-route + } + ]); diff --git a/aio/content/examples/upgrade-module/ts/src/app/divide-routes/hero.module.ts b/aio/content/examples/upgrade-module/ts/src/app/divide-routes/hero.module.ts new file mode 100644 index 0000000000..33099d0a9f --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/app/divide-routes/hero.module.ts @@ -0,0 +1,32 @@ +// #docregion +import { Component } from '@angular/core'; +import { Hero } from '../hero'; + +@Component({ + template: ` +

    Hero detail

    +

    {{hero.name}} - {{hero.description}}

    + ` +}) +export class HeroDetailComponent { + hero = new Hero(1, 'Windstorm', 'Specific powers of controlling winds'); +} + +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { RouterModule } from '@angular/router'; + +@NgModule({ + imports: [ + CommonModule, + // #docregion a-route + RouterModule.forChild([ + { path: 'hero', children: [ + { path: '', component: HeroDetailComponent }, + ] }, + ]) + // #enddocregion a-route + ], + declarations: [ HeroDetailComponent ] +}) +export class HeroModule {} diff --git a/aio/content/examples/upgrade-module/ts/src/app/divide-routes/main.ts b/aio/content/examples/upgrade-module/ts/src/app/divide-routes/main.ts new file mode 100644 index 0000000000..9b4d37ebc3 --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/app/divide-routes/main.ts @@ -0,0 +1,10 @@ +// #docregion +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { UpgradeModule } from '@angular/upgrade/static'; + +import { AppModule } from './app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule).then(platformRef => { + const upgrade = platformRef.injector.get(UpgradeModule) as UpgradeModule; + upgrade.bootstrap(document.body, ['heroApp'], {strictDi: true}); +}); diff --git a/aio/content/examples/upgrade-module/ts/src/app/downgrade-io/app.module.ts b/aio/content/examples/upgrade-module/ts/src/app/downgrade-io/app.module.ts new file mode 100644 index 0000000000..1e836cfc9d --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/app/downgrade-io/app.module.ts @@ -0,0 +1,43 @@ +declare var angular: angular.IAngularStatic; +import { NgModule } from '@angular/core'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { BrowserModule } from '@angular/platform-browser'; +import { UpgradeModule, downgradeComponent } from '@angular/upgrade/static'; + +import { MainController } from './main.controller'; + +// #docregion downgradecomponent +import { HeroDetailComponent } from './hero-detail.component'; + +// #enddocregion downgradecomponent +@NgModule({ + imports: [ + BrowserModule, + UpgradeModule + ], + declarations: [ + HeroDetailComponent + ], + entryComponents: [ + HeroDetailComponent + ] +}) +export class AppModule { + ngDoBootstrap() {} +} +// #docregion downgradecomponent + +angular.module('heroApp', []) + .controller('MainController', MainController) + .directive('heroDetail', downgradeComponent({ + component: HeroDetailComponent, + inputs: ['hero'], + outputs: ['deleted'] + }) as angular.IDirectiveFactory); + +// #enddocregion downgradecomponent + +platformBrowserDynamic().bootstrapModule(AppModule).then(platformRef => { + const upgrade = platformRef.injector.get(UpgradeModule) as UpgradeModule; + upgrade.bootstrap(document.body, ['heroApp'], {strictDi: true}); +}); diff --git a/aio/content/examples/upgrade-module/ts/src/app/downgrade-io/hero-detail.component.ts b/aio/content/examples/upgrade-module/ts/src/app/downgrade-io/hero-detail.component.ts new file mode 100644 index 0000000000..94082813fd --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/app/downgrade-io/hero-detail.component.ts @@ -0,0 +1,19 @@ +// #docregion +import { Component, EventEmitter, Input, Output } from '@angular/core'; +import { Hero } from '../hero'; + +@Component({ + selector: 'hero-detail', + template: ` +

    {{hero.name}} details!

    +
    {{hero.id}}
    + + ` +}) +export class HeroDetailComponent { + @Input() hero: Hero; + @Output() deleted = new EventEmitter(); + onDelete() { + this.deleted.emit(this.hero); + } +} diff --git a/aio/content/examples/upgrade-module/ts/src/app/downgrade-io/main.controller.ts b/aio/content/examples/upgrade-module/ts/src/app/downgrade-io/main.controller.ts new file mode 100644 index 0000000000..d50272073f --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/app/downgrade-io/main.controller.ts @@ -0,0 +1,12 @@ +import { Hero } from '../hero'; + +export class MainController { + hero = new Hero(1, 'Windstorm'); + heroes = [ + new Hero(2, 'Superman'), + new Hero(3, 'Spiderman') + ]; + onDelete(hero: Hero) { + hero.name = 'Ex-' + hero.name; + } +} diff --git a/aio/content/examples/upgrade-module/ts/src/app/downgrade-static/app.module.ts b/aio/content/examples/upgrade-module/ts/src/app/downgrade-static/app.module.ts new file mode 100644 index 0000000000..4d621d2f03 --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/app/downgrade-static/app.module.ts @@ -0,0 +1,42 @@ +declare var angular: angular.IAngularStatic; +import { NgModule } from '@angular/core'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { BrowserModule } from '@angular/platform-browser'; +import { UpgradeModule } from '@angular/upgrade/static'; + +// #docregion downgradecomponent, ngmodule +import { HeroDetailComponent } from './hero-detail.component'; + +// #enddocregion downgradecomponent +@NgModule({ + imports: [ + BrowserModule, + UpgradeModule + ], + declarations: [ + HeroDetailComponent + ], + entryComponents: [ + HeroDetailComponent + ] +}) +export class AppModule { + ngDoBootstrap() {} +} +// #enddocregion ngmodule +// #docregion downgradecomponent + +import { downgradeComponent } from '@angular/upgrade/static'; + +angular.module('heroApp', []) + .directive( + 'heroDetail', + downgradeComponent({component: HeroDetailComponent}) as angular.IDirectiveFactory + ); + +// #enddocregion downgradecomponent + +platformBrowserDynamic().bootstrapModule(AppModule).then(platformRef => { + const upgrade = platformRef.injector.get(UpgradeModule) as UpgradeModule; + upgrade.bootstrap(document.body, ['heroApp'], {strictDi: true}); +}); diff --git a/aio/content/examples/upgrade-module/ts/src/app/downgrade-static/hero-detail.component.ts b/aio/content/examples/upgrade-module/ts/src/app/downgrade-static/hero-detail.component.ts new file mode 100644 index 0000000000..df4a705f37 --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/app/downgrade-static/hero-detail.component.ts @@ -0,0 +1,11 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'hero-detail', + template: ` +

    Windstorm details!

    +
    1
    + ` +}) +export class HeroDetailComponent { } diff --git a/aio/content/examples/upgrade-module/ts/src/app/hero-detail.directive.ts b/aio/content/examples/upgrade-module/ts/src/app/hero-detail.directive.ts new file mode 100644 index 0000000000..e1b14d2dfc --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/app/hero-detail.directive.ts @@ -0,0 +1,22 @@ +// #docregion +export function heroDetailDirective() { + return { + restrict: 'E', + scope: {}, + bindToController: { + hero: '=', + deleted: '&' + }, + template: ` +

    {{ctrl.hero.name}} details!

    +
    {{ctrl.hero.id}}
    + + `, + controller: function() { + this.onDelete = () => { + this.deleted({hero: this.hero}); + }; + }, + controllerAs: 'ctrl' + }; +} diff --git a/aio/content/examples/upgrade-module/ts/src/app/hero.ts b/aio/content/examples/upgrade-module/ts/src/app/hero.ts new file mode 100644 index 0000000000..5dcb5664eb --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/app/hero.ts @@ -0,0 +1,5 @@ +export class Hero { + constructor(public id: number, + public name: string, + public description?: string) { } +} diff --git a/aio/content/examples/upgrade-module/ts/src/app/upgrade-io/app.module.ts b/aio/content/examples/upgrade-module/ts/src/app/upgrade-io/app.module.ts new file mode 100644 index 0000000000..599e711b5e --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/app/upgrade-io/app.module.ts @@ -0,0 +1,39 @@ +declare var angular: angular.IAngularStatic; +import { NgModule } from '@angular/core'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { BrowserModule } from '@angular/platform-browser'; +import { UpgradeModule, downgradeComponent } from '@angular/upgrade/static'; + +import { heroDetail, HeroDetailDirective } from './hero-detail.component'; +import { ContainerComponent } from './container.component'; + +// #docregion heroupgrade +@NgModule({ + imports: [ + BrowserModule, + UpgradeModule + ], + declarations: [ + ContainerComponent, + HeroDetailDirective + ], + entryComponents: [ + ContainerComponent + ] +}) +export class AppModule { + ngDoBootstrap() {} +} +// #enddocregion heroupgrade + +angular.module('heroApp', []) + .component('heroDetail', heroDetail) + .directive( + 'myContainer', + downgradeComponent({component: ContainerComponent}) as angular.IDirectiveFactory + ); + +platformBrowserDynamic().bootstrapModule(AppModule).then(platformRef => { + const upgrade = platformRef.injector.get(UpgradeModule) as UpgradeModule; + upgrade.bootstrap(document.body, ['heroApp'], {strictDi: true}); +}); diff --git a/aio/content/examples/upgrade-module/ts/src/app/upgrade-io/container.component.ts b/aio/content/examples/upgrade-module/ts/src/app/upgrade-io/container.component.ts new file mode 100644 index 0000000000..8d76085174 --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/app/upgrade-io/container.component.ts @@ -0,0 +1,19 @@ +// #docregion +import { Component } from '@angular/core'; +import { Hero } from '../hero'; + +@Component({ + selector: 'my-container', + template: ` +

    Tour of Heroes

    + + + ` +}) +export class ContainerComponent { + hero = new Hero(1, 'Windstorm'); + heroDeleted(hero: Hero) { + hero.name = 'Ex-' + hero.name; + } +} diff --git a/aio/content/examples/upgrade-module/ts/src/app/upgrade-io/hero-detail.component.ts b/aio/content/examples/upgrade-module/ts/src/app/upgrade-io/hero-detail.component.ts new file mode 100644 index 0000000000..90c3273010 --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/app/upgrade-io/hero-detail.component.ts @@ -0,0 +1,37 @@ +// #docregion +// #docregion hero-detail-io +export const heroDetail = { + bindings: { + hero: '<', + deleted: '&' + }, + template: ` +

    {{$ctrl.hero.name}} details!

    +
    {{$ctrl.hero.id}}
    + + `, + controller: function() { + this.onDelete = () => { + this.deleted(this.hero); + }; + } +}; +// #enddocregion hero-detail-io + +// #docregion hero-detail-io-upgrade +import { Directive, ElementRef, Injector, Input, Output, EventEmitter } from '@angular/core'; +import { UpgradeComponent } from '@angular/upgrade/static'; +import { Hero } from '../hero'; + +@Directive({ + selector: 'hero-detail' +}) +export class HeroDetailDirective extends UpgradeComponent { + @Input() hero: Hero; + @Output() deleted: EventEmitter; + + constructor(elementRef: ElementRef, injector: Injector) { + super('heroDetail', elementRef, injector); + } +} +// #enddocregion hero-detail-io-upgrade diff --git a/aio/content/examples/upgrade-module/ts/src/app/upgrade-static/app.module.ts b/aio/content/examples/upgrade-module/ts/src/app/upgrade-static/app.module.ts new file mode 100644 index 0000000000..401963c35e --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/app/upgrade-static/app.module.ts @@ -0,0 +1,41 @@ +declare var angular: angular.IAngularStatic; +import { NgModule } from '@angular/core'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { BrowserModule } from '@angular/platform-browser'; +import { UpgradeModule, downgradeComponent } from '@angular/upgrade/static'; + +import { heroDetail, HeroDetailDirective } from './hero-detail.component'; +import { ContainerComponent } from './container.component'; + +// #docregion hero-detail-upgrade +@NgModule({ + imports: [ + BrowserModule, + UpgradeModule + ], + declarations: [ + HeroDetailDirective, + // #enddocregion hero-detail-upgrade + ContainerComponent + ], + entryComponents: [ + ContainerComponent + // #docregion hero-detail-upgrade + ] +}) +export class AppModule { + ngDoBootstrap() {} +} +// #enddocregion hero-detail-upgrade + +angular.module('heroApp', []) + .component('heroDetail', heroDetail) + .directive( + 'myContainer', + downgradeComponent({component: ContainerComponent}) as angular.IDirectiveFactory + ); + +platformBrowserDynamic().bootstrapModule(AppModule).then(platformRef => { + const upgrade = platformRef.injector.get(UpgradeModule) as UpgradeModule; + upgrade.bootstrap(document.body, ['heroApp'], {strictDi: true}); +}); diff --git a/aio/content/examples/upgrade-module/ts/src/app/upgrade-static/container.component.ts b/aio/content/examples/upgrade-module/ts/src/app/upgrade-static/container.component.ts new file mode 100644 index 0000000000..c28e5ea42d --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/app/upgrade-static/container.component.ts @@ -0,0 +1,11 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'my-container', + template: ` +

    Tour of Heroes

    + + ` +}) +export class ContainerComponent { } diff --git a/aio/content/examples/upgrade-module/ts/src/app/upgrade-static/hero-detail.component.ts b/aio/content/examples/upgrade-module/ts/src/app/upgrade-static/hero-detail.component.ts new file mode 100644 index 0000000000..02ddd293eb --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/app/upgrade-static/hero-detail.component.ts @@ -0,0 +1,25 @@ +// #docregion +// #docregion hero-detail +export const heroDetail = { + template: ` +

    Windstorm details!

    +
    1
    + `, + controller: function() { + } +}; +// #enddocregion hero-detail + +// #docregion hero-detail-upgrade +import { Directive, ElementRef, Injector } from '@angular/core'; +import { UpgradeComponent } from '@angular/upgrade/static'; + +@Directive({ + selector: 'hero-detail' +}) +export class HeroDetailDirective extends UpgradeComponent { + constructor(elementRef: ElementRef, injector: Injector) { + super('heroDetail', elementRef, injector); + } +} +// #enddocregion hero-detail-upgrade diff --git a/aio/content/examples/upgrade-module/ts/src/app/villain.ts b/aio/content/examples/upgrade-module/ts/src/app/villain.ts new file mode 100644 index 0000000000..ef3d014f11 --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/app/villain.ts @@ -0,0 +1,5 @@ +export class Villain { + constructor(public id: number, + public name: string, + public description?: string) { } +} diff --git a/aio/content/examples/upgrade-module/ts/src/index-a-to-ajs-providers.html b/aio/content/examples/upgrade-module/ts/src/index-a-to-ajs-providers.html new file mode 100644 index 0000000000..693655a53c --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/index-a-to-ajs-providers.html @@ -0,0 +1,31 @@ + + + + Angular Upgrade + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/aio/content/examples/upgrade-module/ts/src/index-a-to-ajs-transclusion.html b/aio/content/examples/upgrade-module/ts/src/index-a-to-ajs-transclusion.html new file mode 100644 index 0000000000..43bc09c64b --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/index-a-to-ajs-transclusion.html @@ -0,0 +1,30 @@ + + + + Angular Upgrade + + + + + + + + + + + + + + + + + + + + + + + diff --git a/aio/content/examples/upgrade-module/ts/src/index-ajs-a-hybrid-bootstrap.html b/aio/content/examples/upgrade-module/ts/src/index-ajs-a-hybrid-bootstrap.html new file mode 100644 index 0000000000..1115e931f5 --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/index-ajs-a-hybrid-bootstrap.html @@ -0,0 +1,28 @@ + + + + Angular Upgrade + + + + + + + + + + + + + + + + + + +
    {{ mainCtrl.message }}
    + + diff --git a/aio/content/examples/upgrade-module/ts/src/index-ajs-to-a-projection.html b/aio/content/examples/upgrade-module/ts/src/index-ajs-to-a-projection.html new file mode 100644 index 0000000000..3456957077 --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/index-ajs-to-a-projection.html @@ -0,0 +1,37 @@ + + + + Angular Upgrade + + + + + + + + + + + + + + + + + + + + +
    + + +

    {{mainCtrl.hero.description}}

    +
    +
    + +
    + + diff --git a/aio/content/examples/upgrade-module/ts/src/index-ajs-to-a-providers.html b/aio/content/examples/upgrade-module/ts/src/index-ajs-to-a-providers.html new file mode 100644 index 0000000000..7d1f2b7a05 --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/index-ajs-to-a-providers.html @@ -0,0 +1,31 @@ + + + + Angular Upgrade + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/aio/content/examples/upgrade-module/ts/src/index-bootstrap.html b/aio/content/examples/upgrade-module/ts/src/index-bootstrap.html new file mode 100644 index 0000000000..bc4614e562 --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/index-bootstrap.html @@ -0,0 +1,13 @@ + + + + + + + + + + +
    {{ mainCtrl.message }}
    + + diff --git a/aio/content/examples/upgrade-module/ts/src/index-divide-routes.html b/aio/content/examples/upgrade-module/ts/src/index-divide-routes.html new file mode 100644 index 0000000000..ee9a56ab36 --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/index-divide-routes.html @@ -0,0 +1,31 @@ + + + + Angular 2 Upgrade + + + + + + + + + + + + + + + + + + + + + Loading... + + + diff --git a/aio/content/examples/upgrade-module/ts/src/index-downgrade-io.html b/aio/content/examples/upgrade-module/ts/src/index-downgrade-io.html new file mode 100644 index 0000000000..71e55db355 --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/index-downgrade-io.html @@ -0,0 +1,44 @@ + + + + Angular Upgrade + + + + + + + + + + + + + + + + + + + + +
    + + +
    + + +
    + + +
    + +
    + + diff --git a/aio/content/examples/upgrade-module/ts/src/index-downgrade-static.html b/aio/content/examples/upgrade-module/ts/src/index-downgrade-static.html new file mode 100644 index 0000000000..47ec27e8f4 --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/index-downgrade-static.html @@ -0,0 +1,32 @@ + + + + Angular Upgrade + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/aio/content/examples/upgrade-module/ts/src/index-ng-app.html b/aio/content/examples/upgrade-module/ts/src/index-ng-app.html new file mode 100644 index 0000000000..0bd661faae --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/index-ng-app.html @@ -0,0 +1,15 @@ + + + + + + + + + + +
    + {{ mainCtrl.message }} +
    + + diff --git a/aio/content/examples/upgrade-module/ts/src/index-upgrade-io.html b/aio/content/examples/upgrade-module/ts/src/index-upgrade-io.html new file mode 100644 index 0000000000..2dca0d44d4 --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/index-upgrade-io.html @@ -0,0 +1,30 @@ + + + + Angular Upgrade + + + + + + + + + + + + + + + + + + + + + + + diff --git a/aio/content/examples/upgrade-module/ts/src/index-upgrade-static.html b/aio/content/examples/upgrade-module/ts/src/index-upgrade-static.html new file mode 100644 index 0000000000..9134cfbc32 --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/index-upgrade-static.html @@ -0,0 +1,30 @@ + + + + Angular Upgrade + + + + + + + + + + + + + + + + + + + + + + + diff --git a/aio/content/examples/upgrade-module/ts/src/systemjs.config.1.js b/aio/content/examples/upgrade-module/ts/src/systemjs.config.1.js new file mode 100644 index 0000000000..a8c57d1792 --- /dev/null +++ b/aio/content/examples/upgrade-module/ts/src/systemjs.config.1.js @@ -0,0 +1,43 @@ +/** + * System configuration for Angular samples + * Adjust as necessary for your application needs. + */ +(function (global) { + System.config({ + paths: { + // paths serve as alias + 'npm:': 'node_modules/' + }, + // map tells the System loader where to look for things + map: { + // our app is within the app folder + app: 'app', + // 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', + // #docregion upgrade-static-umd + '@angular/upgrade/static': 'npm:@angular/upgrade/bundles/upgrade-static.umd.js', + // #enddocregion upgrade-static-umd + + // other libraries + 'rxjs': 'npm:rxjs', + 'angular-in-memory-web-api': 'npm:angular-in-memory-web-api/bundles/in-memory-web-api.umd.js' + }, + // 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' + } + } + }); +})(this); diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/README.md b/aio/content/examples/upgrade-phonecat-1-typescript/README.md new file mode 100644 index 0000000000..f3433b901a --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-1-typescript/README.md @@ -0,0 +1,34 @@ +This is the Angular Phonecat application adjusted to fit our boilerplate project +structure. + +The following changes from vanilla Phonecat are applied: + +* The TypeScript config file shown in the guide is `tsconfig.ajs.json` instead + of the default, because we don't want to enable `noImplicitAny` for migration. +* Karma config for unit tests is in karma.conf.ajs.js because the boilerplate + Karma config is not compatible with the way AngularJS tests need to be run. + The shell script run-unit-tests.sh can be used to run the unit tests. +* Instead of using Bower, AngularJS and its dependencies are fetched from a CDN + in index.html and karma.conf.ajs.js. +* E2E tests have been moved to the parent directory, where `gulp run-e2e-tests` can + discover and run them along with all the other examples. +* Most of the phone JSON and image data removed in the interest of keeping + repo weight down. Keeping enough to retain testability of the app. + +## Running the app + +Start like any example + + npm run start + +You'll find the app under the /app path: http://localhost:3002/app/index.html + +## Running unit tests + + ./run-unit-tests.sh + +## Running E2E tests + +Like for any example (at the project root): + + gulp run-e2e-tests --filter=phonecat-1 diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/e2e-spec.ts b/aio/content/examples/upgrade-phonecat-1-typescript/e2e-spec.ts new file mode 100644 index 0000000000..4598a7f6dc --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-1-typescript/e2e-spec.ts @@ -0,0 +1,107 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by, ElementFinder } from 'protractor'; +import { setProtractorToNg1Mode } from '../protractor-helpers'; + +// Angular E2E Testing Guide: +// https://docs.angularjs.org/guide/e2e-testing + +describe('PhoneCat Application', function() { + + beforeAll(function() { + browser.baseUrl = 'http://localhost:8080/app/'; + setProtractorToNg1Mode(); + }); + + it('should redirect `index.html` to `index.html#!/phones', function() { + browser.get('index.html'); + expect(browser.getLocationAbsUrl()).toBe('/phones'); + }); + + describe('View: Phone list', function() { + + beforeEach(function() { + browser.get('index.html#!/phones'); + }); + + it('should filter the phone list as a user types into the search box', function() { + let phoneList = element.all(by.repeater('phone in $ctrl.phones')); + let query = element(by.model('$ctrl.query')); + + expect(phoneList.count()).toBe(20); + + query.sendKeys('nexus'); + expect(phoneList.count()).toBe(1); + + query.clear(); + query.sendKeys('motorola'); + expect(phoneList.count()).toBe(8); + }); + + it('should be possible to control phone order via the drop-down menu', function() { + let queryField = element(by.model('$ctrl.query')); + let orderSelect = element(by.model('$ctrl.orderProp')); + let nameOption = orderSelect.element(by.css('option[value="name"]')); + let phoneNameColumn = element.all(by.repeater('phone in $ctrl.phones').column('phone.name')); + + function getNames() { + return phoneNameColumn.map(function(elem: ElementFinder) { + return elem.getText(); + }); + } + + queryField.sendKeys('tablet'); // Let's narrow the dataset to make the assertions shorter + + expect(getNames()).toEqual([ + 'Motorola XOOM\u2122 with Wi-Fi', + 'MOTOROLA XOOM\u2122' + ]); + + nameOption.click(); + + expect(getNames()).toEqual([ + 'MOTOROLA XOOM\u2122', + 'Motorola XOOM\u2122 with Wi-Fi' + ]); + }); + + it('should render phone specific links', function() { + let query = element(by.model('$ctrl.query')); + query.sendKeys('nexus'); + + element.all(by.css('.phones li a')).first().click(); + expect(browser.getLocationAbsUrl()).toBe('/phones/nexus-s'); + }); + + }); + + describe('View: Phone detail', function() { + + beforeEach(function() { + browser.get('index.html#!/phones/nexus-s'); + }); + + it('should display the `nexus-s` page', function() { + expect(element(by.binding('$ctrl.phone.name')).getText()).toBe('Nexus S'); + }); + + it('should display the first phone image as the main phone image', function() { + let mainImage = element(by.css('img.phone.selected')); + + expect(mainImage.getAttribute('src')).toMatch(/img\/phones\/nexus-s.0.jpg/); + }); + + it('should swap the main image when clicking on a thumbnail image', function() { + let mainImage = element(by.css('img.phone.selected')); + let thumbnails = element.all(by.css('.phone-thumbs img')); + + thumbnails.get(2).click(); + expect(mainImage.getAttribute('src')).toMatch(/img\/phones\/nexus-s.2.jpg/); + + thumbnails.get(0).click(); + expect(mainImage.getAttribute('src')).toMatch(/img\/phones\/nexus-s.0.jpg/); + }); + + }); + +}); diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/.gitignore b/aio/content/examples/upgrade-phonecat-1-typescript/ts/.gitignore new file mode 100644 index 0000000000..448efbe632 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-1-typescript/ts/.gitignore @@ -0,0 +1 @@ +!karma.conf.ajs.js diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/app.animations.css b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/app.animations.css new file mode 100644 index 0000000000..175320b509 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/app.animations.css @@ -0,0 +1,67 @@ +/* Animate `ngRepeat` in `phoneList` component */ +.phone-list-item.ng-enter, +.phone-list-item.ng-leave, +.phone-list-item.ng-move { + overflow: hidden; + transition: 0.5s linear all; +} + +.phone-list-item.ng-enter, +.phone-list-item.ng-leave.ng-leave-active, +.phone-list-item.ng-move { + height: 0; + margin-bottom: 0; + opacity: 0; + padding-bottom: 0; + padding-top: 0; +} + +.phone-list-item.ng-enter.ng-enter-active, +.phone-list-item.ng-leave, +.phone-list-item.ng-move.ng-move-active { + height: 120px; + margin-bottom: 20px; + opacity: 1; + padding-bottom: 4px; + padding-top: 15px; +} + +/* Animate view transitions with `ngView` */ +.view-container { + position: relative; +} + +.view-frame { + margin-top: 20px; +} + +.view-frame.ng-enter, +.view-frame.ng-leave { + background: white; + left: 0; + position: absolute; + right: 0; + top: 0; +} + +.view-frame.ng-enter { + animation: 1s fade-in; + z-index: 100; +} + +.view-frame.ng-leave { + animation: 1s fade-out; + z-index: 99; +} + +@keyframes fade-in { + from { opacity: 0; } + to { opacity: 1; } +} + +@keyframes fade-out { + from { opacity: 1; } + to { opacity: 0; } +} + +/* Older browsers might need vendor-prefixes for keyframes and animation! */ diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/app.animations.ts b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/app.animations.ts new file mode 100644 index 0000000000..f0739b6405 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/app.animations.ts @@ -0,0 +1,43 @@ +'use strict'; + +angular. + module('phonecatApp'). + animation('.phone', function phoneAnimationFactory() { + return { + addClass: animateIn, + removeClass: animateOut + }; + + function animateIn(element: JQuery, className: string, done: () => void) { + if (className !== 'selected') { return; } + + element.css({ + display: 'block', + position: 'absolute', + top: 500, + left: 0 + }).animate({ + top: 0 + }, done); + + return function animateInEnd(wasCanceled: boolean) { + if (wasCanceled) { element.stop(); } + }; + } + + function animateOut(element: JQuery, className: string, done: () => void) { + if (className !== 'selected') { return; } + + element.css({ + position: 'absolute', + top: 0, + left: 0 + }).animate({ + top: -500 + }, done); + + return function animateOutEnd(wasCanceled: boolean) { + if (wasCanceled) { element.stop(); } + }; + } + }); diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/app.config.ts b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/app.config.ts new file mode 100644 index 0000000000..1d16f67fbe --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/app.config.ts @@ -0,0 +1,18 @@ +// #docregion +angular. + module('phonecatApp'). + config(['$locationProvider', '$routeProvider', + function config($locationProvider: angular.ILocationProvider, + $routeProvider: angular.route.IRouteProvider) { + $locationProvider.hashPrefix('!'); + + $routeProvider. + when('/phones', { + template: '' + }). + when('/phones/:phoneId', { + template: '' + }). + otherwise('/phones'); + } + ]); diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/app.css b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/app.css new file mode 100644 index 0000000000..f4b45b02a5 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/app.css @@ -0,0 +1,93 @@ +body { + padding: 20px; +} + +h1 { + border-bottom: 1px solid gray; + margin-top: 0; +} + +/* View: Phone list */ +.phones { + list-style: none; +} + +.phones li { + clear: both; + height: 115px; + padding-top: 15px; +} + +.thumb { + float: left; + height: 100px; + margin: -0.5em 1em 1.5em 0; + padding-bottom: 1em; + width: 100px; +} + +/* View: Phone detail */ +.phone { + background-color: white; + display: none; + float: left; + height: 400px; + margin-bottom: 2em; + margin-right: 3em; + padding: 2em; + width: 400px; +} + +.phone:first-child { + display: block; +} + +.phone-images { + background-color: white; + float: left; + height: 450px; + overflow: hidden; + position: relative; + width: 450px; +} + +.phone-thumbs { + list-style: none; + margin: 0; +} + +.phone-thumbs img { + height: 100px; + padding: 1em; + width: 100px; +} + +.phone-thumbs li { + background-color: white; + border: 1px solid black; + cursor: pointer; + display: inline-block; + margin: 1em; +} + +.specs { + clear: both; + list-style: none; + margin: 0; + padding: 0; +} + +.specs dt { + font-weight: bold; +} + +.specs > li { + display: inline-block; + vertical-align: top; + width: 200px; +} + +.specs > li > span { + font-size: 1.2em; + font-weight: bold; +} diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/app.module.ts b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/app.module.ts new file mode 100644 index 0000000000..ab6d353eeb --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/app.module.ts @@ -0,0 +1,10 @@ +'use strict'; + +// Define the `phonecatApp` module +angular.module('phonecatApp', [ + 'ngAnimate', + 'ngRoute', + 'core', + 'phoneDetail', + 'phoneList', +]); diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/core/checkmark/checkmark.filter.spec.ts b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/core/checkmark/checkmark.filter.spec.ts new file mode 100644 index 0000000000..1b2d77c30c --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/core/checkmark/checkmark.filter.spec.ts @@ -0,0 +1,14 @@ +'use strict'; + +describe('checkmark', () => { + + beforeEach(angular.mock.module('core')); + + it('should convert boolean values to unicode checkmark or cross', + inject(function(checkmarkFilter: (v: boolean) => string) { + expect(checkmarkFilter(true)).toBe('\u2713'); + expect(checkmarkFilter(false)).toBe('\u2718'); + }) + ); + +}); diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/core/checkmark/checkmark.filter.ts b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/core/checkmark/checkmark.filter.ts new file mode 100644 index 0000000000..3114dc9681 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/core/checkmark/checkmark.filter.ts @@ -0,0 +1,8 @@ +// #docregion +angular. + module('core'). + filter('checkmark', function() { + return function(input: boolean) { + return input ? '\u2713' : '\u2718'; + }; + }); diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/core/core.module.ts b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/core/core.module.ts new file mode 100644 index 0000000000..84a91dc7a6 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/core/core.module.ts @@ -0,0 +1,4 @@ +'use strict'; + +// Define the `core` module +angular.module('core', ['core.phone']); diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/core/phone/phone.module.ts b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/core/phone/phone.module.ts new file mode 100644 index 0000000000..0b6b348899 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/core/phone/phone.module.ts @@ -0,0 +1,4 @@ +'use strict'; + +// Define the `core.phone` module +angular.module('core.phone', ['ngResource']); diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/core/phone/phone.service.spec.ts b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/core/phone/phone.service.spec.ts new file mode 100644 index 0000000000..312036d71d --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/core/phone/phone.service.spec.ts @@ -0,0 +1,43 @@ +'use strict'; + +describe('Phone', () => { + let $httpBackend: angular.IHttpBackendService; + let Phone: any; + let phonesData = [ + {name: 'Phone X'}, + {name: 'Phone Y'}, + {name: 'Phone Z'} + ]; + + // Add a custom equality tester before each test + beforeEach(function() { + jasmine.addCustomEqualityTester(angular.equals); + }); + + // Load the module that contains the `Phone` service before each test + beforeEach(angular.mock.module('core.phone')); + + // Instantiate the service and "train" `$httpBackend` before each test + beforeEach(inject(function(_$httpBackend_: angular.IHttpBackendService, _Phone_: any) { + $httpBackend = _$httpBackend_; + $httpBackend.expectGET('phones/phones.json').respond(phonesData); + + Phone = _Phone_; + })); + + // Verify that there are no outstanding expectations or requests after each test + afterEach(() => { + $httpBackend.verifyNoOutstandingExpectation(); + $httpBackend.verifyNoOutstandingRequest(); + }); + + it('should fetch the phones data from `/phones/phones.json`', () => { + let phones = Phone.query(); + + expect(phones).toEqual([]); + + $httpBackend.flush(); + expect(phones).toEqual(phonesData); + }); + +}); diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/core/phone/phone.service.ts b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/core/phone/phone.service.ts new file mode 100644 index 0000000000..c6204bc896 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/core/phone/phone.service.ts @@ -0,0 +1,14 @@ +// #docregion +angular. + module('core.phone'). + factory('Phone', ['$resource', + function($resource: angular.resource.IResourceService) { + return $resource('phones/:phoneId.json', {}, { + query: { + method: 'GET', + params: {phoneId: 'phones'}, + isArray: true + } + }); + } + ]); diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/.gitkeep b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/dell-streak-7.0.jpg b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/dell-streak-7.0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7ce0dce4ee9edf6d1562f9123f0e51fc46310b06 GIT binary patch literal 23086 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 literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/dell-streak-7.1.jpg b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/dell-streak-7.1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ed8cad89fba49d45de5b2151c351ea025399a205 GIT binary patch literal 23269 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 literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/dell-streak-7.2.jpg b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/dell-streak-7.2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c83529e0f9c89184965b79f2e81af72ce753451f GIT binary patch literal 4686 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 CD!YFG literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/dell-streak-7.3.jpg b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/dell-streak-7.3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cd2c30280da82d541b2adc803181a105935d4e59 GIT binary patch literal 28319 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 hldiL|zu$J%C!||Ad2qc6MfV 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 D3#U&K literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/motorola-atrix-4g.1.jpg b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/motorola-atrix-4g.1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..867f207459f390459062fe382957c905a7c4fee1 GIT binary patch literal 16530 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 Izdp|V4?Anm`v3p{ literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/motorola-atrix-4g.2.jpg b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/motorola-atrix-4g.2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..27d78338c4dff26cb845c749be698678e20e7513 GIT binary patch literal 23788 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 z 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 Wh*WFF(=E}Rj8!i9->x0P5%W*cY@kd4 literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/motorola-xoom-with-wi-fi.0.jpg b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/motorola-xoom-with-wi-fi.0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a6c993291eef92ce1ce2598ad1f2806c16688321 GIT binary patch literal 34430 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%0Ad3q)A}R)id>CM& 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

    f8S@mQhpZZGpk{w}H>uKzPfD9(X6+l7Hv2 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 literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/nexus-s.3.jpg b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/nexus-s.3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e51f75b0edcf2f604f9f7e56bbe2cf760ebb1678 GIT binary patch literal 21118 zcmb5V1yEfbD2n2Tt7TleSYk=VHZb5@yg1fuJ#ex&uFYYcEcZbjWzvflV z%$xc3`gHB8bNZa_K3%ZhF)(p3(a^B*v2i});^E<;V-XPI;}U+r#l!uN zN?_pLzkx?UK|nyk#X!Tr{coqYE&vWPOdL!c9L#3`EDj7D4$NC0fc!r?i3s;D{xiWN zAR-~7z`(+xzLzUt17P6bVBruD;Sk_Z5E0?t--mtw2OPvtNFUgcKZ>Xrqu@FQ#^-*n z?Z(4r7oDO~{XxyaDdrTES9d|9<_t>MBoJ2*?m0K@oqn&5_vny@ay4`LB($?5xU8w?j;$yEGQ^Y6?_{qX9@4z{wpjz zm5{oD7yk+bLm7ZfB;v*w1eX}?h18fhpaNXgcAUOe)up3f6(idkb3OZ1nHcu*4rhea zY&5#7=I;lzKnz;=@}WGB;-cmN=wL5;N*YTp1>`iuYe{7`g1-qRm>w) zkjbyK&hp8|CcjBH4}+}^xu0YlSzz1^Ekj9lOI^Xx#(+wxb{q0CD~7Z99zpdNPhEO-&+$9^m4QO!=@) z^#hm2;Pdt;r-1Nqa*}&8-Ilc_Y?JX7CB}1R z|6zHow6P}F`dn^7g7WDX7E{L61J}>a1}fFp%iG3T$Hpz`ifeWJlEL%ORGh&O%tWKL z`jQWq#*1fG#mQSpj3%#Qcbd0St%*V8k7abByQdfwf`8rs;oKLt9bf?42)wtaO>ToL z#R-O*-7nLeg$Ef``*a2Ke~!*=)QT`U>6EmNW)Xs>j75KpExsK0Hp-oSy!Eb;FLLwn%>p69b6a$X(s2$18fpK-&cq7G;@K|^?{z$Z-7#htMW@nmt zIx$+F++*R}D`&;u7Rul1&Q*0EBn-6t{X0f+C!^#xXy?|y38LrGUO=L?b_vRAPn^YY z7<6%f;|RR|EZ{TSHMf-1rgFffujZUFq2@H>(v+P1K{`nb>OJ1UOKIN6=}FHJAkR3* zHC^+O+KoS98(=?nI!@vf0kmC$irqP=x!WzNnhO)%`D%};FiAhg#udyzEsZ88{@0@i?O5 z|Gm{tr2C+@a|x$(JpDMk(j@w2RbjD4=aZ0KmK$5|{JAq@oFG2Bx7rO!-jt63gwf*- z&|t5+V)oOW4WibDw7I50oXY)siOasPED!;MS{@Fo1QX+Y*N7SLXoFWf)5OPMiyH&t z?mztL9n0(v00?P2*9hQwzAKEBV_`s8JQ;t6oR0KJxSh=TvY^jw%U^W~$FxNSMClmT z9_fAqJw3-8xSh)6%+DTrF-Ld)0gWGy7a8_!Oh$v8{Aqrg*mDMWCi?JhY?@AfQypE+ z*h|e4f`if4!FQfvHTfrTnbML$G^?(I7Or94K9_pq7D~`>ylIs)0M##(S=Ok?#ZyK%e=*+{UXr6KaGVGPWF{5{u_XntZ8oc+ zL^uEv;@B=wWq(Doa`Rs!ZN33cH76;4l#iTc{<+r&GW^bbLd_!0YBpkvt%sc?WsAGW zz{W}f=mu_tSqo9P*&i48cr!h=dS{iD*463w@>%@usPxvS8qvFm`)oP*tVBtHUQ!Zu zuy;eDKB#j&y9Uv1uiewo;(Sdn67CxL=e?H_%T6@RalmmwpO$x9H#!7oMKcW~5w8;%n2p~1SWHwyI{+_HlwtV)>q(?~{ioDb%k{L9*Otef5dm@KyD?cJ{6 zkI(&xGm^q<(S6%HX+?{?n40v@duLsL=6sFQD6>1ZE$}`^Zr-Y;D7NH{>SY`X5^e8z| zU&vrD`1!-kxD4SHV_?`G_{XKwcix3caW_!=>yul|7H|Rkz_=C7)DDTNtso>m!^`>V z1r^NUs`r<5Kaxw5m!+@`rL43>Qc0smNHexHmVW(U+5g1X#HI+2FEuCjJ5Z|6Ym-x* z%zxO*nqk~WBu>2dI_$K)O?c@IVC9I2B0XY^urEZ;r?!_hI6mD3Bh*x!Ydm66s!a~F z@PQo&Cq{S|{<#a&1c|l(fr|e{-T#AK_Fp~mwwZlKP)QBNcgIIMl8y03+{adLTpZB?H^MHH{aaMLWbtc$R_+a#qOY&XxM^vb;C96Igi@UT zQ*&l*M1d!MkTA{3>BP-?6|NZF_MOqz7R}zSF#3&J0ZlbnMWOzXQuw6?Yk_&@Hsz}l z7ejHLC&fPn{%zqO#d!GH?k1+Dd6FM*3~USCBo{BGJtUQ_d{wM5?iA#7biT1S=DEG} z`$0D>P9c9~CL!Fi^poHDFq<^wq_;1JEbonViu5ee!p{}}G=In8(Sw77z9ad9>A8MM z!&qAPb5rgMOMH{u=5WDkl+&^7CDjS;C=DraCTYY@?Bp}1jEx{Kr{^_3;hyvws+Dpn z-~?rFr7iQ88m<2e!=gaPE7=>A?0OarDQ%dXm6>4T5YO3>BVzmO(~lZ0kuBOv5v9Wu zer(-vo151x?f4Rq05ZOaUJy3ZM*83n?Ql6xYXVxzm?TY=m?yOInG&E6lEkFMVQ=1O z>vz2YEa&PsZzQ-7>mub6E3l^@ThONhA(jFA=1*OLTjf98R!|wNyX^!m75OdaRykKa zk|Z0evSLKxYxZ*~ZFGD{*|CZxoQU04fy{&d{|*qPT{0mPKC~5@e5p3w_psx+fY|Us zX%My{U)L>l3H7ARY9w9I#Z}W&EN1s=@L^DxHtK136)7N}zF3q~g; zzb%M#+n#6N-)Xe&k3`h<@K-Pizl?;o>gvMz5F5;8_zN($$|hFMLerN^KPJyJe;`rY_W*sIt$ zLeyOya+f<8J7*J+>;t?4?GF+Dmp|h7I{3rpWu>K#L(fVRskCsX>hn?(WBP38HXaW< z{t`5?=PH9DtK%3C0GSs&7uBL2aoWu{HY zr;lPV#QLTj-Q_k_QUp6NTNw#j^B_y|PIO8TM3zE73i|HwooBi@Sf+RrytE z@zsv*E_)G#C{O?|@A&<2P_p9cCx6z+&c$49 z(V5wq&HVco32}e)sO+p^b35-Ni_e+IyUyK%yHxz!y!=ty|A4Ut{Tsdn!G|)`XV+@^ zmOgWQTRCP%pDvnVJ>C27yKfNW)-aK&J}qNQiU7sRt^SoPw+yrrIO8V;iHu8QLSckZ z)tE3>d7!x@r|IYRQIE0pp|yE4X>Mg&2cHwTIE_GE(~{EUOoC`$I6LmT6B|lIjL&YH z|LTF-1;&wuf%RSUSMKZq>?;r0B1nS|yB31i*&$;NgAUz<<08SO%JL9i$2S;Mh1|t#8wZwcm-8{Jm(cc|HGg1o=Pg!heRA2bWUfgq0^S zZD9v5Xhp;_zDKGOoY6=XobfWs$B)kJY!{!b^BXcZl;;oc<<2cit?jDcl`}4hL-=fP z#VaIzwT}6;^EMa)PU25v;x8&LcR(`cvi%;B^LXbnE{ud%r3ks}pRuYm4BKsJXmCry z%=spjS};(}Cvwd(De0>x-&u#W>b@t?PI)Y)9;)B9ykOx1sCjB9B2-gAc1EQ!)lPc!UrsQoYpLM zxcJG9s+;RCMMI9^0J%dm0L2GlrGtv_rpG0iFIi2BJl(v)AEd4|(Nh^19o2j8*sczT zErXXFj{Ed_ocC+g1*d}A!dQig*ghtlcfSBVdncLGbmieXJw^0Ij~~F_&xK;>Qyy4C zNTkZ`IV)ijtK&Sle}=_2s|^cL&-EkuODXZfxpS~3JjB+;Nqz5`WZ!GHar%bcmac+y zE?7W;Zp@=*TDFuBf&U;p{gs|_*=bZ7=E3OY&r&*2o56v^U@*fS)=0~58+DPyr4s%U zE~|h!rr3ibqQJ+CLGA|^K_nZVoHKl_tiZy#KULl4Ofi2DUWSQ24noMNkPS6OU5c6& zeT|({ zk@NT@dK2C{dcLbG_ZC#N@aAw|p^{}TkA@Okj{;e#tDfBz$Fn49$s&gw$WKur97SdM zRe)|Fe9PhRMZ)Dc@NeF5!jM?=q72k7k(gG)vQkO z0&|jf8knC<6P$v@&Lg*xtndb~@D*Rx&#%w~%=_Dc(wF5=cY~Ao0eKO^Bs@~Yty9rzZwO!anbJ!<~!}UG~*p4`WO;sVo$AJ9;=)& zf^a%0v5Du#LnY-pTC@KCF{+O=@SY4JfGpoQ6qj#5_aKWd3Yq+XuK`#(tMg`x@ z=@s|}06JC9h?eOQBuVxs^DT@c_8RZWz^JBui;}Pn03dA+37MW&F=yo5)pAO#glwj| zd2#YnZx3|qcu0suvJast?vRpVfT8N+peUJp4Y*u6RaWCC^OO%xf5qOu)R^WTNM{tf%B{k!dZp9Tal7cY zd}>txOH_WwIhIZ9CASloEjfa@?p8uf;t5`FjLzIf1cA$7vBIeP{2%ZzdSrv;tY;iP ze9x=SFC$O+Q=r3M`t+e=rpTyA{1-RGNS0;>w;boE@qWe}qPva)Do ztMHeO5JZBG#58R(+X#;=*HMs0umHQ}$@M>#Hei zjP&^OYvT1JHcDFke2NMXfCaDypa4$YP^Y0R=EX>MeI1cuT9%eE+qb?w-xktej|2ZX zEdJa*(Z_$ReNErvdJkbaA9XAc-$0oQ{w4=DB)rZHgeN{E_wfcXe(C~q$DQ9%Aa(i7;@L?2}qnr#K zFWZdd4~GX{*v1KTPqyZDf~ItqEB*mRRWoLuf0_cQv&2{uP~AkkdPpMy^2%-ND%B6X zi$tj_E(yiDDII1yzpt7?hPu(aD*T`6(9(-JOjxnCD4P&g4@Yo!26J4o$t!M20L z;EHEc@uD|7x6Jc*-u*r^2lMM^_6cU0EY)?TPRql#w5;i;2?9I$d$yL9JG0ii`?j?E z_0Hjr%?VV*`nrWOi$*eF6}WkBfYIzYi;fHhA=U#6D>{aV(1H3g3@+&VVU=&Q z;DoEVXzqA?U&5dRyW$JhqL-7qtDR+IwHfeym7h+R&S2}%HW@Wi)4YTT-ls;xq|)b! znq~V=%0P?sB270uv+|#QhV zE6ZCta^V!*R>EBj&P*$taXi>qlxxCiorCm~WX zgXq}W%-scI@wEE5JBLN8rf+I-p9tE@#Qlg+x#27ewb=kOe?m3|MJwc66`PaG@*CiX zgVU3iB84_(V23%i`He;^h)Pgip5zLf6>ng!&Tn|rE~5#n=P|4`ckBva;|Kjc-H>(V z8cP|6Ou_N4eL$AFwUNf615dg|FzY1SCD0e0Y!M!v*C+@pGFkhO?`z8UE+GVU^+_9K zGOtS9vY_!(D`V=>5B!Pa81PrZfSql^b%5;#YKP!2&XO7Zf{Kr=jQ?yx^EQsrL*shp zUe*wSp%JlcY`fC=-2`8U;IS_bgUDik%Ys|cSfOO*qL5dwMaD65vlx?si63>jF1&C-Oxc~ztF4l zo4_WMOj%D{b3{RcBwSD~m)SzdyI*Md!jLnjXv)bdk~ovb%NJY*Zjj@|PsX^4qL9As?bFR91NY)6!r?WRUG8q zMmeObd1s$kDQFkd6eremjfMS%={lYNM#R3CjV<}&&|Y2qBA0OZVCD!KZESHrY2&K) zdjlK}O+dCMzMM98UJfx&XwqjYb?Z~mh*1|c|JE)2P5+tEncCzxq6i?$i0m29_$#Ml z6K6++hNAy{H=a^MkWSzOAGTooky!x@b1{r#!D zxA?x%bS6G*nR)Jan|{={b;lUJ=Rg|IjFs%@q3kb>ZFU_z?$wJ^15pD+v3&{mF6GUV zlPf)Y4Sel8F{GnAlpjPcD6uh@$zp-0Cu~ysBwsk=L7Q=g*wz8}H#bPL^5&I!uo7=bB8?e0&Ro06Mq>L;gInXUc0&vA zA3sPf%AL6p+1G?uUEdxZ^LEEv*n}3~K&25hr(~3b&t*u1yTXDWs16pqV(ZZDXEOgZ ztCX(X>D_AGu;cE++H%SmDio@pH;%j!k86A04DTyA0(&pba-G;EY3da3F$5cg8GtBQDn>;quKE zJTO_)r~SG(wS8fmIY>zDiCv?+bYx{FnY5`<8Ig*s=~=RN$ripB4dM|>4L^ZaGA)6{ zgBLYR5$dBKdq%guSLfP{5iMkCkjB0c_-f3GELu9(*yVpSZ(K{Ed9Kwv%$D_G7oieH zmu~vrBTeS>$849QcM1nj3aD8?T_{{_?I{!(-|LVx}5oXAJ7_U?SRDn-1b?da!~5@xO#%8t8I zD=5qbo0{YT(d9l!R8X{0NA&k?XjPL$Y!?kCr6byA8$a;ifgKGc>PC!M8)1UC9{N zW}cTR93s;uv{86!9N24I$KypG=ZHQBPc8N;WHNM(5!o^Acr;0I^s~wpj)n;?K5N~oHk)g@a08Tw`i1? zD7S3_<{DvqU?D`NRY+||5!%wutG?VQVu#ED(Ibhat^JifrphkWsrcLerz5k+MD>8{ z93OR2oX}?z4?fJO%lM=CpuB=u!bP!WbQk4@vOBSheEq`~nwZ6k>KT~Y1QO%sQ61zr z01CBlqJMFlk7H36;XD+)nzH)au7Pz_QD6}8G8^8|+16Y?)IBE5#ZqEVBevk5IB=!q zo~nIo9{V~XEaShKhL2^1Szo|Jkol?jG{+=$<}@vFf5xcUe5WcaZ|pwy4?q9p=HO^Dk~qLnDQA9Uy4LBO z%rHRHZ~r&>&Nf!jTe4Zf!y0}m4?KD2&$Kjmj`VL7lfu>ISg^R+yTX`FmuoGxk{ul} z^0t@uRWr`{FeD#&k8y#l9?UJ9HrK7dSPckmh#!Tk^Z8a~H|FZH_OeIEWlO3&z*bru zsUbfc$w9i!#77QqGBGjX8sj&e&Tu1a`t>gXyrFRn2x;Y*XfriYJx(U|bq-yNv>$a)^yYE~7v zLWgw6hM#;*+4&X^h**)1Wgkg5_0O#oNe->EdA-Xj|6KCMo)Hf4tl&;)9B1KKeWqvp zKYKpRC_N}{x$SC)BY6Es8XLnp#Gdqpj=V5Y#@-P^B(RPC#rEun9ivy!$g5Qiy;262 zS@@eXt38lO#tp9r1x-3xv#WTkN!@MRoi-f9=}dH;Y7>8}YzvVh;HK}_a}xS(UDU!o zk3{}~aJ}zvUd%tmNp~iicpD)!c_HJ*Ei5S zR_A7flN@E0eXJVhn{Wl16u9k4B~w(%wv#gFu`PX$i{2S|ElB)XVzPgh{gAAd?5qPS4dVPHGA z5XcUk8Bm-=eDLm-dLD6@gVLQes9(p$XyruLvSJ2s0+1$|e%=~E{Qn9#PAlURu%jku zoO|JXM7z3yu{ms+C|xznJO>LAQk|&Qv0F=_o}T{H#oH@exihiTJ{;;6GF)U*fNGKP zVAwuye^9IGITIa1Q`%|bKl#@1t*zdM2azL9PBEtm7`%fX`q>Y}^xd%J;aCThkSuiO zTxJ1qu?~;Jy6-8jgO)3eJSh&LkfgnEee7TfZwcG4QN`xlGO4e%aCiv8>uH_vge*xX zOf}BkVWoKc@6qSg9}c6Am|{8`Eb_^bYF%X+N%Q+82+4cYCY7^+p>#te^JZvNY#9s@ z%z;G-G>K}g*+`uHk91$}?fIJ`!L+eosi-b#OdiIuysH=OdxpK~cr#4OB31zo4CByo z*+ZX*!G{oyne(~J(Ue8_g%u}R7-2m+L6KbhYe?-GSWzqmnJwV>1vPfmVfW9R^ShHY zLM~%-#rOu0705t16W`k87j7q7o71w}3*q z&BJDdue`qmzbq#Ja3P%Nv#;F$<_r&k>c#z z&oh~4y}})yzTMp3Q~Y~xB&*GeCq@gM=~GLpLe4Ylohz;Z;k3!D=#n=8V?}soL3GvQ z2Vr0{iz#_2kKK5(9AoTW(ug~VS*-=bf$%XY(RxjSHpwmT^Zy0L+*~DK2y+pMBx_+d zY^>HJowDV#9Z~&urQSQ!ErM1!bbV%sHD=soxhh7wqB(gDqPVo?;`*6i0+(}2>Aj%z zZ#U&en`eNeWLCe%+QcU0+~R}^gB2;Cz8s3Sdd1o`5wAtIM62fgTE303BXe(I>*8gX z5?li+GCBm@oNiM-;#HjBc4&EOD?dE!#U;yq+INn5pmlP-pf0_+c-_pgRd4Bq{&YDd zH?qMKR9?FnvzEHR2Ed)%sb%`p(wHG&3x_79R#N^4mdUedOUbCddQohCrKHSpZubV5 zHN^-FtQG%e(mSM0Mx!+0R$xgYMdT-_^a8xDgSkiK=~~sr1-hF3=3VYJ)70I1*2iNo zrD9qH-d=J{Srg3xZ*d@NFMZZy(~`U3Cr=aoodmu6 znuhqGI3QWf8sbVLi9Q-`)Uq4Yohq$$;dA zWvr3@p5FBEpBB-(7^!Hh&*82N#Yn~KF~oAY@G8eJ@xahXC#?H?2MQ;G@ww1|$+haF zI}n=h)(5O~@@Zj?JD@f}k5$LMBHOQ>NyF{sp}Lxym!1-e(v7zUUa0qoi$N<)+>?fj0H_CRwQOq9#Av z%OcA2WxI9-3+@}BSHtj~TGHh&u}jT|^htCC`LYMBC*bMt#{N1yE+?RV%1ongym+Ce zDBw&)5wDiY+p#}AoqD1mkPrV)2;~9iu?$u^e0)()Fk{AqN}!5iV&~CaAv2kg`pM3J z_`%tnvF$>W7?VjSL&{r57pnv#&NnhT*wA8WG5_v;=?oOQk@Pa3K+usk#>(O*kKv{N zTfIr<(&~qn_%&3z(3}-kp4W9D=-ct%D*xhZA0j0UO%i+SPX9FxL8aOALuTHq#V?v_ z{`8>M*f6}C*tMw$iU1-OCq+M#ZbN;9#euM;PDN>pRZeHZHvm%WymM1ZaCD5@ID3tu zw&iky^$+t_!OaRxfx@blkdK9261@sMaZ&>CIALss1r!1yTfXK8`cf*fuLPQZhV{pv zUJRNfZkV&b3Tkb8du!jydL;b7|J^sbyX&l{vl(R+B=QtgGL5)RUp7Zj?_SE{uIfI> ze_HB}MH) z3H4PiuHzGoxMAEgkK|)IXu1M_{hwGE2(wR3k`_eJ&IqAFJ@a zx7S}f%4S`gc+5*fGlK{xdQ-=#_Ud|GT(Uzm6Am*~@80+Bj@blGY2DS;_bgFvnB#Vh zW61*R)edaA;xMumA*pGYTb?7u2|}GwSfJ%T4fi%(T|wb?gA(KZ{_jd%q=}oQR{oYy z*{0y6Rs)TM9d0!yrtnkeS<)X_NS*spSYv9}1rrA3iZYIlG-j$*oC2`cGnaw)I+Ig3 zvuEd>06A z&erBs7UwHS9E;9zWu^uQ6)=5HtX~^;`)IVGm|~JT!lY+k8HW>zLD4isr2I?*^vcGHb?psaY=-p zWfgp+-)(hLtGSvu3TL6S!fJx;1=$+$*`sAbZAp-R3_(6#n}qNTM=+_JKM=T>|2bv~ zhmiA1U4=rP0OkRqiR_GMpF13cnNOsAIi2x!^iKfn_oL2kF(J6-E?)h$Ox6hMKl^)cc2R5SN>hbUjywPLu z072=A$b=DzsAKkmrhdZGUnb>`&#?QuhxZQ!83|qw&NpN{1VHNDer@Kxy{E$2*4Ay6 zAgo3S0V+WMQm zwD}i^w+5kv-Ts-N+Co-#np@g^<%RQO^UHN{?V`u= zCHFl3I-)L))kp7SL_!_Nw^ zp<6rHj~Y?0PiAEnvqQcoBchG|uWKVlY9l*GvzJ1?-rLPMWIJuO(;cEFxxYQ@uBt%b zZC5mnFV`mRY<*x<2JiCh80J^zR<`ng;(q=I^Qpe+W%If{!_JKm#a5%NdD8OWw<7Y# z8IHfgFeIk55C-ZAiIDcTM&zokFyw|d{n24sJuWUe=gEJ_#R2iqhaIZfj!4rb7K^@^ zxto*r<%T&>0Ycu5TTqlFq&7+b?h*s(pav4#1UB^OEi2PYNnK?^Su3%ywZ~Dpok~JyIcYnaJqF!iZuDvmF^3`c}PlbAU>skAHa}g`K zERAKFOji(x(?o^k;WsugrsWOPSkQJqeymAfC&@I}+f7Qhf$T&FXNjBa-^Whr+-t7Z z6>UUSjf7t7RS-8*{b(3D`3bSFyDb8*F0E;-+FY~=*_jxukLB9gTCFeh6!-B6kyv4` z1?gz=lPh5oJ@Dqt-{Jne(~V9#n7DBoV3rzujqE5${Bu{fv3E6qu$vHik1tE?_q?kt zAo6SWfZu1sZZHMq#&TEK0jMOUW&UAiKV?Rz(({!(nPsweAUHPtcgetGv8U5)@?G|2z0=}hsF)S< zee6qeuq_4_LVd%to2F>KxNerTnYQtza{w(Ax7CkgU@S?!aZMZW(ycy{5Ho&necSos zuwHn>@nq9!O}`>z?m_F;M%(KuyJmZqR=EI&L7IP~X}6hgUJxV|*04eP0eQV!mEDp! zV<%wCeIYTq`u7*je5k`!^c$eltj!hfmlF~?M!2$F?nF>C=+G-p>DF_wzYmWtU1_{G zOx!Vq$Rs)en4Hh&YL;CWnG}u%M5FmMw6NW+p{i{FBk&6=C@^hdGc){w*{7yfa4W(0 zD-!KNfqfYFQ>O40+nEE>3=%z5&T;%iz1@|k%>bI`uw+3*Ne&+%qGc9SG?(n!vDQmG zaJOHVjmd16@HZ68G~j?+9bs;+$lXuiiK&~(n2(K-InbNqdWfq>iRI{jIbT}Wi*vmdyLY}786O5S zh&(XG%*YN>xqx`tq7lZOV*nN_3FkyQHkI?C7bbJWd$~_ghQ{H0v{2-T%cL$L70IsZ zU#n^iCEz6Mkz#jJu2`PU(1^KKPm~o>(f~i>A5peMUF#&Ub&Rq{w5Hyb^1+~@7rif@ zS6C?~$Nyp`N&lW~Ct4q;o?dmxjH&hqH`rK9O)(vR$;)tss&n~d9-q0Vs@#I(wF8^z zEQTjm%_boZ+&KdzBf-+tN$43cnL(w|MRjZ4jPY09ApV6rIC4MT<5C4KSNvjbO{ulr z!oS5f=6#;WRsSNd6x;)Yk{tM8*t^cQ9H|p(p{$rb93dX#4|29#hP@f+kCib`>@K&A z#M7_0rekVKVjm|Ghz-t#?CqzlA?i~qIt-;ROB^3}nOOj@9|I=&qyopCFLZ&oJ_{J> z_4;Y0W4)(|u3Re%-ISg2oj<>hG{~Q6Gk;^&gv;ACZ3~_<;sG-#yh4s2Oj|>pzpc7q zP-6xj3ztjHnhzb++ApaUjprXnRD8GRFNxv`xS{0QAoYpF;F#yR%|>6J`WGZ`(kmS9 zXFV^Wj@l-a?#XvXXH}A+_*D0OLny|;i><#?WKPtb$=W$vCH4(~$Go|#NfR1UwJ>F% zkMnLPw8Ed4Dh2ZD-T)#{bA|llx;r~Z&iKZ0OX&A^?Ju*ipXqz0qk;Ft2Ez0Z>8j*? zO_3y1P!XWrpr-Z>2Og^*Q~AK18ya_Kj-Vtx4;^1Q51(##BG0WvnT2&N0K^F&(B3|kRTY;WdK%*4eNCz)>XIOtOO{Jo|iquQjp=Eo7$pbcKIX)2~F{I=2WCix@Wt5R5 zA*RSrkBGbEr;(}x{>Z|hfYM1|47?Ms$59ikK>C z78vl&kKLbZBwOzADp+R5{4DWRW6l;qI|$wLdRNtI6%IJxJR}sN4^b(x99NJV?BBd- z*oP9NpSgoUq@UhtyJWn=p#8tRhE|Y^y83plw6Tw>y{|^u0UD5S@YhNLIeoD$Mw?0y z?Dk}Q7|cV()}-6vP2#W@{e(k-yW2jy%;&B_q5(rZGj9!x$RoE%Gn=a1_@w0wMVCMM zSi2sK)Q@&Tft~_)VWidgH-Bd5s@u{r+kRiX0bo}R*7tj!p9pR&f>j*lWWVX%MHRQO zv%4)MeGtA1X+*62{KV*L0nx8HWIFSwCKv%qd?o5Pm>QpYM>lm_jRy^W8W@b8ABRVl z{?~XpLi$NyHAS!8=(A);-_}ye@s*kyeg=-fc5_s$@*%OGoKl8m<;%h*DYvZieYz3? zm^+q~^WDfI*zhkER*+b3+{QtCHjCZ>rIt@~`$R#hRhf&|dp1VTqI1RA42TtTt<2+C zylH>crPsM@cJ?7=o?GSS9-$`~3@+>FoOY>Ep`k5R&QgCI-}wq0!vmqFtoL4t?oTQP zA-(#OQ=CCd#Gm2>&{p*PR?5Z&?|&kxrh3x;A}s(p@6Re)YOiR@3b$?u1$^bq6uDMw z3s&Ijl3%|9qT3w12g0MjV2S{L)3@pbP#M8>E6^QL;6^)>>ugApLV|d%)HBJ994wIh zQq;U;gX3H4A|K|V>Ddm@Qt$a*A`3@CYEzKR1s|F5ZeZvR&5utGu!&-nBy@*Us@R0J1Y2#Vhm|K z8J*))Q-=p*d3+ix#m%2KgbMNj)qbtaFBIkQNCzq53m`jxxYXr@tQ1WF9GRz#GppDetRuqXMofg(@c2bGMnhxdNM^xXWDrH^tdf<52pxzv^6^ zV<4*q%YAE_)9mMZNm9Kz(%_LG9<=%AyWM89dS|cW`TR#eL*;j!F{7EScUOgatdG68 z(x#i97H@CaHa7QFQI)uV>Nx}cv!b({U^4vVzDXFh?;n}s7%Wk*tTt;^DV%r6`I2|O zl-^jD6dz;zJ-;|HI!m*m4ZthV`3EC_7XXvt)~w;IIM_XCbS@~f>UQ0!+^#6}*IVJ} z@BGUZ*ihxskOkstj>X+%+FrGvsck>nmb^8xR-H-l(Na%}X||GRnQ7pl*hN4p;(q5Z z1f=M&g(y^>g?8>Oc|rT@PcmOB6&D^&kDH#}(taNX2{O%QGbJw)W)>iR%57^M@wz|N zY|i(ab;__TAv7IN;d@HszR1&7NKL0!<|va^2ERXOAG=rf90 z^P^o{g4*m@-7hA+}3IvG=>PRE?8GE^up`Sb>eqkq^b6=_-N#H+jvahKd#Ts$lG^7N zi|?-D{>}V2xZrP!c4GEsWz~pR*Fg-#hiL|IDMhx2T;S#yzVj(eD8wD$F5?E*zbA(3A}9|RKeFSOls@+1nM9Vnr}O(J>xD> z!BH{(uMYLNI`$m53cv;f$rr|44m`?xp3qF6xu4ARhc1G_KND-;k54f_e5hFtX)IQ8 zl%<~s-Rjy_d(d`IP{Lh28=86fR^GX`gEnW>&SILN2oJCKuw9}idpGraF&k{%UGeTT zCx7sffolG#de$ZN+|=}zD__n^-&C~anpBXrz1dGfPZr}PV&%OVys*5WU@cVWrg4DT zTgaBD`xs%AHA`u_jX}kfSj^;cg_Mgb1ln1x5qT(;z?(W}?Ymm*^6I~c&t?@6k}b-C z{Fx6=JK)PfvGv*HWbcGZsq{` zo#6ETwwYBK96ED>;B%6jOMUFCe)z!w>Ifus;+W?zDR2{)KymP5MsugYTXgk5&w04t z{`c#kV@>Y{gC)_8?)Hy#&2U_ z^?ldY`BNGE{T^Gwja7}F{^!U|t7cYv+!GI~UP9r#6k1~2(@->BncnS>s{E4;*>8a1 z#aN?EackaBYU0EcTva#93oD57q8e-u;Y2G&=v@B zvD%WkD|uSW8r^ORQ9G-PWC`M1ANB5zKpZC*w~@-LqTYT3;C{_iLikcU z2b<>vFOOIEVZ+Oazex{01w>F-b<Kn$!o0(KO6ts5L@{fcG_*FAs=+Lcd=&>kZ10Ad(idZkneCi4g<8@(JhhB`7Y&4sgHtBQ-F1e7d`0@b5Sh$5M z%+C1r$E^RIxbAB<{d79oWZ-3}a5?ff|0n*a;#w4x6xB^-UgRRFx*34Xh)L#rk5txI z=2Zkj;vN_o^3ZNRUFPDNX0WYRm>hG+OIv3W7jmVv_;&QXzRrbB+_~TIXB-=SkX5VfgQcnLNL!{(QITt9@gAN8_HtQRl&B zizl;|yxHw(Z`Bu-r>e$TmwN!}!;ZCXP45KnK+%!cOTbOaykPvjquwEUeXsr9*UVSm z3@xcig#2+9r_OM^gur3?!>#nK?~KBrrR3TXEs_CqhSk6`Oy8IrN{dU=N=yn>((;+@ z!<}KJ^w+g8vNiVCs7EpahQKMO7UJ;#g5`^re|2=JKd;F{$LW1yP_IN_!_Y34;%Uuz z`>=IBh|c)#=lu4vmovB_b%y*?h02-MwM=uQlb#}xA?_E)j93`V+ab>C(_P2no?P!) z*hX_(w^%!`_S{`T2K{@eS&V6my;e>jhPSQp#+@49r$z|8OiiR;H3K#uvh)6)M%HOs z+bR^bTFItl;+{8$arGiqEBlBnBYel{P<)>&rfy~RI$R+n7;41Bp+Q6{_|qH^A*#u8 zl9KD=N3Z5?>Zmk!XVS3+ULOIh6cxuQ=4oRvfg8_x)G^zvTR$c%$8Jm{{rdz{Tk2>1 zn;H6zF2Z9RJFBKcCDFI6B^!TbL?Yk9?sPS#r*gG#B;EFd=|Rq zvXwQYIF0Ca8w((HpXsEV-6e)MSFtU(mtl-vk_T3qymq@Pa>Drro>`cLjcN%ZA?!pMlY1S+p?iE<-$(Rd;DZC4Fh$@tDl3cf z+v^V>d`yc<^4v>J9+qz%fo6Crph%>IIqrn(RaeJ#wix|J;6FnO*YA}XLkcz(Bm5;y zYYCjPKHn+p{L})TR%%5gflWNO44$DGk1`$hWKk*ZuCA| zzj4I0;Aq4+7NaF~W5I@L!1qBo-h<*LZx!9jtUCqwI`$heHBM(!t|I9{V|Z9;UfQ@Q zoS>Dn$tlK4O0pSo*Je1^CYyr946uHc8D_=Q53L_%5MXFfA_$xqQye48KMB{D;=v36 zi7?Y*0G#$M1$}+v*3A9VbIQQltMK1Nv_JU-DIl)UqLyOVB z5P219GM=QBZFTGBx7fu))4rveWel9U{+a3!!)9WN!=7df9^R~77ebKK5bNoc)3AWr z|;b6@Kr@;Fj(@?czzWv8kola8=x3=L7w{i()X zIV`T%z=@!M%Z=OiiQ+ZilO1RIu~v7d;NPdu`u|jNrr}VqeH$O4Nk|*nXGBRF>y(}5 z!7y3F*hwMAJ|=6~?@%{}iJ8a{Wg8jA*!RemCCpeyWZz}YHoT7G{q(-i{d{jMjPT!D$EJ4GZsE;k$}nDh;K>=zJp2j&L19$9GWIz^isGKu2Fy+ZD9oc}wdl~m$z z&@L~0fhBx35#AU$>#acnmX<~zx#3BRZkHE4b(Ew-oJlv+g2wChDf66Sdw8BVLpK~6 zE{5Q29m~u*m%06-%uHwAb|K+7&4l#sWB}VH%aPf-BapH~Ofh6?miBMClHyMxaL$r3 zN>7H9en`fnPJ8ju<>tQK%|qb>;d^V)UerY2($>Py7NP8^wO>*CRuE3bv*dNZ$4;Sj z^dR)XOL_Z+8XGquai?Fakv4PLg$dCUhV*J3fbCXXw2U7H8xF!x?fZjPy8TYI&!r-| z%MhM0x~-Nndtm;}e0=F6&@Gi8&JGhCQBi7SN~8q^B38P~nnFKN>5kOmDYdEO7*ngM z*d|mic;5A(BWgbU1;Py4Jk!G;-84`e8E7M| zRdSx%au2Ux2TKX{`BrLhyl?7tPk47NqnlE86wx|?L5cG2q9&I1)$WX?D5+oGeVg#kYN6y2HX@{*El` z+WwqPzde%h#}2o%GrX31HhtOo=Z+LkyZ$EI4-dc4sFtdI=a$kY%pb__qD`x--*9Jt zhR)1`nTHf5J-kS%V3s@&Zje(1K{6fMU$^n)*9b<&@P7Mp$qqG{-)+M4iuK()6>g<> z44@?sl?CAo{QICT1WSp@!p0Opl!UV)!`bUZn_9&H>+>aJwDNnQe@7e=^aHs2Bd|P_ z4^TUmF}!Vtj%I8V-{vqW=0O`L(hrIBFv_p6L5*9fLV9<@9qz^mOjd@6Tn(j6Nv{)y zVwGt|-sG%YKQ(QAPUeOqD~Cn^pzpJ|7|yp++M;9sRZ}!i$J`nMg6}B&xjtd9p!#`d zEHl?&xqENV#Pi37FHTB|neV3v!=eA!S>47a};~Z={HPR4W4}&MEc; z%u0!eYG!I~+;K1Zf~*!A8J*?ok!M&qW`A_K#mLiVFK6n8i2n#mxyISi9ztAvF!yJ ztdc(O|AdNL^aG>Ok{heC9Y06$K5 z>>dmlhDSmy4Cr#JTEGK{R=n#bDnLH8MIx3?aPtbH_f@swm$=J%UO&|+mW+yNKfSIF zl;$X#&{dU%k@C*v;Q6l%l&1~4ABp7lABwIfr%?OLnnhLuflC+8nMA{_`DJvO`9w*S zjD5?&aLL;~0N%?r%xiUOn-v80Kc?6tM+Oo--7L6%Q%=vXW~*p9%yS4j^>)@b!#ibk zjXsCR{pvc`K8%gnvN-?lHLlfB9D&NiZ_cOT9;f^IwbZM|XzXFPcw1psHc7`e#$ku# z9iFZm$1 z#A-gSrI`yY=!COwJO{|Uj1W6ASFP58Z#I8HL6o+DpzPO-ET0p=GO1x_oM9$V5S7^# zAnuD$NeS(D^Y@I~UVoepoo@+ZW#b5$MYs+teS3f8t09+daPL@j(ik@WtNF=5V(3C$ zr`1U93BY-`Ou4y4_-z70X^vu`R@JR`-@WQx=9>sB4`qnwA@7bQ0gk?=uQb+2e^T`7 zv?F>aUSxQi>C-_G?!w=kBqhseO^dwysGzs5bZ~)oZL-n z_}OV@vCuGW6qv+K^FQbhW9>=Q7U?}$XkY?T<3MTcUP9vqe$g=wiNIg! zBmEugAoHT$l_TP=X#UqV$iBD!D$UHa`D%(>Jx_oPfuJLdY41lct1I&I**?#2dsHHT zNPSYECgHOGujvD+NIK@n{C9zum^-6iRYK}{Z%gDAB*g@AOrtZ6jf{|b-RzH`IN92` z=ij4@jM>Clavl&F8E`a_aa9|h`6(w-A~z@PmNTIB&*$)!xHyn)7|oDX#vjJlqhlL( zcp5;}H4;bYFwTSg;o-~F14W&pZllO&k# zy~XP7g!FHs_Ft`c6X%ks7yTu&j12M$!Fe8={rc^Ka$*==UUiq|c^V7>+cSE&X>s)@ z-EGO8Pyh6rOCa^m_~CC~`enF};fR2P@M{KUYS{krq&dDQV$m{A`X~GF z-)7w6--Lz70`uM%TU#&lh6r^Mf8gMHYyyhGQIVu?w8mtRx`Lhj^Odnyf!&u4+Ba0P zh^sGqj`jd}qa0*J&Vm(!gYqShym)@|&mVLM%d97~6zY9=(5QI% z1$xHfX%aQmO^4adW%l0KEP1B)tl_kg#J0$o%iISW?qhkvh*)x1aGJR;S2OD)w4GP( ziw3T2-=nKJL$`+$#7k|n)t{!egp|}yo7?}~U=Zu4!N2e11oe(6T)FPs4>Yb)^p|1Vlduu5F_h;_sKqK- zi=KuXiJIQ}EIrGfpB;;kmT1t;nOP$e+mH$~LJ`3EXCdeA-I8(1mnDPGJ1f=}l}pZU zOQW|pHxx~jN5>r5?*7?dGXx#g)yoU8ZO*Ao&+zE(Dz9J*Rm|+uMuXX&1#qC8K@@V+ zM+1wfHyl!;(ur}AtIbSeGn4$bHRAfcy9U2&M=9jI!Md)va_ZYp_*5}o`8GDG{I@|d z4<_l`T{=x3BDzp7EM-9m;xf8R;6l#(HDuN*>xg$uUCy(^qUz4hjwMIb)u9I-Iu`mb*u|K|f(5bKf!FLG zCiA;YgGxZJs(DI+$soF`-z>2TBaxSAV)3O8-8tPpy>xExj^0o@*HEoWK918at9VdB zUZmgL=HuG&_519)JFFo$eWR$X{jQ?<@qOO~oa38Wv3xASkx{e#dLbe~oatICYl4%q zn<~Y+u5M3G0J2u1z&%0u#P#|&JJ-%AVhWW`03NOeDro8P-i#48^j?N-CaL0@VIwiq zTd?)ROaGgd=>*f(J)aI%D8zrV3tIXgMUn_&UXSVtrkV!)AeW`|L63uZzVM7Z|B@@1auoBGeg) zC$?bBmd?j6@-uDBb_DG)rPNyoTcSifjJ4XYGczSYpvrU#8&8%w0*=8bfQ8C!WL$8C + + + + Google Phone Gallery + + + + + + + + + + + + + + + + + + + + + + + + +

    + + + diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phone-detail/phone-detail.component.spec.ts b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phone-detail/phone-detail.component.spec.ts new file mode 100644 index 0000000000..0998b638f0 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phone-detail/phone-detail.component.spec.ts @@ -0,0 +1,38 @@ +// #docregion +describe('phoneDetail', () => { + + // Load the module that contains the `phoneDetail` component before each test + beforeEach(angular.mock.module('phoneDetail')); + + // Test the controller + describe('PhoneDetailController', () => { + let $httpBackend: angular.IHttpBackendService; + let ctrl: any; + let xyzPhoneData = { + name: 'phone xyz', + images: ['image/url1.png', 'image/url2.png'] + }; + + beforeEach(inject(($componentController: any, + _$httpBackend_: angular.IHttpBackendService, + $routeParams: angular.route.IRouteParamsService) => { + $httpBackend = _$httpBackend_; + $httpBackend.expectGET('phones/xyz.json').respond(xyzPhoneData); + + $routeParams['phoneId'] = 'xyz'; + + ctrl = $componentController('phoneDetail'); + })); + + it('should fetch the phone details', () => { + jasmine.addCustomEqualityTester(angular.equals); + + expect(ctrl.phone).toEqual({}); + + $httpBackend.flush(); + expect(ctrl.phone).toEqual(xyzPhoneData); + }); + + }); + +}); diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phone-detail/phone-detail.component.ts b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phone-detail/phone-detail.component.ts new file mode 100644 index 0000000000..079b31e2c2 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phone-detail/phone-detail.component.ts @@ -0,0 +1,24 @@ +// #docregion +class PhoneDetailController { + phone: any; + mainImageUrl: string; + + static $inject = ['$routeParams', 'Phone']; + constructor($routeParams: angular.route.IRouteParamsService, Phone: any) { + let phoneId = $routeParams['phoneId']; + this.phone = Phone.get({phoneId}, (phone: any) => { + this.setImage(phone.images[0]); + }); + } + + setImage(imageUrl: string) { + this.mainImageUrl = imageUrl; + } +} + +angular. + module('phoneDetail'). + component('phoneDetail', { + templateUrl: 'phone-detail/phone-detail.template.html', + controller: PhoneDetailController + }); diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phone-detail/phone-detail.module.ts b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phone-detail/phone-detail.module.ts new file mode 100644 index 0000000000..fd7cb3b920 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phone-detail/phone-detail.module.ts @@ -0,0 +1,7 @@ +'use strict'; + +// Define the `phoneDetail` module +angular.module('phoneDetail', [ + 'ngRoute', + 'core.phone' +]); diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phone-detail/phone-detail.template.html b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phone-detail/phone-detail.template.html new file mode 100644 index 0000000000..f48657803c --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phone-detail/phone-detail.template.html @@ -0,0 +1,117 @@ +
    + +
    + +

    {{$ctrl.phone.name}}

    + +

    {{$ctrl.phone.description}}

    + +
      +
    • + +
    • +
    + +
      +
    • + Availability and Networks +
      +
      Availability
      +
      {{availability}}
      +
      +
    • +
    • + Battery +
      +
      Type
      +
      {{$ctrl.phone.battery.type}}
      +
      Talk Time
      +
      {{$ctrl.phone.battery.talkTime}}
      +
      Standby time (max)
      +
      {{$ctrl.phone.battery.standbyTime}}
      +
      +
    • +
    • + Storage and Memory +
      +
      RAM
      +
      {{$ctrl.phone.storage.ram}}
      +
      Internal Storage
      +
      {{$ctrl.phone.storage.flash}}
      +
      +
    • +
    • + Connectivity +
      +
      Network Support
      +
      {{$ctrl.phone.connectivity.cell}}
      +
      WiFi
      +
      {{$ctrl.phone.connectivity.wifi}}
      +
      Bluetooth
      +
      {{$ctrl.phone.connectivity.bluetooth}}
      +
      Infrared
      +
      {{$ctrl.phone.connectivity.infrared | checkmark}}
      +
      GPS
      +
      {{$ctrl.phone.connectivity.gps | checkmark}}
      +
      +
    • +
    • + Android +
      +
      OS Version
      +
      {{$ctrl.phone.android.os}}
      +
      UI
      +
      {{$ctrl.phone.android.ui}}
      +
      +
    • +
    • + Size and Weight +
      +
      Dimensions
      +
      {{dim}}
      +
      Weight
      +
      {{$ctrl.phone.sizeAndWeight.weight}}
      +
      +
    • +
    • + Display +
      +
      Screen size
      +
      {{$ctrl.phone.display.screenSize}}
      +
      Screen resolution
      +
      {{$ctrl.phone.display.screenResolution}}
      +
      Touch screen
      +
      {{$ctrl.phone.display.touchScreen | checkmark}}
      +
      +
    • +
    • + Hardware +
      +
      CPU
      +
      {{$ctrl.phone.hardware.cpu}}
      +
      USB
      +
      {{$ctrl.phone.hardware.usb}}
      +
      Audio / headphone jack
      +
      {{$ctrl.phone.hardware.audioJack}}
      +
      FM Radio
      +
      {{$ctrl.phone.hardware.fmRadio | checkmark}}
      +
      Accelerometer
      +
      {{$ctrl.phone.hardware.accelerometer | checkmark}}
      +
      +
    • +
    • + Camera +
      +
      Primary
      +
      {{$ctrl.phone.camera.primary}}
      +
      Features
      +
      {{$ctrl.phone.camera.features.join(', ')}}
      +
      +
    • +
    • + Additional Features +
      {{$ctrl.phone.additionalFeatures}}
      +
    • +
    diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phone-list/phone-list.component.spec.ts b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phone-list/phone-list.component.spec.ts new file mode 100644 index 0000000000..19e1890817 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phone-list/phone-list.component.spec.ts @@ -0,0 +1,36 @@ +'use strict'; + +describe('phoneList', () => { + + // Load the module that contains the `phoneList` component before each test + beforeEach(angular.mock.module('phoneList')); + + // Test the controller + describe('PhoneListController', () => { + let $httpBackend: angular.IHttpBackendService; + let ctrl: any; + + beforeEach(inject(($componentController: any, _$httpBackend_: angular.IHttpBackendService) => { + $httpBackend = _$httpBackend_; + $httpBackend.expectGET('phones/phones.json') + .respond([{name: 'Nexus S'}, {name: 'Motorola DROID'}]); + + ctrl = $componentController('phoneList'); + })); + + it('should create a `phones` property with 2 phones fetched with `$http`', () => { + jasmine.addCustomEqualityTester(angular.equals); + + expect(ctrl.phones).toEqual([]); + + $httpBackend.flush(); + expect(ctrl.phones).toEqual([{name: 'Nexus S'}, {name: 'Motorola DROID'}]); + }); + + it('should set a default value for the `orderProp` property', () => { + expect(ctrl.orderProp).toBe('age'); + }); + + }); + +}); diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phone-list/phone-list.component.ts b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phone-list/phone-list.component.ts new file mode 100644 index 0000000000..e2f2855ae6 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phone-list/phone-list.component.ts @@ -0,0 +1,20 @@ +// #docregion +class PhoneListController { + phones: any[]; + orderProp: string; + query: string; + + static $inject = ['Phone']; + constructor(Phone: any) { + this.phones = Phone.query(); + this.orderProp = 'age'; + } + +} + +angular. + module('phoneList'). + component('phoneList', { + templateUrl: 'phone-list/phone-list.template.html', + controller: PhoneListController + }); diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phone-list/phone-list.module.ts b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phone-list/phone-list.module.ts new file mode 100644 index 0000000000..8ade7c5b88 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phone-list/phone-list.module.ts @@ -0,0 +1,4 @@ +'use strict'; + +// Define the `phoneList` module +angular.module('phoneList', ['core.phone']); diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phone-list/phone-list.template.html b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phone-list/phone-list.template.html new file mode 100644 index 0000000000..90548f9f91 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phone-list/phone-list.template.html @@ -0,0 +1,36 @@ +
    diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phones/dell-streak-7.json b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phones/dell-streak-7.json new file mode 100644 index 0000000000..a32eb6ff98 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phones/dell-streak-7.json @@ -0,0 +1,64 @@ +{ + "additionalFeatures": "Front Facing 1.3MP Camera", + "android": { + "os": "Android 2.2", + "ui": "Dell Stage" + }, + "availability": [ + "T-Mobile" + ], + "battery": { + "standbyTime": "", + "talkTime": "", + "type": "Lithium Ion (Li-Ion) (2780 mAH)" + }, + "camera": { + "features": [ + "Flash", + "Video" + ], + "primary": "5.0 megapixels" + }, + "connectivity": { + "bluetooth": "Bluetooth 2.1", + "cell": "T-mobile HSPA+ @ 2100/1900/AWS/850 MHz", + "gps": true, + "infrared": false, + "wifi": "802.11 b/g" + }, + "description": "Introducing Dell\u2122 Streak 7. Share photos, videos and movies together. It\u2019s small enough to carry around, big enough to gather around. Android\u2122 2.2-based tablet with over-the-air upgrade capability for future OS releases. A vibrant 7-inch, multitouch display with full Adobe\u00ae Flash 10.1 pre-installed. Includes a 1.3 MP front-facing camera for face-to-face chats on popular services such as Qik or Skype. 16 GB of internal storage, plus Wi-Fi, Bluetooth and built-in GPS keeps you in touch with the world around you. Connect on your terms. Save with 2-year contract or flexibility with prepaid pay-as-you-go plans", + "display": { + "screenResolution": "WVGA (800 x 480)", + "screenSize": "7.0 inches", + "touchScreen": true + }, + "hardware": { + "accelerometer": true, + "audioJack": "3.5mm", + "cpu": "nVidia Tegra T20", + "fmRadio": false, + "physicalKeyboard": false, + "usb": "USB 2.0" + }, + "id": "dell-streak-7", + "images": [ + "img/phones/dell-streak-7.0.jpg", + "img/phones/dell-streak-7.1.jpg", + "img/phones/dell-streak-7.2.jpg", + "img/phones/dell-streak-7.3.jpg", + "img/phones/dell-streak-7.4.jpg" + ], + "name": "Dell Streak 7", + "sizeAndWeight": { + "dimensions": [ + "199.9 mm (w)", + "119.8 mm (h)", + "12.4 mm (d)" + ], + "weight": "450.0 grams" + }, + "storage": { + "flash": "16000MB", + "ram": "512MB" + } +} diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phones/motorola-atrix-4g.json b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phones/motorola-atrix-4g.json new file mode 100644 index 0000000000..ccca00e3b2 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phones/motorola-atrix-4g.json @@ -0,0 +1,62 @@ +{ + "additionalFeatures": "", + "android": { + "os": "Android 2.2", + "ui": "MOTOBLUR" + }, + "availability": [ + "AT&T" + ], + "battery": { + "standbyTime": "400 hours", + "talkTime": "5 hours", + "type": "Lithium Ion (Li-Ion) (1930 mAH)" + }, + "camera": { + "features": [ + "" + ], + "primary": "" + }, + "connectivity": { + "bluetooth": "Bluetooth 2.1", + "cell": "WCDMA 850/1900/2100, GSM 850/900/1800/1900, HSDPA 14Mbps (Category 10) Edge Class 12, GPRS Class 12, eCompass, AGPS", + "gps": true, + "infrared": false, + "wifi": "802.11 a/b/g/n" + }, + "description": "MOTOROLA ATRIX 4G gives you dual-core processing power and the revolutionary webtop application. With webtop and a compatible Motorola docking station, sold separately, you can surf the Internet with a full Firefox browser, create and edit docs, or access multimedia on a large screen almost anywhere.", + "display": { + "screenResolution": "QHD (960 x 540)", + "screenSize": "4.0 inches", + "touchScreen": true + }, + "hardware": { + "accelerometer": true, + "audioJack": "3.5mm", + "cpu": "1 GHz Dual Core", + "fmRadio": false, + "physicalKeyboard": false, + "usb": "USB 2.0" + }, + "id": "motorola-atrix-4g", + "images": [ + "img/phones/motorola-atrix-4g.0.jpg", + "img/phones/motorola-atrix-4g.1.jpg", + "img/phones/motorola-atrix-4g.2.jpg", + "img/phones/motorola-atrix-4g.3.jpg" + ], + "name": "MOTOROLA ATRIX\u2122 4G", + "sizeAndWeight": { + "dimensions": [ + "63.5 mm (w)", + "117.75 mm (h)", + "10.95 mm (d)" + ], + "weight": "135.0 grams" + }, + "storage": { + "flash": "", + "ram": "" + } +} diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phones/motorola-xoom-with-wi-fi.json b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phones/motorola-xoom-with-wi-fi.json new file mode 100644 index 0000000000..4ba9c8d5b5 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phones/motorola-xoom-with-wi-fi.json @@ -0,0 +1,65 @@ +{ + "additionalFeatures": "Sensors: proximity, ambient light, barometer, gyroscope", + "android": { + "os": "Android 3.0", + "ui": "Honeycomb" + }, + "availability": [ + "" + ], + "battery": { + "standbyTime": "336 hours", + "talkTime": "24 hours", + "type": "Other ( mAH)" + }, + "camera": { + "features": [ + "Flash", + "Video" + ], + "primary": "5.0 megapixels" + }, + "connectivity": { + "bluetooth": "Bluetooth 2.1", + "cell": "", + "gps": true, + "infrared": false, + "wifi": "802.11 b/g/n" + }, + "description": "Motorola XOOM with Wi-Fi has a super-powerful dual-core processor and Android\u2122 3.0 (Honeycomb) \u2014 the Android platform designed specifically for tablets. With its 10.1-inch HD widescreen display, you\u2019ll enjoy HD video in a thin, light, powerful and upgradeable tablet.", + "display": { + "screenResolution": "WXGA (1200 x 800)", + "screenSize": "10.1 inches", + "touchScreen": true + }, + "hardware": { + "accelerometer": true, + "audioJack": "3.5mm", + "cpu": "1 GHz Dual Core Tegra 2", + "fmRadio": false, + "physicalKeyboard": false, + "usb": "USB 2.0" + }, + "id": "motorola-xoom-with-wi-fi", + "images": [ + "img/phones/motorola-xoom-with-wi-fi.0.jpg", + "img/phones/motorola-xoom-with-wi-fi.1.jpg", + "img/phones/motorola-xoom-with-wi-fi.2.jpg", + "img/phones/motorola-xoom-with-wi-fi.3.jpg", + "img/phones/motorola-xoom-with-wi-fi.4.jpg", + "img/phones/motorola-xoom-with-wi-fi.5.jpg" + ], + "name": "Motorola XOOM\u2122 with Wi-Fi", + "sizeAndWeight": { + "dimensions": [ + "249.1 mm (w)", + "167.8 mm (h)", + "12.9 mm (d)" + ], + "weight": "708.0 grams" + }, + "storage": { + "flash": "32000MB", + "ram": "1000MB" + } +} diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phones/motorola-xoom.json b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phones/motorola-xoom.json new file mode 100644 index 0000000000..f0f0c8711d --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phones/motorola-xoom.json @@ -0,0 +1,62 @@ +{ + "additionalFeatures": "Front-facing camera. Sensors: proximity, ambient light, barometer, gyroscope.", + "android": { + "os": "Android 3.0", + "ui": "Android" + }, + "availability": [ + "Verizon" + ], + "battery": { + "standbyTime": "336 hours", + "talkTime": "24 hours", + "type": "Other (3250 mAH)" + }, + "camera": { + "features": [ + "Flash", + "Video" + ], + "primary": "5.0 megapixels" + }, + "connectivity": { + "bluetooth": "Bluetooth 2.1", + "cell": "CDMA 800 /1900 LTE 700, Rx diversity in all bands", + "gps": true, + "infrared": false, + "wifi": "802.11 a/b/g/n" + }, + "description": "MOTOROLA XOOM has a super-powerful dual-core processor and Android\u2122 3.0 (Honeycomb) \u2014 the Android platform designed specifically for tablets. With its 10.1-inch HD widescreen display, you\u2019ll enjoy HD video in a thin, light, powerful and upgradeable tablet.", + "display": { + "screenResolution": "WXGA (1200 x 800)", + "screenSize": "10.1 inches", + "touchScreen": true + }, + "hardware": { + "accelerometer": true, + "audioJack": "3.5mm", + "cpu": "1 GHz Dual Core Tegra 2", + "fmRadio": false, + "physicalKeyboard": false, + "usb": "USB 2.0" + }, + "id": "motorola-xoom", + "images": [ + "img/phones/motorola-xoom.0.jpg", + "img/phones/motorola-xoom.1.jpg", + "img/phones/motorola-xoom.2.jpg" + ], + "name": "MOTOROLA XOOM\u2122", + "sizeAndWeight": { + "dimensions": [ + "249.0 mm (w)", + "168.0 mm (h)", + "12.7 mm (d)" + ], + "weight": "726.0 grams" + }, + "storage": { + "flash": "32000MB", + "ram": "1000MB" + } +} diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phones/nexus-s.json b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phones/nexus-s.json new file mode 100644 index 0000000000..5e712e2ff8 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phones/nexus-s.json @@ -0,0 +1,69 @@ +{ + "additionalFeatures": "Contour Display, Near Field Communications (NFC), Three-axis gyroscope, Anti-fingerprint display coating, Internet Calling support (VoIP/SIP)", + "android": { + "os": "Android 2.3", + "ui": "Android" + }, + "availability": [ + "M1,", + "O2,", + "Orange,", + "Singtel,", + "StarHub,", + "T-Mobile,", + "Vodafone" + ], + "battery": { + "standbyTime": "428 hours", + "talkTime": "6 hours", + "type": "Lithium Ion (Li-Ion) (1500 mAH)" + }, + "camera": { + "features": [ + "Flash", + "Video" + ], + "primary": "5.0 megapixels" + }, + "connectivity": { + "bluetooth": "Bluetooth 2.1", + "cell": "Quad-band GSM: 850, 900, 1800, 1900\r\nTri-band HSPA: 900, 2100, 1700\r\nHSPA type: HSDPA (7.2Mbps) HSUPA (5.76Mbps)", + "gps": true, + "infrared": false, + "wifi": "802.11 b/g/n" + }, + "description": "Nexus S is the next generation of Nexus devices, co-developed by Google and Samsung. The latest Android platform (Gingerbread), paired with a 1 GHz Hummingbird processor and 16GB of memory, makes Nexus S one of the fastest phones on the market. It comes pre-installed with the best of Google apps and enabled with new and popular features like true multi-tasking, Wi-Fi hotspot, Internet Calling, NFC support, and full web browsing. With this device, users will also be the first to receive software upgrades and new Google mobile apps as soon as they become available. For more details, visit http://www.google.com/nexus.", + "display": { + "screenResolution": "WVGA (800 x 480)", + "screenSize": "4.0 inches", + "touchScreen": true + }, + "hardware": { + "accelerometer": true, + "audioJack": "3.5mm", + "cpu": "1GHz Cortex A8 (Hummingbird) processor", + "fmRadio": false, + "physicalKeyboard": false, + "usb": "USB 2.0" + }, + "id": "nexus-s", + "images": [ + "img/phones/nexus-s.0.jpg", + "img/phones/nexus-s.1.jpg", + "img/phones/nexus-s.2.jpg", + "img/phones/nexus-s.3.jpg" + ], + "name": "Nexus S", + "sizeAndWeight": { + "dimensions": [ + "63.0 mm (w)", + "123.9 mm (h)", + "10.88 mm (d)" + ], + "weight": "129.0 grams" + }, + "storage": { + "flash": "16384MB", + "ram": "512MB" + } +} diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phones/phones.json b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phones/phones.json new file mode 100644 index 0000000000..339b94fbb5 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/phones/phones.json @@ -0,0 +1,155 @@ +[ + { + "age": 0, + "id": "motorola-xoom-with-wi-fi", + "imageUrl": "img/phones/motorola-xoom-with-wi-fi.0.jpg", + "name": "Motorola XOOM\u2122 with Wi-Fi", + "snippet": "The Next, Next Generation\r\n\r\nExperience the future with Motorola XOOM with Wi-Fi, the world's first tablet powered by Android 3.0 (Honeycomb)." + }, + { + "age": 1, + "id": "motorola-xoom", + "imageUrl": "img/phones/motorola-xoom.0.jpg", + "name": "MOTOROLA XOOM\u2122", + "snippet": "The Next, Next Generation\n\nExperience the future with MOTOROLA XOOM, the world's first tablet powered by Android 3.0 (Honeycomb)." + }, + { + "age": 2, + "carrier": "AT&T", + "id": "motorola-atrix-4g", + "imageUrl": "img/phones/motorola-atrix-4g.0.jpg", + "name": "MOTOROLA ATRIX\u2122 4G", + "snippet": "MOTOROLA ATRIX 4G the world's most powerful smartphone." + }, + { + "age": 3, + "id": "dell-streak-7", + "imageUrl": "img/phones/dell-streak-7.0.jpg", + "name": "Dell Streak 7", + "snippet": "Introducing Dell\u2122 Streak 7. Share photos, videos and movies together. It\u2019s small enough to carry around, big enough to gather around." + }, + { + "age": 4, + "carrier": "Cellular South", + "id": "samsung-gem", + "imageUrl": "img/phones/samsung-gem.0.jpg", + "name": "Samsung Gem\u2122", + "snippet": "The Samsung Gem\u2122 brings you everything that you would expect and more from a touch display smart phone \u2013 more apps, more features and a more affordable price." + }, + { + "age": 5, + "carrier": "Dell", + "id": "dell-venue", + "imageUrl": "img/phones/dell-venue.0.jpg", + "name": "Dell Venue", + "snippet": "The Dell Venue; Your Personal Express Lane to Everything" + }, + { + "age": 6, + "carrier": "Best Buy", + "id": "nexus-s", + "imageUrl": "img/phones/nexus-s.0.jpg", + "name": "Nexus S", + "snippet": "Fast just got faster with Nexus S. A pure Google experience, Nexus S is the first phone to run Gingerbread (Android 2.3), the fastest version of Android yet." + }, + { + "age": 7, + "carrier": "Cellular South", + "id": "lg-axis", + "imageUrl": "img/phones/lg-axis.0.jpg", + "name": "LG Axis", + "snippet": "Android Powered, Google Maps Navigation, 5 Customizable Home Screens" + }, + { + "age": 8, + "id": "samsung-galaxy-tab", + "imageUrl": "img/phones/samsung-galaxy-tab.0.jpg", + "name": "Samsung Galaxy Tab\u2122", + "snippet": "Feel Free to Tab\u2122. The Samsung Galaxy Tab\u2122 brings you an ultra-mobile entertainment experience through its 7\u201d display, high-power processor and Adobe\u00ae Flash\u00ae Player compatibility." + }, + { + "age": 9, + "carrier": "Cellular South", + "id": "samsung-showcase-a-galaxy-s-phone", + "imageUrl": "img/phones/samsung-showcase-a-galaxy-s-phone.0.jpg", + "name": "Samsung Showcase\u2122 a Galaxy S\u2122 phone", + "snippet": "The Samsung Showcase\u2122 delivers a cinema quality experience like you\u2019ve never seen before. Its innovative 4\u201d touch display technology provides rich picture brilliance, even outdoors" + }, + { + "age": 10, + "carrier": "Verizon", + "id": "droid-2-global-by-motorola", + "imageUrl": "img/phones/droid-2-global-by-motorola.0.jpg", + "name": "DROID\u2122 2 Global by Motorola", + "snippet": "The first smartphone with a 1.2 GHz processor and global capabilities." + }, + { + "age": 11, + "carrier": "Verizon", + "id": "droid-pro-by-motorola", + "imageUrl": "img/phones/droid-pro-by-motorola.0.jpg", + "name": "DROID\u2122 Pro by Motorola", + "snippet": "The next generation of DOES." + }, + { + "age": 12, + "carrier": "AT&T", + "id": "motorola-bravo-with-motoblur", + "imageUrl": "img/phones/motorola-bravo-with-motoblur.0.jpg", + "name": "MOTOROLA BRAVO\u2122 with MOTOBLUR\u2122", + "snippet": "An experience to cheer about." + }, + { + "age": 13, + "carrier": "T-Mobile", + "id": "motorola-defy-with-motoblur", + "imageUrl": "img/phones/motorola-defy-with-motoblur.0.jpg", + "name": "Motorola DEFY\u2122 with MOTOBLUR\u2122", + "snippet": "Are you ready for everything life throws your way?" + }, + { + "age": 14, + "carrier": "T-Mobile", + "id": "t-mobile-mytouch-4g", + "imageUrl": "img/phones/t-mobile-mytouch-4g.0.jpg", + "name": "T-Mobile myTouch 4G", + "snippet": "The T-Mobile myTouch 4G is a premium smartphone designed to deliver blazing fast 4G speeds so that you can video chat from practically anywhere, with or without Wi-Fi." + }, + { + "age": 15, + "carrier": "US Cellular", + "id": "samsung-mesmerize-a-galaxy-s-phone", + "imageUrl": "img/phones/samsung-mesmerize-a-galaxy-s-phone.0.jpg", + "name": "Samsung Mesmerize\u2122 a Galaxy S\u2122 phone", + "snippet": "The Samsung Mesmerize\u2122 delivers a cinema quality experience like you\u2019ve never seen before. Its innovative 4\u201d touch display technology provides rich picture brilliance,even outdoors" + }, + { + "age": 16, + "carrier": "Sprint", + "id": "sanyo-zio", + "imageUrl": "img/phones/sanyo-zio.0.jpg", + "name": "SANYO ZIO", + "snippet": "The Sanyo Zio by Kyocera is an Android smartphone with a combination of ultra-sleek styling, strong performance and unprecedented value." + }, + { + "age": 17, + "id": "samsung-transform", + "imageUrl": "img/phones/samsung-transform.0.jpg", + "name": "Samsung Transform\u2122", + "snippet": "The Samsung Transform\u2122 brings you a fun way to customize your Android powered touch screen phone to just the way you like it through your favorite themed \u201cSprint ID Service Pack\u201d." + }, + { + "age": 18, + "id": "t-mobile-g2", + "imageUrl": "img/phones/t-mobile-g2.0.jpg", + "name": "T-Mobile G2", + "snippet": "The T-Mobile G2 with Google is the first smartphone built for 4G speeds on T-Mobile's new network. Get the information you need, faster than you ever thought possible." + }, + { + "age": 19, + "id": "motorola-charm-with-motoblur", + "imageUrl": "img/phones/motorola-charm-with-motoblur.0.jpg", + "name": "Motorola CHARM\u2122 with MOTOBLUR\u2122", + "snippet": "Motorola CHARM fits easily in your pocket or palm. Includes MOTOBLUR service." + } +] diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/example-config.json b/aio/content/examples/upgrade-phonecat-1-typescript/ts/example-config.json new file mode 100644 index 0000000000..a8781b9a31 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-1-typescript/ts/example-config.json @@ -0,0 +1,4 @@ +{ + "build": "build:upgrade", + "run": "serve:upgrade" +} diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/karma.conf.ajs.js b/aio/content/examples/upgrade-phonecat-1-typescript/ts/karma.conf.ajs.js new file mode 100644 index 0000000000..dc829d1983 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-1-typescript/ts/karma.conf.ajs.js @@ -0,0 +1,32 @@ +//jshint strict: false +module.exports = function(config) { + config.set({ + + basePath: './app', + + files: [ + 'https://code.angularjs.org/1.5.5/angular.js', + 'https://code.angularjs.org/1.5.5/angular-animate.js', + 'https://code.angularjs.org/1.5.5/angular-resource.js', + 'https://code.angularjs.org/1.5.5/angular-route.js', + 'https://code.angularjs.org/1.5.5/angular-mocks.js', + '**/*.module.js', + '*!(.module|.spec).js', + '!(bower_components)/**/*!(.module|.spec).js', + '**/*.spec.js' + ], + + autoWatch: true, + + frameworks: ['jasmine'], + + browsers: ['Chrome', 'Firefox'], + + plugins: [ + 'karma-chrome-launcher', + 'karma-firefox-launcher', + 'karma-jasmine' + ] + + }); +}; diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/run-unit-tests.sh b/aio/content/examples/upgrade-phonecat-1-typescript/ts/run-unit-tests.sh new file mode 100755 index 0000000000..239e5ff7d7 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-1-typescript/ts/run-unit-tests.sh @@ -0,0 +1,7 @@ +## The boilerplate Karma configuration won't work with AngularJS tests since +## a specific loading configuration is needed for them. +## We keep one in karma.conf.ajs.js. This scripts runs the AngularJS tests with +## that config. + +PATH=$(npm bin):$PATH +tsc && karma start karma.conf.ajs.js diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/tsconfig.ajs.json b/aio/content/examples/upgrade-phonecat-1-typescript/ts/tsconfig.ajs.json new file mode 100644 index 0000000000..53da36ca95 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-1-typescript/ts/tsconfig.ajs.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "target": "es5", + "module": "commonjs", + "moduleResolution": "node", + "sourceMap": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "removeComments": false, + "noImplicitAny": false, + "suppressImplicitAnyIndexErrors": true + } +} diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/tsconfig.json b/aio/content/examples/upgrade-phonecat-1-typescript/ts/tsconfig.json new file mode 100644 index 0000000000..be11d1eb49 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-1-typescript/ts/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "es5", + "module": "commonjs", + "moduleResolution": "node", + "sourceMap": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "lib": [ "es2015", "dom" ], + "noImplicitAny": true, + "suppressImplicitAnyIndexErrors": true, + "typeRoots": [ + "../../node_modules/@types/" + ] + }, + "compileOnSave": true, + "exclude": [ + "node_modules/*", + "**/*-aot.ts", + "aot/**/*" + ] +} diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/README.md b/aio/content/examples/upgrade-phonecat-2-hybrid/README.md new file mode 100644 index 0000000000..b005739148 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/README.md @@ -0,0 +1,34 @@ +This is the Angular Phonecat application adjusted to fit our boilerplate project +structure. + +The following changes from vanilla Phonecat are applied: + +* Karma config for unit tests is in karma.conf.ajs.js because the boilerplate + Karma config is not compatible with the way AngularJS tests need to be run. + The shell script run-unit-tests.sh can be used to run the unit tests. +* There's a `package.ajs.json`, which is not used to run anything but only to + show an example of changing the PhoneCat http-server root path. +* Also for the Karma shim, there is a `karma-test-shim.1.js` file which isn't + used but is shown in the test appendix. +* Instead of using Bower, AngularJS and its dependencies are fetched from a CDN + in index.html and karma.conf.ajs.js. +* E2E tests have been moved to the parent directory, where `run-e2e-tests` can + discover and run them along with all the other examples. +* Most of the phone JSON and image data removed in the interest of keeping + repo weight down. Keeping enough to retain testability of the app. + +## Running the app + +Start like any example + + npm run start + +## Running unit tests + + ./run-unit-tests.sh + +## Running E2E tests + +Like for any example (at the project root): + + gulp run-e2e-tests --filter=phonecat-2 diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/e2e-spec.ts b/aio/content/examples/upgrade-phonecat-2-hybrid/e2e-spec.ts new file mode 100644 index 0000000000..2ec8e37977 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/e2e-spec.ts @@ -0,0 +1,107 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by } from 'protractor'; +import { setProtractorToHybridMode } from '../protractor-helpers'; + +// Angular E2E Testing Guide: +// https://docs.angularjs.org/guide/e2e-testing + +describe('PhoneCat Application', function() { + + beforeAll(function () { + setProtractorToHybridMode(); + }); + + it('should redirect `index.html` to `index.html#!/phones', function() { + browser.get('index.html'); + expect(browser.getLocationAbsUrl()).toBe('/phones'); + }); + + describe('View: Phone list', function() { + + beforeEach(function() { + browser.get('index.html#!/phones'); + }); + + it('should filter the phone list as a user types into the search box', function() { + let phoneList = element.all(by.css('.phones li')); + let query = element(by.css('input')); + + expect(phoneList.count()).toBe(20); + + query.sendKeys('nexus'); + expect(phoneList.count()).toBe(1); + + query.clear(); + query.sendKeys('motorola'); + expect(phoneList.count()).toBe(8); + }); + + it('should be possible to control phone order via the drop-down menu', function() { + let queryField = element(by.css('input')); + let orderSelect = element(by.css('select')); + let nameOption = orderSelect.element(by.css('option[value="name"]')); + let phoneNameColumn = element.all(by.css('.phones .name')); + + function getNames() { + return phoneNameColumn.map(function(elem) { + return elem.getText(); + }); + } + + queryField.sendKeys('tablet'); // Let's narrow the dataset to make the assertions shorter + + expect(getNames()).toEqual([ + 'Motorola XOOM\u2122 with Wi-Fi', + 'MOTOROLA XOOM\u2122' + ]); + + nameOption.click(); + + expect(getNames()).toEqual([ + 'MOTOROLA XOOM\u2122', + 'Motorola XOOM\u2122 with Wi-Fi' + ]); + }); + + it('should render phone specific links', function() { + let query = element(by.css('input')); + query.sendKeys('nexus'); + + element.all(by.css('.phones li a')).first().click(); + browser.sleep(200); // Not sure why this is needed but it is. The route change works fine. + expect(browser.getLocationAbsUrl()).toBe('/phones/nexus-s'); + }); + + }); + + describe('View: Phone detail', function() { + + beforeEach(function() { + browser.get('index.html#!/phones/nexus-s'); + }); + + it('should display the `nexus-s` page', function() { + expect(element(by.css('h1')).getText()).toBe('Nexus S'); + }); + + it('should display the first phone image as the main phone image', function() { + let mainImage = element(by.css('img.phone.selected')); + + expect(mainImage.getAttribute('src')).toMatch(/img\/phones\/nexus-s.0.jpg/); + }); + + it('should swap the main image when clicking on a thumbnail image', function() { + let mainImage = element(by.css('img.phone.selected')); + let thumbnails = element.all(by.css('.phone-thumbs img')); + + thumbnails.get(2).click(); + expect(mainImage.getAttribute('src')).toMatch(/img\/phones\/nexus-s.2.jpg/); + + thumbnails.get(0).click(); + expect(mainImage.getAttribute('src')).toMatch(/img\/phones\/nexus-s.0.jpg/); + }); + + }); + +}); diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/.gitignore b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/.gitignore new file mode 100644 index 0000000000..927d62d641 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/.gitignore @@ -0,0 +1,8 @@ +aot/**/* +!aot/index.html +dist +!app/tsconfig.json +!rollup-config.js +!karma.conf.ajs.js +!copy-dist-files.js +!systemjs.config.1.js diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/aot/index.html b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/aot/index.html new file mode 100644 index 0000000000..fdc9584928 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/aot/index.html @@ -0,0 +1,40 @@ + + + + + + + + + Google Phone Gallery + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + + diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/ajs-upgraded-providers.ts b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/ajs-upgraded-providers.ts new file mode 100644 index 0000000000..f6e1654d74 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/ajs-upgraded-providers.ts @@ -0,0 +1,14 @@ +// #docregion +export abstract class RouteParams { + [key: string]: string; +} + +export function routeParamsFactory(i: any) { + return i.get('$routeParams'); +} + +export const routeParamsProvider = { + provide: RouteParams, + useFactory: routeParamsFactory, + deps: ['$injector'] +}; diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/app.animations.css b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/app.animations.css new file mode 100644 index 0000000000..175320b509 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/app.animations.css @@ -0,0 +1,67 @@ +/* Animate `ngRepeat` in `phoneList` component */ +.phone-list-item.ng-enter, +.phone-list-item.ng-leave, +.phone-list-item.ng-move { + overflow: hidden; + transition: 0.5s linear all; +} + +.phone-list-item.ng-enter, +.phone-list-item.ng-leave.ng-leave-active, +.phone-list-item.ng-move { + height: 0; + margin-bottom: 0; + opacity: 0; + padding-bottom: 0; + padding-top: 0; +} + +.phone-list-item.ng-enter.ng-enter-active, +.phone-list-item.ng-leave, +.phone-list-item.ng-move.ng-move-active { + height: 120px; + margin-bottom: 20px; + opacity: 1; + padding-bottom: 4px; + padding-top: 15px; +} + +/* Animate view transitions with `ngView` */ +.view-container { + position: relative; +} + +.view-frame { + margin-top: 20px; +} + +.view-frame.ng-enter, +.view-frame.ng-leave { + background: white; + left: 0; + position: absolute; + right: 0; + top: 0; +} + +.view-frame.ng-enter { + animation: 1s fade-in; + z-index: 100; +} + +.view-frame.ng-leave { + animation: 1s fade-out; + z-index: 99; +} + +@keyframes fade-in { + from { opacity: 0; } + to { opacity: 1; } +} + +@keyframes fade-out { + from { opacity: 1; } + to { opacity: 0; } +} + +/* Older browsers might need vendor-prefixes for keyframes and animation! */ diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/app.animations.ts b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/app.animations.ts new file mode 100644 index 0000000000..f0739b6405 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/app.animations.ts @@ -0,0 +1,43 @@ +'use strict'; + +angular. + module('phonecatApp'). + animation('.phone', function phoneAnimationFactory() { + return { + addClass: animateIn, + removeClass: animateOut + }; + + function animateIn(element: JQuery, className: string, done: () => void) { + if (className !== 'selected') { return; } + + element.css({ + display: 'block', + position: 'absolute', + top: 500, + left: 0 + }).animate({ + top: 0 + }, done); + + return function animateInEnd(wasCanceled: boolean) { + if (wasCanceled) { element.stop(); } + }; + } + + function animateOut(element: JQuery, className: string, done: () => void) { + if (className !== 'selected') { return; } + + element.css({ + position: 'absolute', + top: 0, + left: 0 + }).animate({ + top: -500 + }, done); + + return function animateOutEnd(wasCanceled: boolean) { + if (wasCanceled) { element.stop(); } + }; + } + }); diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/app.config.ts b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/app.config.ts new file mode 100644 index 0000000000..458ed94250 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/app.config.ts @@ -0,0 +1,19 @@ +'use strict'; + +angular. + module('phonecatApp'). + config(['$locationProvider', '$routeProvider', + function config($locationProvider: angular.ILocationProvider, + $routeProvider: angular.route.IRouteProvider) { + $locationProvider.hashPrefix('!'); + + $routeProvider. + when('/phones', { + template: '' + }). + when('/phones/:phoneId', { + template: '' + }). + otherwise('/phones'); + } + ]); diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/app.css b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/app.css new file mode 100644 index 0000000000..f4b45b02a5 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/app.css @@ -0,0 +1,93 @@ +body { + padding: 20px; +} + +h1 { + border-bottom: 1px solid gray; + margin-top: 0; +} + +/* View: Phone list */ +.phones { + list-style: none; +} + +.phones li { + clear: both; + height: 115px; + padding-top: 15px; +} + +.thumb { + float: left; + height: 100px; + margin: -0.5em 1em 1.5em 0; + padding-bottom: 1em; + width: 100px; +} + +/* View: Phone detail */ +.phone { + background-color: white; + display: none; + float: left; + height: 400px; + margin-bottom: 2em; + margin-right: 3em; + padding: 2em; + width: 400px; +} + +.phone:first-child { + display: block; +} + +.phone-images { + background-color: white; + float: left; + height: 450px; + overflow: hidden; + position: relative; + width: 450px; +} + +.phone-thumbs { + list-style: none; + margin: 0; +} + +.phone-thumbs img { + height: 100px; + padding: 1em; + width: 100px; +} + +.phone-thumbs li { + background-color: white; + border: 1px solid black; + cursor: pointer; + display: inline-block; + margin: 1em; +} + +.specs { + clear: both; + list-style: none; + margin: 0; + padding: 0; +} + +.specs dt { + font-weight: bold; +} + +.specs > li { + display: inline-block; + vertical-align: top; + width: 200px; +} + +.specs > li > span { + font-size: 1.2em; + font-weight: bold; +} diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/app.module.ajs.ts b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/app.module.ajs.ts new file mode 100644 index 0000000000..089c3c7d85 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/app.module.ajs.ts @@ -0,0 +1,11 @@ +// #docregion +'use strict'; + +// Define the `phonecatApp` AngularJS module +angular.module('phonecatApp', [ + 'ngAnimate', + 'ngRoute', + 'core', + 'phoneDetail', + 'phoneList', +]); diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/app.module.ts b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/app.module.ts new file mode 100644 index 0000000000..ea570e3cbf --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/app.module.ts @@ -0,0 +1,73 @@ +// #docplaster +// #docregion bare +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +// #enddocregion bare +// #docregion upgrademodule +import { UpgradeModule } from '@angular/upgrade/static'; +// #enddocregion upgrademodule +// #docregion httpmodule +import { HttpModule } from '@angular/http'; +// #enddocregion httpmodule +// #docregion phonelist +import { FormsModule } from '@angular/forms'; +// #enddocregion phonelist +// #docregion phone +import { Phone } from './core/phone/phone.service'; +// #enddocregion phone +// #docregion checkmarkpipe +import { CheckmarkPipe } from './core/checkmark/checkmark.pipe'; +// #enddocregion checkmarkpipe +// #docregion phonelist +import { PhoneListComponent } from './phone-list/phone-list.component'; +// #enddocregion phonelist +// #docregion routeparams +import { routeParamsProvider } from './ajs-upgraded-providers'; +// #enddocregion routeparams +// #docregion phonedetail +import { PhoneDetailComponent } from './phone-detail/phone-detail.component'; +// #enddocregion phonedetail + +// #docregion bare, upgrademodule, httpmodule, phone, phonelist, phonedetail, checkmarkpipe + +@NgModule({ + imports: [ + BrowserModule, + // #enddocregion bare + UpgradeModule, + // #enddocregion upgrademodule + HttpModule, + // #enddocregion httpmodule, phone + FormsModule, + // #docregion bare, upgrademodule, httpmodule, phone + ], + // #enddocregion bare, upgrademodule, httpmodule, phone + declarations: [ + PhoneListComponent, + // #enddocregion phonelist + PhoneDetailComponent, + // #enddocregion phonedetail + CheckmarkPipe + // #docregion phonelist, phonedetail + ], + entryComponents: [ + PhoneListComponent, + // #enddocregion phonelist + PhoneDetailComponent + ], + // #docregion phone, routeparams + providers: [ + Phone, + // #enddocregion phone + routeParamsProvider + // #docregion phone + ] + // #enddocregion routeparams +// #docregion bare, upgrademodule, httpmodule, phonelist +}) +export class AppModule { + // #enddocregion bare + ngDoBootstrap() {} + // #docregion bare +} +// #enddocregion bare, upgrademodule, httpmodule, phone, phonelist, phonedetail, checkmarkpipe diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/core/checkmark/checkmark.pipe.spec.ts b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/core/checkmark/checkmark.pipe.spec.ts new file mode 100644 index 0000000000..f7485ec2ba --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/core/checkmark/checkmark.pipe.spec.ts @@ -0,0 +1,11 @@ +// #docregion +import { CheckmarkPipe } from './checkmark.pipe'; + +describe('CheckmarkPipe', function() { + + 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/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/core/checkmark/checkmark.pipe.ts b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/core/checkmark/checkmark.pipe.ts new file mode 100644 index 0000000000..888017e15c --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/core/checkmark/checkmark.pipe.ts @@ -0,0 +1,9 @@ +// #docregion +import { Pipe, PipeTransform } from '@angular/core'; + +@Pipe({name: 'checkmark'}) +export class CheckmarkPipe implements PipeTransform { + transform(input: boolean) { + return input ? '\u2713' : '\u2718'; + } +} diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/core/core.module.ts b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/core/core.module.ts new file mode 100644 index 0000000000..84a91dc7a6 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/core/core.module.ts @@ -0,0 +1,4 @@ +'use strict'; + +// Define the `core` module +angular.module('core', ['core.phone']); diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/core/phone/phone.module.ts b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/core/phone/phone.module.ts new file mode 100644 index 0000000000..0b6b348899 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/core/phone/phone.module.ts @@ -0,0 +1,4 @@ +'use strict'; + +// Define the `core.phone` module +angular.module('core.phone', ['ngResource']); diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/core/phone/phone.service.spec.ts b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/core/phone/phone.service.spec.ts new file mode 100644 index 0000000000..a0c1655c20 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/core/phone/phone.service.spec.ts @@ -0,0 +1,51 @@ +// #docregion +import { inject, TestBed } from '@angular/core/testing'; +import { + Http, + BaseRequestOptions, + ResponseOptions, + Response +} from '@angular/http'; +import { MockBackend, MockConnection } from '@angular/http/testing'; +import { Phone, PhoneData } from './phone.service'; + +describe('Phone', function() { + let phone: Phone; + let phonesData: PhoneData[] = [ + {name: 'Phone X', snippet: '', images: []}, + {name: 'Phone Y', snippet: '', images: []}, + {name: 'Phone Z', snippet: '', images: []} + ]; + let mockBackend: MockBackend; + + 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_; + phone = _phone_; + })); + + it('should fetch the phones data from `/phones/phones.json`', (done: () => void) => { + mockBackend.connections.subscribe((conn: MockConnection) => { + conn.mockRespond(new Response(new ResponseOptions({body: JSON.stringify(phonesData)}))); + }); + phone.query().subscribe(result => { + expect(result).toEqual(phonesData); + done(); + }); + }); + +}); + diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/core/phone/phone.service.ts b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/core/phone/phone.service.ts new file mode 100644 index 0000000000..c4673475fb --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/core/phone/phone.service.ts @@ -0,0 +1,42 @@ +// #docregion +import { Injectable } from '@angular/core'; +import { Http, Response } from '@angular/http'; +import { Observable } from 'rxjs/Rx'; + +// #docregion downgrade-injectable +declare var angular: angular.IAngularStatic; +import { downgradeInjectable } from '@angular/upgrade/static'; +// #enddocregion downgrade-injectable + +import 'rxjs/add/operator/map'; + +// #docregion phonedata-interface +export interface PhoneData { + name: string; + snippet: string; + images: string[]; +} +// #enddocregion phonedata-interface + +// #docregion fullclass +// #docregion classdef, downgrade-injectable +@Injectable() +export class Phone { +// #enddocregion classdef, downgrade-injectable + constructor(private http: Http) { } + query(): Observable { + return this.http.get(`phones/phones.json`) + .map((res: Response) => res.json()); + } + get(id: string): Observable { + return this.http.get(`phones/${id}.json`) + .map((res: Response) => res.json()); + } +// #docregion classdef, downgrade-injectable +} +// #enddocregion classdef +// #enddocregion fullclass + +angular.module('core.phone') + .factory('phone', downgradeInjectable(Phone)); +// #enddocregion downgrade-injectable diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/.gitkeep b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/dell-streak-7.0.jpg b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/dell-streak-7.0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7ce0dce4ee9edf6d1562f9123f0e51fc46310b06 GIT binary patch literal 23086 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 literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/dell-streak-7.1.jpg b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/dell-streak-7.1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ed8cad89fba49d45de5b2151c351ea025399a205 GIT binary patch literal 23269 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 literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/dell-streak-7.2.jpg b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/dell-streak-7.2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c83529e0f9c89184965b79f2e81af72ce753451f GIT binary patch literal 4686 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 CD!YFG literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/dell-streak-7.3.jpg b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/dell-streak-7.3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cd2c30280da82d541b2adc803181a105935d4e59 GIT binary patch literal 28319 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 ThO9d62%Tuj|MLH3_%r!Gua%9E literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/droid-2-global-by-motorola.0.jpg b/aio/content/examples/upgrade-phonecat-2-hybrid/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/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/droid-pro-by-motorola.0.jpg b/aio/content/examples/upgrade-phonecat-2-hybrid/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/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/lg-axis.0.jpg b/aio/content/examples/upgrade-phonecat-2-hybrid/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* 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 E0Ae(9U;qFB literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-atrix-4g.0.jpg b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-atrix-4g.0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2446159e937d05495e0888f84945457e51ab11a0 GIT binary patch literal 23174 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 D3#U&K literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-atrix-4g.1.jpg b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-atrix-4g.1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..867f207459f390459062fe382957c905a7c4fee1 GIT binary patch literal 16530 zcmb7rbyOV9*XEER84@f6cY=iA4ugl_K?aAQ;l&x;1`m?p3>GBFKyY`rKyU~?xH}B) z4$JTC?m4@E?0(-{UFX*6uIjqCtLv0J_o>I}$7R6lPcrf{05miJ0PX1lJk9|m0l;U^ z{u7@9`cr(4@%%YD`tw&H&uP`yOao)Vf#=*nE#C%Qk8V{dDfBqpKfl~S)9<-$0NX-8rRvp**te7 z_k>P0dG5GY%PcA>gzpqr+iu$bgjCF3qS{ue%YZtI`8(gG+8i5Cy{W9W+H~J-{QfM* z&J|l+J4Dg?un>vkloxL~4KZM;9 z?SQjRIQ)OQS-n*!?)Z?Id5YFW6Zzxy@(>0-n@BbjKbqI_Rx}h85vDW`NvhVrE2(RQ z_GWMG5NlXRQ?tz3w!A`>@2}}|qxYVxznG?f1nBG_BiORXCZzS02&F|Ll3(gl^^q)Z z*5gG>P)cA3j^d%=y~g`jf;hB@&oy20Gjkd7Tm(^*EssYw;@3)sC)PP*8+Jdgt)}nz zLbFRA&?>J+XFX6A)iO;JIX|K<{0PXG7>K&j^)+Sgn~j>KcAKKQ&8_!Z)U|pJf(P&r$1a0P(8@qWW3= zFHj!X7$rW^#vkFyi?!yYjQSm`@3bl}9INb9=}V{i@~}9>CFot9Jx_zqA6x~+{wr6? zN*U_N8m^cqF|%!hq|XJVcygGS49=XgA71vXVU}fDMVgmaeH36XidY+=NN@X0Ra`Y? zu#q$IyFx2BqZ{($*T$1>`%=?uO(RMx1Rpw!waZ&h2H*+En!Q(I^HKbvWqH5p;K-m5L>Iohsse-V?ra-ismV<*(FM|lVE3I-DHN$4 zDf6s-pU52F&q_Og({g_KdhAkBLL?H%2yA=4Fv%a5#y}HPUsKf>8Sh;({Aa3;4I~Ce z1rQ_o#BRNde^3OzwY6t53 z_MnEy%uYSS3hiMLo?zu|^pa4;3&ajlTv<0mNZta<_jyeY`D~rZNXgm8Ya;9=7MnTI z&fEz6OV=|qCJAEZzYW*v?ji98DFvU&uD)ol#vf<68V>q|bCEpi()b&K9MO=%s;sU> zd=PuTPWKOPg6DUqTQ*tI%bIlHL3=}qU2H-^Q<5nV-AQUy1g;=(ey*ABU!jSF&JpnO zs;bV~#aBo|FzLC4K;mw^aZ_{!r`iG)E%7y!#cQD%7<)ubDSCks&d3*jA~zJ@$Z5?z z$WJiOTG9MkGycl~^8XkB!Lzn?0oy?PU2?gI;ON9K>GP|3gnGcp2e4N~oF7_$9~kC5qN}bj zY2?bsr?jiqSk_ppyE6|6qY=n=bHl~yVG_1+V`=$S@7Vb;AuyY?H}Z)M*Gt;$PfoWG zMxZyD(KJnm;unxA*Cou(wiSbqeqqye`sNPDek35qFk~cHiDcT)!VnMXjk&He+<< z=mqF1MRff$xxA3Q!AC&%{+*lVR5dPi5Vs@6Hh0LH9(ft=W#Lu5fGyA2qso%1k1C8- zcEA~oqPJ+HGq|Q_$Mp5juHG!F+(uz4`;EHw7Ni+?;s+@k#4U0cR`mQlU?XKE>G|-i zwAp9BC5v|+oL|>C{w}{XqzeK;LkFw<5ujgx1aMso())22a^Tk=7P{y6 zzAr-2)lDg{WlsH0+g#W{nk|$Ncrh!&@R|(=aKsv|)Ib z>dr*+_RW`lCLc#qKKxPDy5094)P|aIjsf=W6SF-{g3oHI9oOzEPC7w%;o(7AqnfgL zOb9WueF%WYy_TQiK0Gn4U^nv5nyB&8l08mR+}a>Z`aLpq(#xNyUAs$+N)7Lb|KuHA zM*<1Y74wSQvn*me;bWW=7*-})9%*}Q=117kG zRUFYi9h%j;Cl~n(a?K7GOH1BtVTIXU%R)Hz-C`l{y`wf67EKZ175|K18W?!yRexri z5P)W{^9y~F`y1sb7MO7kMuRlJ*!x^q|657Hr*-&_E^7mAulR?v#zfT+$z9YnydR~z zcgMN+E0aDyhrm;9nmqJiVi>oy#DVH7a@Ct`Atp5G``6{fs@1T0l-Cqtp|t6(m?)RT zJ33H4;hV_5Q>fcHv)$?=z;cM{!fCvGu4pSS~k&Lk_#N^c>9GJOUy!y=?e!MrW1QqsB^{VtDtD4!1}c#b~~GGRGI1n7X1> za21EWJ2~->3OVp?EmR$ERJ-nES!10wAJz74l>2b$`HtA>re%RlR9-9iyV$UvZLPV% zRf&_Wt3QTEj)~Rh;qv(n8lQ0U+&@hwUT%8wBO)FF z!EC%vmhw~%v;yQQen(h#Jr8P)39m2;3v93u@A~OWyoaE{T9vF1>x6T)AeA1az(Cn- zGe;^&QoqYYky--2MHY?t|j`_-stZ_OoEUQj1a&7uBfrt=WYovqp~cC_$q8^ zQ&Ao`8WsByvK*i_PLv{SZ`5^JJ=vTD7X5M3AvaGMOwWeybDFM!uT{H02ptvrIG9rp zlN*$Et((ipjy=@D_?7EyLW*VoS&sf13;tchR=bE}UJ~iF&;6TkArx#iHpI1m_NVMeH{SG6hkS z>}39tIz*irVKqWTbUQc9 zIuU8?5^GWr`wzFTB$}C4+FNz+SooHQcf`+%<&nC#fiwXa$0)hu1!#hn?H@O3m5kE>~+$g@z^Utpg7o-nHYQbu7! z@K-D*<**Ly#t`)}^~&VeKuJ2g7vha)R;*X;8;qC;b8|hbVC$dalB1ppdn>)~_cdM7 z{Uh*5d)7;EwS$GU|H8aC#;AE>zh3H%?h88QRlC7fwVl;TOU#NEmdGg+Wf$vtEe7b? ztz@pPY{km!=13NU5VRtFbmEQWT|pCFf^1~Fc)R4cf);#i30#vf9(=L5f(K8Yl=e&O z1;zIAfPkfspou8Dy;mqpp|2iO+`O)41P=QTb&$$D<+&!ht#@Z7=)8+~)?3x#xE9=8w3~#RQt5=H=A<5~SdBAg1Yk zwC$g{nX(T8iSgrepVgL?VbO`{_X@g^;<*>l5hv5?Nlilzb}@RV=<#b3J);%E^sBGm zlRwUy94N8nCg4+X^-C$Cn`{PhNJ*hfefVz*i5`|t)rR$DUSj<1XQLeCheJpa`N>Oj z@zjY$>-C5&!53Q)>Jzz7DZ;vYYqg*xf%BRnPPp0c1JHq|mPq>f zpV@oSJj-2+d{csIWgFFsY%zz^Xr5)R$VUK6aQKL--tI1?nps&X4)4*pp9jg@ax8uj9`pqUC!IE&U1(iS)1csMI8ea1$Q^UGoKIgbAVNiLa90 zThUPrBXT7uzIY@OE)mQZ@}JPv;P-P)`G!wqRfo(|9RbOY1v~u!=ZwbZn)Z>tqYvZ` z-PYmei9rUAK2a;rk}h3rU^m&q>Cqayp)JK%@!h&sIY{kGs|7*ioUK&HYbtDdZwO=G zXU8i+5Bysb)h*HZJGdP?ukX(MwXExpeaB880h^WFf-z1M)OJnHkR4BfPqbuHZhObX zO+G={FP#Hdv-lIKF_OYECziNYhthDWqT`Ehd+Omzy7E*4GVqnh?b9qA*E{$4}V(D%Alha zn6$k|bvvuc;t>FTb zefD3#A^*o}{|P(6fYt1uSuGCge=KBYbKX}QFAt0gljs#^$5i)8vq|qX$OJpu(#&)aVQW}t*Fws$@P#RmEs$VJ0OlHp6+f#YrR&L&QjDeKv^kjoIn`#TLy(w$4Ke!0^yxe6fRof-$Y~RT2SQD zVxi;9iT&osx<%lXFJZyZX(a9QX$^5B*)a`_*Ts@@@^za;9D_ zi}6i;T-*FdR5?14*we7EX0x1}RwGKujOuUxr9rK`G<_x&aMZi?SZCxKv&-s|>AkR2 z->yp<538y=w<;x1Xw2~UpBn@4yB_qo6T>p}t58Q|GtStoZ*Jyi(_j@LfSIH7Hzn-1 z4Pt=U4@U-C7tKl*xKw<2Yoc2ZH`Qeowt6zYN_AF8@KNfWP)E$lhs3=sS!ke=f?h$5 znNMS3F0=;v;ULT8<-7N7S0XU_R5sXlsQz?~YfsTy^12yxb9NK4KbD0KbdB77Br+`0J-jOX41`P*R{Z$y&lyj13xVux&R0Au(U%su9l7-o zt<9}`Q!~H&b=|&(#9^InW0Ng}dLIR6w`t5)FYhz?>*wC01w#Hc^O|E?8L*7%Rttg2 z&obh8@e>ygJItSov?`EJV-kGE^|G=Mb=EJ9{6QP-*^&N?-fXsFdp2s;2x621pQ7rL zZJgCsEC1i=QnrowzoNJ_^A^3u;oqxgefv7S7z`ff2R49=ooAJPI?FOMAd|q>R~04- zkAO*Fq=+oCuJI>h)r>jsaV@taPy4zF+7TcCf*=scKJ(V_`NeuskgsHr%aUzy2YLP% zuL-=_BN0<^s?u#eN566$GXDrzwAv3i?;_2s9{OeCUXZg>(?jL1kW=!9+^3jkZCYO&1peAL$27||-csMbaf?WRfD z3Sw=+{@~_YlAg0nmoJzj>prv9V6PXqETl-1uUQH9wRgj4JPMqpr*~HOL8=OJJhG<# z)qA3DCV=6;sqvq?N=kUF;8C)}wL+a*Rg(fcPtCE!9KWqE`Q@cjmKj|6y*4}rx7pgQiF9G`3*+UVNy5J& zE^ZMyJzb(on#LqYhk|I2fEWXjtmJ5CWMplB<3d6~r)Qj^+)9x8WsR~ZCn>4h*H;O; zdc%6uaD#DFX&pK}f4KC)D*wH(;*>IlTStU+#(jSW)4)vDr`zDy=Vl9Q=}nbwV|S(? zh&p|?MO*ZUR>uV8g|V*BWM3JocWIIBObPY~uuGvg**tguH%O$nV~4zv_C^l|AMQTr zclfZ?pj4a3_vdVURL!!hf7U9auSoxFjqD0XZthB5>)(LC5e`}6A&FwSK}qxn zO%&?mgr4LIzvaV=p5tTi!oTNa`of$AbF%I-><*G%xz%*ZOJ^64sz3-eDG0b~;yRZ% zMS|9&WerXW!RIyCg4~K{j{wiJD<5s|zEUwN5l2dkvT=j2>C{=|PiwsF+T8`&60ELE z%&Ix^WHgbAa^sS|bM$5QEz)z5T3b>BT|L$x$5?Wtr0!4$89BgyTGhB~D)PgCZR;F_ zYKWjDrsHpYY{tDuSMsM4Y1kO&r8%5TR;aZ+HNp=w2^7)}Nau4*W<%KWMm`}oe`x6@ zHJiZ^T6rx(yRE-Te?GhoaI>0lIrp|1=b2Y@=-y^F53K>PB;}WBLcYWbJW(xDOBi zo_Kky!$)V-@qjl&B8Q78Y}p^y#{yn!aH#(y$ZJL{D`8<;N+t7g>k;5;*^+lt`Q%A> zT`gVtbLCi%l|I2gLh#^K`EKqD=rvRDC+1h4_Axd}=srlnog0sLjeD!@Uy(gTix+!V z`L}baG+43A;>?>n=@&2zaIm`H%c}MdOR3{r^|yqOYTkFy1D@D}~BcrBs-e|JyuRPOm$vsSomZf!+Re7OXD_BCM4`O08|`uO6`rRO81MK7tA}4~K_hEDVsR`KlnJ$CnbsRwfue7Sb zzyz+pkc}fLuDf5mCF7J*UUI+*s>z zn?E}u7eXaBi)+wJU&@ZL%iO|Z5v)jJWblb(zLq~xh>_x%1ZmrncX6^FPIByuWgSYd z*qJ2L)TLsi(-a!w3!wiR(J+TdDS9(VZ8jpry>dX{I4(G7Y9C)hxiSz0JDt%y<}?kT zokG;6o#{F?knF=*bmq1ACPJV-U*^oD6=-r0xrN{q0xp?(tRTQk#*86UiENvwX2IcE zA}Msq9{MiUV>JXzqh*U;4x;7n2fF!~Qj>?bM}&E=uTA!V%C4!w_HR3tCk3P9SJ0uy zEI&I&x!>Akz+-bKYztdP73nR#$V{AbaGlA>R|0#LmDgRgG}p~KpxOkx&gVO#LPb8a z>m}w3uDH&!ZjKpz*agk~P$~ua2p510u-B7GGL$F`o2A`WR>3An*daFc!wjt@I&m~l zI$xNBo*rt@*|j*~&?KPGA}<7ngV!vt{X4?5j49on#vBLEAF=C>%{tW zk=U<|af$X{V`7&`Z);Yj=GWHBe#p+y9yQ|Js;FbxP`s+vm&xZ}#IQ=hPS^A(Ev5I6 zR$RtiXxGNU9)~4%gU>Ac%jfMw5647=s(KI?3Yr@8Sp}}rQmVM6FZJQM<4t@z-6_k& zxcmDQndA)YvIP;~2YI!BPO57_J3@97A3-cuR&T#O;+YxI?hD*-^VNnkpSyt-(@xOvTJW6S-KQCIA zpZk43PXNr6<&q8Lq)SSD<{+>W57(=q3agw&K@F@C>zB&Yrf)hSo+rL|y`E@(BDKR| ztE-Foi1Vy7De;^hbH2K|gi)>xJbZFLxo&QaJ8+mJUZ5$y6C+03GS6 zAa7X1o5*r@HWrP=tv2x&-2=NDFeHQ42P~cWOj%~MgUv;WPJqXC7ArbhJ)#~kJwIha zzD6H=kOFUIA#Co;hN4i`?5_A4O3Fq&zx;obY-5mHc$jxnR$rKpvqG--RSAFeNuj+~~-Q2bZn63uAikrN0@*v4s3MyCh&gJgN#u&nG6 zK;RZi_VN+HTZwkdYTi4fXA3^< z&yBQeyomMz2-@ZjpaXsUqkm%DeWU6zZR};f@-VQk@29E#^R%!O;D}#;aCnwhT;s`~ zVB{LWWWm`>?~>ZE=_}V0tnYfF3Nqb&PTSt%dm=6wN^pM1OXw>39mWI@}ebQFREH zPiaorDUz19aj8%lIjJ~>FtrJS0q$|@gbWwqC=31bRD8hpcd^9po3u_QE}iw&F-X4; zT1%l5-W-$spM>2?ruYZU*eLa&A9BkmHe~_;;G_8x$BXsVwBP!UMq2WDEVT7jJrW9% z@|q-IFS-a|fTy1m&uR-Ja6ZTU7{5MTaX8pA@Js zG&_fyHSu+GxQPeTPO@hZc4D5lW8O;O&yh)k<0#JF19A+LXp4>V(zf6 zh?mBqr8I=HwoOpHGF_NfhR@!vuz!{NZT%uDuyG%s#?M#&70X`A#}}DZ{hM$duf8Gg zHRcKYslZ z;Jys8ihS9jOsco9?dXU&U`Y79v+PF{u*xYI3fOxVQ*i6>Id$3QMp=Fl#9~@hggrNa zjlLpLH#Ce)#4r+V82hj`CLmy+Ag^+fH4;Con_sbV{E4UD0krcS8ih;EmwOrccNh^b z=w#lZQ(~ceW$U?bP+k)``>Xg@olZ$4BdMj!7;aVw_4gQQ--1c?VQr(YMcGZt%c!vY zWmBJn7r+lRet?q&=q&`wf=Ewzt3__4ycE*&w&QsFkdN)?Hr#EXDZ)X&&}QPmaU(D7 z8t2A^ZX=+Dm^!qx#+=2#KKs!5a&E}UL%;B^QdxcIJk%&E8L7Q};I6-8FW}iGGe1#k zDK4}8zDaw>lSKcnZ3mKiA|!du;95|h?l>MX=R#hBX?vC60eEiw?_pbr7~_(4YnLglj1IQ&m;evXAJ@40PM zeA6?oxXOx4j3k{^!8FA8yu3kes<9fhXq|$N#y89_C!=)p5@%aUK9#S z@iP+fA#@ZLm%pJ(Yn|_H%Xnf?n4W{8my7WC5-Uk|&LjKQIKmdJe{IrvCoOR;A^YNW zi`B?wEru8-{eZuvZRwO9k3TIhw4zX695w+<9ip~6WF8i+VdhPLC6oxjg&n!ISG<74JvvA0@1k;9nzt3{UK57Sm&m}r-XKb(X- z74e&%DCcH&+%xw}c7=jf!54~Bcy{j}kyPBMd_&tu07TU~U(h=9g;vz}X&~cfL%z#* z+a|d*IU8HsMzFMG3ZFYS2Aoqt7QVdVc4n6wu4-spH>S%r0tR;xPMLjn)O|mEUP(DYc$3JGi z%_)Q$Xp1)5?P>5jh3d#i^!WD#`~Z{Bq=e1Oj+aBRMYE{$i{m+*nXskh!kAJibT7|A zKy+N56D|IWQdalhT60M|Wr9n#_NQ}Q>h|WQm$?;`hFyta&XP1a4FZjcxfGr^0htdY ziTP#PO)CC(f8jBmYi;#wx2$zxH_z@n*goI!74LTsyShBf1zZEKGoPRnhvOlM>-Pb- z6mck$jQIN%95^Q=hR(jfr&^FJB^dwnysnAS*FQ$)j$70mT9JxUj{u{@;4(R(oGxIhnHuf(N|Xws6Z?jD3fojyZe7(z=_=^M}OD%ieOX3LTKrK}t!3sBaE$p`mrgQL6QZYOcXrW1Q2fnn+|MLgu1|Pt z)Nl#Pcg5e=(ZpgXm|c=z>@3ouLxwwFV%5jU=i)!#Y5EKe3`Ql-aS7RgbabIsSE?RX zAp_9d9JXZ35WJO0^f$*y{K(dD;NCCGdep%?@a$?(X>Pz0!{?x1)1mv*uh*7E9Je#I z-I9^6`eX$wduJo^@*+OSL`Jz4E(=aD+s+7DI>XZ5>FkTcnJpEA(jWX`dhyaji%fw~ z1;5bd&fo~wz9V4@cDOS1q=dgubj?77uAlJA-TlZom0&T?E1mS`p_tyon<=Zp+>u>f zvd>UG9V@acll=JKf1Ls70blzu%RzpIvgQW1Rx69m6WYlY1L_QLZM~dLw34)7#w5>m zli^nkQxpn?t9+};8wP*?%T+efxlj)0rJ?JWV)V-<8Q5qhuvcjA&Zc2GN4?z%^#XS0 z*KC}(6=DbSNJZbbN}12|p$wU?ZJsS}Q@+MMNfxCGb{D(?vF zpx=5$RtcWxV`x~98x+=eZfIM&Wv60*zAd{7^g-JApH=8vyy1RHfthIu0LV?J$8L?a zb-4zqanc0IL&mrp3*zXHxz+|2X$4NFj5bZXqVD2i7dH7WjAI556X#lFzs2J^h<)#} zNCihId<`s>7}9_lGaM_uMP0vqK&h`Nif$Z#!&)miQ59CtvwXQ=H>%H0k1J31{qccPE*N39VE~9$EyjHEJdj` zb=#xzpWC&@{`}!mK3=xNff48w=btE8qHlzJCHYt9*{G5-QiJ?EO%4p zhBGpoFvF`#V(aRN8;-Ar7VUj}KVrgr${qBojUB5+7Kkt|iEIw|@EZ>7mP5zMp!&_QWq2i+pU=ctOvv9* zkQum0$tY;G-cG-40j2|z_MNEjPgS!Dq?l~yjwUd2{bg;p1F>_y;2Oa$&oI#Q$%w93 z-)SWGASKO1eBj!MSfdJ|t3Ty+6v1-#+w(9p)8M$YX8C*lgnde|s#dC&1W zX(J;Yu{+59K$(a02&=RB`{lJ{@ULNnQK~PIISdP`sMh&cm2>L`uF=(AXn1kJ)xeJ3 ze*RWUEB9pVBNx)b5tWA+)_7N^rXoci!=Pa!*5IIHCb+=1rs_65mJs1wDZH8X%lX6h zbdtIIjR}k6fEooT`+?~qcrG1&9D@>$xIOe&lF}JJW3X-c7Zh^hj!_>2@(G99ncc#^ z4O@{nijZii{P4<)uv=vm5sF>Nk$sy2lfDVb`^MStFHc$SEBHPI!$e|{CSP~J62;jB z)>dT8tsWzXKMf+do$nkuzur2pzignVC(;?0n)r7uy-d^eO3w~n>mz94jW{F-BB6gG zDX=9CESv!kG{5qQ9%;RcA^&;o=)|K(Fv(K#_YttKzhxA;U&) z^+{G)mJfL?SHRQwGTb;{DaA!vzV)dn#7v3xEM0DsD5JhaqV1jMnSRAW>PtW(8q%UL z`d0dg2znV+}OcZB|ZNvwaP6UBmm zl61GzK{d9v>-IA$6|!di2#_an{lha(3TA03Okdb8n8m%l*`Ae6g390b>T5)|vSg3; z0%G56iU3o=Z*ceO&ylH(PU9H#q}DmncYXlh4GoBNwzY}F>GlV_k0L-B!lb=;dqUmS zKVv+}(~HjQIA1GEG_qC!?f~&u6BjaH@+Ju4>2Ysa2?;^#z4Ojj5`wp4`Cr4ljP(ye z>;y=Glo0we?upvhz5~|bx?=qbJcUI~VECAY>=lF|*Noal>`idJ=cRTV@Du-ov&j#?u6#zTpF z3)m7rGtIAHlCrFAK4gr%wDWO{$oHz8w~vdsdH25evcU9bb#o7Cz6-}ew|C#PXLQBA zLSaqX(1NO6Q9)iAT*021sl2#2p>)FquycS%%y&X-8 z@J$-ZUi7k-MMlhCVw!>AN5P{;{w& z%4Z3}Li*b#V;}Lgfy^yChu++u$o6k2-f(laXjf!1CgNM|EjtKC79DCwt#C~`a2FKkf!>XxVR#uO!4=|!jyYyfQH;^A@2ujIgWskm_KM}8782&Q{2pAImP0W5U!nF<1Ii_g19` zlUDmR@z^DKNq}pe$=V z`usO7DbCKUl09#A)5uwDebQYCvV+7LcO^fKct($z((O%Xvng#BeY3s)tRA_g&L19x zUEM|V2rwTf>vwg4V#N0XfAdEWRWj3-Vxy#JzCX~JgtI#7|0Gl*kNS^T`B@?pZ6ifYq@ z@|7#9NcwxiOaqp#+=P3p;@Zhh#;l^y5he0QK{z_z#e4Cz%a%&xJs7VY#UPE1#5@P{ z22-rc-#GtP@BSLmBCmJ)?!*PC4PHJ+EBSTyU#(+*%yY3BX@!EY*W7ph^3%C$A542(28K;T% zMp`%*`}D79YCQsW5!#;)f6}KfxCRFL(FBOJ_ZoSABjTt$yQyr?t+CwBc~72eWWS!GRG=lH>wiD9wK4q>nbEvxFXp@&Tyc;%@|QpK1io zI%Ao}lP`ZUmx<(`Fn-ZIT6twjAIH^PTctdusDK-GIAd$(T5&1jT$|+)P^uNo4Q@Z7 z#-s5pJUxVL(AcdC$_O1+Hc*IR&lCXlZeBy5|&NSqZVV$;^%Nx_b2Z<)Trb z{3o`x#$`n7AU0`Hk#(8AcmvYm;+BcSTO$h*1fvFZx&b%RV;k}V<-D!-d^!>MN+PrA zk_xUFc93J7Xo}^iQ~4KHJ?hb**s>qBbOv1TInT@{%3~!J(f)F3cG;D(8^U`kQU855 z2OM-ej9wK8X%pVjSNKPd!<$dZh#mILEgPzR6@!Rp3T|$q5)xUjX07&}Ls$wnf2E$m zb9qR`Y2C!7dr~PU|G3BPWlnlpzf9{;@@7xC@2xUgd!Fr%-EJ)Yp^*3u7_Add2w~y- zip7$jWpS?k`3dUx@$dy#oS>mwR7kE9FL_sqcBL0;=;e@;l)6Y~P}5$#5l3?^VkbiR z{B#UMo$$=-&EBO;(zRhxS)i|hdo(Bwq_vn>W9$AwMfPNodEV=PP#u807j&MXQyfIFM%Ff0R}%5ntO7gn|md)T||0 zUbOCS9a;_fv?=+p=*5<=Z6||8D4L0ZB9TWM==@x$DR<_W>5lTD(tX){rrg3jL|4bG zRSJX8q)b9`(3bmh@71Er%r;Nj4cmcb3$^9SLwwE7z;i6OUD49CAJx?rSbQ5(wA7^Ws0q};6j4{O;TcJReXGJUiNDFq1E$KuCswjuQEYX$@j-)mDJmz| zpGEbCwKe2Eh)ew50I7%HK&lQJV=eUEedJwB9B3v~JDDiskf#Eq*UN>8CAXvw11buF z6?zAgLEw#Yq3s1~nk0RHN*E4qqj7YXP9X7uyyE*^-_sVstc;TxR)o^MJcz5o9UY@`dT(i z2`yECbk{Gv!!UR+TYQ|G$N&53+30qF=mXiAxaog{8J(n!v76C|yGh|4xn*D5oG=YM zXI$hMuU{S{Dz;m6$MO(&q2^fo45!24w|I6G#~+MUY;M{gZ|1A_R^S=upMAgQ#`fu{ zO09bR6nhuIk3%J{ddp#Q7PE0>5V9@h-1QzcZ?RK}Yy7WHS$osbVWMc(4pP?D8|`EC zLjt23?K~M>mS`LBK+7`Et``J)OQj^b>40r{|MMaBQ<66B9kwn-;q#QhY)@EX{@=&C Izdp|V4?Anm`v3p{ literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-atrix-4g.2.jpg b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-atrix-4g.2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..27d78338c4dff26cb845c749be698678e20e7513 GIT binary patch literal 23788 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 z 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 Wh*WFF(=E}Rj8!i9->x0P5%W*cY@kd4 literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-bravo-with-motoblur.0.jpg b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-bravo-with-motoblur.0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e452ae7e7cefc3ae4f410461b766c8a8ba946a9f GIT binary patch literal 28478 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

    % zA%Y(vko7|$9DrDLWi}R^1{Ib}4ZZWbr#pF#pB9bfPxbr4W?!CL8N+_F8i;4x+_G@@F}mirgHu`ruaUOS1tuTzvWary{>^dk^TCmz7|^yi zBTN&7G^EGG;Xv=nl%{3JPg{*IxG%-yn3-YPVb4VOcpAi`-(Qai1u=S^zdfpIZ*-5{WCdbf zO#+!dhREwLh0U~|Ig%?8QpI8hO`_{N^NmV|Ph;v9SVmiX4 zUeLgcwFBK>yYLzGXZIs$!Os*{iFtXok_&8OkTvUjtWc>7+h~M)NR67%H^SXbF5%if z;(U1J_4P`FN>g`p?+riM&gVF$hzLB^P9Xi~&aRz~`pi?t)~n3rDelEXui@mTH&oo* zOT0r(O>0CTvKlOvu6~sbrffs^%j1vbtPSP(N7u;$U7Qetx?)6*iwxnj0SPys7hlz! z1tI;c<jW@7(idZ__Ix?UFP|QE}!f+enpuRu%T76Rg#ZZ&5%~w0U zE=^e%Yo_Sv(|B2$ete-g*y%JIc&^NASP@AgL}>iU27i;3*TY*5`x{i|kF=i(69R~f z6|0>dxaQZ>a?7SRViEAQQMCHG3LGxZ#3N&_!1yWwL5Xo@z{ao3blSd=tAk_DiDhf? zGI@}r3_ceT*6Y8-#AMfYJ; z8_b2zV1utKxPmhdzEmD)s+Jk$km-!}j1G;e%v6*iuOVJBx`le#W?71tK0PbL&L z^p=ws^l_@%2dSJT`QkHkX!Y^$sRz!Lyp6-vRU4X&vFEZr+I57?!LJQ?QVnIGvH*5O zo{Wg-1x+WNu6B||Vq(pUH+ogmy(_;{?ki^fz+?fJd&(9~k!A!Cc?RtW1%MhDa&&jN!(Brm6Qk2SWFECA4s|%6)~FKxJ>xlx+XumD?1|0e0I@F4l?8K z4E)9fVsw?z_AGRqA^O-+vtYrw{w1JDgJhS;(qX2@U z?^Qg-;{ESFe99d&2{PC`^|!{a-ro*8W5I#*WK$J!Fixk0X!0>l`T^Eh%=6fDXis>g5_oQEVfFnJ9G;^*n!rp zPNQZWmM&;(;TO7zWaJUBE)MoUlFM%l?je>OoxA-`J5qZdo@Nmv?Wk(QbU~;_9J#C( zOhbXG7$+QI=YFwlWD#uOYA$g1$*&r{%6c#EOQ(r?;aVl78VsG-Z>6!A7>-5L3vExkdKS07s zFsx3QE)cD;10zwIv`qKMtqp_n`a$OrSsTu&R0;$TtfI-n6uX0olr0)>(%BXa>|QqZ z2lO2_V$*TGR^u(L<@<8My2>dr_{lnqxcLnivlkE?;>m4&Ij7#!mX^QH5B?=! z^p4iGSN~c8Np&O4-?MGQ%E@vM$e|Nyn-9uxiC5>(*vxW`CLDZy!Ccg|XXe>fGoM$c zd(Mv>a>7w@Et~?%g~~9U2g?q;_=Zj%X|53)Kl9(j&f(aOsTITCDmuL8aC17zPNXO0 zd5f&C1JZQjZvg~jcO*~5p{6^HtuRNCr*{R&9jro2bA@{*(jI-T7lw}V!wB^DTvAgq znaKbyxzx7*%(>pVokPc6|I?0p_Hv%(X@`cz^>ibsp|$lyv}0h4J^C+Ii`nFdwd2chwAr1Y;{)N62$d&g zcNBZczf%+cAME$vmjTyDw2^4>xSX4%H?wysyGCocwl1D|EwOlQxs!)O{nBA4C~32- z^6Dn{{=WH7_m6h9*XVoSG}E?8P(HV`x^tt>2of~j3%VXV@L+8mJ`#Ok@e~lEKU?_u z!m5RtpAtzN4?)Ev_z~b|bkVkRoLmlQo_=+Ewp9~zN$0c)1}k6Ulo^DQFD|zD)a-&o zVDM30+q;r&e(J$O+Bf(_Kgk=hul)R_xO=zXWjC@(92kRbl<)iM|1X&k7oHs*ngVHy~h>E+MMKj7Z~&mgowLNUK7O zQE5GGkJFNcQqkmjS&SOAhwy86I?0phka)r9=sN+)x@#Z7wtRK?Ixh*H$VXnhEmowt z47Mx{)9UGgOS-z{yn90POgtcB}iaeKt2+!1b25DGvH{yMSB!o-d)PpB`TS*6z!!EyTzPTsy~sgAyT$iLtAe z)x|7r&kMaRwYrhOPv;f#5T1SDtkzRNujJTI=Ce(hn8OA!yOSla#7PH+2opO>8Vt8m0`w=v!7! z2e-OvQQ5bfn|?biQM%7x4Ii-!f}YGmZZ!E6fr_-7KuwW0*2o0}WBYk(k`K1ry#+=&(sCs_=!^*m@BEM$8hhkMmdt$`pK)8jpcflUsHKU-#V{`KO>Z678!+z z9Ixz^Q@%Pa;!x*V+8-Eow!rgo({lE;h|S1mmQO%$Cj9k$bA&#%Mm_iTs2ZuSe_{Vr5{u8uWl&5V`c+M+Gi4X)$iVaJJ}6Dp@d9Yu1h@WZUiZu8cS4l6oey^ zeZzyX7~VfS&YIsL){C%yb~~)q_M5o{p>fZmU+Q+H=CB}N*^WxBpq~^jW%3Ff(VE0x zeVmj02if}`gf%FNYnf3T6|0xoHkI+^sG|?Jq9W?aTSKF6`UdEfgSB03O zgn6OyTuH5I$cFOSwa<|_^JTd3f_xaK7RDDI;~}Z55kn7uzgRHGCuXVH<26gD@WnkX zuqbhw=41_8z{<2`=RsB}n2`lsCG1Y35;@7UPJjM^aK*jOUWkOUj6C;X5Z87YD)rsq zD2j2W<;8?eRbQfarmc-hw=XPDLDx+H*uNYs7I`4{;HP|Jqi+i~n++y_y2)&wbzoGH zdp7}XhU#@QDZ|KhyrkvVo9F=8o2Nb8e@X!WU3L7DTgmz_p-Gee;twfziT;XDuogc< z2RA=X-^57Yz0S$Zw?lwQGAMShU%RSh9l^VWyWMC00YrP5C^1A8wLh^=0o6q#uqksp z^=SI5!uHjb=9Cj~Y|VM5IIyNUz@YbJ*h)cF$`eM`xzV0P58Jypv;u08_gvKPM&3%H zoIWvF=+xIiE9QsfsPQE;B%ASq+v(=b{!HHVN?fZ_BhnlEJ|2smH7!&~^cjXZ0m$x@ zrOa8H`tT*&L_y}sZJ5vANQ_e zgQ-mXPz#hI0_mgvj7c0zb*4;;leF*d%B;s43%Lk`#CiYNyGk;}Q_6NpEi$I1`lq&~ z6L_d4(0a=ZJZ(bs3`gzfCWlgVX|HlOMV~;$NQ--I>R-xZtz!Y5efidySYI4V03HFh zJhG?l32W-3tqd%~9`xUpdlqlnkG$oB-cq~_C?Pi?js_q@RdB|wu1eGL?>Ch+{JB4@ zMCg?qR*sBRT^U>eG5dnB|Gh7uT)FYTe}6Um@Cz*++Nh3aqA2rUw}}}gTUPPl(dSvW z6*hq@?n+!{b&dC`g`U*klM8u(KU8&IF1RAuJ#$&*@d)s_By0h60PwRxnzSXE!*`vx ze;pF{SB~tEY!P~dZ&;vf5V>h!9-)Q=-SwZ&3Qvjjz@XmSZ|Kc8Pw!G%f4udaZxH?M zsgMk+s(W}$h!RKEzipuR*&U8Dgt4l62&_T?ms(80oF9yM7D^3i4h$=;F$7z_50{vj5+jW*aZw?p$Jb#p^xiAUlT70qeb z{ykfJMm9lQQ>rru3^iF$N`(LHnH^5TLD!#>&={i%_7Ed=!TOLW-jlSLzq9{ zM_=Gps!0^}emQOlcn}B%P-Ix0VX@2tO?=DvXd8UJj@^@84c#YqT68GRaXN1~WqlZ7 zZ-^+W=@ADuze28+7FDfjxJ2<3u+YsfYBQ#ows@XIjm$r}QjBvoL)3GrFOILriA0?| za852?D3vxSQt)2c9!87EDMZ4I%&oF|SQ2l(+uWp1r^eukNr+26$e~?hk)qqLkYNb^ zsR^kp6zRsRe%-GmxS%JY@P{N^7g zwb<6z@QWXIsg&p>LuU1+6Gx9v1f8H@jVeEs<4x$?DkA<@UTbxbHcPr?M z1RA=|#pl$CtGp#@0%qsPQhxrqsdCuGNrW_r!zFW1}J=+>B_8%76j8R;RKoh@M?aO{E6U z@w%G7Ma}Yo;qou~h5*|2$#%;pHtcnJXOwP!og15Xts4@PMU~gty6h6a{J&!cg&|mk zQ$GLs40xcmJJ2>ss5pQ!y7n&_=OH=lSs@}v;O$zqI(aa^LuI}2>hh5~=T^~{jDgnO zC&ap+?{xuVMf}miCEcu8s!h^<)W8t=nwHdPUlDIrlWMKq*HmHTkG)LSzG3K#PqZ>B zxRfRDL)Fz~HZ8L*pI*-F?HPP=6LW$@58^%n7AOx~;^ts0H*MEX79$TTNm)3Q7OHvb zM_1~On%s$gw~PUE8%ng|&+gQJcL@3v8X{vp8R( zXbiQduy7>YgVjvup3cl1y{aphMWL#4dgFYPL!p zHOv?$XPCWG&LmQeX9+-DYqe?6!BAkk>tP3|nHzJC8i z)O3;hUQ)z>n3J8ne2Eiv3R%2(GWjcf6sO@a!|J|dS(6an(*|U!MLh?XHoHI273;k< zjE(7uR>!-etkPMiyk7cZq!uDaK_?!~6x%;6101;85Q-3sD$vQ#CkIPHE~s|i&3Sli zb9-fftY$utxU(l@XCK_aT@7dlKRX;4;}|T`9`jU0Ywv4;GIm~{-KZO<(zL(&btyyA z-W_mOla$Zeg-{lu*$L|vYn_D8_3}Iqu=-R{y6+~~B zyH^srYbMtE(HNepZ<`DcX7NY2 z1w55A0FsMK5bR5xoi-W=m*RRsEWL!%$BlJxw> z&g3IK{f1glyt}nf`sV35o1yA8`JORt^Qn7UPoACJLy6Mmxw7w)H&Vjfr&KYWie=?AooL?xb8uvi?tV3&XHfsD$K0mA}J302?@lms*6Kj+wpv zp^RbSAHaON?TPMgXQ^HBf7cGlHYgR>aFxoYEeN{ekY6)Ua0>hzD)tz6lVX2V`bojj zcY1$icZr=1)j5Xs70e_ow2yOZclAE{?>AK1=YjBOk+V)3EM-7;TJzNPpZhQ8=<{!a zeL)hRxsdhe3z+3T`i_3EcX z`C<)Iq2#{o%rXo>7LlDIsk$wpbx!J##m{LeLzc!?-CP{-vw-?!P{9s{18_SP*lyg5 zTK$VL6>Z6@AAfDYtLF$H6m7PMM-R0 zYSTe$gra58$C13vXq{5+ik} zv95SJ>9+R_{_P#O#W1gs%Hf+Kzc)^#XnXHvjf`Ksu{dLM6leDAzGzoy2N9>*rQL?d zxHkw`S%Y3wR54X)A(D;#lG2(lvr~W2 zk3Z{p`cPL(m+bW*H9a~SO9hEez4IR*O)@o0JbuxBbf2a>)_n9XBQ72Z)c|ndZhKT;NSn<&?^(rO z$-DjqFW$6UCmzJRh?v#$Jy4h@^~F%(02;0?pF2cH`fajArt}C;$!bcS|xb^g6r^2mCAH_~sdg;?BHZYPe z`LOD?H_EcV4R;MXn?ZoD%e~R;XjZH7lfUM=zR2<0LfIG&TxQJ;DL3f&pxcN^yHcdQ zbh$5niWfuo$y$pRu_t$YofZAP=SkHu<&0eD89xf=O|XC0qy+o!qTF>n5724;$-=yUT$&wtvy&Mt%`n`*Uy8`l+Xk ze~=FF$p%z5G{?!X;D8)(l~&;aF$~3ZR(C^<;`4K9QT;R zbX5!+aoU>(q?c-EZp4bk5DOX>u~H;c$C9Qls)KfigVA&`t4WAW8JG#T*c%53;0zy# z$-Ryiw0J*i0$(e&V6Th^hqk19W6b~|Bx#;er2jk5#RHw%8Fpxu=IG0#Zo$SU-V^Hy z7MXfa;e4@Joo?#rO?Hmo^a0`sh0G$`ob(Mx=3<|k)NM$ZS=EO#EV@z9F7+DP0(ZyD)U4byXU-UrJ0)7M(}XEQs? zntXmyMD1zviUaBF`Ktnvs<$A~*{*Fe`AJTtU>G&@%j!QMiM=IfvBJn;%57_|Z5q{3 z@nT`z5m|dL9)AN_JTxdG3d|=n>TIJi(I3=n=ISpu*G?r47YV}+gn?SK=%@Ls0A*is zWI=lT)uJ?&+w^l~-g(0YSEb!KSmN98oxooAHwzNX^_Na-rLdF0{GRrpe)yZ68c9ue zM5FiW^y#BJnVCtY^-*z|wzO6jA-LhDZhOWs5xvH9#NwvXJ0q=z+UIE{2C-7lFYcrZ z^mtVgH9*+6-qV!+t$G&EsU0XgbKWI;ioibVjrj$WyMcVEe}fz^EI@EBZ8Fc7>S-Tv zfnbAbPzzcPUY2d7Ah^E#A5kNKMb$KB3B|QE-f&N#G2x`?ri(YUxi7fuIi0`w%~Ms? z<;yXV(lii8R41%KaF>omklgA^AN6TuX67iM+p!&>@l8y5Gk4ErvwLJJ#8$?ybz;f2 z&&|bKtf2>MrAHt{2FK~N^Bt{nRZZ&xz9Xib4a$ z>!Xv8djyo1Y*r|90fpzRE(iYcJGoDYyEq7K=#Pzhi8WJa@o`p=x~iv zHHO4o761swc>#woChK&2(*Asjl~rBN&p)1iNseZHVyR1gne&*s7F&>$bIcBt(4>jI z|N0tdWBfbwrYV2+`V52tS^tnJDDoum#BuonQTNmQ5;W7hKd;Z9Co!=zrq9L4UOIDz zp_2J(Vg)`o+i{EKoOzdj^h$0@rV2vy349$nOTiGgns2>7-*$PT;*k@Weh>igAwZQ; zR1`1&{w86z7*$h({09Ur%`g2qe7t-MVh^lC)y6_|6PNn#sw6aK=SDlKQB!ZqdQ*yL zT>034nurhh+QEX9|J^eb|M~oVgQfw0^l0)gd%2hEx+rCX@PG1YDf-WorBN{oS8sDH ztY?h=RC?+o+;$Q{?>-GREq!3Cn>qw0HvBYg(n1fIkmJRAx9TTjISMHaUJSny{WmAp(zY6uNuNcHN`@?|J9Rs@pN$T0ZANqTu*a zOa4I2{BqB+h6ht18VgoYD;~63vuhguszAOeBx$;%&U!)dr#r8@#nMFgR|fRvP&Oa? z+dgcO0=I5q?Pg6$=$A}2P*Xz>tTY+T3H+&n1hA-koO*-|^WB7ce+|zXVK4r$uG@iQ ziyOkK4lsr|-!ju`BaDq3koQl*`WfJbayHjqS1P`^e$+q1q~(Imc*eO8F#fO}0AbIbxi{V~s=NV-3fH7|aFN*cfjh}4q7-oCfvS(04S zK+j@(B}?8$Jc!_Up}x}j=iq#0-tcJbqkY8m(M?xOQd#$5-4i(94&N;zzJRq~R$=#A zn2YYz2yK%cjF7?QGo>LONwpvhDqWq@>3(}u{ZxHQNn$fjufgu}K>b@ANYK@a_wAis zFKg4XSlQohfz@xQp-9NzW<0wW>l+vtI}?5rt8vx-3>sI~q|UEFr1x(#RuTCkiHtvc z`1Y6{YUclvZ%{A6964yaFWicm7D-9OQwFW;xe(>*kt|C&O^o{^V!Oc=P+%TMoU9$DlpYUx1IrM z^Zj(Hx{g^66n_3Qnc&J+%C1PXrAiOXwdg6qVL+A{9PG!HaCv+tf$;GaX~5gqLTqPsG`Wb zn5g#wDx9Rxpm4#mch>jOB8W=JQl#sgXwDZvkDeA)pvbo#o4~9kJSJf?Lsv#Tk~iF2`Cte9ov~~% zybG-{@4jJeJ$-2U9=g!*6_-*h58>N2jpCQ^B&*PmdflXyOTrk~pYcUi>RBq~^>GXj zZe;4mSwN%RHSFihZ=W%j4v04ogK44)z)F;`2xUXSImW58qd9DUu&jjo^QVE9wh|Q) zV+B>@q0tWtazV!e<0!oP%VSE*Pc3-zm@fh?$eO3Ix(0GyBit(-`h$6-JLLJ%cDr_W z4-`nuR6AeOYo`Ygufp8e4qtO;pFN31aF# zW7FXi51O$B20A96fG4MybMpgNLnIyir&x4nr)j1DpDcdV_e0Q?W7qCyiwrMJqjOLC zbCbia8XkQ=<`^R{xH%j535C$<>t?w>MRNm+cT2!)Jc&P78~T z2EQ|UaWS= zug1gk(GpSj4|pd(IA3KNt;57rRaO;Cb`)kNtW~(`D97A(H#x5=Eckyi7hziiGm6w^ z+vo9ny6~y3ExW}AZ9!z%7~$!rI2z4+TWgcGJb#Ege=<~E_roPUmK>T^?dW3_u4>}( z0eNuQrIp()xJYYX{3b_S{^)|p!iNG47WPdLPn02bpL>A0@3Vk|%VCIe0_k0qtkQ;+jLd~BhGM=4eZIvV6?`x|?OzNXC*tTh?v+^d@D~p`EROXVhwpmtt1G>XJZH(5I%Fh9l<+q#XfoYzVIrB>*c?XIHmPGf8(~ldz+N);|C`4HhAMoB8p%R^HG&JFV zBF-ZvQmc%mI4#mo1uX5J29Xe)SfUtX8L@1SeAELY7CHJ1evI`EQqG3!0^{ zD~1pd3dw_*mJJ`?9(-uIoKhboFXax(&Ge(a-nwHTSBvf=m{WS=Po}T%5O3j5m4eik~h9c+_RS ze^G8Q$#(C>f(h@VA9@IuaGOMVYP2Ce^?GagRc;yAaZ-dIc~iZA z{p*r`zYC-Mts|p-CwevYcJ+1;TWJ)n(wd;t2eitC$N2jzG5Ejch8_698`=K=34EXF ze>`m(!=Z+*QNc-Xbnz|}^@+-R^P)uulhXMq*)p2cJQQujQCW^z$?g}ylwm#9%<+>L@o#u$~T~ zM3bX&{N=-Da-W-0!yQw3=!yib^yf3WNIOG~`O6TZ0}YVKQbe-QbZZuFejJ*H3-&!s z=*P}u>k(dLlN8u1jlFT%_^qCVC5F1V;kVLerv^9FmKxv9S&3-BVwA-0D^_I{W2Q_T zpYX5A9~F}H+=MRbfGughgP!8^GxJ6MVq8^N?B$ws?sp<&$DzT~qhrdBt*sA;yR*{rI$cqASxZ%!Ab!>NY$Jb3fpuH(Rr6_T%_LOD!TF9$ zt9f3O9>;N#raRv3H5K&^m5r`&#R}hl9QX;s1^)+$e#p%Z`gj^4;x}R)MIRt0H>^=<6gS@{614~T1Rq~dHzvW^(kFQxqg;W8B|9EbzSk8Q!mn) zGM|EZV-@|Z5e`M}A<-p5mU8f7#8#gik8QlEHKTmZPp=SWFEviSNHq|(wX3N)`>R@3 zuK?}AeG8IBcTC^KPGj(i8owQ;G%Pg5yXUt>JNJfpEf79bB2*diS;gJ4^zUjPS6TCW zynXVnQ-H|8VyOD2Js_oO{(D5z)nSl#%jP4len)RXdNJjTLrrD9 ztPk4@MC6|=aJ};ey0SZf)m-^T1>;NbfVO@y@}!IMd^yjP0=^{;SBHJ;*`*zGy5rAt zi}FOy44A zv)1_Co^mB_XT3M5^ALBZ!LBrm6<6|fWrj=MjTB#t@zj)3y2`ID|A2=r@&ACm?<#PU zvhN1IMTfK}o7LgE8Q{M#Z;eGMhNF${{hK8um0is-6;Fwh57{HjiNE8rdv9LDdH?Nk zr37IAX>R{(7WOV*aZT@7`Ln0*o@rbJ?c%d94lic<`66VvpHMPU*z|clwj5ByEq>bP z#VUyV=07Y!p%x#RBBl<{bqnU;Lea&Nk-bNqzkD z=H#cuHF~OlKr8QHWppVI=+K2c93Ck4Hv>HyNu2|ozA|^BAAu{0ivZtDkbQ9_GELxPvG|-0M2s%C8;9U0~4ti$?C>L{=M^|v7fvIYT^YwDC z!G-I)KWu{kD0P5`IVhRJ@lCv&WA5wVN@3pTEkS`QBb_kb!;I~2+9Fhg?X$BnTXPl2 zLdtsR?zU7v<-^ZzFMTBinCk~Y1vJ*;1`I{w)Xw(a-VMw(Kck&c9el`nj;jv!i&E^! zm08>Iy%*{e;~g)fN)6GzyF@Jc@6$~KMR;DC#YZ___>ENX;AwBM2N4gW+Lh6l8}xrY z|939JEY#yg7h-=95+Rm9h8~j|Jd|J9x-P}08^JVs@77lb-|Tm(#7c*0f!v6CE8|0W zXQVfwZfbvhnYl7_Qn1aS*e%g|OEaV}`}dMGn<_^IR;Y2Wy!kJ?JibGcH@?TyeCF>! z@j+%LCTKxxVv_nNir2Ct0CoDzMAkUCm3D_kW=EKzP?0a9UsYFo3?Js{Zf$yR!`Y~d z!rC$o3vvWXk4n-f2Fue~RC)GPe~-SH+^)Ibs#qo=JJa9PO`cIOV_W&4FeEs??wboL z$Q(-TvZz(tik^CxBtlwqur1-N^0<9gL$=djq_OEB&(t?$&4nK7<@MOhpr||*elY1? z3KD`*;G9?{-@o#Kp(C?g{>9%5>yG#T=6+O|uLCtJm_+XL7;$xZ0bCTwhL(Y}ufNRa zqqvDg1Zx(;4YKz z{YKubdGqE?-TTj}TDR&{-L-b@+UL~s-18cM5H1gs2LOQp0Px=fcwPj^0Z>s;{`3AT zX#ZYxEOc}Utym{=fG6d?A$c3VOK5ET{W-{6>N_@vk%bO7+50YE3hV8kTm#UhbWBV~H;1R`VR z3rhG6&aG`Af59&-t6}Qw5|UU~|AT^(l}$hh`Wj*G>K2@omtW8`F$rN&*VHz%a7V5S zeh5u&?A|;%mD36fFZ?$e)ju~-|9fBlt>VAo&@ukCy&?jjp#1X%h=uZRE&rRdKolZW zG)7)x8MXK5Bu+sIKYpJuy=8w%Yod$=LIi~e8iH+z-xKq_3^A%vWRgSsH*g*n6bv~NzroYHsUhvJfx z3*Mqlu(qy?0ny7ru0X#u!Mx@yK4S}^lJpNWelM(1lYvb=iR9u__2(+$7+7Z|;*%VI z)}8$(wnZkKH69vi9#K(3%>3i*V}DCO{G$K%R$BKNU}(&7^lO2W6*M76aN8R2w>-Ol zZcN3Cc^NX+lugzc_sfFdv2?5{^w44N==TD@DMsQz-BR`Sw8PYLQ@i5ok$tzRQF?9Z zcgcf>#bG13%Qtqf0b>4WOUk9SkYE9&jiL_v6wG+!&f>eM-;)!Npu?nZO(AAd)|I;b zN7i$1HuaZ_09`J>B+S4x7ihQ+;{b_do2I3f5p#F=QQO9?twtEco&|6I53%AX0S7tY zb^uC!w5_9~kCdun35XH7n%tN&qf2=83^-EpYnaomd3(y)fP;#);a>!$Sh;3+BAeEO z_AHRa3=mfr+$0;)s7dL?*rfKAjE)VXj!YQb+iWewtN1bLNSew%bu~~^bFI?0EAYi? zoN}Bgo@#WN%`V`<1hj2d$7Nk%}rzwTKR^& zM(Cooc$LxE?)9bHhGELqBvC<^+A=!b>2@OWUGuz5ZI?LWD01ONqUZ58 zxv+iLnU;Z&uotmyGVU4o_2|_kEE6 zl6K0KLxR*%L#wGpI%2X*Al#X&mq<51ByBzgg_XO8{(T#G%iYlvl5pctfYM|n50jlt zXj%&<1;K+Drb+G)Neurtc=;b0o{D}gKU>a6Ax&RldNcK*1wbV1jO?#o<4NqP+6uM1 zWm|Xf*_Sr!QoK3lQd-0(*`(Vmi|AB=>7ksjbn0Z7z;Hy>le$&820$&8yZR>o2B z)97(}!EMN2h1i3ZKU**@0IQUyPt!;>ddh;^_qYtzVA%iz>BYS~D*Z@oITdc!TsR1G z50w->Yw9?s>ouQ=ZYs+wH3jc@0N4{nga1Oa?mAZx{n)rrv0h0wSXSC0m4fcfci*5J zyscalNtZMH)r#YiziZ9)e5JOlsC79tAU(pl=$gBf0mDESa2Chh9D`%4`|`@eR+yDh z61i9c;;{4lBf~&LW0#QLG_BwSxwXh!tb(a6(-c%>dl>vyEhv(C{}xI|oidE2db(sL zz@a|TwP>eO$tDX=QURcXv)yRyl(`l4;H3Ci%xLs(z|;S8>j1fj%_0OEe}G(5kB&{m zhr~$l#UoB6>GqfKM`^sj%zug`f3&f7n{Q(|TCOeOu0YDwMqV1jy*(<4^TbuiqXR2q zh^S{A*OE_+1TH7~*pefL{{GH|Y%G#OA0x}2ULtJS{rdIsXzaDhE4@G9if&i38Wmq4fe>If z19sP5?;a!=l%V zn^lcUb4om)n$nNU8jyJgAfm!c4NAb#Ya~$^eu!og5Fty=VeDWT2607729lV1Sv>wi z`=*>5Ui&tSL1mSVXDbNBvDsn?4d2i zy3W5D@tcTZ?ag2C@g}T)3;S66YoL_X=;P3Kf8qF6b>Fd-1*hZEjRVGL#4eU};;1c@89) z`SpmtXry`tO|XBej;nKVq6Zs1Ovya}JCRo7;1r|RaEPf2sdp;~u!y}}^Wo1)9+$cmJ1G>y9g$@pCt0g2HRoE`|&ct%*Fub04DLwsyo8P`c z;a$I|J1!afNXVvJNeh;2&!r;8J$4FdP4E0hJ za))SPk{TG_BnBjez1k0ob-Tohd9KmxepRb8trS)g5dydgGb*v6S{lM4Xqy1-4twbC zt+4n=mx{&>Ii?+#weBnUYRY-9OPeabtUjn)HufFwUaQE+?OUp`r$m9Vn}X~sYtG)W z;CfZZ;&wIu_6OW z?T=M6Bl=;_snv_-ysqZ1VbrXPstDl|{sRToTlbxY%(^_ z1}AR&op#T@&E<&9!*`MX7Vte+tHH+`v4YC1 zc|C46D8YQ8P_^}I&2oA@g=xdo9MhyitpAJi|Bp6h=lXRS+v3LXFk|UT=pg0-Wa!?e z%x&al7}mLa(KrA<-HY-WK;=80JXGRqIfP!_Y21q;arG(b z8}_(0BGsJ$KI7Pd6IK4a2bE3qfv^tYHPSSaM@oAuq3(3OLA$AITyPj}^cFGSD|vUO zT)k&NliD|(Y3#vNu8-~_Z)Y_f)knDw;nd)}l0i%;wgjK>uY2v&s{1?vdi*0%uZA%> zQN+x796V}r9mgGdsfrB(kOso`Wv(+Y{kEWVj9E}#7pioyZ-+Mt6&2~5);Kso*SWUqyZ|C_n1o`#%#ei3S?`<&o_@*k zRf|JqsQwl|&tWNRo7=I>zR)}x8$ei<0Y%)U3%veRw}DCM+PhbCi9N|8I*}yrR&zce)=n3&yk!%t6t^kmtIC9$~eZNRTDIB93!8t zHkV=9I;?%rs+bne5ss_9F{)h|KL0YF)-F6r4Uynu;~e9Z-r~1}aIT_|0F< zq{msm|0P@uE82TVzCL!gx^O_7wEqWy^~O6k_;j7~vr4*I(O>Q^!xYsK8x=zDh0M7E z@16njSR#09ndeEDVwm%M9~Cguv5XY@5wS9ZkLdaiRQ%fCmN@2nKh}~bo<;iic26|i zzgm%@^NG3BF3f*>&=Tb_ag#M~8%S*m$!!|X90K2cO{`f&b)cDLHSo>K6l&p*>&HI7 zzqt8f6yRS=Y6GhOiW96?-FpRUL^^?sDJrjQhnIVVguit{Fmq|pT~u) zBnr%h$^VK{PV9!2^_A(@ZVejj)f&V=cqD<2thfT3k=Uy0QP^lGz;vh02J{~3zLxnz z!Yt>9G<->x$}IQ%^X{y3PU#;wI?njmq=4?pR#q~s$Q~8O{#G#;8snx$xA-2Xf+gm? zqWFiDahNT%>o6H@E08~^3EfC<;sGuzEp7{bDjE)y3Mn~=OA@v4rN~!X=5e|BMs4|) zm=!K$ic$cvw`j0t=hy=5Oo2v;g+RN23fC@1E7{X$Kw!i5OWuJ8a^C2tx+W)Y0bk2>Mc;kKp=TWM-`%{>5*oW}+nBOC*-t<4HO8y5Iq{+!zw$S92?@8_ zD1Qc!Coj9$G}?MyF(#H4oQ!GltR18*k{%ouTJ`ZI0jWfT@VQe4p}=Dcz#2omA{y;c z-BH^zZN{qAi)C|%luj##=F|*+d)_zOY_=U$MyJXcFdZy*8R~ddK(#`{OUfl9g^%P4 z2My=u&j3tgtnm!%ixl|1EbkKTbw-;T&CYj#k|%1V$D3|;2&8tupEyeGPr1iZmwQ_0 zl6{*tVxZB`jV4ou{D?u1x=FuEjr0d@gHOcqYal@jJjiN~(uUKKCVY@owP^LdlS_oP z<8rmuL1Eq=)7!|(C9`Hz#uVg~G>viYAU@$b&U-*GsmrjFHmFT5Vu&k(#yy3Y8ssr? zXuDO;3f*@2bB}*%J}c@I*;GYq{W<-n%l`M#%Q5;C-tI^snDGI)vs6`k|Apt}7)$X38gwHwe<5|?HhFr4+0`FE z1^L%jnWB(}bl!qpa&mW{;x4jkMEiw5fr64>ou?2+&W788|glFIN|@C zOmA0r2gdE>te+0(1L*g79vi31w!d`;JgPrPEJABSo{&c%`OH(->=AW@mrLyfHV0GZ zMDC#==f*~TpP_QA6vx;JTM2SXmQ=xj3d0V~5B_z@j+ZEmaLR{N-q48ysu#bqC+Rr` z|Kj)zP@XTeRtn&M35H5LR@Uh0fJu-t-yg_4Cmy)!S6l-K&}+kwnqjYU3uo)#Gz3B! zCDDgogWxz6g}~}gyncPH5NEr#117Gy-^0k?7LA|AH(a9G@Fv%s-3P@sIt(?orZ&Tb zX6+^Y#@@YQ6DmxY=z0oYI$8bXZPgmBY`Q$g#A(fa{S!&0HV6TG7b>u#gAaW<7#Ea+ z)IDSHTucN(#p?~t8GqGNX&KBJ09Zq)rD9%G^~PlVLo>UPje3l_hog+xFCwb$)JGZ3 z*codoa$HAwqhm%n`96Mh5g1LDJ#M~Ov0(2q70Wu9Jq3`JWMuQFpXRcgMkS>yJN!C2 zxM`Q5DKBkhwK_7s92lQg0iEz1fV|Zs=qXy0IN2KO#yN14TPDNI6Ef@I2oS*15v$_7 zJlhaSHsQkqgnTvsG?9mbBwZja$WpHb9LpSNh?ZTFz`uW{`uUUEprCY*=w|^Yxm;-F zln@9F-z)<)5FbG1`HgjhbI@?qBpK8mP|#u+MU5bq`Aet@8r>7K_vpXe-Ls&5z2YTi zW6_BCc6iuzF)1)Q?K|FlSZMu7q^F+{{dCHr@bj$|_baU&pm>4As3WM`5eU|Nth6dFP;Tsf zpVW?R_O71toD2q^`b7D$ZqkBM59Wea;2bznUjtSElq-s zJ8h&y!YJK9T){ccBGNQvfT%c7j(mS>JIh)S3#ohp3m1)yMjox~*05hFHz1!AGx?ts zi^y0rC(>#$P$IeDDVRFaOQNV7K%~+Rw8FQA1`Q&%HbKWTa&L4*81->Yh9|uzsPx|| zt2>c5+Y$aT$k5QSPP%ZPIA0$?4XPp3C|d1SU>jt>HIodMs8?`YaO)$2{A}tEVcEau zPrQDMlwEagBgY)(N+$UUK-c*Wz^*`cfnHM{vnn+zx72zy>#qwE&DZ)deyQp}KA6{Z z5K>}e=^z*6fvO0VIfiL8qnFBlsULV|K_x$bIN7{+o=U|{T1rN{>x1G3qf99d6T=u1 zLIiB|_x8xI={w{b8y0IP?h^1W3{fBN`$BUeDT8h*we_NEiY&{|%3CKLG(H^sG>d~qx_UX8VH9=coj12kQq=R@v>VosaRTM9sgzC&BbOIKd*BjsuqM2hL2C>5y9?PpeX!$ElLBu}o%$4DKag?|%oAp?( z*A8LC`-C~6Xxur{?8cH9c#0L;hL8##CK{-n7$2efQKQg!6As+!`|z#U%y%3sPdgb_ zHZW>X6teuCtYKe!RIa>XUqQ-ZnvRSYNMu+p)CJ(|j!B&@YMYIw7V&kXzFAQI!=zmp z&)d*9sys_rR_Kd1iGymgq|WiH3;^?U6h{mWw_^LZ)=FGB(a!OZH>U6}e^I8!yeDX} zj6?~^@oxqhVj@b>lzHs~10zy)od`*_hAbZ;1_S*Y34pDZD<+rhvNHxtoHiP*-A=6|7EyRzEmSm4vvVLqUKQeG}zuvMe5n*r}c!xb_k0<#PpZMcdCRDGI zhz1acGK^KB*}GV-clS3y!>< zn`oskYj*g}LpC?~vqCLbXBt*NQFUEgwzQhQw`UwMm+*dM#9PI>V1|9-jg0mn{%_ zk7@Gc^X7oKg|RGVYknS!HXO6`O(qQ;yq36MgvlMqKcG>*@ac>jEvK1^o@vp}oAO)5 z>OKvR5NmeHS~W0H3zQ*by|z+$Ju4@*)H8+WnDHGBNleFU#I3+5;A})-!Qy`MF}a4yKLuO>XU|v?W!D zrETk6QZ%o0Ja8n!&O8|yi~tQSfdL=@KvCFc2meSf{M@c}Na>e^!|{DeK51?|;hC}Y zHais9i{gdtEF?mK;nL3NI7lvZ?_nvpMw(FIwo)T#g;|Hjlp^Nuh02ULULz%BTQj7M$Dw75Tmh=;UBC< zl97Jh>rRo55%0xYdGb5(QhW-XNg2?Pe0ff>riuVtKD4w}X$lGJuj7x&+T?R@2dEN5 zuV@jCBHW*-JX&IVtYfJ`HmzPNO%1tkR_%?~}U!CIHDyT7W#faZmbo?HskxfV{p(m6J zgDt($pZ#aoP<8b(ss!c9sq`;!6k1*U46u~y6r56{4x1y~Y3!wB4&3_9mZzjD|T(!dcdylZ@*ppaz95~U)jw;8D@~);1 zVz0dvNdFA=hxu>buu)F>_+^=ii>;sk9)iCp;UttIx{H^B47f%=wQ4y1buDU?`N`-wBIF}Y^qs=!&+c0I@7M6ERT3WPMHS4m#3m~%jz5Roh&yUxpKb{yQLGnkDym& z!~&b!s`wSN?p5|4%JkC;c1zM4=2)8>FuzN1b5>HcCy7Owx5~knK8M|vtE6f~-&MQ+ z>QsO6F3L>czyl1|&rg2KXnkQ$RuR08$wL?zkI3<0mQazHrdwxPEYYMa4|&OzK=cLu zy>xVN0ow((SYTpkpg4>SQ=+!zV`2!)7C}O@$d&elkE!FlB`Co~@`t_aGk{D~0&D+u z%7N9?_|GP$b{0L_a6P%BYR0g0(V7A>8YD5Qml#r?b%4aYZ&*Dk-jPqDWu;c#u(HMX z$&1WgOLSx5@4Ru@kyXzH3cMH)2z_RAk8^-ieqonY;uUYFT*!%NYNCWU{l2mU z!6i$L^Szg2Onum|wt{;*`^V(dhin>#y}j$Vx4t@m?*%1@Pak=wI=)PfU*8t}LzZ8H zp=yiup~t>M!fsxsGuQJ*Lr34bw_V-O{AP-~hU45H@C&zo(S2$XvDytN6$~e^JAQ#* zWu)*7=##k8PH%TUDP{FI-dwfuIV@HvzNb|h65ei~SOooDJLU~~{8q>-d`~@0<389FYugr*w ztCsJDX{r^Y0+S{g8DIdA)!937rXp{m?CBHY?6q5*Wh_JcK&3||x6rP-iQzi@Gn)9p z>!xB;NI`4x87Yz!OM-x%f%aToMRIS?+oM(`zu^~LU6MTUHETC1wok7DoD@h+6z@Sz zRr>T!h3F}(?HO=9;6L0;Tjt~7IH~QZpk-Aq&|0-*?@05$X(hC&PVu`40{{~N8=V6r z8j84>|DxzuvVhs%+bST=oPx}-8E(@vPq+;_v?d3j_xbdmQ+Ns-tc&VZ7#U8+D(0KV zxvhKSvmz}0S5}J+*|-WBMc+KPJ%U?g=IieYJq>tg%;X-zW<7S5{wePN^VlP2$}<2o zaH+nFSN{xnF?lmGJr(s&D{*MHjsf^y+$r2CO+l#C`$AR$`XwhoEs9v{p+(B2 zY<5=LJZ&r3e))pDpIl5A=Bz?dR9|IWKu^oBVy0di7m{o66=ZXV-;7S}I~$;renFj@ z(XVWJq)Z#;v`~OFGzp`QS-0vQm9_QhB@l~+awc3r0jgJ~^{RD+8+qYgt9If);B-=t zQ8oG(j7k$*UBQ#p8S$Al3Ndn4RUnvQdS!nWN!=9WT~HzqvC?34ZhOoYGSF9XrBN!* z8~yDZv$ejOQ)3^yn-Z)i(oTWlXfo-T;M=kx{;d6*#^vk=!!b4xJbzHN-&vTl(sx6% zv%I(TReUI{X)r=p6|^iPy_U^{|Hg>V&b5|pvf=$Gh0VQxb=b$wr6W7T7ody09eZr< z!b`AubWFF_EBABNlTyfM_}7lh^4}99aL1PLMcB5qBp~xNnjo*n!Sc*?m1?qxr5edS zG_4=0)zeAIMeoI&`XIWp$Pz&qEUU*3xQQmwjx|c!xRtkm(P}-hz(hsTp;|}M1em*V z!*uA`L6nkHI4;1BsRt=olN>Y?1bY9xyt@A$YTsnzW6z}AVSuZmZ7|=8R$yTTqhMd9 zq;@d!=qud;VFCyM-nUxZO}9MBJXnR}uRqeaE~?U@L&v67ZF(wLzv3}h8>!uJ=(?-o zh~Kh}J`@M!3r2YcmCa3Z@sUq#zfI}d7to3&-3S~4X9i36s}QIHz(IO_YKcoXS@&-& z@rwP^P%4ROWGIg(P-6LG%G%+3ow^mIul3E;v1Ht2iKDuuq0HG}Vi4-TASszu#^mpm zoPCYCAs{Cj$pu|<+h%ZsXN$g=GpjpI{%~n-@nRmJNwA|H%YJZ4+WuXpLWWNe(YKlXfPT>?|&)ZFgf)p z3wbkzz%5t^0uvhE-Q5vf;aVy36+OT*@j|XK&kyAu=H<-VH&HyQK z8KUoHFsiP9k(f-nQzkAn4#+MjZmHSQu*C!W#rd=I+Jtl_FD~vgF1A_QcgFH~n4=b! zU*&aN9^-nf!Zl3Ou+$@1(F%1a1~FM_d80!2ajJ!{(v^&v8j;CR}%8f+vNF>N#NzJ3=oe^f8i((3jTlHGdsn?ha2EG;Nl9JWf! ztG8*H?(zLMdCAEu?Hr4;*KH=NB`+wh12*o}ayyNciM|CBdc zr@3vA5*t}{up2S6GFUzXx*88$&D!>iFW_I zQevwJ(>gli^JXkHr z=5Nfo){3B_pQ!eigSA%X&Ua!euTmav6-9=?(Pk8=;F+$se~snvz%E^Te?Th2;59$N zZDlF1b-E@&dN<#1)AH_?%?`x3L%Ox>&~7Am8k(17_83OT?4ouA0)!*v0Tj6vb5tBi z9TkyW?bH;q9}Jg|k95iQA+qcenHskxEg*{Ld#Bgu{p}NpD`b4&Ws$8Q{V&zbSl@x5 zGWLG>#;>feJOXWbCa!AI;IZB@i(>^dAD=uqATGH{ChZMo~u z7kbeMb2J`Xi34FGjN)aOm;-hX%CdskCf4oS{p+sogc&zVqmUGX@OTxMcxO!Iz(tBa z&tYuo9rB5!*sLI7G}m2z4bBc2i6Q#^I0~OLSY9qyvaShADcQ5$Qq||=;PT6L7M*?K zY6lCiZet=pu%!-hO1~BlDj6-SYqYN!^Q2USgas}|Jai%yM$zKvi>m7!-ijZvJ2@7# z6b3CTg>H)X9s&`H%mGAdoeBcJ3Qo}r8|Fd{iP#&(B=K0R@t1VeKKnz>JpRT3t7wi@ zF{s*O+8tA?!Im@{llq&-z5Z08)jQ=Y)>c0ZTMCOoi^RWgY>4{@-QA%_FT1np{|lfs ze{_wp-fnwp_!jfuPtSU>{V&kFR4GuM^pRQ)LFD9+lt%GE$@EBd=vwwx$@&TX(=z5G z`yFu%)rJ*w{4s)zQIp2r)2UUV1EmGAjLgsO4Tp~ zb+6zVq$!oj-Kj8-p;wfkG*P2PUr_Im9aY{m+DzZMz2b_!9?=L)H3Y2F7 z6C)c4r%`=pfQrnMzhSUTM>_Ju76gsLqYkrEQpGY6nQG$uMv6a}9slLDZzF{7dFFG6 zg@L?p1(G3h_*|K701$)a{7grr1+1mB|z=3WGfnO@DH?DXg&ANRa0 z6$5~PDTsrCUIQ2RSpE{}DYHn>)za5|p#Lh8?0RBRJ1wS^JJ&)XsU@Th#7b@MFgyBK z=_66!YeZx9QpU@Dk9Q=}Bl-O|MN9yS^r$?a#HD4UyU+)o&?&6;<*nT9ZlCzno*N*5wEHq3V=r`AA{qxK3 zlLY1ZHx8p(b*D)hoK8ovp(^%$W$$2nX~V7OFM$m zp03!o&PaFmv^6P&O~3~qNeV$PLA6ACzjn@|gI!O(=$K74n-CT~d-90i^0G`O25Q{ow#kUrn|RqaIU2eL~EP~x-siXq5!a;=F%yn;`9?A zh$?0eq!To8(U$Avr=p!N+55^Uek3%hLM#LJ|LD%j5EDpElugy8d+DC#puEcRy4FCy zQ5o9;5@;^IhXdo`%0%+L0vyDQD(k#I#a}IADV)DEEM7)*ZKc)ddwo2?wj~*^cK44> zUf+z0@?(D-tH>yX(3Nt}95+4MY`s5*?Dg(dsxfgYe923ypfM|1@^fQYGt977VVXZW z9wij(ZYfoQ0+14t3OA zD83tnSXx_qj-?9NwI4!^e=M3$6c8A_w z_{N&_|50U=F;7i7f3ew+id_>>t@|IE-S{IGK)(~auKToP`wT#~{gpud|30PvgYniU z?=JekaW^g5{n=Id+B}jZ>RHom0J;$6f`3A>l&o6b(p#xtFEult0r}FDk0$?(W&ZNYuM=M_Tv7}@d^w&Z8xbNCz)<5HgK6E+1q zUtN=lH8zAfD8+VInq8vt!|%Bq-OSO^_BeI5yv>p;W)k+vJkD_PF*_iy3GfC{_shrp zvp+2-1+ToDJ&fL)-_h$j6sC0B7K5~6?;v79*gr5G3j8!{M5A_i-M=Y?u_rBUvU6DA z2R6kkG9-f!Rq$67ynm0cs>ENAu#e-OUPdukw+a7EPguFur%ZQmXcSw%v6;9CLG)qp7t+@I% z76CZq29eELFbUpYff9jQou?krs@!*77+;#-L^{^$nwRd`7U1vAp2xl>>Y|ocPnaq- z(zI3eVrkR$Q&BVxF<32jG3BPR$4Fh*cUKZGHedW=1-I&xBv|5JI4s z?SN+htsh1d51+@rZ&eL+#3l|r51R>;Z*jS2` zjF8uX7>-8ylZPBG$Ng6Q`Hb-6@qGjhXcefl$Y4Ta7w^>QDH_e&gRHh(JhGf#ANta* zb0)*CV6&K=>bCObvbZ7I&;wY!HR#W`(L$V5Gv}m)%?t>ZS;chp&I+#=V4b!PPdlY) zf7OEpvJ351ltl;u>}o2M3c2_a(Wk^UhG{`=4d8V+!lUhN3KbkjK&q8hTAl`_hZQ4( zOI@UN1^ySbpm+jRN8ftHvRm1oWRUJ;8Y>R1_)c zqnZCJf9SZLBjCteKw76opJ{318y`rKQp`XzqPdSf4z2j$ZT zp@xi{=ry+kU2v>?CYAJm!LXx&WfYZ%!$E_mWq+>ye~Y^pWANWv?j2f6CLx8dW_k03 zn(OehBTMgfPqJ2_EoNjbdw875Zxo~MCivI*60$$M@gQ&cI_Gg$djmUqo!wh7Ygw=_WRVc2tK^B;}Go^{QMT747j{gILtd>5Q|08vy$v&TafwHyG2+!A@}$VReF zxEEwZo2-{jwoieN zmXRl?D9x@1n+pbFq7llF*&72dGMXnMuIxm3uf2weQ{uI{s}K-SUGy}VTh zkyKi^e(N6&8#3f<-dm>}aJsiv4w+(P z;6X-fr7Bkf)we{oK&{1e+BEp$v^jXB>_@+L*psC*dlqt6JrvWDUvc@Gj*6d-CohAi zIhC9`hEk@6QWiTCaLK_A0ASs&urx~GprH^X&@HT@?_G|3b?{tZmg3>adpXEg?3-mqtLosEhX17N5*Xcwh#vO|TbZ3E<+brXQGrg@Wip{%Tc3TDGH$SV9DQ&5&f7=0{sf2$vYH zhQ8ooGvpC&H>wQ7BkI*T{>~dRDv&n=RKv7ABL<@W)e<>3OG-+dXWbcJB!!S}%=`iR zjg+tom+nLKG3>$^;tHlwD}J@|kmbCMKP;U{x4@8l-w3Y!9_R>~vlRSd>FzMaGbjg| z8K2qD=EBg&%e8i8&1k{^?SL*@y@OgQR!X=ZGaJRZ{cMn5PA#P@lc`+O6xH~Yq_@Fw z`2KH95~4$*gQ7<0ib>Uz|LQyYvDWdKPHbn{j;1Sfw|BO`d~wMRon%kp8Mh+}){mrQ za!zM9h0Cd_HD3`e!supU`!+9lAx(q`X1*&$hW0KYW?KG`&JQtG-CrL!5j?gR{IuFH z?jvfaYLT*-oUozGBx)HbDr+kAdpUFszYsqDf>t^MFCCnajhod)#;eEvhAT!WRp53z z+qhuro*y4e){DeS-}Tm~Yq{l?qA%q(W0-IfsLMe#L993yDHiW5>N)LDh{paAdw@yd z6{e%&s6^(Qcig^ot*eBmjl-WEaa)(WN~{SmGDdgRWEjC-H1rk-xwSXz%L*KP$K$Eo zL$uutL1%-m0yNx7JK{g;$mRKnW%fEfHm9v>`V^>@*0R?wPw&m_hcDPZ zhq|k>>dc+iVD0+}5iClubI^gU{0$KmivHbMNi>94>G-l>V;_0t4Me$)(EDqY5w{AcNA^DH zv}Ghd`fYgJ2Ir&e(_~{KPsM|JmEZEcTkevoAR|X~svqZkc=V-1{!y4(NMRmrqtwcX zJxfQ#k|NG!8qIn`O9FjSA}Y#JL+*yhP}PgjBJvD3JJbxs zYx7Mn4eAm*8+=GCG#I9+`L@NU$7UsML*VmbIk!Hma{D(PK6@OeM#dc-13oIrYAEoq z1mNt!%1mmtq5KTkR3tKOwEK!TKdSI%zBldnpF)mU5$Zp>+eUPr=44y-H3LGN`8J*M zO=}`7{7MAj9~gP_JBB`zjmTJy8JtJIT8NdV)I}p2wh?pHH~l_<2C#Usi`S6Cquqt{DEq#c@1;S*Q#}EP|RxVY3O#}a{ezaT-ve{ zKKU1gj1l-J`+sZfEt}$swy534-5N;<9-82U5TtQQkcQxH0RjYf3+@`EX&MOb?rsV0 z?(XhRaB};c54UdBeXHK{1A6aW)qAfs*O+5G(>_2(#vZR%(rfugSus1=em~R(SKf=W zcF;#)(G+c7#y3{nHj)lUWwOCN8~}0zDsbUFs;=53H~p$qCSQ`1SSqbqKUGC&tIXb@!C|Lpo{|zBLgBcy+&p9p)R=cUbq>z^ zoW*e!poUpiTFaHN{uvTRM>q*IekHiN9ptAx_8{cEd(rD4RM{t1XDmbkuQQ+bIbNHHa2i3PV?(@@P;R+|;gFG5usoEJ`kg^b6Zu!6h__ zN!O(Gl5i;(9w3gXOy#X_QP-r))otQGj&!YVY#^jg=~JgMH}+t;U&3i%JN?S@qh%07 zPpw)$@#sPaxr<=nx|Nn7(fnI2uy+|Tk>9w_5s@vk0%@5gZZje}?pBt6^1E`)j9sD* zM40#*#F}-lc2i2cP)DeqQwRF#Y(`)8)>@L<30fDTK_Y%RqRaSXciSFw|CY~feYHxe zb}l(!a$8!jwZS>YRt^>@SI@q0O_vl|h@02b*kREQp+l<11O(d8Jkictg}N9k4E;JJ zeKWN$vbT^98hA@#ax=!EO<@-;MQteh5gr2z!vo zA$Ne0jtvH``W*)40>x0d=9oce9My+M{{TC=FG;D(XzdZ{>aE1fe;9;2DS>aq9X@9^ zsx2sBB7x#znB^4CQ5Hn6pJ-<$T-aB?aC3LQv($W#ot!dMLeQsQHj5%&2UF37sfY{0 z;i*r*ke@T}J{H?7qUc!+r5*guXr15a2^Ep-Ss01}Fa7*Tjjhch!^N421n`Gq$o_Q- zPyEXu_mhG5k(GDJuTIYnm@RPaO3mcG-AG7=Wn=U1HMt;%1{Mflrz0KFpgWpbt;4}v zf09UEO=u#fs^C_&#WJ0wzrkp93sDuzIF@x7#>zhig^l!u>RgOa70@4yP#I6YqA*q| zyUf&mZ*H1o;W*z|CVNII!fE9)oOS+{U&J~B!x>!jhzoVR+2wFw^Pw01^e-k7em5!nHNiv2+3J9T>d zoj(znl{1ZwN9x9UH}|BEv|i?GJE@dWb>GtW5X!jZ#MjbT>~U@g<(WW{o1`{$RW^Mt3nBUVwfxhYLKOZxFP?WSO!soT~M3?A;3~}K# z%+kxW1Mgal^wf@DF?{eeIZrKl?Fi}({oNiL)1hDTzXUE@HrN#ezwUSK9A^1yG56|ZLj7PB7-sZ%KhVTE}H}`L!}F z8|OY2Eh{ZDx|AjRlVQD=1^xm9FeQUUW&RX4kLG`XZA7)s3WC)V$|C#iu+W0O|C!(T zn|jTcP4S5}@+wN8K2>KL$->kIbvykto#baau-GpBYY;`VvrFCr3w#N`J0VXf=PfAo zjkanD2U|(J7@J!JE0SR@PzD7=>B`=8QJP-W^rK3*LZi=2)c$>s(ds$(BB8tBY^t^c zl95jlTlBZe0CxiBVxEh|9^2Z!#J6~pjJe!h7vBVym>lj-tGB`&P=4>A#D*e4=(J^! zK!x95{xDc4kss|Bi?gK zvvTyal@WlKOxuscdfIU! zmtEt4Xw4`I%atEuU2b)X6jX*nCr5j{`49*b7xeoaEwb%-r1puk&F1^(=rO*()2Vq1 zeW*xHREJhTdv4vhE{s@f^V%uLB-zPq$S#vMqc8QJ4;$L54WJ&~7M??Gb8($tj)MMl zptw+|LYGs$6^85gxr9+#`^$d--kEnFhj~O;G?tjLbmiEZpzGA2$N(|$nBMn-_fKDn z{{cW>dfRNc3~YI-cR2GmEFE&2| z*16uA?l9CZy&s_E>MLLGyh{IOALK|`l5gV{dd;v0GZ!wn^x$km{GN3>opWnmmVDBwfHFE8^3 z$QO+*-3p*y>Xs;Jb;u&5F>5Yi%8qAv9ZTGy8p}S@FSjs~s!TIwHO8jINz*{_GnkFT zrS%jy{iHh!+8`KiuKBUMK2rvp&T##T$lt(H!LLT_O>i%H6311roV^2`c6E$vRnz9g*`*y?p&yp7S+4JQ{sR&j5laPSEFLxgaYzskHf% zS*Oba6BJnp!-REgO{?{Mv{hngudjWK;!uH6UT3FxIzdda?BQ{%baWiJss5=j@jt9x z=C(o)QQ6=c#~v?=q)!f{{hNf;(m#Ndc#W4x_D&n0QT+XNN<{IpYnT`M>!cgVeqqN7 z*nfGYaxKw`W2)c?EbQNA0RZ8FFfn>{%?@c(0kD5g?P_kkgRiXqromRZ?ybpXmSsI* zV?XS&&r26uD~?L?OE7acOhM*tUP7xtr(Um-OrWDzxyrZxB%;{;iGWie?T1m4J$@Ef z0hk1^)CrMqL$$;`1@_e#42QeUzSWIP@t$!bKh#|=m$BhspJDF-*MhICH+q0FvH)5` zwE{&QXWOg{&${-yf%@f~2cZIuYd3P0xC6U^DCU4_m0GNKpTd<;Nl~Dxer{@N(DRIl z`c>A>#xHeZ89+AaH`apOJfWVwu>GBFhaYq}id^c!w1tQU3yS^=ap{ZdEX^6L&EK)+ z7X61#E2)l2J72@;u;2=Ml8T;90y0oVEr@*%Q#a`9Jt_zuNo%-=?$Pypsd>(! zF}_1S6k>ni3r1{We(9ijzvbI4yUc0+|5%g0{19#fvia8BJw{>ip;XRepTu+`3%EHt zywJaEvC{i;%q5yZ6NoSZ^bbBs$-9mQwMzcqW1kJ3CK-Em;{~*4U+Vc@4&(G8|1m6u z)7QBMXr?F2(0neUvB8q^cM!@LB2d{gKKS$TAy(OVGWWN<0Ux0Y9iyl#qIuF$*c@Ng zr^G})ZWq`Kx}UnyU)csopAl#WnH7YWbWE`7RI!|_`t{jN4I%Hn&NWh@4dQ47SPGqxg-u`fvs|{zqhm8 zLy6yGWXryl5uH{hOzH#Y*^4Uo8QO(Ejh}i@#*~*s61rq%^}KVLEm&k!+F4}CK_;hw zH4$~DENA1)l0Z?gdIISnWpHgsUghR8!oP875i@Zay~tuoh!{El+Zp?PtH`3IC774E{5ciH;Zg7 zyM}jiJNKmUHpkVyt=U)X+Qr)5msj4Z&$J3_grYPf9GhEOzxk8uVf47&AK{@!mUcjT z%dGcF2}9FL()&p*1Ht!UO@@659+9d00&Q5ubc#KXzkM3<(^aB<_~M7DBdm!ou4r|3ZOLwf;F*D=}43HG14Y5{TS-L^l@K3m)B~kTgw$k#g0O@JZPDMQcEI%z z)LRQN>SyzK4PocwQN=dURzB0vQ$qUj8juRiw){}?1J9*lk+!cg(*UlED-xfD`;<&S zXwD_>owFjuP=t>F2FV#?DJl2bMqimhF$m={IME0U`s{=o7E3l|Ogo{WDcYbsS};BW z^<#J{b|}QEHL#$9#OI%Vi!{UUWQjI%vus*gLkOO7WEl7fiW-z%vgt1p8$h$*zriGh zU$176CCxRRCQxU%B`}CQ$}^+-EfNM%n-)T$aekNprgdb9sKdj|L;x@V0zd$`+Nl>; zc-5LD_gR%&i5=1j=6zdPUXTVC_vc97sVwSR+Q4&}x!}3CR-i2uufWD-KYZ7Bb&4C@ z7?)X#eU<+=0oJ%`Aq zHh!bpuM;Pxy!?&@O!9UB()1~UsKL|D3T4`o+XtmO1PJ$R(uU=895JM1V9 zKtiZo(Eyz#gi450q`A1OSynG@`Y6zmeA3}wLEk}+ouRU>K0umDR>Hrx4^w8T8>Olw zct`;!$6N$@;E*q8lebB-7(bYM#cB-w7;i{-}1LsMYIoHiUhKR6jGQcCgC= z9%#oJ0NB-i=e<+zF-wYJrh^2H!26>H|8e4zai?n2{<5EO_!Kfhaq4(_M9T0MfV%rKU zAn^-+V>5eMoLOH|M;tG4MqT20TZ)K}y8zU&hV#9MLvjJa!Sq zkX*!|V%4bA{C>)=m)KJxS$vekU?J?pp_Y)d;(0v~u+`W#pz=nf5le=7KtTobpp|=? z_$F0~_-UfToL?~STu68Zx!FqClk_uvSi_7vjm&HMVH^EljBz-&cy@Xf_;Y{NM>u-d zUAv>%y%WursNJz)Q-q6jjC*kA+Co3KUTM``Ry0@jh^nkQ%gF$hlt_tebcah0+-H}d z_j7-gi)>z^JZJd?yA>{2)cEmtSm>SO4RP16F|5zjU8!t}ol)Y5^6Du5#>gNM6mzN6 zuVEp)vE8w;ae;nrA}$bP$H1SS)e#0m#f`i-WH-%Cc?(qQumuZI#(+r~T7XjkI%J%?#6%FgS=o9&r^%q1HhY&zAS{Ou^s zD1yW=d%(LQqrb4t0OG7q_d@bHtY30-eAVDQ{NKI(h} zW7tm|y|!#sOOavTfS@{p8E73%%-M^KB`*1?o?TT!{4EOQFWr z>Aw+IwUn7JB*YgmaVf*`Rl3lxb;74#9y|FGbK^qYbV2ab-YJ@H1z%KY?6JAJ_w0K_ zQw8qoqiyK4Oe{%@uTlR9I6mPM4mlt|Y~ax0TBGghoh_XnQx!Mn8L_=e#K%U6X*<^K z`m=hOW8*?k<95st`jP)bLfd?yG$BuZ`J8KkYS9hl(3J9$%j{C@Ai%&?N=Akp3_^DD zQ}__4PsL@!J9pMUI%A!b8FAmYYH83Zd>3v?O?7+mCX98D#=XcFvrR~jFT=y(A0TK} zs(;z1(^$Cr$EWnxsP`9GJWJS{p+x3d<<>`dN)U^MpbTTX}-m2K0gw`CfU4SVlJfp|Ru;*zaYOS4B1&Ho#-@@+qWNzH2*hfO2c!D?t4B4v zuD!mvENy&EOL6<@3nne_Q`!tu6mCqNgkG4p!j~D#Y_rlwxe7mR0VQD zk9rrUS4X3VDx=%apBBFU{N*lDlWr8-y6)*y zydNzbpVVZ4wxw!W*PK7;2JT-zX-kayOw&wS!awR=C-2!vI*cO9LvL3)leO@vd$(S; z{^RM_=Z}o#3lB&8gBTd}OUlxQ6(~+h~T5 zq<@aGO%hTqsJdj`^|$;%xyH0+MQet9-0#Vzl^`9jAAFx?RU&K`Sgd{&G^sTX*r%do zP~KF`X5u^4x%VaTj^3!f%Oq+na)tO-iJ?J2E~T;G!r)o-E3;Km*_R2^NMLG=_UY3B zA8ROfpX`_?TX=I$^f6InRPPMYH1GJja<4puyoIi}cl|^SIA~JnCq+4m6`lkdxk=6Ydr{9%TR?2k;}t)55kKin_a;mlvN);j&uzOQ%3 zGX^xHy3i1IzM%1d!w$5`kCZsDpshIOZ0QM12JQLz`|fPEA5M#jP4D3Wd^|^$sB!)p zL_aWT1VtXs<9(2FT5p&?RBe>jp|}6Q^`P_=Z>VKNZ-Je2*@S&G zs}>hzQxA9;0G-O)MRObv%5yQYi0cMx572v@e}-X>Ne)L1U+1axEZH&4uAtK|h?C zjowv+VziU|)G@l}5yJGlvoXOBN$khWDG4(ly5M=^#4k|Z`w>_O;RclicGxa`9|g*E z#K@nRmX8NMf)>vZm+6nT@*FEXoXOvai)>Jtb1PC|Fj;>P-bHlgY`5q@odIJl2fmC3; zF^C8%jv9d3feOUjw@gx1k4e)aPnJ7JIgoF1ekLJD?(ssz$-p6r5rx=cp^VovW3T-5PA-AJ#dG)RvAw zg4kiz+>6$3k?(05%)SY1qDYx%GpjeitUtiE_y>5pCtV!etT0S_{C*BM1N(C$K4MY* z;{RdO^cB73A$7>RR1kNLtryrvxCVX2NS|Kx^l-LVb18Gd0Fmvp+bap>h{l5YhSpT$ z(;1s1c1God<_T9<)>S~CkT})%QIDMf zMxXS>F0Xg+`aAucUKtva9z@Es^tb%X9J6M=^GdVoxHc|Efhd(;dBrbi2&`f}5*b2~ z>c6K6A!+$|_|9!mOSTi9kqQ;3Uln3WU)PuFCV?UQ37QZ=t+dO2bL*Lra*a8p*fv&5 z1cjstvZV*X#6>{Vb-x-l%kvNGIe1f!%q^cSnF-jdf@CbTw|@{I%h38)iaeiyTVxa;6%(TRfsMa2DYR~*!0nTw=tzLE9#wXn5K5ooaC-!(?tDEiF=iYdcz#^Uk<4=Fxcu?;Nehu$<$HZO z*FIb?5AmFIlPV|7yS-X;PJ}AVA!D*H>MwUlH?=zD2blSGA-Q5$rK!@tzP7E~)USmW$|ZXd1izbv)o` z=Z;W$1K^x6J^)OiuYHg9j_RoWFK>)?ZtC-;EKjw0fS2e;Z46l4>pA;p@IqtNy`21GfbszKCDf-wdALJdmp|f`9svsNz(b?d`VCJ z@EZ;4F*h%zQAQo89~FJP)@S~N9Pb$8S)IRL68B*`aUL3=YtF3KZ7q%p6q|=Z@saum z)5^g02^Hts4SG-`ep^sTI;d21WLVY%6`pI0g_?n)!_0y+CP4j70{YwWvJl28gaKVX znew>de9tFIE1LmlpsTEF)KKx`1Y82F(c3k@82?-=Q_Hx_PhL&Qjm!U=n?bp7wNTq+ ziZD#R@Frgt)!)i_+O?4=vgw2`ofbDjly@J*@OK0M zn@rN}bc*t{qAz5nN8n(K-&Xv0&BFFAD6tFOO?jCu-V&T>)(`mbl(fu%@?w|jJ5Gb( zbdWxx+AWC&)2tq}JqbUYNd6B__xpc<7HPe&+@e(5%mq5`@{PffB!xgs`t|_K+lUuG z)_4Of2H2X}iFR(fKRP#K{(MllT=ckg>jw0k)!vUk-Va?t0kCEXjP`ag+0t3{Z5}(b zBvD6HBJw|4eYfhiuOBP=ZUQp5kIl&^M#*@d2ClzV!K^RbM5`j6oW3O9jO8}!*y0T& z%zNJgG0k(=ke^mN|-1E900y^%p>N9vAkCgJy|p4d7qx%;S> zwCiT}QzT&nM|HJPOubAVWA-p{5TZm|$`8X5wB|&||EM!iuv2+j@!OK=^E*Ueed$|; z(OM8&nF7*uE)XEXD4432{SQz?la{|wJ>X)eyH(h{tVtp#F3o>~s7t{eujg&*#LSj& z!E~=FkSeJ=b~K^|;w;ws4j#JV5kK^p{(YcXc6*5A(p+={!(ZjO;&n{O#;(8U3)Wt> zPu-sTtRl(wpt~bY&Li$@|L`_632=7(A9MKL*l3|`_pJ@%$mi#?r$epkWhkV$SC^F* zDfLeMqjA1#NiKQ>oFH~FGj66alv>aQRWoX2TE_;q+Za$QX=FzdoeLt4DR^DPCWF=i z;}cAs8=350>BRjNlbZnI&exLxGq9i%68Lu%*RypC*hyc|hqpD_3-r z&lBgpAWp%wM}^7d2^G>Jx;6CZ*;W&j@@?(4dgZD*cS&~#O&{%JKfspc6A5RfWEk2D zbSVQt@saqsvTrSX*!F+X04+{Fk<2G!$uZw^1B1XvMcCNl{5al|ZnRe}v;ZL9RKbjr4I(3Yy& zEK6i_?Gy7&7?PazcER>^C<%-!2n>_jtf??Oi@up7zUd8UDP9p(n$PNoazsHl4QvSL z3bgSF)S^up#D9z;`;SWTylgQ>&hfr`>%E9t2XO}`Jgy9;5oGSXXYfkGLBZO^5GoWC zWI!B}0Ih3x(uF)BMR9N6y6_f99Fud1oAZX9G*)g786wQWo61mh04ja~8U~~MTw(JH z>2KX{3-@LtWHDcPngudj=xE{0tLJ492rZDPao|v~29bk^Do}BVQ~Sy`OVQ%tDqI#q zrMenfkm~lw1&=lrS;bEu0&*q?Ga~1yOfQWV$=AL{javc1ppb!H1&_TV9s>0YRSUV{ zlKP)1=-lBpwadTeFw2AjbR1YMy4?zuuw|hE_(-U@#4uLKyLjo_+a|TC?dY7(7p6vN zEhSbQTvH<;efnSlD(nyAa2Uala~sP~CTN9p(kP_5#39QLK63IX?CH0^cN_*vQH|>0 zYO)zm`&S7)dkiTu{%I$e zWzH7MN|LKHYz9)pJSUyhYICp_5`^#~d2YK?~0Wa;f{rMy?YAx{HXksw{lPj6O^M zB>Ivk*DHf1m|?*$DzC$Q%d$V+#)d)+BPm9*bW!}slJEaa%>><1z z$RNYVLh^|hGNEM-qWuQSXVP>IbdRTBC0mKpY=leNBGi?I@8Xh)JLNI`$`j0+XzKFI zKkS-O%%v4gZ}+f77<}C2Ssfn<{MZ-H0&z@v%--Q~+9h6*k_|mBq6wObkV)A1;b9wAg|4$Q zi>^Gg_ace6>6TCtMcg&Os%RubB0Dnc+bkq~&jmOl@U2g+5}GZ1cW^!9jR3*Sj_VDf z_0pT!x~U*LogLgBnb>H^qbvl5>Nwh#SK-N(zK`vmPe5w~c1s~Ps^tLe20&pjFk1`& zN^Y{ibL+yNK=5AP5vJqNBF})uW9z0Xq0+~#IUYBoje#;ozS?@1mzy!}F?wVI8;^NM5=!4Z2%*ELUH4N| zOA8Z`CB<@aA8RfsiiVr;!Gkjep-N&(8m{!^mKzk(U*GlF>}J=7%pyZ+yxB{0Pq9$9 z&G^YXdbG$jY?N!-2I%>3v4_~?S=~RU-G@KkT#JlMeA3#zu3b~wm z4FjE$cc(lBA;kd$=m!ruUlz+Wn8CIGNw~iw@(g*1&5C>TPVC?yY_$r%Wb$@fA5>R3 zZiI~R#D%QjSePR;2o(qhs^MMWG+v3N?MH&Qqh73}7pC#cnM<$$>`4$*(T}}AH1JH_ z%lSnk)o}mxD|XG+x#a$@#^rr;&FxV0^_KTr{`;juIv1U*2P`(ci&sjo5f;u z1bf;4{~g5ge~QBVC!09ZqPUN!6iWu4Ob-u*9d9=ztXfVOy84{bFMCyE*ktVY&c@+R zDUtV2Df&)xljv*f*na8pqFXXMvkgL9ZXJl1v+5s!2ZhgAYNchA+5){M{cwuXc-fCd zlIkWC6n7OOX)H|SXi-L90CCS&wKHXb*dq%o?|MZ3n2s$|B+usBP@=$Prm?ZNtTah& z&Ms5FdUL{k`Q0(1cE6v9!3;xi)_py=sFlflM7k?i;TzuSm%`hh#;}_HI$nNiNIM7` z)s7j?}x_`wxT56nZ?0AtqGr`KJQJs>{}V8jnTebN$(AleMw%GR7VjRH9?BV4%{0 zioL?)48u}b@w6t!o*siJuhU-A0vCdC&bE#VgD@ImG^$s*g%~j6h}|~E)c=IU^F2|K zD?)hJzEF8#hjTfk9Su^7U8>!FbtB1Xs4sg}a?(7yNSPs=5Bq(Yg^iwP18w1fh3^LcXZ`?QI;8T#|4`mary70DzxyLQF zR#@SH&Qgax$d5oFokzb=$#}&ypq81%MNW1+Qyc;cz!X`mWuCr|DR0hToZ!G4JFzft zaY&Rk|N7DV2h0UOInLM;t>>qc>0VhyZ61(pQJjvpOa_E9sD#z7#Dj7i*oCKAao13A zHdH@cdmt~${z@+D)KfNw3d`gwWU|hWBwGwYuTy}~;+x~8$yyi|{K9MU!=NyuPz#I@F8A z2V54$W?)CqKAm86hf%6-N!3gz#NQ@_&+(Dsjbq~1`Xx-RV|0ikecjSpvFd+d?P0*n zq;@w8a0w+Z*PQ(uGjPZ16;@5p_yn+aaD_72zv8GQp8aaE}0CNFtg`@ zLNSztZ+yZ_-!jlP|K^X;;;kiAtc3CYee;lEV(DP9Jgcdxe%Us#YZm(3%1+dnQ6g!4 zw?+}Qk#)V>r_{H7#NK}Vwkgw83K_Tz^}*RJs#3rnZ--_RT977^3(h4ILTKejoS*@ zf4%8pBD0G)llh!tWhov7CR`3?!fjN8x@$NDLZx0P_C8nO3*xJVjWNdl)l*eqq}_mk zh+?ZcFg)(#7PnM_HUw&v89sIEg+97O?_H>@ec01??$<46meWBTWAcb$klkg(i@T(! zgL`*9{^QbAfi>b}MPsLpsGr0lU)caZRCi~L3cK9gFxQGi_AOYDPGQ>rU zCYcfzI_E3C7kF7db+ae%5M3;6&2O!7iMVAM4_Pu@RVqMIflFbvGg1LieBUfB3ap68 zvsG;++ss{0J(6_=_sYt@fwrYP>{_aJ(HwNX4;>J0JCQ9cMsOvi5e&)vyS2);C*aYB zqBcdrJfrA9Q|H8vUD7{5*IN0k=4&4U*T6q@wQu3}IyG`iV;R{@KFC%z)Bgh*$=Hk8 z2KC}G1pi0*^r25d_=~{7h?DMyc7U;iYLF)VeOy(3-IJS~o-koQSMlEMeOZ-E52Sh80KNEmLHh4mT>9}2ic;W-Z1UstM`k<#scqFTrWDaKhmi8CjBIuz$4S1_t%h#L83*&`R|D zQ%zYb;-85vzqy&v@fFXP*s9yl;?T1_%S3J*Ut}aFN3wg5X-$-xR)~vkdrLqL^L5c& zG7zO075?7;JpEi(rT6Xlz~m`xcT^_{LS2-Wx=*g3|L;c7)dH&vLIeg z2$DEsc|8~w4>iZmi2DAL8v9uEXmL?{HWl-7=(CuchopH?x;6z9brH1@`IuU9)G&4u zdQvRAaN6~pT-#?sP5YB0Zx-s@!oB%*6SoH-ys*VOl3I z^@F%ZnT0`?tx#~`Jz#Jki)qESoujCH={LWu)Tr(|2JOph3`N992YEfiJK-!r(fZXe zT?oq;R-wK$`fKKENxrz_p>P_R^0EKHi&NXMp}29h_|u;^O_!+rQVQ1Gz&wdA6M24` z+E>X|tyl%R(>PF1)I89&ZJuoK7W@&-uvlKD7s?#(6IGX+Cq{!3SalBO#<;5J_4LhW z|Cu6I1bl;D0l2c3FR($#mdFpj`XL_tfaWc@tl> zi1I;iPpo2Bp6pu^*-{PNOgm+V9Wk|DFB^VuO2EgLROfMq4Z15GP72jX;D`P#+*E-7 zu|L!29L=71r8TM;R>nxyN%8TQp-}62%iy9Kl)PPdL-1s_X^z3`tTZ|Z#yasB8IIKz zUG%9xIWJSx(IV~W5{|KLn zQTK1EVZ(4eU1(PgQZ&(EP(XZKFm(oGk2?>owORlu@7*MPt2$UflC=#fc69phNW8%( zw8{DvT`zdg*jH_CVuwY!k)c+MK^g;2B+OG?Z5%2`vDZ{iTG@Xnylp76BpHV(l_**Y zdD6qzLvib_&AlZ2yUPqp*=4Kp$i9Oxp*dyS0@tDG-ps7dw}y0B7^v~YIuQ2pt0S!? zP^$8R!k??zJkL?9-v5lC1+32^2BIxuuXK4z-pU@95NzjsHux!*VrvVDqD#U9YR8kW z6VMm#B07cfd7p_Q+G|mx;pkTecLyEMb{$cYT`g?7F$DBk9p1st&2o1gn(mSHwP90& z^&QqEC3s|gESk+B+iBELiF9RvpMn_A#VYG)D}>QWjP>n#@1n7eom;4CP-D;%ec>@q zbZQ0l?qs#Ep3osp0r%61@{cH+hDsBNw_cGLEz%~U4g{bgM&bfp(W{$nD!!J_vXkf1 zH@P|xgmK1Fdd!iJ7BVP+sQuE_K~(S$mMXUSaU>RqDpg9jOmEt_ z2|H@{R7seBo^1Blim9GM&USTLk4~HTQq-_lxe)7=Fy9`>(=~kA(JO;`Ss)lhN8ee! z^MBWE5r={|w@Vn+E)}&e5f-=tGX*+2?x{5^(=ahc7tT{Y_V*~@0SJ;9CE<^`?op~$ zZmEKd+`2zWN5U`U_gWQ5FqjN}ZCU4%1{Vnz!EZv*tcc#tk^@vKd~7%>q1jv}~W z-XSmdlmwB=`gM`AUc1Q~>3z_QzCrPI5h$Ay_81=OWc>rL-=Y%(!B0Dvx3bOLup_&6 zj{o$>+(wtk=46PacRT+apDR9O8YaYrMM9EP@`-=nr`T@W$`~(3j~-6N=!~+Ihakf2 zBF5UfR5A*D-NhH6;*b)F-VKOySrf+Nd+DC-N^z|o7)@+^3hm8dEwd~Ll#$)aPx>7GQ1a~=Lo>P_tLq=&DC3#sb#tW&1?U3dOU_&NEzZo* z=O^8^=&zvHCDfiV%(#2^W6j|LBj!~7PIm^pIs+yU4a0aW#^%|I{VLVQ=@n)DCV4t@ zM`PfRucQ&pY01VXr7M%AJOZOCq?hu5NTflpm>C7tZJ*+?Jk8@Xq;u)CNV7WugajYb zP9F5P3x!v?;l3H0lacvSR2^|+D?#R00mA0d-n_~$r>!J2Qz`E_2Gjnj=6nqCt4tef$ zl@4J9&DBS5Y(kn)>IdFuF}lt+(Xsp`#039Ext?(h+RRqQ{)ol+eW{iaiyB~xy6y=P zF&S45RvAQ8i_@% literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-xoom-with-wi-fi.0.jpg b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-xoom-with-wi-fi.0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a6c993291eef92ce1ce2598ad1f2806c16688321 GIT binary patch literal 34430 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%0Ad3q)A}R)id>CM& z;GowTG?Gw2XahSITKO%@Yf|pOc^h`9X?^{+9i|-X>PO0kywT>qw)ulmM;pXOg$}$l zbv=E?FF&9-aajqbbY+6yx1W*EE+NL^77_pm-G*5oM2O5M+#?7{;^Y=@wAN3c=DIma z87dp^Siw35Cd&&i+M+}}rqGxhkC91U0Wa1LIISB;#O*R0xx9w}XdMA)(B-khLFlrw zDBu+^>slAHUAmOC8ilWecP+{M3P46lv zWoYB=#4QpF9TdsD0stC5^qr;e`l+iXEBOXxcx>IOP*~omxgrof&tXDE#u`RP^gX(Zacn>hB;#cMBCLC_b zNNs&AY2mYVdJImC0_wOX^VYcfP>WI02)cxkWgRMwdhRVL=K@HuGPIdk0})SXT^LR> z1w=TyxFqhVo2YVLsbo5n8MSyhm#Y~@}yszpgY7Psb}RC+p90oMsKc7@x`J% zTv}Xg&@HA6%rEK30RX{oVKyH3Sv-jTBlg8en)mcuWVE3VnB-bovQd{|K#O*hTp_4` zDC8bjeMDY!jffJ3tB#Y~i#2^D2P1&0k(j28svf_T6M}JfUdB8{5NwLBKg6V|vEBw0 z+sY1Rl2pb~&K3e3V<9IKC5O#A${6?!Il9>F+)9|zg$>cq9COD0RnG=upofC|fry}d zKc(-Ka+?hTqUh?Y1go0Z4!ydl5?aQw;;d9OzW^vKh>y5>pLeu%^OW)+Gcs!hv$p6q zUUCS&-SWNkhm4I4acWZ5akIK*T6)S-OXZ){!_|~)4-mA;>6Ib*R`K~C!PY|}aYHlj zR}!~)V%JCd>zh~bpmTVx#vdS$O}82MsOEodYOPH!ns01o!keNL35o;CY0Rm#H{rgV zLU19NHdd!sH|*pK3t6U3hw&Ex1lgkyNQIc;cN~n}jNr+ad`MhpmCE0)tP(ji!qx;y zx-T>)8wDrJ)<~*)YRk>HL}o_>OLXQl#Y+)m;;wLz+XY_D`-SDNU;Vari(`=j#aqfJ z8+Ub-KqYy-*w`#MNG`3hqP;63afmJy1*NrN9VZSW#7s%EP^n1;Slk3}41`YP@%~Kn zisevJ9n04!KDlFXAupWdmi+1SAMyRvZw8cP5c z2HVzT_@3d@6tjfm%q&FL_qu?GXrljZ*cJ_>xOuTZ0zbX&LE5Y7xH=Ji<<`&lcfkQ( ztklm8^gw6aFAp9fxOt)@#OciL_1?A}4BE<&(vB357E0{`vuPzj-I}J+q)2T$>ZuWa z#P{X1(^09W7Ox`Z8TmpYh%Z_k|1|54Dw3l4 zn=M!{-tdssVBXN2&y&p^U5O(MI0pG+TyzNWn2PGGTM(ta)0)?c&mIi}*+VkLFe6uo zc>BFP{O1DbxYrIk9z8rcS>FO!HVgRph*f6(dda1g|0|rvXzY*mgU$t%4g;a!ZaCoI znv{@?KfncM_D9tadCp4qY^fnmS}GzdNJNi-j|!B41exW z)KCaz^3M%TJA9%9sDrBc#-tpTv1LD%*)Z>c?S?|zAn~}#wiEhI=5U=)WQ$4zOiXdx z1tdp-(MNjjwoqRw>N##%ETqY) zuel%=U(okkXy_`AI19Qy%-nKfwnb}lttrGBLcP9r-ox~fL>=<-AzBC!h(qC0A(&g4 zZBW6QQ9IOpSJ%*Py)ZWhb)O?8hlG%MWcF|T;Tpz3~vmth*O(wTx%s5aof2zVbpz!5TKDaxk4`poX8ma zbNsuKJ1r(gQ#nZ+2ob`G@b_f}S;_HawbC!BXC~FQ+JDJJE6nTDAv*F%(n?BJ6y5>8 z9Vjq?g~2TV9BbF}{OqO_6RDDqe|`a;nb?*@#`hwD#gPrX!c7Dl_VWC869yyoZ3qiOH>_qQeTK6K7R)-%hDEGfv)Rmxbz zzhjw)DZ*dornLh#iU*b4LaY1rMF-rU=;T@tqzs_+5D3V3MbcOLBN)A9&SaWd&K)Lm zRZ+p{z@xafYBFmB=F?_G%m7+6k~m^1Zh>)$>}98fVLShBR{F*M{HC&vHt;WV`eLzZ zkB)s8`V;UEayvHbBcsn@U70_@{5h_+y{9>s_2wjRj|w!#U;xL-CYjNLf1+({xQ7?l zP~}nS!8|_~MaY(rpQh$naj5wc^*O~_BiCNT^Au&ABeBh_;z=no_#L7IR?Zj}T)-JB zuGYIpE@fEf#KVcMmW6GFFomKE9V^J+$i{2)rvibsZNCln` zws?y0si0iQXQR-!tuT4Y5ZaF*lAiyZ(0OzvpQe{zmZIYt)mka6js1)R{R4CNx-%j0 z=>7nrA1hznMA;Zm7uHsk@s`x^Mu@;Ce}FMcLFF^QELJ}^%C_#+^?4m0B=49D4N*8# zxcMVfhopc;2Ol z$`r=nJ~;2qdhK_4`$q?3==Mds5ILpg--i7GZ}^}dOcwQ5sqJrh+2LO5jx5uXp7c)6 zxP?|40r6da$3Doe>D7Meq}#D~vYq=YYw;FP=VGJPt2Xn9b(QWNTM&~h9v!n_lFE4pbp8GLC4 zdh^7$GL4qK4>x!L2_!NR)HfavVn_603B!_Cv5YQY4fD8j}_%K1senbpE^+haJ3mj54Rhgzk)2zNX*It&f8V<2eG45SoF~wNj;C0jCW2n5Y_|2 z10rA&h?qfx_6-JA@@pmU!6B?>s{NfGq5{q0ZJ<9F751ieTZhccE0!7* zvC6~ZN5WRNg)_kfE~jy8ytnhqv#OdVgtGGmyQhq4O$u&mQGBRtOf-A>024a-SVfEh zv>}RO>i3-cL)^sZfjM*V-QKd>;sVdF02vt`GCiJCnF5_ptF_x9iUg99#GB&eO^#|v zgLh8Sa*y$ustwL-S63ZT<#sDlB>sVd#j}yEHjlizm5Z~A%eto3?mvUplC)Z(Sc$N9 zC!{k=kX?S}cels;j}?{pNAu?^?MaMhU-1a$N7KzUg;^p0Vj3^SV405HGaBL2;WuV= zQqG*C+bX>}!I0>$$_ZHH;GQ#Z%uan^puR@VwJtfi1>M&yz&THT2vT^A^6k%-l&Yxh z+yfd=X4(%g-ZsY;nO_COJdWj8%ltZLHk!`$ZRnyCu`NwqGSg^l!tbQ0gzQ6c&@k*- z#C-$_XDzIZoNWcWQQ?K@6;&n!g|NJ~g#=|J$C`uXrNn;?@ge9(%f;}bw|J@GJN8E( zTf$Ttci$Dd$HpSl1RLr{^kH|oA$IgCmuc4PuUFZ?Z10H$I<#e}6g^-tJo@&NO6$;#PBdk`@QDk$a}x4-dLn5F-j9%5 zaaYPDN(zjNFNl{dQboGz+n!ViX4sdC001Tm?$y1@DGh3o>$q9sbE{_;Wl7)W+!K{L(>gmkGXwYp*z!^%7>Ud| z+AOQ?z*!PapV*!1=(YA+nXBX3H?XwAf#e2KBz^vX6|jo@EMZ_dy$xH{=My?Nxe5tM z3cP^8n0nbhahKMtj?YJy6EO|*za#B@nv-}Mdss5@dO)YnzT&eR3RHCnJknnV`MzG0 zL(b}G*}OR(F#R_(-y;w@>FgeFlt~=eFNMYY{)SGSCZ&68d2f9vy)-ty_L5~wX>GPP zTa`(DGIypL4^Cba|DAHiJ4ip#cj!VqTDW{up7s?+Rrs^rk{SgOO@cy#vK^C!NYjWm zz$`YX5{tCn8eyKh5-T7+Fol0Af#juBieM4Nh~RpN4U^GQX7JgJzdI>x!&i|TR^79rlZy0)xs5mnvHhh^j%2CULLRC(eJb;xWIBZ{j4Tc_CU`RH?1N2%!SO1APAvb8i_I zSGP2Xc0=RAB{&Tcu+cW>O?B|u1~bMBn) zd^7jXGk@>Ts$HvgRjsx6dRDCx06>~9Bpg9E)@Dz4j7MWQzz^Sj%Pp2!{ym3-cM5%yek!EqHyp>cGwC`1(3Po&kv3C{3;FWdBjCKAj0m*V6>n>h`tfG-VTw4)`Q5uK~13AlJIjb4J-2W&4H1W-l z{>nPpr6s2`>~K*w*D)~&qUMcSsXD5ItDFbdKRN-8Inq!7Pz->@NH-HUmjKCP61U9@ zB}gyGnJu=tze!af*Cd$maoaL}ScR%cSbuY@JiEht(xBPfE@Y>Di<=B1Zs-Yu#0e7* zX85za1(_B5aH<>+3Y0JIz?X})xCxqq6^LYH!+{KtKp=*%Oo9$}8M$KUTEE2Fo%SEV z_*a$DsDfwudNQp5#+2o47c2fOHCTS3fcTlU|s3Z6BOobTZJDZjV^;7&Q{A>|*IKeiXOMD|g4xm33{L4rvYN*ur z3)_*?q#8z-H17+zY>4f1JSZeFl@&r4?V2+7tFY9!1HK*r%Ec!Ux)oYqdBKDJ87&EN zf}PnJ^KRIm?C0KCUP!Q^i1JYHn_hZ6LxggM<%gZx2d$+KUx}3sH3OG`T^30Y>|hw1 zBN|Lf#ox%FV7(p<2ysfxQl!Vai*>gx)S2=Rb&0Xp-OgT*xdTC&ofKl0SKOn#E$Gyp zfU|kB+TW_NQYB6Nf9zvI_PX-y_h3QfiwE56dUl@tDh1`fsd&{#!qdsKI9>Ue9A*jh#&^)ne1xOG~c8Pg#D=h(kEFt zQNDl2DCOfd9@}s+TKkHOd(08b)~ZSU4Qe`O^P)lwvhkm{f(HL+aJe zAHeyCDO47V>yKEUJ1)k_0rU8i+9Qc-_Mlhu_&M5(yd5ixdI%70;OZ_D|8H#4fWvyMGGrC z=h-9)-Ob;Z%6dY^eE7;%nka^>XU7|Kwef1a@)Vx6Sv%BJ8YH>{`Oq@E3S`i`ZD6A5 z2PD$wI^y79?6R7+kprdoV$YP9=8=p^?L*t3Upd-1YM%Vc<2#HGbz9%vKjPJ6KqAD6 z05OJBZU?q49+UZk4i->;*mgbVN_hu6?8%D+#99c=&r|e2fO^|R%Vy!O9Azhi{a&PD zGsz|n%XH(Cn&%6YvnkSL|4YW60>GWIkCr0|(kZ3DM{Sj>ZhXDa;gqdaTQr3C;>~$7q^uoamZlGtD);8GX zR_iOxWa-Z+^$ex#A$HFSMQj*UA5)p=ZTy)1%~{FbsKIVD9-}=R2deqRaUGHAXwR#g zSWE!W&O4`E!p6i`*IlpU3~(_~2%zUvEfW~!xXtM_x|chk@z6~)s+o66A{sISB>{Vz z%`vAC-fU?FZKDkx)80?{_#C``YT#%V5XCP+QfV$(VUWwB$c5Gz**mDZ5>ys1rn!7_ z5u_OFy#t_uL(yIJZ_{IoVGU-V3RWXH@ZK!{b2AuQXjXNS^^dZME`7oufDMjt%j;kC zoJky_@xjIetOF`-%5$1Ev>fi7fC!qrSo-7M_w^-nc8j`C!96T;c{IUUc7 z48X;S<^cFC`)i^?%UIWY&Q`bb$g|%YGvcVxuEU;BTag9?(P%z(G?cPQ){3dFH>+zz=VnpK z-3}zLJAtAi>I*8~Uou+9y9*2T^%@O9$ee< z-Hdcjbp4G+yFE1z{0v0|=QBW?7Y*{`Ewi6-_>WP`oM#we$pxP93`5^0I?myhnGSvq2bs{ATHGTLvCe;p55NS7V6xE>XG>J6u} zN2b{lUmErQFm3zX(a>V%M~G}hUG1i-gQHvemP&M6eO7iJkx?!O)nmj?$(j0)Pq|Tn zbYZx#AexK$zH@xVr!nQ!@37(;+>91^=Zf90h(yD_b7>8#L#!iRvjq38X|%qCW=F zTdz49yuUy$rW-Gk-kicnn#}vy*9vaO@e%X#b|6g z2!n+5WWS|k)RY6*yvV;=GUN5TI6XHOw|UKZU(P41q?!At;m!ECm zpv^Ux9GigEoH+};EVP7NG92G?S(^FunGZarINX$NC0P5(AllhlZOC<)9;m?odP2Ny zHTUY0V`t*TPTzb&YpY#W*q6GURKK{D*rkX|^UNiI+KfwFT z!QMjaXJ-;ieUl*Bsi5(9<^*e(Sl?%bWT(X!r+`MXxUdCObeRm@kLG-{bCPdd1y<#+ z1#{m^KH8l5lT<>VzijnJ`SJa4eKwBW!lnrGj$&R-NM6FWaZib64F-m2>OYXEXVn;* zre?O6H_)zB`~d(pv~x4vMV2h+M4K!pFxx@2=t&SV8{=IoDqP)9 zjZ3W^HGX|mGN=N_s2L${)~9~_qObd{klAdwqwxI_KUbts}+XV z!P~vv=Qc61W#{X7Hd~ezybMj8P#LSbLG>(o=}#HLjNeEAeBIlZfY8Vr?m_5QdeRWq*e@tldC&fi# zUhzYi7A~kn8kE2!6i)&~W(eAkHt%wnCIwvL)k$EZLfI^sBhvpsW zRYZg9;F8jqB%qK+rbMNxoDZ^zzJm%6UQ^;W9>LPsn$n9h43?bkT-eZu$+bN8B6gX~ zR!Jf>K^Gm z6q{HD1VR8H94VM!sG#eKT(S&678)lpWnlR0-Mm}2=^G=%I+&8fa)YKe=m@&_)+K$C zzkZ9J!;&BF0cDF9Q}e#nP8~0pvetKp@G@&s=ykk(pk6u73k)+@55#@-_76Z1RXqfz zcWTn&LeXvOE^oxqAPof#1BozR@VSjVh8WvM^AG{=U>p(Kt*Q6s^}4t64o)QKftTuk z0QP%T(*<90-}~}%7{AE+m=?3Ir7c5y(*S6a?5C98u!6%jSD`Zi5_o2`2$ za}Aiz^D@4;gdIS!r|I+wqGjvY(SX+1EYhgz7U2mUoGJ#HlX^2YG~12Y9~2$vlk7ZL zefyA?m>fYd9SXXNvw>_MF#rTBZnbHlMA@QS=uC{7?>)+NsR}JR{625@Jm;RYTD3mR zDplVyZG6*E`=dd-CNEze1Y`t9OGZV}>SPQpQqqqR<4$tu#$f zLX%j+V8#(5VR*|#R)){GsIk8BCkH31;%qT8fNsofGR=>P-*acclYVZdA&J9U3Q`oo zFBV9=t4owic5>{GYtYyPvs$hgIk+yUtpd;)2UvWodgUF47B;>ZabK$CS$<8rjvb)8 zO^*Y~XT90`n9#(eI<-oBs22NU#fIxsz3pwOlPnAk00$*hp+VtLG=*^TjI8lA6@f_x zXCs&fe;zwG38*L7GY|^G2?0(2ROR3-#FcP;F1JBUs38oGgBNrp!{R4* zI_!Hu!NnDwfsp#KwJa}TTsd^J+=rQ3)48-p!8Z}$9MAdY-KVRDA+R(}983Tv{t*B} z_xUk&P`KKQh{6M6%N$a~12-TM#MPiUY<>?(_q2rX7S5wfhS6Lf44q|UpjLtP&@93@ z7z4Wt+i10F!jP~F$xZa2z&;eK9EJgoj=-p{qqI z(IRWFOaS+D(d9{bmgc~b`&5}xcHM*Gx}nVuDqE#g{u{-~S)8h5Fs%$6;>G8K9>Z>Zdj56VjtPIE2}-njF63w4KM1VhCar|k*qV;vwOl|r2UlVk=tI$z}MHs)-!aN zSd`1f+GiHmz7_=(Mh+lXHP1f)#|db$%rta9q*1){ti0u^oy9TH0~fCB$B;EY!c1Gf z@dkYO#@N-!#ia)714PmVsk*r*xbtJ2;be~`#AFtF-54(Dp z>he7L)v$V>JTvAQ9tzfR+esZ024xy_Uuy>#yRBf{6EtoJR3@IW0^`ykKfo{hF3ELzb~)Xi%h#PWjMuJ@e?Bx&ymvjL zon5BfXVSblFC%Nl*0i7Z{yq-w3TLzL2j9lm;SN^qRVtfqPT3qs0+hbUQu36+0iTE) z(~#av_&0?KBA?5*$9d+Rknue=o8@P4Z1k--0%V**;CZF}*?mMB3x%yS+g6$6q)bF$ zIjVMIYnEK(Mj@&kdzzrW`TI`;dn$T6{0v!(X4OepHAw@7C0TPHR+joSy z*VOYKh5 zg8JpM-X&2U>6U3mPNdan*{Fj==ABuz1hCN{s1yOPf(UVbWDm@E77^RU%8gG~BidPq6ZZJ}P)UI*5t6 zz18`L)b>-s%}d{mZ$aH`@5eX($??ZKD&uz^<_OGZQSTAiaKt>5|^|pl1UR72X_9xYF2kU@RUyCKtTkZ+I%1;&&6k)MmQq6n_Yb@F54RlWl!_YgVtJv{ zl3K*4xu3M2{^0p-1DF1Hy4`sC2GfcVF!nkGzi%r+?0ZP7w(fSxsesZeC2PC{mR-&H zIG}*GG~B{F9Vy`mZ;TOaAbZ_IDk<^!pnO?)ld!L+VRghz>1P~@6ZJX>!(kz*aU%kb zpwQuj^eue^fUrxSzEoG$hTHGIUv4@5XG`Hh!MJGTMT(fs1CI-X%lRzNGRHIYw;&?b zuDS~G&A@C{HWvWgW)v|+(bU%Fent1c-ZL^FYLHRi|f5(x=Ej!=Pc>UN2%0WaCK@tq^iYGyB^pO7i9yZo5+jy?Eo@Y&H z6_^}?g()^nfQ6^5pkA&J#?`PhF?r` zCEG@gUL2G~9e?X&J)eEWsSZ9XBk>AdOH2dN8_w>}b~kKalUMrRRnida(zogw#SUFZ zKeFuosJQlcPM20yS65#(AVgoUGt()X_z6ueFo6URvCG72JrZ*zH=Cjs`n9J9@z!4?)UtZ_T3aEIn9`BmV@xM4p zh%!D|nPbL(ws#!bXZ>mI@=b$4e;c;^;SHyAO5z&$TTe4Be_#Mn9*$T3Z5qFQC4|_CCY0!K2lp@$N-sx-|#9~2KZb2dfA!UW_ zvfAt_eJ;;RcqV>{|yzN8qU*mY-dV1Yom-WIVEazqfT*joqwqk72wo3npO z!qP16!%Ub1fR_W?DUUqSFN>X~Z|a#=AJrD}aD@5}rm2xptqF&cNPMG*5JsSnW>6k| z>RwDxUv5}%F8y3Sm0e7N%~y8odvHJ*0ol5SxpS46z2l7JSZME}MAW%lY?pduXq}2z zEmGUT3?cvk%q_TdtZ2JG?Uhzak2Q_ufjFMkG|#e0B+ zBjEMCkf4;JkABpW815^*;A7Q-8F@b*f~r6goafy{!1;t_-R)(ym=Eh$FHTK{)apE-74Bt|M;#d@{neg?9dYT9MHKsg|o2$9-KSpy1vwbj)&j{>cqr~%Q_UW3) zru7o@Dm2m5mVx7-yEc4}$7E%yc5w25cC<8_B-b|LDNg2L#HpJ@aMtmIRX3i*11O6b zJq9(b$lS|fSim$n@IpWg))Sa|+BO7-=`9`I4ep~iQh};}ld?*2dh-Ts#Ieb924Rs! zlM4ZSdz+-@7Ac55&@lU0Y0Bm@(hGtAB2$?3=+Sp8j$>L7`u5=K311}91UHcK!-Bmm zPRANuioAY~sG6jR#&oN@mDRry9~rBefA;?2=0GzJp{}cg0fWW&0Fmj+)FA=5Sl)t5 z>!jM?^m_Qs%O|p?1|B}fS+A#b6ULSB0$h`3z42@|rSbx$AG?0~XQE*TRe?Lh#Sa)<&DETj zbYiFwiujjG3q;i%oV7}&x8${8BUTS0g=w4Fdot_K1)50xRU{I*v`N<6{&KdWAHVT_ zHb0*q3hGi5z&sz0EVkB=?ZonF`5lzWyjVMNQ!&B1(Cu@5iOO709*i?&#KzHftjSn; ziKgaU^hND==7O=9>DW%+5@!8I#^I6pCAA*Uguvp5<9cIjWIe?f&hQ3(h`VjDG)Rt0 zfYrQ4kn)&@#xqscw3mfbYhQ6K9w5CWgQlDrx{M6_%_kt>&2{)B^qG>o3I|7(hQzyL zDrt5ZPBpZ+_zUtb3%UqUc-O`92++sq{o?U4n@e_L$$tHZJ`H|qgG5l@clMz6J`c9I zL_=@*jL)q{reTfl_K~b)N{W3w%3Yj%Xn0f#?&_Y@hGIBT5bUd`X1#t1O^}b-s8lN` zsO=Vk@ z-rbm!e$?z(MlY1=ap|~G){_$VpBX3A?%JFrR3X^3Ok#MTkQ{8`#0sczeXx6riZrwS zRdCZ(D>xZzH2-^W9)0pGcFo@21Wl_tQnz+{)ZCm?0b%Hb1fOx?5TV z!jw@}eK3U?!7*+_bu*6THzC+cy2sqyfC;GLsbKrkR3i9DnU#D3TaE%Ojf?(W`>f#UmZX62W7kS)U-r>8tA)Um z(Qq7T=Vh;;Z7dctq{C6|%ie zVQ}N+kEi~OmIMR?rDfhg?1a3IZZsE^4teR@xH++3!K@ve(mtZ84RStX(dh6LEh`Qy zs`UT$0WZ?4QA|H0qlMh4*w%7xotVzqwDEu>XL5#Ckx)wuXxorQMR9) zK8bnE!;oi_z%pTsRqBKn9psJvT3F0NFgKx3hD-d3qCQ7swLcRK*^~uOegTon7cb3~^Hw{x%O7e?K#k2I*<5b@HPC}DN zu@u}K0Est12NEnq9&N2r%ak8wV>bLT9T zGN>z-*i;1W!PcGV81th29|$kc(*)}!%dT&?l$s0PPo(b{#bu=7*jykeq%(-hlVD53 z(b;3szPG$3!k!DEIoB7xqbLIkwgBk#50J>)^Rq0K(6`k$nGGdkcG{L7N~#kXGQo)c zaVC+AlN-dfx$sS$F8TUgCw^+w(EMc4=e(sau^{RlJFnFvy_T1Ix8}dV*<;`&b3>lt$Fq~0Z8XSj1TjKY;jY?0`x$VSyF0kMH z*sOS4tLWCR5R71Q7$#5-4hgg%SpS+*ts9`Zb?I2eJrn1i*ANvPyeadf zZe9b53xmUD5&#iQ(o}_nzHS)^2fd?1cWX@zi+!ys984I%S(!c1&w^4g@e9vL&aqO8 z&{!SPUqdlt&EIBw77MLQ7MiApv*UqoW_c@Uj1gw9FLqoh1+O13C>57&TSWZB7Xtey zsHw5ZWA@}^sXch(7(cTaNs9x1bs?mC4wNR!MSrJnI$j_}R=*U8pmT<4#R?=s%5F(u zEU>tD?}$mvU%kKk67x=DVbQE&y45Uf$zP@MyA?Rq?mV9Td6%qeFE|bu)L7fa{L~?| zcCfluHUql>VK&*alK}xFHbc3oRFjs)E^UCy|q`} zF6thWrQewG*`s6dw^-u!RgxgE0c4*NIX`I7LfFEOSC|Z^ib3kOH6WS{7oAKFMkJ}!(31SE z64PQ69f*KgC&!1=>tDayNWdZ+)pXn~Q(DZX?Q24Y7)*XF*(yKi;aYN;$qTEni%y2Q zhBLyXi11-;qDx3~cN27jnu0GsY(KktjwXK&tyKSrr9})TE3O44Fv_LZ+YeY8te*eo z{e}NDvNX$p@9WHtg#Xj@dd~v-hT|TgC~lRZV$E<6hkP9r5+hxdAcj-=%+bC;{$~d6ci}F(Rx@Q<=*fc`I?$tmT>S7q|m>!O8^0tibbHq3;YwI>F$2$IauM3< zvN5AbBic2sJ2`0)3`cpkPq5Q4(?VRZF7?Ja*h`!TPs+-d-$fQ}U$bQRw%jE!e}fE}1fbcP1}Zwbh%5hrZ#-qexV;NCU%@IA2oA?6&G)ku#!I z1eEa{y`vCSDs5xsN^LbaRegWk;)@)iH{a}WGs;U zz0oow-eX=GinmiA1W6iT{u1*T!$w|sBw$4Od+_}=;>%OqzHFfdr#RgdtaTWKlaQAb zf{rD(gE{xisdeze+l5B+Q?vc6WCRaU5l0d?JfRClL{ir&1~lTeH*8V5T{}9OTs$iH zo$*L?U{5%aaoau@!9rL!zNzoxhlzlL-?vxN<9N~FBFO&LK)_d|y_+(kw;S|k?C!Qlv222VH zhR}7!d4hCYOfn8!qq(?eP8NtY z7FZl4x~DbJtRm#ci6eAZ@DhdTSHAOH)^^x`NWRNTqola8Yx*aui6Z-2)nqNL(T!@s z$OZ(r7}$BM#;6~@|9I(UYDgK}NTiCB^%4!3MVF&GZtihf5?kQBV6WkIsA8#Q(T#sS z_tX>dsUS@*2$BF9003~<;>sUK)9U+?t!;v3qq;jY7;1|qNehj8P)K=l8FJbQ^CT9WSrE=; z`A~5gAMYd?2s8)~jP+qg5!2u*(7$2xvgE;fBJV6_7tM6g#$v7da8r@Ndn2F2Is%9x z9p4Bimpi14Yanes^3pN2@8I@%!|1Xv2M>#VpcgD{6MPYVtHoUJ z*um5E>!N+J_v{Okhm(oY+JJe9pxfhbrQzMYT!fIn7UBty4S;BeswN)G8ld`X&5n8V z@=;^GG-;{k62E?soI42Jix?2cBqaE{#o*y$=<68Qac;e108isz)<5o52~ph< zw%VVxpOow#{8nnM_*(8@OxPZ!Sw%*Y5Nbyj(#<3-J}7tbi+BmczhfVFW+OwZy{Da? zgJ4bnS!?+G0GkUm?ev+p?|<p&&m4oOcig&0oK9616AtNf{j~P4$l>|Ap5o$K(w+UU%OkY^l|XFDOO^&AcrY4;_HAn_kBQBjq`2l@V37D zl~bd9(`vKOJfRc){awH$xL966eQO2BouDqrMr)=R94K@CiR;6f+RMn?wnE=K%OAT* zHxrAVD4jl_bh3V+e%jXdw6o>3v>g@C%W~Xw74LAKSa*^?LJ@((PBDdp-uhjP2s`?Q z9@QX@HOs7PZ~6`~7^sFz1wI`fY#>HYe(;2=Xh=@A{i@l#97IVjwmQTsC0^Ok_Q1)N zlJoPK*W%dMjsbuBM>dRfS<30Of(Z-(N|sk$I9tMEdL1)jIELZVP01%ZtV$Ttl!2b~ zsA35}+CSc8o^GcwpiHe`WAZ`Y^=`(${&YcOf3F>DMfdRZ!Zhz*{Y*g9UDB#p+8Kn5 z!-?5vczqrDBkxn&H*32C+7dc@791^)R&ks&8V0^=9m4+-E9T#l+K$zHo0{;W_uu~4 z0{Nwo&s82nX0x=Ru6!2d5{Cmx064%_{dfFqO;fI-8m7H`TRrqNwkz#d72$>-h7(ET z(6k!GK4$*HV%AoxI}PCe*P<5FyhN?@(bD6}52KNuN)vvBEhTpkzmkL68Etpaen}Lm_ip5p$;y$bLLBcNnYoD1Dcqt z;1D95dEoFxdd}njd$D=nxHbEt3{pC`y44`Tag~DFg`6u>$diq8Z7ewl^jYNdNPEz5 zNI=D}F~5HmwOHIbA6a7j;hc;otBqqjPlVfZ0>N+l?T+S=dGZHP`>*fgKhx=E{rcGu zU9@H?hxp`Di-E$Vz$s2)D2x74Qgl*Hlx{=vZ1xK(ObrewfEYq|8*y5e@1wp$?_Gzl z^kF2J2+h!AsWCenx&;DaSxKD9YqbA+o&0A-*F7dtAQ3q~g}IHj;cBZ}2xHc(#>{}= z21I*@tFWuB^Bn)mD|$HcZSd1>W^*~USp3%?mO6Jo_x%CPpc*-0-{kLZr$}Y$Ayti^ z7t|Q!^m+>2)z=lwYBu00w zan7n7j|vGs&LkUnY8hBCAj}6EBJ@lx&EpQpQMtQ-+iA{BmaO9$b6=IbCDt`$v0|$f zD-ADsVn`ne5sny?iOHif&)O*Z5Ng7vf!tB7psLrjU-rkqb(iN!a*u!p%g`u$&boZd z6d7>*_SvSfZfd@{*|VTU`L}b1S<%I^jZzAJ>zP{?y^V72dpb+*bp3W%dGuGV&lJH^+>{~E zQHHM_BH#?_C!1&Q?QlGt*v59RZ4#ic!ylq)>B8>t*q~B-Q9#SX^H!7`LPZljCh^&| zSdiJRKAX2$(v`~YM#r0M#gJ)(#fXDdhDh~HCS*k{j5Ef6hWWUCqFF`1eC`)Di~fex zlEba|dFkarn$%CZedpDqCbb8Uf09hA&4W)t#P6aJzTaF4zf~j8z6adzXsW?}K3^{^ z4@g|mdk*P!Kb*su$Q;!~!VU_kdHJ_X=MlP~#O6=#$Jm!LP3Xf40$g#2GS)V-q5J$+ zgb>Y}TTTSK0Y$;GY%n|zj?L^OLmQqaQnbj9<+{u$=A80UuR3*Cz((C!PXgj z8P4*;6B}nH$+Rxih?ua!W10UT4?pTR(>HXQ+php+co_?El!GBkAC*amwe%umPN|J^ zhgf-2#sMU6y>(B9baUn?dP9De(nfJNZbp~v^EyK+AOz$=3=mH(&&cRvj|PeH)$Qwd zX|{N_WQNtT)dWylcg&T_u2Q(S zi=^UXUDZE}ei@uy_1}E_nQ*0-=_9Vz6-PTltBt8p$Nb}+2`Fza-T^OBaD3+UVKV6-;7D&+^1tt+FW&w%snr967wGduFmsp z0nz`Aj}^VoetI~u@qx_!FTHHw`#{r5g@~UTbGbdgIB?nj`@3dL#_|5e^y(dN|s`SMHi()Z8i9|H4}IFO;qM$h|6C?NQo z_IXoU>n3x>btkdZDmJ2Xldr9Zr_z|+;Pvee+COwfvzQjFVi*X@5-(FvGxz1MVm**N zIbA3bu;U0BO;M?bcs6O&$)pFR1inkiL_6bGmx7sJncxORt!c z^#>*M6y4zLoHR~;94IU3c(hupLI64y-ia6NTokbQN{+BQJZ*Q#D)lsCB_mO5n1RDy z%3|Rye(>m1aJ)nxPp#ke$%%80T_!sG37GVX9C#I(-7n*8#_Xcvj+mhuzr1PUzNv0Q zsJ|n8&p%tLKEEuPeLd{`4aW>qY%pm14b{`bLi+G?e-XETQYWc&I6j(yc~_1BasJ-=f%wkkdxqVX4)_K7X7K@z1V>lsNoa)$%0IDQA*|4=S-0VQL zy}n%fFZbBv%Od+77PGn>nB(M&+o`Ta&D9bI_7jct90CdbA<`dgvaId6zx9x@yW$er zu2EG)x^?W4w9saBD_J_H4^eC9WTdE<8Fo7Z;7L{M=bDu*CLzs;a^@;jvm2)^ z`$S0rwl#L#6sFdVmGVh{%z9WvC-cw8j>EatYdjmR=ONHP0Fh_+R~WJzl@>a!df5ee zQfFYA-#@FQeje`Lf2@ZDY^Y0(+I^@8YFKFKuHEC#~16>^$KfgI&US%yauJcc{2UDkm^|YFB~W4JcWW^ZM=={~rLPRqC5; zl0s=_&IjGRZnovvHmQAf0)J;cq&?4eJ~qr?`YiyGu*UVx-lvI2B#ffChmd!$$^*-5r(gFUCm2 z`%+x;@@@Hqlqma9E${q{vS8@xhEg0B__<%beW>?R@WulaDDCNj6{C}1R*)~fq_ZFD z8HyEA5GN@c0w1D4M9Gq;f^b?dTr>^{Z;~waRFyam1z7 zky?hdLR)wxhM(qS=)pFU&D`F3SI~CEmu~al znDeDu{a-Q9*Q}17ul@H?|2sy4^0|08`N5e}4r!0v5j3J0t6I{Y4y6|MB}&B-F=7+k zV#5Cgbz4n1T8#H^)L*Fbf2I2WK>eS1i9PvA{U1~K5}RPg^ymfsckVhU4RpMy<68c0 zFJE#LQSW~zdZ?b+HSyqV#sANAEJs$NpOuw*@E!-rQsgYmH+y?4$*eTrg*SeYh4c zi#3SIf>?|2_0u6Cf_d&NiuKu`6PQ@g){|dW815r!O)Yjk-O>S%(JvktcBW%9>Tkj{ z%|AdH^vm_$6B3pLzQ2(g$u=u&&N5CFmn^v!S;H1*0;Vzr{&RyH3n9JI8|aFIGT}>% z1o9>gpYqE?oIBXRXWsn~1%BbTRInJhAU}Ouc`Fz&@#50qI{`Q^mD%NG>AlFU_AA~-0UG~TgkBhpRMfTllapRa24lLYZ8iE~dIlZ3ze)i! z=i9YC_>#nZ`MvzLJ>H((7hyWSb0jvo`CoCK=3fabVtOwMWB*zv=I?mG=#eR>7}-yM zxAUXU^=plVknV$Qs^zF{lvY|lYO%s*6#iw!e>^zO?)Ol%UN?W)|E2va%D?2_{5vT3 zFRk?RmcOk2H&OnNuYEe0CGl5&vA<%Yi&d+I&6#{AnQ2yso&(ao{_0VzTP8~)M

    f8S@mQhpZZGpk{w}H>uKzPfD9(X6+l7Hv2 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 literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/nexus-s.3.jpg b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/nexus-s.3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e51f75b0edcf2f604f9f7e56bbe2cf760ebb1678 GIT binary patch literal 21118 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

    4W^)##Gk_!EY?HG$N03A$kuJk8^ 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

    4W^)##Gk_!EY?HG$N03A$kuJk8^ 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 D74$95 literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/t-mobile-g2.0.jpg b/aio/content/examples/upgrade-phonecat-2-hybrid/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/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/main-aot.ts b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/main-aot.ts new file mode 100644 index 0000000000..23a741c684 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/main-aot.ts @@ -0,0 +1,10 @@ +// #docregion +import { platformBrowser } from '@angular/platform-browser'; +import { UpgradeModule } from '@angular/upgrade/static'; + +import { AppModuleNgFactory } from '../aot/app/app.module.ngfactory'; + +platformBrowser().bootstrapModuleFactory(AppModuleNgFactory).then(platformRef => { + const upgrade = platformRef.injector.get(UpgradeModule) as UpgradeModule; + upgrade.bootstrap(document.documentElement, ['phonecatApp']); +}); diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/main.ts b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/main.ts new file mode 100644 index 0000000000..886e8ffac8 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/main.ts @@ -0,0 +1,11 @@ +// #docregion bootstrap +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { UpgradeModule } from '@angular/upgrade/static'; + +import { AppModule } from './app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule).then(platformRef => { + const upgrade = platformRef.injector.get(UpgradeModule) as UpgradeModule; + upgrade.bootstrap(document.documentElement, ['phonecatApp']); +}); +// #enddocregion bootstrap diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-detail/phone-detail.component.ajs.ts b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-detail/phone-detail.component.ajs.ts new file mode 100644 index 0000000000..80282858c4 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-detail/phone-detail.component.ajs.ts @@ -0,0 +1,28 @@ +// #docregion +declare var angular: angular.IAngularStatic; +import { Phone, PhoneData } from '../core/phone/phone.service'; + +class PhoneDetailController { + phone: PhoneData; + mainImageUrl: string; + + static $inject = ['$routeParams', 'phone']; + constructor($routeParams: angular.route.IRouteParamsService, phone: Phone) { + let phoneId = $routeParams['phoneId']; + phone.get(phoneId).subscribe(data => { + this.phone = data; + this.setImage(data.images[0]); + }); + } + + setImage(imageUrl: string) { + this.mainImageUrl = imageUrl; + } +} + +angular. + module('phoneDetail'). + component('phoneDetail', { + templateUrl: 'phone-detail/phone-detail.template.html', + controller: PhoneDetailController + }); diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-detail/phone-detail.component.spec.ts b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-detail/phone-detail.component.spec.ts new file mode 100644 index 0000000000..e3b9143a94 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-detail/phone-detail.component.spec.ts @@ -0,0 +1,59 @@ +// #docregion +// #docregion activatedroute +import { ActivatedRoute } from '@angular/router'; + +// #enddocregion activatedroute +import { Observable } from 'rxjs/Rx'; + +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 { + name: 'phone xyz', + snippet: '', + images: ['image/url1.png', 'image/url2.png'] + }; +} + +class MockPhone { + get(id: string): Observable { + return Observable.of(xyzPhoneData()); + } +} + +// #docregion activatedroute + +class ActivatedRouteMock { + constructor(public snapshot: any) {} +} + +// #enddocregion activatedroute + +describe('PhoneDetailComponent', () => { + + // #docregion activatedroute + + 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/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-detail/phone-detail.component.ts b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-detail/phone-detail.component.ts new file mode 100644 index 0000000000..e486ab3e6d --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-detail/phone-detail.component.ts @@ -0,0 +1,42 @@ +// #docplaster +// #docregion +declare var angular: angular.IAngularStatic; +import { downgradeComponent } from '@angular/upgrade/static'; + +// #docregion initialclass +import { Component } from '@angular/core'; + +import { Phone, PhoneData } from '../core/phone/phone.service'; +// #enddocregion initialclass +import { RouteParams } from '../ajs-upgraded-providers'; + +// #docregion initialclass +@Component({ + moduleId: module.id, + selector: 'phone-detail', + templateUrl: './phone-detail.template.html', + // #enddocregion initialclass + // #docregion initialclass +}) +export class PhoneDetailComponent { + phone: PhoneData; + mainImageUrl: string; + + constructor(routeParams: RouteParams, phone: Phone) { + phone.get(routeParams['phoneId']).subscribe(phone => { + this.phone = phone; + this.setImage(phone.images[0]); + }); + } + + setImage(imageUrl: string) { + this.mainImageUrl = imageUrl; + } +} +// #enddocregion initialclass + +angular.module('phoneDetail') + .directive( + 'phoneDetail', + downgradeComponent({component: PhoneDetailComponent}) as angular.IDirectiveFactory + ); diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-detail/phone-detail.module.ts b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-detail/phone-detail.module.ts new file mode 100644 index 0000000000..fd7cb3b920 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-detail/phone-detail.module.ts @@ -0,0 +1,7 @@ +'use strict'; + +// Define the `phoneDetail` module +angular.module('phoneDetail', [ + 'ngRoute', + 'core.phone' +]); diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-detail/phone-detail.template.html b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-detail/phone-detail.template.html new file mode 100644 index 0000000000..46a96d66c3 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-detail/phone-detail.template.html @@ -0,0 +1,120 @@ + +

    +
    + +
    + +

    {{phone.name}}

    + +

    {{phone.description}}

    + +
      +
    • + +
    • +
    + +
      +
    • + Availability and Networks +
      +
      Availability
      +
      {{availability}}
      +
      +
    • +
    • + Battery +
      +
      Type
      +
      {{phone.battery?.type}}
      +
      Talk Time
      +
      {{phone.battery?.talkTime}}
      +
      Standby time (max)
      +
      {{phone.battery?.standbyTime}}
      +
      +
    • +
    • + Storage and Memory +
      +
      RAM
      +
      {{phone.storage?.ram}}
      +
      Internal Storage
      +
      {{phone.storage?.flash}}
      +
      +
    • +
    • + Connectivity +
      +
      Network Support
      +
      {{phone.connectivity?.cell}}
      +
      WiFi
      +
      {{phone.connectivity?.wifi}}
      +
      Bluetooth
      +
      {{phone.connectivity?.bluetooth}}
      +
      Infrared
      +
      {{phone.connectivity?.infrared | checkmark}}
      +
      GPS
      +
      {{phone.connectivity?.gps | checkmark}}
      +
      +
    • +
    • + Android +
      +
      OS Version
      +
      {{phone.android?.os}}
      +
      UI
      +
      {{phone.android?.ui}}
      +
      +
    • +
    • + Size and Weight +
      +
      Dimensions
      +
      {{dim}}
      +
      Weight
      +
      {{phone.sizeAndWeight?.weight}}
      +
      +
    • +
    • + Display +
      +
      Screen size
      +
      {{phone.display?.screenSize}}
      +
      Screen resolution
      +
      {{phone.display?.screenResolution}}
      +
      Touch screen
      +
      {{phone.display?.touchScreen | checkmark}}
      +
      +
    • +
    • + Hardware +
      +
      CPU
      +
      {{phone.hardware?.cpu}}
      +
      USB
      +
      {{phone.hardware?.usb}}
      +
      Audio / headphone jack
      +
      {{phone.hardware?.audioJack}}
      +
      FM Radio
      +
      {{phone.hardware?.fmRadio | checkmark}}
      +
      Accelerometer
      +
      {{phone.hardware?.accelerometer | checkmark}}
      +
      +
    • +
    • + Camera +
      +
      Primary
      +
      {{phone.camera?.primary}}
      +
      Features
      +
      {{phone.camera?.features?.join(', ')}}
      +
      +
    • +
    • + Additional Features +
      {{phone.additionalFeatures}}
      +
    • +
    +
    diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-list/phone-list.component.ajs.ts b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-list/phone-list.component.ajs.ts new file mode 100644 index 0000000000..81eac1cd81 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-list/phone-list.component.ajs.ts @@ -0,0 +1,24 @@ +// #docregion +declare var angular: angular.IAngularStatic; +import { Phone, PhoneData } from '../core/phone/phone.service'; + +class PhoneListController { + phones: PhoneData[]; + orderProp: string; + + static $inject = ['phone']; + constructor(phone: Phone) { + phone.query().subscribe(phones => { + this.phones = phones; + }); + this.orderProp = 'age'; + } + +} + +angular. + module('phoneList'). + component('phoneList', { + templateUrl: 'app/phone-list/phone-list.template.html', + controller: PhoneListController + }); diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-list/phone-list.component.spec.ts b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-list/phone-list.component.spec.ts new file mode 100644 index 0000000000..2bb9d2b62f --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-list/phone-list.component.spec.ts @@ -0,0 +1,66 @@ +/* tslint:disable */ +// #docregion +import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { Observable } from 'rxjs/Rx'; +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { SpyLocation } from '@angular/common/testing'; + +import { PhoneListComponent } from './phone-list.component'; +import { Phone, PhoneData } from '../core/phone/phone.service'; + +class ActivatedRouteMock { + constructor(public snapshot: any) {} +} + +class MockPhone { + query(): Observable { + return Observable.of([ + {name: 'Nexus S', snippet: '', images: []}, + {name: 'Motorola DROID', snippet: '', images: []} + ]); + } +} + +let fixture: ComponentFixture; + +describe('PhoneList', () => { + + 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); + }); + + 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'); + }); + + 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/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-list/phone-list.component.ts b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-list/phone-list.component.ts new file mode 100644 index 0000000000..bdd5930b79 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-list/phone-list.component.ts @@ -0,0 +1,73 @@ +// #docregion downgrade-component +declare var angular: angular.IAngularStatic; +import { downgradeComponent } from '@angular/upgrade/static'; + +// #enddocregion downgrade-component + +// #docregion initialclass +import { Component } from '@angular/core'; +import { Phone, PhoneData } from '../core/phone/phone.service'; + +// #docregion downgrade-component +@Component({ + moduleId: module.id, + selector: 'phone-list', + templateUrl: 'phone-list.template.html' +}) +export class PhoneListComponent { + // #enddocregion downgrade-component + phones: PhoneData[]; + query: string; + orderProp: string; + + constructor(phone: Phone) { + phone.query().subscribe(phones => { + this.phones = phones; + }); + this.orderProp = 'age'; + } + // #enddocregion initialclass + + // #docregion getphones + getPhones(): PhoneData[] { + return this.sortPhones(this.filterPhones(this.phones)); + } + + private filterPhones(phones: PhoneData[]) { + if (phones && this.query) { + return phones.filter(phone => { + let name = phone.name.toLowerCase(); + let snippet = phone.snippet.toLowerCase(); + return name.indexOf(this.query) >= 0 || snippet.indexOf(this.query) >= 0; + }); + } + return phones; + } + + 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; + } + // #enddocregion getphones + // #docregion initialclass, downgrade-component +} +// #enddocregion initialclass + +angular.module('phoneList') + .directive( + 'phoneList', + downgradeComponent({component: PhoneListComponent}) as angular.IDirectiveFactory + ); +// #enddocregion downgrade-component diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-list/phone-list.module.ts b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-list/phone-list.module.ts new file mode 100644 index 0000000000..8ade7c5b88 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-list/phone-list.module.ts @@ -0,0 +1,4 @@ +'use strict'; + +// Define the `phoneList` module +angular.module('phoneList', ['core.phone']); diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-list/phone-list.template.html b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-list/phone-list.template.html new file mode 100644 index 0000000000..8f02113985 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phone-list/phone-list.template.html @@ -0,0 +1,40 @@ + diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phones/dell-streak-7.json b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phones/dell-streak-7.json new file mode 100644 index 0000000000..a32eb6ff98 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phones/dell-streak-7.json @@ -0,0 +1,64 @@ +{ + "additionalFeatures": "Front Facing 1.3MP Camera", + "android": { + "os": "Android 2.2", + "ui": "Dell Stage" + }, + "availability": [ + "T-Mobile" + ], + "battery": { + "standbyTime": "", + "talkTime": "", + "type": "Lithium Ion (Li-Ion) (2780 mAH)" + }, + "camera": { + "features": [ + "Flash", + "Video" + ], + "primary": "5.0 megapixels" + }, + "connectivity": { + "bluetooth": "Bluetooth 2.1", + "cell": "T-mobile HSPA+ @ 2100/1900/AWS/850 MHz", + "gps": true, + "infrared": false, + "wifi": "802.11 b/g" + }, + "description": "Introducing Dell\u2122 Streak 7. Share photos, videos and movies together. It\u2019s small enough to carry around, big enough to gather around. Android\u2122 2.2-based tablet with over-the-air upgrade capability for future OS releases. A vibrant 7-inch, multitouch display with full Adobe\u00ae Flash 10.1 pre-installed. Includes a 1.3 MP front-facing camera for face-to-face chats on popular services such as Qik or Skype. 16 GB of internal storage, plus Wi-Fi, Bluetooth and built-in GPS keeps you in touch with the world around you. Connect on your terms. Save with 2-year contract or flexibility with prepaid pay-as-you-go plans", + "display": { + "screenResolution": "WVGA (800 x 480)", + "screenSize": "7.0 inches", + "touchScreen": true + }, + "hardware": { + "accelerometer": true, + "audioJack": "3.5mm", + "cpu": "nVidia Tegra T20", + "fmRadio": false, + "physicalKeyboard": false, + "usb": "USB 2.0" + }, + "id": "dell-streak-7", + "images": [ + "img/phones/dell-streak-7.0.jpg", + "img/phones/dell-streak-7.1.jpg", + "img/phones/dell-streak-7.2.jpg", + "img/phones/dell-streak-7.3.jpg", + "img/phones/dell-streak-7.4.jpg" + ], + "name": "Dell Streak 7", + "sizeAndWeight": { + "dimensions": [ + "199.9 mm (w)", + "119.8 mm (h)", + "12.4 mm (d)" + ], + "weight": "450.0 grams" + }, + "storage": { + "flash": "16000MB", + "ram": "512MB" + } +} diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phones/motorola-atrix-4g.json b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phones/motorola-atrix-4g.json new file mode 100644 index 0000000000..ccca00e3b2 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phones/motorola-atrix-4g.json @@ -0,0 +1,62 @@ +{ + "additionalFeatures": "", + "android": { + "os": "Android 2.2", + "ui": "MOTOBLUR" + }, + "availability": [ + "AT&T" + ], + "battery": { + "standbyTime": "400 hours", + "talkTime": "5 hours", + "type": "Lithium Ion (Li-Ion) (1930 mAH)" + }, + "camera": { + "features": [ + "" + ], + "primary": "" + }, + "connectivity": { + "bluetooth": "Bluetooth 2.1", + "cell": "WCDMA 850/1900/2100, GSM 850/900/1800/1900, HSDPA 14Mbps (Category 10) Edge Class 12, GPRS Class 12, eCompass, AGPS", + "gps": true, + "infrared": false, + "wifi": "802.11 a/b/g/n" + }, + "description": "MOTOROLA ATRIX 4G gives you dual-core processing power and the revolutionary webtop application. With webtop and a compatible Motorola docking station, sold separately, you can surf the Internet with a full Firefox browser, create and edit docs, or access multimedia on a large screen almost anywhere.", + "display": { + "screenResolution": "QHD (960 x 540)", + "screenSize": "4.0 inches", + "touchScreen": true + }, + "hardware": { + "accelerometer": true, + "audioJack": "3.5mm", + "cpu": "1 GHz Dual Core", + "fmRadio": false, + "physicalKeyboard": false, + "usb": "USB 2.0" + }, + "id": "motorola-atrix-4g", + "images": [ + "img/phones/motorola-atrix-4g.0.jpg", + "img/phones/motorola-atrix-4g.1.jpg", + "img/phones/motorola-atrix-4g.2.jpg", + "img/phones/motorola-atrix-4g.3.jpg" + ], + "name": "MOTOROLA ATRIX\u2122 4G", + "sizeAndWeight": { + "dimensions": [ + "63.5 mm (w)", + "117.75 mm (h)", + "10.95 mm (d)" + ], + "weight": "135.0 grams" + }, + "storage": { + "flash": "", + "ram": "" + } +} diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phones/motorola-xoom-with-wi-fi.json b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phones/motorola-xoom-with-wi-fi.json new file mode 100644 index 0000000000..4ba9c8d5b5 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phones/motorola-xoom-with-wi-fi.json @@ -0,0 +1,65 @@ +{ + "additionalFeatures": "Sensors: proximity, ambient light, barometer, gyroscope", + "android": { + "os": "Android 3.0", + "ui": "Honeycomb" + }, + "availability": [ + "" + ], + "battery": { + "standbyTime": "336 hours", + "talkTime": "24 hours", + "type": "Other ( mAH)" + }, + "camera": { + "features": [ + "Flash", + "Video" + ], + "primary": "5.0 megapixels" + }, + "connectivity": { + "bluetooth": "Bluetooth 2.1", + "cell": "", + "gps": true, + "infrared": false, + "wifi": "802.11 b/g/n" + }, + "description": "Motorola XOOM with Wi-Fi has a super-powerful dual-core processor and Android\u2122 3.0 (Honeycomb) \u2014 the Android platform designed specifically for tablets. With its 10.1-inch HD widescreen display, you\u2019ll enjoy HD video in a thin, light, powerful and upgradeable tablet.", + "display": { + "screenResolution": "WXGA (1200 x 800)", + "screenSize": "10.1 inches", + "touchScreen": true + }, + "hardware": { + "accelerometer": true, + "audioJack": "3.5mm", + "cpu": "1 GHz Dual Core Tegra 2", + "fmRadio": false, + "physicalKeyboard": false, + "usb": "USB 2.0" + }, + "id": "motorola-xoom-with-wi-fi", + "images": [ + "img/phones/motorola-xoom-with-wi-fi.0.jpg", + "img/phones/motorola-xoom-with-wi-fi.1.jpg", + "img/phones/motorola-xoom-with-wi-fi.2.jpg", + "img/phones/motorola-xoom-with-wi-fi.3.jpg", + "img/phones/motorola-xoom-with-wi-fi.4.jpg", + "img/phones/motorola-xoom-with-wi-fi.5.jpg" + ], + "name": "Motorola XOOM\u2122 with Wi-Fi", + "sizeAndWeight": { + "dimensions": [ + "249.1 mm (w)", + "167.8 mm (h)", + "12.9 mm (d)" + ], + "weight": "708.0 grams" + }, + "storage": { + "flash": "32000MB", + "ram": "1000MB" + } +} diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phones/motorola-xoom.json b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phones/motorola-xoom.json new file mode 100644 index 0000000000..f0f0c8711d --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phones/motorola-xoom.json @@ -0,0 +1,62 @@ +{ + "additionalFeatures": "Front-facing camera. Sensors: proximity, ambient light, barometer, gyroscope.", + "android": { + "os": "Android 3.0", + "ui": "Android" + }, + "availability": [ + "Verizon" + ], + "battery": { + "standbyTime": "336 hours", + "talkTime": "24 hours", + "type": "Other (3250 mAH)" + }, + "camera": { + "features": [ + "Flash", + "Video" + ], + "primary": "5.0 megapixels" + }, + "connectivity": { + "bluetooth": "Bluetooth 2.1", + "cell": "CDMA 800 /1900 LTE 700, Rx diversity in all bands", + "gps": true, + "infrared": false, + "wifi": "802.11 a/b/g/n" + }, + "description": "MOTOROLA XOOM has a super-powerful dual-core processor and Android\u2122 3.0 (Honeycomb) \u2014 the Android platform designed specifically for tablets. With its 10.1-inch HD widescreen display, you\u2019ll enjoy HD video in a thin, light, powerful and upgradeable tablet.", + "display": { + "screenResolution": "WXGA (1200 x 800)", + "screenSize": "10.1 inches", + "touchScreen": true + }, + "hardware": { + "accelerometer": true, + "audioJack": "3.5mm", + "cpu": "1 GHz Dual Core Tegra 2", + "fmRadio": false, + "physicalKeyboard": false, + "usb": "USB 2.0" + }, + "id": "motorola-xoom", + "images": [ + "img/phones/motorola-xoom.0.jpg", + "img/phones/motorola-xoom.1.jpg", + "img/phones/motorola-xoom.2.jpg" + ], + "name": "MOTOROLA XOOM\u2122", + "sizeAndWeight": { + "dimensions": [ + "249.0 mm (w)", + "168.0 mm (h)", + "12.7 mm (d)" + ], + "weight": "726.0 grams" + }, + "storage": { + "flash": "32000MB", + "ram": "1000MB" + } +} diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phones/nexus-s.json b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phones/nexus-s.json new file mode 100644 index 0000000000..5e712e2ff8 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phones/nexus-s.json @@ -0,0 +1,69 @@ +{ + "additionalFeatures": "Contour Display, Near Field Communications (NFC), Three-axis gyroscope, Anti-fingerprint display coating, Internet Calling support (VoIP/SIP)", + "android": { + "os": "Android 2.3", + "ui": "Android" + }, + "availability": [ + "M1,", + "O2,", + "Orange,", + "Singtel,", + "StarHub,", + "T-Mobile,", + "Vodafone" + ], + "battery": { + "standbyTime": "428 hours", + "talkTime": "6 hours", + "type": "Lithium Ion (Li-Ion) (1500 mAH)" + }, + "camera": { + "features": [ + "Flash", + "Video" + ], + "primary": "5.0 megapixels" + }, + "connectivity": { + "bluetooth": "Bluetooth 2.1", + "cell": "Quad-band GSM: 850, 900, 1800, 1900\r\nTri-band HSPA: 900, 2100, 1700\r\nHSPA type: HSDPA (7.2Mbps) HSUPA (5.76Mbps)", + "gps": true, + "infrared": false, + "wifi": "802.11 b/g/n" + }, + "description": "Nexus S is the next generation of Nexus devices, co-developed by Google and Samsung. The latest Android platform (Gingerbread), paired with a 1 GHz Hummingbird processor and 16GB of memory, makes Nexus S one of the fastest phones on the market. It comes pre-installed with the best of Google apps and enabled with new and popular features like true multi-tasking, Wi-Fi hotspot, Internet Calling, NFC support, and full web browsing. With this device, users will also be the first to receive software upgrades and new Google mobile apps as soon as they become available. For more details, visit http://www.google.com/nexus.", + "display": { + "screenResolution": "WVGA (800 x 480)", + "screenSize": "4.0 inches", + "touchScreen": true + }, + "hardware": { + "accelerometer": true, + "audioJack": "3.5mm", + "cpu": "1GHz Cortex A8 (Hummingbird) processor", + "fmRadio": false, + "physicalKeyboard": false, + "usb": "USB 2.0" + }, + "id": "nexus-s", + "images": [ + "img/phones/nexus-s.0.jpg", + "img/phones/nexus-s.1.jpg", + "img/phones/nexus-s.2.jpg", + "img/phones/nexus-s.3.jpg" + ], + "name": "Nexus S", + "sizeAndWeight": { + "dimensions": [ + "63.0 mm (w)", + "123.9 mm (h)", + "10.88 mm (d)" + ], + "weight": "129.0 grams" + }, + "storage": { + "flash": "16384MB", + "ram": "512MB" + } +} diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phones/phones.json b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phones/phones.json new file mode 100644 index 0000000000..339b94fbb5 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/phones/phones.json @@ -0,0 +1,155 @@ +[ + { + "age": 0, + "id": "motorola-xoom-with-wi-fi", + "imageUrl": "img/phones/motorola-xoom-with-wi-fi.0.jpg", + "name": "Motorola XOOM\u2122 with Wi-Fi", + "snippet": "The Next, Next Generation\r\n\r\nExperience the future with Motorola XOOM with Wi-Fi, the world's first tablet powered by Android 3.0 (Honeycomb)." + }, + { + "age": 1, + "id": "motorola-xoom", + "imageUrl": "img/phones/motorola-xoom.0.jpg", + "name": "MOTOROLA XOOM\u2122", + "snippet": "The Next, Next Generation\n\nExperience the future with MOTOROLA XOOM, the world's first tablet powered by Android 3.0 (Honeycomb)." + }, + { + "age": 2, + "carrier": "AT&T", + "id": "motorola-atrix-4g", + "imageUrl": "img/phones/motorola-atrix-4g.0.jpg", + "name": "MOTOROLA ATRIX\u2122 4G", + "snippet": "MOTOROLA ATRIX 4G the world's most powerful smartphone." + }, + { + "age": 3, + "id": "dell-streak-7", + "imageUrl": "img/phones/dell-streak-7.0.jpg", + "name": "Dell Streak 7", + "snippet": "Introducing Dell\u2122 Streak 7. Share photos, videos and movies together. It\u2019s small enough to carry around, big enough to gather around." + }, + { + "age": 4, + "carrier": "Cellular South", + "id": "samsung-gem", + "imageUrl": "img/phones/samsung-gem.0.jpg", + "name": "Samsung Gem\u2122", + "snippet": "The Samsung Gem\u2122 brings you everything that you would expect and more from a touch display smart phone \u2013 more apps, more features and a more affordable price." + }, + { + "age": 5, + "carrier": "Dell", + "id": "dell-venue", + "imageUrl": "img/phones/dell-venue.0.jpg", + "name": "Dell Venue", + "snippet": "The Dell Venue; Your Personal Express Lane to Everything" + }, + { + "age": 6, + "carrier": "Best Buy", + "id": "nexus-s", + "imageUrl": "img/phones/nexus-s.0.jpg", + "name": "Nexus S", + "snippet": "Fast just got faster with Nexus S. A pure Google experience, Nexus S is the first phone to run Gingerbread (Android 2.3), the fastest version of Android yet." + }, + { + "age": 7, + "carrier": "Cellular South", + "id": "lg-axis", + "imageUrl": "img/phones/lg-axis.0.jpg", + "name": "LG Axis", + "snippet": "Android Powered, Google Maps Navigation, 5 Customizable Home Screens" + }, + { + "age": 8, + "id": "samsung-galaxy-tab", + "imageUrl": "img/phones/samsung-galaxy-tab.0.jpg", + "name": "Samsung Galaxy Tab\u2122", + "snippet": "Feel Free to Tab\u2122. The Samsung Galaxy Tab\u2122 brings you an ultra-mobile entertainment experience through its 7\u201d display, high-power processor and Adobe\u00ae Flash\u00ae Player compatibility." + }, + { + "age": 9, + "carrier": "Cellular South", + "id": "samsung-showcase-a-galaxy-s-phone", + "imageUrl": "img/phones/samsung-showcase-a-galaxy-s-phone.0.jpg", + "name": "Samsung Showcase\u2122 a Galaxy S\u2122 phone", + "snippet": "The Samsung Showcase\u2122 delivers a cinema quality experience like you\u2019ve never seen before. Its innovative 4\u201d touch display technology provides rich picture brilliance, even outdoors" + }, + { + "age": 10, + "carrier": "Verizon", + "id": "droid-2-global-by-motorola", + "imageUrl": "img/phones/droid-2-global-by-motorola.0.jpg", + "name": "DROID\u2122 2 Global by Motorola", + "snippet": "The first smartphone with a 1.2 GHz processor and global capabilities." + }, + { + "age": 11, + "carrier": "Verizon", + "id": "droid-pro-by-motorola", + "imageUrl": "img/phones/droid-pro-by-motorola.0.jpg", + "name": "DROID\u2122 Pro by Motorola", + "snippet": "The next generation of DOES." + }, + { + "age": 12, + "carrier": "AT&T", + "id": "motorola-bravo-with-motoblur", + "imageUrl": "img/phones/motorola-bravo-with-motoblur.0.jpg", + "name": "MOTOROLA BRAVO\u2122 with MOTOBLUR\u2122", + "snippet": "An experience to cheer about." + }, + { + "age": 13, + "carrier": "T-Mobile", + "id": "motorola-defy-with-motoblur", + "imageUrl": "img/phones/motorola-defy-with-motoblur.0.jpg", + "name": "Motorola DEFY\u2122 with MOTOBLUR\u2122", + "snippet": "Are you ready for everything life throws your way?" + }, + { + "age": 14, + "carrier": "T-Mobile", + "id": "t-mobile-mytouch-4g", + "imageUrl": "img/phones/t-mobile-mytouch-4g.0.jpg", + "name": "T-Mobile myTouch 4G", + "snippet": "The T-Mobile myTouch 4G is a premium smartphone designed to deliver blazing fast 4G speeds so that you can video chat from practically anywhere, with or without Wi-Fi." + }, + { + "age": 15, + "carrier": "US Cellular", + "id": "samsung-mesmerize-a-galaxy-s-phone", + "imageUrl": "img/phones/samsung-mesmerize-a-galaxy-s-phone.0.jpg", + "name": "Samsung Mesmerize\u2122 a Galaxy S\u2122 phone", + "snippet": "The Samsung Mesmerize\u2122 delivers a cinema quality experience like you\u2019ve never seen before. Its innovative 4\u201d touch display technology provides rich picture brilliance,even outdoors" + }, + { + "age": 16, + "carrier": "Sprint", + "id": "sanyo-zio", + "imageUrl": "img/phones/sanyo-zio.0.jpg", + "name": "SANYO ZIO", + "snippet": "The Sanyo Zio by Kyocera is an Android smartphone with a combination of ultra-sleek styling, strong performance and unprecedented value." + }, + { + "age": 17, + "id": "samsung-transform", + "imageUrl": "img/phones/samsung-transform.0.jpg", + "name": "Samsung Transform\u2122", + "snippet": "The Samsung Transform\u2122 brings you a fun way to customize your Android powered touch screen phone to just the way you like it through your favorite themed \u201cSprint ID Service Pack\u201d." + }, + { + "age": 18, + "id": "t-mobile-g2", + "imageUrl": "img/phones/t-mobile-g2.0.jpg", + "name": "T-Mobile G2", + "snippet": "The T-Mobile G2 with Google is the first smartphone built for 4G speeds on T-Mobile's new network. Get the information you need, faster than you ever thought possible." + }, + { + "age": 19, + "id": "motorola-charm-with-motoblur", + "imageUrl": "img/phones/motorola-charm-with-motoblur.0.jpg", + "name": "Motorola CHARM\u2122 with MOTOBLUR\u2122", + "snippet": "Motorola CHARM fits easily in your pocket or palm. Includes MOTOBLUR service." + } +] diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/bs-config.aot.json b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/bs-config.aot.json new file mode 100644 index 0000000000..e59a7403a0 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/bs-config.aot.json @@ -0,0 +1,14 @@ +{ + "open": false, + "logLevel": "silent", + "port": 8080, + "server": { + "baseDir": "aot", + "routes": { + "/node_modules": "node_modules" + }, + "middleware": { + "0": null + } + } +} diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/copy-dist-files.js b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/copy-dist-files.js new file mode 100644 index 0000000000..a857af085c --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/copy-dist-files.js @@ -0,0 +1,25 @@ +// #docregion +var fsExtra = require('fs-extra'); +var resources = [ + // polyfills + 'node_modules/core-js/client/shim.min.js', + 'node_modules/zone.js/dist/zone.min.js', + // css + 'app/app.css', + 'app/app.animations.css', + // images and json files + 'app/img/', + 'app/phones/', + // app files + 'app/app.module.ajs.js', + 'app/app.config.js', + 'app/app.animations.js', + 'app/core/core.module.js', + 'app/core/phone/phone.module.js', + 'app/phone-list/phone-list.module.js', + 'app/phone-detail/phone-detail.module.js' +]; +resources.map(function(sourcePath) { + var destPath = `aot/${sourcePath}`; + fsExtra.copySync(sourcePath, destPath); +}); diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/example-config.json b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/example-config.json new file mode 100644 index 0000000000..401c14f835 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/example-config.json @@ -0,0 +1,5 @@ +{ + "build": "build:upgrade", + "run": "serve:upgrade", + "unittesting": true +} diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/index.html b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/index.html new file mode 100644 index 0000000000..f747e641e0 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/index.html @@ -0,0 +1,51 @@ + + + + + + + + + Google Phone Gallery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + + diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/karma.conf.ajs.js b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/karma.conf.ajs.js new file mode 100644 index 0000000000..a52abf73ce --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/karma.conf.ajs.js @@ -0,0 +1,73 @@ +//jshint strict: false +module.exports = function(config) { + config.set({ + + // #docregion basepath + basePath: './', + // #enddocregion basepath + + files: [ + 'https://code.angularjs.org/1.5.5/angular.js', + 'https://code.angularjs.org/1.5.5/angular-animate.js', + 'https://code.angularjs.org/1.5.5/angular-resource.js', + 'https://code.angularjs.org/1.5.5/angular-route.js', + 'https://code.angularjs.org/1.5.5/angular-mocks.js', + + // #docregion files + // System.js for module loading + 'node_modules/systemjs/dist/system.src.js', + + // Polyfills + 'node_modules/core-js/client/shim.js', + + // zone.js + 'node_modules/zone.js/dist/zone.js', + 'node_modules/zone.js/dist/long-stack-trace-zone.js', + 'node_modules/zone.js/dist/proxy.js', + 'node_modules/zone.js/dist/sync-test.js', + 'node_modules/zone.js/dist/jasmine-patch.js', + 'node_modules/zone.js/dist/async-test.js', + 'node_modules/zone.js/dist/fake-async-test.js', + + // RxJs. + { pattern: 'node_modules/rxjs/**/*.js', included: false, watched: false }, + { pattern: 'node_modules/rxjs/**/*.js.map', included: false, watched: false }, + + // Angular itself and the testing library + {pattern: 'node_modules/@angular/**/*.js', included: false, watched: false}, + {pattern: 'node_modules/@angular/**/*.js.map', included: false, watched: false}, + + {pattern: 'systemjs.config.js', included: false, watched: false}, + 'karma-test-shim.js', + + {pattern: 'app/**/*.module.js', included: false, watched: true}, + {pattern: 'app/*!(.module|.spec).js', included: false, watched: true}, + {pattern: 'app/!(bower_components)/**/*!(.module|.spec).js', included: false, watched: true}, + {pattern: 'app/**/*.spec.js', included: false, watched: true}, + + {pattern: '**/*.html', included: false, watched: true}, + // #enddocregion files + ], + + // #docregion html + // proxied base paths for loading assets + proxies: { + // required for component assets fetched by Angular's compiler + "/phone-detail": '/base/app/phone-detail', + "/phone-list": '/base/app/phone-list' + }, + // #enddocregion html + + autoWatch: true, + + frameworks: ['jasmine'], + + browsers: ['Chrome'], + + plugins: [ + 'karma-chrome-launcher', + 'karma-jasmine' + ] + + }); +}; diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/package.ajs.json b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/package.ajs.json new file mode 100644 index 0000000000..54f73776dd --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/package.ajs.json @@ -0,0 +1,37 @@ +{ + "name": "angular-phonecat", + "private": true, + "version": "0.0.0", + "description": "A tutorial application for AngularJS", + "repository": "https://github.com/angular/angular-phonecat", + "license": "MIT", + "devDependencies": { + "bower": "^1.7.7", + "http-server": "^0.9.0", + "jasmine-core": "^2.4.1", + "karma": "^0.13.22", + "karma-chrome-launcher": "^0.2.3", + "karma-firefox-launcher": "^0.1.7", + "karma-jasmine": "^0.3.8", + "protractor": "^3.2.2", + "shelljs": "^0.6.0" + }, + "scripts": { + "postinstall": "bower install", + + "prestart": "npm install", + "start": "http-server -a localhost -p 8000 -c-1 ./", + + "pretest": "npm install", + "test": "karma start karma.conf.js", + "test-single-run": "karma start karma.conf.js --single-run", + + "preupdate-webdriver": "npm install", + "update-webdriver": "webdriver-manager update", + + "preprotractor": "npm run update-webdriver", + "protractor": "protractor e2e-tests/protractor.conf.js", + + "update-index-async": "node -e \"require('shelljs/global'); sed('-i', /\\/\\/@@NG_LOADER_START@@[\\s\\S]*\\/\\/@@NG_LOADER_END@@/, '//@@NG_LOADER_START@@\\n' + sed(/sourceMappingURL=angular-loader.min.js.map/,'sourceMappingURL=bower_components/angular-loader/angular-loader.min.js.map','app/bower_components/angular-loader/angular-loader.min.js') + '\\n//@@NG_LOADER_END@@', 'app/index-async.html');\"" + } +} diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/rollup-config.js b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/rollup-config.js new file mode 100644 index 0000000000..aeb227689c --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/rollup-config.js @@ -0,0 +1,21 @@ +// #docregion +import rollup from 'rollup' +import nodeResolve from 'rollup-plugin-node-resolve' +import commonjs from 'rollup-plugin-commonjs'; +import uglify from 'rollup-plugin-uglify' + +//paths are relative to the execution path +export default { + entry: 'app/main-aot.js', + dest: 'aot/dist/build.js', // output a single application bundle + sourceMap: true, + sourceMapFile: 'aot/dist/build.js.map', + format: 'iife', + plugins: [ + nodeResolve({jsnext: true, module: true}), + commonjs({ + include: ['node_modules/rxjs/**'] + }), + uglify() + ] +} diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/run-unit-tests.sh b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/run-unit-tests.sh new file mode 100755 index 0000000000..239e5ff7d7 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/run-unit-tests.sh @@ -0,0 +1,7 @@ +## The boilerplate Karma configuration won't work with AngularJS tests since +## a specific loading configuration is needed for them. +## We keep one in karma.conf.ajs.js. This scripts runs the AngularJS tests with +## that config. + +PATH=$(npm bin):$PATH +tsc && karma start karma.conf.ajs.js diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/systemjs.config.1.js b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/systemjs.config.1.js new file mode 100644 index 0000000000..8197c44a89 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/systemjs.config.1.js @@ -0,0 +1,50 @@ +/** + * System configuration for Angular samples + * Adjust as necessary for your application needs. + */ +(function (global) { + // #docregion paths + 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/router/upgrade': 'npm:@angular/router/bundles/router-upgrade.umd.js', + '@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js', + // #docregion paths + '@angular/upgrade/static': 'npm:@angular/upgrade/bundles/upgrade-static.umd.js', + // #enddocregion paths + + // 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/aio/content/examples/upgrade-phonecat-2-hybrid/ts/tsconfig-aot.json b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/tsconfig-aot.json new file mode 100644 index 0000000000..58f9de3309 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/tsconfig-aot.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + "target": "es5", + "module": "es2015", + "moduleResolution": "node", + "sourceMap": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "lib": ["es2015", "dom"], + "removeComments": false, + "noImplicitAny": true, + "suppressImplicitAnyIndexErrors": true, + "typeRoots": [ + "../../node_modules/@types/" + ] + }, + + "files": [ + "app/app.module.ts", + "app/main-aot.ts" + ], + + "angularCompilerOptions": { + "genDir": "aot", + "skipMetadataEmit" : true + } +} diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/tsconfig.json b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/tsconfig.json new file mode 100644 index 0000000000..f267800f14 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "target": "es5", + "module": "commonjs", + "moduleResolution": "node", + "sourceMap": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "lib": [ "es2015", "dom" ], + "noImplicitAny": true, + "suppressImplicitAnyIndexErrors": true, + "typeRoots": [ + "../../node_modules/@types/" + ] + }, + "compileOnSave": true, + "exclude": [ + "node_modules/*", + "**/*-aot.ts" + ] +} diff --git a/aio/content/examples/upgrade-phonecat-3-router/README.md b/aio/content/examples/upgrade-phonecat-3-router/README.md new file mode 100644 index 0000000000..4f8e4928af --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/README.md @@ -0,0 +1,34 @@ +This is the Angular Phonecat application adjusted to fit our boilerplate project +structure. + +The following changes from vanilla Phonecat are applied: + +* Karma config for unit tests is in karma.conf.ng1.js because the boilerplate + Karma config is not compatible with the way Angular 1 tests need to be run. + The shell script run-unit-tests.sh can be used to run the unit tests. +* There's a `package.ng1.json`, which is not used to run anything but only to + show an example of changing the PhoneCat http-server root path. +* Also for the Karma shim, there is a `karma-test-shim.1.js` file which isn't + used but is shown in the test appendix. +* Instead of using Bower, Angular 1 and its dependencies are fetched from a CDN + in index.html and karma.conf.ng1.js. +* E2E tests have been moved to the parent directory, where `run-e2e-tests` can + discover and run them along with all the other examples. +* Most of the phone JSON and image data removed in the interest of keeping + repo weight down. Keeping enough to retain testability of the app. + +## Running the app + +Start like any example + + npm run start + +## Running unit tests + + ./run-unit-tests.sh + +## Running E2E tests + +Like for any example (at the project root): + + gulp run-e2e-tests --filter=phonecat-2 diff --git a/aio/content/examples/upgrade-phonecat-3-router/e2e-spec.ts b/aio/content/examples/upgrade-phonecat-3-router/e2e-spec.ts new file mode 100644 index 0000000000..2ec8e37977 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/e2e-spec.ts @@ -0,0 +1,107 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by } from 'protractor'; +import { setProtractorToHybridMode } from '../protractor-helpers'; + +// Angular E2E Testing Guide: +// https://docs.angularjs.org/guide/e2e-testing + +describe('PhoneCat Application', function() { + + beforeAll(function () { + setProtractorToHybridMode(); + }); + + it('should redirect `index.html` to `index.html#!/phones', function() { + browser.get('index.html'); + expect(browser.getLocationAbsUrl()).toBe('/phones'); + }); + + describe('View: Phone list', function() { + + beforeEach(function() { + browser.get('index.html#!/phones'); + }); + + it('should filter the phone list as a user types into the search box', function() { + let phoneList = element.all(by.css('.phones li')); + let query = element(by.css('input')); + + expect(phoneList.count()).toBe(20); + + query.sendKeys('nexus'); + expect(phoneList.count()).toBe(1); + + query.clear(); + query.sendKeys('motorola'); + expect(phoneList.count()).toBe(8); + }); + + it('should be possible to control phone order via the drop-down menu', function() { + let queryField = element(by.css('input')); + let orderSelect = element(by.css('select')); + let nameOption = orderSelect.element(by.css('option[value="name"]')); + let phoneNameColumn = element.all(by.css('.phones .name')); + + function getNames() { + return phoneNameColumn.map(function(elem) { + return elem.getText(); + }); + } + + queryField.sendKeys('tablet'); // Let's narrow the dataset to make the assertions shorter + + expect(getNames()).toEqual([ + 'Motorola XOOM\u2122 with Wi-Fi', + 'MOTOROLA XOOM\u2122' + ]); + + nameOption.click(); + + expect(getNames()).toEqual([ + 'MOTOROLA XOOM\u2122', + 'Motorola XOOM\u2122 with Wi-Fi' + ]); + }); + + it('should render phone specific links', function() { + let query = element(by.css('input')); + query.sendKeys('nexus'); + + element.all(by.css('.phones li a')).first().click(); + browser.sleep(200); // Not sure why this is needed but it is. The route change works fine. + expect(browser.getLocationAbsUrl()).toBe('/phones/nexus-s'); + }); + + }); + + describe('View: Phone detail', function() { + + beforeEach(function() { + browser.get('index.html#!/phones/nexus-s'); + }); + + it('should display the `nexus-s` page', function() { + expect(element(by.css('h1')).getText()).toBe('Nexus S'); + }); + + it('should display the first phone image as the main phone image', function() { + let mainImage = element(by.css('img.phone.selected')); + + expect(mainImage.getAttribute('src')).toMatch(/img\/phones\/nexus-s.0.jpg/); + }); + + it('should swap the main image when clicking on a thumbnail image', function() { + let mainImage = element(by.css('img.phone.selected')); + let thumbnails = element.all(by.css('.phone-thumbs img')); + + thumbnails.get(2).click(); + expect(mainImage.getAttribute('src')).toMatch(/img\/phones\/nexus-s.2.jpg/); + + thumbnails.get(0).click(); + expect(mainImage.getAttribute('src')).toMatch(/img\/phones\/nexus-s.0.jpg/); + }); + + }); + +}); diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/.gitignore b/aio/content/examples/upgrade-phonecat-3-router/ts/.gitignore new file mode 100644 index 0000000000..7f5c313a3e --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/.gitignore @@ -0,0 +1,7 @@ +**/*.js +aot/**/* +!aot/bs-config.json +!aot/index.html +!copy-dist-files.js +!rollup-config.js +!systemjs.config.1.js diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/aot/bs-config.json b/aio/content/examples/upgrade-phonecat-3-router/ts/aot/bs-config.json new file mode 100644 index 0000000000..7c85d6eddd --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/aot/bs-config.json @@ -0,0 +1,5 @@ +{ + "port": 8000, + "files": ["./aot/**/*.{html,htm,css,js}"], + "server": { "baseDir": "./aot" } +} diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/aot/index.html b/aio/content/examples/upgrade-phonecat-3-router/ts/aot/index.html new file mode 100644 index 0000000000..0d6cf5946e --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/aot/index.html @@ -0,0 +1,38 @@ + + + + + + + + + Google Phone Gallery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/ajs-upgraded-providers.ts b/aio/content/examples/upgrade-phonecat-3-router/ts/app/ajs-upgraded-providers.ts new file mode 100644 index 0000000000..f6e1654d74 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/app/ajs-upgraded-providers.ts @@ -0,0 +1,14 @@ +// #docregion +export abstract class RouteParams { + [key: string]: string; +} + +export function routeParamsFactory(i: any) { + return i.get('$routeParams'); +} + +export const routeParamsProvider = { + provide: RouteParams, + useFactory: routeParamsFactory, + deps: ['$injector'] +}; diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/app-routing.module.ts b/aio/content/examples/upgrade-phonecat-3-router/ts/app/app-routing.module.ts new file mode 100644 index 0000000000..0485b1848d --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/app/app-routing.module.ts @@ -0,0 +1,30 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { Routes, RouterModule, UrlHandlingStrategy, UrlTree } from '@angular/router'; +import { APP_BASE_HREF, HashLocationStrategy, LocationStrategy } from '@angular/common'; + +import { PhoneListComponent } from './phone-list/phone-list.component'; + +export class Ng1Ng2UrlHandlingStrategy implements UrlHandlingStrategy { + shouldProcessUrl(url: UrlTree) { + return url.toString() === '/' || url.toString() === '/phones'; + } + extract(url: UrlTree) { return url; } + merge(url: UrlTree, whole: UrlTree) { return url; } +} + +const routes: Routes = [ + { path: '', redirectTo: 'phones', pathMatch: 'full' }, + { path: 'phones', component: PhoneListComponent } +]; + +@NgModule({ + imports: [ RouterModule.forRoot(routes) ], + exports: [ RouterModule ], + providers: [ + { provide: APP_BASE_HREF, useValue: '!' }, + { provide: LocationStrategy, useClass: HashLocationStrategy }, + { provide: UrlHandlingStrategy, useClass: Ng1Ng2UrlHandlingStrategy } + ] +}) +export class AppRoutingModule { } diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/app.animations.css b/aio/content/examples/upgrade-phonecat-3-router/ts/app/app.animations.css new file mode 100644 index 0000000000..175320b509 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/app/app.animations.css @@ -0,0 +1,67 @@ +/* Animate `ngRepeat` in `phoneList` component */ +.phone-list-item.ng-enter, +.phone-list-item.ng-leave, +.phone-list-item.ng-move { + overflow: hidden; + transition: 0.5s linear all; +} + +.phone-list-item.ng-enter, +.phone-list-item.ng-leave.ng-leave-active, +.phone-list-item.ng-move { + height: 0; + margin-bottom: 0; + opacity: 0; + padding-bottom: 0; + padding-top: 0; +} + +.phone-list-item.ng-enter.ng-enter-active, +.phone-list-item.ng-leave, +.phone-list-item.ng-move.ng-move-active { + height: 120px; + margin-bottom: 20px; + opacity: 1; + padding-bottom: 4px; + padding-top: 15px; +} + +/* Animate view transitions with `ngView` */ +.view-container { + position: relative; +} + +.view-frame { + margin-top: 20px; +} + +.view-frame.ng-enter, +.view-frame.ng-leave { + background: white; + left: 0; + position: absolute; + right: 0; + top: 0; +} + +.view-frame.ng-enter { + animation: 1s fade-in; + z-index: 100; +} + +.view-frame.ng-leave { + animation: 1s fade-out; + z-index: 99; +} + +@keyframes fade-in { + from { opacity: 0; } + to { opacity: 1; } +} + +@keyframes fade-out { + from { opacity: 1; } + to { opacity: 0; } +} + +/* Older browsers might need vendor-prefixes for keyframes and animation! */ diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/app.animations.ts b/aio/content/examples/upgrade-phonecat-3-router/ts/app/app.animations.ts new file mode 100644 index 0000000000..f0739b6405 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/app/app.animations.ts @@ -0,0 +1,43 @@ +'use strict'; + +angular. + module('phonecatApp'). + animation('.phone', function phoneAnimationFactory() { + return { + addClass: animateIn, + removeClass: animateOut + }; + + function animateIn(element: JQuery, className: string, done: () => void) { + if (className !== 'selected') { return; } + + element.css({ + display: 'block', + position: 'absolute', + top: 500, + left: 0 + }).animate({ + top: 0 + }, done); + + return function animateInEnd(wasCanceled: boolean) { + if (wasCanceled) { element.stop(); } + }; + } + + function animateOut(element: JQuery, className: string, done: () => void) { + if (className !== 'selected') { return; } + + element.css({ + position: 'absolute', + top: 0, + left: 0 + }).animate({ + top: -500 + }, done); + + return function animateOutEnd(wasCanceled: boolean) { + if (wasCanceled) { element.stop(); } + }; + } + }); diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/app.component.ts b/aio/content/examples/upgrade-phonecat-3-router/ts/app/app.component.ts new file mode 100644 index 0000000000..6ecd19ab80 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/app/app.component.ts @@ -0,0 +1,13 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'phonecat-app', + template: ` + +
    +
    +
    + ` +}) +export class AppComponent { } diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/app.config.ts b/aio/content/examples/upgrade-phonecat-3-router/ts/app/app.config.ts new file mode 100644 index 0000000000..51a5d82422 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/app/app.config.ts @@ -0,0 +1,16 @@ +'use strict'; + +angular. + module('phonecatApp'). + config(['$locationProvider', '$routeProvider', + function config($locationProvider: angular.ILocationProvider, + $routeProvider: angular.route.IRouteProvider) { + $locationProvider.hashPrefix('!'); + // #docregion ajs-routes + $routeProvider + .when('/phones/:phoneId', { + template: '' + }); + // #enddocregion ajs-routes + } + ]); diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/app.css b/aio/content/examples/upgrade-phonecat-3-router/ts/app/app.css new file mode 100644 index 0000000000..f4b45b02a5 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/app/app.css @@ -0,0 +1,93 @@ +body { + padding: 20px; +} + +h1 { + border-bottom: 1px solid gray; + margin-top: 0; +} + +/* View: Phone list */ +.phones { + list-style: none; +} + +.phones li { + clear: both; + height: 115px; + padding-top: 15px; +} + +.thumb { + float: left; + height: 100px; + margin: -0.5em 1em 1.5em 0; + padding-bottom: 1em; + width: 100px; +} + +/* View: Phone detail */ +.phone { + background-color: white; + display: none; + float: left; + height: 400px; + margin-bottom: 2em; + margin-right: 3em; + padding: 2em; + width: 400px; +} + +.phone:first-child { + display: block; +} + +.phone-images { + background-color: white; + float: left; + height: 450px; + overflow: hidden; + position: relative; + width: 450px; +} + +.phone-thumbs { + list-style: none; + margin: 0; +} + +.phone-thumbs img { + height: 100px; + padding: 1em; + width: 100px; +} + +.phone-thumbs li { + background-color: white; + border: 1px solid black; + cursor: pointer; + display: inline-block; + margin: 1em; +} + +.specs { + clear: both; + list-style: none; + margin: 0; + padding: 0; +} + +.specs dt { + font-weight: bold; +} + +.specs > li { + display: inline-block; + vertical-align: top; + width: 200px; +} + +.specs > li > span { + font-size: 1.2em; + font-weight: bold; +} diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/app.module.ajs.ts b/aio/content/examples/upgrade-phonecat-3-router/ts/app/app.module.ajs.ts new file mode 100644 index 0000000000..e493137966 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/app/app.module.ajs.ts @@ -0,0 +1,11 @@ +// #docregion +'use strict'; + +// Define the `phonecatApp` Angular 1 module +angular.module('phonecatApp', [ + 'ngAnimate', + 'ngRoute', + 'core', + 'phoneDetail', + 'phoneList', +]); diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/app.module.ts b/aio/content/examples/upgrade-phonecat-3-router/ts/app/app.module.ts new file mode 100644 index 0000000000..e0bb64f4e4 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/app/app.module.ts @@ -0,0 +1,42 @@ +// #docregion +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { UpgradeModule } from '@angular/upgrade/static'; +import { HttpModule } from '@angular/http'; +import { FormsModule } from '@angular/forms'; + +import { AppRoutingModule } from './app-routing.module'; +import { AppComponent } from './app.component'; +import { Phone } from './core/phone/phone.service'; +import { CheckmarkPipe } from './core/checkmark/checkmark.pipe'; +import { PhoneListComponent } from './phone-list/phone-list.component'; +import { PhoneDetailComponent } from './phone-detail/phone-detail.component'; +import { routeParamsProvider } from './ajs-upgraded-providers'; + +@NgModule({ + imports: [ + BrowserModule, + UpgradeModule, + HttpModule, + FormsModule, + AppRoutingModule + ], + declarations: [ + AppComponent, + PhoneListComponent, + PhoneDetailComponent, + CheckmarkPipe + ], + entryComponents: [ + PhoneListComponent, + PhoneDetailComponent + ], + providers: [ + Phone, + routeParamsProvider + ], + // #docregion bootstrap + bootstrap: [ AppComponent ] +}) +export class AppModule { } +// #enddocregion bootstrap diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/core/checkmark/checkmark.pipe.spec.ts b/aio/content/examples/upgrade-phonecat-3-router/ts/app/core/checkmark/checkmark.pipe.spec.ts new file mode 100644 index 0000000000..f7485ec2ba --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/app/core/checkmark/checkmark.pipe.spec.ts @@ -0,0 +1,11 @@ +// #docregion +import { CheckmarkPipe } from './checkmark.pipe'; + +describe('CheckmarkPipe', function() { + + 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/aio/content/examples/upgrade-phonecat-3-router/ts/app/core/checkmark/checkmark.pipe.ts b/aio/content/examples/upgrade-phonecat-3-router/ts/app/core/checkmark/checkmark.pipe.ts new file mode 100644 index 0000000000..888017e15c --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/app/core/checkmark/checkmark.pipe.ts @@ -0,0 +1,9 @@ +// #docregion +import { Pipe, PipeTransform } from '@angular/core'; + +@Pipe({name: 'checkmark'}) +export class CheckmarkPipe implements PipeTransform { + transform(input: boolean) { + return input ? '\u2713' : '\u2718'; + } +} diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/core/core.module.ts b/aio/content/examples/upgrade-phonecat-3-router/ts/app/core/core.module.ts new file mode 100644 index 0000000000..84a91dc7a6 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/app/core/core.module.ts @@ -0,0 +1,4 @@ +'use strict'; + +// Define the `core` module +angular.module('core', ['core.phone']); diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/core/phone/phone.module.ts b/aio/content/examples/upgrade-phonecat-3-router/ts/app/core/phone/phone.module.ts new file mode 100644 index 0000000000..0b6b348899 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/app/core/phone/phone.module.ts @@ -0,0 +1,4 @@ +'use strict'; + +// Define the `core.phone` module +angular.module('core.phone', ['ngResource']); diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/core/phone/phone.service.spec.ts b/aio/content/examples/upgrade-phonecat-3-router/ts/app/core/phone/phone.service.spec.ts new file mode 100644 index 0000000000..a0c1655c20 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/app/core/phone/phone.service.spec.ts @@ -0,0 +1,51 @@ +// #docregion +import { inject, TestBed } from '@angular/core/testing'; +import { + Http, + BaseRequestOptions, + ResponseOptions, + Response +} from '@angular/http'; +import { MockBackend, MockConnection } from '@angular/http/testing'; +import { Phone, PhoneData } from './phone.service'; + +describe('Phone', function() { + let phone: Phone; + let phonesData: PhoneData[] = [ + {name: 'Phone X', snippet: '', images: []}, + {name: 'Phone Y', snippet: '', images: []}, + {name: 'Phone Z', snippet: '', images: []} + ]; + let mockBackend: MockBackend; + + 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_; + phone = _phone_; + })); + + it('should fetch the phones data from `/phones/phones.json`', (done: () => void) => { + mockBackend.connections.subscribe((conn: MockConnection) => { + conn.mockRespond(new Response(new ResponseOptions({body: JSON.stringify(phonesData)}))); + }); + phone.query().subscribe(result => { + expect(result).toEqual(phonesData); + done(); + }); + }); + +}); + diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/core/phone/phone.service.ts b/aio/content/examples/upgrade-phonecat-3-router/ts/app/core/phone/phone.service.ts new file mode 100644 index 0000000000..ccbd1fdd72 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/app/core/phone/phone.service.ts @@ -0,0 +1,32 @@ +// #docregion +import { Injectable } from '@angular/core'; +import { Http, Response } from '@angular/http'; +import { Observable } from 'rxjs/Rx'; + +declare var angular: angular.IAngularStatic; +import { downgradeInjectable } from '@angular/upgrade/static'; + +import 'rxjs/add/operator/map'; + +export interface PhoneData { + name: string; + snippet: string; + images: string[]; +} + +@Injectable() +export class Phone { + constructor(private http: Http) { } + query(): Observable { + return this.http.get(`phones/phones.json`) + .map((res: Response) => res.json()); + } + get(id: string): Observable { + return this.http.get(`phones/${id}.json`) + .map((res: Response) => res.json()); + } +} + +angular.module('core.phone') + .factory('phone', downgradeInjectable(Phone)); + diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/.gitkeep b/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/dell-streak-7.0.jpg b/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/dell-streak-7.0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7ce0dce4ee9edf6d1562f9123f0e51fc46310b06 GIT binary patch literal 23086 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 literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/dell-streak-7.1.jpg b/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/dell-streak-7.1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ed8cad89fba49d45de5b2151c351ea025399a205 GIT binary patch literal 23269 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 literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/dell-streak-7.2.jpg b/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/dell-streak-7.2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c83529e0f9c89184965b79f2e81af72ce753451f GIT binary patch literal 4686 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 CD!YFG literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/dell-streak-7.3.jpg b/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/dell-streak-7.3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cd2c30280da82d541b2adc803181a105935d4e59 GIT binary patch literal 28319 zcmcF~Wl&r})9wO`yC*ndaSI-tMFNYvy9RgnC3u3nJHg#8xF-aMMS>>C;tqk!dw<;e z?pOEE_v6l)s;Q~2)6?hFnbX}*Kl8Hu@*99B{}J*LfPer1AiQ3H7Z^YafP{$npZ?l_ zuN@f;85syf#y~|yLBqnp!otMB#KguSz{AGD$HBzJBf-NbBqAmz#=<3iLqhb1fQXpr zKS~ggUhe@Sqa!1u6JcXw6aA0d%Xa`i8bSg>0usVI03tpD5p(toN!L z?N!Q+4?sjjKtgrxu!sLR9$cjE=jZe~Vc1{ACq@ zh4iWs|J5vUz_oG=Qvn83Q3z8}44^263Gx5ew2(_eyW(AT)}+yv2ZN}9Z|uB&p=D{= zzM-cC1WiRI=PXZ<yq6=cx9~FA6=oj?-YMB8snjB6Qr0Rk$Ln`S9{Ya3FZ`H)7wnXWYTbb(A~E{DMfx2ar!nYn zd=G+{nj)4s^#|vC^jmE2at_VfC}p*T;uk>5H|iGQV|TB&46}Qs@RmuNqD)^_)ETIC zh-y*IK9z?%&IM{k0Y^~{2F73T6`v&p>4Rl;4Cws}TU|2h%x=AN->s~c9U*Nh)+J2OBld;2o^5##@8-Bz`|5z>jQ|y9%DY_zkM$52y#1_R+ z!>_|bn1P;2&9*5Gj-To$u|Y|AAwVZ@&6Yuv{S2x%M0d^Uzv7!e$zUnNQwoFUxGx~NgR zYk#jg>BSuFUydXa+pj5LXGVPi$OGtlMX`-!5F|8{X+PStaB`4~BTeG3VQCBDZ@vJG zu23$0yKWSV4rXM7xn2N5nj=R~&s^WT6mzE=N6&e;zzyWp=sKuy$S|cy z;fWCJ!*?XpoUj?x1Qr_2$j~S0_JhwfjE1`$5`Q^T()%`0>@#Nt_!23V5LVk&hJ(Mp zIV1G+j2p*!0r)h4K>;BZsK|F?_6FLsIdQ3j##Gnz9Q-OJY#5g{bnP*n$Own6sORa! z?I~EbVYDCVwU_p|wk6mrgIZ`!UjU?H#Jfa^ff3Wo1m5bH9H2nWvLkSOy<5aS_G`KYZ zH*`Y|0sco;Rgu~6sa)`9iM$HL61fbGe!ZO)x3Qcd6iRps;7hX!qVY*XN-qGjMfj|gRp=>)~ ztSI2CFH*#l=7%c#v22)w=OH2Cv{R-y*K7$J=k{g}*unBDFl$EKr%{_IQ0%?fe4%W) zIkJ%<^5-XgkD5`Maa-0&lLPj)`C>7tCb|>be_>C`?J~(UhIMrDc|DbQHBTX$|0GKB zWleq=z5v2*_J8ktN(fZxw_&^&J!sr`0dT9#Xxw7M5eB>eqWsj|Hbm{wp$I!HKxQJK zB#Jkys?Su#PBR}kk&YYL!+iS6+~xu+NMUECV&=KmL}Dj4)fL5hsyrY<{#2=wSR{j> z|Ns06BViAYw^@y9HR2@|1%xEu5O4QwgX^f~eST0HRBTwTFB|P^6Ic?j8&!wB0OlMK zdr}rzJjpb;%fy#r87G5Rj~A%@&irBTcGtJtH4pxJgvWr-q4h!6tPyBcAv(x$^gCEX zsf>r%);D4HP1{=M&&f(v$1)%n*OS4hb}Nr`iH9&{+)ul1=jig!sg1ZZiK;5*Y?Lf9 zptlDo)|En9RjZJbLX;Cb6yqBp;G!Vl(0t3LVU*}@x=5|^Dvo56HQL|=hIBgJdMa#* zj2MpRKScEq+0?bqNsLFbrAsA^C@yp@a5lKu={2{qaYUXx|7OkVNbsoEz@Ten)m2WN zoK}Jf3g!km(#)i|lBg^z#D6IAccR!`M3r*d;RyS;kY#K6FXOHwBH4TJtKtl$)+5(| zSOLEAA#8J-BZR+W%6)FGvD;STN{fl_)8l|{J6twaexKU>6It<}LE6DUqi8jylk_S5 zlxrM|4g6;^nf6g*J;GCx`1;`c8fNhf;w!@{taxVBW_1-+FwH+(?o&nBI@0NfD%P+~ zm|metmJ*tnx9^i2wNN)3ego>vwEu0=?~~X`M9$`qxm}=fxa(Br3jmw1(Rjk}-DEg< z-do$9>7|Ay>=!_%48oR6?k@gCRg!GVQnN3oX)lTiR0WqEuHsk2VeI_OqvVjj)zFVQ zqo7;84o#hDNOMDdR!1x3^(7*D2PRen+OePiEfAdrdJwaHcL|V%15Z8Aw zc_z$qUAe`f+l6-r7h)qXgR_~bI0z%Ev#E5SD zZZvjKK>5B~KMDX&3fl56xLMZO-fN)6Wp{y21wlvDe`SJOuP+T^_U_-l@t8;}R%>xX zRBq=?s>fwz7j$ezrF-XOIj*M)Q#w$hijV+-Mpjjk%o}A;Ca`4e__wTH=7Y5M1rCh5 z^iw04Mh@hIZ}1Irh_H6rqDu}r0YZ)#T9YwCys7*bGjxH3Ee-|a(TVF4jm>yf=-|8xHPmB!y(ZMD#R-1VPssjk`^sZ+gPaLADPw4zy73jfr$esUCR_J1 zX)RNYsNhpz=ye&A-2tU}YnIMtXHhj_5H$?xONI-Q(8ktonHYJ*K>v05KHWLy4v9eW z1_zfO5l-PE2IToT$a50T`i)#JYt_+6{6`AT%wQ0M-%2XT(xZ&~%!58M*79G9o&JnT z)CMV+*PMQ`qKO&IO?=i-E)X5HyM*e~`FpybrM|rr8cVP%J&ODzq!of5{Nh{I^JP=7+%QHfQ$H)F4z;RmO)7?l4X! z9*#)^&Ey_-+nODN&b?(d$>P+eJ5_JDEYA0_ zzBQ{oo5*+p$jLp#?J#GFAzg4r1@)@5a`2l!R~f1g z_|Kk54Y+Zs_WA97QukVer5F_BbVD*|0!^DwN^Uf1nTaoe^LHh^xSteT>juScgekIj zdEE4ME^A69QlJ1#n%sELj~y#Ub2y2VHC32YIU&J=M!9$H+rMv%c$*?t=vH!Isa zUrPhCCP*hFX!=vG@n@^p;t3Ar|2D>J6tQ*vX6SWXQXo@!m&E9$p4-=1387%!-rx#2 zwuPGyfY-g?h9P3MT*l?LU#V^kc-+2}ncqyTx1g+AWkUylu!SJTgfgi@(G!Kyk$P!% zI0Ouia%TFs99yuvyyDVi_Lc9k^o0o9K1Cr|CUyhyX8;WLNayGboyBq@Ub#GxnLl0A zA+2pXDN7$B43K4pdwf<^QGG$*sjQopAJxy}NoJ?p2>H0>4puFR8lIUe4wn!ruAWOL ze_yO#OmZxYATj8Cv7vdG$L(w{5F`O6sADZrd1*Kllc$8;)NaJ{i)tDcCCklEzO~r< z#i{4-bACxdfIsvlworV~WfBMJi2dhAu5R#DbQas* zHB|^4c&Pd?-G;W#kJQ`{H_!F>ZU5m%>*)4|*|xLbcoO}5V_9TYgCMrfn>E~k8GY?t z?=<7CPx)1!aZ6nrz*wC^QAzglt1F}eH(x&BTJKay7W6|Uj@Grt%SVYl^aUB#^)}!1 z4R`L@=0svTlK4;8I(~X&PQIU;#JnrBor+1|xUOhUcOY;ia^5+&sc=7?!Fm^4-%ibUqcr&`r{HP8A7Z zB&yBjUzLA`oWO1rkG5y6$45?onXLVJG#P4&P+^ulRXD7Ahq9*#YZo8bo&B1>E&BZk zigbF&N=zB$jnRT|DIZnAWBkZ`X7lyK?P}8qY|G6ag4Q`&!dpgZ~8<3WtW_Cq5YqjW4mGM-p z-=;hv?7vPLS{f&=yeWf-_vhwrdGx*4IQn;Y*AE9 z>?Ev+zegymm0JE8wzM|9L2a?3c34K~+b9+rdR52s0)WTI-eqg~m$fZS5mAPWi%8rP z*uQ2DzN6i8&(2Z$i6UhP{;BiGFQ4)uHvBsrH7cV z8En6wZsQL;jg*Y;op^XP4T*lze*wrgbT%7cqS1t?Yog=PnexY!De7&fD>`nru21=L z%QK7E3fT8JuKz=eL_UVsUcc}9z^3tb%UaS2hx=b-*E?&$P~CT?qw&nuZ9zYBR7Oso zKmTxi0Yuub26rmSKaj89eqP?(GivqPQ5F0$35zwbUY000^WgI|~p`e=#+GsBGy z`+l=m!R$9j-)bsZf=D6*`MMfIOJ-F?!~%r(=a`s00vD;1`C}+wrKWPS2E#UjW-IR!%B-MEAxN9B6&x`fp$X37g7% zkmr_cD`msSkU0XyhOD2k{=e_eDp41EmUUDzo{k3V9JOOSh6kmC*FDob6Wb)TiK%Ui zPUHn~RX&jYT;?#R2Ipr~D6GEmir>mTceFUpzxb9;R`eyjvYP_(7?ak1=C2rpA0#sP z#Pgt>vhyWwrqZ&Yn#7qbcGY!!F72OnW%!q!Jyc|uUFai4IfuXPU zkrG4Q!K3(@gRi3)QbZ;S#dZ}*`je)=_8v$0LX=|}soV6Dt;26Fmqs+IFgM|0_mEFF z7zdAGT@&R$C{4Kqo?L$kJ}&9D({aq!lEC< zT~^G1!AipfbDII7#!wi%cEgN9v)-J1>4LkMs{QLvfb_8vXjLRz@oVxC2&I->kC{LM z1NErIKntaz&sv!wCw=DTdF9IGGCV_s z4H@_uglIYCy!S``!#}m?pQa6hjNq;ouU{=ZQ>GFC2+hz~Ib_=%ix-g+tEAlW`{sd3 zIxlrNk58{wO;$vhCz&q3qC3$RshjH6Fc6`4o8@79WRVIfu2B1f@7|)JzT5#A-@l=zKlMXPq8D6ep-Bssp zou)$Q7v=FM#<|HreE9;2)~niBe*f1w4)=C~*8vL4&~8!#O_+LoYwhO|m)q#mzR0Hb zw)*jWKgWeNddF1!^Fs7EQv&~So@rGEzV0}cTy1S{QZp1HU0VgHpCXcpDl|E!H&9$7 z;&9ZokMg&pUQI1|djPF80L%?IA>5F7$g=O{ZoeYlu&85C$gA>O8A3ReLps$((fojh zkswXEUA?`;6x*=>P@^l$rSpCdbxVQ)LgUDdvVOkD=ay|tZ;=rI9AoCerwI`XTi;Xy z?o)w*V)YWC45mKL1|M!uxzmwJCRz0Hv`dNU(Iq9Inu-9Lq5Le^TU(Nw_ar?90qH=>P1*` zG-$#O($bXuc=kwo=5t>wSb(j*$*bsqyP@mVQr?9^FF}GG3zt%)BVIP%-*=0eB18yf zhi(=<>Pm)g2N0TSWF(4`{(SkCmNnJ-6Yl=+zVMngSdbTi&AyCmXV!GA;x7_-X<5qW zx;|c9B&Rf#GE>11S58hgeiVN za()4PXijNI;|4IlqZvB`Y1h{90b!*t0DkTr|DL#@Z4)FHGIC=7z-X-p9Vf|I*ezuN zT?P_2VEw^im(9qvad3sn@`qMG?J_4K2;i_*qXCp^r zkt9V(tqdXpumlQn5+LmMa&BCdzy{~FX5PkP%8n*Vu7e+mmKgMpx+r={;MmVo9L8$~ zLcf|U>9a?QXV*5u$leErHkj|J4zfWz`qjF=9y7eGV3%_|mv_X7Bb@tTc#otZ>oxm5dyWOFY*MhF#TuT?*iz7qW>KV4e*i_-^TP6W4g1CQ~DR?hYWOh4?s;hzNHb<+a$r zNw4Dq*IL>-_KdpP{Z7{9nAkg8QmerXG|A0bS9xzk%^in9`I9$-577dYW7`M9td3=^ z=S=$@4&HLr0?~Kr!Y8c$h;jb=pFQ7ox|k5$^8RVoYrm8>6rpp&=0BO&1-sJiNJ2kH zue~L@9(!-l=i&hyoXA`OzHW)Xmsu)m zun7gnwNnNf0D6T9pH1rUCVr~qDuILs1d#g#0W78Z4*v2Sa{Mh z-kgY{ZPy?DhS$Ulq%8R+;46Q8kBwr}RhpM!xrWi2xZEP2m&O7lspyI)_x~0&N_F!q z`IQge*dO|RYM<8d_z^z$Q1-B1!0xOW;Tyu@`Cj5W`G&Xm4?ermsG(5X%=JJ*Gj|(B zLL?du0cz+*N4CbJ@_~}g*WO9n9@@%Se(d-luaSjO_KXnAZgpr10m_B6^srP1wJmw9 zgTHSqC0C+7#ZIMJ)zWOC!%+o+Dg_O+9xDMW?%W{5LLBdV_nkcHgj4>y=+Z^ZX4*~p zL!vh+_v)9U>VhA8*zgMzeN94Fn3t-T@<0ACDo>h6=A-_yYcnGl<`~zh_M}#^#kL0o znZ`T0*>_&J*0W}@cb;R<37*j!_#Hu}(e%wJV+GfIK1LV#XtJ03kK@G+0t!45?^0e5 zhzuG7QATltQLBgjzLLoOo_?!fnQY?mt0rmHa~$@(KsNo9j>9!wGrYkK51%#YRS(@4 ztxz@lj=twvl0byB%Y^?9+Xd>bgA`;*ohssq`eyxyh0$nRv<RA_8sub(i?Om~HJn~N=?&T3n6OYXQLX(){oL+%h_>=RDyMM*>zHH*P-V6AawYa0f9#R}tnMCX zF}7_U8*?&y%#3{_kAenzyE)Lo&d{c9fCMJnpa=G{XhyhjkzuZWL69TZ^o`n1=%!9L`u}TZtM|S@Fy+LIZoOJOc6`OxK zgPF8LMRSNwMb_zpF|Gxa+J6)b*-uU?3ac2d?-2XC)X!PI$K(!4Bs>qBrZXd)SxTDJ z)3B3c^ho&!Cf-C6TVfqX!UB{F?17UJ#$N`fO5CB0Koevqd5xZ1? zNJCXVTk-<<)XRAAgMm{{7-}?|H)@e?>&Nl-c$Rq8oiSk?1QtuhGkYzpD967=4D#$K zQvX~~2EVlyX`UoVyEMDZ98f}GHE zqQ)zD%~}*!%ly-Kc8nwZ2{t+YtgIf+(AwXMOmAB;Cm`OFpl)>E)yo;+;?%3lc;nXJ zRCpuz=h3A(P)~|lB(!xar52=Xr#7bGC2n@2-;>QPSh#(!$~M{ma#yNHX7!{x>&4j- zbYOecd1%P8)(@ikdtR$M$X0aSjNiwSNX3{E^{}Mx8f>s;)`Hpk!>rb*`50;IW+3KE z2|*Mf&a?=Da8||BjfWGZ$+TZy!>xdz5Ex(yJ`-NbRq=|0(i>A56LrqyV;ujqp(wD3 zTGdQOSTbp29AXcbcqj>EjlAOWEJvImUMUQSaRFU~ZE+FqEp|>q^~`K5J$m|SXuC@r z)EJB8V{jh_zOE#{0JQxmQsq#Gl#H|sBrOK*ItvE=TNPOM&k5_yv)0b&HrjV*&GYEO zC!t7+C)ul-1oZq|f4rK0;$4$%PP@0;sH9m)-lUP8nWyZb52`7?y~3?g6)O7eCR_iY z(HY0_CM>a9v$)a3Ae%K@m;F`60fVPuM7sFxf~(@Yvas3D81dj)FA(KiLVM!jB>p{_ z_ZcQc?9D#wN4`BFJ+!dRbf6~%bU1qS>zF@CBdW`xfNAigqbY~Tt_@TymJ)_G zDy&E*73#Q?$~vIxVMylQiQV_}0&syc4xRv%1+PqdZIW)cx83!f>>=TuT7Xu?6b^!t zlrSLvJU$hx%3YXt3;vu<1#3+zpFiVada%-Thk3k0(n_8qMfOeKkLJVK<^V~ekH5!G zFKY94!q8R7JsX_8)_OE5#AqE``xZMO*9!J=Ib~uIos+QuqjQYyW9&LE-J=fCf2GMR z`8|O;gXF$hSO4O)3j=_Z0b#702l8Y_jny@M0Tq1ZK^YvLhs-)3+kR%W0MJ=g{uq6# zi@(3*wd&U0`UwMC$wj4H-D{wN;`cX^+R0KqjlO-fL=-9s(jwhcM`))4EIt>?OIgu9B=6yawzBUv=`oz-Sj7tadm^3U027FsQ{7qx z=$+`9*XDz&P%kk=n&v-R)EV-BUi={WA(Rtybi7aQ2(QPXm+=s@DjO>BsKAz#zeHBi}iC(I6 zRUQco1rB)OeQpHgs$pkdB?Ibqf;~IoiwfbJ{z0ziUWu>^y za(<{kvS;-6j@3BrI#C-ev3k;Ca3sk`0{~c4AwVCDN_LAdDZ4V>mc6Ymvs<{+GFCe~ zC40vN3F!n8nn+BX7643hd&L>RNpO{&e({X(#e;`^jb))tk_sS|004d8MJjQUFuull zWk_fp(;k&4Ok&sk$x)Rjx22a?kNXY)B?SP!S*|csG5!`$!7-v!_R?*uLGGCjW7!p8 z!MO})|6T!=00BVqa&&&f{&mg%X~zsOxfXjj3jLgR>_Sy^JvmAFDan+)lH&wW0=i=y z;Zbs^VBc<#$9DMl7J=ZVyj`3`k^C+m@~gOm+=}W4%9g+p6Gw;c)fjD9G_yL|doU0Y zO%zPP!f|Il-4z>hRHd(uM+Aw-W${0t^bHxd4L5gxL!02MgQ?R~*g6r$dOYsDO<<)I z##0YMOXgY4tw%u#7aDcDQ!&@X7kAaPewC_@hsrW|;yLkRg?Ln6U+Yk0#%U`QEZC>z9lZSz2 zAQLzhM2L@ui1qf1{FLY8;(8n%T?)mb&tq5flu}Pu9Qs)T&NW*smC&BPsR?f`HwPw~ zMukVul;qanSV<~@X&L_!H-x9jhTxO|0(!e4c3tQFb;4Y2+SkncQ|4ZF1WBkEfyCxS zy@k`0|pRHESVi*<`|YA)=7MLu$|m2W!J4&DX`*|F78?$V~@^lc^daRI{v^9_`}^bNjU~Vml5qw1QMV^$F2wM z+E1Pbj0cZp*0I%-OD}-Wp=&e}H8E_dV$lJ1|N>il2Ff)-|V4K{i&EeB!2dd>NZX?9rP z|CSv`YOFG!r8@eaG&kcd|Y3;8tn&Vku^-Y1Dggkt^NuAB+>i@{@l zFWKC35gcU6&nlo|JD9b!r7~ZaC!-KcL(nXV0L@Tus z0y2>1eDY~*Sz|xMDzkptg7#V+DOi4p{mikxOuLH&j0#6!v}h1s;93zmwX;|AxvSYW*|Afi(tYzdtUEs3U&L= znlA61YyPJ(C66{6Zqt7e7tGrz%A*`dr?%F!bsoK~`UFS2r66SNd$fHXQC~&%KX2>9 zFl(x7)HR!V%DKLTvpE$k)Y~a~=l%492Oz@)I*~~izm$59W4F2Vr>1-`l-E>rk^m(H zyz9_dwV`nI3IC)LgiYAyN99Xh8i;vj-KABxXza^)cGj-s_IUXuE389Ip&h3-7R5o$ zr67b~RK1r0cz&=rf(Q~tn|#Z1aoKCEk+MX4jYac+^kx(PQ~5Ksr}8Mf(b~E@-70aI zcuy9^gFV=WG!V?A5!YpkbtyH>{Pa~avn1i)ulR!?>rTI@MWTOtP{26WY_wt+5an2Esb=jY~!8d0Mg zJ6X;o3$b4}Q-~|%^vAfN(vl(P3HDPyvLU8tUy}0})=SbclGYgw`%Gpw=Iu(q#eC^< zzNS^4_rW-H9?Vw$-I7jzq5I`wQ>Hk>#)+Jb8J%_{M=~@O3WU&v(wv~xY9#Ne>ooPf znfu;L-%v?0+L7!?QU_yMNDq@&)kU-ntEZt#Jxs|l(e(Wo&e$YsI_AO}(Gg&6Lv3c` zGicw^-rU@7(7GklZ+AGOzN!zTK{SP;VV+>{ZU5ww9l%xU&DQa1xXW7B-+0_H6!X+! zk&w(4_`9zz5tR@fb#hjV=Q{%*tdjRtFJ%U^@Boq|s(!LHHt#Kad^#*wRxz=-ZZSjv20cjgI<9KK;tBLWLP?Vpzy}wf@>L8CA;jpPwk4S z>NvZcfChjAoo8-C4dG6C`aL3NBTnqKI;_i+F+qm&m4D&5L!{6TKi+P;wk^Nr)sEC1 z$BSLws`bPZXuy&LthZs^cz$GCFsUJqG%Wnj|Vv_s!JUI_m|H zU3cf}(C9M$^z2O=OOJ8_4T;l2#y%<+jpIZSUS%biPvBT>w**Jya92>uBB>_ql+kzUFckA|mn64pE8w~QqBSW@$Lt2}wo zyZN%5J}lwt@hE?B5A_qX1Ckcw8LAxa1E?4dN6*{nB7IDfc(4UxXZ%#Vt7 z8P*g}2iG`Wu~V;N0t2^0u9B9*R?)*RIDWpJKwnX*j_ZS!pG0oO+SErh3R|92>8Vco#$zo=g`ciI~LtzRCDuIaz$t}vnKK~Ot)m>)1 zq&MlL4p!*_=6=DW70z1h*4v(gl&@6%!_LVH$S5hMSG+>~B9#6-o%-2b-on*;|DSTv z-&mU*8W3XsntONhVn>tF5!*=Xn4ovoXhU4k;#|}=)Hh+mrAyZG;-36VuZ*q@e7&br&mb^#_*ZLdh)kGrmb^P4cPY+=;6jL;aR@sTHAXnB({4N^yN2wZW z#u&VPp#0-a!7B<~gK(nn-}71<^kuytpO`pgPvUQv(=L`cL8ngqCeF{W{dX!_JhNg{ zhqYyX7rR59?m*ScWpc@8>5^}0q4ImrN^#kS!V3NmO`MgYMoHf`np=r1SL09q0ou*2 z!@Dx@p48!iW!oi!x5z9=4Z3>ECE*3h0O|e>+rD&ygaG3E_c;lzj%e-S7@?qw0SnY36R5BL|)*6v+b z(@zKKQD0QI#>(`-aM|k*$@MkM=0Qw|=%{0%)Ixp9Gx_p@0grGHCy-O zIE(q=`VTK-x%cwQu&@RoBF+$ohC$N13-o1;Q8}A>?Kd}YcmBBU368YOng*xU=?Mih zCS*IB@&u@~9KB^8G^;yLvT;SX^7&?Cr7>jZM`=oGB>_ehAbAZG%}bNi2gj6d%e1>D z0}FqkQlq5@f8S0Q&Y*!J;Gvv%quU&@oshm?hrVA{i#;}w3tYf6^fhZngdozSe7jE; zwF^?IN2zulNg8RI^`;omBp29IigVIa4_q~+DpBtAsQsez=366v2>604j+QzDn$l`TZK{{n7^hqhR?caeu zWYDT3021rfqTbt9jInxSMg|L}wbZvV6iDWrxP> zWiIixA2_Ol)Z-3c=!CBuC_tpXCZ*C#xfICJ+(Xg6#j1qN8O9rNpKDlB6@+_U)<(>b zBHSi~CusP7QU!}D${rZP%8Z_UY4SG|aYZX#XY}Z~Y~q8w+X4#ikx-wG{)&;(izsvM z=C3?Y=h+*Pr9M8Fcz=Uq$Jy>u#!#rMEV9V|&QslKiTg4ZHsQJg(<1OsGJ-sK5-n}l zgtW}J*-3n^jwIZFJsVI%hIrf5W#EqbJCMN}Lvo-`O3!7Wagy*Pi#74u;>(hC=AjOG zc00*iTz3|wv3(|{==at@I2Vob!k?w)g_DnSNLIdSX7v%Z1Be+=S#B+!-d6^4K2DcT z!J3Bu%@1^^<~!TTE|=y`oC8(~ns`XoZxuU5_Fr2!GE1j2Kh2Ni(U43Le>@kw$$Pk8 z!iiV2En?sD##<^|CvE@ZJGaV=0|1t1GBeZQNvJY`=LPvJw}T zeqdCemx^pc|EVYj@4uj*M3k&Q#fJ$dleN$OU0{hvPx6QkLHpy+mkL|H_r+*+X#K&Y zPQrfyv@C;y^}5_&00@O#{&~E;vR~x7irn`0RK@^xv&m#Gg*R*DcqQKgqIfIH5VVzc?^a(y z@0(P)-2nvDJHMxID(*8RCX(k~KdX7$@W|b?L;hHrA{GeX**FXR$)j22vPkUo>;lp{ zFo8N1!)papDH+7Bc?~*u$Y_@wjw6fyd(_XZ16=R`hK-FEDUr=Us zaww5od|lp$)pxgzc7h>pciXA8kjbeTu%miJeq-^I`@mb>@LO((&MphdROW5+HtxQi zPJ8E{@m-_5Xzgo!tK4U+`$HLz>uEOD^(GDZUV*;}!{hP$Q=WgQUq7)Q&E&x3ZpU?b zfzix1|DpIP?PR(gq^{C{O`+;9*LWLDb+nfS{3`KZ9f7{MH57?E7ksr-^Y&h-&tFwr z&N3Nju4-x}Wdn7Z7;PUlb&H(8{}s7u?q4%H$O#-#-b%+?t*K5Ty0s)A2uYAj0KTCd z$|sZ9K}qVICHX_1?8t5+-V>DJl5+ z{eT9Fr9ArW03y_;z1xzeG7#y>0tQt1faSQV^OmXT zWMl?>R>{U*ubnBMBp8b7@^QNjBOsiKPQfa_(R}aCWVvIldMWQV8H++F3zHh20D?r= zZyERF9;$=o-|G{$IJ0v!shjJo+?O)fARs}?w-C8IYjgjqiTEKp;^g|9&+x_rQxjv; zhPsZELl6O(I@Z|olW^S5rc!HQfzNg;8+*olXK3pfNo$2wNZd?e0~(NSn^vUc>lB{< zuz;r+V^o0hR7>LgPa_k{(khbNiFR_AsS5TG?@&-~>xTDgy)1=A;@-)uVQ1;VXplmO z05QS)UHru~UN1viIK(1B^^RN(BasG?CO>VY?x$_lI-d`_GYq>Eth&dIMSw+hM|Z;1 zzZGG;y@%oIShTSY3-?m;s$~OVLoFeoXix|+c^1d|xD@A6F%{n0V_Yam%tTyswmJ@C zhJ>{*ha&Y26!*w@aSLWo)&s>Za`1$sUjW7GroZ#-NI#v}Pz}t?=4o|R`4F`V5g_7f z)XOCafB@J$e60c;Q6T6{w8Bm(rB@6Wpw)3$b>eGi}S!5N$Fi~j4B?a$XTZOz9Y#Y9aCbxNC zz*wH@#@M_;VeGP_Ns9m~T9N-eGKA+Hm#w4jLdV9(+4K?G!G9wbI^ z&HlLFQ-0|MFD>C)HX>%{z%%*-497#+1!w?o$Al3~c&1X^l{g54cTX)kbuMJH_&+np z&R-$t`Nmy+!(+8jw$7Qm?^0MCM<@+xSW{QT3o=Qy-|1VdL6Ku?PZBW$J)3IhxT6V= zZT`_yN?yVp)KDu7P@P%{AL|@smQWr|+{Fv}{Lg-tYqs0x>HYO9dm~OrtF%^WU+i!} z-S3-#_?ePFjsW3~q~7bXtIz+H0BOj1SKRn9Z!34~Z_ewny1Mqo4tQcr{&uZ#Qf_zA1PxPl_q-G)nmA41S{tZ@hNUtvAG040`f z*B?EfC13f)$S@kl4Y)oIKLo_~hCB&c6RD0S$|CfuO~u5PQpDl>2h-|Gf!GD=cbhE~ zFo>#P3Rm=C?sL0-me=+RK%G(9qJh~3X4t%<>T)89sCG_e1wc4ttky}KMk)FCv+6Go zBQeWy>gh1&{_y>muRqeJdxr~+#=7XSEYwG>(f)i6Ck8V!tAavlDgmK-KH+g6;xJ*l z?T3^d%|BlNB}DY5mx9(Ac}`^n0zfDrY_VqXp?@vU2K(EEedAC13zBlKqdN-ycbalh zAYgbHxw`{8ajdqTLXSazz(4qwoNJGQbu)dVAYS?#KlKoPc`zPeIq;`cKP;}1JYZ=t zGyD9b-0s=<$J>=!s_~N9pi{3_nx!ZKbV3@9%}9*nI%7`DvYc z44a53%1g>t>nwSY@2Lm2JyIhqya22)@@@hrnXbl}XsGqRO}=kr&lO`}K6%{g5xEyN z)K#gGy-!!^Lg$$(vKNn%FMRV5oMtv#Pg8lfDolEzsI*_MTeImOi;@00<)7_aqo1IyqN|J;5xQsi&k zGz18AB^qtm$NIxd#Or`t zDLW8ehj56m+^QY*$Rn?-00@8ifc0_;<%Ecax}xCShSc0uc|_iJUg7MWR7`zf85~11 zacZrGVv?1f1&9Zs$%x(~oGr=mZjdEuR3r1mQt@w-kewm(*m(iqQn4808QGKD;Tqd$ z*UhMp?9#ao*QmIA+PYP>hTX(@RWlhBL@e~3K+%wbPXCsFmo!*CQWct1%1JKZeF5~) zLIBJh`O~Ow%0su?$V01w&pWy zgtN_Sb;;3B5PLut%aM_-mhO5&Pr=)r#o~S%7AuSrdWrw5wX2GXs&Ds0w@4~Iz|f(j zNH@dKG1LHpbax1XfPjS5&>#(xLk}I&jYxM0NOyzqp84+H^R07vZui=2?X}lGp7_Nx zRD3k6q;84Q*p$0Xen=WYC3GZBw+({r!7Yp(t%V_+zSlX|#?2dkbETJ8b+LOksV@i% zNgZifF>kIdFC_*nrm1(t9iC3ShP^SnGEVGR^Yed?ds{Bq@vlsoWM*44 zUqmTRwkY`ZL>TbAIf=1Ig%8%e=Uv6jtNisN_C59=R*O#i$-dPW6?#KbG)n1G2osM) zAF8D4QCLaQgOBDZDr%s*^MSJMir)jhSwJ^CH;?LyxOX2!-w|GC66C-BCO(-KNN;wi zqL=nvVkLh=d6p=^a>El2Ab>ytRL066T)+>B_30Poo~w#~_V+g)2!dKuF=AO) zWU5sYanjNmNX~>V{zj@@K_#Dd^0e%n56_mXd4x#knJ`>RYbhqtm^j4IF+HO^&lp~M zq8i&sti;kS=y$c=5)D~e(3JfK%Zpc_2uAC`?`6iQj`f<(Q{VOHjUE0wtp`gO`zRn) zGw(9d^ny8;9=*dgAk&Lv%GhW!HP1L?Nyzd{fC2Xd@G-Kgpg)N`Ug=}Po**{lzl6uA z9o~C9FZM%~W`ZS4>%C1+I&Z;M)FJ-XNpE}h+(OaJO-**6i16MM98F5r79uV%1LoNm zkKn62_I&z_|-#$rcaO2fkn zt>K^rV1jt>^8(;8c&+rf_*I=V+(D|lg5_?&;++?=ZP4$}p!m*@4H~$G-I8;%xOu(W zFus^@1vSUx>IjuHld>2@)!Dk)P%z5fsXcwqbCrij&|53H3 zSVwz5CIIc&cTS^QwUsmT`&`T} z8jKyJ4^~6QPY$WSdPf4C7s_(}{{Xh7OY|3QLPRe#?RL%$J|4RWSx!7#HRF9n`vD(s zS!BwxiwRVSx2Sl| z?8K{XO67UQeZ?E_BKnos2^w8N8DC3ME#aZqLz(D|={zmymk*jSEmO;oZ@8}@xYG}&URF&qq`KLAqwl?BO;Daeof$u>`)q;Bb=ou8sRDF%)+Qi zpPT>sIlUpQKd+{-X}mqbNmxYbn8bIgVHY1C40C%%@ltox^Rp0>-E!hwTC4sio0g>! zN74ziFbq0eK-XTQ*N1-q9=9Q98E0xmUsnZa;b>n2saHz&CS?R?W+fNC*$=L85d2nj z3s1u7aom52@eoM@`v-9QZG~4|ndR6a(ES;NL*l2-%f>NrG#g^SYCjU^ru#mtz#a+b zY@0)z7-aDM_pWrG}>x)?%TejPL4^iW&XVaNY~=L7<;UhJ&R@PfxjE#qya37%2QU z`S=dQ1Ecd%TXinpw}WAyYe3tn{^$X2$sufyu`gYUp?dnoh-aqIEZdwwnPI%N0p;{S zWYd+~^Ognf^eQi!wHT!17Ly%n{a7x-7H;L--dniF!iwAXoA+JfI*8RSI{ErxJ>Uz! z)5T5fNhR*EJ0ZGM5NbD7gp4U@ci6L@?SIR2`#9G_p zS$JU1NXfh&MGl<&S)d!O*jhKx=+u+Flr$!VMM@}f!qz}|u0P8S~Udwv7C@0aa}zND07BxD(27kdll(ytE2b-Hwv+DrnvRNsWdBS#7QdUh@ z^dRNz7qq4PFs>H4QnwJRXL!ortr8y-IM}Q{Os*go+_Gf@K~$Kt$Fv8>p?H44o;b?b?e z(?u!B`p<{-hM1!_ffdeL#S@hZf`u*QVo|!}#ETv2^(m^>mmSPZIV-JoR%dO84U?6f zqIX{`<7;uwK*d!NQTK1Jb*De;`M)`xVy75=H+8L@x2ipX%I>|(l(|p>`+xiQ=<^3M z%?|l5sOXBwKcIMEKL%uZm)1^9-WZ=9{hf0-jP7*_SMhcd7mso_l-iNiTCXA@S=j#@ z5qI4im;3z`$j%_@=_W+m@)Ib%ppJ2cp7Dgu{!-Mc2fI`*^}z$cX# z>veAdq2*HjGunFK%f^TlhSq-%gbxU$M)%)ph^N?T-f?VwR(t z-mi&YYCVYGrzgx?z`++-@);pjYb;he%_j)!Q2>s%gPmCqn?3tXit>uVZ|l3m2BQ;Z zPwnD0FP~>gg&>NGWcDCo8n~Hf#c1cEc%z1VWTNs|^YLu&C(`?SXw|YeWf*f=qtI;V ztVm(2v)!=p(p}msUX@COsgyoovi7`16a3%PSuuRSUd~9e+pbzx5_dEy` z3;x4w`>JEF}2M@mhLZn)a$>{5{ah3@PRJ@ptM!YbSe8CB=DJp=MoDbuApr-o?Q*=&2@U;khdO5= zNtHXUPd0YFL;}V2RtJ@0aRc^*Au$h>(y`<7Ewo9sx9RCHTum?+oNUJj`H8~uN`qeD zt%P_ukJ~uw3`;n9Dvi}Nf2hbJ`RCz!^mz2dn&(cjQ-^t@1WAuO58g z#9`G7`WjSyckMLY@J(e?5r-gwXL+Hda%04*3}XXb&L%LlH}(|wq>}vw%Sg9exdG>E zT_4~mn2s1?^ozRgZSEDXfRX}&LYO2-bi+}#!-+Cvb@Dp0s?@=B1wTa)aP>%i@Em2+-o~r&}Nur zykbA`p0*85dnvM$*7GWbhPyAEi@c}fbh|x5Tkgd9!>nGuHz*$aNA@iRjwv98QAIWh zI)*1eqqwC<%b)Q@zHzy28nz!hEHfO3CI z{a6Ti8m_H7usIiUJmx)41t85~R`u_1eF5HUUQ8zWSWKE6`R4?n=3vQqHjYU)mw~fm z=&_}vx4K&h{C$1Q<}#OeUU9fWg43o~n-YqvJt3jTc4Y9lkwkSAEH#5U8#3~;way~1 zqkFAAEY|f?eTKHW`u;ZVGt=d!MOp2n(yRFRr1L^FF%&Q6l!mC`d+`w~-1~@PH=b?Z z{?EleNTrS zepBq0@diM#&LB&iRu$O!jN2it(}I^;csJ~=^}!FHpw=(A89|V4$2sDBH1WXI_wniDC{RmJQa)hJWC(=NIiNmuEGEeURqjOa5vRxh|Y z=o{bx;2(onGwwOJkmla=uL&ZhT<&yg5dNiZ4ZhJT+(#=#4U9L=HGAeVb&dzQUnt?2 zL)ds3E1`=~-~#3L{y%aQfh(WizHxM>>2KSgw?FC!+YLNNGeVCDL2>dG92SF$F6cia zEIWtSR$=+S4wh1nH1}6kcts(kzlXRCRDXcr$}vNT_qSkN^(QfXIWjMIA-3`U(@*ur ziPa|vmDc?8p{y@*23gIx8caSCf9jV#Y_rC!veo-VYv-1Exw|sz)Asbpnm+4$_#Pb? zc`wyo8V_>1qN|Cy-JlQmMuz06`Ad^m+t{rptu$)^0J2K5@_MUO6+Wz^?r~5~a_3jA zVpi#~=9_9?R=7MWe>a>|b^$!{m`juKRbC0>r6$hhCf?!qWr~|{@yimqevM)ko!yu7 zAyCPxg(Ve|mr!Bi9@9+PwVHjRp4m@&5qqo8G8^ahgh!1CjQ%J|H-G62pEj@wk15 zv(Q3nsULyHa>M4ZW`hhTi+pJx-Owo}K24JmDBQ@|zehS?bSgmK=b47UI0G;rXF^Ya zbKhoqOlLgGUp^UUB^HODH%~q~J`PmEcF0uyEfIFH?2$N&2W1Kkh6Y0~iWV5RD-U(` z41?e}qFsAstfsX$UX*QYN9a_Ntn0q7Ns#cl5`dP0OKKtRQTW!e=1L;R0=xDA z_n8?#ryK)J!KTP$Q1F$Q-dGCt4b!?p9e#l2`8hv9_(w)y2H8-Nkn8G-Tq%L_1IZJV zb?+a5wIut#Cyv`av-kn$<6NrQrdrP5W6ZdAF@(fdFH|wKef-+@wHZfiTOF@Bt^isC zWLixj3OK6ByD5~|P>ZzF=y-^9YM8*|)OroTC1X;`(&3%$#jE8F5vqHVux%C?W22HfPX~UY+ zJnmc)Xc@)|G!Knb!O5~Xr3ZEXkqo~Pa@84&9b|TKhWm!vKBtgrEC8a&gu{7Hl2iGC z+Q7|URr&;^!&02}-k(ix?Tx7di4=q!S>=U*NOFRnyix@Apz=Z%@a?VqKta5HNcfuH zBy>|PW>rT2N?9tt&{=CkiO1@1?_{CHdGZo@a=azkS!rP8quTqol!e`tRoXarv#IRo z1xX+D*iu}Ytzx-q>fPx+7=r0pyZ5heTSyc%RIp6GJ zm13{>*w?MB#nubApY-p9paC!Er-j$Jvk965*zw9sO0a-X+noET!YDu#LMP341~0f{ zHJ=^7Pp{G%1^!{yFD@G{V-~^#lS-`$1>TZT-X45;6C!7+RBVDAm!-cx_tlj(AM%pN$iuja_)~X~%pEnlFe@iqL)zZ6=hR27 zr7+wHshDT5%YD`rKKpTaG z>dek9tQl^l6IuJ_W!|`3p}b6^6$6zWLHN-MNidPr7l#FXgwZl{o`^rZi!2&evolee z;u?XhFX+^r{WUE zIeBih8LGs~4#{7zgufNQ>gG}Xg+tWMOKs=NpL*_SY|Tru^QxI_XGEKxIlK*OgwE@m z;wrrE{!p3Rx4214wobqk7O*p3EaNO3hcxBs5}P&@j0j%}(tD%w%toMjO#a00+z^K@ zhb~fZzsI#sZ9_}AsXXz$)lwweRqg#!?)ecWQVt)tf3&bI{YNtoPWi`uszi>SBd>~8XHpOAWC$pRi?&@OK-^Oh$=^*EhLq` zng|dD)xDd_6J_krU0!+pV_$YzT1r;=K1#3O_3TYAHra>3f(av7)B4@>c*#o^u9xww z?=_MEa5JJud$(?X347zJS1q=GKiB>8;ZU*IRTg40dyGS_oN$ONd-GvB7H4rXZ^h%@ zPaCnYj%(X6__)S@Kgu%FkbQ1(Kmu!6gt2)`E3{E~V#$31XB;g{RUbpUledsG+@!#0 z72TgV$!rH26&f|dDV7)sL)-iyqRG~f&>YP)2K(4T4HfZw#o$)On^$$V%#URuxOeQ4 zcWN&4yJBx7!M6!c_u%0JhwP8O)+~+ZSo2R))e!6GxEXrVpI(DeCXfhrepyc zz2|v}VLm*um?eLiZL#6Y;*+QyFr{Yms=I|l&09K0TWMRHH|N@5rZJ4uLeXd;%^ zZgp+aC*g8phmt0^+BCR($4iCMAEU_dQO5zPCbqmgJn7KH z@xKtOVmvpUM}gPGDSz^YD3v=j*pdsYCOYKi!_?PXJ14mU*Ay&|c_t=Y)*;iSL?vDT zx>1Y?pPRX2<^>-$j#Zm)0q4)QoTLOgw;>IIW1>vIaA9fT$I75*i~5tqfh$+fz}ev+ z+*dRk-1h`4#{iBT! z_WEzP2z}j=IFfx3#%1L-rI{xKkn_xLZP-s2#-hL+U)|9YR-O2%G)wwKA*S3h;tG({ zE>Y9bpFtP#7ISTTSheqHDwa5p@47NtEl*mzxRWJoMQ$!>NN1@J(cC__r?@YRDN|ov{{hr7PxslVbLil6&<7>zX}MH8F=E1A zMqDk{vd#_WB)=kjPc~hW14e|`te0VkuUeAnX*x#JL?Q*Iwkfh+-jK`S^8J=a$v-Js z*vd5V=D`ffmI`orxaH+M!z==o$j4U2uPO3D_O)?Rc8(0g1wmAtY=a7KvHALs9z2}a zZ7*Fz(C%W&sS(ZbfzN>vKo>pD7!pSrg$)19#77IEEa72R0N@sY#YrHmq=9r=*o=;X zl_e~pjlvt4K)fgq0?D!3TA(MHaygPqi?w#dN*;H&VgBg4 z;>eIxaZ*FARIQb%NJazUB4mYbQQ2dkuQx=hPz}ZwX7GT0<^RR>GI3Qe-#_PA9!lY(U|K|>(x9$kOwEzAHj`zMl#ce4a%iD1J`Ow=arUXQ=^o+zYsyhvAq`PSVKp`{>=I#;BLltn2B{H z;0wY=SZa4HVl7?iki*z83q@zFs~ovYY3q{sxOrKU&+QV;aV%xjW|+Q=52G}DmgCoE zcnril%h0SLHyrqaG7roASn6mbFB^E3KuKU26cT{N9^NazkhW`ox!^M8XQD3jvELkY zn{!@K+8|{?6@> zhDL;E1@_?QDf`BhRC7l~wS2PYp>avG)`!yta|x25-bc~NG9KX&yt`SgIHSpsB=Gj5 z8V4^fXWs(nt>!F@Hw;*vViQDa4kF+MB?p}zW+vfYxA6B6rB|3jP5Df zcZg?+G3Hw$BT-ScDA7)TV!%WMz-2PK(SVhd^08;19UUx^JVX5ych;d7qWDfx~TTr-Y-e8ubohDFBta z5rA902XD&R-!$e-#85oJN@DAvAYpKv`u>y~wyurE#)binV{l^Ngx}+gG@#=0s>1Yy zlT~a_OO-+#Os6a$ZI->e)?ez_tjbcjA|%in`Ji)0pP=@Qr;%$EE;dvwvZoDAMvbwM z{?{A?3j444Efuaoa1GZC^jBjonMWo*ekc87@mr4cp}|jWHaHE^iNc_tKS#R!7Z`YW&GZIgQ})tuVM(Zt&DzwqHl~anHWO@7I}p5zVm>lDSvW75iu9haX4^J+#q;&^to_&` zBQ9S3^3hFEML>}7Sji8PxgCSg^zTsMZvKiUE+lm;Ud@7=^I^{kP4X1o|IRPRpn}*W z4@9pZQqY!2W@ykOSs1AVe5yf5VW$?1W*)6m&FF!DV*1EQj5|K&1mh}wQ+}A`Z(PCT zuoqY+4Ak9nA$DBI9#WCy(tQkbVl1p@#DhrHrj_i=FH(OsuQUY~g~^;~244vlI2F%^ zkRL>7z%4V3UxVQq*X1;+L~kDYn8Z;lWo{kyI%U(!qglf8$Aeyv!S&0Pa_`Ach4MM2 z<;H`#8l1WXdqyK2UY4OjIYi&fozA;e*Fcw`qh+G^u%iY%F2JPU?EX%=edJ}in85aB z*?j(J^nQy0ID3dyaYZA>0qJr^Mkne73y54BuM==-I$o`1s}ZMsBbx zl^hqL$Lhkdx10=m#Iibf^lPyQtPo3<6zOcGXBDqrLgHMp**Y3%G`QF?e(13cTsSQG z3WWxfaFc;fkZ9SrYm<$nqlv8EvC009=(+Eu&+|MisDCm|ZE+ZQBDe&*BO~}IT0}L= zz4fBl^ZpGL>Jjw08?{wol3fdBBl+Lmyx6Q_B*zT!9q68CGSiqv_O%^j@hmT)I3Xk$ z_PspCW=gYpsWsd%s*ENW`wbc-vO$1M|DiNybUK)8CC+zkww8B#*s>QyjO6fdqL(si z_x@47C3>$(ouXHeppD|FK<2k#=8PafvIjaK{R+`)jjrh*Itzt;ZVY%=O{zQj^@2TK zgAX(7XB+~`jn-6z;nJK@Wqv`A6b>$V8SkCZ%ng>{awF_Im-I?{tzBgl&ywk!o3%gX z(!6F5HECXcglw{2d7Uz@L^qX&}b+b>(Eg$Fd8x5y~BrwXk%O~tWf?0Y)@PId< zBh3ZuoF)XA3@^AX4u0#}vku>`MAUp5A#~+=0Z`+m_jif(pZzOi0rTm(3kAig89))?Vjy zrAc#15$w#UVmhp?Dvd3w_e=(5P$>ae4VpJO{}cv#EXO}F(fbklIHr^ML(Mcr83YHM zMa2xw&uM>qcfy@RB4qpC|KX& zc8XpCqZh2_NqZ3PRpwlB)76%Fj)?|CtA=CF-~+Viu?r1@c|LDQBCD4y6?=+|L&3X* z)PrOVoA%YtqYld3rvkciW))nuB31WSf#nltZA%+}aUqWtmVoTR^#)VMV+$#!kC+g9ewT_o{=S zFYZ-o?f0rCP&$j!gu=VyF+sd7%-D-|Yc7nkFoRs$KMOFT7JNkOa)#hE%8gR~2F*~6 zUp|s=5RbazK-Df3H zZu7DwXsW?tSBrVASae!2l;%KB+8Dr7%!vBMk$4)`P|_EP`p@V zE)WA1YJV;O#O<@PRpJQ8(a&wO0Mh;)EsXwJ<(Z?1>|Sz%7>rlOX&sJ`B+>udwo524+j{@g zsF`C~RZ|A!t7O#9q|1(9@@b-67u1_ERNJ~g17HejU~YBc1i{4~f+*ZbIZHI|Jaakc zm;8ow(K+k?eZl-^*$sGoY~!S6>tb+$SS3zEzFcpaQc{0O5z3 zJ{A)&li$n`ICyUp8YJp0&RJ2*%}&Ook%gzqBJUG5sMNE)jD=&qrFco$qmTJ_e{%x* z0}Z8%GbpurmAY6W&0OfT%EkTj326^kKF;M1!O>D;JdbH{EStC~Z8-EtV>niW zRLv5X;nH@C99vRmL!Ug37-=%d*_Lx9h|MQJ6DL|q$9eSS32ADN{xfwkB5~uqBGY$< zP?OUAE~iL8_4|dsjHVd4j8q12Lhp%%PaJsF)3TUcvTtE(gu0@sN0%zq|L3?0^9XdMQ}qlW3dYOdjajU0GMwP>E&o(lA1-aOQ(X z;Iw<1z?~NQFOu1k%HnN(cY1h$?Un@IQrmRA<`sn@g%6NV?0#lB@-&xkFkiuPOCt=n z5J%L;PJka&=28>aZjFa(6N5;_f8a1{QY-E{g>g2#XUuXo5Qg_as2D#UW^L4elNY4#C~sf@^@o z^VT`1p6^thAK$<4o~fyt>YBT|x_bKRyRUwleOd(w6yLz!07ysxfb@I;PYZwyfP#$t zpZj@%o^MnPR8$ZM6$>354Fd-Y2L~Gq8ygpohyWLl5Dy!hfQ*2Un1qy+6bGN2f{cWM zh=i2nKbs(-Jbwd1#Y9ELB*DeTCHdc8PaOau22u=C3V;=v%6QZsQ1jLpU* zp{wj9<(2+J&!=v>Mh0Qfa1KJ`RGsk4be)njn*E@7A*<;c*ZsU9<+Cnil>bHHf3!U- zeHQW%0?5cnD9EVDXwUxoAB&KX2~j|=c!;D>iPf9}O)5#~VzWC>(0KX&(DR=@%>y_n z&-)QRn-;RHG%Wk@s0g zKAlLis8W} zD;}_QJj~yWuS&8i&lTtb5}EUj=)a}Xisj~aYprvVm5s-`2f%+qG+GPP_tkR=a$_)5 zc`-!$B>2(vSObQ&|9_ptieSe2qq$Av`aia+CKsayuS>Y1PHMGuMAl!GPjqwC@%~Ym!!-;172x3V?tnj*_hG>781I0Q@3M{442>=esDRh4*`royc% zk(ib>%7FX+swIPx(m$DA4lABP`y>OV&98S8Ol()*9r?)eLbj_sw!|g&A{>JcVaNdo zthwQ9-+s^Ubfqzr3B2QwkDd; z^c|>|FkOj}mPOlanacVOd6tvy*I7e@mbE(;$pl_Le;XZg2hF#Md`M9=(qoOZr_5ui z;t{Nv`_P*y;g4h9M9JC5Xu32u z>FpdSCExb_@d;p^Y8=qh4YKD8n)VPxcT~7@rAgx>%C%pD zEd(!JoLNyEci^G=<=mwZ&mA9%Jwg)GwQY^|p#y&)`PQMf{@ct5i?-cbDbjA@X}=mx zR$=P84yWoIxG-)r{Xo~FSi6rvtUnGqQt|9{F`t1VIg#2yu)LCuyQ&0ju(j#7x65fY z|BvgaS34o2mpT!)`0y?{Xt?@!-W+&i4k`vjx&5R4s~t?ire;1D3C6o5M#1 z+LkT*l}vOaMnBhJIm~Lip{0Y&R>$hc(~^Y5W|K>hfsn8=GMUtEupS{R%A}uL?5-fb zyow7gpOjevZjY}<5LnOh3|9dE(sE4&d`D6)MT@ojIO^L_`xrLFXJ?b%V3FfF-EZ4& zUAeKWPYjY*pOgNgsx0UHYEMOiGH=SJh1Pk^?vHB_NhV(PIi;$zFPgjW5w=yY?`zA; zErjD-Jtf6xcbOZpxAKF>;m zMfL2*Y+_+TVNN*d|2Hw#q!#U|eWAT+%fQ=}ch6Nyg__e zQ;*Q1`MljWLn%$dBZ9mp-?6xiEWwSG|Hka-!}JU$UAMex8B?}XPieI0>+X^V9~(oz z*Zf5Cx?7KvoV><)u)2rXC~73@F(L``N6r4hhb%GI0aR2Q()mz~CqTfWZet!O_XT&x zlA8XL{M!`|W3m+0cKRYj!g=%MyCd~iaz(-;kR0!s4}4nJ^ZvMa$dGuZwbjX3`p4T# zV!pL^nsfq%Sq2Xe3;V3@N7p3fd5VkwY~J>(i4Ex0FKfbgbmIl%Br<9vrQi22{t3pk zm5&~&OdM0`2cjuRlZOa5w3%P*sp7~=fwe*c8{>2}aqe!WdFe-I$0*-<^Z0xARf8cV z@fo%5et$~jQxyT}0hlU^ee=r+>BNDqv7Au6a5Rh(8a7W08}-EMDMjA5dUa@xj2@!l zweOR`orG(=VkLsFB)b$&<_q(6C_|CwEJ3w|g`WV|(0c-F zj2|RlOC&x1u{kwke;E?!9znR{*5t*V0OOHu0n@^C#L<7|gB}$37T3#3@cXOYA``&q zDsyh zMuvpTfC{Ki7&dD6Lkvkq428JGh z0yIyJKcHimlZN1(etx_aj(Ho`@Xr+6UdDG9)lwSM;S^|qI1rM8&u5Z7$4KzMRw!}% ze=tTio|qk4`1fX{^;@5QTC>iIhCudq5CZWN%MwWsiKm{|XCHi2F{l680CUYKaq{KM zCx9)kX<+Mnjn?qdx{<}(S9uA}0f8W)7^bmsV)>VX%|~~Ier~piD!4lAZtBo~{iTE~ zZQ>J)>Qa@(;T(E|IG-j1nWPm{nLFZt=Rn07); zv&+0JQKsRd<^;F|`e}Y4(@(czA6k{q6f_)su%B4jO?L>_P*Tuj&`Av7$oo54ln_7q zjmQh@T(rh}>yb_*NPf)<^Nx1MFnBIbRj6C+VuQEy?W$a=r({PtZ8plN z#kTVbyrS1or!9OV)p><<7lc3}tNYf0KC3l2H7`%L zLRYJjS}pCxbd`_;+@OZrUQ{c{<^^X;Qi?rUu!iR9Z6m}n3G{GuOCrI8SSY(wX3ybtAeSEN-h*^ z{+G*W>&y3lv8~``_w!Y`l)w`Ea(Em?bFd^4P_&!mDp#QqVJ9(K&TB}xyjJP%S7DJV zc`?kP`;bPZ(Ma_0m{LQdV$31GJ4dUx&sI?*AM}kzyS)0^`pkyRphC;|WlBZ4vIF zDH2=p;Y!~`WZ8-6UnZN6{(IUmLykG$37uD0dDa~{9Ij}Xfi2_?w9XPxt&B`M{hU@O-~OP%!`U^47IJ$x@n?ui z8qTG?(I;s&yYg{VpTlU6dF5xxYrB_?b`Ukl~LA%%<9Z$fuphE-vSE>3#rUebY zS>LgcNdZyzKNWoz^ZRr5N3ES_ha`WYJkuWKc=6A$5XE$aY?1I#fq!xM>Ug6$agTW& zcd9C0IZa>Gz3*1QMsoGc^-=)Ab9>q(UnD?E!8m{;EW=SXy7p*^c(Q=f?XXF6nvb6g z5!r?QFIUSfFFsYfo@fBkBwqi4{8P6HF3%F!RmqMd*9Sl@wyl_$>dEr#r!D&w=~nhB zIF1}`M`PbR4g_2oZH{&{Dtq5^=)^fDO(ix%F1^<5eHDkzGolA!jX9NrQ(Yfgl9B|j zEV-Po>K0(+$5V7FkhP`*%iNf|A^A;Z%m>c?S zN8i_GWc?XA)&G2(-Lu5LjH1Hl%EhrX0%ifYZ?tqb?54cR!v@vHT5^>*#!3l+hW;;@B{>dWq%B+aXWMs0?k@=5&-EZDY% z^09W7GJ|ZiDt@T^b$b21xX1|IpC!?#?tUNt9b(vqS#`EWWg%AiLn^Tumy7+(ijm;gXXmkS30wIutw>wQ}TH6yT#6#p0{46FPWpcBI$T4-j<4=M{kx5Ypjc zkbZ7Z2PxXs%#nELhJDx{Jr|_ha{h8rOy~Q4yMvk*GP00d006z&hVc!nmw%{w4C$sY z`4%4J<+2=ii?uB=nW{mY>+q9ow(k2!p@njGkv+#`FkY*ejbV%H{^4M|Ghv{^N&|45080^GUQ-e!LUn>uBsHtZL6$O4~(LxY`tOKvgAdH{wU z3#%@D7T>#oj`ZR;hmR|ggtkL|2P$m-CU4X3sRWdWE+0vj^hIq3O46|F)lWAez&e$p z2ABv5284l#7}FmzUT)7=sNE;-uPlbgEAoFjcQjgmBjdTXg|dq3R{z13Ft!lytrO2FJykkPe4tMU5Mv zXOS|ueEPtA@TK|pGI3+<`F!dP6~lDih@P2khoB&yG$cL{K)`_X045V9uh#LBQ2ZlS z^bvnW%~chD;=G2uu%Ycmw-&b;r>VqLPG&?95V*#=c%%NdN0_t2vw03%cYA8!7>@Z~ zJ0SbI`3yrD29f=x!S95EeHcmY#5eOj^$_*CVVFw-z7y`I(74pMqYC>_}Z?8L(_B7=j%Vw^nxM@l02tuJtdQW+VZWg z%*Yc#7;&^M0(W|(!< z(fm9s*E7Ppt!00<0*>AEm6PT8*dn8Z{kCF*av)RhOJC}RaosZG@kYSVrh^@s{pkz~ z{1fPrxNcKrf^@sNap!xCCIORUEa^oB>delx6-iZHZko!Kw^xR@gwRHsVsc%Jif~Mu zx3|*}xDS$9_OUVSSM*}99+3!h?&uEe1EWu;1Y_Al-Z;*TmoD$?+uW7@it!{2O$tV8 zXv7;&5=?+QIdG=%!MdnZza~a5p$SS%w^T_>k*f0IEYUmXD^>O@7!XI}Qh6Fp_`FX; zfC1f-@i+^cDkm~lAfq6Rr#%pTy2$y`eEfp!kGZZ=7V?i?q$SbZ!!^yL!C5BA37Sw6Xk1&5B(TsGG+Byuq|CZR;{gHr36<`KrQD|T6 zi{Xmo-rB|^$kS_&WAe&i0Xc~B6YAe;$6_S}PVGl*kMs%=BO-ZCno^vjJgg8vxr16H zJ#0}MB_0!@37i)nqvMMjfiqpS6Kas+AFNuO3+J^{#3A8X1E{!PB^Ji8J;)X86flt_ zyeBpHxQs-q%!{Tn+L!r{Tl&vMVnuuS?WFY5bW$=?QulYY`rFMkRIlFL+T58Rt--E8 zJ|=t^NJ4ROM-QOQqhDd9av4i5-`1)e4J#aQC*DzHvjt{U5^~2)=oiPU#)KCLS6P!c zs&5!oqGIpGc-D7ny5X^OGuS?d(a8FW^4m5w6;*n@8~WCk)$U|*q9Mc@*aIt*QK2@}vRPUOxPo@~yjNW7DhpctJ38$G&^HK)JQB#Y>eb zhlSbY9?EccXO;ZHQ?%u)3)b1issfUH1Gk^jl==&hTq%YcNZ>X(qe8jr5swqXTg!|% z4knW`*TX>dD*(G7H~n+B19N%L@P|v}__rexFibd?y9O(&x;rBhf$Sl8WV>OaX6d2l zFF{%80E$Yj>DZP6SPF8%=mQ^UESxh}?R_{EM|tDN&FV4MV%GNSV@sXn3zwzh$KE+s zC6@P#`bG=j?Ankf41G>;CyHwv9mX=I*4_xO>2#fY-~VPXKQFwlzxtT9{ys-nr-Cegg7?x7|(k_-#H?ZzHAfR5(K}|Xs=!>t6eVb$8JW6 zuhR;eH!M`dc&GmP7kl6&3OGoNC8CgOyXhw7y6gz^SB>M`VQ5F4-~RemO*U>-7zkNq zr~A|S>j+7m#5=7j6GNqv;4Bxfu5P%IzP_%B^Sc8}bqzbSNDZO01m+iNzBNTtMDKrd zg97=+e~68rHImp+9c|3Lt~!1pF#P?q)L`vkG=BirB-$#<&pn=6{!77+iz9A1pI!H) zJ5V_r$ksrv+{EY`Z@y1?ro*z_lp5b?cW5n(%r$|(^Pc0I2h*HZQ zls28ztl2HL-CdDZGcqpiS$+)V5#ARvmW~?K3=fQJV=6Pn+gq0ZHZ0RlVv`n@1r5}T z+bl`rZVJDE#4Al=RnYRNGwx_ zk2O)-TAMzttpiW%GMs8(>8ocI6{`Z#d$+xBsTb@h*32 zj2H?|adh%i)7_6Ve;8Dl*(+vlYl=53UWIh;N|0}I&m->kB8GaZ=4<2-QjWLm3a`Kf zg7hZbB04FlR=sYPMKzV~r*9+b;iAE(%ovdLD@IhMr7Aaz#L736bOp96{SX#}=$WB3 z4oOUmSx1nz1fK|rQOu@2tA~kM=C#0lQ%&Pt-OXLH zbHAJ*aXGJVtYfk-lT%{TRDIA`mb`++R81Qu;~w;`L-}m^af#vsP`#cHQHY=0Fwz_)H-?OG`(`jz7pqe~$R00tqK=S3^V~Bg!TJ3h};8vyA z!0?n%0olOtz;qP=1{1^rfi?EhO*5$`=KZIlGx*)F)hCtMX_!#SVa-bpO*O5eUa1Yd z!osXpOe^jCLQz>Z_d9Fq^%g^sq1P`@+Wo4?uWb2T&l8WcNZ8RdLBVv8@F3wxmDb3! zSsz+bUR|oKsj{*-3brv)_q&(U-`^>!BdH;KaHHMp*c*rl5-;g4CcZO3OIR&0XsGU( zYdVW4)P`SqTj7zvKNBcSv6qH_Nz&WIn@tjU_f|Leu&i|9{kNBf9u0OJ=S2?eLGLlS zfw)z+GTrsIueFCm+`BW$N(l|0Daq&=`#lRAwpp23W1x%*grvWyE8X6(X*l^Nai{1T z^n}*Y^v)X0HBs3%5GZ!gn@Vx}+N6YfHicRK`cAjRf3yH&(`hyQyHeM4ROs5D|6twT zY%7bu?fp9plYRjHwnRMGI4p1zRZw+Dd6rb+40`)*ZGfEa6onbp4+mU|U(l@i0>Wk&an=vTNY6HCiD2EId} z`XvUo_;*cvM>Ze4gty#R;ep0yg-nNw^;#K8>wa<^hvuJf~^k14G z+wCLPk(h}?E2}geD^JwcI7?arA$9C6ja#*e@ zL~^D#g??&}OiZNR>VVvn^pbkgF4%L6O56!d&8|QEUT(^N0>WQL+9h$FqT0Nxx58zd zvm015yvtQamd&Nk@|vM``oa3>5ayZI{8_HLL=W8+Q!D@i-~?C#Ov{bCbM`SK4wf_$ z7A$vhciQ}qyQN|Ce^NOmb$SGdJLEt1U< zX%T-c*L|EixocpXkm%tc_m*|61neC0s~ystTw0)#^hOr5cu#=#0{)Rv?sM}8sX|>8 z`03y+_a2jogCD!Xi>ajA` z4-ZcM1K&M8neV}-?-3w8gqUf~>-oOjO3$hY>+!t)k8;D~B*Y6gpOaM|vbEi~@>mu0 zKb=7#1o)Rh?_>N(Q4Vkw%FOb3blH4uQm4o`%`@w9w#p*gT{r9ms&a$YH)T3hmg!=e z%^gRvvo2N0IRcTF7liHim#UNu!mPH#RdZrj@wwwKv9M0)YFzIzYu7Ae6!?})nEc$M zDj2fQaUR&p)?R+Kq2gWFOg|qe(K=53p|ASgbmEYw%6g|+_gt-jk#`~vPL8oOgDl^b z=78rNhz5f^SW9bVE?rD>fB*xA57w8-^e(m=mToWU5APZceEiLwCpbz%883TsW7L%i z-Us1lcBRiA;$Bp)woseF(VH`*WZeTc|VLqrD!_L?tQ~2{>#6E>v-#9 z)HeO;0Ajw-Yd){e(dUs8v_JJxIPfuwC~ld#Pfx4e}-xQJ8b0% z9P__NdM!1AxJ{KS!2>i39CgCF3Qp2%)d0%d(rCgPDVJjY@QJXg(LFI@74ZA=ICE7^ zRV-}<`d0N7s^f&;B2Xw8U}afX@uw}itb?;fw+w8iw7m26(4DN}oZh4TR`~h`z?uWg zLY_xK*hahI5mevTKxtdKaejxp!i~0bezD!u`lZ%+D$*T^RN|OoEUX#yl(#Ncc?u zNyA#oUwh}FCb=g2#NlcS8)@voDp)e`g4YM!yQ=B5{N`6DjWb;#6)`wEfmydf3yo2H zUvd09OVtzwmD@aD+5EC$F417bN3^dEo4Vkb_X6tee2@zmDQS}VvGwghZ!sBI;Vk zd4ex9kw?Anf2bas=JS~IU5`?Ur_?#g9d5)p{ISOEN;4~2KkTa%Bk&wy4t0|gf92El zwDI48Z^Koq%$rxKSPs%`yJaY^3n(nE?UX`tiS+dbosqR;-Ul+s#G_3Az!{G1-g2;w z&&tym$%h4C1`}7(Z^B!duzzdV=c5$k6j?dF4f0eBc*Q8zp$0qwpQf3pKKI9t{dr|^ z#rBsIni8XMv8ZwIGNt*W*VlX+I#M^jG5n(NSRRb+wvX~(E2P$9>(APQ(~GUR0;d9N zIhQ1BV&YnP&vsv3%epe17jeP#&KH+x3F2-iJu>Av78afW!hgdauN9N_T^wtFX4*;; z%M2tf$=^N{RsmM<}IxjCHr+zFTKMot(SDH&dzxp&Ep+aawiNN66=|YMs zk}EMTj#OAw=@+;7*4k(m3+JCxmqAF;cXXm}TK$;yrgX8HJKdSD-;o=!zBE``CGJy= z`ZAyXa!Sy-u|BxPUorLU<;p|YeRX}oGmuF1?JOykOOxz6rH^63@CdZCRE43-`0Kow z^PtOeto3{;T?zVqQ3M8C>$_+$80n%yrk2P)A{;gH`B3^!>|jLv({0oA?KKQhvJ81#P_^*3|3Z{Qnw9# zQZ&jIMaJ}^)pHr7AaRXg%;yKc3F&kS!&ZWw|;GUgIP0GE&>_G0wACS zuy9YuY{QY1fpSxAzc5nrCBtT4r{$I+O(+0Wpay7A9`7a-vJCFqzV>nD7InAR>Z11b zOqg?NZzN3m?y*WD!}p9z9@3RrM#elDa3`#?*x&JNH-Dab0&-^(UaArou@AwpS#Ke! zm+gl$H5%V7*3Et?)O48G!JcuCUXis;VAI9eeUFLEfDfVE2G5xwN~XIT<9tdlb;YB6 zVefi*r7}KOlg&{)d?xeWRsfbMvt_{bVq$Z0uZbsj>GVWJxKPxrx%LS_y`&|7orppo z_=V@I6B%pGamRhK8iNA@Z#8}NTgNUd>pEGim|)NP#rO)jimBsJRXrjoCa>wBych`~ z5`OHExH}r#3fHnrz-g2YEvD;wl3wN9%X9cYKvR!0@Rt%^m$WQ3x0;B(<+kW`jjT#>^Us;}8| zs>rz#ghB*zSvUl!onCPgn6rbjVhJIg0W76Bp7%PhSq1c~-z5Oh3>8d#L+vPxGA={I+-8|FnVm#RNrVYu2!4j#%P!q1{XDf5JAdxjAcnWC53 ze9}(S$m`fB9@t@As9VTAFke1meHh&N&IDO4(z#3-7z)cw_Yg!AMKgbnQml)SLL*$x zdGo`xHZIn!+ysG~pFbF&`A}tre^j|)scWdEA#qIa;p43lYuY8fwH*)mfe+0Q(CY5F zTzz4m(O0U9T6jQF04CuiF%MYYo%oyaHmu;lzxz$SQWDO(%H%^L^{Nh@jE*E-ISP+>CaWV zYe8`3a<{5WOIt%co1u+{_Ht1cz8~DZkK5gh6Cb7YCYu8RBt}VG7u+2>T3?P)I_=zi za0DN@ag z$#h`w?DzhP3}G&UaCMag$0?3m->VzmeKIyUIcaO!jnt#7)=buezaqj>VW*$(m{qtV zdhgp!q5RD4WLkl`R-D;r%IgbSOzoM*&S}SoFhQAl)Wv1H2H44EVTl&MMr;G%|BSS6 z#U$#sn_Hd$^JIxjf`d2rEvk)oBIZGk-ALt;CKrinj_|>j6wv_;i}K zjQd8H)yk)!h-L=DNyvkou{>q)wT$|{(&mLsb#H#vT9VnJy9ZqoZko!nVMAg-+^8e; z;3p9%?k8zMMMHu$zrCnBkL~?*{ecNb4Iw9}sW2vXG5`~Bi!3_r5QXTuJN^+UuS;O~ zv}}=W1)}jFQve@Ifixt;b-(#>B!(Wq^yNM@!))0Z6kw`gsUQGMo#PdL`m$ectFOeb zp!G!T&3E00=$Md z)0yrD3$!GTnP>d>l^%pGR@!=g;7Sk=QCW|nfN3L>Iry26~+7Q_D7Bs^nXvi{10pQE>ln6PDz|d zIQr+xMQKfNc~yHQzmY#3ogL3Le%KzfmEr?4KCZWybNHh1$_a84kOg3X z0%cer54VUqJ3gQ8piBp$CNBIYb&59`V>V@FKJ%R+ZQj{CcDtS{-)8Lk;GWIgyq;H5 zt0Bk;D3E)ujF98Q<`(g_g5%~^-34-TQNKSLw9C*Ei9tqgLFWO(bBARZuwRbKuJhNi zB+PG@IoFp9MVVOdYsVu~V^O++>kv2>?-sm1IQxI{DY1V7UbsXwJI|jjxz}@KXw{r4 zYR2v3kN*T=99-mpb;rH5^ip&wH1^59p*NRk2S+t%)?@*g0HBEpIYi<=Z9cqDt33{A z@6EIR$BAyp9NGuM?}7pG!Q4_h3ZO~*p!`WivRoo?JVM|`YsJ^GkKBgWGx{R8|6KI) z@&^OHZ2_uF!y?N-(^f-`RnWmPhoYiBeTFI~?bj%Ug&rs-w_e@xxh z=oWpc=qV>opZgn%UTb}=E`kLfc2fYwyvO9f`?=PZr#@R(?L(B`d@ZBG%n+a&8uNod zLFp?5`8{ijT!mS!@XK|9BFj#)x7)|Dw(%ioU7uHhSVl-p3^62b07wP^lByPo8Hx{@ zhE*+k>d&lgC^D7kZ)R@g00jWf`M?sDA3ret1xayCQPD>V6eQt#RJZP)V|^+JUnxIZ z!;P=o*#8Gpv$G3D0Icfj`yJa5sbDbh(kCVc_=?OJ7~X)ydZqR+6xQ^SIH`_y8Tp3+ zb4bDBqZ`9s_hVcQy?<}!NUL!Or})g`rVY)oFJ{G;vcULecq-{__!qZxDdEANg8!`l z?VFF~3T8COcBpIJy$rkgHm2ftBJ1~Bex$jnZ^G~Ijj*1_?IZaa|DhBr`sBm}drYD& z`Px#DAEELBXYfOL&A+BP!Q>XG%DzWJl^#w0A@dqE z4{^h-4&n8R6P2MP$ZviRP1=>G30g=UFjT}dW6E~WVH~VOXcc#<*2r#3+yeqWQ!0B( z0}pK9KUEhSbS?@IOmODC6*&)c8V@DO%H|G0N+4Pd@YlQTg$ZxQx9a^S-EZ%a`ew~9r+4)=JqkO4 zZG1CZ5Eb~9waKOkr7k!iA*6`N9Tl1$SfFjJx_ZQuIPLzflhg$1|MUP<) zJaPj&*%G%tp!hu!@f!g;swm+_6}fx)Tct?0`1luC1Q_6(APn#=p$ekyuhg&fKeusj zzvZnvoZ&UiijOJkLv@Ta!C>NjXlA4kFZSj*&X1wzgE_dnJKiI;c$NYj6DLtjdYCz< zW$S;V_KR{|plMnVLa|S1-zBMd`uj61UB^xwgg^?4nDgb z?oLA$-y!X8ANydBua-lZeGu@j;KnstGF};;UuE)+am?h_cC?3CAp9Jw(veY=RV1cO z8-}AlZS9SXj7rC4<36`xl4Yh2KXNm^O1>jO`5P!eTO*Vn2BV$&LJj$aVf*(aHQj9+ z`3caHbUd(}A`9%{&DV46z)(2elC=fnnQe>U=98`Ruv-rm+RHE5~cH7q)YkZ#khN82yrCALlpI zB||RrG0}B~u&k=sX}6}bu^Fls9}?j#{b7hGo8A=Iwfx~zvb}u(mT)Oh@ifT1uAjrP&1uY1IfIqCFQD?# zvW|WdP7J^gT$#4sru>I2Z_IjIr{hT}u1qRNZ%`-h=jtJgmtS|EJ?ZC4ChN8`Ua5)0$ zl0F{EbSsMwhX%#uXM$pCTmXfA@Yjr=?&+Px`g)#SMD{9mb5j$uCEENq*^ycSwe<~H z&kv^R>?`&ENrqM2L(*cL!W zU~7G0|G^&FqwZj;o?EIqb`zK~edpH+!(%+4x9yZ7A|X2?lKnJvQDIz5j^w&DoOa## z%?S6(Zc)if>*{-z#$u0b0M-ktE)ap4LqWU``RKZ<2f3@ezwk278!iqzUzf!?17kK7 z)Wg`uMcgkTGx>iXvcHo~eHv_Wmw)9v=n#zM*Ru^(10my3(D_D3T3hNepjGl`T2AGi z);{JdjC(Ltc0M#-Y!fRvwNjLle&*~+^O4J0rig&(Rvkp4va>b6={PF_$4(2DdmTSW z)bd`HO~1nfpYEtzx|W1_s5EdSS815XCoWhp&pywqiDt_fn-#<+3~N zH)^1b(I>^H$H$^UB@D%Pj}D1sCc<0T#|4|<|MJEL^*`1-WE}rd+{OqVcyr$e&ImS7 zp~i*UK+&z^(niwRvdd3#7SR)YhetdZdYGj|(*tO)Ti--MTr%-lrwdB)P0^Ii!<(+=zq#L2qE5;9&^80fi zs<5x)dipOXWcj!9bHfk(-?Y^_er>ddU(YI<$Q(Aa`wm?J+9`_+8^~wzt@~M%PKu=M zWB&2am$YbP$no}^SU!rHs=+5z!8_7wTgb8yFRZ>G6qQUOb&2Xbtv1k<7te8fpMN9< zjl8rts}$eq?EW% z3KAd?m6fV|=--`RtCBLZ+-ha#LSATrwpQ-^ipb1~GS-kPWAvS9O+)>~aKxaKoV6ac zFG5q6_(rFau2C{t&Iw#^gJR=5q>k!j(d-14v&**ExEsiXp5wQVW@ z&~v4|@I_4CzYx^9+SNYG%7Z5;rsvc&8}KT5+5d*Kk(wbI9O$@052EuP_iBGMBblAV zCt-3c2gRxRp;|64-A9Gf$1<(_W1IiPh#Emfck{M-;AXk<;5G43f+0lM`339)y&KPv zXyWyWl~d zb<0;C-~y|wij3cxV$Hw8qGB~!B&v@LM?(*5?eZN(JUs;7;ad3z_b!QjCZLwfkiJ^K zcx|^*7*b|e6T%)(0qIC)OmMxnWEc23J#Wlc;+jtj=WS-s%Xgs+#kTHo$l{;Mn|RyL zEOyPjt-!;K{%g7{rErxya0shY9pZviN#}u_Cst2TW0~I~C``@2fraTBvQQU_ypd<4 z|CuDRI~>I12%x+NUr2mD)Q@@s7=+$0d*HgnOnN@gX5M=(&+k2xm>2Ux2W0C4*t)h{ z$(Yo;)T|`yGpN-}5@QoSkg1mfONq#wr*oq1^LXT8tXSv?3@pqnND%5yz7|zAQX9%r z2^n7FPCd@?P8ceONah}L)J}3g79Y1PMj#PpnYdUprJYoiH)Eea)l#>0eLZAFnb&#e*y@N zI>3uzLV<>bz&K$IzWfo-mYs5@Dp`g)2bnuLfEjM;S88V|+1$seq!rlf;g)SB1QIA< zqBlW^hlnA6$Hj)<>Cc+4m`<%fRB4hdga;`qfMApgAQT$#G~Vj5Fy5nd(b8|V3x2e# z)J}Twg!}69hCybNg)i6~*HI*OK~)3@C@UBW3fx#zx%$MBE-<{bu&l3_vliXLKedqe zWjf5LhZ_op(ERj_L-#VRT0hE=DQ(I(lnz2{ShJ{WiV#SFXw~%5IsEcasY3s#!kHP@ z%tL;?*(oScMEae$hF0)f?50Vsr2d(r9JC`Zax=kz>J0&=NWl<4j{4VBl`yB07e3|Vg%p)dqvYh>-EXh;4u&Z z52Loq%^o0tM_p|E5<@MdozqOcXc8PBzoYs-Sj1~U?l{76;&I%;dI?hZC;n9QNz`85!^(nb{NprU+K^Uox66P!y!$yh?7!>}f9u8QdFY=+2e1BUk`-@I z_~}K_6Hr;@_wXB+#rl18d(DMc7V({qq{Ppp@hr1ES3whj$J6-_upE3=-0l$kH`?;k zEi0*~(#}TFhaW|a2ZcJf{}5{3TVQGHX*kv$^U5YHkTlBWp7?cy7U!siR4j^yn# zX!Bg$YkqR*C*}O#rn!CkL;X2MbVn2`RcIQ4gHW~ZIWjl2yKc80^5?gU-8g2zF86* zt;u|y>nms19n8DhwBub6{RF5Pr<8ukGx#yIKAOU`Z#^+yt^g)w{yLkSXS?5Ny~H>6 zQqktR#V|}iu!*)bV-K@(nAcTw9+XvLk|oM(l~S@NQabkNJz?1!_W;XBHhvr0zRx- zxj66tJ(qi5?3?xM-?P>?K1=(&nki`B4C>l4R`ML9dN)M%k)sn2t-8(rCC1<=b=RCG zu>2-^>(+FSB*?8{1ATZHN>F-kk$eJ-CHb5zNnBCdCV!!G&pSB|ACeN6PQ6ZfL-u}6 zf>!Jq={a zz?*ap{Gm2aEwcQZQ)nF`qH&i#;J+58p33D|9ZSDNm8NU=C?(}rss!yj4Z9bUC5At2 zPcpakmj_**v^T>B7qxLI9w-p_WcR!>2!*e&2#y+FrUeEd2%ajvo}|R$I4PZJV(Acg zuJC;0z1Am#*BX;y&yetcfMC!3Wa)Ts5xUpxW+qi*1uJQP#N3PK*106Nqp>fR1;?Zk z>#bI$63U32alv=Ef6rYR$r^t4n|kuFGNsN2Gjt{s5s4LM2ifG-^Haq_I3^C{-Uw1T zG#^yfWMAGsnlvEtiz8XW5-1Fg01!q~BmoF4CyMzxW|D@)H}pGTo%6QlCJD>hTG8>ELzIt^ty2^9O)?q+#aAtKZ zQg~*Ni@}UwrblIduJE_p2}JR*V}Yq8qC+HBJ~kAkBW(5rPiE(~l8TWHm__-3E_q;D z3Slx}xKEpJ@QX|@X<*5rbFwYEQ6MzWMgR9>9-KAPM5G+cVQTLOj!O0)F|Fqj#n7iM z&TCp_#zZ$WLnm1+-XQds+stqDX=%pq@;-6CjZ!_&_`o-+%}2cuto|ApRZHihW%P#O zH$1UHEg?e<6s&7~_9iduDJ|+j82vIxDtY=)WeTQx()5riR)6!U6qVWhg!><0-wo>w z{jAfbS#Kn4&Z1Yk0 zSUlI}j*sm-%9D!oln>NS)aw(m!R(;?v;(3a+cEqkLmmN)E&8j%h@Xy&)e(=$K<$-w zwS6Gg0X6+AKtLLw-E31ImMa~_R`rNA(aD$ZFXYcTai@h5A`ec(n+D^T?nC!R6t=Qs zxzhGWt#Oy71-hZHGfVQ+YKUBd4$Jb+j~O8Mc;4`j2xcPNL8Ye#KSbfZ?zI>ys>g&A^br?|4AJ@NJzV&|lR~Db4AfS`BY* z<|jib7+DAhp7*L%l~E=u9{KGb{U3>e$JiU5yoi7w3rV6Ezw9;(l8N!SG(g7f{l7=3 z>q528s*R$a>2p5bnZ19iUbEZ3TF=;D8_XH#Z10qCxqFo~1WwAcMJs@)z}OIM2;glJ z-?Yns*$4M8c_fmh21}*fRm&E|Vop_#rf!CjtZ!TD#QCI1JDJ5WfynQD_D-vr{AQv% z9A!N2y!ps?zx`qwW-`@$r<$MW#&d$(Z2q#bvS`1$Cm-#|tLIiv1MW(-NxdyvGA%+E zNz4TM_{Bvz6MtMTMr#xTyHsIV(PgT7sCFY>;$11$3WCt*q+YV_Q6^(3e~D^qufxY)>LyJ_j%Kfr{8b)8^3ed}))M=Ej?)`rHo2XOldjiy-5$OrUtP>hVH7m-OY=iRg82ri&61xIA?52A z#(v@Mk?l65t3)=cF|f|q8-t1Az*$YJEOru~c-H9X2w+eeXY7=Y3gLgCBS_#kvDYhy zKXN6b8tthB6$i(KM;pR|>rw%Md^@3Lsx5c>TfZC5^raL}aRnc2Z>OcJ20*%V zJ+eQ%dXSVL@AME;FVY7~-IBn0c;dZ4;YuVgn^blmiA(rG-ze9K)ye(DBgvhmKRuid z>V+C@^aKT4244`LqJ&!q=4C+SY(6e#z!aN5voQaJPcA~owWz0vq4G?nBIWSr{CKZY z9FeOl{Wfc;6~G*Njj(**8iu{%t{kEzui2$ld}uoSx!Kt7WYNsbZ8qiwlg^u$tKDYJ zUJH6yRB4^8Ofgj8++reJuymAc2HNNgtv!8=k;sN)!_j2}cGiEAfW<*N*-zZ+v@xGl7c3 z*`xOQZy@8rq5$h`?uk-5dkxKh0L95Ly>&0rgqUAjW#5j-7#~|Svbp%8+8?+I#L(zG zD_}R)I+$4$_3>a9Y0|y4%vmIWUi98(>f1I7U?VLruKW&6e%6FbdKE(iRO%p{y7s-` zvQ!t`M0bcyDAWZ_e}@VgQ9`zPvKLojHHa^$1A<7z6gZEok2K6`F6jiX2Eqv0?Ses7#Hfy1#W`Y$?$nVC;fghJ2XQ|8^(J4&{ijdXh=t`jthgRIo0t3CPrWT|K{)4I)O_Tp>pHBq zPVb4**DfgmhU0$U(G}a0qq;bq%C__=T>JJrW5!~%lNa?T%fWJL_0h)|t3bZ-4{A|q zPlTAg_QzW(?b9vo#Pyy44iI@y@c=C3lB?azz6Pw}_%;k9CH<$iA7gM%&2PJ)-IS0>xpA-;?0idELnwSSX`ci_lQ zS9hyYC#e|_0n)kCk~h}*+R=_&66Vb}pO(dXA$O0yD4;ysT4&5gw_JY<*32VHg&&gy zzEJ?Ch1G$nATfIg+Q=(c?;RWX-W@(4@h`sof@p4M4-0Z2otg=p5= z8U_9V7<`!<5`Ia=Z~D(v)iaDvW#!{yVqh}129$4g$^i6#forbN2>c_#6gcBs0gnCv zlrF3LRiQQ0r_N1AH({h*<-u!ftz`n{Wy|!hV-iKynqzJd_XpTw&%$Qz~ z+6*IGjAnh?5iMBcOU0YtVe=>V5*bjHHnh7~w4%yhs> zwecGmc^DoA4=_w2N!5r34`)LZpvxFv5$Xt;hcfq~*yF!|I-fm$20UnFxh$CRIcpY( zPD|d)o?e_l8Nkxs+Po+ol=ug5mMr#2Ba{IH_2s@HUqNYP3TBYB!4ll%=Fwk!cRHLd z^xlP=%*?|USWP>zv7t@ZOy!SaO9hPVKYC>`8#4)P`b|LFO9PNZ_kco)H_*rYqJB{z z5U=Jcj)pn31B8$gP@2nb8*cATh?-BJLfPhbPlgQteT*G)0Z5!_QX3G*6nfk+8t@k+ zc3PwWaXP5LiwMzqjiKG0^)Cq*X*RE;IeD4O%Z=Q>>ME6}wX~#3ER};=T%akzR8VC= zKp*<$pWrGnf=7)SC54klbO&|%XK5|zc$^3+8UZdW2$RAM)1LGbG42Y27NEX+CIly| zF@R8v_w7PSe|c5+a-tVpfpD{hIU1jy_Zjc|X_`56c?6`T4_gk*gkSBDH6tAJo0)^nG&ELewesBNj-Vo_+k`5*Y)MrLFdTdbhh1 z;ApkgV(!Xh{{AXq{9|qDJLD8o1DkpDXBYwnv<9~r0mLjogt#5tdjAE%v z_C?mT;ydxLG=OwnL|ydipyu9SZ9aG0l++W}5Il?40V7juck#=)>K3zwnv!F|o{8n# z{YcnTkQ8euJASunboN$jqae@92bgI*8EfS;ok|=w0ao&~2@(rmt&2Rp#Op}cJzurf z(imVTPOv59!Kr{)Cz%~3U@Oqp& z-)50AdE=PaS&vh2FNfK3hlc15wG%2=ez)IA*44!R5779S=n1?0XjC-IlH!MZz8x&7 zkU$(0P;dPCKzV8Ky?(4aOhtr+)0uf%E@tMK^a7RSDNrS>#nZ1A2}=FR zVZn=Ti0k3H;)r)Ht@U5I-)|ohC5eLY8C!U!-WTAqM3?o+%#W$r!PHvRO*Zoqj0;$@ z{WR2jzHE^i8{-~wp`7|B&R@Qknp@N~QuCxC>dtB}wM^hW*WQrV83s#rKqK zLeIEjN>qeCs_>fbI^L>KG=Vv8VdVXx#?anniRtuwSskIX?370|+QsF-FxG_nMw1S& zYi(NgH<-^kqX`ZG42{Q6c9gtsnuZ<-az9OZph2yIadh9(*$8q24rZkpBEPsmvUrqx4nv|Jfzs}D+B^EcX?oJG905hpK5I2ifMVV+LuB`pUWN7 zbk@y356+)7gn;wOjpxb8B94ElrbCyjb#O z`TnIkw1zaKGs*k%-cj=-h^x_A>1XPm_$wU&i9F371;G(c z-QCGsT+O$sj9w_3)#&(0RgNet|HJVwX(0t#isHqKBhTW#;L2J2DEL!egXq+jR-HiW z%4Y&#;XbOZf@Hf+1#C;YRsk^9NePj8165lhP}33Q6hm+p`zdX<07W7b5Dd++1dbXG z`|$RfVmlq{C9)Rz{CUCxwXnOTvNcXOmX7L+h)BK0G3z(RDa)?aASeB@Yiq3f=}FbV zLOlb7jV4;3 zIXdIux>&d%(uhV&{!wCbvi_cmKlw9SyBh_W$q2FvB49vwY`2Y*|FwocTh@Vh$uo#J zMt~;^w+V}dlBRF?lGBJ-{Nty;N*&yP3mp8D$@td;*R6Nu;a)S2wOn)x|(;pUdQ5t_tB9Z}&oa^AI1O%m!vMnRt-M$oD zlnjw;nCP3rmTd%Tr>oeCKjXHbvaaS0y;m`Aw>P0GnMuA!0z-fADw6QTHU~cs64T`< z<5<$BjphBc(x`3!;F4oUA!oHDYB!6r5*+O`aV4 zs-=#{tv~d+ifga52t@+s({Si;ei@qJ&`&+IwiGJhmnzqtSHEF=_2RTO2HNI4QKII^ z)%)E}B7WatWyus+sOYnpso}yq_OVP%pPt9dnQ@xdmyWwVP65JJ97)zu$CYYYBcDvn z+>1DG2NV}tK()-uA9ExK@OLi$aLC$-H>1k2M(A^V_uMJef9lcyoT}v%KjWk0RJV$a zMjJ(4Sh_mtrmDQZYIUyV*}6u2*I1*|^>bDUKQTA9S)DNS0#&oD>)u5=1J z;wUv?iz5QG03V${9?ni7ZT#C(`Ml%IV6Slau4ApuJ$-`l3cHG-QS$CF6jg7`rCmT^ zL>s-RqJVAb1V?_B^1ecfnK)Uzg}-0&4paZ5rz7P{9ZPtU-HT~=q-X$!Z($)tT%;9H za2LtmX|`F*RzKva#9CY&iLZUNh{cG6u=JA&zbD&04PpM}tpvL;wkCouwD|25pE8Au zb=^$rpr<0uyv)mx*IT4QB22NhF6n}!7*f8@Vj9X*{5G`y&$S>ighlu91X5fH@<}4+ z0G?^5f$sFes^KNc*Xky^nIsUK*VVUv8C^pb5*%5Vf1}~Au;iWO@WWNEi||ZLybo%h zo~8L{kKdB*PIor}$)(z#IFsY+FU4k8#MIF0A|XATdV&ANC79CLjcw6xhH!}{9PCH- z6mgIibt=Bc-OY-lJ2iODF;FUma@HAB4&IEL~}bYS>Wc;fLMXGY3GG$kndPZ+N=?T&pu2g6xHztI^M$MwvmghqR?+xxJE zHxHueu_%5SY3<-p!zQ%wg?wdIXBEf@S<&P^%QY?G$jfnu!? z(e4=#ycH{b!HxU}u(qK0R`Z+m3`}W%?dKcprn>I8O}1zB2fzvd#J>6|tvqBepoFsi z0+z1APN56mEbt{*t&W(Au}+l$;XyWqT2Sd$nUwHKgnW(kiJ}W*bM!QZ6?NVN_*82M$?GQXUyAc##oFU^Zdd^lae|pY?SX zZ1kPlqHlB)wRUI7lo);Pt~e38sS~*2hZD6+hIA{e3A&qwG{}UJ_C&-Zfe7gdJ0c(j z*{KZqU=6IE^|F0pW}d_==Yve9QY_))SXJIG`b|lpV z1UKj)v7jQyXBeuN_*QN(Uvn1-D4;4<58Ayz#*-rtvq#E(dC1b5)DZ5hAvTc27v%_~ z%>w)M0&6H4@LfOJ-~d}btvGxG5Uy)a>E&E^5V`mWi7JWS+63T*S-WqEuY6|w%4%eLCwwpKP?mHue0&Sn1H%5&6WXQBVa&S=)W3!0LSlA2DdA=}Kp*gwf@YD4@3_6|r zpp=QD_PTjhLz%6rQJG=?1@=$z93jY51mi;>e`58~(y=eI2nMXLwJ9Alq^tNzqaPN< z&fdXo)#z-wjR3-3n(G)i*OzD<{{iVX;$d9o%%=Jyuut1D(CKjwTW~DF(b*CCx8&@q zCq)@64_3Lq{==^O=yPX6cyFT}y599^IUD}XP{shDgwQQj78v?%q7j{$qQl4&i1-ok z9bSk}1ku`5;eI~LQ7*Lc#dR%J=T())X7>Tv`_Pk8kv4C{Rv!^b|mB+a^yvE?G&v^po#bGCBr z=DQSe2HX{OrE9R*WeCOcX3nOkQWpF5vN(Z&AlhV`6u7Ms!!lwiL8c4ta4R271+(4~ zFMK>ZvjdQAWhN0h7vlqFrd5V+rW&p`sPuyZ-{%ulOJe268)^6|_78lz9|V&%41MnY z4!MEF=OL=@Nk|1g!fZf5`n&RpziGX4zy-R*95s#|AGFeEf$_Q~7yZ=DJp~pa{SQU| z0CSR`wb*hUpU>GYMsR|J6}0&CjY^tI`)Y)CbzRt0)F=lF?5#1H2ItNTdPQNAo$+A? z4^8yez*1MVo?4SjfnOSxthGbE`|G_fhTb8|UyX1SnJt9`veEcex2uUb{gJPH^lD&P zvu!+9!lokZ0S1W<>Ncr^Fy@8j64h*b0OnvpmIaRoC4nx1j#h9QYmM4;_lIZ#cIk93q74kM~hp5URwCt|nyxLA`44CG_yCyu!j(oD8~Ykl1Z zEvN-_vM{(;4YFdLqG%EQ>O?{l)eu&;Qf7`*qN|nKYO={>0ghlc8jQIR=$Kg0$eXl~ zPZ$cxE5Mmbq=dg?*dTkrOQ*|g1HxEi@Kvl9Oh~M;hR6))0MCiAwa|v`91U-Y-IwMm zZbQ^P89JQ?qG?gDG`ol^6EzzXj~p&avFb&}vm55KmPNF|tMDvl>?VHaYi5kLbQ~UU zA_ughUKX^tP!XqTKqVjcXq@_rw4QGS!N<*HAaW4yvMU2kvI=4+mEsj$Ta0WHzTCc2 zDsy|6r0`INksq;nMKEB@Q&jw)r)@sG3BPRZn4O@;yxI;`rZ3nbvB*(<(y>k4{dp5TVqBCLO|@ep+fhZ=jng(1w6xu>Bvp(MyrC$C49C zEn%>vyu9bq2nB(&N?xq6N7P1Y5q*-_p%gaG$MU&E>g{fQ7p^VI7+@mWr7`!5y;Z^5 z-!rR<4TNq)u}91o(Fg?M53H)R0t3wk` zT!Aiez~Pa@p2s^wX!OlC-Qnj*a?z3*+_W-R<8NN6x8I;{=Dr^_%V*)E_1lwk{`%r* zf2OZuHuIJs@#pLkmz70h?dq?#ch&gkfAhZ$Z54x?cvd>s$l}+R*3z-%XzBooWPtj0 z=;8qaj3#iN5fvdytgUB3>%=E=V|-CBGj7N%P{wjv>5;OQTob2h&D~YsXeop1`gN+x zy{ga@g>cT=DR?-j-xc5<%Qyh~JL=eX=NLU%h-bxZ0Frm00Y3+o$#!q98b-5->zR6! z45fhi{AWmGr?Ip$9y_ehm1N<_ z)kEnP?9^8)H(IQBUcwdX+SYG&Q`^p+;NIXoKG#nWdu`je&>o*Hk<=lhS0N%vJc+vtZJ{o} z)Fk$>OSN+J)=03#K`iMkhd1bp#~Bqah555M6xt+&HMf81mt}r8O=6LdR;0l?wodhk zx?^U7V!#PIhLP>_l|qdz>>P69BN%Omh~FcauM zjSOv?kg2Fn(GbsehhpKWCQwthXeSYIF1LDD`$gjD*OreAhC}f8ZvoSw@to(HDaaQ zHYok{HkAoTtWA|RjLn*;WH`h)jI|FP!g|A6!d{z0!^)JW`WLl%$GjO zpn#lWlTS3~;ei1zkW;kx1CVzJsHH`WP7*ouDSSMJi%mUJa~?Z&`}H2=f1mKKF>{}p zIURjvxF?%#V0&!Ix_IrxJLy7jl7$R+-XU)^xq5R#@Jq*LF3GvIxc5OzS#mt~ZZl<{v8phGdX*6Vn%5cgET9`ZRjA8AUt71ZdiIfdUgL70jYOsSuS(@MeKMB+J%Hd#s( zk#{VwA%`$i>R$y#VNA?^X61g_TY*UNZ7Vv>ZsL@QoT1`CQoj{s?dmdymBWpK4rr2W z!fEIbpejSAz(~B7)!=lemWOg!BDALDkqY+n2#-oi>R(bb3U0c!;6y?(H=N!Im^jw! z(a`KsGVc`p?qN#(j7upMr;N{@U;lb*DhTuN&m1)~5?01J7BW9@%<o%Zp4+?7n`uOO8?lteh$Ax;)NzH{t*8uVW*1s zU0M^h6wvob6yaO!~7TSG_X&bntIZmU9P$MOWq2{v*pjB0(I@8f4|P;wa#+% zuDlgb@`e#bA%KOrP~qezwv_F(fcI$a-SnptiMzccm~#AHk@X!fh0qxU5XzkHXTcn` zttTQY$J$Vg0?aDiP_=U*y;I-~II^ho=)0!(iyu!cs5At^P zq-;eO%x|4kc(6dRGj^l2eNNG*6OD}WB(GK(7MUI{@%n#Q@c$B4|Lc)fkqf1QoWxS>l^btlKwn|F+d76nqi~ltzi(3V1_!v*fIUI z(G?ne9yl)FkKlM)%mNP~;JiRcAxs)lK~ebYqVlv+yTpH-J~W^B!K}QVk hldiL|zu$J%C!||Ad2T**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/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/droid-2-global-by-motorola.0.jpg b/aio/content/examples/upgrade-phonecat-3-router/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/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/droid-pro-by-motorola.0.jpg b/aio/content/examples/upgrade-phonecat-3-router/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/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/lg-axis.0.jpg b/aio/content/examples/upgrade-phonecat-3-router/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* 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 E0Ae(9U;qFB literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/motorola-atrix-4g.0.jpg b/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/motorola-atrix-4g.0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2446159e937d05495e0888f84945457e51ab11a0 GIT binary patch literal 23174 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 D3#U&K literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/motorola-atrix-4g.1.jpg b/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/motorola-atrix-4g.1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..867f207459f390459062fe382957c905a7c4fee1 GIT binary patch literal 16530 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 Izdp|V4?Anm`v3p{ literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/motorola-atrix-4g.2.jpg b/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/motorola-atrix-4g.2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..27d78338c4dff26cb845c749be698678e20e7513 GIT binary patch literal 23788 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 z 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 Wh*WFF(=E}Rj8!i9->x0P5%W*cY@kd4 literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/motorola-bravo-with-motoblur.0.jpg b/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/motorola-bravo-with-motoblur.0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e452ae7e7cefc3ae4f410461b766c8a8ba946a9f GIT binary patch literal 28478 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

    % zA%Y(vko7|$9DrDLWi}R^1{Ib}4ZZWbr#pF#pB9bfPxbr4W?!CL8N+_F8i;4x+_G@@F}mirgHu`ruaUOS1tuTzvWary{>^dk^TCmz7|^yi zBTN&7G^EGG;Xv=nl%{3JPg{*IxG%-yn3-YPVb4VOcpAi`-(Qai1u=S^zdfpIZ*-5{WCdbf zO#+!dhREwLh0U~|Ig%?8QpI8hO`_{N^NmV|Ph;v9SVmiX4 zUeLgcwFBK>yYLzGXZIs$!Os*{iFtXok_&8OkTvUjtWc>7+h~M)NR67%H^SXbF5%if z;(U1J_4P`FN>g`p?+riM&gVF$hzLB^P9Xi~&aRz~`pi?t)~n3rDelEXui@mTH&oo* zOT0r(O>0CTvKlOvu6~sbrffs^%j1vbtPSP(N7u;$U7Qetx?)6*iwxnj0SPys7hlz! z1tI;c<jW@7(idZ__Ix?UFP|QE}!f+enpuRu%T76Rg#ZZ&5%~w0U zE=^e%Yo_Sv(|B2$ete-g*y%JIc&^NASP@AgL}>iU27i;3*TY*5`x{i|kF=i(69R~f z6|0>dxaQZ>a?7SRViEAQQMCHG3LGxZ#3N&_!1yWwL5Xo@z{ao3blSd=tAk_DiDhf? zGI@}r3_ceT*6Y8-#AMfYJ; z8_b2zV1utKxPmhdzEmD)s+Jk$km-!}j1G;e%v6*iuOVJBx`le#W?71tK0PbL&L z^p=ws^l_@%2dSJT`QkHkX!Y^$sRz!Lyp6-vRU4X&vFEZr+I57?!LJQ?QVnIGvH*5O zo{Wg-1x+WNu6B||Vq(pUH+ogmy(_;{?ki^fz+?fJd&(9~k!A!Cc?RtW1%MhDa&&jN!(Brm6Qk2SWFECA4s|%6)~FKxJ>xlx+XumD?1|0e0I@F4l?8K z4E)9fVsw?z_AGRqA^O-+vtYrw{w1JDgJhS;(qX2@U z?^Qg-;{ESFe99d&2{PC`^|!{a-ro*8W5I#*WK$J!Fixk0X!0>l`T^Eh%=6fDXis>g5_oQEVfFnJ9G;^*n!rp zPNQZWmM&;(;TO7zWaJUBE)MoUlFM%l?je>OoxA-`J5qZdo@Nmv?Wk(QbU~;_9J#C( zOhbXG7$+QI=YFwlWD#uOYA$g1$*&r{%6c#EOQ(r?;aVl78VsG-Z>6!A7>-5L3vExkdKS07s zFsx3QE)cD;10zwIv`qKMtqp_n`a$OrSsTu&R0;$TtfI-n6uX0olr0)>(%BXa>|QqZ z2lO2_V$*TGR^u(L<@<8My2>dr_{lnqxcLnivlkE?;>m4&Ij7#!mX^QH5B?=! z^p4iGSN~c8Np&O4-?MGQ%E@vM$e|Nyn-9uxiC5>(*vxW`CLDZy!Ccg|XXe>fGoM$c zd(Mv>a>7w@Et~?%g~~9U2g?q;_=Zj%X|53)Kl9(j&f(aOsTITCDmuL8aC17zPNXO0 zd5f&C1JZQjZvg~jcO*~5p{6^HtuRNCr*{R&9jro2bA@{*(jI-T7lw}V!wB^DTvAgq znaKbyxzx7*%(>pVokPc6|I?0p_Hv%(X@`cz^>ibsp|$lyv}0h4J^C+Ii`nFdwd2chwAr1Y;{)N62$d&g zcNBZczf%+cAME$vmjTyDw2^4>xSX4%H?wysyGCocwl1D|EwOlQxs!)O{nBA4C~32- z^6Dn{{=WH7_m6h9*XVoSG}E?8P(HV`x^tt>2of~j3%VXV@L+8mJ`#Ok@e~lEKU?_u z!m5RtpAtzN4?)Ev_z~b|bkVkRoLmlQo_=+Ewp9~zN$0c)1}k6Ulo^DQFD|zD)a-&o zVDM30+q;r&e(J$O+Bf(_Kgk=hul)R_xO=zXWjC@(92kRbl<)iM|1X&k7oHs*ngVHy~h>E+MMKj7Z~&mgowLNUK7O zQE5GGkJFNcQqkmjS&SOAhwy86I?0phka)r9=sN+)x@#Z7wtRK?Ixh*H$VXnhEmowt z47Mx{)9UGgOS-z{yn90POgtcB}iaeKt2+!1b25DGvH{yMSB!o-d)PpB`TS*6z!!EyTzPTsy~sgAyT$iLtAe z)x|7r&kMaRwYrhOPv;f#5T1SDtkzRNujJTI=Ce(hn8OA!yOSla#7PH+2opO>8Vt8m0`w=v!7! z2e-OvQQ5bfn|?biQM%7x4Ii-!f}YGmZZ!E6fr_-7KuwW0*2o0}WBYk(k`K1ry#+=&(sCs_=!^*m@BEM$8hhkMmdt$`pK)8jpcflUsHKU-#V{`KO>Z678!+z z9Ixz^Q@%Pa;!x*V+8-Eow!rgo({lE;h|S1mmQO%$Cj9k$bA&#%Mm_iTs2ZuSe_{Vr5{u8uWl&5V`c+M+Gi4X)$iVaJJ}6Dp@d9Yu1h@WZUiZu8cS4l6oey^ zeZzyX7~VfS&YIsL){C%yb~~)q_M5o{p>fZmU+Q+H=CB}N*^WxBpq~^jW%3Ff(VE0x zeVmj02if}`gf%FNYnf3T6|0xoHkI+^sG|?Jq9W?aTSKF6`UdEfgSB03O zgn6OyTuH5I$cFOSwa<|_^JTd3f_xaK7RDDI;~}Z55kn7uzgRHGCuXVH<26gD@WnkX zuqbhw=41_8z{<2`=RsB}n2`lsCG1Y35;@7UPJjM^aK*jOUWkOUj6C;X5Z87YD)rsq zD2j2W<;8?eRbQfarmc-hw=XPDLDx+H*uNYs7I`4{;HP|Jqi+i~n++y_y2)&wbzoGH zdp7}XhU#@QDZ|KhyrkvVo9F=8o2Nb8e@X!WU3L7DTgmz_p-Gee;twfziT;XDuogc< z2RA=X-^57Yz0S$Zw?lwQGAMShU%RSh9l^VWyWMC00YrP5C^1A8wLh^=0o6q#uqksp z^=SI5!uHjb=9Cj~Y|VM5IIyNUz@YbJ*h)cF$`eM`xzV0P58Jypv;u08_gvKPM&3%H zoIWvF=+xIiE9QsfsPQE;B%ASq+v(=b{!HHVN?fZ_BhnlEJ|2smH7!&~^cjXZ0m$x@ zrOa8H`tT*&L_y}sZJ5vANQ_e zgQ-mXPz#hI0_mgvj7c0zb*4;;leF*d%B;s43%Lk`#CiYNyGk;}Q_6NpEi$I1`lq&~ z6L_d4(0a=ZJZ(bs3`gzfCWlgVX|HlOMV~;$NQ--I>R-xZtz!Y5efidySYI4V03HFh zJhG?l32W-3tqd%~9`xUpdlqlnkG$oB-cq~_C?Pi?js_q@RdB|wu1eGL?>Ch+{JB4@ zMCg?qR*sBRT^U>eG5dnB|Gh7uT)FYTe}6Um@Cz*++Nh3aqA2rUw}}}gTUPPl(dSvW z6*hq@?n+!{b&dC`g`U*klM8u(KU8&IF1RAuJ#$&*@d)s_By0h60PwRxnzSXE!*`vx ze;pF{SB~tEY!P~dZ&;vf5V>h!9-)Q=-SwZ&3Qvjjz@XmSZ|Kc8Pw!G%f4udaZxH?M zsgMk+s(W}$h!RKEzipuR*&U8Dgt4l62&_T?ms(80oF9yM7D^3i4h$=;F$7z_50{vj5+jW*aZw?p$Jb#p^xiAUlT70qeb z{ykfJMm9lQQ>rru3^iF$N`(LHnH^5TLD!#>&={i%_7Ed=!TOLW-jlSLzq9{ zM_=Gps!0^}emQOlcn}B%P-Ix0VX@2tO?=DvXd8UJj@^@84c#YqT68GRaXN1~WqlZ7 zZ-^+W=@ADuze28+7FDfjxJ2<3u+YsfYBQ#ows@XIjm$r}QjBvoL)3GrFOILriA0?| za852?D3vxSQt)2c9!87EDMZ4I%&oF|SQ2l(+uWp1r^eukNr+26$e~?hk)qqLkYNb^ zsR^kp6zRsRe%-GmxS%JY@P{N^7g zwb<6z@QWXIsg&p>LuU1+6Gx9v1f8H@jVeEs<4x$?DkA<@UTbxbHcPr?M z1RA=|#pl$CtGp#@0%qsPQhxrqsdCuGNrW_r!zFW1}J=+>B_8%76j8R;RKoh@M?aO{E6U z@w%G7Ma}Yo;qou~h5*|2$#%;pHtcnJXOwP!og15Xts4@PMU~gty6h6a{J&!cg&|mk zQ$GLs40xcmJJ2>ss5pQ!y7n&_=OH=lSs@}v;O$zqI(aa^LuI}2>hh5~=T^~{jDgnO zC&ap+?{xuVMf}miCEcu8s!h^<)W8t=nwHdPUlDIrlWMKq*HmHTkG)LSzG3K#PqZ>B zxRfRDL)Fz~HZ8L*pI*-F?HPP=6LW$@58^%n7AOx~;^ts0H*MEX79$TTNm)3Q7OHvb zM_1~On%s$gw~PUE8%ng|&+gQJcL@3v8X{vp8R( zXbiQduy7>YgVjvup3cl1y{aphMWL#4dgFYPL!p zHOv?$XPCWG&LmQeX9+-DYqe?6!BAkk>tP3|nHzJC8i z)O3;hUQ)z>n3J8ne2Eiv3R%2(GWjcf6sO@a!|J|dS(6an(*|U!MLh?XHoHI273;k< zjE(7uR>!-etkPMiyk7cZq!uDaK_?!~6x%;6101;85Q-3sD$vQ#CkIPHE~s|i&3Sli zb9-fftY$utxU(l@XCK_aT@7dlKRX;4;}|T`9`jU0Ywv4;GIm~{-KZO<(zL(&btyyA z-W_mOla$Zeg-{lu*$L|vYn_D8_3}Iqu=-R{y6+~~B zyH^srYbMtE(HNepZ<`DcX7NY2 z1w55A0FsMK5bR5xoi-W=m*RRsEWL!%$BlJxw> z&g3IK{f1glyt}nf`sV35o1yA8`JORt^Qn7UPoACJLy6Mmxw7w)H&Vjfr&KYWie=?AooL?xb8uvi?tV3&XHfsD$K0mA}J302?@lms*6Kj+wpv zp^RbSAHaON?TPMgXQ^HBf7cGlHYgR>aFxoYEeN{ekY6)Ua0>hzD)tz6lVX2V`bojj zcY1$icZr=1)j5Xs70e_ow2yOZclAE{?>AK1=YjBOk+V)3EM-7;TJzNPpZhQ8=<{!a zeL)hRxsdhe3z+3T`i_3EcX z`C<)Iq2#{o%rXo>7LlDIsk$wpbx!J##m{LeLzc!?-CP{-vw-?!P{9s{18_SP*lyg5 zTK$VL6>Z6@AAfDYtLF$H6m7PMM-R0 zYSTe$gra58$C13vXq{5+ik} zv95SJ>9+R_{_P#O#W1gs%Hf+Kzc)^#XnXHvjf`Ksu{dLM6leDAzGzoy2N9>*rQL?d zxHkw`S%Y3wR54X)A(D;#lG2(lvr~W2 zk3Z{p`cPL(m+bW*H9a~SO9hEez4IR*O)@o0JbuxBbf2a>)_n9XBQ72Z)c|ndZhKT;NSn<&?^(rO z$-DjqFW$6UCmzJRh?v#$Jy4h@^~F%(02;0?pF2cH`fajArt}C;$!bcS|xb^g6r^2mCAH_~sdg;?BHZYPe z`LOD?H_EcV4R;MXn?ZoD%e~R;XjZH7lfUM=zR2<0LfIG&TxQJ;DL3f&pxcN^yHcdQ zbh$5niWfuo$y$pRu_t$YofZAP=SkHu<&0eD89xf=O|XC0qy+o!qTF>n5724;$-=yUT$&wtvy&Mt%`n`*Uy8`l+Xk ze~=FF$p%z5G{?!X;D8)(l~&;aF$~3ZR(C^<;`4K9QT;R zbX5!+aoU>(q?c-EZp4bk5DOX>u~H;c$C9Qls)KfigVA&`t4WAW8JG#T*c%53;0zy# z$-Ryiw0J*i0$(e&V6Th^hqk19W6b~|Bx#;er2jk5#RHw%8Fpxu=IG0#Zo$SU-V^Hy z7MXfa;e4@Joo?#rO?Hmo^a0`sh0G$`ob(Mx=3<|k)NM$ZS=EO#EV@z9F7+DP0(ZyD)U4byXU-UrJ0)7M(}XEQs? zntXmyMD1zviUaBF`Ktnvs<$A~*{*Fe`AJTtU>G&@%j!QMiM=IfvBJn;%57_|Z5q{3 z@nT`z5m|dL9)AN_JTxdG3d|=n>TIJi(I3=n=ISpu*G?r47YV}+gn?SK=%@Ls0A*is zWI=lT)uJ?&+w^l~-g(0YSEb!KSmN98oxooAHwzNX^_Na-rLdF0{GRrpe)yZ68c9ue zM5FiW^y#BJnVCtY^-*z|wzO6jA-LhDZhOWs5xvH9#NwvXJ0q=z+UIE{2C-7lFYcrZ z^mtVgH9*+6-qV!+t$G&EsU0XgbKWI;ioibVjrj$WyMcVEe}fz^EI@EBZ8Fc7>S-Tv zfnbAbPzzcPUY2d7Ah^E#A5kNKMb$KB3B|QE-f&N#G2x`?ri(YUxi7fuIi0`w%~Ms? z<;yXV(lii8R41%KaF>omklgA^AN6TuX67iM+p!&>@l8y5Gk4ErvwLJJ#8$?ybz;f2 z&&|bKtf2>MrAHt{2FK~N^Bt{nRZZ&xz9Xib4a$ z>!Xv8djyo1Y*r|90fpzRE(iYcJGoDYyEq7K=#Pzhi8WJa@o`p=x~iv zHHO4o761swc>#woChK&2(*Asjl~rBN&p)1iNseZHVyR1gne&*s7F&>$bIcBt(4>jI z|N0tdWBfbwrYV2+`V52tS^tnJDDoum#BuonQTNmQ5;W7hKd;Z9Co!=zrq9L4UOIDz zp_2J(Vg)`o+i{EKoOzdj^h$0@rV2vy349$nOTiGgns2>7-*$PT;*k@Weh>igAwZQ; zR1`1&{w86z7*$h({09Ur%`g2qe7t-MVh^lC)y6_|6PNn#sw6aK=SDlKQB!ZqdQ*yL zT>034nurhh+QEX9|J^eb|M~oVgQfw0^l0)gd%2hEx+rCX@PG1YDf-WorBN{oS8sDH ztY?h=RC?+o+;$Q{?>-GREq!3Cn>qw0HvBYg(n1fIkmJRAx9TTjISMHaUJSny{WmAp(zY6uNuNcHN`@?|J9Rs@pN$T0ZANqTu*a zOa4I2{BqB+h6ht18VgoYD;~63vuhguszAOeBx$;%&U!)dr#r8@#nMFgR|fRvP&Oa? z+dgcO0=I5q?Pg6$=$A}2P*Xz>tTY+T3H+&n1hA-koO*-|^WB7ce+|zXVK4r$uG@iQ ziyOkK4lsr|-!ju`BaDq3koQl*`WfJbayHjqS1P`^e$+q1q~(Imc*eO8F#fO}0AbIbxi{V~s=NV-3fH7|aFN*cfjh}4q7-oCfvS(04S zK+j@(B}?8$Jc!_Up}x}j=iq#0-tcJbqkY8m(M?xOQd#$5-4i(94&N;zzJRq~R$=#A zn2YYz2yK%cjF7?QGo>LONwpvhDqWq@>3(}u{ZxHQNn$fjufgu}K>b@ANYK@a_wAis zFKg4XSlQohfz@xQp-9NzW<0wW>l+vtI}?5rt8vx-3>sI~q|UEFr1x(#RuTCkiHtvc z`1Y6{YUclvZ%{A6964yaFWicm7D-9OQwFW;xe(>*kt|C&O^o{^V!Oc=P+%TMoU9$DlpYUx1IrM z^Zj(Hx{g^66n_3Qnc&J+%C1PXrAiOXwdg6qVL+A{9PG!HaCv+tf$;GaX~5gqLTqPsG`Wb zn5g#wDx9Rxpm4#mch>jOB8W=JQl#sgXwDZvkDeA)pvbo#o4~9kJSJf?Lsv#Tk~iF2`Cte9ov~~% zybG-{@4jJeJ$-2U9=g!*6_-*h58>N2jpCQ^B&*PmdflXyOTrk~pYcUi>RBq~^>GXj zZe;4mSwN%RHSFihZ=W%j4v04ogK44)z)F;`2xUXSImW58qd9DUu&jjo^QVE9wh|Q) zV+B>@q0tWtazV!e<0!oP%VSE*Pc3-zm@fh?$eO3Ix(0GyBit(-`h$6-JLLJ%cDr_W z4-`nuR6AeOYo`Ygufp8e4qtO;pFN31aF# zW7FXi51O$B20A96fG4MybMpgNLnIyir&x4nr)j1DpDcdV_e0Q?W7qCyiwrMJqjOLC zbCbia8XkQ=<`^R{xH%j535C$<>t?w>MRNm+cT2!)Jc&P78~T z2EQ|UaWS= zug1gk(GpSj4|pd(IA3KNt;57rRaO;Cb`)kNtW~(`D97A(H#x5=Eckyi7hziiGm6w^ z+vo9ny6~y3ExW}AZ9!z%7~$!rI2z4+TWgcGJb#Ege=<~E_roPUmK>T^?dW3_u4>}( z0eNuQrIp()xJYYX{3b_S{^)|p!iNG47WPdLPn02bpL>A0@3Vk|%VCIe0_k0qtkQ;+jLd~BhGM=4eZIvV6?`x|?OzNXC*tTh?v+^d@D~p`EROXVhwpmtt1G>XJZH(5I%Fh9l<+q#XfoYzVIrB>*c?XIHmPGf8(~ldz+N);|C`4HhAMoB8p%R^HG&JFV zBF-ZvQmc%mI4#mo1uX5J29Xe)SfUtX8L@1SeAELY7CHJ1evI`EQqG3!0^{ zD~1pd3dw_*mJJ`?9(-uIoKhboFXax(&Ge(a-nwHTSBvf=m{WS=Po}T%5O3j5m4eik~h9c+_RS ze^G8Q$#(C>f(h@VA9@IuaGOMVYP2Ce^?GagRc;yAaZ-dIc~iZA z{p*r`zYC-Mts|p-CwevYcJ+1;TWJ)n(wd;t2eitC$N2jzG5Ejch8_698`=K=34EXF ze>`m(!=Z+*QNc-Xbnz|}^@+-R^P)uulhXMq*)p2cJQQujQCW^z$?g}ylwm#9%<+>L@o#u$~T~ zM3bX&{N=-Da-W-0!yQw3=!yib^yf3WNIOG~`O6TZ0}YVKQbe-QbZZuFejJ*H3-&!s z=*P}u>k(dLlN8u1jlFT%_^qCVC5F1V;kVLerv^9FmKxv9S&3-BVwA-0D^_I{W2Q_T zpYX5A9~F}H+=MRbfGughgP!8^GxJ6MVq8^N?B$ws?sp<&$DzT~qhrdBt*sA;yR*{rI$cqASxZ%!Ab!>NY$Jb3fpuH(Rr6_T%_LOD!TF9$ zt9f3O9>;N#raRv3H5K&^m5r`&#R}hl9QX;s1^)+$e#p%Z`gj^4;x}R)MIRt0H>^=<6gS@{614~T1Rq~dHzvW^(kFQxqg;W8B|9EbzSk8Q!mn) zGM|EZV-@|Z5e`M}A<-p5mU8f7#8#gik8QlEHKTmZPp=SWFEviSNHq|(wX3N)`>R@3 zuK?}AeG8IBcTC^KPGj(i8owQ;G%Pg5yXUt>JNJfpEf79bB2*diS;gJ4^zUjPS6TCW zynXVnQ-H|8VyOD2Js_oO{(D5z)nSl#%jP4len)RXdNJjTLrrD9 ztPk4@MC6|=aJ};ey0SZf)m-^T1>;NbfVO@y@}!IMd^yjP0=^{;SBHJ;*`*zGy5rAt zi}FOy44A zv)1_Co^mB_XT3M5^ALBZ!LBrm6<6|fWrj=MjTB#t@zj)3y2`ID|A2=r@&ACm?<#PU zvhN1IMTfK}o7LgE8Q{M#Z;eGMhNF${{hK8um0is-6;Fwh57{HjiNE8rdv9LDdH?Nk zr37IAX>R{(7WOV*aZT@7`Ln0*o@rbJ?c%d94lic<`66VvpHMPU*z|clwj5ByEq>bP z#VUyV=07Y!p%x#RBBl<{bqnU;Lea&Nk-bNqzkD z=H#cuHF~OlKr8QHWppVI=+K2c93Ck4Hv>HyNu2|ozA|^BAAu{0ivZtDkbQ9_GELxPvG|-0M2s%C8;9U0~4ti$?C>L{=M^|v7fvIYT^YwDC z!G-I)KWu{kD0P5`IVhRJ@lCv&WA5wVN@3pTEkS`QBb_kb!;I~2+9Fhg?X$BnTXPl2 zLdtsR?zU7v<-^ZzFMTBinCk~Y1vJ*;1`I{w)Xw(a-VMw(Kck&c9el`nj;jv!i&E^! zm08>Iy%*{e;~g)fN)6GzyF@Jc@6$~KMR;DC#YZ___>ENX;AwBM2N4gW+Lh6l8}xrY z|939JEY#yg7h-=95+Rm9h8~j|Jd|J9x-P}08^JVs@77lb-|Tm(#7c*0f!v6CE8|0W zXQVfwZfbvhnYl7_Qn1aS*e%g|OEaV}`}dMGn<_^IR;Y2Wy!kJ?JibGcH@?TyeCF>! z@j+%LCTKxxVv_nNir2Ct0CoDzMAkUCm3D_kW=EKzP?0a9UsYFo3?Js{Zf$yR!`Y~d z!rC$o3vvWXk4n-f2Fue~RC)GPe~-SH+^)Ibs#qo=JJa9PO`cIOV_W&4FeEs??wboL z$Q(-TvZz(tik^CxBtlwqur1-N^0<9gL$=djq_OEB&(t?$&4nK7<@MOhpr||*elY1? z3KD`*;G9?{-@o#Kp(C?g{>9%5>yG#T=6+O|uLCtJm_+XL7;$xZ0bCTwhL(Y}ufNRa zqqvDg1Zx(;4YKz z{YKubdGqE?-TTj}TDR&{-L-b@+UL~s-18cM5H1gs2LOQp0Px=fcwPj^0Z>s;{`3AT zX#ZYxEOc}Utym{=fG6d?A$c3VOK5ET{W-{6>N_@vk%bO7+50YE3hV8kTm#UhbWBV~H;1R`VR z3rhG6&aG`Af59&-t6}Qw5|UU~|AT^(l}$hh`Wj*G>K2@omtW8`F$rN&*VHz%a7V5S zeh5u&?A|;%mD36fFZ?$e)ju~-|9fBlt>VAo&@ukCy&?jjp#1X%h=uZRE&rRdKolZW zG)7)x8MXK5Bu+sIKYpJuy=8w%Yod$=LIi~e8iH+z-xKq_3^A%vWRgSsH*g*n6bv~NzroYHsUhvJfx z3*Mqlu(qy?0ny7ru0X#u!Mx@yK4S}^lJpNWelM(1lYvb=iR9u__2(+$7+7Z|;*%VI z)}8$(wnZkKH69vi9#K(3%>3i*V}DCO{G$K%R$BKNU}(&7^lO2W6*M76aN8R2w>-Ol zZcN3Cc^NX+lugzc_sfFdv2?5{^w44N==TD@DMsQz-BR`Sw8PYLQ@i5ok$tzRQF?9Z zcgcf>#bG13%Qtqf0b>4WOUk9SkYE9&jiL_v6wG+!&f>eM-;)!Npu?nZO(AAd)|I;b zN7i$1HuaZ_09`J>B+S4x7ihQ+;{b_do2I3f5p#F=QQO9?twtEco&|6I53%AX0S7tY zb^uC!w5_9~kCdun35XH7n%tN&qf2=83^-EpYnaomd3(y)fP;#);a>!$Sh;3+BAeEO z_AHRa3=mfr+$0;)s7dL?*rfKAjE)VXj!YQb+iWewtN1bLNSew%bu~~^bFI?0EAYi? zoN}Bgo@#WN%`V`<1hj2d$7Nk%}rzwTKR^& zM(Cooc$LxE?)9bHhGELqBvC<^+A=!b>2@OWUGuz5ZI?LWD01ONqUZ58 zxv+iLnU;Z&uotmyGVU4o_2|_kEE6 zl6K0KLxR*%L#wGpI%2X*Al#X&mq<51ByBzgg_XO8{(T#G%iYlvl5pctfYM|n50jlt zXj%&<1;K+Drb+G)Neurtc=;b0o{D}gKU>a6Ax&RldNcK*1wbV1jO?#o<4NqP+6uM1 zWm|Xf*_Sr!QoK3lQd-0(*`(Vmi|AB=>7ksjbn0Z7z;Hy>le$&820$&8yZR>o2B z)97(}!EMN2h1i3ZKU**@0IQUyPt!;>ddh;^_qYtzVA%iz>BYS~D*Z@oITdc!TsR1G z50w->Yw9?s>ouQ=ZYs+wH3jc@0N4{nga1Oa?mAZx{n)rrv0h0wSXSC0m4fcfci*5J zyscalNtZMH)r#YiziZ9)e5JOlsC79tAU(pl=$gBf0mDESa2Chh9D`%4`|`@eR+yDh z61i9c;;{4lBf~&LW0#QLG_BwSxwXh!tb(a6(-c%>dl>vyEhv(C{}xI|oidE2db(sL zz@a|TwP>eO$tDX=QURcXv)yRyl(`l4;H3Ci%xLs(z|;S8>j1fj%_0OEe}G(5kB&{m zhr~$l#UoB6>GqfKM`^sj%zug`f3&f7n{Q(|TCOeOu0YDwMqV1jy*(<4^TbuiqXR2q zh^S{A*OE_+1TH7~*pefL{{GH|Y%G#OA0x}2ULtJS{rdIsXzaDhE4@G9if&i38Wmq4fe>If z19sP5?;a!=l%V zn^lcUb4om)n$nNU8jyJgAfm!c4NAb#Ya~$^eu!og5Fty=VeDWT2607729lV1Sv>wi z`=*>5Ui&tSL1mSVXDbNBvDsn?4d2i zy3W5D@tcTZ?ag2C@g}T)3;S66YoL_X=;P3Kf8qF6b>Fd-1*hZEjRVGL#4eU};;1c@89) z`SpmtXry`tO|XBej;nKVq6Zs1Ovya}JCRo7;1r|RaEPf2sdp;~u!y}}^Wo1)9+$cmJ1G>y9g$@pCt0g2HRoE`|&ct%*Fub04DLwsyo8P`c z;a$I|J1!afNXVvJNeh;2&!r;8J$4FdP4E0hJ za))SPk{TG_BnBjez1k0ob-Tohd9KmxepRb8trS)g5dydgGb*v6S{lM4Xqy1-4twbC zt+4n=mx{&>Ii?+#weBnUYRY-9OPeabtUjn)HufFwUaQE+?OUp`r$m9Vn}X~sYtG)W z;CfZZ;&wIu_6OW z?T=M6Bl=;_snv_-ysqZ1VbrXPstDl|{sRToTlbxY%(^_ z1}AR&op#T@&E<&9!*`MX7Vte+tHH+`v4YC1 zc|C46D8YQ8P_^}I&2oA@g=xdo9MhyitpAJi|Bp6h=lXRS+v3LXFk|UT=pg0-Wa!?e z%x&al7}mLa(KrA<-HY-WK;=80JXGRqIfP!_Y21q;arG(b z8}_(0BGsJ$KI7Pd6IK4a2bE3qfv^tYHPSSaM@oAuq3(3OLA$AITyPj}^cFGSD|vUO zT)k&NliD|(Y3#vNu8-~_Z)Y_f)knDw;nd)}l0i%;wgjK>uY2v&s{1?vdi*0%uZA%> zQN+x796V}r9mgGdsfrB(kOso`Wv(+Y{kEWVj9E}#7pioyZ-+Mt6&2~5);Kso*SWUqyZ|C_n1o`#%#ei3S?`<&o_@*k zRf|JqsQwl|&tWNRo7=I>zR)}x8$ei<0Y%)U3%veRw}DCM+PhbCi9N|8I*}yrR&zce)=n3&yk!%t6t^kmtIC9$~eZNRTDIB93!8t zHkV=9I;?%rs+bne5ss_9F{)h|KL0YF)-F6r4Uynu;~e9Z-r~1}aIT_|0F< zq{msm|0P@uE82TVzCL!gx^O_7wEqWy^~O6k_;j7~vr4*I(O>Q^!xYsK8x=zDh0M7E z@16njSR#09ndeEDVwm%M9~Cguv5XY@5wS9ZkLdaiRQ%fCmN@2nKh}~bo<;iic26|i zzgm%@^NG3BF3f*>&=Tb_ag#M~8%S*m$!!|X90K2cO{`f&b)cDLHSo>K6l&p*>&HI7 zzqt8f6yRS=Y6GhOiW96?-FpRUL^^?sDJrjQhnIVVguit{Fmq|pT~u) zBnr%h$^VK{PV9!2^_A(@ZVejj)f&V=cqD<2thfT3k=Uy0QP^lGz;vh02J{~3zLxnz z!Yt>9G<->x$}IQ%^X{y3PU#;wI?njmq=4?pR#q~s$Q~8O{#G#;8snx$xA-2Xf+gm? zqWFiDahNT%>o6H@E08~^3EfC<;sGuzEp7{bDjE)y3Mn~=OA@v4rN~!X=5e|BMs4|) zm=!K$ic$cvw`j0t=hy=5Oo2v;g+RN23fC@1E7{X$Kw!i5OWuJ8a^C2tx+W)Y0bk2>Mc;kKp=TWM-`%{>5*oW}+nBOC*-t<4HO8y5Iq{+!zw$S92?@8_ zD1Qc!Coj9$G}?MyF(#H4oQ!GltR18*k{%ouTJ`ZI0jWfT@VQe4p}=Dcz#2omA{y;c z-BH^zZN{qAi)C|%luj##=F|*+d)_zOY_=U$MyJXcFdZy*8R~ddK(#`{OUfl9g^%P4 z2My=u&j3tgtnm!%ixl|1EbkKTbw-;T&CYj#k|%1V$D3|;2&8tupEyeGPr1iZmwQ_0 zl6{*tVxZB`jV4ou{D?u1x=FuEjr0d@gHOcqYal@jJjiN~(uUKKCVY@owP^LdlS_oP z<8rmuL1Eq=)7!|(C9`Hz#uVg~G>viYAU@$b&U-*GsmrjFHmFT5Vu&k(#yy3Y8ssr? zXuDO;3f*@2bB}*%J}c@I*;GYq{W<-n%l`M#%Q5;C-tI^snDGI)vs6`k|Apt}7)$X38gwHwe<5|?HhFr4+0`FE z1^L%jnWB(}bl!qpa&mW{;x4jkMEiw5fr64>ou?2+&W788|glFIN|@C zOmA0r2gdE>te+0(1L*g79vi31w!d`;JgPrPEJABSo{&c%`OH(->=AW@mrLyfHV0GZ zMDC#==f*~TpP_QA6vx;JTM2SXmQ=xj3d0V~5B_z@j+ZEmaLR{N-q48ysu#bqC+Rr` z|Kj)zP@XTeRtn&M35H5LR@Uh0fJu-t-yg_4Cmy)!S6l-K&}+kwnqjYU3uo)#Gz3B! zCDDgogWxz6g}~}gyncPH5NEr#117Gy-^0k?7LA|AH(a9G@Fv%s-3P@sIt(?orZ&Tb zX6+^Y#@@YQ6DmxY=z0oYI$8bXZPgmBY`Q$g#A(fa{S!&0HV6TG7b>u#gAaW<7#Ea+ z)IDSHTucN(#p?~t8GqGNX&KBJ09Zq)rD9%G^~PlVLo>UPje3l_hog+xFCwb$)JGZ3 z*codoa$HAwqhm%n`96Mh5g1LDJ#M~Ov0(2q70Wu9Jq3`JWMuQFpXRcgMkS>yJN!C2 zxM`Q5DKBkhwK_7s92lQg0iEz1fV|Zs=qXy0IN2KO#yN14TPDNI6Ef@I2oS*15v$_7 zJlhaSHsQkqgnTvsG?9mbBwZja$WpHb9LpSNh?ZTFz`uW{`uUUEprCY*=w|^Yxm;-F zln@9F-z)<)5FbG1`HgjhbI@?qBpK8mP|#u+MU5bq`Aet@8r>7K_vpXe-Ls&5z2YTi zW6_BCc6iuzF)1)Q?K|FlSZMu7q^F+{{dCHr@bj$|_baU&pm>4As3WM`5eU|Nth6dFP;Tsf zpVW?R_O71toD2q^`b7D$ZqkBM59Wea;2bznUjtSElq-s zJ8h&y!YJK9T){ccBGNQvfT%c7j(mS>JIh)S3#ohp3m1)yMjox~*05hFHz1!AGx?ts zi^y0rC(>#$P$IeDDVRFaOQNV7K%~+Rw8FQA1`Q&%HbKWTa&L4*81->Yh9|uzsPx|| zt2>c5+Y$aT$k5QSPP%ZPIA0$?4XPp3C|d1SU>jt>HIodMs8?`YaO)$2{A}tEVcEau zPrQDMlwEagBgY)(N+$UUK-c*Wz^*`cfnHM{vnn+zx72zy>#qwE&DZ)deyQp}KA6{Z z5K>}e=^z*6fvO0VIfiL8qnFBlsULV|K_x$bIN7{+o=U|{T1rN{>x1G3qf99d6T=u1 zLIiB|_x8xI={w{b8y0IP?h^1W3{fBN`$BUeDT8h*we_NEiY&{|%3CKLG(H^sG>d~qx_UX8VH9=coj12kQq=R@v>VosaRTM9sgzC&BbOIKd*BjsuqM2hL2C>5y9?PpeX!$ElLBu}o%$4DKag?|%oAp?( z*A8LC`-C~6Xxur{?8cH9c#0L;hL8##CK{-n7$2efQKQg!6As+!`|z#U%y%3sPdgb_ zHZW>X6teuCtYKe!RIa>XUqQ-ZnvRSYNMu+p)CJ(|j!B&@YMYIw7V&kXzFAQI!=zmp z&)d*9sys_rR_Kd1iGymgq|WiH3;^?U6h{mWw_^LZ)=FGB(a!OZH>U6}e^I8!yeDX} zj6?~^@oxqhVj@b>lzHs~10zy)od`*_hAbZ;1_S*Y34pDZD<+rhvNHxtoHiP*-A=6|7EyRzEmSm4vvVLqUKQeG}zuvMe5n*r}c!xb_k0<#PpZMcdCRDGI zhz1acGK^KB*}GV-clS3y!>< zn`oskYj*g}LpC?~vqCLbXBt*NQFUEgwzQhQw`UwMm+*dM#9PI>V1|9-jg0mn{%_ zk7@Gc^X7oKg|RGVYknS!HXO6`O(qQ;yq36MgvlMqKcG>*@ac>jEvK1^o@vp}oAO)5 z>OKvR5NmeHS~W0H3zQ*by|z+$Ju4@*)H8+WnDHGBNleFU#I3+5;A})-!Qy`MF}a4yKLuO>XU|v?W!D zrETk6QZ%o0Ja8n!&O8|yi~tQSfdL=@KvCFc2meSf{M@c}Na>e^!|{DeK51?|;hC}Y zHais9i{gdtEF?mK;nL3NI7lvZ?_nvpMw(FIwo)T#g;|Hjlp^Nuh02ULULz%BTQj7M$Dw75Tmh=;UBC< zl97Jh>rRo55%0xYdGb5(QhW-XNg2?Pe0ff>riuVtKD4w}X$lGJuj7x&+T?R@2dEN5 zuV@jCBHW*-JX&IVtYfJ`HmzPNO%1tkR_%?~}U!CIHDyT7W#faZmbo?HskxfV{p(m6J zgDt($pZ#aoP<8b(ss!c9sq`;!6k1*U46u~y6r56{4x1y~Y3!wB4&3_9mZzjD|T(!dcdylZ@*ppaz95~U)jw;8D@~);1 zVz0dvNdFA=hxu>buu)F>_+^=ii>;sk9)iCp;UttIx{H^B47f%=wQ4y1buDU?`N`-wBIF}Y^qs=!&+c0I@7M6ERT3WPMHS4m#3m~%jz5Roh&yUxpKb{yQLGnkDym& z!~&b!s`wSN?p5|4%JkC;c1zM4=2)8>FuzN1b5>HcCy7Owx5~knK8M|vtE6f~-&MQ+ z>QsO6F3L>czyl1|&rg2KXnkQ$RuR08$wL?zkI3<0mQazHrdwxPEYYMa4|&OzK=cLu zy>xVN0ow((SYTpkpg4>SQ=+!zV`2!)7C}O@$d&elkE!FlB`Co~@`t_aGk{D~0&D+u z%7N9?_|GP$b{0L_a6P%BYR0g0(V7A>8YD5Qml#r?b%4aYZ&*Dk-jPqDWu;c#u(HMX z$&1WgOLSx5@4Ru@kyXzH3cMH)2z_RAk8^-ieqonY;uUYFT*!%NYNCWU{l2mU z!6i$L^Szg2Onum|wt{;*`^V(dhin>#y}j$Vx4t@m?*%1@Pak=wI=)PfU*8t}LzZ8H zp=yiup~t>M!fsxsGuQJ*Lr34bw_V-O{AP-~hU45H@C&zo(S2$XvDytN6$~e^JAQ#* zWu)*7=##k8PH%TUDP{FI-dwfuIV@HvzNb|h65ei~SOooDJLU~~{8q>-d`~@0<389FYugr*w ztCsJDX{r^Y0+S{g8DIdA)!937rXp{m?CBHY?6q5*Wh_JcK&3||x6rP-iQzi@Gn)9p z>!xB;NI`4x87Yz!OM-x%f%aToMRIS?+oM(`zu^~LU6MTUHETC1wok7DoD@h+6z@Sz zRr>T!h3F}(?HO=9;6L0;Tjt~7IH~QZpk-Aq&|0-*?@05$X(hC&PVu`40{{~N8=V6r z8j84>|DxzuvVhs%+bST=oPx}-8E(@vPq+;_v?d3j_xbdmQ+Ns-tc&VZ7#U8+D(0KV zxvhKSvmz}0S5}J+*|-WBMc+KPJ%U?g=IieYJq>tg%;X-zW<7S5{wePN^VlP2$}<2o zaH+nFSN{xnF?lmGJr(s&D{*MHjsf^y+$r2CO+l#C`$AR$`XwhoEs9v{p+(B2 zY<5=LJZ&r3e))pDpIl5A=Bz?dR9|IWKu^oBVy0di7m{o66=ZXV-;7S}I~$;renFj@ z(XVWJq)Z#;v`~OFGzp`QS-0vQm9_QhB@l~+awc3r0jgJ~^{RD+8+qYgt9If);B-=t zQ8oG(j7k$*UBQ#p8S$Al3Ndn4RUnvQdS!nWN!=9WT~HzqvC?34ZhOoYGSF9XrBN!* z8~yDZv$ejOQ)3^yn-Z)i(oTWlXfo-T;M=kx{;d6*#^vk=!!b4xJbzHN-&vTl(sx6% zv%I(TReUI{X)r=p6|^iPy_U^{|Hg>V&b5|pvf=$Gh0VQxb=b$wr6W7T7ody09eZr< z!b`AubWFF_EBABNlTyfM_}7lh^4}99aL1PLMcB5qBp~xNnjo*n!Sc*?m1?qxr5edS zG_4=0)zeAIMeoI&`XIWp$Pz&qEUU*3xQQmwjx|c!xRtkm(P}-hz(hsTp;|}M1em*V z!*uA`L6nkHI4;1BsRt=olN>Y?1bY9xyt@A$YTsnzW6z}AVSuZmZ7|=8R$yTTqhMd9 zq;@d!=qud;VFCyM-nUxZO}9MBJXnR}uRqeaE~?U@L&v67ZF(wLzv3}h8>!uJ=(?-o zh~Kh}J`@M!3r2YcmCa3Z@sUq#zfI}d7to3&-3S~4X9i36s}QIHz(IO_YKcoXS@&-& z@rwP^P%4ROWGIg(P-6LG%G%+3ow^mIul3E;v1Ht2iKDuuq0HG}Vi4-TASszu#^mpm zoPCYCAs{Cj$pu|<+h%ZsXN$g=GpjpI{%~n-@nRmJNwA|H%YJZ4+WuXpLWWNe(YKlXfPT>?|&)ZFgf)p z3wbkzz%5t^0uvhE-Q5vf;aVy36+OT*@j|XK&kyAu=H<-VH&HyQK z8KUoHFsiP9k(f-nQzkAn4#+MjZmHSQu*C!W#rd=I+Jtl_FD~vgF1A_QcgFH~n4=b! zU*&aN9^-nf!Zl3Ou+$@1(F%1a1~FM_d80!2ajJ!{(v^&v8j;CR}%8f+vNF>N#NzJ3=oe^f8i((3jTlHGdsn?ha2EG;Nl9JWf! ztG8*H?(zLMdCAEu?Hr4;*KH=NB`+wh12*o}ayyNciM|CBdc zr@3vA5*t}{up2S6GFUzXx*88$&D!>iFW_I zQevwJ(>gli^JXkHr z=5Nfo){3B_pQ!eigSA%X&Ua!euTmav6-9=?(Pk8=;F+$se~snvz%E^Te?Th2;59$N zZDlF1b-E@&dN<#1)AH_?%?`x3L%Ox>&~7Am8k(17_83OT?4ouA0)!*v0Tj6vb5tBi z9TkyW?bH;q9}Jg|k95iQA+qcenHskxEg*{Ld#Bgu{p}NpD`b4&Ws$8Q{V&zbSl@x5 zGWLG>#;>feJOXWbCa!AI;IZB@i(>^dAD=uqATGH{ChZMo~u z7kbeMb2J`Xi34FGjN)aOm;-hX%CdskCf4oS{p+sogc&zVqmUGX@OTxMcxO!Iz(tBa z&tYuo9rB5!*sLI7G}m2z4bBc2i6Q#^I0~OLSY9qyvaShADcQ5$Qq||=;PT6L7M*?K zY6lCiZet=pu%!-hO1~BlDj6-SYqYN!^Q2USgas}|Jai%yM$zKvi>m7!-ijZvJ2@7# z6b3CTg>H)X9s&`H%mGAdoeBcJ3Qo}r8|Fd{iP#&(B=K0R@t1VeKKnz>JpRT3t7wi@ zF{s*O+8tA?!Im@{llq&-z5Z08)jQ=Y)>c0ZTMCOoi^RWgY>4{@-QA%_FT1np{|lfs ze{_wp-fnwp_!jfuPtSU>{V&kFR4GuM^pRQ)LFD9+lt%GE$@EBd=vwwx$@&TX(=z5G z`yFu%)rJ*w{4s)zQIp2r)2UUV1EmGAjLgsO4Tp~ zb+6zVq$!oj-Kj8-p;wfkG*P2PUr_Im9aY{m+DzZMz2b_!9?=L)H3Y2F7 z6C)c4r%`=pfQrnMzhSUTM>_Ju76gsLqYkrEQpGY6nQG$uMv6a}9slLDZzF{7dFFG6 zg@L?p1(G3h_*|K701$)a{7grr1+1mB|z=3WGfnO@DH?DXg&ANRa0 z6$5~PDTsrCUIQ2RSpE{}DYHn>)za5|p#Lh8?0RBRJ1wS^JJ&)XsU@Th#7b@MFgyBK z=_66!YeZx9QpU@Dk9Q=}Bl-O|MN9yS^r$?a#HD4UyU+)o&?&6;<*nT9ZlCzno*N*5wEHq3V=r`AA{qxK3 zlLY1ZHx8p(b*D)hoK8ovp(^%$W$$2nX~V7OFM$m zp03!o&PaFmv^6P&O~3~qNeV$PLA6ACzjn@|gI!O(=$K74n-CT~d-90i^0G`O25Q{ow#kUrn|RqaIU2eL~EP~x-siXq5!a;=F%yn;`9?A zh$?0eq!To8(U$Avr=p!N+55^Uek3%hLM#LJ|LD%j5EDpElugy8d+DC#puEcRy4FCy zQ5o9;5@;^IhXdo`%0%+L0vyDQD(k#I#a}IADV)DEEM7)*ZKc)ddwo2?wj~*^cK44> zUf+z0@?(D-tH>yX(3Nt}95+4MY`s5*?Dg(dsxfgYe923ypfM|1@^fQYGt977VVXZW z9wij(ZYfoQ0+14t3OA zD83tnSXx_qj-?9NwI4!^e=M3$6c8A_w z_{N&_|50U=F;7i7f3ew+id_>>t@|IE-S{IGK)(~auKToP`wT#~{gpud|30PvgYniU z?=JekaW^g5{n=Id+B}jZ>RHom0J;$6f`3A>l&o6b(p#xtFEult0r}FDk0$?(W&ZNYuM=M_Tv7}@d^w&Z8xbNCz)<5HgK6E+1q zUtN=lH8zAfD8+VInq8vt!|%Bq-OSO^_BeI5yv>p;W)k+vJkD_PF*_iy3GfC{_shrp zvp+2-1+ToDJ&fL)-_h$j6sC0B7K5~6?;v79*gr5G3j8!{M5A_i-M=Y?u_rBUvU6DA z2R6kkG9-f!Rq$67ynm0cs>ENAu#e-OUPdukw+a7EPguFur%ZQmXcSw%v6;9CLG)qp7t+@I% z76CZq29eELFbUpYff9jQou?krs@!*77+;#-L^{^$nwRd`7U1vAp2xl>>Y|ocPnaq- z(zI3eVrkR$Q&BVxF<32jG3BPR$4Fh*cUKZGHedW=1-I&xBv|5JI4s z?SN+htsh1d51+@rZ&eL+#3l|r51R>;Z*jS2` zjF8uX7>-8ylZPBG$Ng6Q`Hb-6@qGjhXcefl$Y4Ta7w^>QDH_e&gRHh(JhGf#ANta* zb0)*CV6&K=>bCObvbZ7I&;wY!HR#W`(L$V5Gv}m)%?t>ZS;chp&I+#=V4b!PPdlY) zf7OEpvJ351ltl;u>}o2M3c2_a(Wk^UhG{`=4d8V+!lUhN3KbkjK&q8hTAl`_hZQ4( zOI@UN1^ySbpm+jRN8ftHvRm1oWRUJ;8Y>R1_)c zqnZCJf9SZLBjCteKw76opJ{318y`rKQp`XzqPdSf4z2j$ZT zp@xi{=ry+kU2v>?CYAJm!LXx&WfYZ%!$E_mWq+>ye~Y^pWANWv?j2f6CLx8dW_k03 zn(OehBTMgfPqJ2_EoNjbdw875Zxo~MCivI*60$$M@gQ&cI_Gg$djmUqo!wh7Ygw=_WRVc2tK^B;}Go^{QMT747j{gILtd>5Q|08vy$v&TafwHyG2+!A@}$VReF zxEEwZo2-{jwoieN zmXRl?D9x@1n+pbFq7llF*&72dGMXnMuIxm3uf2weQ{uI{s}K-SUGy}VTh zkyKi^e(N6&8#3f<-dm>}aJsiv4w+(P z;6X-fr7Bkf)we{oK&{1e+BEp$v^jXB>_@+L*psC*dlqt6JrvWDUvc@Gj*6d-CohAi zIhC9`hEk@6QWiTCaLK_A0ASs&urx~GprH^X&@HT@?_G|3b?{tZmg3>adpXEg?3-mqtLosEhX17N5*Xcwh#vO|TbZ3E<+brXQGrg@Wip{%Tc3TDGH$SV9DQ&5&f7=0{sf2$vYH zhQ8ooGvpC&H>wQ7BkI*T{>~dRDv&n=RKv7ABL<@W)e<>3OG-+dXWbcJB!!S}%=`iR zjg+tom+nLKG3>$^;tHlwD}J@|kmbCMKP;U{x4@8l-w3Y!9_R>~vlRSd>FzMaGbjg| z8K2qD=EBg&%e8i8&1k{^?SL*@y@OgQR!X=ZGaJRZ{cMn5PA#P@lc`+O6xH~Yq_@Fw z`2KH95~4$*gQ7<0ib>Uz|LQyYvDWdKPHbn{j;1Sfw|BO`d~wMRon%kp8Mh+}){mrQ za!zM9h0Cd_HD3`e!supU`!+9lAx(q`X1*&$hW0KYW?KG`&JQtG-CrL!5j?gR{IuFH z?jvfaYLT*-oUozGBx)HbDr+kAdpUFszYsqDf>t^MFCCnajhod)#;eEvhAT!WRp53z z+qhuro*y4e){DeS-}Tm~Yq{l?qA%q(W0-IfsLMe#L993yDHiW5>N)LDh{paAdw@yd z6{e%&s6^(Qcig^ot*eBmjl-WEaa)(WN~{SmGDdgRWEjC-H1rk-xwSXz%L*KP$K$Eo zL$uutL1%-m0yNx7JK{g;$mRKnW%fEfHm9v>`V^>@*0R?wPw&m_hcDPZ zhq|k>>dc+iVD0+}5iClubI^gU{0$KmivHbMNi>94>G-l>V;_0t4Me$)(EDqY5w{AcNA^DH zv}Ghd`fYgJ2Ir&e(_~{KPsM|JmEZEcTkevoAR|X~svqZkc=V-1{!y4(NMRmrqtwcX zJxfQ#k|NG!8qIn`O9FjSA}Y#JL+*yhP}PgjBJvD3JJbxs zYx7Mn4eAm*8+=GCG#I9+`L@NU$7UsML*VmbIk!Hma{D(PK6@OeM#dc-13oIrYAEoq z1mNt!%1mmtq5KTkR3tKOwEK!TKdSI%zBldnpF)mU5$Zp>+eUPr=44y-H3LGN`8J*M zO=}`7{7MAj9~gP_JBB`zjmTJy8JtJIT8NdV)I}p2wh?pHH~l_<2C#Usi`S6Cquqt{DEq#c@1;S*Q#}EP|RxVY3O#}a{ezaT-ve{ zKKU1gj1l-J`+sZfEt}$swy534-5N;<9-82U5TtQQkcQxH0RjYf3+@`EX&MOb?rsV0 z?(XhRaB};c54UdBeXHK{1A6aW)qAfs*O+5G(>_2(#vZR%(rfugSus1=em~R(SKf=W zcF;#)(G+c7#y3{nHj)lUWwOCN8~}0zDsbUFs;=53H~p$qCSQ`1SSqbqKUGC&tIXb@!C|Lpo{|zBLgBcy+&p9p)R=cUbq>z^ zoW*e!poUpiTFaHN{uvTRM>q*IekHiN9ptAx_8{cEd(rD4RM{t1XDmbkuQQ+bIbNHHa2i3PV?(@@P;R+|;gFG5usoEJ`kg^b6Zu!6h__ zN!O(Gl5i;(9w3gXOy#X_QP-r))otQGj&!YVY#^jg=~JgMH}+t;U&3i%JN?S@qh%07 zPpw)$@#sPaxr<=nx|Nn7(fnI2uy+|Tk>9w_5s@vk0%@5gZZje}?pBt6^1E`)j9sD* zM40#*#F}-lc2i2cP)DeqQwRF#Y(`)8)>@L<30fDTK_Y%RqRaSXciSFw|CY~feYHxe zb}l(!a$8!jwZS>YRt^>@SI@q0O_vl|h@02b*kREQp+l<11O(d8Jkictg}N9k4E;JJ zeKWN$vbT^98hA@#ax=!EO<@-;MQteh5gr2z!vo zA$Ne0jtvH``W*)40>x0d=9oce9My+M{{TC=FG;D(XzdZ{>aE1fe;9;2DS>aq9X@9^ zsx2sBB7x#znB^4CQ5Hn6pJ-<$T-aB?aC3LQv($W#ot!dMLeQsQHj5%&2UF37sfY{0 z;i*r*ke@T}J{H?7qUc!+r5*guXr15a2^Ep-Ss01}Fa7*Tjjhch!^N421n`Gq$o_Q- zPyEXu_mhG5k(GDJuTIYnm@RPaO3mcG-AG7=Wn=U1HMt;%1{Mflrz0KFpgWpbt;4}v zf09UEO=u#fs^C_&#WJ0wzrkp93sDuzIF@x7#>zhig^l!u>RgOa70@4yP#I6YqA*q| zyUf&mZ*H1o;W*z|CVNII!fE9)oOS+{U&J~B!x>!jhzoVR+2wFw^Pw01^e-k7em5!nHNiv2+3J9T>d zoj(znl{1ZwN9x9UH}|BEv|i?GJE@dWb>GtW5X!jZ#MjbT>~U@g<(WW{o1`{$RW^Mt3nBUVwfxhYLKOZxFP?WSO!soT~M3?A;3~}K# z%+kxW1Mgal^wf@DF?{eeIZrKl?Fi}({oNiL)1hDTzXUE@HrN#ezwUSK9A^1yG56|ZLj7PB7-sZ%KhVTE}H}`L!}F z8|OY2Eh{ZDx|AjRlVQD=1^xm9FeQUUW&RX4kLG`XZA7)s3WC)V$|C#iu+W0O|C!(T zn|jTcP4S5}@+wN8K2>KL$->kIbvykto#baau-GpBYY;`VvrFCr3w#N`J0VXf=PfAo zjkanD2U|(J7@J!JE0SR@PzD7=>B`=8QJP-W^rK3*LZi=2)c$>s(ds$(BB8tBY^t^c zl95jlTlBZe0CxiBVxEh|9^2Z!#J6~pjJe!h7vBVym>lj-tGB`&P=4>A#D*e4=(J^! zK!x95{xDc4kss|Bi?gK zvvTyal@WlKOxuscdfIU! zmtEt4Xw4`I%atEuU2b)X6jX*nCr5j{`49*b7xeoaEwb%-r1puk&F1^(=rO*()2Vq1 zeW*xHREJhTdv4vhE{s@f^V%uLB-zPq$S#vMqc8QJ4;$L54WJ&~7M??Gb8($tj)MMl zptw+|LYGs$6^85gxr9+#`^$d--kEnFhj~O;G?tjLbmiEZpzGA2$N(|$nBMn-_fKDn z{{cW>dfRNc3~YI-cR2GmEFE&2| z*16uA?l9CZy&s_E>MLLGyh{IOALK|`l5gV{dd;v0GZ!wn^x$km{GN3>opWnmmVDBwfHFE8^3 z$QO+*-3p*y>Xs;Jb;u&5F>5Yi%8qAv9ZTGy8p}S@FSjs~s!TIwHO8jINz*{_GnkFT zrS%jy{iHh!+8`KiuKBUMK2rvp&T##T$lt(H!LLT_O>i%H6311roV^2`c6E$vRnz9g*`*y?p&yp7S+4JQ{sR&j5laPSEFLxgaYzskHf% zS*Oba6BJnp!-REgO{?{Mv{hngudjWK;!uH6UT3FxIzdda?BQ{%baWiJss5=j@jt9x z=C(o)QQ6=c#~v?=q)!f{{hNf;(m#Ndc#W4x_D&n0QT+XNN<{IpYnT`M>!cgVeqqN7 z*nfGYaxKw`W2)c?EbQNA0RZ8FFfn>{%?@c(0kD5g?P_kkgRiXqromRZ?ybpXmSsI* zV?XS&&r26uD~?L?OE7acOhM*tUP7xtr(Um-OrWDzxyrZxB%;{;iGWie?T1m4J$@Ef z0hk1^)CrMqL$$;`1@_e#42QeUzSWIP@t$!bKh#|=m$BhspJDF-*MhICH+q0FvH)5` zwE{&QXWOg{&${-yf%@f~2cZIuYd3P0xC6U^DCU4_m0GNKpTd<;Nl~Dxer{@N(DRIl z`c>A>#xHeZ89+AaH`apOJfWVwu>GBFhaYq}id^c!w1tQU3yS^=ap{ZdEX^6L&EK)+ z7X61#E2)l2J72@;u;2=Ml8T;90y0oVEr@*%Q#a`9Jt_zuNo%-=?$Pypsd>(! zF}_1S6k>ni3r1{We(9ijzvbI4yUc0+|5%g0{19#fvia8BJw{>ip;XRepTu+`3%EHt zywJaEvC{i;%q5yZ6NoSZ^bbBs$-9mQwMzcqW1kJ3CK-Em;{~*4U+Vc@4&(G8|1m6u z)7QBMXr?F2(0neUvB8q^cM!@LB2d{gKKS$TAy(OVGWWN<0Ux0Y9iyl#qIuF$*c@Ng zr^G})ZWq`Kx}UnyU)csopAl#WnH7YWbWE`7RI!|_`t{jN4I%Hn&NWh@4dQ47SPGqxg-u`fvs|{zqhm8 zLy6yGWXryl5uH{hOzH#Y*^4Uo8QO(Ejh}i@#*~*s61rq%^}KVLEm&k!+F4}CK_;hw zH4$~DENA1)l0Z?gdIISnWpHgsUghR8!oP875i@Zay~tuoh!{El+Zp?PtH`3IC774E{5ciH;Zg7 zyM}jiJNKmUHpkVyt=U)X+Qr)5msj4Z&$J3_grYPf9GhEOzxk8uVf47&AK{@!mUcjT z%dGcF2}9FL()&p*1Ht!UO@@659+9d00&Q5ubc#KXzkM3<(^aB<_~M7DBdm!ou4r|3ZOLwf;F*D=}43HG14Y5{TS-L^l@K3m)B~kTgw$k#g0O@JZPDMQcEI%z z)LRQN>SyzK4PocwQN=dURzB0vQ$qUj8juRiw){}?1J9*lk+!cg(*UlED-xfD`;<&S zXwD_>owFjuP=t>F2FV#?DJl2bMqimhF$m={IME0U`s{=o7E3l|Ogo{WDcYbsS};BW z^<#J{b|}QEHL#$9#OI%Vi!{UUWQjI%vus*gLkOO7WEl7fiW-z%vgt1p8$h$*zriGh zU$176CCxRRCQxU%B`}CQ$}^+-EfNM%n-)T$aekNprgdb9sKdj|L;x@V0zd$`+Nl>; zc-5LD_gR%&i5=1j=6zdPUXTVC_vc97sVwSR+Q4&}x!}3CR-i2uufWD-KYZ7Bb&4C@ z7?)X#eU<+=0oJ%`Aq zHh!bpuM;Pxy!?&@O!9UB()1~UsKL|D3T4`o+XtmO1PJ$R(uU=895JM1V9 zKtiZo(Eyz#gi450q`A1OSynG@`Y6zmeA3}wLEk}+ouRU>K0umDR>Hrx4^w8T8>Olw zct`;!$6N$@;E*q8lebB-7(bYM#cB-w7;i{-}1LsMYIoHiUhKR6jGQcCgC= z9%#oJ0NB-i=e<+zF-wYJrh^2H!26>H|8e4zai?n2{<5EO_!Kfhaq4(_M9T0MfV%rKU zAn^-+V>5eMoLOH|M;tG4MqT20TZ)K}y8zU&hV#9MLvjJa!Sq zkX*!|V%4bA{C>)=m)KJxS$vekU?J?pp_Y)d;(0v~u+`W#pz=nf5le=7KtTobpp|=? z_$F0~_-UfToL?~STu68Zx!FqClk_uvSi_7vjm&HMVH^EljBz-&cy@Xf_;Y{NM>u-d zUAv>%y%WursNJz)Q-q6jjC*kA+Co3KUTM``Ry0@jh^nkQ%gF$hlt_tebcah0+-H}d z_j7-gi)>z^JZJd?yA>{2)cEmtSm>SO4RP16F|5zjU8!t}ol)Y5^6Du5#>gNM6mzN6 zuVEp)vE8w;ae;nrA}$bP$H1SS)e#0m#f`i-WH-%Cc?(qQumuZI#(+r~T7XjkI%J%?#6%FgS=o9&r^%q1HhY&zAS{Ou^s zD1yW=d%(LQqrb4t0OG7q_d@bHtY30-eAVDQ{NKI(h} zW7tm|y|!#sOOavTfS@{p8E73%%-M^KB`*1?o?TT!{4EOQFWr z>Aw+IwUn7JB*YgmaVf*`Rl3lxb;74#9y|FGbK^qYbV2ab-YJ@H1z%KY?6JAJ_w0K_ zQw8qoqiyK4Oe{%@uTlR9I6mPM4mlt|Y~ax0TBGghoh_XnQx!Mn8L_=e#K%U6X*<^K z`m=hOW8*?k<95st`jP)bLfd?yG$BuZ`J8KkYS9hl(3J9$%j{C@Ai%&?N=Akp3_^DD zQ}__4PsL@!J9pMUI%A!b8FAmYYH83Zd>3v?O?7+mCX98D#=XcFvrR~jFT=y(A0TK} zs(;z1(^$Cr$EWnxsP`9GJWJS{p+x3d<<>`dN)U^MpbTTX}-m2K0gw`CfU4SVlJfp|Ru;*zaYOS4B1&Ho#-@@+qWNzH2*hfO2c!D?t4B4v zuD!mvENy&EOL6<@3nne_Q`!tu6mCqNgkG4p!j~D#Y_rlwxe7mR0VQD zk9rrUS4X3VDx=%apBBFU{N*lDlWr8-y6)*y zydNzbpVVZ4wxw!W*PK7;2JT-zX-kayOw&wS!awR=C-2!vI*cO9LvL3)leO@vd$(S; z{^RM_=Z}o#3lB&8gBTd}OUlxQ6(~+h~T5 zq<@aGO%hTqsJdj`^|$;%xyH0+MQet9-0#Vzl^`9jAAFx?RU&K`Sgd{&G^sTX*r%do zP~KF`X5u^4x%VaTj^3!f%Oq+na)tO-iJ?J2E~T;G!r)o-E3;Km*_R2^NMLG=_UY3B zA8ROfpX`_?TX=I$^f6InRPPMYH1GJja<4puyoIi}cl|^SIA~JnCq+4m6`lkdxk=6Ydr{9%TR?2k;}t)55kKin_a;mlvN);j&uzOQ%3 zGX^xHy3i1IzM%1d!w$5`kCZsDpshIOZ0QM12JQLz`|fPEA5M#jP4D3Wd^|^$sB!)p zL_aWT1VtXs<9(2FT5p&?RBe>jp|}6Q^`P_=Z>VKNZ-Je2*@S&G zs}>hzQxA9;0G-O)MRObv%5yQYi0cMx572v@e}-X>Ne)L1U+1axEZH&4uAtK|h?C zjowv+VziU|)G@l}5yJGlvoXOBN$khWDG4(ly5M=^#4k|Z`w>_O;RclicGxa`9|g*E z#K@nRmX8NMf)>vZm+6nT@*FEXoXOvai)>Jtb1PC|Fj;>P-bHlgY`5q@odIJl2fmC3; zF^C8%jv9d3feOUjw@gx1k4e)aPnJ7JIgoF1ekLJD?(ssz$-p6r5rx=cp^VovW3T-5PA-AJ#dG)RvAw zg4kiz+>6$3k?(05%)SY1qDYx%GpjeitUtiE_y>5pCtV!etT0S_{C*BM1N(C$K4MY* z;{RdO^cB73A$7>RR1kNLtryrvxCVX2NS|Kx^l-LVb18Gd0Fmvp+bap>h{l5YhSpT$ z(;1s1c1God<_T9<)>S~CkT})%QIDMf zMxXS>F0Xg+`aAucUKtva9z@Es^tb%X9J6M=^GdVoxHc|Efhd(;dBrbi2&`f}5*b2~ z>c6K6A!+$|_|9!mOSTi9kqQ;3Uln3WU)PuFCV?UQ37QZ=t+dO2bL*Lra*a8p*fv&5 z1cjstvZV*X#6>{Vb-x-l%kvNGIe1f!%q^cSnF-jdf@CbTw|@{I%h38)iaeiyTVxa;6%(TRfsMa2DYR~*!0nTw=tzLE9#wXn5K5ooaC-!(?tDEiF=iYdcz#^Uk<4=Fxcu?;Nehu$<$HZO z*FIb?5AmFIlPV|7yS-X;PJ}AVA!D*H>MwUlH?=zD2blSGA-Q5$rK!@tzP7E~)USmW$|ZXd1izbv)o` z=Z;W$1K^x6J^)OiuYHg9j_RoWFK>)?ZtC-;EKjw0fS2e;Z46l4>pA;p@IqtNy`21GfbszKCDf-wdALJdmp|f`9svsNz(b?d`VCJ z@EZ;4F*h%zQAQo89~FJP)@S~N9Pb$8S)IRL68B*`aUL3=YtF3KZ7q%p6q|=Z@saum z)5^g02^Hts4SG-`ep^sTI;d21WLVY%6`pI0g_?n)!_0y+CP4j70{YwWvJl28gaKVX znew>de9tFIE1LmlpsTEF)KKx`1Y82F(c3k@82?-=Q_Hx_PhL&Qjm!U=n?bp7wNTq+ ziZD#R@Frgt)!)i_+O?4=vgw2`ofbDjly@J*@OK0M zn@rN}bc*t{qAz5nN8n(K-&Xv0&BFFAD6tFOO?jCu-V&T>)(`mbl(fu%@?w|jJ5Gb( zbdWxx+AWC&)2tq}JqbUYNd6B__xpc<7HPe&+@e(5%mq5`@{PffB!xgs`t|_K+lUuG z)_4Of2H2X}iFR(fKRP#K{(MllT=ckg>jw0k)!vUk-Va?t0kCEXjP`ag+0t3{Z5}(b zBvD6HBJw|4eYfhiuOBP=ZUQp5kIl&^M#*@d2ClzV!K^RbM5`j6oW3O9jO8}!*y0T& z%zNJgG0k(=ke^mN|-1E900y^%p>N9vAkCgJy|p4d7qx%;S> zwCiT}QzT&nM|HJPOubAVWA-p{5TZm|$`8X5wB|&||EM!iuv2+j@!OK=^E*Ueed$|; z(OM8&nF7*uE)XEXD4432{SQz?la{|wJ>X)eyH(h{tVtp#F3o>~s7t{eujg&*#LSj& z!E~=FkSeJ=b~K^|;w;ws4j#JV5kK^p{(YcXc6*5A(p+={!(ZjO;&n{O#;(8U3)Wt> zPu-sTtRl(wpt~bY&Li$@|L`_632=7(A9MKL*l3|`_pJ@%$mi#?r$epkWhkV$SC^F* zDfLeMqjA1#NiKQ>oFH~FGj66alv>aQRWoX2TE_;q+Za$QX=FzdoeLt4DR^DPCWF=i z;}cAs8=350>BRjNlbZnI&exLxGq9i%68Lu%*RypC*hyc|hqpD_3-r z&lBgpAWp%wM}^7d2^G>Jx;6CZ*;W&j@@?(4dgZD*cS&~#O&{%JKfspc6A5RfWEk2D zbSVQt@saqsvTrSX*!F+X04+{Fk<2G!$uZw^1B1XvMcCNl{5al|ZnRe}v;ZL9RKbjr4I(3Yy& zEK6i_?Gy7&7?PazcER>^C<%-!2n>_jtf??Oi@up7zUd8UDP9p(n$PNoazsHl4QvSL z3bgSF)S^up#D9z;`;SWTylgQ>&hfr`>%E9t2XO}`Jgy9;5oGSXXYfkGLBZO^5GoWC zWI!B}0Ih3x(uF)BMR9N6y6_f99Fud1oAZX9G*)g786wQWo61mh04ja~8U~~MTw(JH z>2KX{3-@LtWHDcPngudj=xE{0tLJ492rZDPao|v~29bk^Do}BVQ~Sy`OVQ%tDqI#q zrMenfkm~lw1&=lrS;bEu0&*q?Ga~1yOfQWV$=AL{javc1ppb!H1&_TV9s>0YRSUV{ zlKP)1=-lBpwadTeFw2AjbR1YMy4?zuuw|hE_(-U@#4uLKyLjo_+a|TC?dY7(7p6vN zEhSbQTvH<;efnSlD(nyAa2Uala~sP~CTN9p(kP_5#39QLK63IX?CH0^cN_*vQH|>0 zYO)zm`&S7)dkiTu{%I$e zWzH7MN|LKHYz9)pJSUyhYICp_5`^#~d2YK?~0Wa;f{rMy?YAx{HXksw{lPj6O^M zB>Ivk*DHf1m|?*$DzC$Q%d$V+#)d)+BPm9*bW!}slJEaa%>><1z z$RNYVLh^|hGNEM-qWuQSXVP>IbdRTBC0mKpY=leNBGi?I@8Xh)JLNI`$`j0+XzKFI zKkS-O%%v4gZ}+f77<}C2Ssfn<{MZ-H0&z@v%--Q~+9h6*k_|mBq6wObkV)A1;b9wAg|4$Q zi>^Gg_ace6>6TCtMcg&Os%RubB0Dnc+bkq~&jmOl@U2g+5}GZ1cW^!9jR3*Sj_VDf z_0pT!x~U*LogLgBnb>H^qbvl5>Nwh#SK-N(zK`vmPe5w~c1s~Ps^tLe20&pjFk1`& zN^Y{ibL+yNK=5AP5vJqNBF})uW9z0Xq0+~#IUYBoje#;ozS?@1mzy!}F?wVI8;^NM5=!4Z2%*ELUH4N| zOA8Z`CB<@aA8RfsiiVr;!Gkjep-N&(8m{!^mKzk(U*GlF>}J=7%pyZ+yxB{0Pq9$9 z&G^YXdbG$jY?N!-2I%>3v4_~?S=~RU-G@KkT#JlMeA3#zu3b~wm z4FjE$cc(lBA;kd$=m!ruUlz+Wn8CIGNw~iw@(g*1&5C>TPVC?yY_$r%Wb$@fA5>R3 zZiI~R#D%QjSePR;2o(qhs^MMWG+v3N?MH&Qqh73}7pC#cnM<$$>`4$*(T}}AH1JH_ z%lSnk)o}mxD|XG+x#a$@#^rr;&FxV0^_KTr{`;juIv1U*2P`(ci&sjo5f;u z1bf;4{~g5ge~QBVC!09ZqPUN!6iWu4Ob-u*9d9=ztXfVOy84{bFMCyE*ktVY&c@+R zDUtV2Df&)xljv*f*na8pqFXXMvkgL9ZXJl1v+5s!2ZhgAYNchA+5){M{cwuXc-fCd zlIkWC6n7OOX)H|SXi-L90CCS&wKHXb*dq%o?|MZ3n2s$|B+usBP@=$Prm?ZNtTah& z&Ms5FdUL{k`Q0(1cE6v9!3;xi)_py=sFlflM7k?i;TzuSm%`hh#;}_HI$nNiNIM7` z)s7j?}x_`wxT56nZ?0AtqGr`KJQJs>{}V8jnTebN$(AleMw%GR7VjRH9?BV4%{0 zioL?)48u}b@w6t!o*siJuhU-A0vCdC&bE#VgD@ImG^$s*g%~j6h}|~E)c=IU^F2|K zD?)hJzEF8#hjTfk9Su^7U8>!FbtB1Xs4sg}a?(7yNSPs=5Bq(Yg^iwP18w1fh3^LcXZ`?QI;8T#|4`mary70DzxyLQF zR#@SH&Qgax$d5oFokzb=$#}&ypq81%MNW1+Qyc;cz!X`mWuCr|DR0hToZ!G4JFzft zaY&Rk|N7DV2h0UOInLM;t>>qc>0VhyZ61(pQJjvpOa_E9sD#z7#Dj7i*oCKAao13A zHdH@cdmt~${z@+D)KfNw3d`gwWU|hWBwGwYuTy}~;+x~8$yyi|{K9MU!=NyuPz#I@F8A z2V54$W?)CqKAm86hf%6-N!3gz#NQ@_&+(Dsjbq~1`Xx-RV|0ikecjSpvFd+d?P0*n zq;@w8a0w+Z*PQ(uGjPZ16;@5p_yn+aaD_72zv8GQp8aaE}0CNFtg`@ zLNSztZ+yZ_-!jlP|K^X;;;kiAtc3CYee;lEV(DP9Jgcdxe%Us#YZm(3%1+dnQ6g!4 zw?+}Qk#)V>r_{H7#NK}Vwkgw83K_Tz^}*RJs#3rnZ--_RT977^3(h4ILTKejoS*@ zf4%8pBD0G)llh!tWhov7CR`3?!fjN8x@$NDLZx0P_C8nO3*xJVjWNdl)l*eqq}_mk zh+?ZcFg)(#7PnM_HUw&v89sIEg+97O?_H>@ec01??$<46meWBTWAcb$klkg(i@T(! zgL`*9{^QbAfi>b}MPsLpsGr0lU)caZRCi~L3cK9gFxQGi_AOYDPGQ>rU zCYcfzI_E3C7kF7db+ae%5M3;6&2O!7iMVAM4_Pu@RVqMIflFbvGg1LieBUfB3ap68 zvsG;++ss{0J(6_=_sYt@fwrYP>{_aJ(HwNX4;>J0JCQ9cMsOvi5e&)vyS2);C*aYB zqBcdrJfrA9Q|H8vUD7{5*IN0k=4&4U*T6q@wQu3}IyG`iV;R{@KFC%z)Bgh*$=Hk8 z2KC}G1pi0*^r25d_=~{7h?DMyc7U;iYLF)VeOy(3-IJS~o-koQSMlEMeOZ-E52Sh80KNEmLHh4mT>9}2ic;W-Z1UstM`k<#scqFTrWDaKhmi8CjBIuz$4S1_t%h#L83*&`R|D zQ%zYb;-85vzqy&v@fFXP*s9yl;?T1_%S3J*Ut}aFN3wg5X-$-xR)~vkdrLqL^L5c& zG7zO075?7;JpEi(rT6Xlz~m`xcT^_{LS2-Wx=*g3|L;c7)dH&vLIeg z2$DEsc|8~w4>iZmi2DAL8v9uEXmL?{HWl-7=(CuchopH?x;6z9brH1@`IuU9)G&4u zdQvRAaN6~pT-#?sP5YB0Zx-s@!oB%*6SoH-ys*VOl3I z^@F%ZnT0`?tx#~`Jz#Jki)qESoujCH={LWu)Tr(|2JOph3`N992YEfiJK-!r(fZXe zT?oq;R-wK$`fKKENxrz_p>P_R^0EKHi&NXMp}29h_|u;^O_!+rQVQ1Gz&wdA6M24` z+E>X|tyl%R(>PF1)I89&ZJuoK7W@&-uvlKD7s?#(6IGX+Cq{!3SalBO#<;5J_4LhW z|Cu6I1bl;D0l2c3FR($#mdFpj`XL_tfaWc@tl> zi1I;iPpo2Bp6pu^*-{PNOgm+V9Wk|DFB^VuO2EgLROfMq4Z15GP72jX;D`P#+*E-7 zu|L!29L=71r8TM;R>nxyN%8TQp-}62%iy9Kl)PPdL-1s_X^z3`tTZ|Z#yasB8IIKz zUG%9xIWJSx(IV~W5{|KLn zQTK1EVZ(4eU1(PgQZ&(EP(XZKFm(oGk2?>owORlu@7*MPt2$UflC=#fc69phNW8%( zw8{DvT`zdg*jH_CVuwY!k)c+MK^g;2B+OG?Z5%2`vDZ{iTG@Xnylp76BpHV(l_**Y zdD6qzLvib_&AlZ2yUPqp*=4Kp$i9Oxp*dyS0@tDG-ps7dw}y0B7^v~YIuQ2pt0S!? zP^$8R!k??zJkL?9-v5lC1+32^2BIxuuXK4z-pU@95NzjsHux!*VrvVDqD#U9YR8kW z6VMm#B07cfd7p_Q+G|mx;pkTecLyEMb{$cYT`g?7F$DBk9p1st&2o1gn(mSHwP90& z^&QqEC3s|gESk+B+iBELiF9RvpMn_A#VYG)D}>QWjP>n#@1n7eom;4CP-D;%ec>@q zbZQ0l?qs#Ep3osp0r%61@{cH+hDsBNw_cGLEz%~U4g{bgM&bfp(W{$nD!!J_vXkf1 zH@P|xgmK1Fdd!iJ7BVP+sQuE_K~(S$mMXUSaU>RqDpg9jOmEt_ z2|H@{R7seBo^1Blim9GM&USTLk4~HTQq-_lxe)7=Fy9`>(=~kA(JO;`Ss)lhN8ee! z^MBWE5r={|w@Vn+E)}&e5f-=tGX*+2?x{5^(=ahc7tT{Y_V*~@0SJ;9CE<^`?op~$ zZmEKd+`2zWN5U`U_gWQ5FqjN}ZCU4%1{Vnz!EZv*tcc#tk^@vKd~7%>q1jv}~W z-XSmdlmwB=`gM`AUc1Q~>3z_QzCrPI5h$Ay_81=OWc>rL-=Y%(!B0Dvx3bOLup_&6 zj{o$>+(wtk=46PacRT+apDR9O8YaYrMM9EP@`-=nr`T@W$`~(3j~-6N=!~+Ihakf2 zBF5UfR5A*D-NhH6;*b)F-VKOySrf+Nd+DC-N^z|o7)@+^3hm8dEwd~Ll#$)aPx>7GQ1a~=Lo>P_tLq=&DC3#sb#tW&1?U3dOU_&NEzZo* z=O^8^=&zvHCDfiV%(#2^W6j|LBj!~7PIm^pIs+yU4a0aW#^%|I{VLVQ=@n)DCV4t@ zM`PfRucQ&pY01VXr7M%AJOZOCq?hu5NTflpm>C7tZJ*+?Jk8@Xq;u)CNV7WugajYb zP9F5P3x!v?;l3H0lacvSR2^|+D?#R00mA0d-n_~$r>!J2Qz`E_2Gjnj=6nqCt4tef$ zl@4J9&DBS5Y(kn)>IdFuF}lt+(Xsp`#039Ext?(h+RRqQ{)ol+eW{iaiyB~xy6y=P zF&S45RvAQ8i_@% literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/motorola-xoom-with-wi-fi.0.jpg b/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/motorola-xoom-with-wi-fi.0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a6c993291eef92ce1ce2598ad1f2806c16688321 GIT binary patch literal 34430 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%0Ad3q)A}R)id>CM& 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

    f8S@mQhpZZGpk{w}H>uKzPfD9(X6+l7Hv2 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 literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/nexus-s.3.jpg b/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/nexus-s.3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e51f75b0edcf2f604f9f7e56bbe2cf760ebb1678 GIT binary patch literal 21118 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

    4W^)##Gk_!EY?HG$N03A$kuJk8^ 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

    4W^)##Gk_!EY?HG$N03A$kuJk8^ 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 D74$95 literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/t-mobile-g2.0.jpg b/aio/content/examples/upgrade-phonecat-3-router/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/aio/content/examples/upgrade-phonecat-3-router/ts/app/main-aot.ts b/aio/content/examples/upgrade-phonecat-3-router/ts/app/main-aot.ts new file mode 100644 index 0000000000..23a741c684 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/app/main-aot.ts @@ -0,0 +1,10 @@ +// #docregion +import { platformBrowser } from '@angular/platform-browser'; +import { UpgradeModule } from '@angular/upgrade/static'; + +import { AppModuleNgFactory } from '../aot/app/app.module.ngfactory'; + +platformBrowser().bootstrapModuleFactory(AppModuleNgFactory).then(platformRef => { + const upgrade = platformRef.injector.get(UpgradeModule) as UpgradeModule; + upgrade.bootstrap(document.documentElement, ['phonecatApp']); +}); diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/main.ts b/aio/content/examples/upgrade-phonecat-3-router/ts/app/main.ts new file mode 100644 index 0000000000..51b8e4d2a8 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/app/main.ts @@ -0,0 +1,10 @@ +// #docregion +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { UpgradeModule } from '@angular/upgrade/static'; + +import { AppModule } from './app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule).then(platformRef => { + const upgrade = platformRef.injector.get(UpgradeModule) as UpgradeModule; + upgrade.bootstrap(document.documentElement, ['phonecatApp']); +}); diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/phone-detail/phone-detail.component.spec.ts b/aio/content/examples/upgrade-phonecat-3-router/ts/app/phone-detail/phone-detail.component.spec.ts new file mode 100644 index 0000000000..e3b9143a94 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/app/phone-detail/phone-detail.component.spec.ts @@ -0,0 +1,59 @@ +// #docregion +// #docregion activatedroute +import { ActivatedRoute } from '@angular/router'; + +// #enddocregion activatedroute +import { Observable } from 'rxjs/Rx'; + +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 { + name: 'phone xyz', + snippet: '', + images: ['image/url1.png', 'image/url2.png'] + }; +} + +class MockPhone { + get(id: string): Observable { + return Observable.of(xyzPhoneData()); + } +} + +// #docregion activatedroute + +class ActivatedRouteMock { + constructor(public snapshot: any) {} +} + +// #enddocregion activatedroute + +describe('PhoneDetailComponent', () => { + + // #docregion activatedroute + + 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/aio/content/examples/upgrade-phonecat-3-router/ts/app/phone-detail/phone-detail.component.ts b/aio/content/examples/upgrade-phonecat-3-router/ts/app/phone-detail/phone-detail.component.ts new file mode 100644 index 0000000000..048a4104c8 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/app/phone-detail/phone-detail.component.ts @@ -0,0 +1,34 @@ +// #docplaster +// #docregion +declare var angular: angular.IAngularStatic; +import { downgradeComponent } from '@angular/upgrade/static'; +import { Component } from '@angular/core'; + +import { Phone, PhoneData } from '../core/phone/phone.service'; +import { RouteParams } from '../ajs-upgraded-providers'; + +@Component({ + moduleId: module.id, + templateUrl: 'phone-detail.template.html', +}) +export class PhoneDetailComponent { + phone: PhoneData; + mainImageUrl: string; + + constructor(routeParams: RouteParams, phone: Phone) { + phone.get(routeParams['phoneId']).subscribe(phone => { + this.phone = phone; + this.setImage(phone.images[0]); + }); + } + + setImage(imageUrl: string) { + this.mainImageUrl = imageUrl; + } +} + +angular.module('phoneDetail') + .directive( + 'phoneDetail', + downgradeComponent({component: PhoneDetailComponent}) as angular.IDirectiveFactory + ); diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/phone-detail/phone-detail.module.ts b/aio/content/examples/upgrade-phonecat-3-router/ts/app/phone-detail/phone-detail.module.ts new file mode 100644 index 0000000000..fd7cb3b920 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/app/phone-detail/phone-detail.module.ts @@ -0,0 +1,7 @@ +'use strict'; + +// Define the `phoneDetail` module +angular.module('phoneDetail', [ + 'ngRoute', + 'core.phone' +]); diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/phone-detail/phone-detail.template.html b/aio/content/examples/upgrade-phonecat-3-router/ts/app/phone-detail/phone-detail.template.html new file mode 100644 index 0000000000..46a96d66c3 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/app/phone-detail/phone-detail.template.html @@ -0,0 +1,120 @@ + +

    +
    + +
    + +

    {{phone.name}}

    + +

    {{phone.description}}

    + +
      +
    • + +
    • +
    + +
      +
    • + Availability and Networks +
      +
      Availability
      +
      {{availability}}
      +
      +
    • +
    • + Battery +
      +
      Type
      +
      {{phone.battery?.type}}
      +
      Talk Time
      +
      {{phone.battery?.talkTime}}
      +
      Standby time (max)
      +
      {{phone.battery?.standbyTime}}
      +
      +
    • +
    • + Storage and Memory +
      +
      RAM
      +
      {{phone.storage?.ram}}
      +
      Internal Storage
      +
      {{phone.storage?.flash}}
      +
      +
    • +
    • + Connectivity +
      +
      Network Support
      +
      {{phone.connectivity?.cell}}
      +
      WiFi
      +
      {{phone.connectivity?.wifi}}
      +
      Bluetooth
      +
      {{phone.connectivity?.bluetooth}}
      +
      Infrared
      +
      {{phone.connectivity?.infrared | checkmark}}
      +
      GPS
      +
      {{phone.connectivity?.gps | checkmark}}
      +
      +
    • +
    • + Android +
      +
      OS Version
      +
      {{phone.android?.os}}
      +
      UI
      +
      {{phone.android?.ui}}
      +
      +
    • +
    • + Size and Weight +
      +
      Dimensions
      +
      {{dim}}
      +
      Weight
      +
      {{phone.sizeAndWeight?.weight}}
      +
      +
    • +
    • + Display +
      +
      Screen size
      +
      {{phone.display?.screenSize}}
      +
      Screen resolution
      +
      {{phone.display?.screenResolution}}
      +
      Touch screen
      +
      {{phone.display?.touchScreen | checkmark}}
      +
      +
    • +
    • + Hardware +
      +
      CPU
      +
      {{phone.hardware?.cpu}}
      +
      USB
      +
      {{phone.hardware?.usb}}
      +
      Audio / headphone jack
      +
      {{phone.hardware?.audioJack}}
      +
      FM Radio
      +
      {{phone.hardware?.fmRadio | checkmark}}
      +
      Accelerometer
      +
      {{phone.hardware?.accelerometer | checkmark}}
      +
      +
    • +
    • + Camera +
      +
      Primary
      +
      {{phone.camera?.primary}}
      +
      Features
      +
      {{phone.camera?.features?.join(', ')}}
      +
      +
    • +
    • + Additional Features +
      {{phone.additionalFeatures}}
      +
    • +
    +
    diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/phone-list/phone-list.component.spec.ts b/aio/content/examples/upgrade-phonecat-3-router/ts/app/phone-list/phone-list.component.spec.ts new file mode 100644 index 0000000000..2bb9d2b62f --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/app/phone-list/phone-list.component.spec.ts @@ -0,0 +1,66 @@ +/* tslint:disable */ +// #docregion +import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { Observable } from 'rxjs/Rx'; +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { SpyLocation } from '@angular/common/testing'; + +import { PhoneListComponent } from './phone-list.component'; +import { Phone, PhoneData } from '../core/phone/phone.service'; + +class ActivatedRouteMock { + constructor(public snapshot: any) {} +} + +class MockPhone { + query(): Observable { + return Observable.of([ + {name: 'Nexus S', snippet: '', images: []}, + {name: 'Motorola DROID', snippet: '', images: []} + ]); + } +} + +let fixture: ComponentFixture; + +describe('PhoneList', () => { + + 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); + }); + + 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'); + }); + + 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/aio/content/examples/upgrade-phonecat-3-router/ts/app/phone-list/phone-list.component.ts b/aio/content/examples/upgrade-phonecat-3-router/ts/app/phone-list/phone-list.component.ts new file mode 100644 index 0000000000..d198774deb --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/app/phone-list/phone-list.component.ts @@ -0,0 +1,61 @@ +// #docregion +declare var angular: angular.IAngularStatic; +import { downgradeComponent } from '@angular/upgrade/static'; + +import { Component } from '@angular/core'; +import { Phone, PhoneData } from '../core/phone/phone.service'; + +@Component({ + moduleId: module.id, + templateUrl: 'phone-list.template.html' +}) +export class PhoneListComponent { + phones: PhoneData[]; + query: string; + orderProp: string; + + constructor(phone: Phone) { + phone.query().subscribe(phones => { + this.phones = phones; + }); + this.orderProp = 'age'; + } + + getPhones(): PhoneData[] { + return this.sortPhones(this.filterPhones(this.phones)); + } + + private filterPhones(phones: PhoneData[]) { + if (phones && this.query) { + return phones.filter(phone => { + let name = phone.name.toLowerCase(); + let snippet = phone.snippet.toLowerCase(); + return name.indexOf(this.query) >= 0 || snippet.indexOf(this.query) >= 0; + }); + } + return phones; + } + + 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; + } +} + +angular.module('phoneList') + .directive( + 'phoneList', + downgradeComponent({component: PhoneListComponent}) as angular.IDirectiveFactory + ); diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/phone-list/phone-list.module.ts b/aio/content/examples/upgrade-phonecat-3-router/ts/app/phone-list/phone-list.module.ts new file mode 100644 index 0000000000..8ade7c5b88 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/app/phone-list/phone-list.module.ts @@ -0,0 +1,4 @@ +'use strict'; + +// Define the `phoneList` module +angular.module('phoneList', ['core.phone']); diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/phone-list/phone-list.template.html b/aio/content/examples/upgrade-phonecat-3-router/ts/app/phone-list/phone-list.template.html new file mode 100644 index 0000000000..2678d384c2 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/app/phone-list/phone-list.template.html @@ -0,0 +1,38 @@ + diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/phones/dell-streak-7.json b/aio/content/examples/upgrade-phonecat-3-router/ts/app/phones/dell-streak-7.json new file mode 100644 index 0000000000..a32eb6ff98 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/app/phones/dell-streak-7.json @@ -0,0 +1,64 @@ +{ + "additionalFeatures": "Front Facing 1.3MP Camera", + "android": { + "os": "Android 2.2", + "ui": "Dell Stage" + }, + "availability": [ + "T-Mobile" + ], + "battery": { + "standbyTime": "", + "talkTime": "", + "type": "Lithium Ion (Li-Ion) (2780 mAH)" + }, + "camera": { + "features": [ + "Flash", + "Video" + ], + "primary": "5.0 megapixels" + }, + "connectivity": { + "bluetooth": "Bluetooth 2.1", + "cell": "T-mobile HSPA+ @ 2100/1900/AWS/850 MHz", + "gps": true, + "infrared": false, + "wifi": "802.11 b/g" + }, + "description": "Introducing Dell\u2122 Streak 7. Share photos, videos and movies together. It\u2019s small enough to carry around, big enough to gather around. Android\u2122 2.2-based tablet with over-the-air upgrade capability for future OS releases. A vibrant 7-inch, multitouch display with full Adobe\u00ae Flash 10.1 pre-installed. Includes a 1.3 MP front-facing camera for face-to-face chats on popular services such as Qik or Skype. 16 GB of internal storage, plus Wi-Fi, Bluetooth and built-in GPS keeps you in touch with the world around you. Connect on your terms. Save with 2-year contract or flexibility with prepaid pay-as-you-go plans", + "display": { + "screenResolution": "WVGA (800 x 480)", + "screenSize": "7.0 inches", + "touchScreen": true + }, + "hardware": { + "accelerometer": true, + "audioJack": "3.5mm", + "cpu": "nVidia Tegra T20", + "fmRadio": false, + "physicalKeyboard": false, + "usb": "USB 2.0" + }, + "id": "dell-streak-7", + "images": [ + "img/phones/dell-streak-7.0.jpg", + "img/phones/dell-streak-7.1.jpg", + "img/phones/dell-streak-7.2.jpg", + "img/phones/dell-streak-7.3.jpg", + "img/phones/dell-streak-7.4.jpg" + ], + "name": "Dell Streak 7", + "sizeAndWeight": { + "dimensions": [ + "199.9 mm (w)", + "119.8 mm (h)", + "12.4 mm (d)" + ], + "weight": "450.0 grams" + }, + "storage": { + "flash": "16000MB", + "ram": "512MB" + } +} diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/phones/motorola-atrix-4g.json b/aio/content/examples/upgrade-phonecat-3-router/ts/app/phones/motorola-atrix-4g.json new file mode 100644 index 0000000000..ccca00e3b2 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/app/phones/motorola-atrix-4g.json @@ -0,0 +1,62 @@ +{ + "additionalFeatures": "", + "android": { + "os": "Android 2.2", + "ui": "MOTOBLUR" + }, + "availability": [ + "AT&T" + ], + "battery": { + "standbyTime": "400 hours", + "talkTime": "5 hours", + "type": "Lithium Ion (Li-Ion) (1930 mAH)" + }, + "camera": { + "features": [ + "" + ], + "primary": "" + }, + "connectivity": { + "bluetooth": "Bluetooth 2.1", + "cell": "WCDMA 850/1900/2100, GSM 850/900/1800/1900, HSDPA 14Mbps (Category 10) Edge Class 12, GPRS Class 12, eCompass, AGPS", + "gps": true, + "infrared": false, + "wifi": "802.11 a/b/g/n" + }, + "description": "MOTOROLA ATRIX 4G gives you dual-core processing power and the revolutionary webtop application. With webtop and a compatible Motorola docking station, sold separately, you can surf the Internet with a full Firefox browser, create and edit docs, or access multimedia on a large screen almost anywhere.", + "display": { + "screenResolution": "QHD (960 x 540)", + "screenSize": "4.0 inches", + "touchScreen": true + }, + "hardware": { + "accelerometer": true, + "audioJack": "3.5mm", + "cpu": "1 GHz Dual Core", + "fmRadio": false, + "physicalKeyboard": false, + "usb": "USB 2.0" + }, + "id": "motorola-atrix-4g", + "images": [ + "img/phones/motorola-atrix-4g.0.jpg", + "img/phones/motorola-atrix-4g.1.jpg", + "img/phones/motorola-atrix-4g.2.jpg", + "img/phones/motorola-atrix-4g.3.jpg" + ], + "name": "MOTOROLA ATRIX\u2122 4G", + "sizeAndWeight": { + "dimensions": [ + "63.5 mm (w)", + "117.75 mm (h)", + "10.95 mm (d)" + ], + "weight": "135.0 grams" + }, + "storage": { + "flash": "", + "ram": "" + } +} diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/phones/motorola-xoom-with-wi-fi.json b/aio/content/examples/upgrade-phonecat-3-router/ts/app/phones/motorola-xoom-with-wi-fi.json new file mode 100644 index 0000000000..4ba9c8d5b5 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/app/phones/motorola-xoom-with-wi-fi.json @@ -0,0 +1,65 @@ +{ + "additionalFeatures": "Sensors: proximity, ambient light, barometer, gyroscope", + "android": { + "os": "Android 3.0", + "ui": "Honeycomb" + }, + "availability": [ + "" + ], + "battery": { + "standbyTime": "336 hours", + "talkTime": "24 hours", + "type": "Other ( mAH)" + }, + "camera": { + "features": [ + "Flash", + "Video" + ], + "primary": "5.0 megapixels" + }, + "connectivity": { + "bluetooth": "Bluetooth 2.1", + "cell": "", + "gps": true, + "infrared": false, + "wifi": "802.11 b/g/n" + }, + "description": "Motorola XOOM with Wi-Fi has a super-powerful dual-core processor and Android\u2122 3.0 (Honeycomb) \u2014 the Android platform designed specifically for tablets. With its 10.1-inch HD widescreen display, you\u2019ll enjoy HD video in a thin, light, powerful and upgradeable tablet.", + "display": { + "screenResolution": "WXGA (1200 x 800)", + "screenSize": "10.1 inches", + "touchScreen": true + }, + "hardware": { + "accelerometer": true, + "audioJack": "3.5mm", + "cpu": "1 GHz Dual Core Tegra 2", + "fmRadio": false, + "physicalKeyboard": false, + "usb": "USB 2.0" + }, + "id": "motorola-xoom-with-wi-fi", + "images": [ + "img/phones/motorola-xoom-with-wi-fi.0.jpg", + "img/phones/motorola-xoom-with-wi-fi.1.jpg", + "img/phones/motorola-xoom-with-wi-fi.2.jpg", + "img/phones/motorola-xoom-with-wi-fi.3.jpg", + "img/phones/motorola-xoom-with-wi-fi.4.jpg", + "img/phones/motorola-xoom-with-wi-fi.5.jpg" + ], + "name": "Motorola XOOM\u2122 with Wi-Fi", + "sizeAndWeight": { + "dimensions": [ + "249.1 mm (w)", + "167.8 mm (h)", + "12.9 mm (d)" + ], + "weight": "708.0 grams" + }, + "storage": { + "flash": "32000MB", + "ram": "1000MB" + } +} diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/phones/motorola-xoom.json b/aio/content/examples/upgrade-phonecat-3-router/ts/app/phones/motorola-xoom.json new file mode 100644 index 0000000000..f0f0c8711d --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/app/phones/motorola-xoom.json @@ -0,0 +1,62 @@ +{ + "additionalFeatures": "Front-facing camera. Sensors: proximity, ambient light, barometer, gyroscope.", + "android": { + "os": "Android 3.0", + "ui": "Android" + }, + "availability": [ + "Verizon" + ], + "battery": { + "standbyTime": "336 hours", + "talkTime": "24 hours", + "type": "Other (3250 mAH)" + }, + "camera": { + "features": [ + "Flash", + "Video" + ], + "primary": "5.0 megapixels" + }, + "connectivity": { + "bluetooth": "Bluetooth 2.1", + "cell": "CDMA 800 /1900 LTE 700, Rx diversity in all bands", + "gps": true, + "infrared": false, + "wifi": "802.11 a/b/g/n" + }, + "description": "MOTOROLA XOOM has a super-powerful dual-core processor and Android\u2122 3.0 (Honeycomb) \u2014 the Android platform designed specifically for tablets. With its 10.1-inch HD widescreen display, you\u2019ll enjoy HD video in a thin, light, powerful and upgradeable tablet.", + "display": { + "screenResolution": "WXGA (1200 x 800)", + "screenSize": "10.1 inches", + "touchScreen": true + }, + "hardware": { + "accelerometer": true, + "audioJack": "3.5mm", + "cpu": "1 GHz Dual Core Tegra 2", + "fmRadio": false, + "physicalKeyboard": false, + "usb": "USB 2.0" + }, + "id": "motorola-xoom", + "images": [ + "img/phones/motorola-xoom.0.jpg", + "img/phones/motorola-xoom.1.jpg", + "img/phones/motorola-xoom.2.jpg" + ], + "name": "MOTOROLA XOOM\u2122", + "sizeAndWeight": { + "dimensions": [ + "249.0 mm (w)", + "168.0 mm (h)", + "12.7 mm (d)" + ], + "weight": "726.0 grams" + }, + "storage": { + "flash": "32000MB", + "ram": "1000MB" + } +} diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/phones/nexus-s.json b/aio/content/examples/upgrade-phonecat-3-router/ts/app/phones/nexus-s.json new file mode 100644 index 0000000000..5e712e2ff8 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/app/phones/nexus-s.json @@ -0,0 +1,69 @@ +{ + "additionalFeatures": "Contour Display, Near Field Communications (NFC), Three-axis gyroscope, Anti-fingerprint display coating, Internet Calling support (VoIP/SIP)", + "android": { + "os": "Android 2.3", + "ui": "Android" + }, + "availability": [ + "M1,", + "O2,", + "Orange,", + "Singtel,", + "StarHub,", + "T-Mobile,", + "Vodafone" + ], + "battery": { + "standbyTime": "428 hours", + "talkTime": "6 hours", + "type": "Lithium Ion (Li-Ion) (1500 mAH)" + }, + "camera": { + "features": [ + "Flash", + "Video" + ], + "primary": "5.0 megapixels" + }, + "connectivity": { + "bluetooth": "Bluetooth 2.1", + "cell": "Quad-band GSM: 850, 900, 1800, 1900\r\nTri-band HSPA: 900, 2100, 1700\r\nHSPA type: HSDPA (7.2Mbps) HSUPA (5.76Mbps)", + "gps": true, + "infrared": false, + "wifi": "802.11 b/g/n" + }, + "description": "Nexus S is the next generation of Nexus devices, co-developed by Google and Samsung. The latest Android platform (Gingerbread), paired with a 1 GHz Hummingbird processor and 16GB of memory, makes Nexus S one of the fastest phones on the market. It comes pre-installed with the best of Google apps and enabled with new and popular features like true multi-tasking, Wi-Fi hotspot, Internet Calling, NFC support, and full web browsing. With this device, users will also be the first to receive software upgrades and new Google mobile apps as soon as they become available. For more details, visit http://www.google.com/nexus.", + "display": { + "screenResolution": "WVGA (800 x 480)", + "screenSize": "4.0 inches", + "touchScreen": true + }, + "hardware": { + "accelerometer": true, + "audioJack": "3.5mm", + "cpu": "1GHz Cortex A8 (Hummingbird) processor", + "fmRadio": false, + "physicalKeyboard": false, + "usb": "USB 2.0" + }, + "id": "nexus-s", + "images": [ + "img/phones/nexus-s.0.jpg", + "img/phones/nexus-s.1.jpg", + "img/phones/nexus-s.2.jpg", + "img/phones/nexus-s.3.jpg" + ], + "name": "Nexus S", + "sizeAndWeight": { + "dimensions": [ + "63.0 mm (w)", + "123.9 mm (h)", + "10.88 mm (d)" + ], + "weight": "129.0 grams" + }, + "storage": { + "flash": "16384MB", + "ram": "512MB" + } +} diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/phones/phones.json b/aio/content/examples/upgrade-phonecat-3-router/ts/app/phones/phones.json new file mode 100644 index 0000000000..339b94fbb5 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/app/phones/phones.json @@ -0,0 +1,155 @@ +[ + { + "age": 0, + "id": "motorola-xoom-with-wi-fi", + "imageUrl": "img/phones/motorola-xoom-with-wi-fi.0.jpg", + "name": "Motorola XOOM\u2122 with Wi-Fi", + "snippet": "The Next, Next Generation\r\n\r\nExperience the future with Motorola XOOM with Wi-Fi, the world's first tablet powered by Android 3.0 (Honeycomb)." + }, + { + "age": 1, + "id": "motorola-xoom", + "imageUrl": "img/phones/motorola-xoom.0.jpg", + "name": "MOTOROLA XOOM\u2122", + "snippet": "The Next, Next Generation\n\nExperience the future with MOTOROLA XOOM, the world's first tablet powered by Android 3.0 (Honeycomb)." + }, + { + "age": 2, + "carrier": "AT&T", + "id": "motorola-atrix-4g", + "imageUrl": "img/phones/motorola-atrix-4g.0.jpg", + "name": "MOTOROLA ATRIX\u2122 4G", + "snippet": "MOTOROLA ATRIX 4G the world's most powerful smartphone." + }, + { + "age": 3, + "id": "dell-streak-7", + "imageUrl": "img/phones/dell-streak-7.0.jpg", + "name": "Dell Streak 7", + "snippet": "Introducing Dell\u2122 Streak 7. Share photos, videos and movies together. It\u2019s small enough to carry around, big enough to gather around." + }, + { + "age": 4, + "carrier": "Cellular South", + "id": "samsung-gem", + "imageUrl": "img/phones/samsung-gem.0.jpg", + "name": "Samsung Gem\u2122", + "snippet": "The Samsung Gem\u2122 brings you everything that you would expect and more from a touch display smart phone \u2013 more apps, more features and a more affordable price." + }, + { + "age": 5, + "carrier": "Dell", + "id": "dell-venue", + "imageUrl": "img/phones/dell-venue.0.jpg", + "name": "Dell Venue", + "snippet": "The Dell Venue; Your Personal Express Lane to Everything" + }, + { + "age": 6, + "carrier": "Best Buy", + "id": "nexus-s", + "imageUrl": "img/phones/nexus-s.0.jpg", + "name": "Nexus S", + "snippet": "Fast just got faster with Nexus S. A pure Google experience, Nexus S is the first phone to run Gingerbread (Android 2.3), the fastest version of Android yet." + }, + { + "age": 7, + "carrier": "Cellular South", + "id": "lg-axis", + "imageUrl": "img/phones/lg-axis.0.jpg", + "name": "LG Axis", + "snippet": "Android Powered, Google Maps Navigation, 5 Customizable Home Screens" + }, + { + "age": 8, + "id": "samsung-galaxy-tab", + "imageUrl": "img/phones/samsung-galaxy-tab.0.jpg", + "name": "Samsung Galaxy Tab\u2122", + "snippet": "Feel Free to Tab\u2122. The Samsung Galaxy Tab\u2122 brings you an ultra-mobile entertainment experience through its 7\u201d display, high-power processor and Adobe\u00ae Flash\u00ae Player compatibility." + }, + { + "age": 9, + "carrier": "Cellular South", + "id": "samsung-showcase-a-galaxy-s-phone", + "imageUrl": "img/phones/samsung-showcase-a-galaxy-s-phone.0.jpg", + "name": "Samsung Showcase\u2122 a Galaxy S\u2122 phone", + "snippet": "The Samsung Showcase\u2122 delivers a cinema quality experience like you\u2019ve never seen before. Its innovative 4\u201d touch display technology provides rich picture brilliance, even outdoors" + }, + { + "age": 10, + "carrier": "Verizon", + "id": "droid-2-global-by-motorola", + "imageUrl": "img/phones/droid-2-global-by-motorola.0.jpg", + "name": "DROID\u2122 2 Global by Motorola", + "snippet": "The first smartphone with a 1.2 GHz processor and global capabilities." + }, + { + "age": 11, + "carrier": "Verizon", + "id": "droid-pro-by-motorola", + "imageUrl": "img/phones/droid-pro-by-motorola.0.jpg", + "name": "DROID\u2122 Pro by Motorola", + "snippet": "The next generation of DOES." + }, + { + "age": 12, + "carrier": "AT&T", + "id": "motorola-bravo-with-motoblur", + "imageUrl": "img/phones/motorola-bravo-with-motoblur.0.jpg", + "name": "MOTOROLA BRAVO\u2122 with MOTOBLUR\u2122", + "snippet": "An experience to cheer about." + }, + { + "age": 13, + "carrier": "T-Mobile", + "id": "motorola-defy-with-motoblur", + "imageUrl": "img/phones/motorola-defy-with-motoblur.0.jpg", + "name": "Motorola DEFY\u2122 with MOTOBLUR\u2122", + "snippet": "Are you ready for everything life throws your way?" + }, + { + "age": 14, + "carrier": "T-Mobile", + "id": "t-mobile-mytouch-4g", + "imageUrl": "img/phones/t-mobile-mytouch-4g.0.jpg", + "name": "T-Mobile myTouch 4G", + "snippet": "The T-Mobile myTouch 4G is a premium smartphone designed to deliver blazing fast 4G speeds so that you can video chat from practically anywhere, with or without Wi-Fi." + }, + { + "age": 15, + "carrier": "US Cellular", + "id": "samsung-mesmerize-a-galaxy-s-phone", + "imageUrl": "img/phones/samsung-mesmerize-a-galaxy-s-phone.0.jpg", + "name": "Samsung Mesmerize\u2122 a Galaxy S\u2122 phone", + "snippet": "The Samsung Mesmerize\u2122 delivers a cinema quality experience like you\u2019ve never seen before. Its innovative 4\u201d touch display technology provides rich picture brilliance,even outdoors" + }, + { + "age": 16, + "carrier": "Sprint", + "id": "sanyo-zio", + "imageUrl": "img/phones/sanyo-zio.0.jpg", + "name": "SANYO ZIO", + "snippet": "The Sanyo Zio by Kyocera is an Android smartphone with a combination of ultra-sleek styling, strong performance and unprecedented value." + }, + { + "age": 17, + "id": "samsung-transform", + "imageUrl": "img/phones/samsung-transform.0.jpg", + "name": "Samsung Transform\u2122", + "snippet": "The Samsung Transform\u2122 brings you a fun way to customize your Android powered touch screen phone to just the way you like it through your favorite themed \u201cSprint ID Service Pack\u201d." + }, + { + "age": 18, + "id": "t-mobile-g2", + "imageUrl": "img/phones/t-mobile-g2.0.jpg", + "name": "T-Mobile G2", + "snippet": "The T-Mobile G2 with Google is the first smartphone built for 4G speeds on T-Mobile's new network. Get the information you need, faster than you ever thought possible." + }, + { + "age": 19, + "id": "motorola-charm-with-motoblur", + "imageUrl": "img/phones/motorola-charm-with-motoblur.0.jpg", + "name": "Motorola CHARM\u2122 with MOTOBLUR\u2122", + "snippet": "Motorola CHARM fits easily in your pocket or palm. Includes MOTOBLUR service." + } +] diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/bs-config.aot.json b/aio/content/examples/upgrade-phonecat-3-router/ts/bs-config.aot.json new file mode 100644 index 0000000000..e59a7403a0 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/bs-config.aot.json @@ -0,0 +1,14 @@ +{ + "open": false, + "logLevel": "silent", + "port": 8080, + "server": { + "baseDir": "aot", + "routes": { + "/node_modules": "node_modules" + }, + "middleware": { + "0": null + } + } +} diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/copy-dist-files.js b/aio/content/examples/upgrade-phonecat-3-router/ts/copy-dist-files.js new file mode 100644 index 0000000000..a857af085c --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/copy-dist-files.js @@ -0,0 +1,25 @@ +// #docregion +var fsExtra = require('fs-extra'); +var resources = [ + // polyfills + 'node_modules/core-js/client/shim.min.js', + 'node_modules/zone.js/dist/zone.min.js', + // css + 'app/app.css', + 'app/app.animations.css', + // images and json files + 'app/img/', + 'app/phones/', + // app files + 'app/app.module.ajs.js', + 'app/app.config.js', + 'app/app.animations.js', + 'app/core/core.module.js', + 'app/core/phone/phone.module.js', + 'app/phone-list/phone-list.module.js', + 'app/phone-detail/phone-detail.module.js' +]; +resources.map(function(sourcePath) { + var destPath = `aot/${sourcePath}`; + fsExtra.copySync(sourcePath, destPath); +}); diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/example-config.json b/aio/content/examples/upgrade-phonecat-3-router/ts/example-config.json new file mode 100644 index 0000000000..401c14f835 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/example-config.json @@ -0,0 +1,5 @@ +{ + "build": "build:upgrade", + "run": "serve:upgrade", + "unittesting": true +} diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/index.html b/aio/content/examples/upgrade-phonecat-3-router/ts/index.html new file mode 100644 index 0000000000..572c80d315 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/index.html @@ -0,0 +1,44 @@ + + + + + + + + + Google Phone Gallery + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/rollup-config.js b/aio/content/examples/upgrade-phonecat-3-router/ts/rollup-config.js new file mode 100644 index 0000000000..aeb227689c --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/rollup-config.js @@ -0,0 +1,21 @@ +// #docregion +import rollup from 'rollup' +import nodeResolve from 'rollup-plugin-node-resolve' +import commonjs from 'rollup-plugin-commonjs'; +import uglify from 'rollup-plugin-uglify' + +//paths are relative to the execution path +export default { + entry: 'app/main-aot.js', + dest: 'aot/dist/build.js', // output a single application bundle + sourceMap: true, + sourceMapFile: 'aot/dist/build.js.map', + format: 'iife', + plugins: [ + nodeResolve({jsnext: true, module: true}), + commonjs({ + include: ['node_modules/rxjs/**'] + }), + uglify() + ] +} diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/systemjs.config.1.js b/aio/content/examples/upgrade-phonecat-3-router/ts/systemjs.config.1.js new file mode 100644 index 0000000000..b801d42bad --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/systemjs.config.1.js @@ -0,0 +1,48 @@ +/** + * System configuration for Angular samples + * Adjust as necessary for your application needs. + */ +(function (global) { + // #docregion paths + 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', + '@angular/upgrade/static': 'npm:@angular/upgrade/bundles/upgrade-static.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/aio/content/examples/upgrade-phonecat-3-router/ts/tsconfig-aot.json b/aio/content/examples/upgrade-phonecat-3-router/ts/tsconfig-aot.json new file mode 100644 index 0000000000..58f9de3309 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/tsconfig-aot.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + "target": "es5", + "module": "es2015", + "moduleResolution": "node", + "sourceMap": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "lib": ["es2015", "dom"], + "removeComments": false, + "noImplicitAny": true, + "suppressImplicitAnyIndexErrors": true, + "typeRoots": [ + "../../node_modules/@types/" + ] + }, + + "files": [ + "app/app.module.ts", + "app/main-aot.ts" + ], + + "angularCompilerOptions": { + "genDir": "aot", + "skipMetadataEmit" : true + } +} diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/tsconfig.json b/aio/content/examples/upgrade-phonecat-3-router/ts/tsconfig.json new file mode 100644 index 0000000000..f267800f14 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-3-router/ts/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "target": "es5", + "module": "commonjs", + "moduleResolution": "node", + "sourceMap": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "lib": [ "es2015", "dom" ], + "noImplicitAny": true, + "suppressImplicitAnyIndexErrors": true, + "typeRoots": [ + "../../node_modules/@types/" + ] + }, + "compileOnSave": true, + "exclude": [ + "node_modules/*", + "**/*-aot.ts" + ] +} diff --git a/aio/content/examples/upgrade-phonecat-4-final/README.md b/aio/content/examples/upgrade-phonecat-4-final/README.md new file mode 100644 index 0000000000..7448da44e6 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-4-final/README.md @@ -0,0 +1,24 @@ +This is the Angular Phonecat application adjusted to fit our boilerplate project +structure. + +The following changes from vanilla Phonecat are applied: + +* Karma config for unit tests is in karma.conf.ng1.js because the boilerplate + Karma config is not compatible with the way tests in this project need to be run. + The shell script run-unit-tests.sh can be used to run the unit tests. +* E2E tests have been moved to the parent directory, where `run-e2e-tests` can + discover and run them along with all the other examples. +* Most of the phone JSON and image data removed in the interest of keeping + repo weight down. Keeping enough to retain testability of the app. + +## Running the app + +Start like any example + + npm run start + +## Running E2E tests + +Like for any example (at the project root): + + gulp run-e2e-tests --filter=phonecat-3 diff --git a/aio/content/examples/upgrade-phonecat-4-final/e2e-spec.ts b/aio/content/examples/upgrade-phonecat-4-final/e2e-spec.ts new file mode 100644 index 0000000000..6f47c54d02 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-4-final/e2e-spec.ts @@ -0,0 +1,109 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by } from 'protractor'; + +// Angular E2E Testing Guide: +// https://docs.angularjs.org/guide/e2e-testing + +describe('PhoneCat Application', function() { + + // #docregion redirect + it('should redirect `index.html` to `index.html#!/phones', function() { + browser.get('index.html'); + browser.waitForAngular(); + browser.getCurrentUrl().then(function(url: string) { + expect(url.endsWith('/phones')).toBe(true); + }); + }); + // #enddocregion redirect + + describe('View: Phone list', function() { + + beforeEach(function() { + browser.get('index.html#!/phones'); + }); + + it('should filter the phone list as a user types into the search box', function() { + let phoneList = element.all(by.css('.phones li')); + let query = element(by.css('input')); + + expect(phoneList.count()).toBe(20); + + query.sendKeys('nexus'); + expect(phoneList.count()).toBe(1); + + query.clear(); + query.sendKeys('motorola'); + expect(phoneList.count()).toBe(8); + }); + + it('should be possible to control phone order via the drop-down menu', function() { + let queryField = element(by.css('input')); + let orderSelect = element(by.css('select')); + let nameOption = orderSelect.element(by.css('option[value="name"]')); + let phoneNameColumn = element.all(by.css('.phones .name')); + + function getNames() { + return phoneNameColumn.map(function(elem) { + return elem.getText(); + }); + } + + queryField.sendKeys('tablet'); // Let's narrow the dataset to make the assertions shorter + + expect(getNames()).toEqual([ + 'Motorola XOOM\u2122 with Wi-Fi', + 'MOTOROLA XOOM\u2122' + ]); + + nameOption.click(); + + expect(getNames()).toEqual([ + 'MOTOROLA XOOM\u2122', + 'Motorola XOOM\u2122 with Wi-Fi' + ]); + }); + + // #docregion links + it('should render phone specific links', function() { + let query = element(by.css('input')); + query.sendKeys('nexus'); + element.all(by.css('.phones li a')).first().click(); + browser.getCurrentUrl().then(function(url: string) { + expect(url.endsWith('/phones/nexus-s')).toBe(true); + }); + }); + // #enddocregion links + + }); + + describe('View: Phone detail', function() { + + beforeEach(function() { + browser.get('index.html#!/phones/nexus-s'); + }); + + it('should display the `nexus-s` page', function() { + expect(element(by.css('h1')).getText()).toBe('Nexus S'); + }); + + it('should display the first phone image as the main phone image', function() { + let mainImage = element(by.css('img.phone.selected')); + + expect(mainImage.getAttribute('src')).toMatch(/img\/phones\/nexus-s.0.jpg/); + }); + + it('should swap the main image when clicking on a thumbnail image', function() { + let mainImage = element(by.css('img.phone.selected')); + let thumbnails = element.all(by.css('.phone-thumbs img')); + + thumbnails.get(2).click(); + expect(mainImage.getAttribute('src')).toMatch(/img\/phones\/nexus-s.2.jpg/); + + thumbnails.get(0).click(); + expect(mainImage.getAttribute('src')).toMatch(/img\/phones\/nexus-s.0.jpg/); + }); + + }); + +}); diff --git a/aio/content/examples/upgrade-phonecat-4-final/ts/app/app-routing.module.ts b/aio/content/examples/upgrade-phonecat-4-final/ts/app/app-routing.module.ts new file mode 100644 index 0000000000..f64d82e253 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-4-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/aio/content/examples/upgrade-phonecat-4-final/ts/app/app.component.ts b/aio/content/examples/upgrade-phonecat-4-final/ts/app/app.component.ts new file mode 100644 index 0000000000..c476614121 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-4-final/ts/app/app.component.ts @@ -0,0 +1,8 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'phonecat-app', + template: '' +}) +export class AppComponent { } diff --git a/aio/content/examples/upgrade-phonecat-4-final/ts/app/app.css b/aio/content/examples/upgrade-phonecat-4-final/ts/app/app.css new file mode 100644 index 0000000000..f4b45b02a5 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-4-final/ts/app/app.css @@ -0,0 +1,93 @@ +body { + padding: 20px; +} + +h1 { + border-bottom: 1px solid gray; + margin-top: 0; +} + +/* View: Phone list */ +.phones { + list-style: none; +} + +.phones li { + clear: both; + height: 115px; + padding-top: 15px; +} + +.thumb { + float: left; + height: 100px; + margin: -0.5em 1em 1.5em 0; + padding-bottom: 1em; + width: 100px; +} + +/* View: Phone detail */ +.phone { + background-color: white; + display: none; + float: left; + height: 400px; + margin-bottom: 2em; + margin-right: 3em; + padding: 2em; + width: 400px; +} + +.phone:first-child { + display: block; +} + +.phone-images { + background-color: white; + float: left; + height: 450px; + overflow: hidden; + position: relative; + width: 450px; +} + +.phone-thumbs { + list-style: none; + margin: 0; +} + +.phone-thumbs img { + height: 100px; + padding: 1em; + width: 100px; +} + +.phone-thumbs li { + background-color: white; + border: 1px solid black; + cursor: pointer; + display: inline-block; + margin: 1em; +} + +.specs { + clear: both; + list-style: none; + margin: 0; + padding: 0; +} + +.specs dt { + font-weight: bold; +} + +.specs > li { + display: inline-block; + vertical-align: top; + width: 200px; +} + +.specs > li > span { + font-size: 1.2em; + font-weight: bold; +} diff --git a/aio/content/examples/upgrade-phonecat-4-final/ts/app/app.module.ts b/aio/content/examples/upgrade-phonecat-4-final/ts/app/app.module.ts new file mode 100644 index 0000000000..607ecab8c9 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-4-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/aio/content/examples/upgrade-phonecat-4-final/ts/app/core/checkmark/checkmark.pipe.spec.ts b/aio/content/examples/upgrade-phonecat-4-final/ts/app/core/checkmark/checkmark.pipe.spec.ts new file mode 100644 index 0000000000..75150500a6 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-4-final/ts/app/core/checkmark/checkmark.pipe.spec.ts @@ -0,0 +1,10 @@ +import { CheckmarkPipe } from './checkmark.pipe'; + +describe('CheckmarkPipe', function() { + + 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/aio/content/examples/upgrade-phonecat-4-final/ts/app/core/checkmark/checkmark.pipe.ts b/aio/content/examples/upgrade-phonecat-4-final/ts/app/core/checkmark/checkmark.pipe.ts new file mode 100644 index 0000000000..888017e15c --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-4-final/ts/app/core/checkmark/checkmark.pipe.ts @@ -0,0 +1,9 @@ +// #docregion +import { Pipe, PipeTransform } from '@angular/core'; + +@Pipe({name: 'checkmark'}) +export class CheckmarkPipe implements PipeTransform { + transform(input: boolean) { + return input ? '\u2713' : '\u2718'; + } +} diff --git a/aio/content/examples/upgrade-phonecat-4-final/ts/app/core/phone/phone.service.spec.ts b/aio/content/examples/upgrade-phonecat-4-final/ts/app/core/phone/phone.service.spec.ts new file mode 100644 index 0000000000..e3a422965b --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-4-final/ts/app/core/phone/phone.service.spec.ts @@ -0,0 +1,49 @@ +import { inject, TestBed } from '@angular/core/testing'; +import { + Http, + BaseRequestOptions, + ResponseOptions, + Response +} from '@angular/http'; +import { MockBackend, MockConnection } from '@angular/http/testing'; +import { Phone, PhoneData } from './phone.service'; + +describe('Phone', function() { + let phone: Phone; + let phonesData: PhoneData[] = [ + {name: 'Phone X', snippet: '', images: []}, + {name: 'Phone Y', snippet: '', images: []}, + {name: 'Phone Z', snippet: '', images: []} + ]; + let mockBackend: MockBackend; + + 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_; + phone = _phone_; + })); + + it('should fetch the phones data from `/phones/phones.json`', (done: () => void) => { + mockBackend.connections.subscribe((conn: MockConnection) => { + conn.mockRespond(new Response(new ResponseOptions({body: JSON.stringify(phonesData)}))); + }); + phone.query().subscribe(result => { + expect(result).toEqual(phonesData); + done(); + }); + }); + +}); diff --git a/aio/content/examples/upgrade-phonecat-4-final/ts/app/core/phone/phone.service.ts b/aio/content/examples/upgrade-phonecat-4-final/ts/app/core/phone/phone.service.ts new file mode 100644 index 0000000000..83a837afb7 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-4-final/ts/app/core/phone/phone.service.ts @@ -0,0 +1,25 @@ +// #docregion +import { Injectable } from '@angular/core'; +import { Http, Response } from '@angular/http'; +import { Observable } from 'rxjs/Rx'; + +import 'rxjs/add/operator/map'; + +export interface PhoneData { + name: string; + snippet: string; + images: string[]; +} + +@Injectable() +export class Phone { + constructor(private http: Http) { } + query(): Observable { + return this.http.get(`phones/phones.json`) + .map((res: Response) => res.json()); + } + get(id: string): Observable { + return this.http.get(`phones/${id}.json`) + .map((res: Response) => res.json()); + } +} diff --git a/aio/content/examples/upgrade-phonecat-4-final/ts/app/img/.gitkeep b/aio/content/examples/upgrade-phonecat-4-final/ts/app/img/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/dell-streak-7.0.jpg b/aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/dell-streak-7.0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7ce0dce4ee9edf6d1562f9123f0e51fc46310b06 GIT binary patch literal 23086 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 literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/dell-streak-7.1.jpg b/aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/dell-streak-7.1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ed8cad89fba49d45de5b2151c351ea025399a205 GIT binary patch literal 23269 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 literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/dell-streak-7.2.jpg b/aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/dell-streak-7.2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c83529e0f9c89184965b79f2e81af72ce753451f GIT binary patch literal 4686 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 CD!YFG literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/dell-streak-7.3.jpg b/aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/dell-streak-7.3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cd2c30280da82d541b2adc803181a105935d4e59 GIT binary patch literal 28319 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 ThO9d62%Tuj|MLH3_%r!Gua%9E literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/droid-2-global-by-motorola.0.jpg b/aio/content/examples/upgrade-phonecat-4-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/aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/droid-pro-by-motorola.0.jpg b/aio/content/examples/upgrade-phonecat-4-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/aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/lg-axis.0.jpg b/aio/content/examples/upgrade-phonecat-4-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* 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 E0Ae(9U;qFB literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/motorola-atrix-4g.0.jpg b/aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/motorola-atrix-4g.0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2446159e937d05495e0888f84945457e51ab11a0 GIT binary patch literal 23174 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 D3#U&K literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/motorola-atrix-4g.1.jpg b/aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/motorola-atrix-4g.1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..867f207459f390459062fe382957c905a7c4fee1 GIT binary patch literal 16530 zcmb7rbyOV9*XEER84@f6cY=iA4ugl_K?aAQ;l&x;1`m?p3>GBFKyY`rKyU~?xH}B) z4$JTC?m4@E?0(-{UFX*6uIjqCtLv0J_o>I}$7R6lPcrf{05miJ0PX1lJk9|m0l;U^ z{u7@9`cr(4@%%YD`tw&H&uP`yOao)Vf#=*nE#C%Qk8V{dDfBqpKfl~S)9<-$0NX-8rRvp**te7 z_k>P0dG5GY%PcA>gzpqr+iu$bgjCF3qS{ue%YZtI`8(gG+8i5Cy{W9W+H~J-{QfM* z&J|l+J4Dg?un>vkloxL~4KZM;9 z?SQjRIQ)OQS-n*!?)Z?Id5YFW6Zzxy@(>0-n@BbjKbqI_Rx}h85vDW`NvhVrE2(RQ z_GWMG5NlXRQ?tz3w!A`>@2}}|qxYVxznG?f1nBG_BiORXCZzS02&F|Ll3(gl^^q)Z z*5gG>P)cA3j^d%=y~g`jf;hB@&oy20Gjkd7Tm(^*EssYw;@3)sC)PP*8+Jdgt)}nz zLbFRA&?>J+XFX6A)iO;JIX|K<{0PXG7>K&j^)+Sgn~j>KcAKKQ&8_!Z)U|pJf(P&r$1a0P(8@qWW3= zFHj!X7$rW^#vkFyi?!yYjQSm`@3bl}9INb9=}V{i@~}9>CFot9Jx_zqA6x~+{wr6? zN*U_N8m^cqF|%!hq|XJVcygGS49=XgA71vXVU}fDMVgmaeH36XidY+=NN@X0Ra`Y? zu#q$IyFx2BqZ{($*T$1>`%=?uO(RMx1Rpw!waZ&h2H*+En!Q(I^HKbvWqH5p;K-m5L>Iohsse-V?ra-ismV<*(FM|lVE3I-DHN$4 zDf6s-pU52F&q_Og({g_KdhAkBLL?H%2yA=4Fv%a5#y}HPUsKf>8Sh;({Aa3;4I~Ce z1rQ_o#BRNde^3OzwY6t53 z_MnEy%uYSS3hiMLo?zu|^pa4;3&ajlTv<0mNZta<_jyeY`D~rZNXgm8Ya;9=7MnTI z&fEz6OV=|qCJAEZzYW*v?ji98DFvU&uD)ol#vf<68V>q|bCEpi()b&K9MO=%s;sU> zd=PuTPWKOPg6DUqTQ*tI%bIlHL3=}qU2H-^Q<5nV-AQUy1g;=(ey*ABU!jSF&JpnO zs;bV~#aBo|FzLC4K;mw^aZ_{!r`iG)E%7y!#cQD%7<)ubDSCks&d3*jA~zJ@$Z5?z z$WJiOTG9MkGycl~^8XkB!Lzn?0oy?PU2?gI;ON9K>GP|3gnGcp2e4N~oF7_$9~kC5qN}bj zY2?bsr?jiqSk_ppyE6|6qY=n=bHl~yVG_1+V`=$S@7Vb;AuyY?H}Z)M*Gt;$PfoWG zMxZyD(KJnm;unxA*Cou(wiSbqeqqye`sNPDek35qFk~cHiDcT)!VnMXjk&He+<< z=mqF1MRff$xxA3Q!AC&%{+*lVR5dPi5Vs@6Hh0LH9(ft=W#Lu5fGyA2qso%1k1C8- zcEA~oqPJ+HGq|Q_$Mp5juHG!F+(uz4`;EHw7Ni+?;s+@k#4U0cR`mQlU?XKE>G|-i zwAp9BC5v|+oL|>C{w}{XqzeK;LkFw<5ujgx1aMso())22a^Tk=7P{y6 zzAr-2)lDg{WlsH0+g#W{nk|$Ncrh!&@R|(=aKsv|)Ib z>dr*+_RW`lCLc#qKKxPDy5094)P|aIjsf=W6SF-{g3oHI9oOzEPC7w%;o(7AqnfgL zOb9WueF%WYy_TQiK0Gn4U^nv5nyB&8l08mR+}a>Z`aLpq(#xNyUAs$+N)7Lb|KuHA zM*<1Y74wSQvn*me;bWW=7*-})9%*}Q=117kG zRUFYi9h%j;Cl~n(a?K7GOH1BtVTIXU%R)Hz-C`l{y`wf67EKZ175|K18W?!yRexri z5P)W{^9y~F`y1sb7MO7kMuRlJ*!x^q|657Hr*-&_E^7mAulR?v#zfT+$z9YnydR~z zcgMN+E0aDyhrm;9nmqJiVi>oy#DVH7a@Ct`Atp5G``6{fs@1T0l-Cqtp|t6(m?)RT zJ33H4;hV_5Q>fcHv)$?=z;cM{!fCvGu4pSS~k&Lk_#N^c>9GJOUy!y=?e!MrW1QqsB^{VtDtD4!1}c#b~~GGRGI1n7X1> za21EWJ2~->3OVp?EmR$ERJ-nES!10wAJz74l>2b$`HtA>re%RlR9-9iyV$UvZLPV% zRf&_Wt3QTEj)~Rh;qv(n8lQ0U+&@hwUT%8wBO)FF z!EC%vmhw~%v;yQQen(h#Jr8P)39m2;3v93u@A~OWyoaE{T9vF1>x6T)AeA1az(Cn- zGe;^&QoqYYky--2MHY?t|j`_-stZ_OoEUQj1a&7uBfrt=WYovqp~cC_$q8^ zQ&Ao`8WsByvK*i_PLv{SZ`5^JJ=vTD7X5M3AvaGMOwWeybDFM!uT{H02ptvrIG9rp zlN*$Et((ipjy=@D_?7EyLW*VoS&sf13;tchR=bE}UJ~iF&;6TkArx#iHpI1m_NVMeH{SG6hkS z>}39tIz*irVKqWTbUQc9 zIuU8?5^GWr`wzFTB$}C4+FNz+SooHQcf`+%<&nC#fiwXa$0)hu1!#hn?H@O3m5kE>~+$g@z^Utpg7o-nHYQbu7! z@K-D*<**Ly#t`)}^~&VeKuJ2g7vha)R;*X;8;qC;b8|hbVC$dalB1ppdn>)~_cdM7 z{Uh*5d)7;EwS$GU|H8aC#;AE>zh3H%?h88QRlC7fwVl;TOU#NEmdGg+Wf$vtEe7b? ztz@pPY{km!=13NU5VRtFbmEQWT|pCFf^1~Fc)R4cf);#i30#vf9(=L5f(K8Yl=e&O z1;zIAfPkfspou8Dy;mqpp|2iO+`O)41P=QTb&$$D<+&!ht#@Z7=)8+~)?3x#xE9=8w3~#RQt5=H=A<5~SdBAg1Yk zwC$g{nX(T8iSgrepVgL?VbO`{_X@g^;<*>l5hv5?Nlilzb}@RV=<#b3J);%E^sBGm zlRwUy94N8nCg4+X^-C$Cn`{PhNJ*hfefVz*i5`|t)rR$DUSj<1XQLeCheJpa`N>Oj z@zjY$>-C5&!53Q)>Jzz7DZ;vYYqg*xf%BRnPPp0c1JHq|mPq>f zpV@oSJj-2+d{csIWgFFsY%zz^Xr5)R$VUK6aQKL--tI1?nps&X4)4*pp9jg@ax8uj9`pqUC!IE&U1(iS)1csMI8ea1$Q^UGoKIgbAVNiLa90 zThUPrBXT7uzIY@OE)mQZ@}JPv;P-P)`G!wqRfo(|9RbOY1v~u!=ZwbZn)Z>tqYvZ` z-PYmei9rUAK2a;rk}h3rU^m&q>Cqayp)JK%@!h&sIY{kGs|7*ioUK&HYbtDdZwO=G zXU8i+5Bysb)h*HZJGdP?ukX(MwXExpeaB880h^WFf-z1M)OJnHkR4BfPqbuHZhObX zO+G={FP#Hdv-lIKF_OYECziNYhthDWqT`Ehd+Omzy7E*4GVqnh?b9qA*E{$4}V(D%Alha zn6$k|bvvuc;t>FTb zefD3#A^*o}{|P(6fYt1uSuGCge=KBYbKX}QFAt0gljs#^$5i)8vq|qX$OJpu(#&)aVQW}t*Fws$@P#RmEs$VJ0OlHp6+f#YrR&L&QjDeKv^kjoIn`#TLy(w$4Ke!0^yxe6fRof-$Y~RT2SQD zVxi;9iT&osx<%lXFJZyZX(a9QX$^5B*)a`_*Ts@@@^za;9D_ zi}6i;T-*FdR5?14*we7EX0x1}RwGKujOuUxr9rK`G<_x&aMZi?SZCxKv&-s|>AkR2 z->yp<538y=w<;x1Xw2~UpBn@4yB_qo6T>p}t58Q|GtStoZ*Jyi(_j@LfSIH7Hzn-1 z4Pt=U4@U-C7tKl*xKw<2Yoc2ZH`Qeowt6zYN_AF8@KNfWP)E$lhs3=sS!ke=f?h$5 znNMS3F0=;v;ULT8<-7N7S0XU_R5sXlsQz?~YfsTy^12yxb9NK4KbD0KbdB77Br+`0J-jOX41`P*R{Z$y&lyj13xVux&R0Au(U%su9l7-o zt<9}`Q!~H&b=|&(#9^InW0Ng}dLIR6w`t5)FYhz?>*wC01w#Hc^O|E?8L*7%Rttg2 z&obh8@e>ygJItSov?`EJV-kGE^|G=Mb=EJ9{6QP-*^&N?-fXsFdp2s;2x621pQ7rL zZJgCsEC1i=QnrowzoNJ_^A^3u;oqxgefv7S7z`ff2R49=ooAJPI?FOMAd|q>R~04- zkAO*Fq=+oCuJI>h)r>jsaV@taPy4zF+7TcCf*=scKJ(V_`NeuskgsHr%aUzy2YLP% zuL-=_BN0<^s?u#eN566$GXDrzwAv3i?;_2s9{OeCUXZg>(?jL1kW=!9+^3jkZCYO&1peAL$27||-csMbaf?WRfD z3Sw=+{@~_YlAg0nmoJzj>prv9V6PXqETl-1uUQH9wRgj4JPMqpr*~HOL8=OJJhG<# z)qA3DCV=6;sqvq?N=kUF;8C)}wL+a*Rg(fcPtCE!9KWqE`Q@cjmKj|6y*4}rx7pgQiF9G`3*+UVNy5J& zE^ZMyJzb(on#LqYhk|I2fEWXjtmJ5CWMplB<3d6~r)Qj^+)9x8WsR~ZCn>4h*H;O; zdc%6uaD#DFX&pK}f4KC)D*wH(;*>IlTStU+#(jSW)4)vDr`zDy=Vl9Q=}nbwV|S(? zh&p|?MO*ZUR>uV8g|V*BWM3JocWIIBObPY~uuGvg**tguH%O$nV~4zv_C^l|AMQTr zclfZ?pj4a3_vdVURL!!hf7U9auSoxFjqD0XZthB5>)(LC5e`}6A&FwSK}qxn zO%&?mgr4LIzvaV=p5tTi!oTNa`of$AbF%I-><*G%xz%*ZOJ^64sz3-eDG0b~;yRZ% zMS|9&WerXW!RIyCg4~K{j{wiJD<5s|zEUwN5l2dkvT=j2>C{=|PiwsF+T8`&60ELE z%&Ix^WHgbAa^sS|bM$5QEz)z5T3b>BT|L$x$5?Wtr0!4$89BgyTGhB~D)PgCZR;F_ zYKWjDrsHpYY{tDuSMsM4Y1kO&r8%5TR;aZ+HNp=w2^7)}Nau4*W<%KWMm`}oe`x6@ zHJiZ^T6rx(yRE-Te?GhoaI>0lIrp|1=b2Y@=-y^F53K>PB;}WBLcYWbJW(xDOBi zo_Kky!$)V-@qjl&B8Q78Y}p^y#{yn!aH#(y$ZJL{D`8<;N+t7g>k;5;*^+lt`Q%A> zT`gVtbLCi%l|I2gLh#^K`EKqD=rvRDC+1h4_Axd}=srlnog0sLjeD!@Uy(gTix+!V z`L}baG+43A;>?>n=@&2zaIm`H%c}MdOR3{r^|yqOYTkFy1D@D}~BcrBs-e|JyuRPOm$vsSomZf!+Re7OXD_BCM4`O08|`uO6`rRO81MK7tA}4~K_hEDVsR`KlnJ$CnbsRwfue7Sb zzyz+pkc}fLuDf5mCF7J*UUI+*s>z zn?E}u7eXaBi)+wJU&@ZL%iO|Z5v)jJWblb(zLq~xh>_x%1ZmrncX6^FPIByuWgSYd z*qJ2L)TLsi(-a!w3!wiR(J+TdDS9(VZ8jpry>dX{I4(G7Y9C)hxiSz0JDt%y<}?kT zokG;6o#{F?knF=*bmq1ACPJV-U*^oD6=-r0xrN{q0xp?(tRTQk#*86UiENvwX2IcE zA}Msq9{MiUV>JXzqh*U;4x;7n2fF!~Qj>?bM}&E=uTA!V%C4!w_HR3tCk3P9SJ0uy zEI&I&x!>Akz+-bKYztdP73nR#$V{AbaGlA>R|0#LmDgRgG}p~KpxOkx&gVO#LPb8a z>m}w3uDH&!ZjKpz*agk~P$~ua2p510u-B7GGL$F`o2A`WR>3An*daFc!wjt@I&m~l zI$xNBo*rt@*|j*~&?KPGA}<7ngV!vt{X4?5j49on#vBLEAF=C>%{tW zk=U<|af$X{V`7&`Z);Yj=GWHBe#p+y9yQ|Js;FbxP`s+vm&xZ}#IQ=hPS^A(Ev5I6 zR$RtiXxGNU9)~4%gU>Ac%jfMw5647=s(KI?3Yr@8Sp}}rQmVM6FZJQM<4t@z-6_k& zxcmDQndA)YvIP;~2YI!BPO57_J3@97A3-cuR&T#O;+YxI?hD*-^VNnkpSyt-(@xOvTJW6S-KQCIA zpZk43PXNr6<&q8Lq)SSD<{+>W57(=q3agw&K@F@C>zB&Yrf)hSo+rL|y`E@(BDKR| ztE-Foi1Vy7De;^hbH2K|gi)>xJbZFLxo&QaJ8+mJUZ5$y6C+03GS6 zAa7X1o5*r@HWrP=tv2x&-2=NDFeHQ42P~cWOj%~MgUv;WPJqXC7ArbhJ)#~kJwIha zzD6H=kOFUIA#Co;hN4i`?5_A4O3Fq&zx;obY-5mHc$jxnR$rKpvqG--RSAFeNuj+~~-Q2bZn63uAikrN0@*v4s3MyCh&gJgN#u&nG6 zK;RZi_VN+HTZwkdYTi4fXA3^< z&yBQeyomMz2-@ZjpaXsUqkm%DeWU6zZR};f@-VQk@29E#^R%!O;D}#;aCnwhT;s`~ zVB{LWWWm`>?~>ZE=_}V0tnYfF3Nqb&PTSt%dm=6wN^pM1OXw>39mWI@}ebQFREH zPiaorDUz19aj8%lIjJ~>FtrJS0q$|@gbWwqC=31bRD8hpcd^9po3u_QE}iw&F-X4; zT1%l5-W-$spM>2?ruYZU*eLa&A9BkmHe~_;;G_8x$BXsVwBP!UMq2WDEVT7jJrW9% z@|q-IFS-a|fTy1m&uR-Ja6ZTU7{5MTaX8pA@Js zG&_fyHSu+GxQPeTPO@hZc4D5lW8O;O&yh)k<0#JF19A+LXp4>V(zf6 zh?mBqr8I=HwoOpHGF_NfhR@!vuz!{NZT%uDuyG%s#?M#&70X`A#}}DZ{hM$duf8Gg zHRcKYslZ z;Jys8ihS9jOsco9?dXU&U`Y79v+PF{u*xYI3fOxVQ*i6>Id$3QMp=Fl#9~@hggrNa zjlLpLH#Ce)#4r+V82hj`CLmy+Ag^+fH4;Con_sbV{E4UD0krcS8ih;EmwOrccNh^b z=w#lZQ(~ceW$U?bP+k)``>Xg@olZ$4BdMj!7;aVw_4gQQ--1c?VQr(YMcGZt%c!vY zWmBJn7r+lRet?q&=q&`wf=Ewzt3__4ycE*&w&QsFkdN)?Hr#EXDZ)X&&}QPmaU(D7 z8t2A^ZX=+Dm^!qx#+=2#KKs!5a&E}UL%;B^QdxcIJk%&E8L7Q};I6-8FW}iGGe1#k zDK4}8zDaw>lSKcnZ3mKiA|!du;95|h?l>MX=R#hBX?vC60eEiw?_pbr7~_(4YnLglj1IQ&m;evXAJ@40PM zeA6?oxXOx4j3k{^!8FA8yu3kes<9fhXq|$N#y89_C!=)p5@%aUK9#S z@iP+fA#@ZLm%pJ(Yn|_H%Xnf?n4W{8my7WC5-Uk|&LjKQIKmdJe{IrvCoOR;A^YNW zi`B?wEru8-{eZuvZRwO9k3TIhw4zX695w+<9ip~6WF8i+VdhPLC6oxjg&n!ISG<74JvvA0@1k;9nzt3{UK57Sm&m}r-XKb(X- z74e&%DCcH&+%xw}c7=jf!54~Bcy{j}kyPBMd_&tu07TU~U(h=9g;vz}X&~cfL%z#* z+a|d*IU8HsMzFMG3ZFYS2Aoqt7QVdVc4n6wu4-spH>S%r0tR;xPMLjn)O|mEUP(DYc$3JGi z%_)Q$Xp1)5?P>5jh3d#i^!WD#`~Z{Bq=e1Oj+aBRMYE{$i{m+*nXskh!kAJibT7|A zKy+N56D|IWQdalhT60M|Wr9n#_NQ}Q>h|WQm$?;`hFyta&XP1a4FZjcxfGr^0htdY ziTP#PO)CC(f8jBmYi;#wx2$zxH_z@n*goI!74LTsyShBf1zZEKGoPRnhvOlM>-Pb- z6mck$jQIN%95^Q=hR(jfr&^FJB^dwnysnAS*FQ$)j$70mT9JxUj{u{@;4(R(oGxIhnHuf(N|Xws6Z?jD3fojyZe7(z=_=^M}OD%ieOX3LTKrK}t!3sBaE$p`mrgQL6QZYOcXrW1Q2fnn+|MLgu1|Pt z)Nl#Pcg5e=(ZpgXm|c=z>@3ouLxwwFV%5jU=i)!#Y5EKe3`Ql-aS7RgbabIsSE?RX zAp_9d9JXZ35WJO0^f$*y{K(dD;NCCGdep%?@a$?(X>Pz0!{?x1)1mv*uh*7E9Je#I z-I9^6`eX$wduJo^@*+OSL`Jz4E(=aD+s+7DI>XZ5>FkTcnJpEA(jWX`dhyaji%fw~ z1;5bd&fo~wz9V4@cDOS1q=dgubj?77uAlJA-TlZom0&T?E1mS`p_tyon<=Zp+>u>f zvd>UG9V@acll=JKf1Ls70blzu%RzpIvgQW1Rx69m6WYlY1L_QLZM~dLw34)7#w5>m zli^nkQxpn?t9+};8wP*?%T+efxlj)0rJ?JWV)V-<8Q5qhuvcjA&Zc2GN4?z%^#XS0 z*KC}(6=DbSNJZbbN}12|p$wU?ZJsS}Q@+MMNfxCGb{D(?vF zpx=5$RtcWxV`x~98x+=eZfIM&Wv60*zAd{7^g-JApH=8vyy1RHfthIu0LV?J$8L?a zb-4zqanc0IL&mrp3*zXHxz+|2X$4NFj5bZXqVD2i7dH7WjAI556X#lFzs2J^h<)#} zNCihId<`s>7}9_lGaM_uMP0vqK&h`Nif$Z#!&)miQ59CtvwXQ=H>%H0k1J31{qccPE*N39VE~9$EyjHEJdj` zb=#xzpWC&@{`}!mK3=xNff48w=btE8qHlzJCHYt9*{G5-QiJ?EO%4p zhBGpoFvF`#V(aRN8;-Ar7VUj}KVrgr${qBojUB5+7Kkt|iEIw|@EZ>7mP5zMp!&_QWq2i+pU=ctOvv9* zkQum0$tY;G-cG-40j2|z_MNEjPgS!Dq?l~yjwUd2{bg;p1F>_y;2Oa$&oI#Q$%w93 z-)SWGASKO1eBj!MSfdJ|t3Ty+6v1-#+w(9p)8M$YX8C*lgnde|s#dC&1W zX(J;Yu{+59K$(a02&=RB`{lJ{@ULNnQK~PIISdP`sMh&cm2>L`uF=(AXn1kJ)xeJ3 ze*RWUEB9pVBNx)b5tWA+)_7N^rXoci!=Pa!*5IIHCb+=1rs_65mJs1wDZH8X%lX6h zbdtIIjR}k6fEooT`+?~qcrG1&9D@>$xIOe&lF}JJW3X-c7Zh^hj!_>2@(G99ncc#^ z4O@{nijZii{P4<)uv=vm5sF>Nk$sy2lfDVb`^MStFHc$SEBHPI!$e|{CSP~J62;jB z)>dT8tsWzXKMf+do$nkuzur2pzignVC(;?0n)r7uy-d^eO3w~n>mz94jW{F-BB6gG zDX=9CESv!kG{5qQ9%;RcA^&;o=)|K(Fv(K#_YttKzhxA;U&) z^+{G)mJfL?SHRQwGTb;{DaA!vzV)dn#7v3xEM0DsD5JhaqV1jMnSRAW>PtW(8q%UL z`d0dg2znV+}OcZB|ZNvwaP6UBmm zl61GzK{d9v>-IA$6|!di2#_an{lha(3TA03Okdb8n8m%l*`Ae6g390b>T5)|vSg3; z0%G56iU3o=Z*ceO&ylH(PU9H#q}DmncYXlh4GoBNwzY}F>GlV_k0L-B!lb=;dqUmS zKVv+}(~HjQIA1GEG_qC!?f~&u6BjaH@+Ju4>2Ysa2?;^#z4Ojj5`wp4`Cr4ljP(ye z>;y=Glo0we?upvhz5~|bx?=qbJcUI~VECAY>=lF|*Noal>`idJ=cRTV@Du-ov&j#?u6#zTpF z3)m7rGtIAHlCrFAK4gr%wDWO{$oHz8w~vdsdH25evcU9bb#o7Cz6-}ew|C#PXLQBA zLSaqX(1NO6Q9)iAT*021sl2#2p>)FquycS%%y&X-8 z@J$-ZUi7k-MMlhCVw!>AN5P{;{w& z%4Z3}Li*b#V;}Lgfy^yChu++u$o6k2-f(laXjf!1CgNM|EjtKC79DCwt#C~`a2FKkf!>XxVR#uO!4=|!jyYyfQH;^A@2ujIgWskm_KM}8782&Q{2pAImP0W5U!nF<1Ii_g19` zlUDmR@z^DKNq}pe$=V z`usO7DbCKUl09#A)5uwDebQYCvV+7LcO^fKct($z((O%Xvng#BeY3s)tRA_g&L19x zUEM|V2rwTf>vwg4V#N0XfAdEWRWj3-Vxy#JzCX~JgtI#7|0Gl*kNS^T`B@?pZ6ifYq@ z@|7#9NcwxiOaqp#+=P3p;@Zhh#;l^y5he0QK{z_z#e4Cz%a%&xJs7VY#UPE1#5@P{ z22-rc-#GtP@BSLmBCmJ)?!*PC4PHJ+EBSTyU#(+*%yY3BX@!EY*W7ph^3%C$A542(28K;T% zMp`%*`}D79YCQsW5!#;)f6}KfxCRFL(FBOJ_ZoSABjTt$yQyr?t+CwBc~72eWWS!GRG=lH>wiD9wK4q>nbEvxFXp@&Tyc;%@|QpK1io zI%Ao}lP`ZUmx<(`Fn-ZIT6twjAIH^PTctdusDK-GIAd$(T5&1jT$|+)P^uNo4Q@Z7 z#-s5pJUxVL(AcdC$_O1+Hc*IR&lCXlZeBy5|&NSqZVV$;^%Nx_b2Z<)Trb z{3o`x#$`n7AU0`Hk#(8AcmvYm;+BcSTO$h*1fvFZx&b%RV;k}V<-D!-d^!>MN+PrA zk_xUFc93J7Xo}^iQ~4KHJ?hb**s>qBbOv1TInT@{%3~!J(f)F3cG;D(8^U`kQU855 z2OM-ej9wK8X%pVjSNKPd!<$dZh#mILEgPzR6@!Rp3T|$q5)xUjX07&}Ls$wnf2E$m zb9qR`Y2C!7dr~PU|G3BPWlnlpzf9{;@@7xC@2xUgd!Fr%-EJ)Yp^*3u7_Add2w~y- zip7$jWpS?k`3dUx@$dy#oS>mwR7kE9FL_sqcBL0;=;e@;l)6Y~P}5$#5l3?^VkbiR z{B#UMo$$=-&EBO;(zRhxS)i|hdo(Bwq_vn>W9$AwMfPNodEV=PP#u807j&MXQyfIFM%Ff0R}%5ntO7gn|md)T||0 zUbOCS9a;_fv?=+p=*5<=Z6||8D4L0ZB9TWM==@x$DR<_W>5lTD(tX){rrg3jL|4bG zRSJX8q)b9`(3bmh@71Er%r;Nj4cmcb3$^9SLwwE7z;i6OUD49CAJx?rSbQ5(wA7^Ws0q};6j4{O;TcJReXGJUiNDFq1E$KuCswjuQEYX$@j-)mDJmz| zpGEbCwKe2Eh)ew50I7%HK&lQJV=eUEedJwB9B3v~JDDiskf#Eq*UN>8CAXvw11buF z6?zAgLEw#Yq3s1~nk0RHN*E4qqj7YXP9X7uyyE*^-_sVstc;TxR)o^MJcz5o9UY@`dT(i z2`yECbk{Gv!!UR+TYQ|G$N&53+30qF=mXiAxaog{8J(n!v76C|yGh|4xn*D5oG=YM zXI$hMuU{S{Dz;m6$MO(&q2^fo45!24w|I6G#~+MUY;M{gZ|1A_R^S=upMAgQ#`fu{ zO09bR6nhuIk3%J{ddp#Q7PE0>5V9@h-1QzcZ?RK}Yy7WHS$osbVWMc(4pP?D8|`EC zLjt23?K~M>mS`LBK+7`Et``J)OQj^b>40r{|MMaBQ<66B9kwn-;q#QhY)@EX{@=&C Izdp|V4?Anm`v3p{ literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/motorola-atrix-4g.2.jpg b/aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/motorola-atrix-4g.2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..27d78338c4dff26cb845c749be698678e20e7513 GIT binary patch literal 23788 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 z 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 Wh*WFF(=E}Rj8!i9->x0P5%W*cY@kd4 literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/motorola-bravo-with-motoblur.0.jpg b/aio/content/examples/upgrade-phonecat-4-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

    % 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 literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/motorola-xoom-with-wi-fi.0.jpg b/aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/motorola-xoom-with-wi-fi.0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a6c993291eef92ce1ce2598ad1f2806c16688321 GIT binary patch literal 34430 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%0Ad3q)A}R)id>CM& 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

    f8S@mQhpZZGpk{w}H>uKzPfD9(X6+l7Hv2 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 literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/nexus-s.3.jpg b/aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/nexus-s.3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e51f75b0edcf2f604f9f7e56bbe2cf760ebb1678 GIT binary patch literal 21118 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

    4W^)##Gk_!EY?HG$N03A$kuJk8^ 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

    4W^)##Gk_!EY?HG$N03A$kuJk8^ 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 D74$95 literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/t-mobile-g2.0.jpg b/aio/content/examples/upgrade-phonecat-4-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/aio/content/examples/upgrade-phonecat-4-final/ts/app/main.ts b/aio/content/examples/upgrade-phonecat-4-final/ts/app/main.ts new file mode 100644 index 0000000000..08be7a99ba --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-4-final/ts/app/main.ts @@ -0,0 +1,10 @@ +// #docregion +// #docregion imports +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app.module'; +// #enddocregion imports + +// #docregion bootstrap +platformBrowserDynamic().bootstrapModule(AppModule); +// #enddocregion bootstrap diff --git a/aio/content/examples/upgrade-phonecat-4-final/ts/app/phone-detail/phone-detail.component.spec.ts b/aio/content/examples/upgrade-phonecat-4-final/ts/app/phone-detail/phone-detail.component.spec.ts new file mode 100644 index 0000000000..e3b9143a94 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-4-final/ts/app/phone-detail/phone-detail.component.spec.ts @@ -0,0 +1,59 @@ +// #docregion +// #docregion activatedroute +import { ActivatedRoute } from '@angular/router'; + +// #enddocregion activatedroute +import { Observable } from 'rxjs/Rx'; + +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 { + name: 'phone xyz', + snippet: '', + images: ['image/url1.png', 'image/url2.png'] + }; +} + +class MockPhone { + get(id: string): Observable { + return Observable.of(xyzPhoneData()); + } +} + +// #docregion activatedroute + +class ActivatedRouteMock { + constructor(public snapshot: any) {} +} + +// #enddocregion activatedroute + +describe('PhoneDetailComponent', () => { + + // #docregion activatedroute + + 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/aio/content/examples/upgrade-phonecat-4-final/ts/app/phone-detail/phone-detail.component.ts b/aio/content/examples/upgrade-phonecat-4-final/ts/app/phone-detail/phone-detail.component.ts new file mode 100644 index 0000000000..579dd5601e --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-4-final/ts/app/phone-detail/phone-detail.component.ts @@ -0,0 +1,28 @@ +// #docplaster +// #docregion +import { Component } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; + +import { Phone, PhoneData } from '../core/phone/phone.service'; + +@Component({ + moduleId: module.id, + selector: 'phone-detail', + templateUrl: './phone-detail.template.html' +}) +export class PhoneDetailComponent { + phone: PhoneData; + mainImageUrl: string; + + 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) { + this.mainImageUrl = imageUrl; + } +} diff --git a/aio/content/examples/upgrade-phonecat-4-final/ts/app/phone-detail/phone-detail.template.html b/aio/content/examples/upgrade-phonecat-4-final/ts/app/phone-detail/phone-detail.template.html new file mode 100644 index 0000000000..46a96d66c3 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-4-final/ts/app/phone-detail/phone-detail.template.html @@ -0,0 +1,120 @@ + +

    +
    + +
    + +

    {{phone.name}}

    + +

    {{phone.description}}

    + +
      +
    • + +
    • +
    + +
      +
    • + Availability and Networks +
      +
      Availability
      +
      {{availability}}
      +
      +
    • +
    • + Battery +
      +
      Type
      +
      {{phone.battery?.type}}
      +
      Talk Time
      +
      {{phone.battery?.talkTime}}
      +
      Standby time (max)
      +
      {{phone.battery?.standbyTime}}
      +
      +
    • +
    • + Storage and Memory +
      +
      RAM
      +
      {{phone.storage?.ram}}
      +
      Internal Storage
      +
      {{phone.storage?.flash}}
      +
      +
    • +
    • + Connectivity +
      +
      Network Support
      +
      {{phone.connectivity?.cell}}
      +
      WiFi
      +
      {{phone.connectivity?.wifi}}
      +
      Bluetooth
      +
      {{phone.connectivity?.bluetooth}}
      +
      Infrared
      +
      {{phone.connectivity?.infrared | checkmark}}
      +
      GPS
      +
      {{phone.connectivity?.gps | checkmark}}
      +
      +
    • +
    • + Android +
      +
      OS Version
      +
      {{phone.android?.os}}
      +
      UI
      +
      {{phone.android?.ui}}
      +
      +
    • +
    • + Size and Weight +
      +
      Dimensions
      +
      {{dim}}
      +
      Weight
      +
      {{phone.sizeAndWeight?.weight}}
      +
      +
    • +
    • + Display +
      +
      Screen size
      +
      {{phone.display?.screenSize}}
      +
      Screen resolution
      +
      {{phone.display?.screenResolution}}
      +
      Touch screen
      +
      {{phone.display?.touchScreen | checkmark}}
      +
      +
    • +
    • + Hardware +
      +
      CPU
      +
      {{phone.hardware?.cpu}}
      +
      USB
      +
      {{phone.hardware?.usb}}
      +
      Audio / headphone jack
      +
      {{phone.hardware?.audioJack}}
      +
      FM Radio
      +
      {{phone.hardware?.fmRadio | checkmark}}
      +
      Accelerometer
      +
      {{phone.hardware?.accelerometer | checkmark}}
      +
      +
    • +
    • + Camera +
      +
      Primary
      +
      {{phone.camera?.primary}}
      +
      Features
      +
      {{phone.camera?.features?.join(', ')}}
      +
      +
    • +
    • + Additional Features +
      {{phone.additionalFeatures}}
      +
    • +
    +
    diff --git a/aio/content/examples/upgrade-phonecat-4-final/ts/app/phone-list/phone-list.component.spec.ts b/aio/content/examples/upgrade-phonecat-4-final/ts/app/phone-list/phone-list.component.spec.ts new file mode 100644 index 0000000000..834c93df8f --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-4-final/ts/app/phone-list/phone-list.component.spec.ts @@ -0,0 +1,71 @@ +/* tslint:disable */ +// #docregion routestuff +import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { Observable } from 'rxjs/Rx'; +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { SpyLocation } from '@angular/common/testing'; + +import { PhoneListComponent } from './phone-list.component'; +import { Phone, PhoneData } from '../core/phone/phone.service'; + +// #enddocregion routestuff + +class ActivatedRouteMock { + constructor(public snapshot: any) {} +} + +class MockPhone { + query(): Observable { + return Observable.of([ + {name: 'Nexus S', snippet: '', images: []}, + {name: 'Motorola DROID', snippet: '', images: []} + ]); + } +} + +let fixture: ComponentFixture; + +describe('PhoneList', () => { + + // #docregion routestuff + + 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', () => { + 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'); + }); + + 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/aio/content/examples/upgrade-phonecat-4-final/ts/app/phone-list/phone-list.component.ts b/aio/content/examples/upgrade-phonecat-4-final/ts/app/phone-list/phone-list.component.ts new file mode 100644 index 0000000000..0d9eb07e21 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-4-final/ts/app/phone-list/phone-list.component.ts @@ -0,0 +1,54 @@ +// #docregion +import { Component } from '@angular/core'; + +import { Phone, PhoneData } from '../core/phone/phone.service'; + +@Component({ + moduleId: module.id, + selector: 'phone-list', + templateUrl: './phone-list.template.html', +}) +export class PhoneListComponent { + phones: PhoneData[]; + query: string; + orderProp: string; + + constructor(phone: Phone) { + phone.query().subscribe(phones => { + this.phones = phones; + }); + this.orderProp = 'age'; + } + + getPhones(): PhoneData[] { + return this.sortPhones(this.filterPhones(this.phones)); + } + + private filterPhones(phones: PhoneData[]) { + if (phones && this.query) { + return phones.filter(phone => { + let name = phone.name.toLowerCase(); + let snippet = phone.snippet.toLowerCase(); + return name.indexOf(this.query) >= 0 || snippet.indexOf(this.query) >= 0; + }); + } + return phones; + } + + 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; + } +} diff --git a/aio/content/examples/upgrade-phonecat-4-final/ts/app/phone-list/phone-list.template.html b/aio/content/examples/upgrade-phonecat-4-final/ts/app/phone-list/phone-list.template.html new file mode 100644 index 0000000000..b4a994b297 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-4-final/ts/app/phone-list/phone-list.template.html @@ -0,0 +1,40 @@ + diff --git a/aio/content/examples/upgrade-phonecat-4-final/ts/app/phones/dell-streak-7.json b/aio/content/examples/upgrade-phonecat-4-final/ts/app/phones/dell-streak-7.json new file mode 100644 index 0000000000..a32eb6ff98 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-4-final/ts/app/phones/dell-streak-7.json @@ -0,0 +1,64 @@ +{ + "additionalFeatures": "Front Facing 1.3MP Camera", + "android": { + "os": "Android 2.2", + "ui": "Dell Stage" + }, + "availability": [ + "T-Mobile" + ], + "battery": { + "standbyTime": "", + "talkTime": "", + "type": "Lithium Ion (Li-Ion) (2780 mAH)" + }, + "camera": { + "features": [ + "Flash", + "Video" + ], + "primary": "5.0 megapixels" + }, + "connectivity": { + "bluetooth": "Bluetooth 2.1", + "cell": "T-mobile HSPA+ @ 2100/1900/AWS/850 MHz", + "gps": true, + "infrared": false, + "wifi": "802.11 b/g" + }, + "description": "Introducing Dell\u2122 Streak 7. Share photos, videos and movies together. It\u2019s small enough to carry around, big enough to gather around. Android\u2122 2.2-based tablet with over-the-air upgrade capability for future OS releases. A vibrant 7-inch, multitouch display with full Adobe\u00ae Flash 10.1 pre-installed. Includes a 1.3 MP front-facing camera for face-to-face chats on popular services such as Qik or Skype. 16 GB of internal storage, plus Wi-Fi, Bluetooth and built-in GPS keeps you in touch with the world around you. Connect on your terms. Save with 2-year contract or flexibility with prepaid pay-as-you-go plans", + "display": { + "screenResolution": "WVGA (800 x 480)", + "screenSize": "7.0 inches", + "touchScreen": true + }, + "hardware": { + "accelerometer": true, + "audioJack": "3.5mm", + "cpu": "nVidia Tegra T20", + "fmRadio": false, + "physicalKeyboard": false, + "usb": "USB 2.0" + }, + "id": "dell-streak-7", + "images": [ + "img/phones/dell-streak-7.0.jpg", + "img/phones/dell-streak-7.1.jpg", + "img/phones/dell-streak-7.2.jpg", + "img/phones/dell-streak-7.3.jpg", + "img/phones/dell-streak-7.4.jpg" + ], + "name": "Dell Streak 7", + "sizeAndWeight": { + "dimensions": [ + "199.9 mm (w)", + "119.8 mm (h)", + "12.4 mm (d)" + ], + "weight": "450.0 grams" + }, + "storage": { + "flash": "16000MB", + "ram": "512MB" + } +} diff --git a/aio/content/examples/upgrade-phonecat-4-final/ts/app/phones/motorola-atrix-4g.json b/aio/content/examples/upgrade-phonecat-4-final/ts/app/phones/motorola-atrix-4g.json new file mode 100644 index 0000000000..ccca00e3b2 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-4-final/ts/app/phones/motorola-atrix-4g.json @@ -0,0 +1,62 @@ +{ + "additionalFeatures": "", + "android": { + "os": "Android 2.2", + "ui": "MOTOBLUR" + }, + "availability": [ + "AT&T" + ], + "battery": { + "standbyTime": "400 hours", + "talkTime": "5 hours", + "type": "Lithium Ion (Li-Ion) (1930 mAH)" + }, + "camera": { + "features": [ + "" + ], + "primary": "" + }, + "connectivity": { + "bluetooth": "Bluetooth 2.1", + "cell": "WCDMA 850/1900/2100, GSM 850/900/1800/1900, HSDPA 14Mbps (Category 10) Edge Class 12, GPRS Class 12, eCompass, AGPS", + "gps": true, + "infrared": false, + "wifi": "802.11 a/b/g/n" + }, + "description": "MOTOROLA ATRIX 4G gives you dual-core processing power and the revolutionary webtop application. With webtop and a compatible Motorola docking station, sold separately, you can surf the Internet with a full Firefox browser, create and edit docs, or access multimedia on a large screen almost anywhere.", + "display": { + "screenResolution": "QHD (960 x 540)", + "screenSize": "4.0 inches", + "touchScreen": true + }, + "hardware": { + "accelerometer": true, + "audioJack": "3.5mm", + "cpu": "1 GHz Dual Core", + "fmRadio": false, + "physicalKeyboard": false, + "usb": "USB 2.0" + }, + "id": "motorola-atrix-4g", + "images": [ + "img/phones/motorola-atrix-4g.0.jpg", + "img/phones/motorola-atrix-4g.1.jpg", + "img/phones/motorola-atrix-4g.2.jpg", + "img/phones/motorola-atrix-4g.3.jpg" + ], + "name": "MOTOROLA ATRIX\u2122 4G", + "sizeAndWeight": { + "dimensions": [ + "63.5 mm (w)", + "117.75 mm (h)", + "10.95 mm (d)" + ], + "weight": "135.0 grams" + }, + "storage": { + "flash": "", + "ram": "" + } +} diff --git a/aio/content/examples/upgrade-phonecat-4-final/ts/app/phones/motorola-xoom-with-wi-fi.json b/aio/content/examples/upgrade-phonecat-4-final/ts/app/phones/motorola-xoom-with-wi-fi.json new file mode 100644 index 0000000000..4ba9c8d5b5 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-4-final/ts/app/phones/motorola-xoom-with-wi-fi.json @@ -0,0 +1,65 @@ +{ + "additionalFeatures": "Sensors: proximity, ambient light, barometer, gyroscope", + "android": { + "os": "Android 3.0", + "ui": "Honeycomb" + }, + "availability": [ + "" + ], + "battery": { + "standbyTime": "336 hours", + "talkTime": "24 hours", + "type": "Other ( mAH)" + }, + "camera": { + "features": [ + "Flash", + "Video" + ], + "primary": "5.0 megapixels" + }, + "connectivity": { + "bluetooth": "Bluetooth 2.1", + "cell": "", + "gps": true, + "infrared": false, + "wifi": "802.11 b/g/n" + }, + "description": "Motorola XOOM with Wi-Fi has a super-powerful dual-core processor and Android\u2122 3.0 (Honeycomb) \u2014 the Android platform designed specifically for tablets. With its 10.1-inch HD widescreen display, you\u2019ll enjoy HD video in a thin, light, powerful and upgradeable tablet.", + "display": { + "screenResolution": "WXGA (1200 x 800)", + "screenSize": "10.1 inches", + "touchScreen": true + }, + "hardware": { + "accelerometer": true, + "audioJack": "3.5mm", + "cpu": "1 GHz Dual Core Tegra 2", + "fmRadio": false, + "physicalKeyboard": false, + "usb": "USB 2.0" + }, + "id": "motorola-xoom-with-wi-fi", + "images": [ + "img/phones/motorola-xoom-with-wi-fi.0.jpg", + "img/phones/motorola-xoom-with-wi-fi.1.jpg", + "img/phones/motorola-xoom-with-wi-fi.2.jpg", + "img/phones/motorola-xoom-with-wi-fi.3.jpg", + "img/phones/motorola-xoom-with-wi-fi.4.jpg", + "img/phones/motorola-xoom-with-wi-fi.5.jpg" + ], + "name": "Motorola XOOM\u2122 with Wi-Fi", + "sizeAndWeight": { + "dimensions": [ + "249.1 mm (w)", + "167.8 mm (h)", + "12.9 mm (d)" + ], + "weight": "708.0 grams" + }, + "storage": { + "flash": "32000MB", + "ram": "1000MB" + } +} diff --git a/aio/content/examples/upgrade-phonecat-4-final/ts/app/phones/motorola-xoom.json b/aio/content/examples/upgrade-phonecat-4-final/ts/app/phones/motorola-xoom.json new file mode 100644 index 0000000000..f0f0c8711d --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-4-final/ts/app/phones/motorola-xoom.json @@ -0,0 +1,62 @@ +{ + "additionalFeatures": "Front-facing camera. Sensors: proximity, ambient light, barometer, gyroscope.", + "android": { + "os": "Android 3.0", + "ui": "Android" + }, + "availability": [ + "Verizon" + ], + "battery": { + "standbyTime": "336 hours", + "talkTime": "24 hours", + "type": "Other (3250 mAH)" + }, + "camera": { + "features": [ + "Flash", + "Video" + ], + "primary": "5.0 megapixels" + }, + "connectivity": { + "bluetooth": "Bluetooth 2.1", + "cell": "CDMA 800 /1900 LTE 700, Rx diversity in all bands", + "gps": true, + "infrared": false, + "wifi": "802.11 a/b/g/n" + }, + "description": "MOTOROLA XOOM has a super-powerful dual-core processor and Android\u2122 3.0 (Honeycomb) \u2014 the Android platform designed specifically for tablets. With its 10.1-inch HD widescreen display, you\u2019ll enjoy HD video in a thin, light, powerful and upgradeable tablet.", + "display": { + "screenResolution": "WXGA (1200 x 800)", + "screenSize": "10.1 inches", + "touchScreen": true + }, + "hardware": { + "accelerometer": true, + "audioJack": "3.5mm", + "cpu": "1 GHz Dual Core Tegra 2", + "fmRadio": false, + "physicalKeyboard": false, + "usb": "USB 2.0" + }, + "id": "motorola-xoom", + "images": [ + "img/phones/motorola-xoom.0.jpg", + "img/phones/motorola-xoom.1.jpg", + "img/phones/motorola-xoom.2.jpg" + ], + "name": "MOTOROLA XOOM\u2122", + "sizeAndWeight": { + "dimensions": [ + "249.0 mm (w)", + "168.0 mm (h)", + "12.7 mm (d)" + ], + "weight": "726.0 grams" + }, + "storage": { + "flash": "32000MB", + "ram": "1000MB" + } +} diff --git a/aio/content/examples/upgrade-phonecat-4-final/ts/app/phones/nexus-s.json b/aio/content/examples/upgrade-phonecat-4-final/ts/app/phones/nexus-s.json new file mode 100644 index 0000000000..5e712e2ff8 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-4-final/ts/app/phones/nexus-s.json @@ -0,0 +1,69 @@ +{ + "additionalFeatures": "Contour Display, Near Field Communications (NFC), Three-axis gyroscope, Anti-fingerprint display coating, Internet Calling support (VoIP/SIP)", + "android": { + "os": "Android 2.3", + "ui": "Android" + }, + "availability": [ + "M1,", + "O2,", + "Orange,", + "Singtel,", + "StarHub,", + "T-Mobile,", + "Vodafone" + ], + "battery": { + "standbyTime": "428 hours", + "talkTime": "6 hours", + "type": "Lithium Ion (Li-Ion) (1500 mAH)" + }, + "camera": { + "features": [ + "Flash", + "Video" + ], + "primary": "5.0 megapixels" + }, + "connectivity": { + "bluetooth": "Bluetooth 2.1", + "cell": "Quad-band GSM: 850, 900, 1800, 1900\r\nTri-band HSPA: 900, 2100, 1700\r\nHSPA type: HSDPA (7.2Mbps) HSUPA (5.76Mbps)", + "gps": true, + "infrared": false, + "wifi": "802.11 b/g/n" + }, + "description": "Nexus S is the next generation of Nexus devices, co-developed by Google and Samsung. The latest Android platform (Gingerbread), paired with a 1 GHz Hummingbird processor and 16GB of memory, makes Nexus S one of the fastest phones on the market. It comes pre-installed with the best of Google apps and enabled with new and popular features like true multi-tasking, Wi-Fi hotspot, Internet Calling, NFC support, and full web browsing. With this device, users will also be the first to receive software upgrades and new Google mobile apps as soon as they become available. For more details, visit http://www.google.com/nexus.", + "display": { + "screenResolution": "WVGA (800 x 480)", + "screenSize": "4.0 inches", + "touchScreen": true + }, + "hardware": { + "accelerometer": true, + "audioJack": "3.5mm", + "cpu": "1GHz Cortex A8 (Hummingbird) processor", + "fmRadio": false, + "physicalKeyboard": false, + "usb": "USB 2.0" + }, + "id": "nexus-s", + "images": [ + "img/phones/nexus-s.0.jpg", + "img/phones/nexus-s.1.jpg", + "img/phones/nexus-s.2.jpg", + "img/phones/nexus-s.3.jpg" + ], + "name": "Nexus S", + "sizeAndWeight": { + "dimensions": [ + "63.0 mm (w)", + "123.9 mm (h)", + "10.88 mm (d)" + ], + "weight": "129.0 grams" + }, + "storage": { + "flash": "16384MB", + "ram": "512MB" + } +} diff --git a/aio/content/examples/upgrade-phonecat-4-final/ts/app/phones/phones.json b/aio/content/examples/upgrade-phonecat-4-final/ts/app/phones/phones.json new file mode 100644 index 0000000000..339b94fbb5 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-4-final/ts/app/phones/phones.json @@ -0,0 +1,155 @@ +[ + { + "age": 0, + "id": "motorola-xoom-with-wi-fi", + "imageUrl": "img/phones/motorola-xoom-with-wi-fi.0.jpg", + "name": "Motorola XOOM\u2122 with Wi-Fi", + "snippet": "The Next, Next Generation\r\n\r\nExperience the future with Motorola XOOM with Wi-Fi, the world's first tablet powered by Android 3.0 (Honeycomb)." + }, + { + "age": 1, + "id": "motorola-xoom", + "imageUrl": "img/phones/motorola-xoom.0.jpg", + "name": "MOTOROLA XOOM\u2122", + "snippet": "The Next, Next Generation\n\nExperience the future with MOTOROLA XOOM, the world's first tablet powered by Android 3.0 (Honeycomb)." + }, + { + "age": 2, + "carrier": "AT&T", + "id": "motorola-atrix-4g", + "imageUrl": "img/phones/motorola-atrix-4g.0.jpg", + "name": "MOTOROLA ATRIX\u2122 4G", + "snippet": "MOTOROLA ATRIX 4G the world's most powerful smartphone." + }, + { + "age": 3, + "id": "dell-streak-7", + "imageUrl": "img/phones/dell-streak-7.0.jpg", + "name": "Dell Streak 7", + "snippet": "Introducing Dell\u2122 Streak 7. Share photos, videos and movies together. It\u2019s small enough to carry around, big enough to gather around." + }, + { + "age": 4, + "carrier": "Cellular South", + "id": "samsung-gem", + "imageUrl": "img/phones/samsung-gem.0.jpg", + "name": "Samsung Gem\u2122", + "snippet": "The Samsung Gem\u2122 brings you everything that you would expect and more from a touch display smart phone \u2013 more apps, more features and a more affordable price." + }, + { + "age": 5, + "carrier": "Dell", + "id": "dell-venue", + "imageUrl": "img/phones/dell-venue.0.jpg", + "name": "Dell Venue", + "snippet": "The Dell Venue; Your Personal Express Lane to Everything" + }, + { + "age": 6, + "carrier": "Best Buy", + "id": "nexus-s", + "imageUrl": "img/phones/nexus-s.0.jpg", + "name": "Nexus S", + "snippet": "Fast just got faster with Nexus S. A pure Google experience, Nexus S is the first phone to run Gingerbread (Android 2.3), the fastest version of Android yet." + }, + { + "age": 7, + "carrier": "Cellular South", + "id": "lg-axis", + "imageUrl": "img/phones/lg-axis.0.jpg", + "name": "LG Axis", + "snippet": "Android Powered, Google Maps Navigation, 5 Customizable Home Screens" + }, + { + "age": 8, + "id": "samsung-galaxy-tab", + "imageUrl": "img/phones/samsung-galaxy-tab.0.jpg", + "name": "Samsung Galaxy Tab\u2122", + "snippet": "Feel Free to Tab\u2122. The Samsung Galaxy Tab\u2122 brings you an ultra-mobile entertainment experience through its 7\u201d display, high-power processor and Adobe\u00ae Flash\u00ae Player compatibility." + }, + { + "age": 9, + "carrier": "Cellular South", + "id": "samsung-showcase-a-galaxy-s-phone", + "imageUrl": "img/phones/samsung-showcase-a-galaxy-s-phone.0.jpg", + "name": "Samsung Showcase\u2122 a Galaxy S\u2122 phone", + "snippet": "The Samsung Showcase\u2122 delivers a cinema quality experience like you\u2019ve never seen before. Its innovative 4\u201d touch display technology provides rich picture brilliance, even outdoors" + }, + { + "age": 10, + "carrier": "Verizon", + "id": "droid-2-global-by-motorola", + "imageUrl": "img/phones/droid-2-global-by-motorola.0.jpg", + "name": "DROID\u2122 2 Global by Motorola", + "snippet": "The first smartphone with a 1.2 GHz processor and global capabilities." + }, + { + "age": 11, + "carrier": "Verizon", + "id": "droid-pro-by-motorola", + "imageUrl": "img/phones/droid-pro-by-motorola.0.jpg", + "name": "DROID\u2122 Pro by Motorola", + "snippet": "The next generation of DOES." + }, + { + "age": 12, + "carrier": "AT&T", + "id": "motorola-bravo-with-motoblur", + "imageUrl": "img/phones/motorola-bravo-with-motoblur.0.jpg", + "name": "MOTOROLA BRAVO\u2122 with MOTOBLUR\u2122", + "snippet": "An experience to cheer about." + }, + { + "age": 13, + "carrier": "T-Mobile", + "id": "motorola-defy-with-motoblur", + "imageUrl": "img/phones/motorola-defy-with-motoblur.0.jpg", + "name": "Motorola DEFY\u2122 with MOTOBLUR\u2122", + "snippet": "Are you ready for everything life throws your way?" + }, + { + "age": 14, + "carrier": "T-Mobile", + "id": "t-mobile-mytouch-4g", + "imageUrl": "img/phones/t-mobile-mytouch-4g.0.jpg", + "name": "T-Mobile myTouch 4G", + "snippet": "The T-Mobile myTouch 4G is a premium smartphone designed to deliver blazing fast 4G speeds so that you can video chat from practically anywhere, with or without Wi-Fi." + }, + { + "age": 15, + "carrier": "US Cellular", + "id": "samsung-mesmerize-a-galaxy-s-phone", + "imageUrl": "img/phones/samsung-mesmerize-a-galaxy-s-phone.0.jpg", + "name": "Samsung Mesmerize\u2122 a Galaxy S\u2122 phone", + "snippet": "The Samsung Mesmerize\u2122 delivers a cinema quality experience like you\u2019ve never seen before. Its innovative 4\u201d touch display technology provides rich picture brilliance,even outdoors" + }, + { + "age": 16, + "carrier": "Sprint", + "id": "sanyo-zio", + "imageUrl": "img/phones/sanyo-zio.0.jpg", + "name": "SANYO ZIO", + "snippet": "The Sanyo Zio by Kyocera is an Android smartphone with a combination of ultra-sleek styling, strong performance and unprecedented value." + }, + { + "age": 17, + "id": "samsung-transform", + "imageUrl": "img/phones/samsung-transform.0.jpg", + "name": "Samsung Transform\u2122", + "snippet": "The Samsung Transform\u2122 brings you a fun way to customize your Android powered touch screen phone to just the way you like it through your favorite themed \u201cSprint ID Service Pack\u201d." + }, + { + "age": 18, + "id": "t-mobile-g2", + "imageUrl": "img/phones/t-mobile-g2.0.jpg", + "name": "T-Mobile G2", + "snippet": "The T-Mobile G2 with Google is the first smartphone built for 4G speeds on T-Mobile's new network. Get the information you need, faster than you ever thought possible." + }, + { + "age": 19, + "id": "motorola-charm-with-motoblur", + "imageUrl": "img/phones/motorola-charm-with-motoblur.0.jpg", + "name": "Motorola CHARM\u2122 with MOTOBLUR\u2122", + "snippet": "Motorola CHARM fits easily in your pocket or palm. Includes MOTOBLUR service." + } +] diff --git a/aio/content/examples/upgrade-phonecat-4-final/ts/example-config.json b/aio/content/examples/upgrade-phonecat-4-final/ts/example-config.json new file mode 100644 index 0000000000..401c14f835 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-4-final/ts/example-config.json @@ -0,0 +1,5 @@ +{ + "build": "build:upgrade", + "run": "serve:upgrade", + "unittesting": true +} diff --git a/aio/content/examples/upgrade-phonecat-4-final/ts/index.html b/aio/content/examples/upgrade-phonecat-4-final/ts/index.html new file mode 100644 index 0000000000..fee59370e6 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-4-final/ts/index.html @@ -0,0 +1,36 @@ + + + + + + + + + + Google Phone Gallery + + + + + + + + + + + + + + + + + + + diff --git a/aio/content/examples/upgrade-phonecat-4-final/ts/run-unit-tests.sh b/aio/content/examples/upgrade-phonecat-4-final/ts/run-unit-tests.sh new file mode 100644 index 0000000000..00a5abb7bc --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-4-final/ts/run-unit-tests.sh @@ -0,0 +1,7 @@ +## The boilerplate Karma configuration won't work with Angular 1 tests since +## a specific loading configuration is needed for them. +## We keep one in karma.conf.ng1.js. This scripts runs the ng1 tests with +## that config. + +PATH=$(npm bin):$PATH +tsc && karma start karma.conf.ng1.js diff --git a/aio/content/examples/upgrade-phonecat-4-final/ts/tsconfig.json b/aio/content/examples/upgrade-phonecat-4-final/ts/tsconfig.json new file mode 100644 index 0000000000..f267800f14 --- /dev/null +++ b/aio/content/examples/upgrade-phonecat-4-final/ts/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "target": "es5", + "module": "commonjs", + "moduleResolution": "node", + "sourceMap": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "lib": [ "es2015", "dom" ], + "noImplicitAny": true, + "suppressImplicitAnyIndexErrors": true, + "typeRoots": [ + "../../node_modules/@types/" + ] + }, + "compileOnSave": true, + "exclude": [ + "node_modules/*", + "**/*-aot.ts" + ] +} diff --git a/aio/content/examples/user-input/e2e-spec.ts b/aio/content/examples/user-input/e2e-spec.ts new file mode 100644 index 0000000000..c0bb770848 --- /dev/null +++ b/aio/content/examples/user-input/e2e-spec.ts @@ -0,0 +1,99 @@ +'use strict'; // necessary for es6 output in node + +import { browser, element, by, protractor } from 'protractor'; + +describe('User Input Tests', function () { + + beforeAll(function () { + browser.get(''); + }); + + it('should support the click event', function () { + let mainEle = element(by.css('click-me')); + let buttonEle = element(by.css('click-me button')); + expect(mainEle.getText()).not.toContain('You are my hero!'); + buttonEle.click().then(function() { + expect(mainEle.getText()).toContain('You are my hero!'); + }); + }); + + it('should support the click event with an event payload', function () { + let mainEle = element(by.css('click-me2')); + let buttonEle = element(by.css('click-me2 button')); + expect(mainEle.getText()).not.toContain('Event target is '); + buttonEle.click().then(function() { + expect(mainEle.getText()).toContain('Event target is BUTTON'); + }); + }); + + it('should support the keyup event ', function () { + let mainEle = element(by.css('key-up1')); + let inputEle = mainEle.element(by.css('input')); + let outputTextEle = mainEle.element(by.css('p')); + expect(outputTextEle.getText()).toEqual(''); + inputEle.sendKeys('abc'); + expect(outputTextEle.getText()).toEqual('a | ab | abc |'); + }); + + it('should support user input from a local template let (loopback)', function () { + let mainEle = element(by.css('loop-back')); + let inputEle = mainEle.element(by.css('input')); + let outputTextEle = mainEle.element(by.css('p')); + expect(outputTextEle.getText()).toEqual(''); + inputEle.sendKeys('abc'); + expect(outputTextEle.getText()).toEqual('abc'); + }); + + it('should be able to combine click event with a local template var', function () { + let mainEle = element(by.css('key-up2')); + let inputEle = mainEle.element(by.css('input')); + let outputTextEle = mainEle.element(by.css('p')); + expect(outputTextEle.getText()).toEqual(''); + inputEle.sendKeys('abc'); + expect(outputTextEle.getText()).toEqual('a | ab | abc |'); + }); + + xit('should be able to filter key events', () => { + let mainEle = element(by.css('key-up3')); + let inputEle = mainEle.element(by.css('input')); + let outputTextEle = mainEle.element(by.css('p')); + expect(outputTextEle.getText()).toEqual(''); + inputEle.sendKeys('abc'); + expect(outputTextEle.getText()).toEqual('', 'should be blank - have not sent enter yet'); + // broken atm, see https://github.com/angular/angular/issues/9419 + inputEle.sendKeys(protractor.Key.ENTER); + expect(outputTextEle.getText()).toEqual('abc'); + }); + + it('should be able to filter blur events', function () { + let prevInputEle = element(by.css('key-up3 input')); + let mainEle = element(by.css('key-up4')); + let inputEle = mainEle.element(by.css('input')); + let outputTextEle = mainEle.element(by.css('p')); + expect(outputTextEle.getText()).toEqual(''); + inputEle.sendKeys('abc'); + expect(outputTextEle.getText()).toEqual('', 'should be blank - have not sent enter yet'); + // change the focus + prevInputEle.click().then(function() { + expect(outputTextEle.getText()).toEqual('abc'); + }); + }); + + it('should be able to compose little tour of heroes', function () { + let mainEle = element(by.css('little-tour')); + let inputEle = mainEle.element(by.css('input')); + let addButtonEle = mainEle.element(by.css('button')); + let heroEles = mainEle.all(by.css('li')); + let numHeroes: number; + expect(heroEles.count()).toBeGreaterThan(0); + heroEles.count().then(function(count: number) { + numHeroes = count; + inputEle.sendKeys('abc'); + return addButtonEle.click(); + }).then(function() { + expect(heroEles.count()).toEqual(numHeroes + 1, 'should be one more hero added'); + expect(heroEles.get(numHeroes).getText()).toContain('abc'); + }); + }); +}); + diff --git a/aio/content/examples/user-input/ts/example-config.json b/aio/content/examples/user-input/ts/example-config.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/aio/content/examples/user-input/ts/plnkr.json b/aio/content/examples/user-input/ts/plnkr.json new file mode 100644 index 0000000000..dd8f063d37 --- /dev/null +++ b/aio/content/examples/user-input/ts/plnkr.json @@ -0,0 +1,9 @@ +{ + "description": "User Input", + "basePath": "src/", + "files": [ + "!**/*.d.ts", + "!**/*.js" + ], + "tags": ["input"] +} diff --git a/aio/content/examples/user-input/ts/plnkr.no-link.html b/aio/content/examples/user-input/ts/plnkr.no-link.html new file mode 100644 index 0000000000..d3d8c0aa26 --- /dev/null +++ b/aio/content/examples/user-input/ts/plnkr.no-link.html @@ -0,0 +1,433 @@ +
    \ No newline at end of file diff --git a/aio/content/examples/user-input/ts/src/app/app.component.html b/aio/content/examples/user-input/ts/src/app/app.component.html new file mode 100644 index 0000000000..036b04c510 --- /dev/null +++ b/aio/content/examples/user-input/ts/src/app/app.component.html @@ -0,0 +1,27 @@ +

    + +

    + +

    + +

    + +

    Give me some keys!

    +
    + +

    keyup loop-back component

    +
    +

    + +

    Give me some more keys!

    +
    + +

    Type away! Press [enter] when done.

    +
    + +

    Type away! Press [enter] or click elsewhere when done.

    +
    + +

    Little Tour of Heroes

    +

    Add a new hero

    +
    \ No newline at end of file diff --git a/aio/content/examples/user-input/ts/src/app/app.component.ts b/aio/content/examples/user-input/ts/src/app/app.component.ts new file mode 100644 index 0000000000..56906ef048 --- /dev/null +++ b/aio/content/examples/user-input/ts/src/app/app.component.ts @@ -0,0 +1,9 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + moduleId: module.id, + selector: 'my-app', + templateUrl: './app.component.html' +}) +export class AppComponent { } diff --git a/aio/content/examples/user-input/ts/src/app/app.module.ts b/aio/content/examples/user-input/ts/src/app/app.module.ts new file mode 100644 index 0000000000..41f13f9f11 --- /dev/null +++ b/aio/content/examples/user-input/ts/src/app/app.module.ts @@ -0,0 +1,37 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; + +import { AppComponent } from './app.component'; +import { ClickMeComponent } from './click-me.component'; +import { ClickMe2Component } from './click-me2.component'; +import { + KeyUpComponent_v1, + KeyUpComponent_v2, + KeyUpComponent_v3, + KeyUpComponent_v4 +} from './keyup.components'; +import { LittleTourComponent } from './little-tour.component'; +import { LoopbackComponent } from './loop-back.component'; + + +@NgModule({ + imports: [ + BrowserModule + ], + declarations: [ + AppComponent, + ClickMeComponent, + ClickMe2Component, + KeyUpComponent_v1, + KeyUpComponent_v2, + KeyUpComponent_v3, + KeyUpComponent_v4, + LittleTourComponent, + LoopbackComponent + ], + providers: [ + + ], + bootstrap: [ AppComponent ] +}) +export class AppModule { } diff --git a/aio/content/examples/user-input/ts/src/app/click-me.component.ts b/aio/content/examples/user-input/ts/src/app/click-me.component.ts new file mode 100644 index 0000000000..45a4ca7e70 --- /dev/null +++ b/aio/content/examples/user-input/ts/src/app/click-me.component.ts @@ -0,0 +1,24 @@ +/* FOR DOCS ... MUST MATCH ClickMeComponent template +// #docregion click-me-button + +// #enddocregion click-me-button +*/ + +// #docregion +import { Component } from '@angular/core'; + +// #docregion click-me-component +@Component({ + selector: 'click-me', + template: ` + + {{clickMessage}}` +}) +export class ClickMeComponent { + clickMessage = ''; + + onClickMe() { + this.clickMessage = 'You are my hero!'; + } +} +// #enddocregion click-me-component diff --git a/aio/content/examples/user-input/ts/src/app/click-me2.component.ts b/aio/content/examples/user-input/ts/src/app/click-me2.component.ts new file mode 100644 index 0000000000..1e35731a82 --- /dev/null +++ b/aio/content/examples/user-input/ts/src/app/click-me2.component.ts @@ -0,0 +1,18 @@ +// #docregion +import { Component } from '@angular/core'; + +@Component({ + selector: 'click-me2', + template: ` + + {{clickMessage}}` +}) +export class ClickMe2Component { + clickMessage = ''; + clicks = 1; + + onClickMe2(event: any) { + let evtMsg = event ? ' Event target is ' + event.target.tagName : ''; + this.clickMessage = (`Click #${this.clicks++}. ${evtMsg}`); + } +} diff --git a/aio/content/examples/user-input/ts/src/app/keyup.components.ts b/aio/content/examples/user-input/ts/src/app/keyup.components.ts new file mode 100644 index 0000000000..94ed1ae423 --- /dev/null +++ b/aio/content/examples/user-input/ts/src/app/keyup.components.ts @@ -0,0 +1,88 @@ +/* tslint:disable:class-name component-class-suffix */ +// #docplaster +// #docregion +import { Component } from '@angular/core'; + +// #docregion key-up-component-1 +@Component({ + selector: 'key-up1', +// #docregion key-up-component-1-template + template: ` + +

    {{values}}

    + ` +// #enddocregion key-up-component-1-template +}) +// #docregion key-up-component-1-class, key-up-component-1-class-no-type +export class KeyUpComponent_v1 { + values = ''; + +// #enddocregion key-up-component-1-class, key-up-component-1-class-no-type + /* + // #docregion key-up-component-1-class-no-type + onKey(event: any) { // without type info + this.values += event.target.value + ' | '; + } + // #enddocregion key-up-component-1-class-no-type + */ + // #docregion key-up-component-1-class + + onKey(event: KeyboardEvent) { // with type info + this.values += (event.target).value + ' | '; + } +// #docregion key-up-component-1-class-no-type +} +// #enddocregion key-up-component-1,key-up-component-1-class, key-up-component-1-class-no-type + +////////////////////////////////////////// + +// #docregion key-up-component-2 +@Component({ + selector: 'key-up2', + template: ` + +

    {{values}}

    + ` +}) +export class KeyUpComponent_v2 { + values = ''; + onKey(value: string) { + this.values += value + ' | '; + } +} +// #enddocregion key-up-component-2 + +////////////////////////////////////////// + +// #docregion key-up-component-3 +@Component({ + selector: 'key-up3', + template: ` + +

    {{value}}

    + ` +}) +export class KeyUpComponent_v3 { + value = ''; + onEnter(value: string) { this.value = value; } +} +// #enddocregion key-up-component-3 + +////////////////////////////////////////// + +// #docregion key-up-component-4 +@Component({ + selector: 'key-up4', + template: ` + + +

    {{value}}

    + ` +}) +export class KeyUpComponent_v4 { + value = ''; + update(value: string) { this.value = value; } +} +// #enddocregion key-up-component-4 diff --git a/aio/content/examples/user-input/ts/src/app/little-tour.component.ts b/aio/content/examples/user-input/ts/src/app/little-tour.component.ts new file mode 100644 index 0000000000..5862f033d6 --- /dev/null +++ b/aio/content/examples/user-input/ts/src/app/little-tour.component.ts @@ -0,0 +1,25 @@ +// #docregion +import { Component } from '@angular/core'; + +// #docregion little-tour +@Component({ + selector: 'little-tour', + template: ` + + + + +
    • {{hero}}
    + ` +}) +export class LittleTourComponent { + heroes = ['Windstorm', 'Bombasto', 'Magneta', 'Tornado']; + addHero(newHero: string) { + if (newHero) { + this.heroes.push(newHero); + } + } +} +// #enddocregion little-tour diff --git a/aio/content/examples/user-input/ts/src/app/loop-back.component.ts b/aio/content/examples/user-input/ts/src/app/loop-back.component.ts new file mode 100644 index 0000000000..6c9dad1da8 --- /dev/null +++ b/aio/content/examples/user-input/ts/src/app/loop-back.component.ts @@ -0,0 +1,12 @@ +// #docregion +import { Component } from '@angular/core'; +// #docregion loop-back-component +@Component({ + selector: 'loop-back', + template: ` + +

    {{box.value}}

    + ` +}) +export class LoopbackComponent { } +// #enddocregion loop-back-component diff --git a/aio/content/examples/user-input/ts/src/index.html b/aio/content/examples/user-input/ts/src/index.html new file mode 100644 index 0000000000..9728814107 --- /dev/null +++ b/aio/content/examples/user-input/ts/src/index.html @@ -0,0 +1,27 @@ + + + + User Input + + + + + + + + + + + + + + + + + + Loading... + + + diff --git a/aio/content/examples/user-input/ts/src/main.ts b/aio/content/examples/user-input/ts/src/main.ts new file mode 100644 index 0000000000..311c44b76d --- /dev/null +++ b/aio/content/examples/user-input/ts/src/main.ts @@ -0,0 +1,5 @@ +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app/app.module'; + +platformBrowserDynamic().bootstrapModule(AppModule); diff --git a/aio/content/examples/user-input/ts/src/user-input-styles.css b/aio/content/examples/user-input/ts/src/user-input-styles.css new file mode 100644 index 0000000000..b2133e5103 --- /dev/null +++ b/aio/content/examples/user-input/ts/src/user-input-styles.css @@ -0,0 +1,9 @@ +fieldset {border-style:none} +img {height: 100px;} +.box {border: 1px solid black; padding:3px} +.child-div {margin-left: 1em; font-weight: normal} +.hidden {display: none} +.parent-div {margin-top: 1em; font-weight: bold} +.special {font-weight:bold;} +.toe {margin-left: 1em; font-style: italic;} +little-hero {color:blue; font-size: smaller; background-color: Turquoise } \ No newline at end of file diff --git a/aio/content/examples/webpack/ts-snippets/webpack.config.snippets.ts b/aio/content/examples/webpack/ts-snippets/webpack.config.snippets.ts index d1e8f7de42..2a3c596359 100644 --- a/aio/content/examples/webpack/ts-snippets/webpack.config.snippets.ts +++ b/aio/content/examples/webpack/ts-snippets/webpack.config.snippets.ts @@ -34,11 +34,11 @@ output: { // #docregion loaders rules: [ { - test: /\.ts$/ + test: /\.ts$/, loader: 'awesome-typescript-loader' }, { - test: /\.css$/ + test: /\.css$/, loaders: 'style-loader!css-loader' } ] diff --git a/aio/content/examples/webpack/ts/config/webpack.common.js b/aio/content/examples/webpack/ts/config/webpack.common.js index 5f83bfdde5..49dd91e334 100644 --- a/aio/content/examples/webpack/ts/config/webpack.common.js +++ b/aio/content/examples/webpack/ts/config/webpack.common.js @@ -24,7 +24,10 @@ module.exports = { rules: [ { test: /\.ts$/, - loaders: ['awesome-typescript-loader', 'angular2-template-loader'] + loaders: [{ + loader: 'awesome-typescript-loader', + options: { configFileName: helpers.root('src', 'tsconfig.json') } + } , 'angular2-template-loader'] }, { test: /\.html$/, diff --git a/aio/content/examples/webpack/ts/example-config.json b/aio/content/examples/webpack/ts/example-config.json index 9e587f892f..e405d0c01a 100644 --- a/aio/content/examples/webpack/ts/example-config.json +++ b/aio/content/examples/webpack/ts/example-config.json @@ -1,4 +1,4 @@ { "build": "build:webpack", - "run": "http-server:cli" + "run": "serve:cli" } diff --git a/aio/content/examples/webpack/ts/webpack.config.js b/aio/content/examples/webpack/ts/webpack.config.js new file mode 100644 index 0000000000..66141706fe --- /dev/null +++ b/aio/content/examples/webpack/ts/webpack.config.js @@ -0,0 +1,3 @@ +// #docregion +module.exports = require('./config/webpack.dev.js'); +// #enddocregion \ No newline at end of file

    K zH6|_KOE&D3#Swm5sS~0pmq>gH(n2m^z0v6&9%Ec5!vlXMcOckIRDY5XVj!1DBo1Y2 zJ<=lWu9t`o{}iFIK@39m_%?G~_$lIaYgxg`3!LM`)m%`0_mUryArinUY={Q3V==zk3AtrU>AfbRCb=%Dy! r;b3CnVxgns5aHnB6A%&-Vqg=K5D}2z5fBpm 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 D(OGio literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/motorola-xoom-with-wi-fi.2.jpg b/aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/motorola-xoom-with-wi-fi.2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..86b55d28dd4c5819c05717bc9446a1e17f733f3b GIT binary patch literal 4077 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 D#g8kL literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/motorola-xoom-with-wi-fi.4.jpg b/aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/motorola-xoom-with-wi-fi.4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..75ef1464cb8d68c5618b11189c343d205a786601 GIT binary patch literal 15111 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 literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/motorola-xoom-with-wi-fi.5.jpg b/aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/motorola-xoom-with-wi-fi.5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4d42db43305b945ccc2608869908aa2cc11f7eeb GIT binary patch literal 14687 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 UcK$yiw?{saLl!G!Upz1T56z?xnE(I) literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/motorola-xoom.0.jpg b/aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/motorola-xoom.0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bf6954bbd5a8df5db10685273df9cdd2ac0a4c9b GIT binary patch literal 26175 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 literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/motorola-xoom.1.jpg b/aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/motorola-xoom.1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..659688a47d7298f3a03bc42de74c3633469c325d GIT binary patch literal 23398 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 literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/motorola-xoom.2.jpg b/aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/motorola-xoom.2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ce0ff1002e40641249bc000fdfa522500988d808 GIT binary patch literal 23686 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 literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/nexus-s.1.jpg b/aio/content/examples/upgrade-phonecat-4-final/ts/app/img/phones/nexus-s.1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f33004dd7f53663146ac3f96113f7e775105187f GIT binary patch literal 16354 zcmb`u1ymeO`#spez~JsWz(5jYaMuYQAUMH;6C8rO1_=%cZovWs2pR@=2@rz2TY%v1 zEbnj6?*8}ee&2icoUQ3oU8k$MtDf%L^VF^T^yAFq3V{DgRzVg(LIMD!ryuY*4@dzh z$jJX}PYLw2p`xRrfLi2?+@{9vL|) zF*zYI3GqJ{K|*;t2ZV}&ii$yugM~x<|2aLj0|e+u@ksF~NDKfn0TK!U(qlJ3`_CZJ zP@b~?Ga(_PfWYXeXc(AJ^?LXK5(+X11q}rS4HFfNf$`KHnE-_zgi6ST28I(csF^qi zp<^U)zx+Z>!l+)`L2CLwII*B=boGdgNAS}a6Z3OEehoLMjFv@Seof~wIj@w9Yv_lh z>ZfayKi#GOThCAT?5Xdk8fpThf71V2i-b%-j{;Xqc$@>UpH6xj0|6iboGTOH6A&Q% z|CkX&pA(rAeEJ-Gy?>lD5D@M#j@RR>CUf0RxR3&)`(%dqjnX9KSGP~O=sI489MLh# z!Z2usx{aZ|>0aBa=W31mSmYydXuQncD?DX`E3QU`wyW<9HFVLqp2ubBnPVl%>YmWC zReus3KuPkOL5Qj88>Hypo~Mxof2cdRlI`S$(_MVUjoQ&JEb{>Po}Zl|8;@n3wmQN4 zOF)98$JBE^ywbRdAbax@urSf9VdwqRNLX{T4!iv|58Im3ufBbM_jM(y!PpJ_-q@5g zb%8``;mh!V{Gr%yTg%B?hy^&0b5lF?fW0>Ne41#u0_d1)qdGcgyt5mQcm%dI!Qx&{ z=8piLrvuub({j42luxx@B8d@uSK#0m5g?(NS9KmUm!*5kEm|sPGRgIOP5~(DT+g&$ z(V&<*s?N}icxN9*IOy=~yI_TZAAv!&M<7z;5!k01_!)N=)kU;=Jr{SUIOy>{4t+kG zWF^qM)|~h!0U~=mw=M6}`zSy4a>zIV1i>x6RY5yT zI($)UE!(!r&+DlEaHsj(NuhwQz?fTVOIQNPU|)3)_Vw$}vL?_oj4rJsko>zrH zNeF;~P^K>r&pJq)HvUV+BDmzkIy+m4M8DCrh3+Be2_ks8-?MuP-<`gW5=3VdmDG9K zmqkr`a#x?RV5_8I&5-Q(dG(ai3EQAD(Rd~mzNgAf{3hv|Z0IuM4je&zl>}Qg67A#+ zL#)ae)R4<*6s{|XOR^Vis0>Yi65Z%CIf?G0dK)D8@mmO0(C@SHLbdL8>^&l~;{%-o3`@+JU%Ve5BlcsH5=bgZAPmp?v4o@xzdw2T;<_wt?c<>o$3x$41;-Lq#;UtWu(uBl0ZrC zUvI;%y#{>)D7X5!dnb#P<GU$4Bn3VWioNNR);f*ouA|YiLx4i8QpV$5x-v#JMe}Kv~}vqNt$(a;NURl zrYO(2FZRMuFeBFnAaZuReRKQ3K@zZ!a0^e|`NT=F^y0&2OAaFNoQL`6*NSm z$uaI3u?k|uien^|?5i9-ugj?PV^~ItN4Nk4>5f@ds11Y$m_NjLHpEJK=TRIyq)^No z0~4%)D%H(9sJLE3eg|~1yhLT$_k!{jPKr-Ne&t_WgCBk1@ofE+G+$fSjxVDhui_fz zpyDxVd%b?5jz!-*VPK5#Q}Mq*Bgn>3~A6L@|r~`l19-GzFZo-@>%qA zWGnpMN*kDq&E9M{fn%dFo_bE_78u`V9I8}bR~xkCFpso!$_mt{a(JO40u33+ou!c_ z1Nmp_TYV?=`wnn$$n#Yt$6m7y2DWh9Hw}esgh-69-7uq<_KC(*;^+(Zx!PZT_?=gx z__0_UpEVqrs&KIc4MX_#d=lfRG3oKV3@0uNMZsVgTfa580XxFO)r&RVz+dm$9m0)L zC(C&Wm62q>1QBehTJ;{|QmnXto*7{pW+2zHwFRvji}n`=|LmT<}s3z4)dfQztfuv`z%JNBBv-Rr;B8 zxTHT_?nFwozP|c4ocu#6iCY)35cRoyVQxc<61yaFuma!!2qo<;ONRsMdf0nFrdKEGRJLyT~V^&*7xhQd9L(2+$t2>UImEnaT0}tf9o|HgQh% zu(8l4Fcl6N32`!~`f$2Fl$mRx+amfKjO`}?R(uP^>6rhn)%X_X81eOFIhOkXeaKnZ zlQp`u>D0$yeRi{>*}X6H2+j7RrC?^PGMc4tL# zyl90mL$q<1?(wGaR^LF!x-@9@^bEHQS&@${-u|?%I>2RGTz9g3J$-EORrHi7)H>qSiKcvWx zF0w*4T?uW)usaE*bjsijq4q%KP+?fXv>9ttRbHRk7}kPh$c6#@OrI*tSD|h7>t`KW zV6(xJD$;pKuxvVlPD!|=^sjJLPMvBRb_Q2o=O)@u<5n`E#v9k&EnnMq1Cc0CR0L8; zc_fffRs5$mZ6O}^=Ji%MvJ2fOFBtcp?{_D+D)W-QBa;r&&g0dsqM;ceeKuCeBH2&nN@~d zuF6}+NmHAv#=>^N3G0knv6k7|0D%ClB%%2?Oe+UwYtN6yU#PF*(iiLvq6QbW?|SML z{L6;!K!!-OZt=!DmqtzANPNOOE8c~D=vy%T@5n5s z{i-?sIgx>K(SatcK)+XkuKN^Au^E1kzyjj+9WFfbQmKMPrSi3-H z!ng=FwRDUylh!Vk`+E`Hrn=vFpCjX}7{P_wPBv+r#HE(i?!AA>e`#p0WsSpbjnuiK z3INJMX9D7-U#%gDozjGI#!T(xj0?-7V7L74&)5jcz(fp3o0+UAQ&Ew@PlY*x`N@T9OO!ro_Y1 z3~=H!Xwe2zV5Ms=v=qNM$%TJ^Ni#w3+dS7ZnW*BG_Y*)C9`ygRdCf4fox}lg!DtaUu^fvcgqjv^8QVT;8-Tuio%}dTn{^JDxz2{o0?Qs zFZ`r$h$SaHx(`~suiWpM!qu)0J{aRe)sEvh|6o5e3sU>9#DTQM*KdONf#5mTM*I(^O=OLH#;RtLXdrf{|cF%#j`_D-n%~nf3a#@ z4$=zy5Mz!dTM{G_Cv%A_s{&LuvGD;dV2iG4+d0KS-n5LSz2Ba4iWSmAWzI?R6vBZV zkrBRL(l6JJ@c2jm%5%*-$OK-Jz1eEOr#z9yfli|tr|wM5q84H+QgmPQ>7|PZd(NS5 z7R)H&+(j5hWi+@mvaj1Ibc2=kc$ZaF1>S+kkAUFDFsBaG-vQeT=o}>GfgX%QC0$oRkd?(%@4HDyMeMywscVyobj`+|9Q;!tzRc&d_KK=0u1H-zV z4tJb-QzxD`BTsvUjFI8=y)L|-QMWexrjbh(;U-qs)6=+US@w5DD(8+hwGB0VWyn%I zDN~P2NLDyYNla~>sXfpa9n~C$bcNA-a{ByxpYOrY5j9iStn1X>(w%DYO&l3berT|j zjeUw>_qqPzW>YVhdFElYkI!NKp6wg1W38iEE96yY;aKJ{ngjZce#>~qZdWWvakMMa z@8l<4T;-p&Eva}MI8MA%<1u)n7NI{$p#aifN7N#N$#pgX&W41zp-N(!;6adDyGbej z+^5R@X9}K4cwP-O%w*=9ar~b3N!Lv^v;@Duna`w`k4Eg3hHI3KB8oe)jKB(nqHn~q zGG(&71&&b$Giy?O5o=^yvniWiGSolHt=cFw>ikS^(UMeitG=6#=CuAq+u6a}xt6nAI2$)3O*X>wwkHN41I&rIuFBlU3p=T) z;UK&LC?WsOgaQkqyVug9KBskg2O1?llww%MEYC?To6E6JfXR^N9EL^&L6)k&Z428y zB5eQ^piEmi@qvuOdC4j#l8Fu??K(nk@X&WaP z1IM-dGJlC)bArCR5hIPJb&S5tA$V8Lk*GKr9j$f4j(;X9cfIQBE7JRs6GtMX(fjxY zqc>B$h_nw0pkRSnr_>W{{1a(O=E6a5y7JGD0HD2xh#)lH1$7nS1>>2B>#4A>id(4N zevL#m7FIl}jeO{77*z7t1Brw*1Rs1ADSY+_%#G`(^TUb%`{bp9j?>OiRG>4C;z#~j zYg6SXYfcO|xlCnl%F&5-3fpZ-D%HBhivm-8iWeg;?KnpFrXk2RX$j^HLe~(nL7+wN=>j zvUv5H&Oc*DDs_D%n2h&bil7u)c^xJiGn;?%xu%UtNN<8X(jrbe+W3Wdma1i0+!pv( za~wOlFtuB^Nl>F?FE&5>KHyrSp62l>Q6;^Hdhm}2`Dr+Be$?+%-(~S04T-$+4AUkP z$?V#l2s6eqe#gdDn$N3SGLWf5b+~!*){rFU+i8y18Ef>15CbWnC5bWh@veAf9qY#eK0 z*MQ62ImbUrljM45>S$R^Day zTXTZXzHjGl@xWmPV;m4w0iY|qAvoBIZ#7@FxXWRWzkN?4qpeXYPl^Q*)6IWuDt4(Z zR3M1lYXjQ#Fm{kU^pnOj=N-;Pk@SsVj;vzno6!ZaR@ZD#+R~^_j_FM&*TzUX(pWiK zj2%;BrJ0t7PkvXPq?S%JMIuzmo%PV>1+d6bjL||Q6OqI^c5w!>hRgz)(lgK`yD|ce z+_>EbVjl+fgy7?`3zSwHC`p&zC~37$1`o;2xve`ffzgjg1TyD)b@Pv z?KKMP=36YE(z3k85b|H}MtD~OkTV*m>Y!EV$B+?eCZ9rxiXv>eK9Lazr8W}lhO6l+POeKYPR)gP7cE7CSh!$Ne z=-N!ME!gwHgJP0nwxoQViv9VuN!x?fDYmDTCf+o5Pvg2d!GB>BPc%c%_SE8?N5`-S zEMmwh)a&wB@+Ldy^^cqzTFX|iBBDp&Ox1I9m_b5#wVWvYtK$~xSoPNqD(S2t?|b9} zgO!r+LS2rJz~YYMU0|cO_6Y_kHQoc|ZV_xhxXX_%6g2K|9lTv%`*zZWm!-0<(V$Zj zAX4j;d<5Q{^RNbXh!R|6j;s>RVPQ1f%({GHX|Bb2Z3nj3%Kc&L?OH#Hy5q*s4|`{B z@GKiGg;Mo!;EW9Qwun#CK0O-hQ&EMG>mwEcufi{@f}J8DIV zYS1I#y>y0qsL~RUhiOTpI#}{CG!6M%z9yVDonyB!(KSpgG<8fwPCBkiJkLUl1Y5HB zl2>1&^v9YxO=I@%=SjsNrp?@7KFsoi;YUEZWdvSfjBM2PnxBtG*s^b0tA+SJpM}CD z6$y8OO6>&c5zz6AewkF~<^H84%sh6o2m@cPvaK<#E*m{~y#SzO;U$x-lo(jZEh&=< ziQzQg{TLggwse6LEIL7Zgn{G6up;fBFj|cJXR=x)^M!~NUnh%bx51SC+RA=|*s?Sq zM(k~uDW7{eCq||`+vD{=vMw4RIL02W-6Ju4iAbVw$(*zB=BBJEXNb?m1!$xoA? zuS$9`9-t+!oBe0MT(47JbHe|(EhysXT~8RwNg96y-fjr*?FP2&Kiz}e5Z$YXTG zJwf?f^-Fk=(q}HB^wzZ)d|=?uT}y

    K zH6|_KOE&D3#Swm5sS~0pmq>gH(n2m^z0v6&9%Ec5!vlXMcOckIRDY5XVj!1DBo1Y2 zJ<=lWu9t`o{}iFIK@39m_%?G~_$lIaYgxg`3!LM`)m%`0_mUryArinUY={Q3V==zk3AtrU>AfbRCb=%Dy! r;b3CnVxgns5aHnB6A%&-Vqg=K5D}2z5fBpm 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 D(OGio literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/motorola-xoom-with-wi-fi.2.jpg b/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/motorola-xoom-with-wi-fi.2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..86b55d28dd4c5819c05717bc9446a1e17f733f3b GIT binary patch literal 4077 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 D#g8kL literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/motorola-xoom-with-wi-fi.4.jpg b/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/motorola-xoom-with-wi-fi.4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..75ef1464cb8d68c5618b11189c343d205a786601 GIT binary patch literal 15111 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 literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/motorola-xoom-with-wi-fi.5.jpg b/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/motorola-xoom-with-wi-fi.5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4d42db43305b945ccc2608869908aa2cc11f7eeb GIT binary patch literal 14687 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 UcK$yiw?{saLl!G!Upz1T56z?xnE(I) literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/motorola-xoom.0.jpg b/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/motorola-xoom.0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bf6954bbd5a8df5db10685273df9cdd2ac0a4c9b GIT binary patch literal 26175 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 literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/motorola-xoom.1.jpg b/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/motorola-xoom.1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..659688a47d7298f3a03bc42de74c3633469c325d GIT binary patch literal 23398 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 literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/motorola-xoom.2.jpg b/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/motorola-xoom.2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ce0ff1002e40641249bc000fdfa522500988d808 GIT binary patch literal 23686 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 literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/nexus-s.1.jpg b/aio/content/examples/upgrade-phonecat-3-router/ts/app/img/phones/nexus-s.1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f33004dd7f53663146ac3f96113f7e775105187f GIT binary patch literal 16354 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

    K zH6|_KOE&D3#Swm5sS~0pmq>gH(n2m^z0v6&9%Ec5!vlXMcOckIRDY5XVj!1DBo1Y2 zJ<=lWu9t`o{}iFIK@39m_%?G~_$lIaYgxg`3!LM`)m%`0_mUryArinUY={Q3V==zk3AtrU>AfbRCb=%Dy! r;b3CnVxgns5aHnB6A%&-Vqg=K5D}2z5fBpm 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 D(OGio literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-xoom-with-wi-fi.2.jpg b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-xoom-with-wi-fi.2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..86b55d28dd4c5819c05717bc9446a1e17f733f3b GIT binary patch literal 4077 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 D#g8kL literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-xoom-with-wi-fi.4.jpg b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-xoom-with-wi-fi.4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..75ef1464cb8d68c5618b11189c343d205a786601 GIT binary patch literal 15111 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 literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-xoom-with-wi-fi.5.jpg b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-xoom-with-wi-fi.5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4d42db43305b945ccc2608869908aa2cc11f7eeb GIT binary patch literal 14687 zcmeHtWmH?i_h5kFQrw*Y#a#nM3j}wHwLo!qmo`9g2~r@%r8u-WMGD2;-Q8UaEo}PR z^FL?zoc*x>FZ*fdP0pJulexJv?`Gb8o_}5k;43RY6aYv_000u=0z5AP|0}DZS!v`QCBVb2K4$+0TH4Cu|o@Ja7cf7{fbK=&TRuektZVQaHw#H#5E!-CV-$sS*JZjC`bP z>E?2XAa%gwP@*MDwqu^m8S zByov%988ApFln-Pv?JvEsv#sC>&e<5yY**r-ro(@-MqEE+vwI7m;3im(EHhmLPhX( zw;Q}GI5DS&;hGhFiR(PuLS!fRi{DWvd zmek4*A}kg!Mqg(7WgKn#8G0hw1SfwqeY1us%<20zl*xND^8Ja``B<4sM@}5*rbt{R znnl8)Nw*k%#pyiJ;%+B*&U>@u{fXttdE9%l;E4{GYz`}_9fM!ArQhM`J?@)@2MS^W z1SXkuzArGU_{D5rXEoL5K)?Q(;IzpYPXUN-?gnGDV%%b zHt>6GZc}UGTi;IH=9_Qe^nQwvo#mU0MPGMVN4Ha+dKaC2V_a8cw?NYuww*}}O~B9> zkgA&reFl&xbR<973JWgfwE&(0fr{%YV**7~1`}%%SIQ?Z7k4!h=pBjFU&uv-QBlC8 zw3b@&M7x85#aA+JpI2U(ZY6X^{=xKHIV^C@**{IG$x!kva?I@ZL7FW_&(DEl#@aCD zJvLEjJbr%$Y_QSdb6SMhW7m0Y(LE7fWi4tqXzWIuXXv#k3r{`lYzFFtPOOa}_cBb1 z)3;dF#ag^rRJOR6c5@BszJ6^MU}vy-KJ_Z^{VT8C-;;3-?*t{hi^R1XlU^kFXbP&o zP|Vsu>*e}ee0n-;A%(0Q$l%-AyzhTXclJ-fR?h+#0g0Wc7kqA5PwKOq5{xL(n!wg@cht0`#2c`<0(DAMf+rWfdvi6S@p?(CnKZcwCu-z`* z&K?OR%Za2%lD{>jy~j@n&{H(ey0U69WX!j21}9gGNCf(kO7Bz!v8Vq~ZhgD1R>qKO zRiW(aZ|Cc)>_!4-GPWLHa^hsP8tvh-j9(WkWvw)C`Q;K#^$6j;vFN3%C(F3-jB#;e z%Ir=%i^8T^lx`d}*#$L>^oU9d`h-0Lh(shYG|EY8&-GMVU*5;%aOK|JT70IfH^^}5 zYq)&T#|Jji$e2kB|M{yZq)TYr({V>tz3aB7;$Hu(cQ5xy(VE5l(a}F|VeKe7bSiYivYkq7|J5XO3t{cKW&C;lYTTI2ZKq*~r{f~lv*VX#wmYAwxr`Ro>lka=Ht&$ z9^Q9RCtp3{p8P*37cR+9t~>|ZXMiu&J%8mY1zPP+osbjV(8(Vf zKkvue$%9dF|I$%((cMU1uQkV*{R=IPPtHR)e+=YqXGMH}rfay>hA+Zd&a3u)l*nSi zXiQE!1xF@wW&L+uRD`{de)97HoF#)#4H=^`z2s>rih;EQM{HD%c&;yqsD8be(p&N~ z44V*P$W=2aaO;sFfp-p7f)o!x4$ApgAk?d_du6-oPXV@HI2&EmSKIJK>Y ztq1L-01#hhSu@adLu+z6kTpLb0%hLmMW}s`cjK40c`&c|QOdn0LEKu^#nww!_NwOA@0Lo{{DDVpI#HEXo<911{gvvR7F#;=DINsXb8WpY9E8mK zcfpzQHBG-RWhx2DqO|4QLleEWw~~vw$_iY9?A_lmcUciT;1ugpd|f`-ekr_{Fhvqt z-QaQck|!_60;kV7lT9Lyn96Q6=m=@77m^=o0`uZuq0--Z(MOI2cf z{vjKG>w3&ls#Xx;r+j5dX`mkw?z7=fS)yr8o`ZMIRV}!vR2%Mw@-ERB5`Ue)^hl|B z1OMZ`nbQ6Bn!Ri)9WhLmws?hU7*_3L(@sUl*Q8WyQ*B>$$aWq z^@2>2lRE1~$)1AToL7bRmC^Ke?vLbt`T^lI+;-hh(I+I@DuA3T=c4U=e3mS&n>HxxiG$hcdUWSAY#i+j~aWgcYuRO`2Zp zuR|O)qx-H$#&!PVuudCWr21s}Y`*p(W$w3bp)xuAGrhF&l%naYTpM}tjB}(S9+Hf! zSlRO75D4$BPuZ}X_)G4~LKaU9>Q=ZK3ICe~I6d?HVuE+U#!9@?i~6 zdwd40Gd!8oK1BYozxR!Z$kT7<^h*sb;luIk3-YcEY)vED&EKhRBvTCb;t2N$8_2e? z_!!eESgoxnC2^(nP9XChHwwGv@g?W%YDPsILHO`Tk`v-tM@E@EFAPFKyOYG>58vx+ z7nMh9J7%FPwi>A2iPXQOfuRByTD&UqCLfTA!pbyt@4Y|OC0i%3Bw<|efbc0T?c`YT zYWdRnLy^V!Nqq~C>?f&W2mH(`8beKg`RQ3V|&|C z#v+Hw^(SO3MiZQmI_5<=kdOFn~j|3ou48E8AS8t>wvJ5`2om< zO}OP`Mf80hJ)b*C1w}2Kqewxr2QCarxYQi8`ZPCAUZ2mRa4XVdchSLSGob!+Q0P;? z@h)1Uq4B4UE=MOtIdeYpxle#v4 z&Ue0Q_Zw*qF*ZmVBO_%5!s^G$XT%<_^v*!Qs`fK;Ri@{^k;H)pjw?!ZXZTA13P zK7qgp6KNfvTBLur6yL>EGD7%Qq<{YF>&kM4HzG4JWYS%4v=3u^-(KW($IdH&=TXS9 zvo|5R05#9S2bDx-I8AX1b5=qdg$HeHJ-K&d5{d~Why?>ChHT5Kms6f2-19qWf#cI; zcGSrtRfJDZ51CA@Y~w4=mjv|2rX)q@{d0COAVGzwfjG(B*JnUij`Cs)W6N>s%~%*5 zylGxZBkL8{Aly~Aij<2C)ViRHRyq?9SZb{fvoT`(bN28%M}Nri>ii+e804G-6!ke! zF+YsebM7Yhv5H?>pqs3l9Qe+ZNHE!g?>8*Iv9a{oJG`h&sD&GYu54eD6}^ zMDDy{b>QS8ZYgKY+wneKiE@%K^CSNlLw10sxuWCJD1Dc2jp*UX=q#6nYB=6+P?m7j zV!b&y|Ln)>=pkBA0Jx$mC?BMM*c^}R=2z7L02jZWY0Qe7b86>;^%XclfW}TKksoTk}r_6 z5Kr?BUWle*dwx}F`zlSu2G}Ns9Bojj6Rpu4@44{m& zam3)_&eA2*_bc;?vlO4GkQS6NcdHC6g`fr5*Qkbr3Dao0Q%H|Ahkt9QIc7tI5-4t7 z&PpXp@2o{JxJqcJ5qvAW2=$dQ_Z-lw{OP=zY%*x4a+h0cIqa|VZQfbcZz z5a=vk_ljDpWzlAGpmpaYa;3Cu1OxW0dEmQ$BAx%So zc!UOI6f_4aUqjJ^X=?f+_hCFr7qo|I;zRr)S7q_!H9=Z2r|+Ht_5H~`Y+jmf#kdQ= zCnfoui}!cR3e?}{w!_qi_#TTg)$HJg@!jMhD4%)Cv?K?E51hqc_6ld=ZDEin?bI)v z2sdf2V05%{Uyvt;2Y6F$7R7J7*!75Y>g0B`{6tAiBnVOiIA16g0+a#WK`` zpM$d@;On6$`TJf`G9uA<(8KIUL%>UR$idUc??GBor#g2kFEcWCQ=VkR#L%Q<-n=T6 zzhiqW{JQmRY%h7|Cp<^FAEc+RhHtg-1#bW#6CUtc4iH6!A(p5HVHJ))W%0g_^~N_2 z#Dr46;6u*axf)s^49ozKQL8^~C$EO`^oqsekX2U#0AgQ9WJgxJVM_=zI|)+>zQ@y_ z6naDThSh8YB2=oZ=AB!ef4p$@bdP5;(i70W{>9wbyeC}jP(JK}JD=Y~jDIn%U*yYM z*c;B8k4RPVauDazX>K6?TN8*c5SbiBhMv#__!&mXu_Ygy6AS++I}<~FfOJ&=AhN@u_uv7N!kH26CzZY$leP1B`jEU zrEmADu7sWe{f#4jn5vYg0}MegDk~04#@l3Fbq|nlPFk~go&m(gGQQk3wW|?T7a@5r z);22Bbn4{xXqGmW$JOUJ|yPWZL*DTvzro#m0H) zHqU(ZFzhU)AutDM^gkM|T*`_R85}~w(2s*kLS7=+zV|i8PLdJ8j3{$Txe2R#NppO9 zuZzT4ei_D~md93Jv~f6ak9uyxMypP0F@y|k3otSNB-D+DXuK{?)%{DnA@lHS;&i_~ zwZ3`RO81VY-mtSgi)6#>m04ZD51t}@Pvh{9bmT^&cmbrX9>y}>PuE3DV=!L((+OwN zR8HaeA;)*hrHi~>C>*%CItTOFsda6aOctf172D}TAv)9o*Kq|2eK1KjngVJewiudR zH`2Zb{qe1DcZJ+}251#0PVuW`TBhV9^1y`?9%5^Xl49?N^95mis{YxYdGbdj&?86aC9H(5_7 zyF`7`e4!^cGt7dkwaDLuBt=yJSn@#PJWFce|iQp*AodA&g$r(l^;5|tG}ZS>7xycpQs$>_o{soeN3%y8jNlv z?kuCBGP(L4VD=1Xr*kj&jyuguF@Ez5XtjF=Og8+oE_WN@b+}WHNl*m!INX#vvO7Jj@$Iktotrulp)i4tY*q$G(gYgj0XDtinjFQ$%_jy4Zyaf7CH*%_5(b-020Hu~rJdL2MQh!VC?Kbe2 zc7U?BwUrn%x3t(&`E0oxjgm)Wk=v?uA(p9XKfJWhajI!Xds7cfHCmB+x^=1)@w_2g zh4o2HCu^6x2_#{#R_V% zesCGvOEI)=mxON9hd-Cyi1b^;jIKpwv<>wlUQ1pnsM_I>ZI*=tdWL>N$X`p2KAW z{HH&fScwf6u_&=ZWsf^`IkK7=gqQ@ymaRG&B>NdghrRqyAt%ye(<5vG?AX!T zr``A_<$f8X(I)Z-NtNBoB@8|K>NB9@c~}o}(*;}yj;XAApNpxaoJLtFMi13)*-=g- zF?@;a17d~&!(e(Nb%bzNO{{Q(CajnkojiRj{pflKvdJOhS1udAi1 zu+}~!J=O*uovoqA{A{ox!yLP+akv>qm7rqfa;qHNQ|Pdn!2f$g;&qz3X}@;+Dajfq ztOonrZ~H{Cx3;r>o?yu<60i2p(jtFz2dyoYC{=@H=#Rk0U#~KVmYUrzXawpo?>Jjj zzHSLuv#As}WD+{WCW?AtUNQ3w~o5mqpEhhVe7Hw}q2n>#%HF{H8&LFR~R)FvG8bo&Di@ z96GMcG1A;Tc~aP<$ZiOwn8HKEli5$amdh&aF>YFm`1(GXD^l)p!=IQHFfy{0Da?c|;2CIEV z##hffZ}#n=XgIQ-wOy9@1hbExX5opZm3HB16wV!69t5s!tNdOtKFdRwBU)DXM?kbJ z&bTbpwlE%*E%Qg>PfNb?M#tZf0o@`z#0Dqj=DVEb18$idQ_RN!Bs% z9|ZQ9y7B%!x4Mcq8BB>|f|0go{`62=y1wY=MB$Ez&lL||gah=LIuw<9{w;W;I$D=V z^V(aHYtH_%X`(r^$b-M7T|D~7nDVaAO@WbYefpSvqF1cDT%_yFJYcNeLUb5D6+e?| z2avo3VxBC1Ti)RJSgs=(9j&FB6y4KRPhCue!%t46dzKDGAe57?RVE~s!>&0NaV{pT zX+ToZ+4qQC$F)DV<(sngYu&ffLMIB7rcC^HolMy_Jg;u>Tr>Fj;gzF;8EM33V9xzA zkK);k?nyu8=td2{5i0IR+UZY*IMeVQxSSyVzuY9K6VFS8eW;d73)-}&!Kg^{#k7osvRidVskMHSyjhOjeyHg6B`!I>8A7YA6J))wiuVxrv07OyTKs zBo{=eI0j`D9zU)`lste5@%ZvOwOl%EV}frRNzNjwB*X%i(s7|rA1SBayA3xG+sJy3 zcJc9LQRB^I#c{ZmRgRW2OGh&Dic&yX2wOn;)DEhHr9CRq71=X@E&g&=_cSZsl$_pJ zh9y09FAvqN*E%I}xf#sb0oqN2B_wR@kmb|`CaDsZ3_Ye=ZS?@{VJ0PaMdDG!F`*`# z09+3|O+79%eyHWx!u^uQR4-<@zdk9u>$vyFp8d#_y@_gb zTxJ$D>OSDD!R_x}Ju&bM5D;0@GBC6=>{uh{EW%qHp+9_-S2MszD!d{r>+vX47_Y8N z#1#50f5JhWC;%2%O_34mhZl0EVq|Elc{`^otI6cp84;SQJ`$t%U#zsTdG4cXQrqd` zykk2))NAfyht=aT=tF3}jH~pIdX4CBWuV#HWZS8h%5vypnX*slAMDzIy7$-$LApK# zw%mW9vZ_sP+Iv2uWi==DNPyqU+GRz(aOU!Hq2SnHst%|I2G+Mm8 zSg~oV^lmiHA{|u~z+&_M#=C7jK1I*L3#cS9Ks~W*u5??ojKJebs8Rg>I-HoWPc{bU zdq;nivRSA&X{aIOJ@Ac*TDJVS=um$ptNR;Ad~-AuF>5sz?-U~X5(6;?0qrg6#3b8T zhTc+YpWoBT{IK5U0!#K9pBX*@r4M2tw=&GC>Ee2F;0(h6L})d&2RRv3W&-Q|X->tF z;IGXBwJ$KFh-9soIo3|ujiZk$VrjF7RCOaBNV>-*=`h{GW10SqvQ6xk`+plwHr@rd z?tH7pAM&WPa{hY(>^TC{0;!nB(f0fEfUfBswHV)x$o7A}Cp2<-=4QhlM}u#5No;VG z9#c`59jx4wjuvdSklDsI7^7(8BAXD{<`ti`>+&)=Gn`+asltgxoql{5tIMs(J!!aJ z&;gE#RBu6fqRZgffmX9v?xuRY%UJaV>s?#-I5O_o1uKPg$vj!N_a+eSLV z1UypbZ)SUZl-BGJG>U$01Whh#xVDS0?Z(QW*LLUHYS2f~a@f^CWfdtXSy+@CX}7WVDA)(iR5do0)D)(%wm557%iT^+RJZzsjBDQDZ}qTA z9-8=$voHH-0g2ieB+DTDNwQY=iD=2IiSQwdq#fgU+tJ*VunW0pogI1Lu(OhGG9$t; zp*;)|%1PRyNpX3DnE5Q)O}PdXXG%M)7P`nfd#cI?#Q5sd;gBk2%p?JV)!>{maLAC}*FQta5;T~^DA zVJKWIfBnw4a4tf(Caf2Txd8;Zr%r58T=U%x&1u_VWGB1PLs6v*6L60j{?K1h7Yh0+ z1mTM8q#SC2yMD3>-A{VduI=99j#yeo@w){NR~+BTbbKa z;Tfx+o@kOXAiHWh7uHZlZOtK@Lcpi3jGl#XL-<~s{H}-Q0h4XEIh&W&t5RYj2y*IL zA_hbEF?%EU5;N02c(CL`0ZS?KHl^@`l@K?74owth9$feZj495l9+=^%?4I#*ST6SC zCHwLYw_th}iDm5GbR0up9EmeOmWlsl)0ttON_jnlV19CznzrZ#9Ez!zOrL(H*K{U> zE-^_Y*gf0qRW^`>)T6)kFAm+-Kv?#=L_I1s%Brw1F$TfK^sK{1iUPBgu-wGlJrKSI zaXed8+NNGERM%2dbsUNZ!GtGy|4k{bvK^LTGYQa5DrdFF2e}=oswNTXN@>P!hjWck zdNi>aW4@mhbA=gt35LSKa$g&xI-y}|@q9sHV4()6&# zt_QH02)j>7{%hYzJrK%`%w+hpw5e0(q79tNfZo=2 zc+1J6w}pu8B4^MJGs!~FSrCrF5?z})ovd42hDdBnn1Lli3g!@m#Q8QfrI?4=-FCnc zj+A6jm5_Ad2uF>!YSL{kv9oq!hF5Or>}OkM83|3f$RWY7tV2YGYl+X1nW|E&>6;rh z3xOw|9O|n_iVc%ULBF)zYqsB<2ek)&y&!)EC^#YX%L6@E<9od#l^=fhGxRsSwV02N zTEO;h2KJ7k;ta!83Wo(zMsVz#eb4drd#A+4cIJnLP9Lc-!4OB%__5#ltnFkfTLZ#O zx7tbbh%oq~vU^pRRKk)9_Z_|29@Nuqo=O=2AC?&Slr8&DiQbh(Wh~YLCBpK$-Z;y} z|4N|%$KT|EPLxzfuSY@ISha>{3WFy0O3JE(m~b6>f-s_0Lc)+r2v}Cuo7j;^M?Rj> zmV4DQwXYs1*863~SqO|ce^XKu$u+QaS2`)p^aTl3XIX~}C|kkZt>Ci0CBzwe`kSbz z$jiLybS*9%WzT>%7f~%P-l~1qFIYo(QqdPM3(*e{5_&Yaa6L;de)-RDBP$+uXfy7j zeNkp}HqoBsBT*!AfqeLaqR4Z5<-F|dXuqsVz=H7-213!tB3?5N;m95P3268+q#&hy zCM3`Yh9&^@F91Wgfl)Gm$g2RaBit1oBWw+Ss6gRkWeR<-XpMFOe6D_b)GHDs#4c1t zq?|e9T#ekY%n*K@wvu&G>9)~9xlOjnNbdS(+-M;QgL&tI9FR_!!OGmd*%G@<775)C zW*)^uqy6rR=Mc#pPfy18OWjTg2FoB~GU1oCFWl*2t5TZ8TusSlfPnR!U;e@i)FzrP z%)Bkh5>V(AgjZywa!Zy%;Ha{A_IOHTn|O%o1bEiI8$1*)2(=LmABa-Yu*VQ9bj!D} zEazvjMJ2*gcUM+J93l)X+QL*!xk|+TkcLQ#*o|%G`J?pHd~E&7hnaT&AFuJd3w_6_ z<(;zyX&&l%!aMK85KQn04~I?y`j7ZbkR)Kh#^?tWzb!#a0*?*-6o4>vD}VMCzP zZN+@zNxYV?muAK>&fA!J_D?y}r*^7kZ@@isL9A9=;FOCbk890jSA~!a|DjTRbF8!< zg@Jw1Oa{DRLa7QZbwG2^(FkKJb4Fb%CAoQJfCiE)dw>O@_skL`>ft<^{W$cMqnSaV zR7Pk%@y91)t#77+g%d=G|2E)pJR!ZNvFJ2fW_Ao#D{WCkX+xnKnk{ik;c(u}bs_hN zH277$p#VG$EFhRn6+I-5xtN$eTEsj_wBCR%v_MM}7v}}; zauJKNqsdKe>l2M5DeEuZ%EVT+eAImW7(5PEUTpQPI;H8@D6}Qqo5}fX$*rJOSVclz zntYs7s3pOsgAyd4dJ#nlsSpz|!KNJZ(i8@Po?7|9aErpk8NMt_0}=uBQ5qptLj4#Y zF)#M;P3O!b_$9QW7hz1i((`yanIAK6VfyT?jy!cM6P#qN0oMy1l(R?84d$4YOxol~ z-C~~#qmdT%>3d0=yuU8Kjy}8C1XnVg)+VVc27VXtvSGuw#z;?99;;jVe&Wa#VbQ`_ z`KrFN`lcgMT8IcO_xQKz)tlj#9G`{s{RRirLcS_DpV$n~eaxFeWXwe1poKPzlIWM3 zXF$Vp=W$IpZrD}DzC4Axb~+45p&h2G?2-7HYs=5b#aKhMzK74k{!>&GnxMKg?g!N= zKhSWJdY4tp3i6cgha=P(y8!CFWI~A#b|CvuwnPkmqRgUn`us67p9DXz_~YnbUNIKk zoYR6N;`#FZ8JenaO#DzC7Kr{(pmc~}^oI8v#}S-a?hl94AEo7YF<9j2ZBjnhAkG;C zl~hxj3R!FyF;6tNc$CvD6SE?T;Sf34Z|mIM56Y_3nMtA}6gR*T&WDuIQpjc;BD+_= ze#t6mgO#d!n44mU=B2Ehq)RV)qPc@NBEz2{GraygQ^N->Du;4Py?$SVo=Q4lPz4`m zXkK!4rw0p^DF_rBF(mxk(Ae`UY-&?39J1Pma&BX$qL$CXH;G$Clz}!??)k=KcgRF& zm0t|qHa$#ye&hQ)is~A{LThETpN|DmNX8>|9CM-i z1^91ZpUH?WEcfLK9hMiwX{06v@GmH~L&_agM?P zY6}?my+(`@zoM*zjm|fbsrwxBh=>KyAlyvDDr2t`U2Mdsyp5I+yQXQGYKPHv5Yao$ zRcZWXVTu7CG?DF%DA$!8;{83s-k;9n*8L*GNY=5yeW1dyRK@oUr_4`Po=(NyQP}aL zzk|PI%TxzMWSG(f|0P)q?xoY6;hqS(#kry2uAh%kc<^J|Lrwo1fPOleMQOL3EFo!i z($M)>I5B%V5q`_g&?Q+`TflKl@KR0cgnQ_Qf2!^%q9XZ868$u#Q9;}@bCk9w;Kz$1 zQSt8m!N2I&Xm>^8fWcTtU9KSD z)>_|uu7b?@A?2WA&($#EGK`tF@WC!;l;h=-<|nvAiF#c1T9M*a5?G<}CRixvQKd-| z;yD>&?pSbiZx;j+oVp<$I=v4Ln=%zYp?Wv@J5i%jA2C={_A_wL!nezuUcS}3d6dMG zRJs&4yc&}=u=P-_kz%Z{ zIlA>H-V|5e-+W3Nj%d^ObP7(GeXH5x&l2f*we=#VYfdXdoNRTSQ1l}nBuMf4T5*)B z-~sVk*h%!qp{S8q`-Z~%74OIjhtL>mOKPOd*an*Nqx7T7Y2+ng4^PyZz*spO&XGbCe>hQ-3&rXfRs;Zt8p@ zlvWWtmWtc zBWvgoX&?fEzEd4j+4h$A?}rNNG(qUrQT1bUn`U-!zdF-SDDQuhw-;R2gGzI|)f6X#Y19M%yuB6f#?_S=&Xb(<|S#GbP zPT`As)k5A$W1uDF2wcN*<`CP`$16|CX@I)U4UD@={L??&@!QR1l1Q>%YY(aovBx9N!TolmAF#4D=7 z&Ae7(Qf7kk?QfgprJ9yyp>ZRQ@mr>y7crdk0l0>A*3G$+`AdF3D0Xi}JwZ*|@0b)& z_?7xq6O8KoKAgspua_5Kn`nx)EqF^ilB;={T(a*qodjg6L@h$tzP-ZfN+-fwsH))b znm;Yi3N@mpB9eX|g)*1Kerd_F2?0Zl2^nLosz^Q!QBKipQj@Fk1jKg$2M+=cR~&oi zGU^s%^5*lBH#wKcMY2x88fN*&xQvQ{DkPsfx)^MuDtY0P zhcs3@|IzWKQMVJ)`}WHyaalr>+Ny)52}Ol-nQp3Ho^hy-OLT~~Npp+n%l%ahQ4g26 zYlhX7r2^`_@ZoE-<@lKO&`*04PoKa^Upzzd!bd#c0X=Pi)T~ko*TQ!%|4~+VMy_3e z2s|~bM8Yw;yN+XmREqtcI1e;F=2Z_m`q=wNv^)AGC)&=oq0IfC4%=E2f%vWp3%0i? z%`y!}lA!@C3 zfwnci@j$|-_-whiy|E)x5u;Z$2H?w0W`ogJrhePmOt7E#=hWH6KV-o{R0pJB=a_%^ z<&!K=c@+Ll<(hqmNw9FSdjP-0%cJ63kl$+7*T#;%h)gMRq8tfo)<1SZKUd^P zPZv4euePMmS8rq;U}ZzgKRg2d#Xx@>NgUfZEro zW8>w9l13Q^ob@i^k*}8e#mAh%(YNjLlnZr>jUvs|oB!c>6}?`NA5@0xy2$ma+lP6N zwAupvd1&J8Tz~w3n8y<8on71|f{N!Gn;qLoI%$YH=x1C11MvJQP?AJb)IVOit+)vlr8y2K6pEnw+L=08hjC^ zd|zV9hPL7eccDrN@aKsMYJv%BdYrt|)j)s`Ov_TkR8vUSqFQCJ*u=^HR~=E+$Oy7(}& zZX$Zk)StG8RTQGvU*a0-N?S+<7BQ z`RK*G1r+(n!pi}96>`7KmPGqDs!kfJPABSaXRV11wCagWEZhYI*bzX-DE8r&0f7l5 zmS z8GjxqB6Jsv}<- z6^(k`P6h`8km_SHU@*fcCANU~w9|3BJxBxx8&kYz*C01GqMwU8F!icZD z&lN>nP~Gu$5HR&hD@p(V1=})5A~f5XVB}Xb2HWli^?w6AS&w&I`Omu6rx?2<%m0=W UcK$yiw?{saLl!G!Upz1T56z?xnE(I) literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-xoom.0.jpg b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-xoom.0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bf6954bbd5a8df5db10685273df9cdd2ac0a4c9b GIT binary patch literal 26175 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 literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-xoom.1.jpg b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-xoom.1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..659688a47d7298f3a03bc42de74c3633469c325d GIT binary patch literal 23398 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 literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-xoom.2.jpg b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/motorola-xoom.2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ce0ff1002e40641249bc000fdfa522500988d808 GIT binary patch literal 23686 zcmbTdbx<6^_b<9+fyIKmlU;%n+%*IX?k)+C;O-J!g0ln(A-FpPT|DUGPVmKHaSfi! z_jl{nmG|maz1uT?bXCvvIn&eK=bX>^^uIs<5CHu5a*A>Q6chje<@o~qTLQ=cfG=MB z=YB4z&o>$d8X77p8WsqIj)8-PgM*EQjr|gr5dS4E0WLN+J}Eu{5itn~2@W0^IVmwY zAu$Q@e>y<{KEH#ChKYuTN&FJ~CGr37@~;a(fPwNAB@u}73h;se1xSGMuNOf3A0H4S zJeHK4^sxoGd-D@GNGxi_b2=jOzFpnthZF|Kf}JVLI!p} zxz6!z5rl@0Hi6HGbR{Oimye~7T~X+BGw+=D=@QPnk>soCG^%csD06ydHhQ$Bwpmv5 zp3zKXmRbTU?+|M$n@mVWBVeTIT*oUzRhtr&l zO;>c)m%6o^DZrrnXPaqI?m_ghQ@}kVYhV5s>y|Suo>Up%ANowVh@7RYY@Em8Dqnu|-(%78QL}_BF+3X{-cOqrx%|^=}OD z2!8SZ#T=eF!k0lLUU=e1!~bv~=Ew-C2w ze>fz2)_ukOTzA<$PNs`zMnefFGavXPz5Wqy3^yWk(c_g2KX#f(EDTXwv1${YbcfAt z>nQ1XMo-O2nGi#hB8L*$R82U!~viQ7O^hw(aVRyf|vRc5i1Pm`0+;IKdn8)NjEt z>CIMKq+3vF$Zkn@w6~B?=_^aVX?dH{<1CwjPJA1Jc-?XE`PAm?fSsfGW+^*ErIi5O z37ui`^PRyv63@bUk6H&Yb?pSA;X$>L4|*m-{=<%69gdm|4a*v}F_6qT-aZjL3KnpX zf9lWLiO`Lj@l`1&T)OL`IchN|ulcNRs2aL^G_+wX6k)-H>Wi%FSO?FYQi!PE+CD>jSM5QyCpq1BtoJ1vK< zcXQn2q$Pr4E9+{WIF~x@PCIopT)iUvtYm~$Z-=pfzpcy2KTck$2*))v;MZ@KoCJe* z$b^v!Ba{)lv2!a&x1I7i9&87J80@nZne}b_XQVFxaQdIMakFvb8JH$i-FDsEZpK{F z=PWhL-)u~IhY-?8-q=#d5V@-lH&;4wPUh(Dc*(@92+{vWd|pld<;&2~k6-NWIWn z&~P_P4CKN0)z^u^m0`SrvQYocyb#62adzAhCwE6$4i_}jJ^sR-uaVG-p)N1WE}?+g zNLt19t)RsW$@UiJ2;!YSt=0dzlp^T7-8rE|qgRL=NG@lJ34id*tW zS;mOmEj}5qVs`_{6Pza6g7DityBL~O=#-drw?X?xUXzmgBC;~A)RyJo6&|}=&#f_F z2bFp=peAhI?Xs}gqcBuY>UEuI3FjGUq?`IookK#p4a9%;gyDwMz|X)9o9$Fi zWxbuM) z;>&`CDHUIl)SdrE>7&ttID~pep@%Ebj z5;IGFTIFxY-+qz0GY^=;W40e7m&pGRp4U8jf*fS*N3G|Q45Y4)ef$=R%F3Kz783U0 z-0|zeKRU>)zNoTw&u>}KkH$Uq?j|$?68nOBifgB(0DmV@fj$HedT&3cw?tn;dQhnY zWJ(;m)>5#raXIVy;{kSh31btX7l=O$$?o+kIB1I40rD+f%hr6X^P*PTZ8DXAS zmJ=^HJ+ym4)`V6?J}|<_(DJGOV4vyfJ>nxLvg-?)uI4_RlXxtH>>ai$j%p(R<~*q6 zy;HCU+ydSWNW_cG@K{dBYtgp3YesoZwmE{6P@?UWpA?DK`bgwr8Q(!wc1Lye`;VKF zkr-{P&%ktEt{e4qGyPq4{9aD7#8jsGjCPu#{yx%>$!~FPh?l5)Y~Xts$@CpvV>RWC zv;L5Ynp=5M>=B7^UZa>lEhZ45M{7M83(H%SJdwV`shslNrMk@#O_sVhe&hagnX*ZF z>6jd)3Yv6MkUW!kY_67r;$9STophR@&m%Ceqi1uwj4o>|cD6ex9QN2{`gX8?Xj#0{ z&p#98Q3qT}+`?%=18iG&vAL(0lrmI{F%&fJAJA{$uiG(3!HFm={09(7PP#O(b_UZQ z?IJowXLQn9Q7b&q7K>7jdNLrO;$T#K7i8nu*Q2<8TH5pl*%Di%&7Z&_-oLQ}i5Axw zc&KQ%{4e$n?ex-217%&0 z#{DWlqGh9A-6&j)cwS_`xGa15M4@D7m{JfDf~yM3+vVi$-PHS#CD#D$Sne0&+j=o2 zH-LD1bUa(17aILwklVfGR@Q}Teu5u((An*hK(+3*&Np)W38y|@n1)M9;oeFKy-Zw; z*#6-kfDs6LQz3D$Ru-iF3irRFpbnb5H^q684o}Q@`GDO%%(XIx@C&+`4~8R(8#Ub8ra!gJ>@ zYE5&5=#46dglxb`mVBGfBklA5CSjBg9sqxjUl_fho7GjM{xA@zGqTdNk{E0aqKBg~|@c=Rt=D=gOxu;bU$E;Jii za^Au0mXG~I@hXzKiMLv%^ar27;9$6p+uR_D6A@!T_h9>2Zg$kHM4sF6l-Py*pU zk8zfp7eJJ68$5oau<5zhMk!5a-cEP~cd`<+@wsMb@Vt|6PJ${jM$)F!8COeqH@u(z z9l$@twZ~fYb>MNn{m1jvGPl9G`4Hd~5?Nv6O`!9V&Wh2zoXaQ{c;_Z!~xXYPQ zTCB;Ba&Lq3QU~q7`cA1xWbimMi<^~;aQuNtWKfjHcwUspUapgINtcvbQReTbPn+c3pj@mn{m=}?D66nzF+=|j ztgmH7S-BIP92B6BcyGnN<-8j`3pbP1B*)PV`RHZr0UGgrDtlLhtHCbMP1Jm5bIwW{ zH;~XLs9esesg+KP!Z7MQY%D^sQ~XZwTwPsB5()#~}M1y$nJtH+@F$Ew@F=4S>)X;B;+32y6cR zh-no&RlI@3P+{fLPEAqT{9ggbk&u%wzgC$UB^Pc=s_FwnpCvf0gG~cGM^-!?P!P6<5Ao)4rz5K*YBris=vYcv&xFr=)H6|-kwT8(Y9uh633O1H$UbP&h6OOZ;=+S6E_6D zyU-yxYv%i`NA&vGcq6(KR1jK~@9Si#(OA7Rpb|ORG=w`RL+<473Z=R0j zf?!1P&dO)KPsHpoO}A|~1A9dVTkUv9UFyDC@v(4bBiq2*wnqGx+4kdj8e2ErQ=iXD zpJzrpMb&-}H;MS+4Bw`GdnF{GuDC|H816sjpN!1b0hBmxVeN~Dbfa8-xSWy z`Ssx#xQuEZnw-!n8^7$w;we2N;Ns=*bNl?Jg@kY>I(Mh6@ zk$dh`)8buO3%|G2SI`jtD*~nrP(?Y2y&-WdSzpbG$ZvK) zDNRmP9L5g*t1zA&DT8bWwEIyu`~XteZHUJgF~hm*U?JY8YMR)X-4a6j;+qTN14hh# z4p( z4SKhG&ewd|?`86)P?Tt;p)t7D)=#dou_f)j+)T7#l!Ch@6k91YUI7eOzgAdp=bzV7 zw*#3u;OiRL{jFX7ILw;Q-oJGef=P8qmc!ohr|f*8*~h}49zEEuMV{Q|96%7hYkTE8 zN<9yo6g#zDip|UL>J#`Oww&=u{poCLEEjTLY-U*9vb%Xtb@qBm*osfL{D&Isori4Z zCc@}pwyLR4jf}-gd^NJV+{x_JwU3+bCRkE-Z?994MhXvJEPL5w96aQkHSjF$^I5tly$(Sj!<(3rwY^#%{7vgX} z1v4l|G!|A846vuuP*OWLj@x@PQ!RQ${aP#oS2oO=sOX5l0H{*WaxUlnMp~xxb7L7Rh1Rj z@E3+P^c_`0R^y$b-?-E=oj25%{X@m%){07J({X~6U`=~@WTvEC_Tj>q%9O|PfS~8- zKY*{=KR_95sld`o3Tl`h$;|YUag}_0#gW6O=Mh|x*F4RulYT`5kv;k~_s#&40AvUS zGYoWj(?pNd&s)AUD!ojB{R7xl<)&tADl^5tpKtm`0L27SIr8qcQ-9emWQ5)P16b_3 z_J~2w;9ACIMIFjJONDtxDnM z{kKRH$lMP4Sc?`qhNdMtA%?I;lg)s}qi;BOHK>=p*?pKaPM#c{Y;&}8)WfXqhvpAG z>i{E5_qHUHijTP!do&PDF1&QSK-pp6;Iet44h_es#5#!=au(Bh1{U!4Chqk?;{%7Iv{f9b`%SeA$DM4ieP6o89$ zkr0JnJEsbkLO0%HDW^pD6#-{An`YiC?V&DnP0e<;t9Wgr?$Ta<{s%ZG%b<)-pP54r zuI_@gZEh^>SlN*J?B2I=(S!=|RLQ_`RkNJ9LOY77E5 zZDM7=UQ_i`M%2VOLv>QWeuAbn zE-6TIi}1}AvMz&`d)0kJIo}KWWTw&A8f+!GF7>T8-(s}6iw30WT={owxZaJ@Hiq$D z{ZEy9vptE1?sp(XQlk9V?LpMbp*B5d-EE?)JuF3A-2!G)1YMN25;mG0s8nT zpr4Yay2usHfub#&W#j%W<&K7k^=@pvFqFGzgpfNfN|^P?>4+xZ(YcSESGV!ilfh4M z@WzACac|p{n+5P&Xro#LZ(YNbwS%7{Y+U=8erDMmzgcT)cB#j30aq}Y?t3du8xIN1 znwks8UmrA@VU@W*aIYJ?QPHhbO;wq%Kp+j^lpF&m+EjcGc5n3B;ZUP752Qw1S6}ZM z3BYxB$qW(LZ=uDe&D-FZn9&eftKi!XAPLa^mI&8i@cStwd@OB2iMb7?0FOIYl8H!w zdxv&g6|Gx;tj9JcowcrRyL=Y=$ipSw?;4n>Oxs=$w~PmOg-ZA0XRX@%lVKXAyx&Z^%lCX zR%owp1T~qRu3j&D@fww}V3LbAtoPhj3;iH>0b~Mer95AUtY62^ig@-hx*<;NSn}NE zI}_M@#1V&~E%aAlDi1v>c}$K5k%;J7si*A*d?j8L-t1Mrn!{!89wv~ed;dLitGKhB zs@>{%{ndp)>0NZ~l}b@_kC45)>sw5M^ap9+DpQH4ylnZ6uuZdV6?Y6j|0mv&zXs&BLZ@+ztW17iG&5f-}wiFu6JE z449u;PJvV08=4+5mQz(~1cE@t-A)}ubIVBkQ^PW(B%K>{-mOVn zMPU0Rp5Ao>zyu+hb_*YA``BoFqf=qaF*?&wH$MnYS5lPtKp#tJ(gKn|aWoxn@>*t3 zeT^McZu>ouFQRfQm`*@th)A`iEwQG}rjy@7;Y`L2Ut>e<1#GbLbv0^1 zY0oPo-M==)MsrWCnSldKM~q(hrN_jFyi>Z1)+4cLfUmFY^1YYLrNINax<_R0c_CHM z%5U8KhhLPe;1(GegQAzBp>b#5Hj94bPr>5jBcfT02FNR-745Kvf4;B^`B(#Q#Lnzp7+7T()w#vcJI4*W`mo38wy`j2VRw!*+ zSU}^8b>`S1_{wMlJ5WDwfKMr_%QR`RB=d`9;cy zcyd>GUpGg~;m_5FG7on>q=SsjM!?-kK+EWwp7L$W0SgK@OkI3pLJ{I-ud2F2mMb2~ z$!(i8O!3N!W_r zsBcx}5L@mh-~X)Db0#B-@ft`|W@bHN14xd2BXqRXhxx>NdhIQ~0#|nYjHN{Hdq(Zz z#kpJ(9R2~^24_?a&e`KQu9sR17hDFyJkd6lr~1^i@T`5q_63i>0zZokZPynC6332jhAos0oE#|_t6 z8kZdP(x4$B-e0ssib|%6UB?H6)`W2`KN3!y+_`&U!SwoR&FNmuX2UcqS=xn4OW!u~ z=Dks&4lhl@`SJoLc>UyMTdLS~x~buYSU2c7Iwie6@-UB>U8FOaQZUj`G}9eUrlSf* zRU`LyQ}}a<6sg3y$#zOtpJ^r^Z%31lzze>7#JV(G;P1Kj^%o1kh5WU-czBX5W!>=` z_RsOgb;?zD9@ltwADUZosvp&px@)PZu5;#+&p+Jo2ivA5JTMV*+`Di4k1kE? zuTOIvygqU0?uw?J?qr#ZVG?nfKYkg8mlj(Z<|`ArT18ZS@7eH)TxOBlVrok2D=vXB z2kK}z$M%_N{^l}b%aBjS)P8otf|R3nkwv8%9+Hgw{{cz8I%^wmmb|QE9x**>%s#UN z$5YmaL&yyMINp33UBXl9cY_4=8Px%yQkG)wuam09yKas(i={sEk3Cv=yN-+1{b zB@uUTHMbW4=IURl;zeEP=&Id|v@bwP>yVWeQlo-0;7&?7wFw;3asY*Rad%NA3M@F? zm%kxN`AgPkgl)YOB(J8%At9sKuhdO-^N@nZm{A3%c2BLfjb0Y^DP2*f1je6uFS(62 zgDgQ3GJcKNy)TP43m4e}l+o%$S`vtOTu*^g+g)JM&}r0N?2`JdU$v|D+-frZAqT|3 zW@w4ni(7IKH$7sv7vWt&yKA31sSKx|YGmz~VapVLh3j{_0zD+Cg>0pGAjkjeky8u)Z8;U__Y(C^ATb_}quyLD4c?rR z3e1@INW9Q&WVy8GmFLUc5&Dc)>4G#CI|a$UDhi3WU_alt%_lmAlP|~_PIRG|gHX53 zcdNA_V`XSoD(C3aa6oQc!PqiLD0za8ULH({Ro^8DX`Uc)ajqY z_V3pv)+Kv>v?6-iqlWh$=c%5f>aGupOf2x*YRc!hK%Gh}V%fCgbSW|;B!1R_&z=A1 zfnQshJ`oeSoZy_O0C9X9^Xt0tA&|2Ep2ne&YetRORi2rUtRXD(#Rj?pgdJ=6?R_7t zah|BfmKCxS)tpIYA=c`_L=Nmt?11;gTxZYltEUPGS9ZY}jWD@t56yk7169p2P`##2^OGwzV8O(&{>hRth)9l8-pb51XpEbQT>Z1jg@QXNl=YhaYqL>W7+vwmY#qr)J#^flP#fi$ z`Z|~b!WpHA;e?Jon=X0}cYtu#7G!I!qCmeuecqF0Lp|m?g{K@c*>ZVqnuYUTe>XR| zeq-~C1OMM&I|1$g0Gxsq(Z#bAdeKmi%RhD3Q;j?cQE9HPqdHzn>(5UI0rM?uBi|_? zf$fJxGnFdEh9-=>zHVC0c*f0W6F(d5SRD0YrV9!<%Q7-1J>y$yL#Thx4Sdf&c8Kg{!QD*CqXP!eKqIm`B*UX6SuJ^kcF_jEG+CT!ve1F#*3sM&s%caq7?= z>!LUE)$u_(EhWMk1A_0l{3him^rq9^zT#*!PFl|}7BOwYWo|$))*ByeJ6d!Qy6u_5ko$;_uv~qn>Ri1>m zddn6;GcA)kYRVJxFmlYnUHV<1qnS?7X|}dWsh<^cXjDzjsi3UGCSM04ka3{_AP}I( zNCs?0nbhvVxVN>M;eChKip9UwhBpx(eqa@9*dC;2tZj7|Wo8G=_{(}URz+MCmtlXV zu1d{UgHvTpaY-=*`G$CbAo#k~r41eUXvzTdW7bz-BsE$6b)}Jc^)%n#ZoW(RS-e-$ zSzi?WW$t1h<8_97l^6qX_+2})Y;7*!keQ@rQPc#|JKA<#r1#c0=)&DEGR(gE)q{z% z)RPk2yhi<&RmQA&$LOhjN(AC#lJ%3av=tJJXvM$?``}PVMZA9P#xDU&xwt zV38@V7NI?J$SVvxHx^}9LTTn=EPP8y9x3k=R9HGmz_ zUYuhIY=TVO)6fp7@d-}$Ne%0R{v+N6y3a*rPqWub6H{c7a2eEZgg&9vVJMfs_er{+ z23Ir~1JN4fvXdTuPx|?#FF)xHO>A%@crZ;6Eu$g-djfsBz1razc5Od@d1UPt-aLr% z4kA>Zp0oVE~$WyNfsJ?c$kq zoL?tgoRYMhv*YGZjX;0<4cBw-+wTNDQv?;p!6!!vJl5fnx>a_qFGOEO;w7>-EuC+O z62BY}sbg#$B*^kB#;&iu`Y%!%$3MWIS5JIvc8;_xe3ucCZ#22K=zzaucf{%M>t#P z@YOEYLwp%kUqZKO?3Yc>p>HRRnO_yR*v9LQ(I`W*WU#4mU3q*7xulU{2C23$oqC5= zX8!?#Ce&9;aJb2DnFtij25~Zb54j$KKpG*9vPCurMSWH+^_A}2LzFwm0|X~rSz)0Y zq;c)mexE8jmMtm&Y8X+#AGfJ|B0U(=0n+uc+;xObznluiKO}gZF77MRt?>DnC)UR$o~DZ9k@jX0fKfa!&hVuCOEwhWv!<|I8Y5N>gAS(HsU|r}rYJ z`k??9CUX=pd$dEz(%w$6hyaf2L5HxC_h9ATm{ zGunEFWlTLjjk8mY85!yuwAh#yK`RBA7z0(qQq!W5^X+Ujke#ZC=TwjA@r#bw^8p5? z*V*4LyT&ljmh#%2BZ?fDK80%hDJwrpYgA*1s6EH&NKafa?Czk8lv6xsq9Hl`tY1_J zxwe}cLSFLBZlsd)-z8ruZ8kaG2@2XR;Vjz1iyXMMqlZ{mz-+DXA1i}qDw;d>09-s~ zq5Vv!oqF0tYmdbjxIi21$Qh1?MJoM?l^d$=KYPdSvy>sDFFndSFc}GFxT}UQz_LBUv!ET{`-Lp+R+aZxhCg-A>Rpz4H z%Hk}yn;|AQEp6cAQjU-0N}B5>1v#pRu(8>D8yYk%R_k!3-Kcj9!Zjazf(NgbD9#PE z_;F)PB2zoVC$-%-$=~?IgI*4v(b8{O zDNG7pYkPJ~tX$^hQ8u$y@W$J3R}#J8-NTFQbLpr`oz(ENgc+{+)f=t9B&aj&0pCV! zBa%~tT)8i_4x7M^4Z`2fv?q-b6#>e6ctDe*LuJjY-15RkMEXE z+H(g(#hsI>@G2i?F%GtcVh`;TtJ8WvnS5_M(v-<7frNqf;49Ab@xcLeH+u{}g@`DLbWxs;ww^jE9$g7RX%IvsiX;KOAL>gH}L3-bL&vK05Wj|CxRZEC~E@Sy4WiWU;u#2>+Fop*xQCh zj>Axq&Ci#=@9x~^d~o-T4^!*%L4x&m$onij8@m|8^I_RlA>+SoLd{B;QPd%-u7cyy z7eg$!JTxcVD@MD|A>JhA-F40PEt2ZK?`l-d^RLKGhXj9ZF|1|Awwe6{@DSj;Imo$0%~6 z^a*tpZaaNH#*zM@G~DSCKhPUO`chO$Sb8~RCp(qI15?b!#^)i>^`=s>=z*s8FmWa% z^y`D{^tjJ@w)SczID=7Uv0hz}Y?V+El%N zfFHlhBC?5S^S>^vNpQuUz$yx_J8hV|KoMm6&OR-9twFXM$Gr6_saQhi}f8brbt;a35TSOpsy5-I>_M}hH z*L?`*Vl#siq>8xn!S?jxU;Y86zIR6>{sH>-0!)?T-?#|C1g!>22h$yO<{}pZyXIg_ zf-1Im7F4~@*uqTx(?O_@G^<${zTr(38C=eIwjP4G)PF%0=byPhVc-lSP>Xk-+PUcY|h{DebLT@uAa3yDz?RcmAFkepzC(g=1 z!bdHPG2K+TnxCL%(d|lQiZYYX{I{()M|}1-7&n9GGqX?i{;GRFJY~s&XrYkg+xgdzmdfUSa$P5h@@2g&NaJ0r zG00s??WKb%v*j+zq0hFPDxwL+S16ScL|h*2<)G0mZ29eO>-hM32Y$#sFK0`SQf)nw zgomfGf5$SZAW~+R0#j1{UH7$jy7|yIH5>d7U{snkN@E;wDfEGEM?QPVf1r4;luhl* z?fx$Jmu~Zu{m_n(|2M>mjx=>KjjQ%GJkwFTNLmx)Ld&MiOi_dQ3;`!vybhg6lm;G_ z$~@U}dgLXmP8uqYpZKO4K62|Lmxk@OD+yo%^|4S~1!p9N1f54Pp`hlV6So)h_?dH?(%fr4uQ$9DA`s-3&A(oH799pWF4D% z54&?S9SNtiF8Gk5lK4;AoO-~2fRry`-hm~O4ZdWmtGA(@)=Q-9bw;LD>#}ZsMDu=1YheQJXqP=pAM+)m_wv~ZQs1AO=JlBF6gy-ajl2wp&7`*L` z{1X9?Fp!*7vHC3}P+T0(Bk9wVo?Vt(n%q{FvM^@+KD>CR0a?BOXDr$1SXaqRTux@& zh1Q_!&Rx?PcR(T<-{r2P-(SbeKUF*B6~i2bQ!5S)$yw{ZGj0Js*Tx zEREU+v3bj3iN~^JRm%?Pu`i?;Xr{SZF%V%W=ec_ygksUaF>|nzE zrpTrLepB2qu&lHwQ>9ZrK7Z7hA*IS9Khdp^e%nti>Z!bxpD%B%`-W?kbAF`$g2%h{ zM)I|kn@B3%{+7ls_m%fmIa%G>Okv+yvTIzZ2sSV-%q;B~BhQF$xwA*c3L^*ad`Mzc z1hPh8HU;x&T2@yYUd_n2O^x|QiW*qKJH)Tm6wOv|Nlu4jx5^~`0T3M&@IQ_L#8+6X z1_Dg6yZMpG(kn3Nh){9BhX8V$h$|^oEH4l4N;$^w$Mwl_$qp&*(CIcX0YoxZq7)9; zZ=IYQ1|Ha&>X4Ytl=L|g{GB2CB{b~2`P4SwBp!ZcFejcO6kz!G0{#*+|I00XA9xe^ zL|Xqa|22Vn)X&#a=u7$R8_U&VGRLtrQPBd<)JebZ!C_AdtNp_H2xHnW;T3U zpta~qA_>jvsTp`?QvBxt-3_iff#3lAUB|SRiryOtK3wz+`X}93>Y~diqN$FFWKT#& zvA2}3&|sP$kAphybz$5XYJ3cJci16K82Zo8TF`taV=H+*87=#g0C6k6nFjU&KHh%) zv!DHjQVj3uzN7GWmSv1*>!hE$h3QrC9~e3aTe@>8oQ;cHY1O{uvnXEUsX_gTB?IlnIT+9GeKJU~G+8=S3^3rGFapb=b4V?ss@n zX=Dl0k@3hW`;fKbQT)N)!vz?cbYBhnxR(AW{9{o)2rfr0+{CJ6vYu65c`tHpy1qty zV_-3pc0W3mv2UQq&o4{Dp#?^%5JJm|J@#DD)Z9~<{u1Lk%;=PHlUXpulP83PvDK%2 zR^k5ro^9mLGjCm+*)}hh65caReg>rmod7plrWrpM&sfY_7`UuRvSwV`{W_0P#luV8aOsj&seUU#8WVUsFC4NZTZ6Li^x)ys~whU;JQ zT0@5Gp$Uv$#c3Tt`ilpVa%`FtoLvg+79rX0xR+)No$u__4jF%Fn--=PvDK3l$?z+M zt3j-S3oLNxp<;lsh3CZ4O6DW3V?G>C@Jz10`TW@j``Qf;DHdI0Y+X2=^1^$SPT@3Q z*B#tT2Y}HvWQEpRJ9wCX$*ldQqHa==s3$Uy&rmaDY(x)$N)J*{oEt(%o%y`5Y|!x_ zan3t{AcUuos3pk~>aQusHc2|f*3V5RyYpCy+$1HS?fxG$LlpE_kHenK5CVR35#VM1& z&sGIfobRjX1T*cS--DqsKSV#Gz`!LL%!H-ks z3nxnvBwl6xTxmnbUgsz#$V%c#1-PxHup0`&Ky0i-%PpD_qc$aY)v;c&UjU_ zpt35)6M+-EHP6hffHQ)X(C>{2wn$07~t*??%cg~{imvG_2L$5a8#Fz4^hTVY%&bgP< zQp@Pa+&WrGTj+GzB^Y=-&B5=jrVLxbxFN@ICASH}^?!ixHktsV1A||k4QJ@wndsf> zAdSp{J8pdWEYC|CM)Jy%<}BU$x2IDo*!{g( z7v>@sUt%J~GpQARId9fuJZG}J3Tv0xtRW%qVQ^tE>W40(9R+gJB(r-ZXI<6^{njcEc*-@CYlZoMj{PfEtgs2*Vp+A&5}!-1L)r}lfP-%Oeq%K z*jDU0y7dZtRx+tk4QTv*w^^)89 zq=24KksLz3?$QCB^~m74SMtbn^ZTQE2EV0U!~eo&V?L)6*MK@HV?G4BLNwlKCd5rEs{ zpD51rKG{jE{V+UuJ$9#G1QBVm8|yy{_&!T0qSq{bPWV^I8>+~Jd|#c%P=6tGLmDLZ z*Nl#ZMG@}%Yo-V)U*YSgXItr!do+9Z(Mx;(pn=$l16mj&K)adPPbp_;cy!J7{ocuB zCp2=ANNtTNx>$WmSG$9kswak}wULidUha_m`D||`xaVoI?d_zm$Vy?o3x2oMLKzcB zAqkHHCR|8(+d}T%`%0g*u^lNcQ(9KuV0`7ax&>_GuVi<776J6-Zx#kPbm$ph@xbFg z+Gtjh-uryg=*?$>tZo-jR~;UL?BY-ID4c`j#T|+s_O^2~w;MFXJ_Ec7{$htwI;-9o zv4#4Z&x;8*^DO0+=M74~0s_BqB!U9Kn^ z`u`QRYvPQKjtDi>nbb%Jw@miAro;zwTVzN9Cs1lk-5ZuiLE>_{e>Wq^o3A|LlFtZt z*}07Of6C28y|Sv7W=PNsK&b)Rv-64g*f^J{ENypkroax{IEOzjysmpc zB{EQBJZJmU$Stq^FJ5u1ya6_A)E3XXGv+Y`kWe=*o1O#b$?W7bJm(=nYg>&fgmD zZ9-GOj(hraLqa_1NfFr^J1~oceD-sr07X`R*7o^wSRk6b;oO$t=RzBPFJx1Dta!1c z8OcI>$`v~>?7DGIds-2#?o4~Zrl2%J*urkpVv}BBCrc9{-QB&XM-~}4sTUxrR*Z~O z@0iikOq_#d88Y{N7w*Od`I~S3w?fV{8V;{p<1qKw{qi8?{_ z-Wf!VGBaWbg6KvKf{Y{xQKJPx^xivB6W4v$y6;;5_ujSc*KoDoy!%g=t*wH5_aBo^Ee=k2yE>;dlDL2J&WV{O0dZbRd3xE#ctP@O1a?rhWo9RyRKR3c!<=cb(zo`(h?={eLlGi<^{Mz$8-& zI8_J4JcWeoi~Uj4E7^qUNPpV(Rm)Q5YCq<_ek=EiO#f7S#e0KG#L-Dj9g0com{X!e zBuOS4=#}`mXy(U@YAL!DIwOlODVVG|QA(PUt5Rok0r#_}-twm<&4?f9DDuzj4tTc1 z$rf3RJ!Kg7*n>TewbRI9d$o(6-%@mh@@lwit=0|@7%+oLG4ivzu-^+AMho+~@xEU? zMp*ZouhaLB{f&`V01|PF1?D-eB2hyJ*MZ@&S0W42C%BDqd}d_g_}+eVx7WaVrl>h< zzP{nMtcT0YH`gks$V>wb=DDPo5~ypR$wQy-pZd~Varc@c zz{4ei?iZSE3nOaI`pQn}Fu}2ekcgFH`)_LCDWAjB()a%7Q0^1`@ube+9aKji z?Jiy?Q%CINIXO1-bm z7rLC~#A-$J9mjAAU^`~TGt`L{M$02iBG=ZZrIvSGSaf1xUpOM{txMnQRDONt1yl&$ z&yTzgOv=q&>RS=a)b3-dX>mbq(&$g0TbQGBf*4>=4DoJS*u>^^wuh1tzkT@6zpQPj zz5pBatZVSo2BW`aQ5uT1kcZ-LLilg(ulPc`?9a-A9)B-8FhfwSV=eagbYqcYY8z$s zuRe*c+f`s^-JP{wYOvf|@^1?V+uWSI5#0PjDjVOJ88t&NJs(r*N;tG?{E$l$89oRA z95EQ;FgYR&Qp?6zCzZpm8J)OK5(P2BOA^Jztb&NArLFrDh`y9Do|1QFB1lCO>yomP z(j_-usk0nz-oQD#Eb`O)poVE>N}WTOwQ}+_M4b%557uV;N0ZJP)1Vl))^U;gP-^Gr zpEwh7-@hdqw_6#$f*;8B2)Mkz9GM`V+aqaz(1%W-GNAI^5aRxWRDMV+qM$|1?LL=J ztXSFxR>BT#qE%#d4e}&jJsZZn2fM{Lj&%2yre7vV^vP<|4W_L>OJwYJI|z%II|)qX z>fd<0kc-pu-(Ap8QycUC+$uECGF1vmsoXG6IhN4hP4il*b*@p!Y-mV?KqJWLmyyA zGa!O{Thr*hYAdfb#s9VOWWpBD@x|9TKX;dGwa$WP-Ta4F&oFxs_)>tZI`!5+X)6Lw zzaw=C#kCf{lxi~@D+<$_zM)h;Ud(&v{eaauFj-DyT10Fyti8+)qjqWqtquVfp`l?7 zKb6pMT(*NJ!aVYik%&R(^hi&CRwYN+)2HiZmw7OwA}+A+=*Qw-aH>~jK5F;{Sr)=o z^$k;UWIT>6EH8<9w>fPi_X(|zeflLWk^5R~p!2`rFOqrWhirFc;rTFHn0p@Bj#$39 zTS;;!*VQAL`9b3J>|Ip)_b5xjcK5osZGPu?lHKqu`)+fd-)M5@JKzab_5-+N$>FdM ze=#Zh(X&0l`UI)~ne$GQQ(NS1&bPs2yu8_LT;Blx^%zx>Hw z*P!c)EdP7*tUTN{&~;veB7?jKBIH%ixDmEgDezgZp;+kjhRtM}dXZ`^;cts*T>Cki zw&4Z%RAFeJ%YgJ@R%c&`z#+%R`!P!%i$S4gl4Vt&Ulmt?ZRKma0|0lwyEpk+6K|Ar zc!R1@N<#f(tj7`^$$3xAafbZ9CvKhPdL-aL8K%NzhEJt7?2FR#h!AVe@Xw6!eMlOu zw#}r{r=}?#&USR~-vc`lsl9R3)x#aQ%NF3#6Jq}9jfDGB;G@LApmgCTq zQsa!mKS=ujR=g%@WQNs%W0E$RQ|AwR_9TEoSxng|Ec^`gGDlGWH@W-!a$M7Jni6^zhKTqw-Ce3oviQYcI5kR2F8nm3+5j zlcpN=Ja`3FmJl*h2>8PBS50M~j#{hIEdd1D_hb&%49l1@9l@D!c%dAk^Tep6g)lXv z!Dg|FRXdd+BE%!PLn|I*!GlM6*I)lsPh+I=HJNX%(GtC*{c?IOhB$XSF>rN7-sU4C zUTDN>>1GrRpQQQ=OV-rbq0GXWQq2k#o-7dE(cuWZ9P#7z@yRY78Ld0`p*bAM{GFd; zqflp9-<-!pOS4l=IEKPD5c~R+xNYR&N8o3KmPk#hI7|1sM8U`rQQa`XT9H8jEiTwt zH+Rg?YFfI*$H|h9bd>8T$76$`A)6#m<_|2xpbY(Ir#GI)N4<)4T5!s6UyLNY(FvgG zGQTS>gESoiK65?r7s_8G;5G|Z-+|_!ciDJgmfDM-D$kq?33*1xn9ddbx>k6|b;y0- zTd=xwzAahy&oi`42}P8BGU3CI>MaG^^Xoop(ttC-%AA!u!So>Vre?0fF~l!vETL zUuTUzp&LU6>0`tN?Xq=NwqG}Q$PH>R%E+~(x*(gB z-%VI70}}sH(Qlmz6JhW;%jKES;UKv)Hxq-tQc6A8Ti{54KIQ>Ku{M)#XqN8X`o4fGso<@&Ze_LdPAmTeu z{98GX^0*-lGpTW3zK7x*y`;Y}rc?Fh=ShnOe-ex9Co5^`dQ4P8%)Wn>DDsyAGcVOq zqFhqLJ*#pLjsTZ%p4)k*wSuE!A2;icVNm3LTHJc!lR*aozGSd1I{=d%$z?1&-Ou}E zB^&RMFjULl=cap;!wug6rV7NYCZ-K&VCtviD-!Upbj+MZ9+uYY8j9971u+T_N6$$V z7R-U(#_bz7wXSfYRi@CM@79+OEkiA#bmMa|Ebl@(@fQs^qrMRu2|ZTfi>eYxrvI^} zM{@*s4j$N?$F0sTQ$kddYlS6{oO*$dru7nXh(dverU2-c02@h!pZFde$+nbA^(0td zpZ55+W~ZVezp*26wZZ~y&0UhWPat{(T6MzzxZ{=pY=;3bPzpB*mm#&1Fp-uPCJ-rV zXu#MVdNVnv`auH#$mp|*sr&JTeUOj(2K1rJP$6*^JM!d}CakT`dM1ApI zeV+MtNpQ$fYP7v^zOn>jXXnj{HU*qU)i}eFj~V&V#?C*BZYS@5Ab$i}Ma{T1_W`?J z4|N;PJy^izW=Gtk+gVZk3z#)fdoBJ$mZCm*v_F4zB77ZMiTEL*p+)%-fEq;eV- zs4UA?Q|4y>1Of-*%RX7CbV_NcM2ju9)Ju~G5`#&G-M^gg^tJY zN2;l5D8pNX6o8qb?p5GtdAB@D25)a# zi+ML3i<(SJcuaz@ki9Zfn)s2cWfmNdg zr-IQ;+)=?6*da4To5nBnrp!z?_=ei=UdjmG`7sEfSQ7=2<<@4uN@}*l4#HcBsSptx z*B}H|zaMn#g&x6QWp)rO1&OssUqPJzL`(!r>{%MM5kT$PV|3sN@x%7a;P;*)W2A8z zLdm{5Gs2gGb01~RbtTIbjd?qli?OC+IeNPd8^CApE;PhVF6d2veb~}woj8eQk~88^ z`d*sAqPzIFWDk5Twd}D6zE8n5p94J! zKIdsFtikuWm%girIvVvpkbGd{-Ks8q7jmLbCP?h#vtI^`>I=oJ zW3?I5jJia06jQ|b2EKNF>gnp=a692ku2DT<87KQWG) zdWQv+QOaeIGUvFao8KZ?+{M{F*9{7Dim>>*AdY<{hW8e};bRS0NQu?wLG02uu^tDy??R z^t0PcF@^b!3G1^R7uElW0PMHbP=;D6Vzqx;57N3>SACpu`;^a~q7{7@kN`j=O-Mm& zOB~cDBOaLso|PpSUIE-2(m2s_`z-OmXwyccTs~)tydShRjm#&hc3lghcI7p3Lz4g( z!lb+#!0L|wov&ccTnIVO+P2+kNUFJSuJU*;{||#H9(TKv0GOccYAR%&3q8LZR6A#` z+N|iv-D-$%kXQ?iC4a$dwPyt`Ry4Z4WcE!Fb(O*^6|J& zuFE9Borg!3h}i%nI_OMpq-WdQqUdiSPxZ~qjed)bvw0|R+2}CI5&W723Qf;W?Czi& zpO?3!Nb+a)WE5g!B@h2YCrgnvM^5?b;gE0tc_B34`Jl%xuEdV=~ybSr1*8W8$tAu z<7OV%z77*{bK<*HBpRW3PGl@bcPdgKzF2r~_*cgO^jG-bL$aC)E5FD^v}-3sP@Cn} z3pL-Yg~B4qcidZLqtezjG-T6MAb>Q*a?I(oN53IHEhy5FlV^7}$c!J6f(?g5w>7A5 zE6vZzxrS~IKjR5vcO4NU&6oz4uOo9ESCeq3!?Z)>uH@gD3m}hxow^?v*2i;VMV(&P z9gQ_XZ8H|ev=Hv@jvSSzvx_gmtgQuABHR~E7CI6g`_$+7)6)>|@exT}0!vX~bc75X z+jMtq+*W5yVWP^k9-F}zG(E|Qwhuov;K*Fa?s(4ZWYIvfm9OUlbF}tCPyG4ml3=4FStwRL z+JSCaDscFbnXJ}tpY&2%*V(O2 ztSacu_UE|W4+4%OcUCe;VAIT$!3BX<>l0k(AZMNN)CFH77D&k#C z_>!%qMeEV$g5&4b_!=gu6iUFVtX?m*{LMUfVNV@HB4atY26IW95-D#s-*)E)Eb=0N+<8!LAce z{9-L+{)u!os-3;|Hj1bm`Fguy2)S=U2r6DHU#QIjb`5{=J2a8@Z4p~GP;W?nm`w{}jQ*|^NPYz% zEkou~=F39S^)Fp8QG&XHoPT4lD-arptP&sp1JyUoTI9G-9<1}} ztn_;WJ@tEDuB4&H6ORJ}50miDrk5lFy{;{b-}F0QNU*G*^WmlLPfkx8w%M-Za)s`h zYT^Ep;&~+|ZI4V|8peyW$ZQHCx$N2Slj13U3|91cR^&)?V=|JcB1U{rnUagwx`$C zR_Kz|j)ajSroCaQjQu_NU)@^c@<`j>R0HViFvtWjrp@{apjsZ^@wnCy2~D>>*uv-6 zk{@+uWRP%BBv2;yR7Uhgo*5d!3iFwe1_);>S13>W2zui^f- zKEirpowus_JWNbURJfOlYko>ZPx5xf<=T?1*&^VHdDO1RM$nL!3jpSBU~``n{Yxo| zAufMZT>;!OC`~`|A7rn8%P#9+lYl#t4xK7RNsl+k8pwo=JE=-!S&Nlfx0Y=OT400B zTaylds>phk?#x&p5dVE={4J}SBirF?31iAT21+VSsZs!JZJAbx}LJ#Y(WE$MZMA&Z|KZ2+T%3tmYd- z;f+XvemjP#fZ$XE#mG+y)X9FH!waY}{ohp22F*~Ko9snD+-q4@Lb>dyCs3`+t>7on z18l}4Ar3W2rjp#5Kbv6SXUXwiGGhQo%k`kL2-@=#o%2mz?vSSD01wb01W+vhqEiVi ztxeZeF$8CM2E0+=8TpZC7K(P3AnMKkK+fu;k8pOKgrMOz`zEMAebxB9S^%Qyz(k6F zn}yWLkzp2i1UJ508=mZk)Pv?ybg?Q1I`g|l#0pb}16`8F2T7i0_mCt5%5*d$)ErG` z4d^{*xrAt1_pbLt6#hGy`A?tm{{TFbV%If!O1Kje4u!YyV_zQ$t)PDPe?XRtcM~(u zD_+pv$_fzW=0K(~IWPkJw~Fegv6Nz8K~Q97ano-D_leFuNM3iQ8>r<$Ux5SD0xggR0J(R2VMb m1BU1Q503gjBRv1v`u_=xW0gQ)&;M6-`InFR|EzJ zvZ^{Js5!o>5)jhyiaQ48{;ipuA|j^wOv}loruoCj#K|Q%EwY8`Kj05rIFwAgUi01?2A0yY-BgeW#PKtclM|JOtB zL0tb*&kD_jYsqx0vfCXctNLzn`5Vj~gzk+}xDu#hM<$M9J08MG_m*u*w6Lek*)_A^ zmRl!P4xj1WWa|z>d4aDED9goU;(^2uhrL}qJ#&m&$&X6Mp~4r>N2$;>Nr*qsHgTc> zFmQG!-P!5s$2s|-{e~D>)C(D`uOx<>Ta?b=zQ|$7*af(WQ}-+h*ZCT@sjp^+LE*o+ zzkFs-^E}i8@-BGJx=AQcnkqQH9d(E~Q~;8mk*80(_JgjIDW}slczcuDG}p{Oxv41b z@3)f!*m&(!;TEcT%P6<*fY3zZgWYQ|PSA<9iG6&OfKTZzgk(nC+o*cR$02yLM;h%p zla-aF(c#nUsm+kdG{@F5P2X^#*`?hkbC>6f0~i=>Fnh!mdL-(l^~$F`&%rDZ(ABMz zN1;dv+Um(PyC3tV$ghvRZeYbRxdgQgf-=-OG|BU3a2nnKg+;lSVudufO@VZe{OP_) zltQh~t)=&GfUJtP&8U|P5!Mp11JgDNFqVk;Tqx_M6f>o_5B9Zp+cFErr6Lm_VgKWu z)9Vh*sj;_f4d4304V(|{{H5>@u!Og5wa{{T{aVg-s>HT;d&Ssm=7vJEELix@W7ZV7 zW@AE?|CC7>KI9vPWfcm;AmMJ@h1<6a6N~SUuyEIM4~_@^$Z=j#!UDImDRs{;>DW-4 ziO$Z;77*Wn@k`~JZ9 z@OQ##bVW1%nd@G2O0e&ngUYtN`25_jZ&rR{g`_meU0g-^kaNj4KdnjWYk$#h3j7MYd>-WQcqWlo% z|LGGTEbM=Kh`PaNsEHIK@B|A>(L?@u(Oo5%p<>R7ChEI2*LA`=aq*t7gnc(MprxB^ z007XFL8ozF+acchQ`#_5wwFJ32fL8tRrJTHo_|tWiY&(Bqze!z)^%7(6Z3Ll#5NV< zi=#x}l;+b-f9(>|P`xI(q+G3)b{7k)4Q8W0&vR!BTJBFrgb!tJqcgx%-5>hQecAe_ zjYPedOo=4qIu^T%Vyb~Oei|-dI`fkr$E93!j9#sEwK!9wSK$v|GY?=qS12D%oD8vW z?1b40FpFz8E~>0n+kAg{0x~T@L3ejL@X)TA{nGRX7;tG-Sqs{~5OouFbKIgMYsU?i zW?G;lIa@EkNl;gr50**g+~UXRV?XcQLa&}tu?y5x-!(fvH-;nc;aWhSAT2EJ07h>0 z=rUMUt>WA@Hr^ z9Wi0T#2Z%|nGXs3{XlUk#`^gT0IP@yv+orA%?-C?1vZ%d(nnjQ*X=7oJ_(AU$`bxk<{>)@>N)2u}eW=7hM$ab~&X680(@ed(L4##z zJX!%f=*Oc2b!2)uVAd);PG!+^`@Qm<%e~|Hnxt{|_*X!{I3KHD)J}CME#8{8uJ*QY zNW`?zy9}gg!&=?)8tcqBYP|BqI5r@rIi~G4mM9Hwy@Sx#kV4u&@-kHRG)26)pKXJjBjBO~?(h`^trNaq)NXaOQ{>{iOsl9)>g_;c zH!f<>E}{O%wlL=!p@Txg*Iok1i`CH1A4I`tzjDrDhIo%I6{TywyUp9xF6x|-jgA?9 z4m_Mqsw+;|q!*j7mVyRO@-W#mQyZ;&lD;+KJ*~IHq%}L*OgZk)XB&g24lREdQ$e)yjH_g38>5W^FyM``q`I*i zsEeP+wQXJ0@vq}1z#wU-%oz2h!}+sB+=T|>GdMC#m8yNtO>~NFKx;5ETjRjWiCmC zR%r+rsg#s=T9_4Awnjfnmy!fiNjEjfxd{?Fa((DnUbln7_zOj-KSzBLD=sUhW(f&R z%!S4N2(0zN|~Xb&yxzuyL&gX3ixfWaCR*eiHIF z9L!iGZnPoTG$m=ZtCke*hWux7Iq(!*oL%n}=U*HrAgV~eNggwUJN?*%YJHlQogaKd z=`$(KOZD>(CT*GJiKC;g5*{j{|woJ{Y4+~CfsrMsaaZGes@LkIQ^ zpyF3n;>VT90XKy%m@|(gsqk5Mo8N2sYI7_8szeF;*mAIE_KE_#w-nqx7Kq_?afUK) zsT4h$?h-VOhtO5KeA>{eB%^T!j%yIkgVA~LM{-f1X?ai|Exs!+P{-Zm5p@;Ly5N%| zpOjkPjRSV{>nd#{^>B8s(aRa9mE_dwqv;pYQ73Lo9G`7`p}DUi-zkcdNBU>9S|G?@ z8kekYQMBPj=7 z|5twqiIAD>Uej=>Q-Mez)WCAAf}m-bdCN^QM+B8X8ktLl;;u*YiKPrC(^r~A*S7qk z;HTN5MsJgzTbbRZuq)FXXU2Fo`KIiGCm&S`lz+V;&TAYGXIRR&$F2x^<`2HKABc$%xS^?NDQn112!CVggSNPHy{yXT7YN|W)6E8|vTu$Q5 z&+TY@*7D3;_?LbP3zfwo7pnOlsHZF}oto}kMU}2eF);0=SWe9<`*2=#sk_8Qp(%tY zgK-lk3ZZ*@9pK-+`1r82{3*xkmoeO*)nx1&%sj~+P8VU5tR}*E9U<7b_|l7lHPzmqwZ(mvUI;66%8qNdQLZE8)gHx&t|ZpNkPr? zjSAPsjUz6ZppTn#sBLB>+F3xIhBk*$520WbO>@0W?jDhJv0`lah&1GAqwuKSbFk?s z2yNV3CPPYn2tmPGb*j_y`yRHbawi7HJ?WM(AD>#ffCsHuhXTJ%bL!3KlSIzCB=hWF z7eslK(8xGco?b-^CCTBNCKo0L$F)xl$9G^qSEG9{LnaIRInA=48qs$fJOQC+k=VgG<){d(kz-lTiM{ zP3_i^iayAiAR?kjUMW!P*Sq<2GwOpH7lvLH1N-8;4DN~B-YF9L~9oG-`#!($BB&K=&S6B(9SFH>rjdA z@J@~)D&=$EwZqx{Zh_yai4NS@7>%am{HfP#DB*0KYIt5?g7JEwBf(#f&mwVMPW;bA zeUo(cu3i0T8Q4V}2}S{K$HvHBO5L}$)Gl~I zQw4g*NaiBivG4^iafWiw+jAzaIFm0vey)Kbys?7@cSe>=>X&H=Zjkaknl;Af5juVv zXQc7UktCu|d%Pgh#V85q@uLhx{uGCXu@=eNynfY1^7dn4H$?PDNWrd}kBOy8(vAw8 z;n;%AE)LHqGI5_{SIXkv9-(Omv^woyE+%f{W8fTVl1u?Pv9$+*Op$bm&O@IY`1~Kf z>_Pw$9pjm~AVETubs-D!ss1!~d3JezF&wmm@iTxg&_jmWq2VAhs?RYS$0+k5rh#nK zX+}KU@(;#h4$XyE6!`gD+!C`-arpcr`4mR3H)Ib39YF5r05MqSbr?)KZyVfFJI|4v zu!yip8Pk^p(NuHj{G~JZlD>-Z&_jfo|K_YkSJS7^@+-zixVDQGebTtIQWm)bDCd*@ z1`s~pO-jYftQzD={$WzVm*%*Mgl)+kY{Ja^*?Y2sJuvyV1e#bT0GZBLRPhC*IZEen z`_uzuA{dIoXXav?M#0IN~!!7?ylRDNA2 z$o%)xH9j>e1{kBa;>C(!U;t3h^4bU{= zZ9g-^6QysKXEK|;BFTmBJQ}dmfT%~f?m}t&gvYCXG}sId$r@<{cPJm;Ns9}*M8|+9 z{l(k`yRALMsEhb|hvvFA7C67+sFs)W+*LFkdpvMkk>(LJu(ud?%=oc4p3Q00vBAov ziBkeRm4rLA%REMuxK;$0+g#l|jjhgkuWgwQ{njbmYaYdxy! zS_hv}EAdoD`0V&0Utp+OV1VC@0|959SDy)y`Rbc&d@!a@=si>PMLJsS6ZS4=rh?{V z&(^?KvJXi5HO={bc+STyC8Ay5nD?EYuO{n8h4?{iVc}XI52QJbl4xu9CIUIrn_1}O zl^e_5j6fk23G2PzJjWdSXus@4L?-5&B;#@R^nI$a0KWm&HyT$<3X0+*K3b&Z47GEO z@(ql>0bEv$iYo$T4>ZACXIqL1EU`U(_fac*PaN00o4VeY8sfV(BUnO_&e6u-A*|;1 z9cS~=7J9v*c^$8m1>}&9wjckDCKHT0S@ALxeiTuUj%`RR`{gJmya90C&IX>pG$;Fg zbk2GMEHvNk>=$f*O19fX@jFLqKJ|`KbG> zu-3-n*BRR6CuPI>O7jL-OU|*GxbAw*L%Jt;iKw(-uzSLTdjrV$g!A6eMhkptMT!!$ zXT|%cH#I|=+8}Nd_my*sFWF@EEa0yiSIjAcRsflkMKbmC;kE6UambW!RuLqfPyZK@ zybU@H0d5c^htfrjfua9-5nzv+vJAbUdpRVrY7ndxfiuXXMhc%5Rl3PHTvL~epn!j^ z+9<%_#wgF3)3Ca)o)|LZM*Wgk;2kS9d4OtQAZl;!0EoJXtWc||t4qHqF6ZI^krZWH zt&oU|I-we)_lhlJdENDE*wG7wH2Zri!odls9zb10y3hJ1lcw;ZN68L4Zfxv(QDKP4 z1}(aFuMX2l0Ry`+-lNK1ZI}1aH?%LPRQ7eaEPp4M`_|;Xya6_MFymCtl4FP94dkHA zb|D$L@9wLqN!Y)*h4}~0^N!Y!zVWwg8v0L(#v6}G2t8?;7 zyQ$B|8fyrn&Mf}b-YnubLT%4JMaSryHsKL^o+mxFgU}UKFQ9RD#lDZue`)D%5>guU zNb2RKG4mies@ofdbyCSPvA4Waw5q7s6IVduGss=NOwu-SP)>88Th{BKAP#a2*WRU! z={-e-07Kl)Ns4qUZ8a&rm8OPy{;1J9svdF0gmWOXFcZx;V4+Ganen3G;KyU}3C@5KFg>mJzhl z?hnb=+Qo+@Ep~7==Gf?Oe)?p$88Ff~<`)8cSLvR6{uNtUsUV_F<80xq1zh&0M@Z0g z$u7>Ub3;&vLPk|X;?XlnRdnHd!uMl)BudEEzMA&&UyjSiMa^z)F6I#T-2SIYIlW1k zjt2=WsSlmq)KQ*f(HN!;Q^$z~f658@95Eq#2;ht_QEcs;-DG?|v~?MGay_XYwA)X0 zuLY{Pan~Gh*Cq(dHxX$swp(mKny^isv9xN$2Y*27X}U`Ea!2uhq8i~$#w7CnsUtDp!`Zi5Pr=z znp;LfiF~R==Tc^V>WF1C9|=rU709+^mzn+6`a68o03w@M?*|8XgcuTW48RT_k86dN_uwLm_cZ>VvBv%laOfKU-qn=v0e!U%3Gy!6E3M|cYkvVd*S20hu{Hq& z`6XDiIlni4Ar*Pd$ZZ?sT5D2~*REVO!rTnL8qRu_tOy!xmU;t7ynKFD$$y!A6fAMJ z^TVx4evnGN1HE5qU_!VVd^f!DtX%ta&&Xwpw40IJclTZ?7js!MAzguc{q7{pF&M6V zW;ZpSwt>VCZv$XIQ?E{DYx4Y6wm6J%juWPx?j-sg2{9!Lvqx(8_lY2%d5}N9tsTBv z{bIqd(=|MsTFVLG>veUN&9qCPL(>76;nw(n+b8oVpusdWFO8Rh>?npgv3|^MLit09 zS&;a5h=xs_3!EfK`WFgA;w6s*Llav!__TxRaN>^J-R_yj=)C-Bv77_B{I!u2f{Di! zK<4&u>h-?r4Uj;W;D$!Iu8Bo7N_DUlWuqTn9g-fmW*?qyVUqNzmp!&J4n$*o4Zu;v zYv~shYa$(@$mWUuVg=7|oYz z_rjZ)x?L@Fb7`A(UqA2$2$|kkUbh(X7?a;kgFMd4D`UX%CI>tN$v---JZW$Xli}g` z{8#_r{Mx|y`AgK^<VE(d?xTuUcoZ*_0n1wR`{1QLj8BA1lpGZY(OecmXHCsG00(<5XQ_+RbSX+T;_YK1>7QlPW2WQz2*{q_i`k~V%iEVUS#z6i9CCkUlUj=9iZE%tye~`mTFWv zzagB_jg@EXggo3)lp%;2SOER+^Fp5Gdfi*Tn|T~Hx~HMs+T<`MrwGv_xS@TI|MpgJ zXDQzach*~k-+cHPL#Se&6sms1G8&Fv)k@=pu)TbAT^o=T&t=T}8cSz^FCuV`e2kfh zydQm6o^-hR!T$#=0x2)!2LB%2m9&9sD_c3H_V0lYDQmRIK5SI{DT z)P|bfItMh0Kh{8*L!Z4??SFAos{@CZ*kQCX+-aQ_k7&RMb&Y5LlK(pm-DAKNSJ|s? zj(q5MfN9ON7Y=4=lQ%!9#R<9$vR~6CQZ9kxr_H#|@gtkn*4#GZDezX6gsgX36)TEJ zxJ?#CuyF=El}4sC4s;BSO%_G!UN6YX#!jJUw|>ZFrfYOy>MUkIdA(`xb@YMJD4gIm z>AXd*8;=Hv%%F?}#ql0i)Q3<+>|eEZ?W0W2M?(6(YHIxTE_-5KAbqsEcwRdlG~-GS z70&B(eMJ@;RIr{>o#S$>gg)YT{*@Sm|J=*L#@TdfkV9%HXJ#g6xgYFvr=Lt38@pao zVso130goNDT4=xq>LvV|Rw8M>H#YUHHF?V+a>FGl`s=0-e35)OeTn`E@83pKMFg8} zbmaZ3zmKbuA(p>RJWEH~M`~X~U;A`i-vC{*c`;+-bnv09h}T5tl}m2`E2#n$+zx-~ z4_th&mE$n4EImBRqW{%MT&xhLWFYtY1(F0C``ykQ`=u~W7QlKkW8KT%|5$8J3fx3) zAZQ8%2FHxM8e!t9jImmbKm&oKMr1F_PB1lsRuk!MkmPmrl8Z+e<)7mP8*Y8VhqQC( z$=aa9yw^Sv<;|*kS|Hplipl6ItrBjNk<3_?vu{rXz8X0-b8G#HOuoSiQi0hq&>3}1 z4dEVfI`sW?MayE&$BZhSy;)w@h5%Kh*Hqsg+YG(cluZP!Hvr;VmGSuz1+Jmrr$hHS zqrYnBoohl|$`2=6yKek&$(aW$n}wy`M72$zzlK^Ivv-``k9dl2fNrmcCYf1HzBRKoSmF{1CTBP)*k+(ljkXk_1YMsWpy6%tUaWQR2gdKUYOCnXUR5v zhvv&OXw#(K@BG@jmkh`~7!C$w73cI>hDwjj5lt>31t}$n~GM{2c5`7 zzuD2l$5$c&nb@-h^Id!ZW)~Y#%s^Zviuv-#r$K@@KpB%Ep?-N}NuG7oZz(DxVP$x@ z7??A|w4ttN8!IEhKWc%NGncIyFG4pN(%UszZFbGvOM1G0lvFP}0um9OFrM6s(n}g6 zg2hKc#41LFYc?4_UUZd^r9Y}}KP+&q_8^;u3E#}_-YhXRUbt;#AF!JNS;85Hz?zqn ze?{O#1evk-LuyXm0Ktjh2X8M&HmZjO(L_=RBFM2cGG_nMOKLx&t*`eXbBR*JYwi14 zRmmra{3Nl@k&H(DOnBl-9~k$)&8Ph@+8^`hhNVcSs8eSeo1h(M#%^L?}tYSoDvzT&A)7WkVAh zvL|V~6Wt%0pW@e#DwfG!P=xe&7$gm*+C)q7t!WbHrW(^?A4B5g{(*}tPHnu#qym*H zO$>{vkD?NTly@1O8|M4PkqY{DQC7Y{@{Jw>;xzlE^fvW;N?I33wQ2hNkB-1B`Tc7h zt`k$()GuNZS>{93is%Fui(VE&ER2!L$^9H09ObxbkclU^#OY5=_Chb}e8=V)I}gO- zAp)@R>K@%r^7p_mT^&YZbaX^38b>Tx6Dr)#iGN9XfxUuwyh>Im%_MsC#U=$TFy+pQ z9h9X0ny9ypP0M14t(n^{tkB(9*7%FMfQzsOJ%oJflM(Kiy6iPKtjpw(&)!Gq^ zmoU4@Q6^8x+c6~d+E#<-^gSAy(g9X`BE{DXaBda+Bi4O(y#~G3+K+cB8@~N_YzH^R zz#aW3KZJ=CJ~h(tftD!L$XnRkq?CcMmoFMQE@jl@Zo+SXDV72~Mt$hau%CLPcVx1y z+`fy4K+hW>)<-0$)rJ~(Rj$}%fFcYZSo2d9sxCtOtlX5Lt>t&b>F3>)0oHv3SR^m* z*s(Ia0lse^iQKXloV%t`e;}C#ouXzfsxm>9=o(m(XJ&atdT_nwKxL)7tJx}T9!jiq zMJAz|Yo8wd;QiEfgPU5aLJ0%gj~l*~X0=y6WF25ier|vL3oQi~eonGHwIDZkqa=11 z&{hj*f7Q~Frnn{fb*G|O8ZZ0jK#UtN_vA4n3j+tk0DpgC!!(`VR(EB^Zmd=J?V<_ zor&fo>N1=6n`uQtKn&)W8$c-!ldx62(jQkf)s5~LK>NXwCPp{L)~SBN_|4Mpb#Bs9 zLcH@3-t-#tYIV_?(sIS6YN*fx@qoTv4#_qGUSWdt3gT7;c=pjzZ1jn7Ie~ADq&##I zJFPiUPXSv}Q|XSVZj^m)x^RRY&K~@jpTW)v*R`(>$-j0h8X`#^zzd~Noji1EJUGxd zMZqZ!4~tO_bA$!eX6)gAeDTzq-gqOM=iJ7q-xxFt6Wp9 zNbHcK91=tld#Z1WKI5rvLQQe#-puGvCM?QGf6jZ=Jt_UT=J=8$(3>&>O*V}_6hG2t z4d}c2I_c$HxBLb$A8pJVV)6aip!6_j{suVVrZ`4Z?ZMp;+0)N?1Jq3WRkF+B|M%bj z`L#~Kc~W!o&lGP+8!_0g`iNjHJwjO+XXRe50BK9_u?*sy6oqM zk@?QV##G?m?In7^HM7$=hvUIK@5=`tIn#S$llwX8+I4?P34bI^SVG%4eSXp+0j0RO z?#o*EgE~#{Qo*Uv}RXMIGBaA}u$N;-3hs;6) z4g55B623qWz9jWA!9qq;?yc)&GXZ`qs2_r7mk%QAd)b-#U4LGnQ}bL72Y@L(S1Z|_jM z$}{TkT02Dzswv@&xqAb6;toeppL-ZB-AIWPW}-*=W8BD_|ILujGM0^ECpMCj;XeZ~ z5FTW9OlK$x2@WdiJ6GpV#t)k!@KjlC_#&fTZ!*oG52aTTt$ zt*CF(`5S0Ijs)&V3gx>2-kmo8n9-EwC-Kc&xY>yN5lWzcqGP$jeL{A~e4$=Iy z-t*+uKdzLOUgLWlP~9SY%~LOFoTEekEaJgrd;48=pi8H!(u&jv17)4-c&~u{hA(*R zl2_T&HAonPAsWT2@HMBfx;fOPY;EKrG>po@HL%1^#|%>gr3EMlens7b>#AYQR$$g! z-ne=qJ*zcgLU+IsXc;o9;o7#7Ul)|qgv&H>mHy^*2v)Or3Ub}cAP;Rm(PypI`$U8@ z?f27du{weNG@__RwK;Us*r#uoF{r_Xv3DFxL>4T*&v^0g2C&sCe*11AHKQjEF^k1- zi>H0i@hTdXSkX=FU)9CVJJhS~d-b;aA~OK^at92{jwZjidcXSCP9CBJL5JuJ^15Fv zTTmxrr=K_yml+dBSkM3%xll&$e*#AOK}@21Susp2T}!^H1fH>8tj^7@#{7FEq}RfE zgl#&`MHR`_*3dtEPj7$%#sQu5((0Zaq2}4)i|?Bd?ShD*q?O5XHe7tGtNs^q3cej*8ec_*d-$EV==UjsHoUBpLKLql{J9r|;J0MMqn*2-s^hfhH zQ!sK8@+xh9cSJ56Tx+0sMv*wHD3Y@C_;m)IX_IS*_6-o|=|wPL&+>%O7P=8PNaTH} z7BpA5;AizG@6m|4tzcd+V-mBr)yE~Q|@REvnve_j>ctJ zhOt)hm+FpldIOOEB$X(0pp+!6p{R8(ozNwA=52(M*ynv4NHBJ{ZPxb6v0XkD_Fpcg zco1ozXfdXq3O2+joaUISc2$C>cndQ`wlSo|TD*<{YkPvA$nCWB~f7piyo|Y+plV7E#_Gk$^ zjkk%p-1goa(IlKT0@*>t?DClY<|1O?N=p*!-vfySQ-n{maG_zzJU1r5(17nKbu84H z$KHzxCsXh~R(Y0*SC4p?3mMc63w!OHHD(tnx;G5@OJy!W>_c!bio_4Iv^5H4c3jG{ zOFEKhP-BXWFMo0Zbe|OT0(((YKy7l^_ z>a7e-mg83nnt02(+#Ln3@eS~#*!5v+4T&Aci9gd@TW|E-?YE;fcv5b_gF7}WZu((I z7N^l7|EkM2SGpI8+Iwv#puS~?tX;@JA(MiY^rWV>*WOkO#T0|+#9*4cByHby? zy<5-XUT@~aH6f;ES0iJE|4q8c*J$3>*+CT@tiy)c+4LUy{z zHv2hQDw8W%wBG=#-2&zr{X4WTeTUjcp-3N%(Ow~MfFhUo zd{@7!H*rO1lkfcsSt)lETn0Kq`IkbIbmR{SAf`xrI5=Y z_ry%MUfD5<*(K4xiQgDz%y=CQn3xOY3-HJA;0${M#7J5@Kho)PC{K|l^L^aqGZxB+ z27V9{I|!`%A=kA;gw;P!G!Zs0B_~R>)b57SfSL>r-X7i|<~sOnSg~ewz(vj)EtdyL zX8EukZmS@ClBZiX!`&iaQS+gp36v#Lycm1NfMi&bX6*b z-bppv*5x5fg`hGUGLWr~SlT?qsDU#5XB33cpjf4_k#^E@a-nvGIpf$JOfMxz0;)Nv zwGbXD-%p>mvZxuuU>(W33b1hDmLv|BKHee`m#@l@p{DMmJmsj}iYP}4O~Cy{dMn(- zu^fnu06D~zY+$WgUTROBX;Yh=a>a9|)zQ+&+RJzUw#&RT&z5$v7Uy+d^9G12i(?_1 zAM5vcOzv>^lPc)puoR^CaDUH|a(IJ^6&Q7E!Su`-x2sETO2Z-PL^qsj z{fRt@v@ce*zis(@1tRZQ<`li?UK7{8)>P-7)DiMCAcrViT!J2w4`t0SkDO+i#dKxg z0H06zt-{X~tXkDAp1hN8o2n8nU85k>N&MXye@KoUzlNS4g?V-c=`QY{5-##x*SMkl z-gd6n(c}>@wZQ-gE<;HF`P%{n=g)cso+7w(2)1&{bV7|hEEH8iGU4fLHWm6^`MpO$z=XOgojfb zy{tH8ko6kffe!1zz9rZB2tP2cCC=)moP0Ua@B@OlcAvnf4{jF51%h2jBF@PzR!$6| z_Jc#|n%rQV!xN0hhBO4D8kgFs9v1Q6mlVSvfZJqYz*6#s2c-}n#%nUXj9A1M?1$Fu zcTqh_la06efZ)fxtQH4DnWfW&s#)FQa`qk-g)g7udd2$rD7UhXmRpd6f&|%$qWt%V zIN>na$bJ#I0><b8v;l`#VTwV?` zN;)6cDW02H8L%k+Nvj#Q@3*IfAs1VNOQj41q3ZCpIb1=gS4|N9ow4(uT2+&uj%2n8 z(*!EzX5e4>O}26~YqZgRl#TcDR$ZGp8(r_XpcOo2_4;!9)X;_C0TH$d2LVK+vN1bdUmUVFd&!Pbm>56#+& z)bxCtJF|*lbsP~XL2SY0kK@wi)&y6Ni`=}*28bEMnxWliBL(mLSZ$74?1aZ|-}HZ5 zs6jzCVNTI`e7Q<&E`k|l75ylXWw)_k1GnMj#)|IlchESOVb}9FQ!sl<@l~4M4}8N^ z(lzHt{nK6kYHqqp@sEXoSLq4LhoF^=z<_| zb7sQtgS(kmmXt9{tiVqh`uqI&m~{CPN(dJe+^4+i{vB+nDR<#~=?byu^`J~06%R|e zx9iS=3qo zU@Jx$8{52CTF13*OLPOnkjy3bi)>pH@$z)4pamo`DD`j3mC6-h?R0LEM}4oYfm zkBG-5;t1j&7}b=bFLo}>eb0m%#W*Uy3@VBDGAn(rQkgHRC9TnDa@>;ykx&DifGqsX zG~01*$`e#abAFz&=D^#e8eWwt%M?1Wr2cNT8i?#ml9T|FfF7*94!JnBJCdu6D_>`w zHcQ&fvuuyuDmnAQO>{|xCUbd=a2-!KQw{*N&~IUq9SIhwT+87i!MNt? zc7v+a?O;FYEPxaS5XnUrAap3Pc#3Oi$)ZW070B?HTfb9lH#dbyn`GAltD3KW&)$M6 zps^k359@zOchG1%JK#L5RFIG7U8_Pckkn5uy6bi4HDnKh1H{2l!#jPuy!f)!gMe2D zqKT8MmNPk*%tM^AsZ+0Z&qu*Ftm6VTSi1+}yCAt>|MBRV!;zpMt1m6#WwsjDoP zmWRt&QpRzdOVcw`!%_Z%_lmlR9Z!5W2;sJ0I@uMb=y=+`*ce&d=V;a*kv0ySS*jYU%uDGgY^PKiCEB-37dmQ;h zaG~eYTKvNWQq*3A>w0V0TGn|g;VaFo6|ni#t@-&b6*^*N2-fG1lLoL&#Mc3UFm-#A zO}=bvG*5|Ab<0%rs*VMI%J>-juSPSns-WUeTI%2& zT!(76vEmJkaVi zBYn(KL8yGjl+m~lZJu*&(q48?*Y%za*?QLxFLDEwS>SNosk?@uZvg6~v&D&`!#%G5 zMeF}>d4FN@h_SQaHvmOqc>viPfJo18VTx5$Npf$m^VN?t4IuJ*)BR4L?udG*<+)8w zujRelI*l;CN-V$hwu&mFH1hTnA$dQA8>Xn7SIL;@!*ZZ!=M+hiwq}QGGW?d!VCeM7 z2$-`2o)Gscks<9l6M9XooJH@uRW!hVlQ>x*r9N0E`(Zh<{D;c2Q+;3#25@@={x@Ag zO_^YaL63VpAfw3V1SR_!jo zFw21({x0}@SdkZH(UNmj=wRtlz4WJZ^~MruMnYQE+74{lszWP>n<3D9dyhfmtAMuN zV;~1;!8s)ZE>Yq@k(V*rstwG@+Hhbhyr~v+c0u~;zm{9v0u1n|^0PV=`JSlk07zc@ zBr=_PooHClc2M%+wSJo7ilc&&v9Zp%M^$>i%YVsUJT&9sfAkVU%EEB34$p#bfT8zq zSXH#yU-@4Xqdh}oYr$u9p`MueGs(POg`W)q_&r|E|M|Kt;!dbIiflqQ#aSRO=mufL}Vy-Yz*BL&BS~-$;(AwRxc3UafsnaGIK+u$P)j!DR5kk zmn?@s8~;z-p;jHdLK8=*2JTVm@6W+_Dj{9H+^7^9#4SE`^?Z>wR4X`{(kYz;jmSx= zuv*@0`?KkMo4toTqVXZDZQ)AViYeT zy$1Pp@TO?w6RSa_)=?F)+uTt`;t|pQL<0;U!^~QQ3WaAcHESd0fQ@SY>Z(b}cz=U- zkohR0Vi$13r*`pFNB3*Jy6S|0<=~`Icqx~ls$?AM1vJnB`Y5`OQb}g#r+n?Q7ftc zen^}#`I8&X3PhC&)7o{cG3ql`;HSgCm$xZaMrel|lYnrslh+&I)u7sIj6-C#C1W}*^ zD*3H+?r7s7hT%-}pBOIa%;|*cfX#Xo%@i%n6i#alLOs7q^Se|ooSaL{o?~YK)($hs z&47-fL6ZkzyNnj3oxSn_BPR;t)Oi1?$Jkp|NRiP;xuB1T+n12^9UC07OK_K>hNMCf zGw!q$Z6HI#>isH@>jz2-EEy68MFq)0hD9Yi!yjb13rRIf@w9DoNzyCkh0Jx2--!~d zR*HiK$1IkC@d+`Q4t#^Xk0B$DlWy8&^`5w5`d9-HsX$Ure;uh&Br>t1cYC+QV8E(p ze&XxK6y>eTDOgJRp<|zYS?CDmLE6&FwJ2-qhAY}@J5clMoXj|>n5hAhFK5t3;`+g} zG*h~8ak8$(^@>>TlER&voO2|B)KN>*QdNcLqiL(aCjflo7Uj1s7;!K0*4LX)a~!Vr z6Y=+>kFdW4d^hTgd^i%Rv;U|bRPsI~CTd7;ZmjNf-WhQT050H_PIpHTe_7p4V(QZRobQm7ni>W7C3EfP1w zizVuRUq>ek?8Kq1CP05Mf`9t(q@LfDN{)c67`B?%%mD<0x}Wki6M~NB7;hQ zjuBz@bkjReb#gve7*rRI?WJZ#DGbjY1sj3K6_8DSpcrKw4`KtrA;Yon_@_>hQMiM;Pe0w0>f=l0>tl{0T545{T z+1I|xF4;EM4}HnbaV{PX;ft^u7&5u`j=yDXOCl?3fBxe}_TDHOh^eBN3ZOLW>M++D zIlati6G)hP_A{IpNJ@&VtoqG1C6b;Nx_uqB^iGN3fXQ<&!y2tn`04F5J(r@m5+|3} z@XE{)i$&q%pa73BBB53P%Cpqyd*t1%S^s{DB(hSo?V*O$gZ%s%gE)-@Z{c5$U-sn&q z=@|jaE>3oxTUOuaHgq2gvj0U;GUMzPR`dtXc-Yn{nysB5@a3Q)(##AKp}nh3vS&OR zp)6S;C$_?zq;{z24$&Q0K5s~dbLdU&`$vwhD1i_uyr{9A502zh?GYVip9 z`bRoglE%9^@|!LANP4_A|9<{AY6e-7sXx+&%&6EI2h52wxLHKvA3^BIy-?OCAc2<6 z2_@vGS|xquewl#I!Uaoet+Elh6$o8eke>)?x_tk?=HdW4W9Py1!E*!Ud-lwG1i-Y` z!;LxY>a56w$DfWO!jWaaRTSyX!)-s?AE_P4RsvCHnz92%g+3Zb)=+$>e8Qs0@IjC{ zVJu}yLQWk#)ETglp(`BN5zdJ{ReKy%<*bgpP*R#Zcslv3JR`Nwu(SJjWl;x zclUh>Gd%A734^|M8RW?-JTJprn#teA%72Zz>z`M143>`tC>37?&S7xtnEFJ8Stz&M zGx0JU<@=Y22V;o4mF`-gk}rW;>!RT8iW-2JqjxvjfajrID`||GTkw=ybyh7Y5=kX? z1iBs+$J48fpV*{vWaU4mDNe%<`_Z`H9{ze1x!0?@P?sX7(IBgFi8%rPVw|TARJ?gi z`k2|?%NC<2t^=a`9_UKUFxk--vXAjq(8#u=DFvzoq~@r`Fbbl{4XK}$f!~^M2$=eQ zW+*c%Ef3lBkCpCv`Z-a1oPt!<&WF8-CAKfNt&!T2u5&~ffxC7+`ikq~DL=5X$H z(`+D$yOB$iW)gcD3nB*wfOw_xt_1z{2!FNZZwG4Tw@A*!`9t6>;5&@v@rww@y>`&+ z&N4e>+s*Y}6s&7q(IClmRumE*M~B$tF#u@T4)KSfS;q|+x7Ab_ontP~l%$W^7_p8_ zqH|(D5hBHOXQ*Cs4NQS}GAxQ~f@lJjsbl)6$zh0*;B7HJ2>FB;zj)Led@=uthnZbc z@a-q!pdoP>tmvBWH_*UA6Rgm}qwKvF&!MLMek-t0)R~7+=p-tN)eG`*d=exKz{t~I z$zcf&#gaMBIrx@7=i7 zrbnq2QQN1m%hGh_n6)9fOqz7Qq?zWBZ()2kV`0;k)XliAgi6Q5%}~y_A`j&SbL>B&RR!Ho#}+QZKO&9sUKv&lGC&YK z+52RSPzO)l>etnq#*FqSMxA`SnA?&<@LC!URE78@1s*+$^&Io@U+chCp0DEO@**cx zd;4;9^6re>rqUM+j~>;cdVko)x{5NxJ8r!&O^UQ-KZCs3Z28%hrhedVgnOpXg#MQ+ zng^7W7)=^^r0Ka0q@s$u$lkDAmnf^_ma|D4R?lvhYk$%p9V|b*ZNK~v3(E69B|ful z5l9&Xck8)_4N9%-_CViVhz%lD^wpDF;vFxR+;1F4%UDyxRz#3&EwQn6Q@0_BSPA{A zp=DZq_0v!mv|8n5^-SN8M{{on1rKGTm2rm-SG(-DF5OA6>q&K4!dk@g*i*z2(=)DB z7=FgHHzyvFplR&^@&;Ks0#Ij%3Vvf2 zfBy#}+0U>wrYbEv01r3_lC6x~jt@r{pl*1WU7plANpj+skEH-kS)#c7JdK1hQKIRVQ-Oshke4sBza;Gb zw_XW1qpkcjhb}|9{9K5Da7M*!MX^GEqpH(q z1+HUORwmp5{b|h{v**VN)tiZY8fQmKES{t-nm(zU;5FQ?0Li-QRyon61G zJ#(TRn8DO0?_Es(X&fY^RFGd7)h{v*Atf}(NvUO4ScI6+=d5iItA@#w>f?@Wlz4O* z`)XObFOeQZTu|sm3v=`~y3#KsHf_HC`Vi`M|8`GYp#??6CjE9>Q_1gsW zzW&G>JcD_E(_^uz5!9Bsb!m?xJi#rnnuN+Z_V2LI_nqn`s|aEM9EXt~=fxVPlMpYF zo*CZ^`o!;@X*Cemf$e>qbs$*((I<|8Pd?+*gqaTQM2O}-rlC-mihBy7Wp}4T|Fx8! ziF4x7Ye$X3_W_bUU=dh&?pE}u#UV%SJ5E^Y8EU;M6}x;;iqnifzUVz08KLb_m@4%C zUa?TD;V(^}?>bOD6QTO-(+Pb@>k(z!AC#28vR((qOhE>X`|K{wv9Nsv{OK3K@^?-- z%;gJfsU3g6dVMb7UWw}Y(?A?bTQM=*m{V{sB4E|2kw$4_R)5pZc8A$H2Xs0+#3VOS zR9n&+SnNn3zd&%QF?SI_df?fV+)nyfN}NQx|8cvZsxe;NcU!-Ft$DY!zPGx|?8&}z zWZG(?cfjvLyH|a>^eA9=i5%nctsZ}qpq$F(G641k@BrB&3tCKJERB9ZL&_xPHw*^K l_DtO*QhX^4{vTOmUb2zfRS9%OW*>nJnCiYX9pbFN`VSj1#mxW! literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/nexus-s.1.jpg b/aio/content/examples/upgrade-phonecat-2-hybrid/ts/app/img/phones/nexus-s.1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f33004dd7f53663146ac3f96113f7e775105187f GIT binary patch literal 16354 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

    K zH6|_KOE&D3#Swm5sS~0pmq>gH(n2m^z0v6&9%Ec5!vlXMcOckIRDY5XVj!1DBo1Y2 zJ<=lWu9t`o{}iFIK@39m_%?G~_$lIaYgxg`3!LM`)m%`0_mUryArinUY={Q3V==zk3AtrU>AfbRCb=%Dy! r;b3CnVxgns5aHnB6A%&-Vqg=K5D}2z5fBpm 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 D(OGio literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/motorola-xoom-with-wi-fi.2.jpg b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/motorola-xoom-with-wi-fi.2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..86b55d28dd4c5819c05717bc9446a1e17f733f3b GIT binary patch literal 4077 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 D#g8kL literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/motorola-xoom-with-wi-fi.4.jpg b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/motorola-xoom-with-wi-fi.4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..75ef1464cb8d68c5618b11189c343d205a786601 GIT binary patch literal 15111 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 literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/motorola-xoom-with-wi-fi.5.jpg b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/motorola-xoom-with-wi-fi.5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4d42db43305b945ccc2608869908aa2cc11f7eeb GIT binary patch literal 14687 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 UcK$yiw?{saLl!G!Upz1T56z?xnE(I) literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/motorola-xoom.0.jpg b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/motorola-xoom.0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bf6954bbd5a8df5db10685273df9cdd2ac0a4c9b GIT binary patch literal 26175 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 literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/motorola-xoom.1.jpg b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/motorola-xoom.1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..659688a47d7298f3a03bc42de74c3633469c325d GIT binary patch literal 23398 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 literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/motorola-xoom.2.jpg b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/motorola-xoom.2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ce0ff1002e40641249bc000fdfa522500988d808 GIT binary patch literal 23686 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 literal 0 HcmV?d00001 diff --git a/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/nexus-s.1.jpg b/aio/content/examples/upgrade-phonecat-1-typescript/ts/app/img/phones/nexus-s.1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f33004dd7f53663146ac3f96113f7e775105187f GIT binary patch literal 16354 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