Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F14088531
D17945.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
13 KB
Referenced Files
None
Subscribers
None
D17945.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
@@ -9,11 +9,11 @@
'names' => array(
'conpherence.pkg.css' => 'ff161f2d',
'conpherence.pkg.js' => 'b5b51108',
- 'core.pkg.css' => 'a5a2d647',
- 'core.pkg.js' => '0f87a6eb',
+ 'core.pkg.css' => '4937a7d7',
+ 'core.pkg.js' => 'a0c8fb20',
'darkconsole.pkg.js' => '1f9a31bc',
- 'differential.pkg.css' => '697405d4',
- 'differential.pkg.js' => '07c56ffc',
+ 'differential.pkg.css' => '52b014e7',
+ 'differential.pkg.js' => '1efe85bf',
'diffusion.pkg.css' => 'b93d9b8c',
'diffusion.pkg.js' => '84c8f8fd',
'favicon.ico' => '30672e08',
@@ -64,7 +64,7 @@
'rsrc/css/application/dashboard/dashboard.css' => 'fe5b1869',
'rsrc/css/application/diff/inline-comment-summary.css' => '51efda3a',
'rsrc/css/application/differential/add-comment.css' => 'c47f8c40',
- 'rsrc/css/application/differential/changeset-view.css' => '15be1064',
+ 'rsrc/css/application/differential/changeset-view.css' => 'e7bd2a79',
'rsrc/css/application/differential/core.css' => '5b7b8ff4',
'rsrc/css/application/differential/phui-inline-comment.css' => 'ffd1a542',
'rsrc/css/application/differential/revision-comment.css' => '14b8565a',
@@ -116,7 +116,7 @@
'rsrc/css/core/core.css' => '9f4cb463',
'rsrc/css/core/remarkup.css' => 'd1a5e11e',
'rsrc/css/core/syntax.css' => 'cae95e89',
- 'rsrc/css/core/z-index.css' => '0233d039',
+ 'rsrc/css/core/z-index.css' => '9d8f7c4b',
'rsrc/css/diviner/diviner-shared.css' => '896f1d43',
'rsrc/css/font/font-awesome.css' => 'e838e088',
'rsrc/css/font/font-lato.css' => 'c7ccd872',
@@ -390,8 +390,8 @@
'rsrc/js/application/dashboard/behavior-dashboard-move-panels.js' => '408bf173',
'rsrc/js/application/dashboard/behavior-dashboard-query-panel-select.js' => '453c5375',
'rsrc/js/application/dashboard/behavior-dashboard-tab-panel.js' => 'd4eecc63',
- 'rsrc/js/application/diff/DiffChangeset.js' => '731125f3',
- 'rsrc/js/application/diff/DiffChangesetList.js' => '59d1ceb1',
+ 'rsrc/js/application/diff/DiffChangeset.js' => '3268dd83',
+ 'rsrc/js/application/diff/DiffChangesetList.js' => '0a4f7809',
'rsrc/js/application/diff/DiffInline.js' => '3337c065',
'rsrc/js/application/diff/behavior-preview-link.js' => '051c7832',
'rsrc/js/application/differential/behavior-comment-preview.js' => 'b064af76',
@@ -503,7 +503,7 @@
'rsrc/js/core/behavior-more.js' => 'a80d0378',
'rsrc/js/core/behavior-object-selector.js' => 'e0ec7f2f',
'rsrc/js/core/behavior-oncopy.js' => '2926fff2',
- 'rsrc/js/core/behavior-phabricator-nav.js' => '08163386',
+ 'rsrc/js/core/behavior-phabricator-nav.js' => '947753e0',
'rsrc/js/core/behavior-phabricator-remarkup-assist.js' => 'acd29eee',
'rsrc/js/core/behavior-read-only-warning.js' => 'ba158207',
'rsrc/js/core/behavior-refresh-csrf.js' => 'ab2f381b',
@@ -565,7 +565,7 @@
'conpherence-thread-manager' => '4d863052',
'conpherence-transaction-css' => '85129c68',
'd3' => 'a11a5ff2',
- 'differential-changeset-view-css' => '15be1064',
+ 'differential-changeset-view-css' => 'e7bd2a79',
'differential-core-view-css' => '5b7b8ff4',
'differential-revision-add-comment-css' => 'c47f8c40',
'differential-revision-comment-css' => '14b8565a',
@@ -658,7 +658,7 @@
'javelin-behavior-phabricator-keyboard-pager' => 'a8da01f0',
'javelin-behavior-phabricator-keyboard-shortcuts' => '01fca1f0',
'javelin-behavior-phabricator-line-linker' => '1499a8cb',
- 'javelin-behavior-phabricator-nav' => '08163386',
+ 'javelin-behavior-phabricator-nav' => '947753e0',
'javelin-behavior-phabricator-notification-example' => '8ce821c5',
'javelin-behavior-phabricator-object-selector' => 'e0ec7f2f',
'javelin-behavior-phabricator-oncopy' => '2926fff2',
@@ -775,8 +775,8 @@
'phabricator-darklog' => 'c8e1ffe3',
'phabricator-darkmessage' => 'c48cccdd',
'phabricator-dashboard-css' => 'fe5b1869',
- 'phabricator-diff-changeset' => '731125f3',
- 'phabricator-diff-changeset-list' => '59d1ceb1',
+ 'phabricator-diff-changeset' => '3268dd83',
+ 'phabricator-diff-changeset-list' => '0a4f7809',
'phabricator-diff-inline' => '3337c065',
'phabricator-drag-and-drop-file-upload' => '58dea2fa',
'phabricator-draggable-list' => 'bea6e7f4',
@@ -816,7 +816,7 @@
'phabricator-uiexample-reactor-select' => 'a155550f',
'phabricator-uiexample-reactor-sendclass' => '1def2711',
'phabricator-uiexample-reactor-sendproperties' => 'b1f0ccee',
- 'phabricator-zindex-css' => '0233d039',
+ 'phabricator-zindex-css' => '9d8f7c4b',
'phame-css' => 'b3a0b3a3',
'pholio-css' => 'ca89d380',
'pholio-edit-css' => '07676f51',
@@ -946,16 +946,6 @@
'javelin-stratcom',
'javelin-workflow',
),
- '08163386' => array(
- 'javelin-behavior',
- 'javelin-behavior-device',
- 'javelin-stratcom',
- 'javelin-dom',
- 'javelin-magical-init',
- 'javelin-vector',
- 'javelin-request',
- 'javelin-util',
- ),
'0825c27a' => array(
'javelin-behavior',
'javelin-dom',
@@ -983,6 +973,9 @@
'javelin-dom',
'javelin-router',
),
+ '0a4f7809' => array(
+ 'javelin-install',
+ ),
'0f764c35' => array(
'javelin-install',
'javelin-util',
@@ -999,9 +992,6 @@
'javelin-dom',
'javelin-history',
),
- '15be1064' => array(
- 'phui-inline-comment-view-css',
- ),
'17bb8539' => array(
'javelin-behavior',
'javelin-stratcom',
@@ -1122,6 +1112,17 @@
'javelin-dom',
'javelin-vector',
),
+ '3268dd83' => array(
+ 'javelin-dom',
+ 'javelin-util',
+ 'javelin-stratcom',
+ 'javelin-install',
+ 'javelin-workflow',
+ 'javelin-router',
+ 'javelin-behavior-device',
+ 'javelin-vector',
+ 'phabricator-diff-inline',
+ ),
'327a00d1' => array(
'javelin-behavior',
'javelin-stratcom',
@@ -1349,9 +1350,6 @@
'javelin-vector',
'javelin-dom',
),
- '59d1ceb1' => array(
- 'javelin-install',
- ),
'5c54cbf3' => array(
'javelin-behavior',
'javelin-stratcom',
@@ -1450,17 +1448,6 @@
'javelin-workflow',
'phabricator-draggable-list',
),
- '731125f3' => array(
- 'javelin-dom',
- 'javelin-util',
- 'javelin-stratcom',
- 'javelin-install',
- 'javelin-workflow',
- 'javelin-router',
- 'javelin-behavior-device',
- 'javelin-vector',
- 'phabricator-diff-inline',
- ),
'7319e029' => array(
'javelin-behavior',
'javelin-dom',
@@ -1619,6 +1606,16 @@
'javelin-workflow',
'javelin-dom',
),
+ '947753e0' => array(
+ 'javelin-behavior',
+ 'javelin-behavior-device',
+ 'javelin-stratcom',
+ 'javelin-dom',
+ 'javelin-magical-init',
+ 'javelin-vector',
+ 'javelin-request',
+ 'javelin-util',
+ ),
'949c0fe5' => array(
'javelin-install',
),
@@ -2127,6 +2124,9 @@
'javelin-workflow',
'javelin-magical-init',
),
+ 'e7bd2a79' => array(
+ 'phui-inline-comment-view-css',
+ ),
'e9581f08' => array(
'javelin-behavior',
'javelin-stratcom',
diff --git a/src/applications/differential/view/DifferentialChangesetDetailView.php b/src/applications/differential/view/DifferentialChangesetDetailView.php
--- a/src/applications/differential/view/DifferentialChangesetDetailView.php
+++ b/src/applications/differential/view/DifferentialChangesetDetailView.php
@@ -183,6 +183,7 @@
'autoload' => $this->getAutoload(),
'loaded' => $this->getLoaded(),
'undoTemplates' => hsprintf('%s', $renderer->renderUndoTemplates()),
+ 'path' => $display_filename,
),
'class' => $class,
'id' => $id,
diff --git a/webroot/rsrc/css/application/differential/changeset-view.css b/webroot/rsrc/css/application/differential/changeset-view.css
--- a/webroot/rsrc/css/application/differential/changeset-view.css
+++ b/webroot/rsrc/css/application/differential/changeset-view.css
@@ -386,3 +386,21 @@
.differential-review-stage {
position: relative;
}
+
+.diff-banner {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ background: rgba(255, 255, 255, 0.95);
+ box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.1);
+ border-bottom: 1px solid {$lightgreyborder};
+ padding: 12px 18px;
+ vertical-align: middle;
+ font-weight: bold;
+ font-size: {$biggerfontsize};
+}
+
+.diff-banner .phui-icon-view {
+ margin-right: 4px;
+}
diff --git a/webroot/rsrc/css/core/z-index.css b/webroot/rsrc/css/core/z-index.css
--- a/webroot/rsrc/css/core/z-index.css
+++ b/webroot/rsrc/css/core/z-index.css
@@ -93,6 +93,10 @@
z-index: 6;
}
+.diff-banner {
+ z-index: 6;
+}
+
.conpherence-durable-column {
z-index: 7;
}
diff --git a/webroot/rsrc/js/application/diff/DiffChangeset.js b/webroot/rsrc/js/application/diff/DiffChangeset.js
--- a/webroot/rsrc/js/application/diff/DiffChangeset.js
+++ b/webroot/rsrc/js/application/diff/DiffChangeset.js
@@ -19,6 +19,7 @@
this._node = node;
var data = this._getNodeData();
+
this._renderURI = data.renderURI;
this._ref = data.ref;
this._whitespace = data.whitespace;
@@ -30,6 +31,8 @@
this._leftID = data.left;
this._rightID = data.right;
+ this._path = data.path;
+
this._inlines = [];
},
@@ -58,6 +61,7 @@
_visible: true,
_undoNode: null,
+ _path: null,
getLeftChangesetID: function() {
return this._leftID;
@@ -227,6 +231,9 @@
JX.Router.getInstance().queue(routable);
},
+ getPath: function() {
+ return this._path;
+ },
/**
* Receive a response to a context request.
@@ -428,6 +435,13 @@
return JX.Stratcom.getData(this._node);
},
+ getVectors: function() {
+ return {
+ pos: JX.$V(this._node),
+ dim: JX.Vector.getDim(this._node)
+ };
+ },
+
_onresponse: function(sequence, response) {
if (sequence != this._sequence) {
// If this isn't the most recent request, ignore it. This normally
diff --git a/webroot/rsrc/js/application/diff/DiffChangesetList.js b/webroot/rsrc/js/application/diff/DiffChangesetList.js
--- a/webroot/rsrc/js/application/diff/DiffChangesetList.js
+++ b/webroot/rsrc/js/application/diff/DiffChangesetList.js
@@ -51,6 +51,9 @@
var onresize = JX.bind(this, this._ifawake, this._onresize);
JX.Stratcom.listen('resize', null, onresize);
+ var onscroll = JX.bind(this, this._ifawake, this._onscroll);
+ JX.Stratcom.listen('scroll', null, onscroll);
+
var onselect = JX.bind(this, this._ifawake, this._onselect);
JX.Stratcom.listen(
'mousedown',
@@ -113,6 +116,8 @@
_rangeOrigin: null,
_rangeTarget: null,
+ _bannerNode: null,
+
sleep: function() {
this._asleep = true;
@@ -807,6 +812,12 @@
this._redrawFocus();
this._redrawSelection();
this._redrawHover();
+
+ this._redrawBanner();
+ },
+
+ _onscroll: function() {
+ this._redrawBanner();
},
_onselect: function(e) {
@@ -1265,6 +1276,77 @@
this._rangeTarget = null;
this.resetHover();
+ },
+
+ _redrawBanner: function() {
+ var node = this._getBannerNode();
+ var changeset = this._getVisibleChangeset();
+
+ // Don't do anything if nothing has changed. This seems to avoid some
+ // flickering issues in Safari, at least.
+ if (this._bannerChangeset === changeset) {
+ return;
+ }
+ this._bannerChangeset = changeset;
+
+ if (!changeset) {
+ JX.DOM.remove(node);
+ return;
+ }
+
+ var icon = new JX.PHUIXIconView()
+ .setIcon('fa-file')
+ .getNode();
+ JX.DOM.setContent(node, [icon, ' ', changeset.getPath()]);
+
+ document.body.appendChild(node);
+ },
+
+ _getBannerNode: function() {
+ if (!this._bannerNode) {
+ var attributes = {
+ className: 'diff-banner',
+ id: 'diff-banner'
+ };
+
+ this._bannerNode = JX.$N('div', attributes);
+ }
+
+ return this._bannerNode;
+ },
+
+ _getVisibleChangeset: function() {
+ if (this.isAsleep()) {
+ return null;
+ }
+
+ if (JX.Device.getDevice() != 'desktop') {
+ return null;
+ }
+
+ // Never show the banner if we're very near the top of the page.
+ var margin = 480;
+ var s = JX.Vector.getScroll();
+ if (s.y < margin) {
+ return null;
+ }
+
+ var v = JX.Vector.getViewport();
+ for (var ii = 0; ii < this._changesets.length; ii++) {
+ var changeset = this._changesets[ii];
+ var c = changeset.getVectors();
+
+ // If the changeset starts above the upper half of the screen...
+ if (c.pos.y < (s.y + (v.y / 2))) {
+ // ...and ends below the lower half of the screen, this is the
+ // current visible changeset.
+ if ((c.pos.y + c.dim.y) > (s.y + (v.y / 2))) {
+ return changeset;
+ }
+ }
+ }
+
+ return null;
}
}
diff --git a/webroot/rsrc/js/core/behavior-phabricator-nav.js b/webroot/rsrc/js/core/behavior-phabricator-nav.js
--- a/webroot/rsrc/js/core/behavior-phabricator-nav.js
+++ b/webroot/rsrc/js/core/behavior-phabricator-nav.js
@@ -130,8 +130,19 @@
return;
}
+ // When the buoyant header is visible, move the menu down below it. This
+ // is a bit of a hack.
+ var banner_height = 0;
+ try {
+ var banner = JX.$('diff-banner');
+ banner_height = JX.Vector.getDim(banner).y;
+ } catch (error) {
+ // Ignore if there's no banner on the page.
+ }
+
local.style.top = Math.max(
0,
+ banner_height,
JX.$V(content).y - Math.max(0, JX.Vector.getScroll().y)) + 'px';
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Nov 25, 4:26 AM (19 h, 18 m)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6783412
Default Alt Text
D17945.diff (13 KB)
Attached To
Mode
D17945: Restore the "buoyant" header in Differential
Attached
Detach File
Event Timeline
Log In to Comment