diff --git a/resources/celerity/map.php b/resources/celerity/map.php index 112c75919b..3ffa4bb058 100644 --- a/resources/celerity/map.php +++ b/resources/celerity/map.php @@ -78,7 +78,7 @@ return array( 'rsrc/css/application/feed/feed.css' => 'ecd4ec57', 'rsrc/css/application/files/global-drag-and-drop.css' => 'b556a948', 'rsrc/css/application/flag/flag.css' => 'bba8f811', - 'rsrc/css/application/harbormaster/harbormaster.css' => '2999ccaa', + 'rsrc/css/application/harbormaster/harbormaster.css' => 'cd73d427', 'rsrc/css/application/herald/herald-test.css' => 'a52e323e', 'rsrc/css/application/herald/herald.css' => 'cd8d0134', 'rsrc/css/application/maniphest/report.css' => '9b9580b7', @@ -495,7 +495,7 @@ return array( 'rsrc/js/core/behavior-keyboard-pager.js' => 'a8da01f0', 'rsrc/js/core/behavior-keyboard-shortcuts.js' => '01fca1f0', 'rsrc/js/core/behavior-lightbox-attachments.js' => 'e31fad01', - 'rsrc/js/core/behavior-line-linker.js' => 'c479ac01', + 'rsrc/js/core/behavior-line-linker.js' => 'a9b946f8', 'rsrc/js/core/behavior-more.js' => 'a80d0378', 'rsrc/js/core/behavior-object-selector.js' => '77c1f0b0', 'rsrc/js/core/behavior-oncopy.js' => '2926fff2', @@ -579,7 +579,7 @@ return array( 'font-fontawesome' => 'e838e088', 'font-lato' => 'c7ccd872', 'global-drag-and-drop-css' => 'b556a948', - 'harbormaster-css' => '2999ccaa', + 'harbormaster-css' => 'cd73d427', 'herald-css' => 'cd8d0134', 'herald-rule-editor' => 'dca75c0e', 'herald-test-css' => 'a52e323e', @@ -658,7 +658,7 @@ return array( 'javelin-behavior-phabricator-gesture-example' => '558829c2', 'javelin-behavior-phabricator-keyboard-pager' => 'a8da01f0', 'javelin-behavior-phabricator-keyboard-shortcuts' => '01fca1f0', - 'javelin-behavior-phabricator-line-linker' => 'c479ac01', + 'javelin-behavior-phabricator-line-linker' => 'a9b946f8', 'javelin-behavior-phabricator-nav' => '836f966d', 'javelin-behavior-phabricator-notification-example' => '8ce821c5', 'javelin-behavior-phabricator-object-selector' => '77c1f0b0', @@ -1743,6 +1743,12 @@ return array( 'javelin-uri', 'phabricator-keyboard-shortcut', ), + 'a9b946f8' => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-dom', + 'javelin-history', + ), 'a9f88de2' => array( 'javelin-behavior', 'javelin-dom', @@ -1931,12 +1937,6 @@ return array( 'javelin-stratcom', 'phabricator-tooltip', ), - 'c479ac01' => array( - 'javelin-behavior', - 'javelin-stratcom', - 'javelin-dom', - 'javelin-history', - ), 'c587b80f' => array( 'javelin-install', ), diff --git a/src/applications/harbormaster/controller/HarbormasterBuildLogRenderController.php b/src/applications/harbormaster/controller/HarbormasterBuildLogRenderController.php index 4fa826b690..cc8da38da9 100644 --- a/src/applications/harbormaster/controller/HarbormasterBuildLogRenderController.php +++ b/src/applications/harbormaster/controller/HarbormasterBuildLogRenderController.php @@ -369,8 +369,9 @@ final class HarbormasterBuildLogRenderController 'a', array( 'href' => $uri.'$'.$display_line, + 'data-n' => $display_line, ), - $display_line); + ''); $line_cell = phutil_tag('th', array(), $display_line); $text_cell = phutil_tag('td', array(), $display_text); diff --git a/webroot/rsrc/css/application/harbormaster/harbormaster.css b/webroot/rsrc/css/application/harbormaster/harbormaster.css index 0e8574464d..38a65bf9a0 100644 --- a/webroot/rsrc/css/application/harbormaster/harbormaster.css +++ b/webroot/rsrc/css/application/harbormaster/harbormaster.css @@ -48,6 +48,12 @@ user-select: none; } +.harbormaster-log-table > tbody > tr > th a::before { + /* Render the line numbers into the document using a pseudo-element so that + the text is not copied. */ + content: attr(data-n); +} + .harbormaster-log-table > tbody > tr > th a { display: block; color: {$darkbluetext}; diff --git a/webroot/rsrc/js/core/behavior-line-linker.js b/webroot/rsrc/js/core/behavior-line-linker.js index ed93e6e11b..a0f99fb3bc 100644 --- a/webroot/rsrc/js/core/behavior-line-linker.js +++ b/webroot/rsrc/js/core/behavior-line-linker.js @@ -21,6 +21,16 @@ JX.behavior('phabricator-line-linker', function() { function getRowNumber(tr) { var th = tr.firstChild; + + // If the "" tag contains an "" with "data-n" that we're using + // to prevent copy/paste of line numbers, use that. + if (th.firstChild) { + var line = th.firstChild.getAttribute('data-n'); + if (line) { + return line; + } + } + return +(th.textContent || th.innerText); }