Page MenuHomePhabricator

D10186.diff
No OneTemporary

D10186.diff

diff --git a/resources/celerity/map.php b/resources/celerity/map.php
--- a/resources/celerity/map.php
+++ b/resources/celerity/map.php
@@ -8,7 +8,7 @@
return array(
'names' => array(
'core.pkg.css' => 'c7059fd9',
- 'core.pkg.js' => 'eb8d4f82',
+ 'core.pkg.js' => '14887b3d',
'darkconsole.pkg.js' => 'df001cab',
'differential.pkg.css' => '4a93db37',
'differential.pkg.js' => 'eb182ccd',
@@ -202,7 +202,7 @@
'rsrc/externals/javelin/lib/Routable.js' => 'b3e7d692',
'rsrc/externals/javelin/lib/Router.js' => '29274e2b',
'rsrc/externals/javelin/lib/URI.js' => '6eff08aa',
- 'rsrc/externals/javelin/lib/Vector.js' => '23cbb8ac',
+ 'rsrc/externals/javelin/lib/Vector.js' => 'cc1bd0b0',
'rsrc/externals/javelin/lib/Workflow.js' => 'd149e002',
'rsrc/externals/javelin/lib/__tests__/Cookie.js' => '5ed109e8',
'rsrc/externals/javelin/lib/__tests__/DOM.js' => 'c984504b',
@@ -417,7 +417,7 @@
'rsrc/js/application/projects/behavior-boards-dropdown.js' => '0ec56e1d',
'rsrc/js/application/projects/behavior-project-boards.js' => 'd4bf1f3c',
'rsrc/js/application/projects/behavior-project-create.js' => '065227cc',
- 'rsrc/js/application/projects/behavior-reorder-columns.js' => '09eee344',
+ 'rsrc/js/application/projects/behavior-reorder-columns.js' => 'e1d25dfb',
'rsrc/js/application/releeph/releeph-preview-branch.js' => 'b2b4fbaf',
'rsrc/js/application/releeph/releeph-request-state-change.js' => 'ab836011',
'rsrc/js/application/releeph/releeph-request-typeahead.js' => 'de2e896f',
@@ -441,7 +441,7 @@
'rsrc/js/application/uiexample/notification-example.js' => '7a9677fc',
'rsrc/js/core/Busy.js' => '6453c869',
'rsrc/js/core/DragAndDropFileUpload.js' => 'f61aa8ec',
- 'rsrc/js/core/DraggableList.js' => '2cad29d1',
+ 'rsrc/js/core/DraggableList.js' => 'bfccc644',
'rsrc/js/core/FileUpload.js' => 'a4ae61bf',
'rsrc/js/core/Hovercard.js' => '7e8468ae',
'rsrc/js/core/KeyboardShortcut.js' => '1ae869f2',
@@ -647,7 +647,7 @@
'javelin-behavior-releeph-request-typeahead' => 'de2e896f',
'javelin-behavior-remarkup-preview' => 'f7379f45',
'javelin-behavior-reorder-applications' => '76b9fc3e',
- 'javelin-behavior-reorder-columns' => '09eee344',
+ 'javelin-behavior-reorder-columns' => 'e1d25dfb',
'javelin-behavior-repository-crossreference' => 'f9539603',
'javelin-behavior-search-reorder-queries' => 'e9581f08',
'javelin-behavior-select-on-click' => '4e3e79a6',
@@ -688,7 +688,7 @@
'javelin-typeahead-static-source' => '316b8fa1',
'javelin-uri' => '6eff08aa',
'javelin-util' => 'e7995242',
- 'javelin-vector' => '23cbb8ac',
+ 'javelin-vector' => 'cc1bd0b0',
'javelin-view' => '0f764c35',
'javelin-view-html' => 'e5b406f9',
'javelin-view-interpreter' => '0c33c1a0',
@@ -716,7 +716,7 @@
'phabricator-crumbs-view-css' => '7fbf25b8',
'phabricator-dashboard-css' => 'a2bfdcbf',
'phabricator-drag-and-drop-file-upload' => 'f61aa8ec',
- 'phabricator-draggable-list' => '2cad29d1',
+ 'phabricator-draggable-list' => 'bfccc644',
'phabricator-fatal-config-template-css' => '25d446d6',
'phabricator-feed-css' => '4e544db4',
'phabricator-file-upload' => 'a4ae61bf',
@@ -876,13 +876,6 @@
'javelin-mask',
'phabricator-drag-and-drop-file-upload',
),
- '09eee344' => array(
- 'javelin-behavior',
- 'javelin-stratcom',
- 'javelin-workflow',
- 'javelin-dom',
- 'phabricator-draggable-list',
- ),
'0a3f3021' => array(
'javelin-behavior',
'javelin-stratcom',
@@ -995,10 +988,6 @@
'javelin-dom',
'javelin-vector',
),
- '23cbb8ac' => array(
- 'javelin-install',
- 'javelin-event',
- ),
'2926fff2' => array(
'javelin-behavior',
'javelin-dom',
@@ -1019,14 +1008,6 @@
'javelin-stratcom',
'javelin-dom',
),
- '2cad29d1' => array(
- 'javelin-install',
- 'javelin-dom',
- 'javelin-stratcom',
- 'javelin-util',
- 'javelin-vector',
- 'javelin-magical-init',
- ),
'2fa810fc' => array(
'javelin-behavior',
'javelin-dom',
@@ -1645,6 +1626,14 @@
'javelin-util',
'phabricator-shaped-request',
),
+ 'bfccc644' => array(
+ 'javelin-install',
+ 'javelin-dom',
+ 'javelin-stratcom',
+ 'javelin-util',
+ 'javelin-vector',
+ 'javelin-magical-init',
+ ),
'c4569c05' => array(
'javelin-magical-init',
'javelin-install',
@@ -1664,6 +1653,10 @@
'javelin-stratcom',
'phabricator-phtize',
),
+ 'cc1bd0b0' => array(
+ 'javelin-install',
+ 'javelin-event',
+ ),
'd149e002' => array(
'javelin-stratcom',
'javelin-request',
@@ -1761,6 +1754,13 @@
'javelin-dom',
'phabricator-prefab',
),
+ 'e1d25dfb' => array(
+ 'javelin-behavior',
+ 'javelin-stratcom',
+ 'javelin-workflow',
+ 'javelin-dom',
+ 'phabricator-draggable-list',
+ ),
'e1ff79b1' => array(
'javelin-behavior',
'javelin-stratcom',
diff --git a/webroot/rsrc/externals/javelin/lib/Vector.js b/webroot/rsrc/externals/javelin/lib/Vector.js
--- a/webroot/rsrc/externals/javelin/lib/Vector.js
+++ b/webroot/rsrc/externals/javelin/lib/Vector.js
@@ -297,6 +297,35 @@
);
},
+
+ /**
+ * Get the aggregate scroll offsets for a node and all of its parents.
+ *
+ * Note that this excludes scroll at the document level, because it does
+ * not normally impact operations in document coordinates, which everything
+ * on this class returns. Use @{method:getScroll} to get the document scroll
+ * position.
+ *
+ * @param Node Node to determine offsets for.
+ * @return JX.Vector New vector with aggregate scroll offsets.
+ */
+ getAggregateScrollForNode: function(node) {
+ var x = 0;
+ var y = 0;
+
+ do {
+ if (node == document.body || node == document.documentElement) {
+ break;
+ }
+
+ x += node.scrollLeft || 0;
+ y += node.scrollTop || 0;
+ node = node.parentNode;
+ } while (node);
+
+ return new JX.$V(x, y);
+ },
+
/**
* Determine the size of the viewport (basically, the browser window) by
* building a new vector where the 'x' component corresponds to the width
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
@@ -44,6 +44,7 @@
_dragging : null,
_locked : 0,
_origin : null,
+ _originScroll : null,
_target : null,
_targets : null,
_dimensions : null,
@@ -166,6 +167,7 @@
this._dragging = e.getNode(this._sigil);
this._origin = JX.$V(e);
+ this._originScroll = JX.Vector.getAggregateScrollForNode(this._dragging);
this._dimensions = JX.$V(this._dragging);
for (var ii = 0; ii < this._group.length; ii++) {
@@ -359,7 +361,12 @@
// adjust the cursor position for the change in node document position.
// Do this before choosing a new target to avoid a flash of nonsense.
- var origin = this._origin;
+ var scroll = JX.Vector.getAggregateScrollForNode(this._dragging);
+
+ var origin = {
+ x: this._origin.x + (this._originScroll.x - scroll.x),
+ y: this._origin.y + (this._originScroll.y - scroll.y)
+ };
var adjust_h = 0;
var adjust_y = 0;
@@ -463,6 +470,7 @@
}
return this;
}
+
}
});

File Metadata

Mime Type
text/plain
Expires
Tue, Mar 11, 7:58 PM (4 w, 17 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7549089
Default Alt Text
D10186.diff (7 KB)

Event Timeline