Changeset View
Changeset View
Standalone View
Standalone View
webroot/rsrc/js/phuix/PHUIXFormControl.js
- This file was added.
| /** | |||||
| * @provides phuix-form-control-view | |||||
| * @requires javelin-install | |||||
| * javelin-dom | |||||
| */ | |||||
| JX.install('PHUIXFormControl', { | |||||
| members: { | |||||
| _node: null, | |||||
| _labelNode: null, | |||||
| _errorNode: null, | |||||
| _inputNode: null, | |||||
| _valueSetCallback: null, | |||||
| _valueGetCallback: null, | |||||
| setLabel: function(label) { | |||||
| JX.DOM.setContent(this._getLabelNode(), label); | |||||
| return this; | |||||
| }, | |||||
| setError: function(error) { | |||||
| JX.DOM.setContent(this._getErrorNode(), error); | |||||
| return this; | |||||
| }, | |||||
| setControl: function(type, spec) { | |||||
| var node = this._getInputNode(); | |||||
| var input; | |||||
| switch (type) { | |||||
| case 'tokenizer': | |||||
| input = this._newTokenizer(spec); | |||||
| break; | |||||
| default: | |||||
| // TODO: Default or better error? | |||||
| JX.$E('Bad Input Type'); | |||||
| return; | |||||
| } | |||||
| JX.DOM.setContent(node, input.node); | |||||
| this._valueGetCallback = input.get; | |||||
| this._valueSetCallback = input.set; | |||||
| return this; | |||||
| }, | |||||
| setValue: function(value) { | |||||
| this._valueSetCallback(value); | |||||
| return this; | |||||
| }, | |||||
| getValue: function() { | |||||
| return this._valueGetCallback(); | |||||
| }, | |||||
| getNode: function() { | |||||
| if (!this._node) { | |||||
| var attrs = { | |||||
| className: 'aphront-form-control grouped' | |||||
| }; | |||||
| var content = [ | |||||
| this._getLabelNode(), | |||||
| this._getErrorNode(), | |||||
| this._getInputNode() | |||||
| ]; | |||||
| this._node = JX.$N('div', attrs, content); | |||||
| } | |||||
| return this._node; | |||||
| }, | |||||
| _getLabelNode: function() { | |||||
| if (!this._labelNode) { | |||||
| var attrs = { | |||||
| className: 'aphront-form-label' | |||||
| }; | |||||
| this._labelNode = JX.$N('label', attrs); | |||||
| } | |||||
| return this._labelNode; | |||||
| }, | |||||
| _getErrorNode: function() { | |||||
| if (!this._errorNode) { | |||||
| var attrs = { | |||||
| className: 'aphront-form-error' | |||||
| }; | |||||
| this._errorNode = JX.$N('span', attrs); | |||||
| } | |||||
| return this._errorNode; | |||||
| }, | |||||
| _getInputNode: function() { | |||||
| if (!this._inputNode) { | |||||
| var attrs = { | |||||
| className: 'aphront-form-input' | |||||
| }; | |||||
| this._inputNode = JX.$N('div', attrs); | |||||
| } | |||||
| return this._inputNode; | |||||
| }, | |||||
| _newTokenizer: function(spec) { | |||||
| var build = JX.Prefab.newTokenizerFromTemplate( | |||||
| spec.markup, | |||||
| spec.config); | |||||
| build.tokenizer.start(); | |||||
| return { | |||||
| node: build.node, | |||||
| get: function() { | |||||
| return JX.keys(build.tokenizer.getTokens()); | |||||
| }, | |||||
| set: function(map) { | |||||
| for (var k in map) { | |||||
| build.tokenizer.addToken(k, map[k]); | |||||
| } | |||||
| } | |||||
| }; | |||||
| } | |||||
| } | |||||
| }); | |||||