| 
									
										
										
										
											2015-12-08 11:22:15 -08:00
										 |  |  | import {Component} from 'angular2/core'; | 
					
						
							|  |  |  | import {NgForm} from 'angular2/common'; | 
					
						
							| 
									
										
										
										
											2015-12-07 13:31:26 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | import {Hero} from './hero'; | 
					
						
							|  |  |  | import {HeroDetailComponent, BigHeroDetailComponent} from './hero-detail.component'; | 
					
						
							|  |  |  | import {MyClickDirective, MyClickDirective2} from './my-click.directive'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // 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({ | 
					
						
							|  |  |  |   selector: 'my-app', | 
					
						
							|  |  |  |   templateUrl: 'app/app.component.html', | 
					
						
							|  |  |  |   directives: [ | 
					
						
							|  |  |  |     HeroDetailComponent, BigHeroDetailComponent, | 
					
						
							|  |  |  |     MyClickDirective, MyClickDirective2 | 
					
						
							|  |  |  |   ] | 
					
						
							|  |  |  | }) | 
					
						
							|  |  |  | export class AppComponent { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   actionName = 'Go for it'; | 
					
						
							|  |  |  |   alert = alerter; | 
					
						
							|  |  |  |   callFax(value:string)   {this.alert(`Faxing ${value} ...`)} | 
					
						
							|  |  |  |   callPhone(value:string) {this.alert(`Calling ${value} ...`)} | 
					
						
							|  |  |  |   canSave =  true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Color = Color; | 
					
						
							|  |  |  |   color = Color.Red; | 
					
						
							|  |  |  |   colorToggle() {this.color = (this.color === Color.Red)? Color.Blue : Color.Red} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   currentHero = Hero.MockHeroes[0]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   getStyles(el:Element){ | 
					
						
							|  |  |  |     let styles = window.getComputedStyle(el); | 
					
						
							|  |  |  |     let showStyles = {}; | 
					
						
							|  |  |  |     for (var p in this.setStyles()){ | 
					
						
							|  |  |  |       showStyles[p] = styles[p]; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return JSON.stringify(showStyles); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   getVal() {return this.val}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   heroes = Hero.MockHeroes; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // 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 = 'https://angular.io/resources/images/logos/standard/shield-large.png';
 | 
					
						
							|  |  |  |   iconUrl = 'images/ng-logo.png'; | 
					
						
							|  |  |  |   isActive = false; | 
					
						
							|  |  |  |   isSpecial = true; | 
					
						
							|  |  |  |   isUnchanged = true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   nullHero:Hero = null; // or undefined
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   onCancel(event:KeyboardEvent){ | 
					
						
							|  |  |  |     let evtMsg = event ? ' Event target is '+ (<HTMLElement>event.target).innerHTML : ''; | 
					
						
							|  |  |  |     this.alert('Canceled.'+evtMsg) | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   onClickMe(event:KeyboardEvent){ | 
					
						
							|  |  |  |     let evtMsg = event ? ' Event target class is '+ (<HTMLElement>event.target).className  : ''; | 
					
						
							|  |  |  |     this.alert('Click me.'+evtMsg) | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   onHeroDeleted(hero:Hero){ | 
					
						
							|  |  |  |     this.alert('Deleted hero: '+ (hero && hero.firstName)) | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   onSave(event:KeyboardEvent){ | 
					
						
							|  |  |  |     let evtMsg = event ? ' Event target is '+ (<HTMLElement>event.target).innerText : ''; | 
					
						
							|  |  |  |     this.alert('Saved.'+evtMsg) | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   onSubmit(form:NgForm){ | 
					
						
							|  |  |  |     let evtMsg = form.valid ? | 
					
						
							|  |  |  |       ' Form value is '+ JSON.stringify(form.value) : | 
					
						
							|  |  |  |       ' Form is invalid'; | 
					
						
							|  |  |  |     this.alert('Form submitted.'+evtMsg) | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   product = { | 
					
						
							|  |  |  |     name: 'frimfram', | 
					
						
							|  |  |  |     price: 42 | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   setUpperCaseFirstName(firstName:string){ | 
					
						
							|  |  |  |     //console.log(firstName);
 | 
					
						
							|  |  |  |     this.currentHero.firstName = firstName.toUpperCase(); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // #docregion setClasses
 | 
					
						
							|  |  |  |   setClasses() { | 
					
						
							|  |  |  |     return { | 
					
						
							|  |  |  |       saveable: this.canSave,      // true
 | 
					
						
							|  |  |  |       modified: !this.isUnchanged, // false
 | 
					
						
							|  |  |  |       special: this.isSpecial,     // true
 | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   // #enddocregion setClasses
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // #docregion setStyles
 | 
					
						
							|  |  |  |   setStyles() { | 
					
						
							|  |  |  |     return { | 
					
						
							| 
									
										
										
										
											2015-12-13 22:29:37 -08:00
										 |  |  |       // CSS property names
 | 
					
						
							| 
									
										
										
										
											2015-12-07 13:31:26 -08:00
										 |  |  |       'font-style':  this.canSave      ? 'italic' : 'normal',  // italic
 | 
					
						
							|  |  |  |       'font-weight': !this.isUnchanged ? 'bold'   : 'normal',  // normal
 | 
					
						
							|  |  |  |       'font-size':   this.isSpecial    ? 'x-large': 'smaller', // larger
 | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   // #enddocregion setStyles
 | 
					
						
							| 
									
										
										
										
											2015-12-13 22:29:37 -08:00
										 |  |  |   | 
					
						
							|  |  |  |   // #docregion setStyles2
 | 
					
						
							|  |  |  |   setStyles2() { | 
					
						
							|  |  |  |     return { | 
					
						
							| 
									
										
										
										
											2015-12-10 09:40:54 -08:00
										 |  |  |       // camelCase style properties work too
 | 
					
						
							| 
									
										
										
										
											2015-12-13 22:29:37 -08:00
										 |  |  |       fontStyle:  this.canSave      ? 'italic' : 'normal',  // italic
 | 
					
						
							|  |  |  |       fontWeight: !this.isUnchanged ? 'bold'   : 'normal',  // normal
 | 
					
						
							|  |  |  |       fontSize:   this.isSpecial    ? 'x-large': 'smaller', // larger
 | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   // #enddocregion setStyles2
 | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  |   toeChoice = ''; | 
					
						
							|  |  |  |   toeChooser(picker:HTMLFieldSetElement){ | 
					
						
							| 
									
										
										
										
											2015-12-07 13:31:26 -08:00
										 |  |  |     let choices = picker.children; | 
					
						
							|  |  |  |     for (let i=0; i<choices.length; i++){ | 
					
						
							|  |  |  |       var choice = <HTMLInputElement>choices[i]; | 
					
						
							| 
									
										
										
										
											2015-12-13 22:29:37 -08:00
										 |  |  |       if (choice.checked) {return this.toeChoice = choice.value} | 
					
						
							| 
									
										
										
										
											2015-12-07 13:31:26 -08:00
										 |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   title = 'Template Syntax' | 
					
						
							|  |  |  |   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' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |