diff --git a/src/aphront/default/configuration/AphrontDefaultApplicationConfiguration.php b/src/aphront/default/configuration/AphrontDefaultApplicationConfiguration.php index 43a8135354..07b12b7172 100644 --- a/src/aphront/default/configuration/AphrontDefaultApplicationConfiguration.php +++ b/src/aphront/default/configuration/AphrontDefaultApplicationConfiguration.php @@ -265,7 +265,7 @@ class AphrontDefaultApplicationConfiguration 'browse/'. '(?P.*?)'. '(?:[;](?P[a-z0-9]+))?'. - '(?:[$](?P\d+))?'. + '(?:[$](?P\d+(?:-\d+)?))?'. '$' => 'DiffusionBrowseController', 'diff/'. diff --git a/src/applications/diffusion/controller/file/DiffusionBrowseFileController.php b/src/applications/diffusion/controller/file/DiffusionBrowseFileController.php index 40907f71fd..bd1bf2e35e 100644 --- a/src/applications/diffusion/controller/file/DiffusionBrowseFileController.php +++ b/src/applications/diffusion/controller/file/DiffusionBrowseFileController.php @@ -313,6 +313,19 @@ class DiffusionBrowseFileController extends DiffusionController { $range = 1; } + $targ = ''; + $min_line = 0; + $line = $drequest->getLine(); + if (strpos($line,'-') !== false) { + list($min,$max) = explode('-',$line,2); + $min_line = min($min, $max); + $max_line = max($min, $max); + } else if (strlen($line)) { + $min_line = $line; + $max_line = $line; + } + + foreach ($text_list as $k => $line) { if ($needs_blame) { // If the line's rev is same as the line above, show empty content @@ -370,11 +383,13 @@ class DiffusionBrowseFileController extends DiffusionController { } // Highlight the line of interest if needed. - if ($n == $drequest->getLine()) { + if ($min_line > 0 && ($n >= $min_line && $n <= $max_line)) { $tr = ''; - $targ = ''; - Javelin::initBehavior('diffusion-jump-to', - array('target' => 'scroll_target')); + if ($targ == '') { + $targ = ''; + Javelin::initBehavior('diffusion-jump-to', + array('target' => 'scroll_target')); + } } else { $tr = ''; $targ = null;