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;
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 |