Changeset View
Changeset View
Standalone View
Standalone View
webroot/rsrc/js/application/trigger/TriggerRule.js
- This file was added.
| /** | |||||
| * @provides trigger-rule | |||||
| * @javelin | |||||
| */ | |||||
| JX.install('TriggerRule', { | |||||
| construct: function() { | |||||
| }, | |||||
| properties: { | |||||
| rowID: null, | |||||
| type: null, | |||||
| value: null, | |||||
| editor: null, | |||||
| isValidRule: true, | |||||
| invalidView: null | |||||
| }, | |||||
| statics: { | |||||
| newFromDictionary: function(map) { | |||||
| return new JX.TriggerRule() | |||||
| .setType(map.type) | |||||
| .setValue(map.value) | |||||
| .setIsValidRule(map.isValidRule) | |||||
| .setInvalidView(map.invalidView); | |||||
| }, | |||||
| }, | |||||
| members: { | |||||
| _typeCell: null, | |||||
| _valueCell: null, | |||||
| _readValueCallback: null, | |||||
| newRowContent: function() { | |||||
| if (!this.getIsValidRule()) { | |||||
| var invalid_cell = JX.$N( | |||||
| 'td', | |||||
| { | |||||
| colSpan: 2, | |||||
| className: 'invalid-cell' | |||||
| }, | |||||
| JX.$H(this.getInvalidView())); | |||||
| return [invalid_cell]; | |||||
| } | |||||
| var type_cell = this._getTypeCell(); | |||||
| var value_cell = this._getValueCell(); | |||||
| this._rebuildValueControl(); | |||||
| return [type_cell, value_cell]; | |||||
| }, | |||||
| getValueForSubmit: function() { | |||||
| this._readValueFromControl(); | |||||
| return { | |||||
| type: this.getType(), | |||||
| value: this.getValue() | |||||
| }; | |||||
| }, | |||||
| _getTypeCell: function() { | |||||
| if (!this._typeCell) { | |||||
| var editor = this.getEditor(); | |||||
| var types = editor.getTypes(); | |||||
| var options = []; | |||||
| for (var ii = 0; ii < types.length; ii++) { | |||||
| var type = types[ii]; | |||||
| if (!type.getIsSelectable()) { | |||||
| continue; | |||||
| } | |||||
| options.push( | |||||
| JX.$N('option', {value: type.getType()}, type.getName())); | |||||
| } | |||||
| var control = JX.$N('select', {}, options); | |||||
| control.value = this.getType(); | |||||
| var on_change = JX.bind(this, this._onTypeChange); | |||||
| JX.DOM.listen(control, 'onchange', null, on_change); | |||||
| var attributes = { | |||||
| className: 'type-cell' | |||||
| }; | |||||
| this._typeCell = JX.$N('td', attributes, control); | |||||
| } | |||||
| return this._typeCell; | |||||
| }, | |||||
| _onTypeChange: function() { | |||||
| var control = this._getTypeCell(); | |||||
| this.setType(control.value); | |||||
| this._rebuildValueControl(); | |||||
| }, | |||||
| _getValueCell: function() { | |||||
| if (!this._valueCell) { | |||||
| var attributes = { | |||||
| className: 'value-cell' | |||||
| }; | |||||
| this._valueCell = JX.$N('td', attributes); | |||||
| } | |||||
| return this._valueCell; | |||||
| }, | |||||
| _rebuildValueControl: function() { | |||||
| var value_cell = this._getValueCell(); | |||||
| var editor = this.getEditor(); | |||||
| var type = editor.getType(this.getType()); | |||||
| var control = type.getControl(); | |||||
| var input = control.newInput(this); | |||||
| this._readValueCallback = input.get; | |||||
| JX.DOM.setContent(value_cell, input.node); | |||||
| }, | |||||
| _readValueFromControl: function() { | |||||
| if (this._readValueCallback) { | |||||
| this.setValue(this._readValueCallback()); | |||||
| } | |||||
| } | |||||
| } | |||||
| }); | |||||