1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-27 09:12:41 +01:00
phorge-phorge/webroot/rsrc/js/application/trigger/TriggerRuleEditor.js

138 lines
3 KiB
JavaScript
Raw Normal View History

/**
* @requires multirow-row-manager
* trigger-rule
* @provides trigger-rule-editor
* @javelin
*/
JX.install('TriggerRuleEditor', {
construct: function(form_node) {
this._formNode = form_node;
this._rules = [];
this._types = [];
},
members: {
_formNode: null,
_tableNode: null,
_createButtonNode: null,
_inputNode: null,
_rowManager: null,
_rules: null,
_types: null,
setTableNode: function(table) {
this._tableNode = table;
return this;
},
setCreateButtonNode: function(button) {
this._createButtonNode = button;
return this;
},
setInputNode: function(input) {
this._inputNode = input;
return this;
},
start: function() {
var on_submit = JX.bind(this, this._submitForm);
JX.DOM.listen(this._formNode, 'submit', null, on_submit);
var manager = new JX.MultirowRowManager(this._tableNode);
this._rowManager = manager;
var on_remove = JX.bind(this, this._rowRemoved);
manager.listen('row-removed', on_remove);
var create_button = this._createButtonNode;
var on_create = JX.bind(this, this._createRow);
JX.DOM.listen(create_button, 'click', null, on_create);
},
_submitForm: function() {
var values = [];
for (var ii = 0; ii < this._rules.length; ii++) {
var rule = this._rules[ii];
values.push(rule.getValueForSubmit());
}
this._inputNode.value = JX.JSON.stringify(values);
},
_createRow: function(e) {
var rule = this.newRule();
this.addRule(rule);
e.kill();
},
newRule: function() {
// Create new rules with the first valid rule type.
var types = this.getTypes();
var type;
for (var ii = 0; ii < types.length; ii++) {
type = types[ii];
if (!type.getIsSelectable()) {
continue;
}
// If we make it here: this type is valid, so use it.
break;
}
var default_value = type.getDefaultValue();
return new JX.TriggerRule()
.setType(type.getType())
.setValue(default_value);
},
addRule: function(rule) {
rule.setEditor(this);
this._rules.push(rule);
var manager = this._rowManager;
var row = manager.addRow([]);
var row_id = manager.getRowID(row);
rule.setRowID(row_id);
manager.updateRow(row_id, rule.newRowContent());
},
addType: function(type) {
this._types.push(type);
return this;
},
getTypes: function() {
return this._types;
},
getType: function(type) {
for (var ii = 0; ii < this._types.length; ii++) {
if (this._types[ii].getType() === type) {
return this._types[ii];
}
}
return null;
},
_rowRemoved: function(row_id) {
for (var ii = 0; ii < this._rules.length; ii++) {
var rule = this._rules[ii];
if (rule.getRowID() === row_id) {
this._rules.splice(ii, 1);
break;
}
}
}
}
});