Mostly move workboard card moves to new Workboard code
Summary: Ref T4900. This gets moves on the new stuff and cleans them up a little. Two behaviors haven't been ported yet: height adjustment during drags (which is broken anyway with inner scroll) and updating point counts (coming soon). Test Plan: Dragged cards around on a board, including top/bottom positions and normal/priority sort. Reviewers: chad Reviewed By: chad Maniphest Tasks: T4900 Differential Revision: https://secure.phabricator.com/D15226
This commit is contained in:
@@ -415,8 +415,8 @@ return array(
|
|||||||
'rsrc/js/application/phortune/phortune-credit-card-form.js' => '2290aeef',
|
'rsrc/js/application/phortune/phortune-credit-card-form.js' => '2290aeef',
|
||||||
'rsrc/js/application/policy/behavior-policy-control.js' => 'd0c516d5',
|
'rsrc/js/application/policy/behavior-policy-control.js' => 'd0c516d5',
|
||||||
'rsrc/js/application/policy/behavior-policy-rule-editor.js' => '5e9f347c',
|
'rsrc/js/application/policy/behavior-policy-rule-editor.js' => '5e9f347c',
|
||||||
'rsrc/js/application/projects/Workboard.js' => '555f521a',
|
'rsrc/js/application/projects/Workboard.js' => 'b38d2c73',
|
||||||
'rsrc/js/application/projects/behavior-project-boards.js' => '9ed304e5',
|
'rsrc/js/application/projects/behavior-project-boards.js' => '7f4359dd',
|
||||||
'rsrc/js/application/projects/behavior-project-create.js' => '065227cc',
|
'rsrc/js/application/projects/behavior-project-create.js' => '065227cc',
|
||||||
'rsrc/js/application/projects/behavior-reorder-columns.js' => 'e1d25dfb',
|
'rsrc/js/application/projects/behavior-reorder-columns.js' => 'e1d25dfb',
|
||||||
'rsrc/js/application/releeph/releeph-preview-branch.js' => 'b2b4fbaf',
|
'rsrc/js/application/releeph/releeph-preview-branch.js' => 'b2b4fbaf',
|
||||||
@@ -656,7 +656,7 @@ return array(
|
|||||||
'javelin-behavior-phui-profile-menu' => '12884df9',
|
'javelin-behavior-phui-profile-menu' => '12884df9',
|
||||||
'javelin-behavior-policy-control' => 'd0c516d5',
|
'javelin-behavior-policy-control' => 'd0c516d5',
|
||||||
'javelin-behavior-policy-rule-editor' => '5e9f347c',
|
'javelin-behavior-policy-rule-editor' => '5e9f347c',
|
||||||
'javelin-behavior-project-boards' => '9ed304e5',
|
'javelin-behavior-project-boards' => '7f4359dd',
|
||||||
'javelin-behavior-project-create' => '065227cc',
|
'javelin-behavior-project-create' => '065227cc',
|
||||||
'javelin-behavior-quicksand-blacklist' => '7927a7d3',
|
'javelin-behavior-quicksand-blacklist' => '7927a7d3',
|
||||||
'javelin-behavior-recurring-edit' => '5f1c4d5f',
|
'javelin-behavior-recurring-edit' => '5f1c4d5f',
|
||||||
@@ -723,7 +723,7 @@ return array(
|
|||||||
'javelin-view-renderer' => '6c2b09a2',
|
'javelin-view-renderer' => '6c2b09a2',
|
||||||
'javelin-view-visitor' => 'efe49472',
|
'javelin-view-visitor' => 'efe49472',
|
||||||
'javelin-websocket' => 'e292eaf4',
|
'javelin-websocket' => 'e292eaf4',
|
||||||
'javelin-workboard' => '555f521a',
|
'javelin-workboard' => 'b38d2c73',
|
||||||
'javelin-workflow' => '5b2e3e2b',
|
'javelin-workflow' => '5b2e3e2b',
|
||||||
'lightbox-attachment-css' => '7acac05d',
|
'lightbox-attachment-css' => '7acac05d',
|
||||||
'maniphest-batch-editor' => 'b0f0b6d5',
|
'maniphest-batch-editor' => 'b0f0b6d5',
|
||||||
@@ -1223,16 +1223,6 @@ return array(
|
|||||||
'javelin-request',
|
'javelin-request',
|
||||||
'javelin-typeahead-source',
|
'javelin-typeahead-source',
|
||||||
),
|
),
|
||||||
'555f521a' => array(
|
|
||||||
'javelin-install',
|
|
||||||
'javelin-dom',
|
|
||||||
'javelin-util',
|
|
||||||
'javelin-vector',
|
|
||||||
'javelin-stratcom',
|
|
||||||
'javelin-workflow',
|
|
||||||
'phabricator-draggable-list',
|
|
||||||
'phabricator-drag-and-drop-file-upload',
|
|
||||||
),
|
|
||||||
'558829c2' => array(
|
'558829c2' => array(
|
||||||
'javelin-stratcom',
|
'javelin-stratcom',
|
||||||
'javelin-behavior',
|
'javelin-behavior',
|
||||||
@@ -1456,6 +1446,17 @@ return array(
|
|||||||
'javelin-behavior',
|
'javelin-behavior',
|
||||||
'javelin-history',
|
'javelin-history',
|
||||||
),
|
),
|
||||||
|
'7f4359dd' => array(
|
||||||
|
'javelin-behavior',
|
||||||
|
'javelin-dom',
|
||||||
|
'javelin-util',
|
||||||
|
'javelin-vector',
|
||||||
|
'javelin-stratcom',
|
||||||
|
'javelin-workflow',
|
||||||
|
'phabricator-draggable-list',
|
||||||
|
'phabricator-drag-and-drop-file-upload',
|
||||||
|
'javelin-workboard',
|
||||||
|
),
|
||||||
'805b806a' => array(
|
'805b806a' => array(
|
||||||
'javelin-magical-init',
|
'javelin-magical-init',
|
||||||
'javelin-install',
|
'javelin-install',
|
||||||
@@ -1597,17 +1598,6 @@ return array(
|
|||||||
'javelin-dom',
|
'javelin-dom',
|
||||||
'javelin-vector',
|
'javelin-vector',
|
||||||
),
|
),
|
||||||
'9ed304e5' => array(
|
|
||||||
'javelin-behavior',
|
|
||||||
'javelin-dom',
|
|
||||||
'javelin-util',
|
|
||||||
'javelin-vector',
|
|
||||||
'javelin-stratcom',
|
|
||||||
'javelin-workflow',
|
|
||||||
'phabricator-draggable-list',
|
|
||||||
'phabricator-drag-and-drop-file-upload',
|
|
||||||
'javelin-workboard',
|
|
||||||
),
|
|
||||||
'9f36c42d' => array(
|
'9f36c42d' => array(
|
||||||
'javelin-behavior',
|
'javelin-behavior',
|
||||||
'javelin-stratcom',
|
'javelin-stratcom',
|
||||||
@@ -1727,6 +1717,16 @@ return array(
|
|||||||
'javelin-uri',
|
'javelin-uri',
|
||||||
'javelin-request',
|
'javelin-request',
|
||||||
),
|
),
|
||||||
|
'b38d2c73' => array(
|
||||||
|
'javelin-install',
|
||||||
|
'javelin-dom',
|
||||||
|
'javelin-util',
|
||||||
|
'javelin-vector',
|
||||||
|
'javelin-stratcom',
|
||||||
|
'javelin-workflow',
|
||||||
|
'phabricator-draggable-list',
|
||||||
|
'phabricator-drag-and-drop-file-upload',
|
||||||
|
),
|
||||||
'b3a4b884' => array(
|
'b3a4b884' => array(
|
||||||
'javelin-behavior',
|
'javelin-behavior',
|
||||||
'phabricator-prefab',
|
'phabricator-prefab',
|
||||||
|
|||||||
@@ -33,7 +33,11 @@ JX.install('Workboard', {
|
|||||||
|
|
||||||
addBoard: function(board_phid, board_node) {
|
addBoard: function(board_phid, board_node) {
|
||||||
this._currentBoard = board_phid;
|
this._currentBoard = board_phid;
|
||||||
this._boardNodes[board_phid] = board_node;
|
|
||||||
|
if (!this._boardNodes[board_phid]) {
|
||||||
|
this._boardNodes[board_phid] = board_node;
|
||||||
|
this._setupDragHandlers(board_node);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_getConfig: function() {
|
_getConfig: function() {
|
||||||
@@ -121,6 +125,85 @@ JX.install('Workboard', {
|
|||||||
|
|
||||||
_onpanmouseup: function() {
|
_onpanmouseup: function() {
|
||||||
this._panOrigin = null;
|
this._panOrigin = null;
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
_setupDragHandlers: function(board_node) {
|
||||||
|
var columns = this._findBoardColumns(board_node);
|
||||||
|
var column;
|
||||||
|
var ii;
|
||||||
|
var lists = [];
|
||||||
|
|
||||||
|
for (ii = 0; ii < columns.length; ii++) {
|
||||||
|
column = columns[ii];
|
||||||
|
|
||||||
|
var list = new JX.DraggableList('project-card', column)
|
||||||
|
.setOuterContainer(board_node)
|
||||||
|
.setFindItemsHandler(JX.bind(this, this._findCardsInColumn, column))
|
||||||
|
.setCanDragX(true);
|
||||||
|
|
||||||
|
// TODO: Restore these behaviors.
|
||||||
|
// list.listen('didSend', JX.bind(list, onupdate, cols[ii]));
|
||||||
|
// list.listen('didReceive', JX.bind(list, onupdate, cols[ii]));
|
||||||
|
// onupdate(cols[ii]);
|
||||||
|
|
||||||
|
list.listen('didDrop', JX.bind(this, this._onmovecard, list));
|
||||||
|
|
||||||
|
// TODO: Restore these behaviors.
|
||||||
|
// list.listen('didBeginDrag', JX.bind(null, onbegindrag));
|
||||||
|
// list.listen('didEndDrag', JX.bind(null, onenddrag));
|
||||||
|
|
||||||
|
lists.push(list);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (ii = 0; ii < lists.length; ii++) {
|
||||||
|
lists[ii].setGroup(lists);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_findBoardColumns: function(board_node) {
|
||||||
|
return JX.DOM.scry(board_node, 'ul', 'project-column');
|
||||||
|
},
|
||||||
|
|
||||||
|
_findCardsInColumn: function(column_node) {
|
||||||
|
return JX.DOM.scry(column_node, 'li', 'project-card');
|
||||||
|
},
|
||||||
|
|
||||||
|
_onmovecard: function(list, item, after_node) {
|
||||||
|
list.lock();
|
||||||
|
JX.DOM.alterClass(item, 'drag-sending', true);
|
||||||
|
|
||||||
|
var item_phid = JX.Stratcom.getData(item).objectPHID;
|
||||||
|
var data = {
|
||||||
|
objectPHID: item_phid,
|
||||||
|
columnPHID: JX.Stratcom.getData(list.getRootNode()).columnPHID
|
||||||
|
};
|
||||||
|
|
||||||
|
if (after_node) {
|
||||||
|
data.afterPHID = JX.Stratcom.getData(after_node).objectPHID;
|
||||||
|
}
|
||||||
|
|
||||||
|
var before_node = item.nextSibling;
|
||||||
|
if (before_node) {
|
||||||
|
var before_phid = JX.Stratcom.getData(before_node).objectPHID;
|
||||||
|
if (before_phid) {
|
||||||
|
data.beforePHID = before_phid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: This should be managed per-board.
|
||||||
|
var config = this._getConfig();
|
||||||
|
data.order = config.order;
|
||||||
|
|
||||||
|
new JX.Workflow(config.moveURI, data)
|
||||||
|
.setHandler(JX.bind(this, this._oncardupdate, item, list))
|
||||||
|
.start();
|
||||||
|
},
|
||||||
|
|
||||||
|
_oncardupdate: function(item, list, response) {
|
||||||
|
list.unlock();
|
||||||
|
JX.DOM.alterClass(item, 'drag-sending', false);
|
||||||
|
JX.DOM.replace(item, JX.$H(response.task));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,9 +13,6 @@
|
|||||||
|
|
||||||
JX.behavior('project-boards', function(config, statics) {
|
JX.behavior('project-boards', function(config, statics) {
|
||||||
|
|
||||||
function finditems(col) {
|
|
||||||
return JX.DOM.scry(col, 'li', 'project-card');
|
|
||||||
}
|
|
||||||
|
|
||||||
function onupdate(col) {
|
function onupdate(col) {
|
||||||
var data = JX.Stratcom.getData(col);
|
var data = JX.Stratcom.getData(col);
|
||||||
@@ -64,15 +61,6 @@ JX.behavior('project-boards', function(config, statics) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function onresponse(response, item, list) {
|
|
||||||
list.unlock();
|
|
||||||
JX.DOM.alterClass(item, 'drag-sending', false);
|
|
||||||
JX.DOM.replace(item, JX.$H(response.task));
|
|
||||||
}
|
|
||||||
|
|
||||||
function getcolumns() {
|
|
||||||
return JX.DOM.scry(JX.$(statics.boardID), 'ul', 'project-column');
|
|
||||||
}
|
|
||||||
|
|
||||||
function colsort(u, v) {
|
function colsort(u, v) {
|
||||||
var ud = JX.Stratcom.getData(u).sort || [];
|
var ud = JX.Stratcom.getData(u).sort || [];
|
||||||
@@ -126,56 +114,6 @@ JX.behavior('project-boards', function(config, statics) {
|
|||||||
getcontainer().style.minHeight = '';
|
getcontainer().style.minHeight = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
function ondrop(list, item, after) {
|
|
||||||
list.lock();
|
|
||||||
JX.DOM.alterClass(item, 'drag-sending', true);
|
|
||||||
|
|
||||||
var item_phid = JX.Stratcom.getData(item).objectPHID;
|
|
||||||
var data = {
|
|
||||||
objectPHID: item_phid,
|
|
||||||
columnPHID: JX.Stratcom.getData(list.getRootNode()).columnPHID
|
|
||||||
};
|
|
||||||
|
|
||||||
var after_phid = null;
|
|
||||||
var items = finditems(list.getRootNode());
|
|
||||||
if (after) {
|
|
||||||
after_phid = JX.Stratcom.getData(after).objectPHID;
|
|
||||||
data.afterPHID = after_phid;
|
|
||||||
}
|
|
||||||
var ii;
|
|
||||||
var ii_item;
|
|
||||||
var ii_item_phid;
|
|
||||||
var ii_prev_item_phid = null;
|
|
||||||
var before_phid = null;
|
|
||||||
for (ii = 0; ii < items.length; ii++) {
|
|
||||||
ii_item = items[ii];
|
|
||||||
ii_item_phid = JX.Stratcom.getData(ii_item).objectPHID;
|
|
||||||
if (ii_item_phid == item_phid) {
|
|
||||||
// skip the item we just dropped
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
// note this handles when there is no after phid - we are at the top of
|
|
||||||
// the list - quite nicely
|
|
||||||
if (ii_prev_item_phid == after_phid) {
|
|
||||||
before_phid = ii_item_phid;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
ii_prev_item_phid = ii_item_phid;
|
|
||||||
}
|
|
||||||
if (before_phid) {
|
|
||||||
data.beforePHID = before_phid;
|
|
||||||
}
|
|
||||||
|
|
||||||
data.order = statics.order;
|
|
||||||
|
|
||||||
var workflow = new JX.Workflow(statics.moveURI, data)
|
|
||||||
.setHandler(function(response) {
|
|
||||||
onresponse(response, item, list);
|
|
||||||
});
|
|
||||||
|
|
||||||
workflow.start();
|
|
||||||
}
|
|
||||||
|
|
||||||
function onedit(column, r) {
|
function onedit(column, r) {
|
||||||
var new_card = JX.$H(r.tasks).getNode();
|
var new_card = JX.$H(r.tasks).getNode();
|
||||||
var new_data = JX.Stratcom.getData(new_card);
|
var new_data = JX.Stratcom.getData(new_card);
|
||||||
@@ -226,35 +164,6 @@ JX.behavior('project-boards', function(config, statics) {
|
|||||||
statics.createURI = update_config.createURI;
|
statics.createURI = update_config.createURI;
|
||||||
}
|
}
|
||||||
|
|
||||||
function init_board() {
|
|
||||||
var lists = [];
|
|
||||||
var ii;
|
|
||||||
var cols = getcolumns();
|
|
||||||
|
|
||||||
for (ii = 0; ii < cols.length; ii++) {
|
|
||||||
var list = new JX.DraggableList('project-card', cols[ii])
|
|
||||||
.setFindItemsHandler(JX.bind(null, finditems, cols[ii]))
|
|
||||||
.setOuterContainer(JX.$(config.boardID))
|
|
||||||
.setCanDragX(true);
|
|
||||||
|
|
||||||
list.listen('didSend', JX.bind(list, onupdate, cols[ii]));
|
|
||||||
list.listen('didReceive', JX.bind(list, onupdate, cols[ii]));
|
|
||||||
|
|
||||||
list.listen('didDrop', JX.bind(null, ondrop, list));
|
|
||||||
|
|
||||||
list.listen('didBeginDrag', JX.bind(null, onbegindrag));
|
|
||||||
list.listen('didEndDrag', JX.bind(null, onenddrag));
|
|
||||||
|
|
||||||
lists.push(list);
|
|
||||||
|
|
||||||
onupdate(cols[ii]);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (ii = 0; ii < lists.length; ii++) {
|
|
||||||
lists[ii].setGroup(lists);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function setup() {
|
function setup() {
|
||||||
|
|
||||||
JX.Stratcom.listen(
|
JX.Stratcom.listen(
|
||||||
@@ -346,9 +255,6 @@ JX.behavior('project-boards', function(config, statics) {
|
|||||||
statics.boardID = new_config.boardID;
|
statics.boardID = new_config.boardID;
|
||||||
}
|
}
|
||||||
update_statics(new_config);
|
update_statics(new_config);
|
||||||
if (data.fromServer) {
|
|
||||||
init_board();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -359,7 +265,6 @@ JX.behavior('project-boards', function(config, statics) {
|
|||||||
var current_page_id = JX.Quicksand.getCurrentPageID();
|
var current_page_id = JX.Quicksand.getCurrentPageID();
|
||||||
statics.boardConfigCache = {};
|
statics.boardConfigCache = {};
|
||||||
statics.boardConfigCache[current_page_id] = config;
|
statics.boardConfigCache[current_page_id] = config;
|
||||||
init_board();
|
|
||||||
statics.setup = setup();
|
statics.setup = setup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user