[PATCH 2 of 3 RFC] hgweb: click on line number in file source view gives link to it

Laurens Holst laurens.nospam at grauw.nl
Sat Jun 29 10:17:58 CDT 2013


Op 29-6-2013 16:06, Alexander Plavin schreef:
> # HG changeset patch
> # User Alexander Plavin <me at aplavin.ru>
> # Date 1372180347 -14400
> #      Tue Jun 25 21:12:27 2013 +0400
> # Node ID cc47e0b1bf3ecf020a1f84753694502ef4b9b603
> # Parent  397045d4f1bed3b95c4c42d410edd762d20abd3f
> hgweb: click on line number in file source view gives link to it
>
> As the source lines are shown as HTML list, a bit of JavaScript code
> is required to process clicks on the numbers.
>
> diff -r 397045d4f1be -r cc47e0b1bf3e mercurial/templates/paper/footer.tmpl
> --- a/mercurial/templates/paper/footer.tmpl	Tue Jun 25 21:10:21 2013 +0400
> +++ b/mercurial/templates/paper/footer.tmpl	Tue Jun 25 21:12:27 2013 +0400
> @@ -1,4 +1,7 @@
> -<script type="text/javascript">process_dates()</script>
> +<script type="text/javascript">
> +process_dates();
> +addOnclickSource();
> +</script>
>   {motd}
>   
>   </body>
> diff -r 397045d4f1be -r cc47e0b1bf3e mercurial/templates/static/mercurial.js
> --- a/mercurial/templates/static/mercurial.js	Tue Jun 25 21:10:21 2013 +0400
> +++ b/mercurial/templates/static/mercurial.js	Tue Jun 25 21:12:27 2013 +0400
> @@ -3,6 +3,7 @@
>   // Rendering of branch DAGs on the client side
>   // Display of elapsed time
>   // Show or hide diffstat
> +// Link to a line when clicking on it
>   //
>   // Copyright 2008 Dirkjan Ochtman <dirkjan AT ochtman DOT nl>
>   // Copyright 2006 Alexander Schremmer <alex AT alexanderweb DOT de>
> @@ -274,3 +275,28 @@
>   	document.getElementById('diffstatdetails').style.display = 'none';
>   	document.getElementById('diffstatexpand').style.display = 'inline';
>   }
> +
> +
> +function addOnclickSource() {
> +    var nodes = document.querySelectorAll('ol.sourcelines');
> +
> +    clickHandler = function (event) {

Missing a ‘var’ here, without it will be global.

Personally I think it looks nicer to write:

function clickHandler() {}

(It will be locally scoped still.)

> +        var id;
> +        if (event.offsetX < 0) {
> +            // WebKit, Presto
> +            id = event.target.parentNode.id;
> +        }
> +        if (event.target.tagName == 'LI') {
> +            // Gecko, Presto
> +            id = event.target.id;
> +        }
> +
> +        if (id) {
> +            window.location.hash = '#' + id;
> +        }
> +    };
> +
> +    for (i = 0; i < nodes.length; i++) {
> +        nodes[i].onclick = clickHandler;
> +    }
> +}
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel
>



More information about the Mercurial-devel mailing list