Changeset View
Changeset View
Standalone View
Standalone View
webroot/rsrc/js/application/transactions/behavior-comment-actions.js
| Show All 13 Lines | JX.behavior('comment-actions', function(config) { | ||||
| var action_node = JX.$(config.actionID); | var action_node = JX.$(config.actionID); | ||||
| var form_node = JX.$(config.formID); | var form_node = JX.$(config.formID); | ||||
| var input_node = JX.$(config.inputID); | var input_node = JX.$(config.inputID); | ||||
| var place_node = JX.$(config.placeID); | var place_node = JX.$(config.placeID); | ||||
| var rows = {}; | var rows = {}; | ||||
| JX.DOM.listen(action_node, 'change', null, function() { | JX.DOM.listen(action_node, 'change', null, function() { | ||||
| var options = action_node.options; | var option = find_option(action_node.value); | ||||
| var option; | |||||
| var selected = action_node.value; | |||||
| action_node.value = '+'; | action_node.value = '+'; | ||||
| if (option) { | |||||
| add_row(option); | |||||
| } | |||||
| }); | |||||
| function find_option(key) { | |||||
| var options = action_node.options; | |||||
| var option; | |||||
| for (var ii = 0; ii < options.length; ii++) { | for (var ii = 0; ii < options.length; ii++) { | ||||
| option = options[ii]; | option = options[ii]; | ||||
| if (option.value == selected) { | if (option.value == key) { | ||||
| add_row(option); | return option; | ||||
| break; | |||||
| } | } | ||||
| } | } | ||||
| }); | |||||
| return null; | |||||
| } | |||||
| function add_row(option) { | function add_row(option) { | ||||
| var action = action_map[option.value]; | var action = action_map[option.value]; | ||||
| if (!action) { | if (!action) { | ||||
| return; | return; | ||||
| } | } | ||||
| option.disabled = true; | option.disabled = true; | ||||
| Show All 13 Lines | function add_row(option) { | ||||
| JX.DOM.listen(remove, 'click', null, function(e) { | JX.DOM.listen(remove, 'click', null, function(e) { | ||||
| e.kill(); | e.kill(); | ||||
| JX.DOM.remove(node); | JX.DOM.remove(node); | ||||
| delete rows[action.key]; | delete rows[action.key]; | ||||
| option.disabled = false; | option.disabled = false; | ||||
| }); | }); | ||||
| place_node.parentNode.insertBefore(node, place_node); | place_node.parentNode.insertBefore(node, place_node); | ||||
| return control; | |||||
| } | } | ||||
| function serialize_actions() { | function serialize_actions() { | ||||
| var data = []; | var data = []; | ||||
| for (var k in rows) { | for (var k in rows) { | ||||
| data.push({ | data.push({ | ||||
| type: k, | type: k, | ||||
| value: rows[k].getValue() | value: rows[k].getValue() | ||||
| }); | }); | ||||
| } | } | ||||
| return JX.JSON.stringify(data); | return JX.JSON.stringify(data); | ||||
| } | } | ||||
| function get_data() { | function get_data() { | ||||
| var data = JX.DOM.convertFormToDictionary(form_node); | var data = JX.DOM.convertFormToDictionary(form_node); | ||||
| data.__preview__ = 1; | data.__preview__ = 1; | ||||
| data[input_node.name] = serialize_actions(); | data[input_node.name] = serialize_actions(); | ||||
| return data; | return data; | ||||
| } | } | ||||
| function restore_draft_actions(drafts) { | |||||
| var draft; | |||||
| var option; | |||||
| var control; | |||||
| for (var ii = 0; ii < drafts.length; ii++) { | |||||
| draft = drafts[ii]; | |||||
| option = find_option(draft.type); | |||||
| if (!option) { | |||||
| continue; | |||||
| } | |||||
| control = add_row(option); | |||||
| control.setValue(draft.value); | |||||
| } | |||||
| } | |||||
| function onresponse(response) { | function onresponse(response) { | ||||
| var panel = JX.$(config.panelID); | var panel = JX.$(config.panelID); | ||||
| if (!response.xactions.length) { | if (!response.xactions.length) { | ||||
| JX.DOM.hide(panel); | JX.DOM.hide(panel); | ||||
| } else { | } else { | ||||
| JX.DOM.setContent( | JX.DOM.setContent( | ||||
| JX.$(config.timelineID), | JX.$(config.timelineID), | ||||
| [ | [ | ||||
| Show All 23 Lines | var always_trigger = function() { | ||||
| .setData(get_data()) | .setData(get_data()) | ||||
| .send(); | .send(); | ||||
| }; | }; | ||||
| JX.DOM.listen(form_node, 'shouldRefresh', null, always_trigger); | JX.DOM.listen(form_node, 'shouldRefresh', null, always_trigger); | ||||
| request.start(); | request.start(); | ||||
| } | } | ||||
| restore_draft_actions(config.drafts || []); | |||||
| }); | }); | ||||