Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15405351
D20242.id48374.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
8 KB
Referenced Files
None
Subscribers
None
D20242.id48374.diff
View Options
diff --git a/resources/celerity/map.php b/resources/celerity/map.php
--- a/resources/celerity/map.php
+++ b/resources/celerity/map.php
@@ -10,7 +10,7 @@
'conpherence.pkg.css' => '3c8a0668',
'conpherence.pkg.js' => '020aebcf',
'core.pkg.css' => '34ce1741',
- 'core.pkg.js' => '2cda17a4',
+ 'core.pkg.js' => '9eb1254b',
'differential.pkg.css' => '1755a478',
'differential.pkg.js' => '67e02996',
'diffusion.pkg.css' => '42c75c37',
@@ -409,9 +409,9 @@
'rsrc/js/application/phortune/phortune-credit-card-form.js' => 'd12d214f',
'rsrc/js/application/policy/behavior-policy-control.js' => '0eaa33a9',
'rsrc/js/application/policy/behavior-policy-rule-editor.js' => '9347f172',
- 'rsrc/js/application/projects/WorkboardBoard.js' => '45d0b2b1',
+ 'rsrc/js/application/projects/WorkboardBoard.js' => '3a8c42a3',
'rsrc/js/application/projects/WorkboardCard.js' => '9a513421',
- 'rsrc/js/application/projects/WorkboardColumn.js' => '8573dc1b',
+ 'rsrc/js/application/projects/WorkboardColumn.js' => 'b451fd4c',
'rsrc/js/application/projects/WorkboardController.js' => '42c7a5a7',
'rsrc/js/application/projects/behavior-project-boards.js' => '05c74d65',
'rsrc/js/application/projects/behavior-project-create.js' => '34c53422',
@@ -434,7 +434,7 @@
'rsrc/js/application/uiexample/notification-example.js' => '29819b75',
'rsrc/js/core/Busy.js' => '5202e831',
'rsrc/js/core/DragAndDropFileUpload.js' => '4370900d',
- 'rsrc/js/core/DraggableList.js' => '3c6bd549',
+ 'rsrc/js/core/DraggableList.js' => 'd594c805',
'rsrc/js/core/Favicon.js' => '7930776a',
'rsrc/js/core/FileUpload.js' => 'ab85e184',
'rsrc/js/core/Hovercard.js' => '074f0783',
@@ -727,9 +727,9 @@
'javelin-view-renderer' => '9aae2b66',
'javelin-view-visitor' => '308f9fe4',
'javelin-websocket' => 'fdc13e4e',
- 'javelin-workboard-board' => '45d0b2b1',
+ 'javelin-workboard-board' => '3a8c42a3',
'javelin-workboard-card' => '9a513421',
- 'javelin-workboard-column' => '8573dc1b',
+ 'javelin-workboard-column' => 'b451fd4c',
'javelin-workboard-controller' => '42c7a5a7',
'javelin-workflow' => '958e9045',
'maniphest-report-css' => '3d53188b',
@@ -755,7 +755,7 @@
'phabricator-diff-changeset-list' => '04023d82',
'phabricator-diff-inline' => 'a4a14a94',
'phabricator-drag-and-drop-file-upload' => '4370900d',
- 'phabricator-draggable-list' => '3c6bd549',
+ 'phabricator-draggable-list' => 'd594c805',
'phabricator-fatal-config-template-css' => '20babf50',
'phabricator-favicon' => '7930776a',
'phabricator-feed-css' => 'd8b6e3f8',
@@ -1188,17 +1188,18 @@
'javelin-install',
'javelin-dom',
),
- '3b4899b0' => array(
- 'javelin-behavior',
- 'phabricator-prefab',
- ),
- '3c6bd549' => array(
+ '3a8c42a3' => array(
'javelin-install',
'javelin-dom',
- 'javelin-stratcom',
'javelin-util',
- 'javelin-vector',
- 'javelin-magical-init',
+ 'javelin-stratcom',
+ 'javelin-workflow',
+ 'phabricator-draggable-list',
+ 'javelin-workboard-column',
+ ),
+ '3b4899b0' => array(
+ 'javelin-behavior',
+ 'phabricator-prefab',
),
'3dc5ad43' => array(
'javelin-behavior',
@@ -1256,15 +1257,6 @@
'43bc9360' => array(
'javelin-install',
),
- '45d0b2b1' => array(
- 'javelin-install',
- 'javelin-dom',
- 'javelin-util',
- 'javelin-stratcom',
- 'javelin-workflow',
- 'phabricator-draggable-list',
- 'javelin-workboard-column',
- ),
'46116c01' => array(
'javelin-request',
'javelin-behavior',
@@ -1565,10 +1557,6 @@
'javelin-workflow',
'phabricator-draggable-list',
),
- '8573dc1b' => array(
- 'javelin-install',
- 'javelin-workboard-card',
- ),
'87428eb2' => array(
'javelin-behavior',
'javelin-diffusion-locate-file-source',
@@ -1855,6 +1843,10 @@
'b347a301' => array(
'javelin-behavior',
),
+ 'b451fd4c' => array(
+ 'javelin-install',
+ 'javelin-workboard-card',
+ ),
'b517bfa0' => array(
'phui-oi-list-view-css',
),
@@ -1994,6 +1986,14 @@
'd3799cb4' => array(
'javelin-install',
),
+ 'd594c805' => array(
+ 'javelin-install',
+ 'javelin-dom',
+ 'javelin-stratcom',
+ 'javelin-util',
+ 'javelin-vector',
+ 'javelin-magical-init',
+ ),
'd8a86cfb' => array(
'javelin-behavior',
'javelin-dom',
diff --git a/webroot/rsrc/js/application/projects/WorkboardBoard.js b/webroot/rsrc/js/application/projects/WorkboardBoard.js
--- a/webroot/rsrc/js/application/projects/WorkboardBoard.js
+++ b/webroot/rsrc/js/application/projects/WorkboardBoard.js
@@ -118,6 +118,10 @@
.setCanDragX(true)
.setHasInfiniteHeight(true);
+ if (this.getOrder() !== 'natural') {
+ list.setCompareHandler(JX.bind(column, column.compareHandler));
+ }
+
list.listen('didDrop', JX.bind(this, this._onmovecard, list));
lists.push(list);
diff --git a/webroot/rsrc/js/application/projects/WorkboardColumn.js b/webroot/rsrc/js/application/projects/WorkboardColumn.js
--- a/webroot/rsrc/js/application/projects/WorkboardColumn.js
+++ b/webroot/rsrc/js/application/projects/WorkboardColumn.js
@@ -175,6 +175,19 @@
this._dirty = false;
},
+ compareHandler: function(src_list, src_node, dst_list, dst_node) {
+ var board = this.getBoard();
+ var order = board.getOrder();
+
+ var src_phid = JX.Stratcom.getData(src_node).objectPHID;
+ var dst_phid = JX.Stratcom.getData(dst_node).objectPHID;
+
+ var u_vec = this.getBoard().getOrderVector(src_phid, order);
+ var v_vec = this.getBoard().getOrderVector(dst_phid, order);
+
+ return this._compareVectors(u_vec, v_vec);
+ },
+
_getCardsSortedNaturally: function() {
var list = [];
@@ -200,15 +213,19 @@
},
_sortCards: function(order, u, v) {
- var ud = this.getBoard().getOrderVector(u.getPHID(), order);
- var vd = this.getBoard().getOrderVector(v.getPHID(), order);
+ var u_vec = this.getBoard().getOrderVector(u.getPHID(), order);
+ var v_vec = this.getBoard().getOrderVector(v.getPHID(), order);
+
+ return this._compareVectors(u_vec, v_vec);
+ },
- for (var ii = 0; ii < ud.length; ii++) {
- if (ud[ii] > vd[ii]) {
+ _compareVectors: function(u_vec, v_vec) {
+ for (var ii = 0; ii < u_vec.length; ii++) {
+ if (u_vec[ii] > v_vec[ii]) {
return 1;
}
- if (ud[ii] < vd[ii]) {
+ if (u_vec[ii] < v_vec[ii]) {
return -1;
}
}
diff --git a/webroot/rsrc/js/core/DraggableList.js b/webroot/rsrc/js/core/DraggableList.js
--- a/webroot/rsrc/js/core/DraggableList.js
+++ b/webroot/rsrc/js/core/DraggableList.js
@@ -39,6 +39,7 @@
properties : {
findItemsHandler: null,
+ compareHandler: null,
canDragX: false,
outerContainer: null,
hasInfiniteHeight: false
@@ -367,8 +368,29 @@
return this;
},
+ _getOrderedTarget: function(src_list, src_node) {
+ var targets = this._getTargets();
+
+ // NOTE: The targets are ordered from the bottom of the column to the
+ // top, so we're looking for the first node that we sort below. If we
+ // don't find one, we'll sort to the head of the column.
+
+ for (var ii = 0; ii < targets.length; ii++) {
+ var target = targets[ii];
+ if (this._compareTargets(src_list, src_node, target.item) > 0) {
+ return target.item;
+ }
+ }
+
+ return null;
+ },
+
+ _compareTargets: function(src_list, src_node, dst_node) {
+ var dst_list = this;
+ return this.getCompareHandler()(src_list, src_node, dst_list, dst_node);
+ },
+
_getCurrentTarget : function(p) {
- var ghost = this.getGhostNode();
var targets = this._getTargets();
var dragging = this._dragging;
@@ -461,9 +483,15 @@
// Compute the size and position of the drop target indicator, because we
// need to update our static position computations to account for it.
+ var compare_handler = this.getCompareHandler();
+
var cur_target = false;
if (target_list) {
- cur_target = target_list._getCurrentTarget(p);
+ if (compare_handler && (target_list !== this)) {
+ cur_target = target_list._getOrderedTarget(this, this._dragging);
+ } else {
+ cur_target = target_list._getCurrentTarget(p);
+ }
}
// If we've selected a new target, update the UI to show where we're
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Mar 19, 11:12 AM (4 d, 19 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7224108
Default Alt Text
D20242.id48374.diff (8 KB)
Attached To
Mode
D20242: When dragging nodes between different columns on an ordered board, don't reorder them by making secondary edits
Attached
Detach File
Event Timeline
Log In to Comment