Path: blob/master/webroot/rsrc/js/application/dashboard/behavior-dashboard-move-panels.js
12242 views
/**1* @provides javelin-behavior-dashboard-move-panels2* @requires javelin-behavior3* javelin-dom4* javelin-util5* javelin-stratcom6* javelin-workflow7* phabricator-draggable-list8*/910JX.behavior('dashboard-move-panels', function(config) {1112var itemSigil = 'panel-movable';1314function finditems(col) {15return JX.DOM.scry(col, 'div', itemSigil);16}1718function markcolempty(col, toggle) {19JX.DOM.alterClass(col.parentNode, 'dashboard-column-empty', toggle);20}2122function onupdate(col) {23markcolempty(col, !this.findItems().length);24}2526function onresponse(response, item, list) {27list.unlock();28JX.DOM.alterClass(item, 'drag-sending', false);29}3031function ondrop(list, item, after) {32list.lock();33JX.DOM.alterClass(item, 'drag-sending', true);3435var data = {36panelKey: JX.Stratcom.getData(item).panelKey,37columnKey: JX.Stratcom.getData(list.getRootNode()).columnKey38};3940if (after) {41var after_data = JX.Stratcom.getData(after);42if (after_data.panelKey) {43data.afterKey = after_data.panelKey;44}45}4647var workflow = new JX.Workflow(config.moveURI, data)48.setHandler(function(response) {49onresponse(response, item, list);50});5152workflow.start();53}5455var dashboard_node = JX.$(config.dashboardNodeID);5657var lists = [];58var cols = JX.DOM.scry(dashboard_node, 'div', 'dashboard-column');5960var ii;61for (ii = 0; ii < cols.length; ii++) {62var col = cols[ii];63var list = new JX.DraggableList(itemSigil, col)64.setFindItemsHandler(JX.bind(null, finditems, col))65.setCanDragX(true);6667list.listen('didSend', JX.bind(list, onupdate, col));68list.listen('didReceive', JX.bind(list, onupdate, col));69list.listen('didDrop', JX.bind(null, ondrop, list));7071lists.push(list);7273markcolempty(col, finditems(col).length === 0);74}7576for (ii = 0; ii < lists.length; ii++) {77lists[ii].setGroup(lists);78}7980});818283