@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.

Repaint filetree more consistently for mobile/device views

Summary:
Ref T13189. See <https://discourse.phabricator-community.org/t/diffusion-differential-mobile-layout-broken-when-enabling-file-tree/1751>.

We currently call a nonexistent `resetdrag()` which does nothing. Some sequences of interactions can result in a blank left column in mobile/device widths.

Repaint the filetree away more consistently on device change.

Test Plan: Viewed a revision, toggled filetree off + on, resized to narrow width. Before: bad left margin, JS console error. After: proper repaint at device breakpoint, no JS console error.

Reviewers: amckinley

Maniphest Tasks: T13189

Differential Revision: https://secure.phabricator.com/D19611

+47 -30
+13 -13
resources/celerity/map.php
··· 10 10 'conpherence.pkg.css' => 'e68cf1fa', 11 11 'conpherence.pkg.js' => '15191c65', 12 12 'core.pkg.css' => 'fc4839c8', 13 - 'core.pkg.js' => '2058ec09', 13 + 'core.pkg.js' => 'b5a949ca', 14 14 'differential.pkg.css' => '06dc617c', 15 15 'differential.pkg.js' => 'c1cfa143', 16 16 'diffusion.pkg.css' => 'a2d17c7d', ··· 473 473 'rsrc/js/core/behavior-more.js' => 'a80d0378', 474 474 'rsrc/js/core/behavior-object-selector.js' => '77c1f0b0', 475 475 'rsrc/js/core/behavior-oncopy.js' => '2926fff2', 476 - 'rsrc/js/core/behavior-phabricator-nav.js' => '94b7c320', 476 + 'rsrc/js/core/behavior-phabricator-nav.js' => '9d32bc88', 477 477 'rsrc/js/core/behavior-phabricator-remarkup-assist.js' => 'acd29eee', 478 478 'rsrc/js/core/behavior-read-only-warning.js' => 'ba158207', 479 479 'rsrc/js/core/behavior-redirect.js' => '0213259f', ··· 631 631 'javelin-behavior-phabricator-keyboard-pager' => 'a8da01f0', 632 632 'javelin-behavior-phabricator-keyboard-shortcuts' => '01fca1f0', 633 633 'javelin-behavior-phabricator-line-linker' => '66a62306', 634 - 'javelin-behavior-phabricator-nav' => '94b7c320', 634 + 'javelin-behavior-phabricator-nav' => '9d32bc88', 635 635 'javelin-behavior-phabricator-notification-example' => '8ce821c5', 636 636 'javelin-behavior-phabricator-object-selector' => '77c1f0b0', 637 637 'javelin-behavior-phabricator-oncopy' => '2926fff2', ··· 1628 1628 'javelin-resource', 1629 1629 'javelin-routable', 1630 1630 ), 1631 - '94b7c320' => array( 1632 - 'javelin-behavior', 1633 - 'javelin-behavior-device', 1634 - 'javelin-stratcom', 1635 - 'javelin-dom', 1636 - 'javelin-magical-init', 1637 - 'javelin-vector', 1638 - 'javelin-request', 1639 - 'javelin-util', 1640 - ), 1641 1631 '960f6a39' => array( 1642 1632 'javelin-behavior', 1643 1633 'javelin-dom', ··· 1657 1647 'javelin-util', 1658 1648 'javelin-workflow', 1659 1649 'javelin-stratcom', 1650 + ), 1651 + '9d32bc88' => array( 1652 + 'javelin-behavior', 1653 + 'javelin-behavior-device', 1654 + 'javelin-stratcom', 1655 + 'javelin-dom', 1656 + 'javelin-magical-init', 1657 + 'javelin-vector', 1658 + 'javelin-request', 1659 + 'javelin-util', 1660 1660 ), 1661 1661 '9d9685d6' => array( 1662 1662 'phui-oi-list-view-css',
+34 -17
webroot/rsrc/js/core/behavior-phabricator-nav.js
··· 20 20 21 21 // - Flexible Navigation Column ------------------------------------------------ 22 22 23 - 24 23 var dragging; 25 24 var track; 25 + 26 + var collapsed = config.collapsed; 27 + var narrowed; 28 + var visible = null; 26 29 27 30 JX.enableDispatch(document.body, 'mousemove'); 28 31 ··· 95 98 if (!dragging) { 96 99 return; 97 100 } 101 + 98 102 JX.DOM.alterClass(document.body, 'jx-drag-col', false); 99 103 dragging = false; 100 104 ··· 117 121 return (JX.$V(drag).x - JX.Vector.getScroll().x); 118 122 } 119 123 124 + function repaint() { 125 + narrowed = !JX.Device.isDesktop(); 126 + 127 + var was_visible = visible; 128 + visible = (!collapsed && !narrowed); 129 + 130 + if (was_visible === visible) { 131 + return; 132 + } 133 + 134 + if (!visible) { 135 + savedrag(); 136 + } 137 + 138 + JX.DOM.alterClass(main, 'has-local-nav', visible); 139 + JX.DOM.alterClass(main, 'has-drag-nav', visible); 140 + JX.DOM.alterClass(main, 'has-closed-nav', !visible); 141 + 142 + if (visible) { 143 + restoredrag(); 144 + } 145 + } 146 + 120 147 var saved_width = config.width; 121 148 function savedrag() { 122 149 saved_width = get_width(); ··· 136 163 content.style.marginLeft = (saved_width + JX.Vector.getDim(drag).x) + 'px'; 137 164 } 138 165 139 - var collapsed = config.collapsed; 140 166 JX.Stratcom.listen('differential-filetree-toggle', null, function() { 141 167 collapsed = !collapsed; 142 168 143 - if (collapsed) { 144 - savedrag(); 145 - } 146 - 147 - JX.DOM.alterClass(main, 'has-local-nav', !collapsed); 148 - JX.DOM.alterClass(main, 'has-drag-nav', !collapsed); 149 - JX.DOM.alterClass(main, 'has-closed-nav', collapsed); 150 - 151 - if (!collapsed) { 152 - restoredrag(); 153 - } 169 + repaint(); 154 170 155 171 new JX.Request('/settings/adjust/', JX.bag) 156 172 .setData({ key : 'nav-collapsed', value : (collapsed ? 1 : 0) }) ··· 168 184 // of the navigation bar. 169 185 170 186 function onresize() { 171 - if (JX.Device.getDevice() != 'desktop') { 187 + repaint(); 188 + 189 + if (!visible) { 172 190 return; 173 191 } 174 192 ··· 193 211 local.style.left = 0; 194 212 195 213 JX.Stratcom.listen(['scroll', 'resize'], null, onresize); 196 - onresize(); 197 214 215 + repaint(); 198 216 199 217 // - Navigation Reset ---------------------------------------------------------- 200 218 201 219 JX.Stratcom.listen('phabricator-device-change', null, function() { 202 - resetdrag(); 203 - onresize(); 220 + repaint(); 204 221 }); 205 222 206 223 });