149 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			149 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| // #docregion
 | |
| library template_syntax.app_component;
 | |
| 
 | |
| import 'dart:html';
 | |
| import 'dart:convert';
 | |
| 
 | |
| import 'package:angular2/angular2.dart';
 | |
| import 'package:template_syntax/hero.dart';
 | |
| import 'package:template_syntax/hero_detail_component.dart';
 | |
| import 'package:template_syntax/my_click_directive.dart';
 | |
| 
 | |
| enum _Color { Red, Green, Blue }
 | |
| 
 | |
| @Component(
 | |
|     selector: 'my-app',
 | |
|     templateUrl: 'app_component.html',
 | |
|     directives: const [
 | |
|       HeroDetailComponent,
 | |
|       BigHeroDetailComponent,
 | |
|       MyClickDirective,
 | |
|       MyClickDirective2
 | |
|     ])
 | |
| class AppComponent {
 | |
|   String heroName;
 | |
|   String help;
 | |
|   String actionName = 'Go for it';
 | |
|   String title = 'Template Syntax';
 | |
|   String heroImageUrl = 'assets/images/hero.png';
 | |
|   String villainImageUrl = 'assets/images/villain.png';
 | |
|   String iconUrl = 'assets/images/ng-logo.png';
 | |
|   String chosenToe;
 | |
|   int val = 2;
 | |
|   bool canSave = true;
 | |
|   bool isActive = false;
 | |
|   bool isSpecial = true;
 | |
|   bool isUnchanged = true;
 | |
|   bool isSelected = false;
 | |
|   _Color color = _Color.Red;
 | |
|   List<Hero> heroes = Hero.MockHeroes;
 | |
|   Hero selectedHero = Hero.MockHeroes[0];
 | |
|   Hero currentHero = Hero.MockHeroes[0];
 | |
|   Hero nullHero = null;
 | |
|   Map product = {'name': 'frimfram', 'price': 42};
 | |
|   Event clickity;
 | |
|   FormElement form;
 | |
| 
 | |
|   Map classes = {
 | |
|     'saveable': false, // true
 | |
|     'modified': false, // false
 | |
|     'special': false // true
 | |
|   };
 | |
| 
 | |
|   Map styles = {
 | |
|     'font-style': 'normal',
 | |
|     'font-weight': 'normal',
 | |
|     'font-size': 'smaller'
 | |
|   };
 | |
| 
 | |
|   Map styles2 = {
 | |
|     'fontStyle': 'normal',
 | |
|     'fontWeight': 'normal',
 | |
|     'fontSize': 'smaller'
 | |
|   };
 | |
| 
 | |
|   void alerter(String msg) => window.alert(msg);
 | |
|   void callFax(String value) => alerter('Faxing $value ...');
 | |
|   void callPhone(String value) => alerter('Calling $value ...');
 | |
|   void colorToggle() {
 | |
|     color = color == _Color.Red ? _Color.Blue : _Color.Red;
 | |
|   }
 | |
| 
 | |
|   int get getVal => val;
 | |
| 
 | |
|   void onCancel(MouseEvent event) {
 | |
|     DivElement el = event.target;
 | |
|     var evtMsg = event != null ? 'Event target is ${el.innerHtml}' : '';
 | |
|     alerter('Canceled. $evtMsg');
 | |
|   }
 | |
| 
 | |
|   void onClickMe(MouseEvent event) {
 | |
|     DivElement el = event.target;
 | |
|     var evtMsg = event != null ? 'Event target class is ${el.className}' : '';
 | |
|     alerter('Click me. $evtMsg');
 | |
|   }
 | |
| 
 | |
|   bool onSave([MouseEvent event = null]) {
 | |
|     var evtMsg =
 | |
|         event != null ? ' Event target is ${event.target.innerHtml}' : '';
 | |
|     alerter('Saved.$evtMsg');
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   void onHeroDeleted(Hero hero) => alerter('Deleted hero: ${hero.firstName}');
 | |
| 
 | |
|   void onSubmit(NgForm form) {
 | |
|     var evtMsg = form.valid
 | |
|         ? ' Form value is ${JSON.encode(form.value)}'
 | |
|         : ' Form is invalid';
 | |
|     alerter('Form submitted. $evtMsg');
 | |
|   }
 | |
| 
 | |
|   void setUpperCaseFirstName(String firstName) {
 | |
|     currentHero.firstName = firstName.toUpperCase();
 | |
|   }
 | |
| 
 | |
|   String getStyles(Element el) {
 | |
|     var showStyles = setStyles();
 | |
|     return JSON.encode(showStyles);
 | |
|   }
 | |
| 
 | |
|   // #docregion setStyles
 | |
|   Map setStyles() {
 | |
|     styles['font-style'] = canSave ? 'italic' : 'normal';
 | |
|     styles['font-weight'] = !isUnchanged ? 'bold' : 'normal';
 | |
|     styles['font-size'] = isSpecial ? 'x-large' : 'smaller';
 | |
|     return styles;
 | |
|   }
 | |
|   // #enddocregion setStyles
 | |
| 
 | |
|   // #docregion setStyles2
 | |
|   Map setStyles2() {
 | |
|     // camelCase style properties work too [PENDING: no, they don't]
 | |
|     styles2['fontStyle'] = canSave ? 'italic' : 'normal';
 | |
|     styles2['fontWeight'] = !isUnchanged ? 'bold' : 'normal';
 | |
|     styles2['fontSize'] = isSpecial ? 'x-large' : 'smaller';
 | |
|     return styles2;
 | |
|   }
 | |
|   // #enddocregion setStyles2
 | |
| 
 | |
|   Map setClasses() {
 | |
|     classes['saveable'] = canSave;
 | |
|     classes['modified'] = !isUnchanged;
 | |
|     classes['special'] = isSpecial;
 | |
| 
 | |
|     return classes;
 | |
|   }
 | |
| 
 | |
|   String toeChooser(Element picker) {
 | |
|     List<Element> choices = picker.children;
 | |
|     for (var i = 0; i < choices.length; i++) {
 | |
|       var choice = choices[i];
 | |
|       if (choice.checked) {
 | |
|         chosenToe = choice.value;
 | |
|         return chosenToe;
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| }
 |