diff --git a/resources/celerity/map.php b/resources/celerity/map.php --- a/resources/celerity/map.php +++ b/resources/celerity/map.php @@ -485,7 +485,7 @@ 'rsrc/js/core/behavior-keyboard-pager.js' => '1325b731', 'rsrc/js/core/behavior-keyboard-shortcuts.js' => '42c44e8b', 'rsrc/js/core/behavior-lightbox-attachments.js' => '14c7ab36', - 'rsrc/js/core/behavior-line-linker.js' => '0d915ff5', + 'rsrc/js/core/behavior-line-linker.js' => '20613f20', 'rsrc/js/core/behavior-linked-container.js' => '74446546', 'rsrc/js/core/behavior-more.js' => '506aa3f4', 'rsrc/js/core/behavior-object-selector.js' => '98ef467f', @@ -650,7 +650,7 @@ 'javelin-behavior-phabricator-gesture-example' => '242dedd0', 'javelin-behavior-phabricator-keyboard-pager' => '1325b731', 'javelin-behavior-phabricator-keyboard-shortcuts' => '42c44e8b', - 'javelin-behavior-phabricator-line-linker' => '0d915ff5', + 'javelin-behavior-phabricator-line-linker' => '20613f20', 'javelin-behavior-phabricator-notification-example' => '29819b75', 'javelin-behavior-phabricator-object-selector' => '98ef467f', 'javelin-behavior-phabricator-oncopy' => 'da8f5259', @@ -1003,13 +1003,6 @@ '0d2490ce' => array( 'javelin-install', ), - '0d915ff5' => array( - 'javelin-behavior', - 'javelin-stratcom', - 'javelin-dom', - 'javelin-history', - 'javelin-external-editor-link-engine', - ), '0eaa33a9' => array( 'javelin-behavior', 'javelin-dom', @@ -1107,6 +1100,13 @@ 'javelin-uri', 'javelin-install', ), + '20613f20' => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-dom', + 'javelin-history', + 'javelin-external-editor-link-engine', + ), '225bbb98' => array( 'javelin-install', 'javelin-reactor', diff --git a/src/view/layout/PhabricatorSourceCodeView.php b/src/view/layout/PhabricatorSourceCodeView.php --- a/src/view/layout/PhabricatorSourceCodeView.php +++ b/src/view/layout/PhabricatorSourceCodeView.php @@ -132,7 +132,7 @@ if ($this->canClickHighlight) { if ($base_uri) { - $line_href = $base_uri.'$'.$line_number; + $line_href = $base_uri.'#'.$line_number; } else { $line_href = null; } @@ -142,6 +142,7 @@ array( 'href' => $line_href, 'data-n' => $line_number, + 'id' => $line_number, )); } else { $tag_number = phutil_tag( diff --git a/webroot/rsrc/js/core/behavior-line-linker.js b/webroot/rsrc/js/core/behavior-line-linker.js --- a/webroot/rsrc/js/core/behavior-line-linker.js +++ b/webroot/rsrc/js/core/behavior-line-linker.js @@ -160,11 +160,16 @@ target = null; root = null; - var lines = (o == t ? o : Math.min(o, t) + '-' + Math.max(o, t)); - uri = JX.$U(uri); path = uri.getPath(); - path = path + '$' + lines; + // Use anchor fragment for single line (calling the resulting URL will + // not highlight or scroll). Use custom $ when selecting multiple lines + // (calling the resulting URL will highlight and scroll to position). + if (o == t) { + path = path + '#' + o; + } else { + path = path + '$' + Math.min(o, t) + '-' + Math.max(o, t); + } uri = uri.setPath(path).toString(); JX.History.replace(uri);