angular2
Version:
Angular 2 - a web framework for modern web apps
1 lines • 13 kB
Source Map (JSON)
{"version":3,"sources":["directives.js"],"names":[],"mappings":"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","file":"angular2/src/forms/directives.js","sourcesContent":["import {View, Component, Decorator, Ancestor, onChange, PropertySetter} from 'angular2/angular2';\nimport {Optional} from 'angular2/di';\nimport {isBlank, isPresent, isString, CONST} from 'angular2/src/facade/lang';\nimport {StringMapWrapper, ListWrapper} from 'angular2/src/facade/collection';\nimport {ControlGroup, Control} from './model';\nimport {Validators} from './validators';\n\n//export interface ControlValueAccessor {\n// writeValue(value):void{}\n// set onChange(fn){}\n//}\n\n/**\n * The default accessor for writing a value and listening to changes that is used by a {@link Control} directive.\n *\n * This is the default strategy that Angular uses when no other accessor is applied.\n *\n * # Example\n * ```\n * <input type=\"text\" [control]=\"loginControl\">\n * ```\n *\n * @exportedAs angular2/forms\n */\n@Decorator({\n selector: '[control]',\n hostListeners: {\n 'change' : 'onChange($event.target.value)',\n 'input' : 'onChange($event.target.value)'\n }\n})\nexport class DefaultValueAccessor {\n _setValueProperty:Function;\n onChange:Function;\n\n constructor(@PropertySetter('value') setValueProperty:Function) {\n this._setValueProperty = setValueProperty;\n this.onChange = (_) => {};\n }\n\n writeValue(value) {\n this._setValueProperty(value);\n }\n}\n\n/**\n * The accessor for writing a value and listening to changes on a checkbox input element.\n *\n *\n * # Example\n * ```\n * <input type=\"checkbox\" [control]=\"rememberLogin\">\n * ```\n *\n * @exportedAs angular2/forms\n */\n@Decorator({\n selector: 'input[type=checkbox][control]',\n hostListeners: {\n 'change' : 'onChange($event.target.checked)'\n }\n})\nexport class CheckboxControlValueAccessor {\n _setCheckedProperty:Function;\n onChange:Function;\n\n constructor(cd:ControlDirective, @PropertySetter('checked') setCheckedProperty:Function) {\n this._setCheckedProperty = setCheckedProperty;\n this.onChange = (_) => {};\n cd.valueAccessor = this; //ControlDirective should inject CheckboxControlDirective\n }\n\n writeValue(value) {\n this._setCheckedProperty(value);\n }\n}\n\n/**\n * Binds a control to a DOM element.\n *\n * # Example\n *\n * In this example, we bind the control to an input element. When the value of the input element changes, the value of\n * the control will reflect that change. Likewise, if the value of the control changes, the input element reflects that\n * change.\n *\n * Here we use {@link FormDirectives}, rather than importing each form directive individually, e.g.\n * `ControlDirective`, `ControlGroupDirective`. This is just a shorthand for the same end result.\n *\n * ```\n * @Component({selector: \"login-comp\"})\n * @View({\n * directives: [FormDirectives],\n * inline: \"<input type='text' [control]='loginControl'>\"\n * })\n * class LoginComp {\n * loginControl:Control;\n *\n * constructor() {\n * this.loginControl = new Control('');\n * }\n * }\n *\n * ```\n *\n * @exportedAs angular2/forms\n */\n@Decorator({\n lifecycle: [onChange],\n selector: '[control]',\n properties: {\n 'controlOrName' : 'control'\n }\n})\nexport class ControlDirective {\n _groupDirective:ControlGroupDirective;\n\n controlOrName:any;\n valueAccessor:any; //ControlValueAccessor\n\n validator:Function;\n\n constructor(@Optional() @Ancestor() groupDirective:ControlGroupDirective, valueAccessor:DefaultValueAccessor) {\n this._groupDirective = groupDirective;\n this.controlOrName = null;\n this.valueAccessor = valueAccessor;\n this.validator = Validators.nullValidator;\n }\n\n // TODO: vsavkin this should be moved into the constructor once static bindings\n // are implemented\n onChange(_) {\n this._initialize();\n }\n\n _initialize() {\n if(isPresent(this._groupDirective)) {\n this._groupDirective.addDirective(this);\n }\n\n var c = this._control();\n c.validator = Validators.compose([c.validator, this.validator]);\n\n this._updateDomValue();\n this._setUpUpdateControlValue();\n }\n\n _updateDomValue() {\n this.valueAccessor.writeValue(this._control().value);\n }\n\n _setUpUpdateControlValue() {\n this.valueAccessor.onChange = (newValue) => this._control().updateValue(newValue);\n }\n\n _control() {\n if (isString(this.controlOrName)) {\n return this._groupDirective.findControl(this.controlOrName);\n } else {\n return this.controlOrName;\n }\n }\n}\n\n/**\n * Binds a control group to a DOM element.\n *\n * # Example\n *\n * In this example, we bind the control group to the form element, and we bind the login and password controls to the\n * login and password elements.\n *\n * Here we use {@link FormDirectives}, rather than importing each form directive individually, e.g.\n * `ControlDirective`, `ControlGroupDirective`. This is just a shorthand for the same end result.\n *\n * ```\n * @Component({selector: \"login-comp\"})\n * @View({\n * directives: [FormDirectives],\n * inline: \"<form [control-group]='loginForm'>\" +\n * \"Login <input type='text' control='login'>\" +\n * \"Password <input type='password' control='password'>\" +\n * \"<button (click)=\"onLogin()\">Login</button>\" +\n * \"</form>\"\n * })\n * class LoginComp {\n * loginForm:ControlGroup;\n *\n * constructor() {\n * this.loginForm = new ControlGroup({\n * login: new Control(\"\"),\n * password: new Control(\"\")\n * });\n * }\n *\n * onLogin() {\n * // this.loginForm.value\n * }\n * }\n *\n * ```\n *\n * @exportedAs angular2/forms\n */\n@Decorator({\n selector: '[control-group]',\n properties: {\n 'controlGroup' : 'control-group'\n }\n})\nexport class ControlGroupDirective {\n _groupDirective:ControlGroupDirective;\n _controlGroupName:string;\n\n _controlGroup:ControlGroup;\n _directives:List<ControlDirective>;\n\n constructor(@Optional() @Ancestor() groupDirective:ControlGroupDirective) {\n this._groupDirective = groupDirective;\n this._directives = ListWrapper.create();\n }\n\n set controlGroup(controlGroup) {\n if (isString(controlGroup)) {\n this._controlGroupName = controlGroup;\n } else {\n this._controlGroup = controlGroup;\n }\n this._updateDomValue();\n }\n\n _updateDomValue() {\n ListWrapper.forEach(this._directives, (cd) => cd._updateDomValue());\n }\n\n addDirective(c:ControlDirective) {\n ListWrapper.push(this._directives, c);\n }\n\n findControl(name:string):any {\n return this._getControlGroup().controls[name];\n }\n\n _getControlGroup():ControlGroup {\n if (isPresent(this._controlGroupName)) {\n return this._groupDirective.findControl(this._controlGroupName)\n } else {\n return this._controlGroup;\n }\n }\n}\n\n/**\n *\n * A list of all the form directives used as part of a `@View` annotation.\n *\n * This is a shorthand for importing them each individually.\n *\n * @exportedAs angular2/forms\n */\n// todo(misko): rename to lover case as it is not a Type but a var.\nexport var FormDirectives = [\n ControlGroupDirective, ControlDirective, CheckboxControlValueAccessor, DefaultValueAccessor\n];\n"]}