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

Show "reply" inlines as replies in the objective list

Summary: Ref T12733. Show a "reply" icon for replies, and make them stack directly under their parent.

Test Plan: {F4968500}

Reviewers: chad

Reviewed By: chad

Maniphest Tasks: T12733

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

+56 -28
+26 -26
resources/celerity/map.php
··· 13 13 'core.pkg.js' => '599698a7', 14 14 'darkconsole.pkg.js' => '1f9a31bc', 15 15 'differential.pkg.css' => '7d4cfa59', 16 - 'differential.pkg.js' => '06cddcc0', 16 + 'differential.pkg.js' => '886eadff', 17 17 'diffusion.pkg.css' => 'b93d9b8c', 18 18 'diffusion.pkg.js' => '84c8f8fd', 19 19 'favicon.ico' => '30672e08', ··· 392 392 'rsrc/js/application/dashboard/behavior-dashboard-tab-panel.js' => 'd4eecc63', 393 393 'rsrc/js/application/diff/DiffChangeset.js' => 'cf4e2140', 394 394 'rsrc/js/application/diff/DiffChangesetList.js' => 'a716ca27', 395 - 'rsrc/js/application/diff/DiffInline.js' => '4478f8ac', 396 - 'rsrc/js/application/diff/ScrollObjective.js' => '9df4e4e2', 397 - 'rsrc/js/application/diff/ScrollObjectiveList.js' => '085dd101', 395 + 'rsrc/js/application/diff/DiffInline.js' => '1478c3b2', 396 + 'rsrc/js/application/diff/ScrollObjective.js' => '7e8877e7', 397 + 'rsrc/js/application/diff/ScrollObjectiveList.js' => '6120e99a', 398 398 'rsrc/js/application/diff/behavior-preview-link.js' => '051c7832', 399 399 'rsrc/js/application/differential/behavior-comment-preview.js' => '51c5ad07', 400 400 'rsrc/js/application/differential/behavior-diff-radios.js' => 'e1ff79b1', ··· 779 779 'phabricator-dashboard-css' => 'fe5b1869', 780 780 'phabricator-diff-changeset' => 'cf4e2140', 781 781 'phabricator-diff-changeset-list' => 'a716ca27', 782 - 'phabricator-diff-inline' => '4478f8ac', 782 + 'phabricator-diff-inline' => '1478c3b2', 783 783 'phabricator-drag-and-drop-file-upload' => '58dea2fa', 784 784 'phabricator-draggable-list' => 'bea6e7f4', 785 785 'phabricator-fatal-config-template-css' => '8f18fa41', ··· 799 799 'phabricator-phtize' => 'd254d646', 800 800 'phabricator-prefab' => 'c5af80a2', 801 801 'phabricator-remarkup-css' => 'd1a5e11e', 802 - 'phabricator-scroll-objective' => '9df4e4e2', 803 - 'phabricator-scroll-objective-list' => '085dd101', 802 + 'phabricator-scroll-objective' => '7e8877e7', 803 + 'phabricator-scroll-objective-list' => '6120e99a', 804 804 'phabricator-search-results-css' => 'f87d23ad', 805 805 'phabricator-shaped-request' => '7cbe244b', 806 806 'phabricator-slowvote-css' => 'a94b7230', ··· 956 956 'javelin-stratcom', 957 957 'javelin-util', 958 958 ), 959 - '085dd101' => array( 960 - 'javelin-dom', 961 - 'javelin-util', 962 - 'javelin-stratcom', 963 - 'javelin-install', 964 - 'javelin-workflow', 965 - 'javelin-scrollbar', 966 - 'phabricator-scroll-objective', 967 - ), 968 959 '08f4ccc3' => array( 969 960 'phui-oi-list-view-css', 970 961 ), ··· 989 980 'javelin-util', 990 981 'javelin-dom', 991 982 'javelin-typeahead-normalizer', 983 + ), 984 + '1478c3b2' => array( 985 + 'javelin-dom', 992 986 ), 993 987 '1499a8cb' => array( 994 988 'javelin-behavior', ··· 1203 1197 'javelin-workflow', 1204 1198 'javelin-workboard-controller', 1205 1199 ), 1206 - '4478f8ac' => array( 1207 - 'javelin-dom', 1208 - ), 1209 1200 '44959b73' => array( 1210 1201 'javelin-util', 1211 1202 'javelin-uri', ··· 1393 1384 'javelin-stratcom', 1394 1385 'javelin-dom', 1395 1386 ), 1387 + '6120e99a' => array( 1388 + 'javelin-dom', 1389 + 'javelin-util', 1390 + 'javelin-stratcom', 1391 + 'javelin-install', 1392 + 'javelin-workflow', 1393 + 'javelin-scrollbar', 1394 + 'phabricator-scroll-objective', 1395 + ), 1396 1396 '61cbc29a' => array( 1397 1397 'javelin-magical-init', 1398 1398 'javelin-util', ··· 1501 1501 '7e41274a' => array( 1502 1502 'javelin-install', 1503 1503 ), 1504 + '7e8877e7' => array( 1505 + 'javelin-dom', 1506 + 'javelin-util', 1507 + 'javelin-stratcom', 1508 + 'javelin-install', 1509 + 'javelin-workflow', 1510 + ), 1504 1511 '7ebaeed3' => array( 1505 1512 'herald-rule-editor', 1506 1513 'javelin-behavior', ··· 1670 1677 ), 1671 1678 '9d9685d6' => array( 1672 1679 'phui-oi-list-view-css', 1673 - ), 1674 - '9df4e4e2' => array( 1675 - 'javelin-dom', 1676 - 'javelin-util', 1677 - 'javelin-stratcom', 1678 - 'javelin-install', 1679 - 'javelin-workflow', 1680 1680 ), 1681 1681 '9f36c42d' => array( 1682 1682 'javelin-behavior',
+5
webroot/rsrc/js/application/diff/DiffInline.js
··· 223 223 var color = 'bluegrey'; 224 224 var tooltip = this._snippet; 225 225 var anchor = this._row; 226 + var should_stack = false; 226 227 227 228 if (this._isEditing) { 228 229 icon = 'fa-star'; ··· 244 245 } else if (this._isGhost) { 245 246 icon = 'fa-comment-o'; 246 247 color = 'grey'; 248 + } else if (this._replyToCommentPHID) { 249 + icon = 'fa-reply'; 250 + should_stack = true; 247 251 } 248 252 249 253 objective ··· 251 255 .setIcon(icon) 252 256 .setColor(color) 253 257 .setTooltip(tooltip) 258 + .setShouldStack(should_stack) 254 259 .show(); 255 260 }, 256 261
+18
webroot/rsrc/js/application/diff/ScrollObjective.js
··· 26 26 27 27 _visible: false, 28 28 _callback: false, 29 + _stack: false, 29 30 30 31 getNode: function() { 31 32 if (!this._node) { ··· 102 103 JX.Stratcom.getData(node).align = 'W'; 103 104 JX.Stratcom.getData(node).size = 'auto'; 104 105 return this; 106 + }, 107 + 108 + 109 + /** 110 + * Should this objective always stack immediately under the previous 111 + * objective? 112 + * 113 + * This allows related objectives (like "comment, reply, reply") to be 114 + * rendered in a tight sequence. 115 + */ 116 + setShouldStack: function(stack) { 117 + this._stack = stack; 118 + return this; 119 + }, 120 + 121 + shouldStack: function() { 122 + return this._stack; 105 123 }, 106 124 107 125 show: function() {
+7 -2
webroot/rsrc/js/application/diff/ScrollObjectiveList.js
··· 112 112 113 113 items.push({ 114 114 offset: offset, 115 - node: objective_node 115 + node: objective_node, 116 + objective: objective 116 117 }); 117 118 } 118 119 ··· 130 131 offset = item.offset; 131 132 132 133 if (min !== null) { 133 - offset = Math.max(offset, min); 134 + if (item.objective.shouldStack()) { 135 + offset = min; 136 + } else { 137 + offset = Math.max(offset, min); 138 + } 134 139 } 135 140 min = offset + 15; 136 141