Files
phabricator/webroot/rsrc/js/application/config/behavior-reorder-fields.js
epriestley 969a6a2b38 Fix custom field selector control in cases where the user doesn't edit anything
Summary: The JS and PHP representations of state can differ; just have the JS write the state out immediately on page load.

Test Plan: Saved `diffusion.fields` without making changes, reloaded, saw no effective change.

Reviewers: joshuaspence

Reviewed By: joshuaspence

Subscribers: epriestley

Differential Revision: https://secure.phabricator.com/D12998
2015-05-25 05:34:23 -07:00

59 lines
1.3 KiB
JavaScript

/**
* @provides javelin-behavior-config-reorder-fields
* @requires javelin-behavior
* javelin-stratcom
* javelin-dom
* javelin-json
* phabricator-draggable-list
*/
JX.behavior('config-reorder-fields', function(config) {
var fields = config.fields;
var root = JX.$(config.listID);
var list = new JX.DraggableList('field-spec', root)
.setFindItemsHandler(function() {
return JX.DOM.scry(root, 'li', 'field-spec');
});
list.listen('didDrop', function() {
write_state_to_form();
});
JX.DOM.listen(root, 'click', 'field-spec-toggle', function(e) {
e.kill();
var key = e.getNodeData('field-spec').fieldKey;
fields[key].disabled = !fields[key].disabled;
JX.DOM.replace(
e.getNode('field-spec'),
JX.$H(
fields[key].disabled ?
fields[key].disabledMarkup :
fields[key].enabledMarkup));
write_state_to_form();
});
var write_state_to_form = function() {
var nodes = list.findItems();
var order = [];
var key;
for (var ii = 0; ii < nodes.length; ii++) {
key = JX.Stratcom.getData(nodes[ii]).fieldKey;
if (key) {
order.push({
key: key,
disabled: fields[key].disabled
});
}
}
JX.$(config.inputID).value = JX.JSON.stringify(order);
};
write_state_to_form();
});