phorge/webroot/rsrc/js/application/projects/behavior-reorder-columns.js
epriestley b7a970598d Allow board columns to be reordered
Summary: Fixes T4567. This isn't going to win design awards and we have some leaky CSS, but it works fine.

Test Plan: {F176743}

Reviewers: btrahan, chad

Reviewed By: chad

Subscribers: epriestley

Maniphest Tasks: T4567

Differential Revision: https://secure.phabricator.com/D9905
2014-07-11 19:27:07 -07:00

59 lines
1.5 KiB
JavaScript

/**
* @provides javelin-behavior-reorder-columns
* @requires javelin-behavior
* javelin-stratcom
* javelin-workflow
* javelin-dom
* phabricator-draggable-list
*/
JX.behavior('reorder-columns', function(config) {
var root = JX.$(config.listID);
var list = new JX.DraggableList('board-column', root)
.setFindItemsHandler(function() {
return JX.DOM.scry(root, 'li', 'board-column');
});
list.listen('didDrop', function(node) {
var nodes = list.findItems();
var node_data = JX.Stratcom.getData(node);
// Find the column sequence of the previous node.
var sequence = null;
var data;
for (var ii = 0; ii < nodes.length; ii++) {
data = JX.Stratcom.getData(nodes[ii]);
if (data.columnPHID === node_data.columnPHID) {
break;
}
sequence = data.columnSequence;
}
list.lock();
JX.DOM.alterClass(node, 'drag-sending', true);
var parameters = {
columnPHID: node_data.columnPHID,
sequence: (sequence === null) ? 1 : (parseInt(sequence, 10) + 1)
};
new JX.Workflow(config.reorderURI, parameters)
.setHandler(function(r) {
// Adjust metadata for the new sequence numbers.
for (var ii = 0; ii < nodes.length; ii++) {
var data = JX.Stratcom.getData(nodes[ii]);
data.columnSequence = r.sequenceMap[data.columnPHID];
}
list.unlock();
JX.DOM.alterClass(node, 'drag-sending', false);
})
.start();
});
});