Path: blob/master/webroot/rsrc/js/application/trigger/TriggerRuleEditor.js
12242 views
/**1* @requires multirow-row-manager2* trigger-rule3* @provides trigger-rule-editor4* @javelin5*/67JX.install('TriggerRuleEditor', {89construct: function(form_node) {10this._formNode = form_node;11this._rules = [];12this._types = [];13},1415members: {16_formNode: null,17_tableNode: null,18_createButtonNode: null,19_inputNode: null,20_rowManager: null,21_rules: null,22_types: null,2324setTableNode: function(table) {25this._tableNode = table;26return this;27},2829setCreateButtonNode: function(button) {30this._createButtonNode = button;31return this;32},3334setInputNode: function(input) {35this._inputNode = input;36return this;37},3839start: function() {40var on_submit = JX.bind(this, this._submitForm);41JX.DOM.listen(this._formNode, 'submit', null, on_submit);4243var manager = new JX.MultirowRowManager(this._tableNode);44this._rowManager = manager;4546var on_remove = JX.bind(this, this._rowRemoved);47manager.listen('row-removed', on_remove);4849var create_button = this._createButtonNode;50var on_create = JX.bind(this, this._createRow);51JX.DOM.listen(create_button, 'click', null, on_create);52},5354_submitForm: function() {55var values = [];56for (var ii = 0; ii < this._rules.length; ii++) {57var rule = this._rules[ii];58values.push(rule.getValueForSubmit());59}6061this._inputNode.value = JX.JSON.stringify(values);62},6364_createRow: function(e) {65var rule = this.newRule();66this.addRule(rule);67e.kill();68},6970newRule: function() {71// Create new rules with the first valid rule type.72var types = this.getTypes();73var type;74for (var ii = 0; ii < types.length; ii++) {75type = types[ii];76if (!type.getIsSelectable()) {77continue;78}7980// If we make it here: this type is valid, so use it.81break;82}8384var default_value = type.getDefaultValue();8586return new JX.TriggerRule()87.setType(type.getType())88.setValue(default_value);89},9091addRule: function(rule) {92rule.setEditor(this);93this._rules.push(rule);9495var manager = this._rowManager;9697var row = manager.addRow([]);98var row_id = manager.getRowID(row);99rule.setRowID(row_id);100101manager.updateRow(row_id, rule.newRowContent());102},103104addType: function(type) {105this._types.push(type);106return this;107},108109getTypes: function() {110return this._types;111},112113getType: function(type) {114for (var ii = 0; ii < this._types.length; ii++) {115if (this._types[ii].getType() === type) {116return this._types[ii];117}118}119120return null;121},122123_rowRemoved: function(row_id) {124for (var ii = 0; ii < this._rules.length; ii++) {125var rule = this._rules[ii];126127if (rule.getRowID() === row_id) {128this._rules.splice(ii, 1);129break;130}131}132}133134}135136});137138139