diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs index 1dde7bd80d451..e144138008da7 100644 --- a/src/librustdoc/html/render.rs +++ b/src/librustdoc/html/render.rs @@ -716,11 +716,12 @@ impl<'self> fmt::Default for Item<'self> { } write!(fmt.buf, "[src]", + href='{root}src/{crate}/{path}.html\\#{linefrom}-{lineto}'>[src]", root = it.cx.root_path, crate = it.cx.layout.crate, path = path.connect("/"), - line = it.item.source.loline); + linefrom = it.item.source.loline, + lineto = it.item.source.hiline); } // Write the breadcrumb trail header for the top diff --git a/src/librustdoc/html/static/main.css b/src/librustdoc/html/static/main.css index 2366a530a877c..f24110a62eb1b 100644 --- a/src/librustdoc/html/static/main.css +++ b/src/librustdoc/html/static/main.css @@ -118,9 +118,16 @@ body { .content h1 { margin-top: 0; } .content h1, .content h2 { margin-left: -20px; } .content pre { padding: 20px; } - +.content.source pre.rust { + white-space: pre; + overflow: auto; + padding-left: 0; +} .content pre.line-numbers { float: left; border: none; } .line-numbers span { color: #c67e2d; } +.line-numbers .line-highlighted { + background-color: #fff871; +} .content .highlighted { cursor: pointer; diff --git a/src/librustdoc/html/static/main.js b/src/librustdoc/html/static/main.js index bf40261e76509..faa22672736ce 100644 --- a/src/librustdoc/html/static/main.js +++ b/src/librustdoc/html/static/main.js @@ -31,6 +31,25 @@ resizeShortBlocks(); $(window).on('resize', resizeShortBlocks); + function highlightSourceLines() { + var i, from, to, match = window.location.hash.match(/^#?(\d+)(?:-(\d+))?$/); + if (match) { + from = parseInt(match[1], 10); + to = Math.min(50000, parseInt(match[2] || match[1], 10)); + from = Math.min(from, to); + if ($('#' + from).length === 0) { + return; + } + $('#' + from)[0].scrollIntoView(); + $('.line-numbers span').removeClass('line-highlighted'); + for (i = from; i <= to; i += 1) { + $('#' + i).addClass('line-highlighted'); + } + } + } + highlightSourceLines(); + $(window).on('hashchange', highlightSourceLines); + $(document).on('keyup', function (e) { if (document.activeElement.tagName === 'INPUT') { return;