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

Highlight lines on drag and drop in Diffusion

Summary: Nobody knows that it's possible to highlight more lines because there's no interface for it.

Test Plan:
Highlighted:

- single line
- top to bottom
- bottom to top
- inside to outside

Reviewers: Korvin, epriestley

Reviewed By: epriestley

CC: aran, epriestley

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

vrana ceb52242 2a31fc84

+103 -4
+14 -1
src/__celerity_resource_map__.php
··· 778 778 ), 779 779 'diffusion-source-css' => 780 780 array( 781 - 'uri' => '/res/501fcd3a/rsrc/css/application/diffusion/diffusion-source.css', 781 + 'uri' => '/res/0ffedfa2/rsrc/css/application/diffusion/diffusion-source.css', 782 782 'type' => 'css', 783 783 'requires' => 784 784 array( ··· 1251 1251 3 => 'javelin-dom', 1252 1252 ), 1253 1253 'disk' => '/rsrc/js/application/diffusion/behavior-jump-to.js', 1254 + ), 1255 + 'javelin-behavior-diffusion-line-linker' => 1256 + array( 1257 + 'uri' => '/res/d3cf5499/rsrc/js/application/diffusion/behavior-line-linker.js', 1258 + 'type' => 'js', 1259 + 'requires' => 1260 + array( 1261 + 0 => 'javelin-behavior', 1262 + 1 => 'javelin-stratcom', 1263 + 2 => 'javelin-dom', 1264 + 3 => 'javelin-uri', 1265 + ), 1266 + 'disk' => '/rsrc/js/application/diffusion/behavior-line-linker.js', 1254 1267 ), 1255 1268 'javelin-behavior-diffusion-pull-lastmodified' => 1256 1269 array(
+7 -3
src/applications/diffusion/controller/DiffusionBrowseFileController.php
··· 244 244 )); 245 245 } 246 246 247 - $corpus_table = phutil_render_tag( 247 + $corpus_table = javelin_render_tag( 248 248 'table', 249 249 array( 250 250 'class' => "diffusion-source remarkup-code PhabricatorMonospaced", 251 + 'sigil' => 'diffusion-source', 251 252 ), 252 253 implode("\n", $rows)); 253 254 $corpus = phutil_render_tag( ··· 592 593 ), 593 594 phutil_escape_html($line['line'])); 594 595 595 - $blame[] = phutil_render_tag( 596 + $blame[] = javelin_render_tag( 596 597 'th', 597 598 array( 598 599 'class' => 'diffusion-line-link', 600 + 'sigil' => 'diffusion-line-link', 599 601 'style' => isset($color) ? 'background: '.$color : null, 600 602 ), 601 603 $line_link); 604 + 605 + Javelin::initBehavior('diffusion-line-linker'); 602 606 603 607 $blame = implode('', $blame); 604 608 ··· 624 628 $rows[] = phutil_render_tag( 625 629 'tr', 626 630 array( 627 - 'style' => ($line['highlighted'] ? 'background: #ffff00;' : null), 631 + 'class' => ($line['highlighted'] ? 'highlighted' : null), 628 632 ), 629 633 $blame. 630 634 $line_text);
+4
webroot/rsrc/css/application/diffusion/diffusion-source.css
··· 9 9 font-size: 10px; 10 10 } 11 11 12 + .diffusion-source tr.highlighted { 13 + background: #ffff00; 14 + } 15 + 12 16 .diffusion-source th { 13 17 text-align: right; 14 18 vertical-align: top;
+78
webroot/rsrc/js/application/diffusion/behavior-line-linker.js
··· 1 + /** 2 + * @provides javelin-behavior-diffusion-line-linker 3 + * @requires javelin-behavior 4 + * javelin-stratcom 5 + * javelin-dom 6 + * javelin-uri 7 + */ 8 + 9 + JX.behavior('diffusion-line-linker', function() { 10 + 11 + var origin = null; 12 + var target = null; 13 + var root = null; 14 + 15 + function getRowNumber(tr) { 16 + var th = JX.DOM.find(tr, 'th', 'diffusion-line-link'); 17 + return +(th.textContent || th.innerText); 18 + } 19 + 20 + JX.Stratcom.listen( 21 + 'mousedown', 22 + 'diffusion-line-link', 23 + function(e) { 24 + if (e.isRightButton()) { 25 + return; 26 + } 27 + origin = e.getNode('tag:tr'); 28 + target = origin; 29 + root = e.getNode('diffusion-source'); 30 + e.kill(); 31 + }); 32 + 33 + JX.Stratcom.listen( 34 + 'mouseover', 35 + 'diffusion-source', 36 + function(e) { 37 + if (!origin || e.getNode('diffusion-source') !== root) { 38 + return; 39 + } 40 + target = e.getNode('tag:tr'); 41 + 42 + var highlighting = false; 43 + var source = null; 44 + var trs = JX.DOM.scry(root, 'tr'); 45 + for (var i = 0; i < trs.length; i++) { 46 + if (!highlighting && (trs[i] === origin || trs[i] === target)) { 47 + highlighting = true; 48 + source = trs[i]; 49 + } 50 + JX.DOM.alterClass(trs[i], 'highlighted', highlighting); 51 + if (trs[i] === (source === origin ? target : origin)) { 52 + highlighting = false; 53 + } 54 + } 55 + }); 56 + 57 + JX.Stratcom.listen( 58 + 'mouseup', 59 + null, 60 + function(e) { 61 + if (!origin) { 62 + return; 63 + } 64 + 65 + var o = getRowNumber(origin); 66 + var t = getRowNumber(target); 67 + var lines = (o == t ? o : Math.min(o, t) + '-' + Math.max(o, t)); 68 + var th = JX.DOM.find(origin, 'th', 'diffusion-line-link'); 69 + var uri = JX.DOM.find(th, 'a').href; 70 + uri = uri.replace(/(.*\$)\d+/, '$1' + lines); 71 + 72 + origin = null; 73 + target = null; 74 + e.kill(); 75 + JX.$U(uri).go(); 76 + }); 77 + 78 + });