diff --git a/public/docs/_examples/hierarchical-dependency-injection/dart/lib/edit_item.dart b/public/docs/_examples/hierarchical-dependency-injection/dart/lib/edit_item.dart new file mode 100644 index 0000000000..c5de35a9ed --- /dev/null +++ b/public/docs/_examples/hierarchical-dependency-injection/dart/lib/edit_item.dart @@ -0,0 +1,7 @@ +// #docregion +class EditItem { + bool editing = false; + T item; + EditItem(this.item); +} +// #enddocregion diff --git a/public/docs/_examples/hierarchical-dependency-injection/dart/lib/hero.dart b/public/docs/_examples/hierarchical-dependency-injection/dart/lib/hero.dart new file mode 100644 index 0000000000..3a9ec96783 --- /dev/null +++ b/public/docs/_examples/hierarchical-dependency-injection/dart/lib/hero.dart @@ -0,0 +1,14 @@ +// #docregion +import 'package:angular2/angular2.dart'; + +class Hero { + String name; + String power; + + Hero clone() { + return new Hero() + ..name = name + ..power = power; + } +} +// #enddocregion diff --git a/public/docs/_examples/hierarchical-dependency-injection/dart/lib/hero_card_component.dart b/public/docs/_examples/hierarchical-dependency-injection/dart/lib/hero_card_component.dart new file mode 100644 index 0000000000..1506813bbc --- /dev/null +++ b/public/docs/_examples/hierarchical-dependency-injection/dart/lib/hero_card_component.dart @@ -0,0 +1,16 @@ +// #docregion +import 'package:angular2/angular2.dart'; +import 'package:hierarchical_di/hero.dart'; + +@Component( + selector: 'hero-card', + template: ''' +
+ Name: + {{hero.name}} +
+ ''') +class HeroCardComponent { + @Input() Hero hero; +} +// #docregion diff --git a/public/docs/_examples/hierarchical-dependency-injection/dart/lib/hero_editor_component.dart b/public/docs/_examples/hierarchical-dependency-injection/dart/lib/hero_editor_component.dart new file mode 100644 index 0000000000..0ecb02a840 --- /dev/null +++ b/public/docs/_examples/hierarchical-dependency-injection/dart/lib/hero_editor_component.dart @@ -0,0 +1,47 @@ +// #docregion +import 'package:angular2/angular2.dart'; +import 'package:hierarchical_di/restore_service.dart'; +import 'package:hierarchical_di/hero.dart'; + +@Component( + selector: 'hero-editor', + // #docregion providers + providers: const [RestoreService], + // #enddocregion providers + template: ''' +
+ Name: + +
+ + +
+
+ ''') +class HeroEditorComponent { + @Output() final EventEmitter canceled = new EventEmitter(); + @Output() final EventEmitter saved = new EventEmitter(); + + RestoreService _restoreService; + + HeroEditorComponent(this._restoreService); + + @Input() + set hero(Hero hero) { + _restoreService.setItem(hero); + } + + Hero get hero { + return _restoreService.getItem(); + } + + onSaved() { + saved.add(_restoreService.getItem()); + } + + onCanceled() { + hero = _restoreService.restoreItem(); + canceled.add(hero); + } +} +// #enddocregion diff --git a/public/docs/_examples/hierarchical-dependency-injection/dart/lib/heroes_list_component.dart b/public/docs/_examples/hierarchical-dependency-injection/dart/lib/heroes_list_component.dart new file mode 100644 index 0000000000..564f2e203b --- /dev/null +++ b/public/docs/_examples/hierarchical-dependency-injection/dart/lib/heroes_list_component.dart @@ -0,0 +1,53 @@ +// #docregion +import 'package:angular2/angular2.dart'; +import 'package:hierarchical_di/hero.dart'; +import 'package:hierarchical_di/heroes_service.dart'; +import 'package:hierarchical_di/hero_editor_component.dart'; +import 'package:hierarchical_di/hero_card_component.dart'; +import 'package:hierarchical_di/edit_item.dart'; + +@Component( + selector: 'heroes-list', + template: ''' +
+
    +
  • + + + + + +
  • +
+
+ ''', + directives: const [HeroCardComponent, HeroEditorComponent]) +class HeroesListComponent { + List> heroes; + HeroesListComponent(HeroesService heroesService) { + heroes = heroesService + .getHeroes() + .map((Hero item) => new EditItem(item)) + .toList(); + } + + onSaved(EditItem editItem, Hero updatedHero) { + editItem.item = updatedHero; + editItem.editing = false; + } + + onCanceled(EditItem editItem) { + editItem.editing = false; + } +} +// #enddocregion diff --git a/public/docs/_examples/hierarchical-dependency-injection/dart/lib/heroes_service.dart b/public/docs/_examples/hierarchical-dependency-injection/dart/lib/heroes_service.dart new file mode 100644 index 0000000000..de9508ec0a --- /dev/null +++ b/public/docs/_examples/hierarchical-dependency-injection/dart/lib/heroes_service.dart @@ -0,0 +1,18 @@ +import 'package:angular2/angular2.dart'; +import 'package:hierarchical_di/hero.dart'; + +@Injectable() +class HeroesService { + List _heroes = [ + new Hero() + ..name = "RubberMan" + ..power = 'Flexibility', + new Hero() + ..name = "Tornado" + ..power = 'Weather changer' + ]; + + List getHeroes() { + return _heroes; + } +} diff --git a/public/docs/_examples/hierarchical-dependency-injection/dart/lib/restore_service.dart b/public/docs/_examples/hierarchical-dependency-injection/dart/lib/restore_service.dart new file mode 100644 index 0000000000..a6d8c59d35 --- /dev/null +++ b/public/docs/_examples/hierarchical-dependency-injection/dart/lib/restore_service.dart @@ -0,0 +1,29 @@ +// #docregion +import 'package:angular2/angular2.dart'; + +@Injectable() +class RestoreService { + T _originalItem; + T _currentItem; + + setItem(T item) { + print(item.runtimeType); + _originalItem = item; + _currentItem = clone(item); + } + + T getItem() { + return _currentItem; + } + + T restoreItem() { + _currentItem = _originalItem; + return getItem(); + } + + T clone(T item) { + // super poor clone implementation + return item.clone(); + } +} +// #enddocregion diff --git a/public/docs/_examples/hierarchical-dependency-injection/dart/pubspec.yaml b/public/docs/_examples/hierarchical-dependency-injection/dart/pubspec.yaml new file mode 100644 index 0000000000..d7822d6b1c --- /dev/null +++ b/public/docs/_examples/hierarchical-dependency-injection/dart/pubspec.yaml @@ -0,0 +1,19 @@ +# #docregion +name: 'hierarchical_di' +version: 0.0.1 +description: hierarchical dependency injection example + +environment: + sdk: '>=1.0.0 <2.0.0' + +dependencies: + angular2: '2.0.0-beta.1' + browser: ^0.10.0 + dart_to_js_script_rewriter: '^0.1.0' + +transformers: +- angular2: + platform_directives: + - 'package:angular2/common.dart#COMMON_DIRECTIVES' + entry_points: web/main.dart +- dart_to_js_script_rewriter diff --git a/public/docs/_examples/hierarchical-dependency-injection/dart/web/index.html b/public/docs/_examples/hierarchical-dependency-injection/dart/web/index.html new file mode 100644 index 0000000000..cd76cf209b --- /dev/null +++ b/public/docs/_examples/hierarchical-dependency-injection/dart/web/index.html @@ -0,0 +1,19 @@ + + + + + + + + Hierarchical Injector + + + + + + + loading... + + + + diff --git a/public/docs/_examples/hierarchical-dependency-injection/dart/web/main.dart b/public/docs/_examples/hierarchical-dependency-injection/dart/web/main.dart new file mode 100644 index 0000000000..bfd8d2c649 --- /dev/null +++ b/public/docs/_examples/hierarchical-dependency-injection/dart/web/main.dart @@ -0,0 +1,15 @@ +// #docregion +import 'package:angular2/bootstrap.dart'; +import 'package:hierarchical_di/heroes_service.dart'; +import 'package:hierarchical_di/heroes_list_component.dart'; + +void main() { + bootstrap(HeroesListComponent, [HeroesService]); +} + +/* Documentation artifact below +// #docregion bad-alternative +// Don't do this! +bootstrap(HeroesListComponent, [HeroesService, RestoreService]) +// #enddocregion bad-alternative +*/