[PATCH V3] hgweb: add line wrapping switch to file source view
Alexander Plavin
me at aplavin.ru
Mon Jul 15 09:42:29 CDT 2013
# HG changeset patch
# User Alexander Plavin <me at aplavin.ru>
# Date 1373630293 -14400
# Fri Jul 12 15:58:13 2013 +0400
# Node ID 3aba8251a77c9f981fdc5b5a4ea9307780e171dc
# Parent 6c49903f66be1a7185d54e1e0df5419d64238e11
hgweb: add line wrapping switch to file source view
This uses classList property, which is well-supported now: both Chromium 8.0+,
Firefox 3.6+ and Opera 11.5+ support it, as well as relatively modern versions
of other browsers.
diff -r 6c49903f66be -r 3aba8251a77c mercurial/templates/paper/filerevision.tmpl
--- a/mercurial/templates/paper/filerevision.tmpl Fri Jul 12 16:01:11 2013 +0400
+++ b/mercurial/templates/paper/filerevision.tmpl Fri Jul 12 15:58:13 2013 +0400
@@ -67,8 +67,9 @@
</table>
<div class="overflow">
+<div class="sourcefirst linewraptoggle">line wrap: <a class="linewraplink" href="javascript:toggleLinewrap()">on</a></div>
<div class="sourcefirst"> line source</div>
-<pre class="sourcelines">{text%fileline}</pre>
+<pre class="sourcelines wrap">{text%fileline}</pre>
<div class="sourcelast"></div>
</div>
</div>
diff -r 6c49903f66be -r 3aba8251a77c mercurial/templates/static/mercurial.js
--- a/mercurial/templates/static/mercurial.js Fri Jul 12 16:01:11 2013 +0400
+++ b/mercurial/templates/static/mercurial.js Fri Jul 12 15:58:13 2013 +0400
@@ -271,3 +271,29 @@
document.getElementById('diffstatdetails').style.display = curexpand;
document.getElementById('diffstatexpand').style.display = curdetails;
}
+
+function toggleLinewrap() {
+ function getLinewrap() {
+ var nodes = document.getElementsByClassName('sourcelines');
+ // if there are no such nodes, error is thrown here
+ return nodes[0].classList.contains('wrap');
+ }
+
+ function setLinewrap(enable) {
+ var nodes = document.getElementsByClassName('sourcelines');
+ for (var i = 0; i < nodes.length; i++) {
+ if (enable) {
+ nodes[i].classList.add('wrap');
+ } else {
+ nodes[i].classList.remove('wrap');
+ }
+ }
+
+ var links = document.getElementsByClassName('linewraplink');
+ for (var i = 0; i < links.length; i++) {
+ links[i].innerHTML = enable ? 'on' : 'off';
+ }
+ }
+
+ setLinewrap(!getLinewrap());
+}
diff -r 6c49903f66be -r 3aba8251a77c mercurial/templates/static/style-paper.css
--- a/mercurial/templates/static/style-paper.css Fri Jul 12 16:01:11 2013 +0400
+++ b/mercurial/templates/static/style-paper.css Fri Jul 12 15:58:13 2013 +0400
@@ -214,11 +214,18 @@
position: relative;
}
+.wrap > span {
+ white-space: pre-wrap;
+}
+
+.linewraptoggle {
+ float: right;
+}
+
.sourcelines > span {
display: inline-block;
width: 100%;
padding: 1px 0px;
- white-space: pre-wrap;
counter-increment: lineno;
}
diff -r 6c49903f66be -r 3aba8251a77c tests/test-hgweb-commands.t
--- a/tests/test-hgweb-commands.t Fri Jul 12 16:01:11 2013 +0400
+++ b/tests/test-hgweb-commands.t Fri Jul 12 15:58:13 2013 +0400
@@ -667,8 +667,9 @@
</table>
<div class="overflow">
+ <div class="sourcefirst linewraptoggle">line wrap: <a class="linewraplink" href="javascript:toggleLinewrap()">on</a></div>
<div class="sourcefirst"> line source</div>
- <pre class="sourcelines">
+ <pre class="sourcelines wrap">
<span id="l1">foo</span><a href="#l1"></a></pre>
<div class="sourcelast"></div>
</div>
diff -r 6c49903f66be -r 3aba8251a77c tests/test-highlight.t
--- a/tests/test-highlight.t Fri Jul 12 16:01:11 2013 +0400
+++ b/tests/test-highlight.t Fri Jul 12 15:58:13 2013 +0400
@@ -136,8 +136,9 @@
</table>
<div class="overflow">
+ <div class="sourcefirst linewraptoggle">line wrap: <a class="linewraplink" href="javascript:toggleLinewrap()">on</a></div>
<div class="sourcefirst"> line source</div>
- <pre class="sourcelines">
+ <pre class="sourcelines wrap">
<span id="l1"><span class="c">#!/usr/bin/env python</span></span><a href="#l1"></a>
<span id="l2"></span><a href="#l2"></a>
<span id="l3"><span class="sd">"""Fun with generators. Corresponding Haskell implementation:</span></span><a href="#l3"></a>
More information about the Mercurial-devel
mailing list