Files
phabricator/webroot/rsrc/js/application/projects/behavior-reorder-columns.js

59 lines
1.5 KiB
JavaScript
Raw Normal View History

/**
* @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) ? 0 : (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();
});
});