@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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

+109 -121
+25 -25
resources/celerity/map.php
··· 415 415 'rsrc/js/application/phortune/phortune-credit-card-form.js' => '2290aeef', 416 416 'rsrc/js/application/policy/behavior-policy-control.js' => 'd0c516d5', 417 417 'rsrc/js/application/policy/behavior-policy-rule-editor.js' => '5e9f347c', 418 - 'rsrc/js/application/projects/Workboard.js' => '555f521a', 419 - 'rsrc/js/application/projects/behavior-project-boards.js' => '9ed304e5', 418 + 'rsrc/js/application/projects/Workboard.js' => 'b38d2c73', 419 + 'rsrc/js/application/projects/behavior-project-boards.js' => '7f4359dd', 420 420 'rsrc/js/application/projects/behavior-project-create.js' => '065227cc', 421 421 'rsrc/js/application/projects/behavior-reorder-columns.js' => 'e1d25dfb', 422 422 'rsrc/js/application/releeph/releeph-preview-branch.js' => 'b2b4fbaf', ··· 656 656 'javelin-behavior-phui-profile-menu' => '12884df9', 657 657 'javelin-behavior-policy-control' => 'd0c516d5', 658 658 'javelin-behavior-policy-rule-editor' => '5e9f347c', 659 - 'javelin-behavior-project-boards' => '9ed304e5', 659 + 'javelin-behavior-project-boards' => '7f4359dd', 660 660 'javelin-behavior-project-create' => '065227cc', 661 661 'javelin-behavior-quicksand-blacklist' => '7927a7d3', 662 662 'javelin-behavior-recurring-edit' => '5f1c4d5f', ··· 723 723 'javelin-view-renderer' => '6c2b09a2', 724 724 'javelin-view-visitor' => 'efe49472', 725 725 'javelin-websocket' => 'e292eaf4', 726 - 'javelin-workboard' => '555f521a', 726 + 'javelin-workboard' => 'b38d2c73', 727 727 'javelin-workflow' => '5b2e3e2b', 728 728 'lightbox-attachment-css' => '7acac05d', 729 729 'maniphest-batch-editor' => 'b0f0b6d5', ··· 1223 1223 'javelin-request', 1224 1224 'javelin-typeahead-source', 1225 1225 ), 1226 - '555f521a' => array( 1227 - 'javelin-install', 1228 - 'javelin-dom', 1229 - 'javelin-util', 1230 - 'javelin-vector', 1231 - 'javelin-stratcom', 1232 - 'javelin-workflow', 1233 - 'phabricator-draggable-list', 1234 - 'phabricator-drag-and-drop-file-upload', 1235 - ), 1236 1226 '558829c2' => array( 1237 1227 'javelin-stratcom', 1238 1228 'javelin-behavior', ··· 1456 1446 'javelin-behavior', 1457 1447 'javelin-history', 1458 1448 ), 1449 + '7f4359dd' => array( 1450 + 'javelin-behavior', 1451 + 'javelin-dom', 1452 + 'javelin-util', 1453 + 'javelin-vector', 1454 + 'javelin-stratcom', 1455 + 'javelin-workflow', 1456 + 'phabricator-draggable-list', 1457 + 'phabricator-drag-and-drop-file-upload', 1458 + 'javelin-workboard', 1459 + ), 1459 1460 '805b806a' => array( 1460 1461 'javelin-magical-init', 1461 1462 'javelin-install', ··· 1597 1598 'javelin-dom', 1598 1599 'javelin-vector', 1599 1600 ), 1600 - '9ed304e5' => array( 1601 - 'javelin-behavior', 1602 - 'javelin-dom', 1603 - 'javelin-util', 1604 - 'javelin-vector', 1605 - 'javelin-stratcom', 1606 - 'javelin-workflow', 1607 - 'phabricator-draggable-list', 1608 - 'phabricator-drag-and-drop-file-upload', 1609 - 'javelin-workboard', 1610 - ), 1611 1601 '9f36c42d' => array( 1612 1602 'javelin-behavior', 1613 1603 'javelin-stratcom', ··· 1726 1716 'javelin-dom', 1727 1717 'javelin-uri', 1728 1718 'javelin-request', 1719 + ), 1720 + 'b38d2c73' => array( 1721 + 'javelin-install', 1722 + 'javelin-dom', 1723 + 'javelin-util', 1724 + 'javelin-vector', 1725 + 'javelin-stratcom', 1726 + 'javelin-workflow', 1727 + 'phabricator-draggable-list', 1728 + 'phabricator-drag-and-drop-file-upload', 1729 1729 ), 1730 1730 'b3a4b884' => array( 1731 1731 'javelin-behavior',
+84 -1
webroot/rsrc/js/application/projects/Workboard.js
··· 33 33 34 34 addBoard: function(board_phid, board_node) { 35 35 this._currentBoard = board_phid; 36 - this._boardNodes[board_phid] = board_node; 36 + 37 + if (!this._boardNodes[board_phid]) { 38 + this._boardNodes[board_phid] = board_node; 39 + this._setupDragHandlers(board_node); 40 + } 37 41 }, 38 42 39 43 _getConfig: function() { ··· 121 125 122 126 _onpanmouseup: function() { 123 127 this._panOrigin = null; 128 + }, 129 + 130 + 131 + _setupDragHandlers: function(board_node) { 132 + var columns = this._findBoardColumns(board_node); 133 + var column; 134 + var ii; 135 + var lists = []; 136 + 137 + for (ii = 0; ii < columns.length; ii++) { 138 + column = columns[ii]; 139 + 140 + var list = new JX.DraggableList('project-card', column) 141 + .setOuterContainer(board_node) 142 + .setFindItemsHandler(JX.bind(this, this._findCardsInColumn, column)) 143 + .setCanDragX(true); 144 + 145 + // TODO: Restore these behaviors. 146 + // list.listen('didSend', JX.bind(list, onupdate, cols[ii])); 147 + // list.listen('didReceive', JX.bind(list, onupdate, cols[ii])); 148 + // onupdate(cols[ii]); 149 + 150 + list.listen('didDrop', JX.bind(this, this._onmovecard, list)); 151 + 152 + // TODO: Restore these behaviors. 153 + // list.listen('didBeginDrag', JX.bind(null, onbegindrag)); 154 + // list.listen('didEndDrag', JX.bind(null, onenddrag)); 155 + 156 + lists.push(list); 157 + } 158 + 159 + for (ii = 0; ii < lists.length; ii++) { 160 + lists[ii].setGroup(lists); 161 + } 162 + }, 163 + 164 + _findBoardColumns: function(board_node) { 165 + return JX.DOM.scry(board_node, 'ul', 'project-column'); 166 + }, 167 + 168 + _findCardsInColumn: function(column_node) { 169 + return JX.DOM.scry(column_node, 'li', 'project-card'); 170 + }, 171 + 172 + _onmovecard: function(list, item, after_node) { 173 + list.lock(); 174 + JX.DOM.alterClass(item, 'drag-sending', true); 175 + 176 + var item_phid = JX.Stratcom.getData(item).objectPHID; 177 + var data = { 178 + objectPHID: item_phid, 179 + columnPHID: JX.Stratcom.getData(list.getRootNode()).columnPHID 180 + }; 181 + 182 + if (after_node) { 183 + data.afterPHID = JX.Stratcom.getData(after_node).objectPHID; 184 + } 185 + 186 + var before_node = item.nextSibling; 187 + if (before_node) { 188 + var before_phid = JX.Stratcom.getData(before_node).objectPHID; 189 + if (before_phid) { 190 + data.beforePHID = before_phid; 191 + } 192 + } 193 + 194 + // TODO: This should be managed per-board. 195 + var config = this._getConfig(); 196 + data.order = config.order; 197 + 198 + new JX.Workflow(config.moveURI, data) 199 + .setHandler(JX.bind(this, this._oncardupdate, item, list)) 200 + .start(); 201 + }, 202 + 203 + _oncardupdate: function(item, list, response) { 204 + list.unlock(); 205 + JX.DOM.alterClass(item, 'drag-sending', false); 206 + JX.DOM.replace(item, JX.$H(response.task)); 124 207 } 125 208 126 209 }
-95
webroot/rsrc/js/application/projects/behavior-project-boards.js
··· 13 13 14 14 JX.behavior('project-boards', function(config, statics) { 15 15 16 - function finditems(col) { 17 - return JX.DOM.scry(col, 'li', 'project-card'); 18 - } 19 16 20 17 function onupdate(col) { 21 18 var data = JX.Stratcom.getData(col); ··· 64 61 } 65 62 } 66 63 67 - function onresponse(response, item, list) { 68 - list.unlock(); 69 - JX.DOM.alterClass(item, 'drag-sending', false); 70 - JX.DOM.replace(item, JX.$H(response.task)); 71 - } 72 - 73 - function getcolumns() { 74 - return JX.DOM.scry(JX.$(statics.boardID), 'ul', 'project-column'); 75 - } 76 64 77 65 function colsort(u, v) { 78 66 var ud = JX.Stratcom.getData(u).sort || []; ··· 126 114 getcontainer().style.minHeight = ''; 127 115 } 128 116 129 - function ondrop(list, item, after) { 130 - list.lock(); 131 - JX.DOM.alterClass(item, 'drag-sending', true); 132 - 133 - var item_phid = JX.Stratcom.getData(item).objectPHID; 134 - var data = { 135 - objectPHID: item_phid, 136 - columnPHID: JX.Stratcom.getData(list.getRootNode()).columnPHID 137 - }; 138 - 139 - var after_phid = null; 140 - var items = finditems(list.getRootNode()); 141 - if (after) { 142 - after_phid = JX.Stratcom.getData(after).objectPHID; 143 - data.afterPHID = after_phid; 144 - } 145 - var ii; 146 - var ii_item; 147 - var ii_item_phid; 148 - var ii_prev_item_phid = null; 149 - var before_phid = null; 150 - for (ii = 0; ii < items.length; ii++) { 151 - ii_item = items[ii]; 152 - ii_item_phid = JX.Stratcom.getData(ii_item).objectPHID; 153 - if (ii_item_phid == item_phid) { 154 - // skip the item we just dropped 155 - continue; 156 - } 157 - // note this handles when there is no after phid - we are at the top of 158 - // the list - quite nicely 159 - if (ii_prev_item_phid == after_phid) { 160 - before_phid = ii_item_phid; 161 - break; 162 - } 163 - ii_prev_item_phid = ii_item_phid; 164 - } 165 - if (before_phid) { 166 - data.beforePHID = before_phid; 167 - } 168 - 169 - data.order = statics.order; 170 - 171 - var workflow = new JX.Workflow(statics.moveURI, data) 172 - .setHandler(function(response) { 173 - onresponse(response, item, list); 174 - }); 175 - 176 - workflow.start(); 177 - } 178 - 179 117 function onedit(column, r) { 180 118 var new_card = JX.$H(r.tasks).getNode(); 181 119 var new_data = JX.Stratcom.getData(new_card); ··· 226 164 statics.createURI = update_config.createURI; 227 165 } 228 166 229 - function init_board() { 230 - var lists = []; 231 - var ii; 232 - var cols = getcolumns(); 233 - 234 - for (ii = 0; ii < cols.length; ii++) { 235 - var list = new JX.DraggableList('project-card', cols[ii]) 236 - .setFindItemsHandler(JX.bind(null, finditems, cols[ii])) 237 - .setOuterContainer(JX.$(config.boardID)) 238 - .setCanDragX(true); 239 - 240 - list.listen('didSend', JX.bind(list, onupdate, cols[ii])); 241 - list.listen('didReceive', JX.bind(list, onupdate, cols[ii])); 242 - 243 - list.listen('didDrop', JX.bind(null, ondrop, list)); 244 - 245 - list.listen('didBeginDrag', JX.bind(null, onbegindrag)); 246 - list.listen('didEndDrag', JX.bind(null, onenddrag)); 247 - 248 - lists.push(list); 249 - 250 - onupdate(cols[ii]); 251 - } 252 - 253 - for (ii = 0; ii < lists.length; ii++) { 254 - lists[ii].setGroup(lists); 255 - } 256 - } 257 - 258 167 function setup() { 259 168 260 169 JX.Stratcom.listen( ··· 346 255 statics.boardID = new_config.boardID; 347 256 } 348 257 update_statics(new_config); 349 - if (data.fromServer) { 350 - init_board(); 351 - } 352 258 }); 353 259 354 260 return true; ··· 359 265 var current_page_id = JX.Quicksand.getCurrentPageID(); 360 266 statics.boardConfigCache = {}; 361 267 statics.boardConfigCache[current_page_id] = config; 362 - init_board(); 363 268 statics.setup = setup(); 364 269 } 365 270