D850: hgweb: add HTML elements to control whitespace settings for annotate
indygreg (Gregory Szorc)
phabricator at mercurial-scm.org
Sun Oct 1 10:56:23 UTC 2017
This revision was automatically updated to reflect the committed changes.
Closed by commit rHG6797f1fbc642: hgweb: add HTML elements to control whitespace settings for annotate (authored by indygreg, committed by ).
CHANGED PRIOR TO COMMIT
https://phab.mercurial-scm.org/D850?vs=2175&id=2236#toc
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D850?vs=2175&id=2236
REVISION DETAIL
https://phab.mercurial-scm.org/D850
AFFECTED FILES
mercurial/hgweb/webcommands.py
mercurial/templates/gitweb/fileannotate.tmpl
mercurial/templates/gitweb/map
mercurial/templates/paper/fileannotate.tmpl
mercurial/templates/paper/map
mercurial/templates/static/mercurial.js
mercurial/templates/static/style-gitweb.css
mercurial/templates/static/style-paper.css
tests/test-hgweb.t
tests/test-highlight.t
CHANGE DETAILS
diff --git a/tests/test-highlight.t b/tests/test-highlight.t
--- a/tests/test-highlight.t
+++ b/tests/test-highlight.t
@@ -284,6 +284,25 @@
</tr>
</table>
+
+ <form id="diffopts-form"
+ data-ignorews="0"
+ data-ignorewsamount="0"
+ data-ignorewseol="0"
+ data-ignoreblanklines="0">
+ <span>Ignore whitespace changes - </span>
+ <span>Everywhere:</span>
+ <input id="ignorews-checkbox" type="checkbox" />
+ <span>Within whitespace:</span>
+ <input id="ignorewsamount-checkbox" type="checkbox" />
+ <span>At end of lines:</span>
+ <input id="ignorewseol-checkbox" type="checkbox" />
+ </form>
+
+ <script type="text/javascript">
+ renderDiffOptsForm();
+ </script>
+
<div class="overflow">
<table class="bigtable">
<thead>
diff --git a/tests/test-hgweb.t b/tests/test-hgweb.t
--- a/tests/test-hgweb.t
+++ b/tests/test-hgweb.t
@@ -340,7 +340,7 @@
$ get-with-headers.py --twice localhost:$HGPORT 'static/style-gitweb.css' - date etag server
200 Script output follows
- content-length: 9007
+ content-length: 9066
content-type: text/css
body { font-family: sans-serif; font-size: 12px; border:solid #d9d8d1; border-width:1px; margin:10px; background: white; color: black; }
@@ -442,6 +442,12 @@
}
div.annotate-info a { color: #0000FF; text-decoration: underline; }
td.annotate:hover div.annotate-info { display: inline; }
+
+ #diffopts-form {
+ padding-left: 8px;
+ display: none;
+ }
+
.linenr { color:#999999; text-decoration:none }
div.rss_logo { float: right; white-space: nowrap; }
div.rss_logo a {
diff --git a/mercurial/templates/static/style-paper.css b/mercurial/templates/static/style-paper.css
--- a/mercurial/templates/static/style-paper.css
+++ b/mercurial/templates/static/style-paper.css
@@ -226,6 +226,13 @@
div.annotate-info a { color: #0000FF; }
td.annotate:hover div.annotate-info { display: inline; }
+#diffopts-form {
+ font-size: smaller;
+ color: #424242;
+ padding-bottom: 10px;
+ display: none;
+}
+
.source, .sourcefirst {
font-family: monospace;
white-space: pre;
diff --git a/mercurial/templates/static/style-gitweb.css b/mercurial/templates/static/style-gitweb.css
--- a/mercurial/templates/static/style-gitweb.css
+++ b/mercurial/templates/static/style-gitweb.css
@@ -97,6 +97,12 @@
}
div.annotate-info a { color: #0000FF; text-decoration: underline; }
td.annotate:hover div.annotate-info { display: inline; }
+
+#diffopts-form {
+ padding-left: 8px;
+ display: none;
+}
+
.linenr { color:#999999; text-decoration:none }
div.rss_logo { float: right; white-space: nowrap; }
div.rss_logo a {
diff --git a/mercurial/templates/static/mercurial.js b/mercurial/templates/static/mercurial.js
--- a/mercurial/templates/static/mercurial.js
+++ b/mercurial/templates/static/mercurial.js
@@ -434,6 +434,56 @@
scrollHandler();
}
+function renderDiffOptsForm() {
+ // We use URLSearchParams for query string manipulation. Old browsers don't
+ // support this API.
+ if (!("URLSearchParams" in window)) {
+ return;
+ }
+
+ var form = document.getElementById("diffopts-form");
+
+ var KEYS = [
+ "ignorews",
+ "ignorewsamount",
+ "ignorewseol",
+ "ignoreblanklines",
+ ];
+
+ var urlParams = new URLSearchParams(window.location.search);
+
+ function updateAndRefresh(e) {
+ var checkbox = e.target;
+ var name = checkbox.id.substr(0, checkbox.id.indexOf("-"));
+ urlParams.set(name, checkbox.checked ? "1" : "0");
+ window.location.search = urlParams.toString();
+ }
+
+ var allChecked = form.getAttribute("data-ignorews") == "1";
+
+ for (var i = 0; i < KEYS.length; i++) {
+ var key = KEYS[i];
+
+ var checkbox = document.getElementById(key + "-checkbox");
+ if (!checkbox) {
+ continue;
+ }
+
+ currentValue = form.getAttribute("data-" + key);
+ checkbox.checked = currentValue != "0";
+
+ // ignorews implies ignorewsamount and ignorewseol.
+ if (allChecked && (key == "ignorewsamount" || key == "ignorewseol")) {
+ checkbox.checked = true;
+ checkbox.disabled = true;
+ }
+
+ checkbox.addEventListener("change", updateAndRefresh, false);
+ }
+
+ form.style.display = 'block';
+}
+
document.addEventListener('DOMContentLoaded', function() {
process_dates();
}, false);
diff --git a/mercurial/templates/paper/map b/mercurial/templates/paper/map
--- a/mercurial/templates/paper/map
+++ b/mercurial/templates/paper/map
@@ -251,3 +251,18 @@
</form>'
searchhint = 'Find changesets by keywords (author, files, the commit message), revision
number or hash, or <a href="{url|urlescape}help/revsets">revset expression</a>.'
+
+diffoptsform = '
+ <form id="diffopts-form"
+ data-ignorews="{if(get(diffopts, 'ignorews'), '1', '0')}"
+ data-ignorewsamount="{if(get(diffopts, 'ignorewsamount'), '1', '0')}"
+ data-ignorewseol="{if(get(diffopts, 'ignorewseol'), '1', '0')}"
+ data-ignoreblanklines="{if(get(diffopts, 'ignoreblanklines'), '1', '0')}">
+ <span>Ignore whitespace changes - </span>
+ <span>Everywhere:</span>
+ <input id="ignorews-checkbox" type="checkbox" />
+ <span>Within whitespace:</span>
+ <input id="ignorewsamount-checkbox" type="checkbox" />
+ <span>At end of lines:</span>
+ <input id="ignorewseol-checkbox" type="checkbox" />
+ </form>'
diff --git a/mercurial/templates/paper/fileannotate.tmpl b/mercurial/templates/paper/fileannotate.tmpl
--- a/mercurial/templates/paper/fileannotate.tmpl
+++ b/mercurial/templates/paper/fileannotate.tmpl
@@ -65,6 +65,12 @@
</tr>
</table>
+{diffoptsform}
+
+<script type="text/javascript"{if(nonce, ' nonce="{nonce}"')}>
+ renderDiffOptsForm();
+</script>
+
<div class="overflow">
<table class="bigtable">
<thead>
diff --git a/mercurial/templates/gitweb/map b/mercurial/templates/gitweb/map
--- a/mercurial/templates/gitweb/map
+++ b/mercurial/templates/gitweb/map
@@ -334,3 +334,19 @@
</div>'
searchhint = 'Find changesets by keywords (author, files, the commit message), revision
number or hash, or <a href="{url|urlescape}help/revsets">revset expression</a>.'
+
+diffoptsform = '
+ <form id="diffopts-form"
+ data-ignorews="{if(get(diffopts, 'ignorews'), '1', '0')}"
+ data-ignorewsamount="{if(get(diffopts, 'ignorewsamount'), '1', '0')}"
+ data-ignorewseol="{if(get(diffopts, 'ignorewseol'), '1', '0')}"
+ data-ignoreblanklines="{if(get(diffopts, 'ignoreblanklines'), '1', '0')}">
+ <span>Ignore whitespace changes - </span>
+ <span>Everywhere:</span>
+ <input id="ignorews-checkbox" type="checkbox" />
+ <span>Within whitespace:</span>
+ <input id="ignorewsamount-checkbox" type="checkbox" />
+ <span>At end of lines:</span>
+ <input id="ignorewseol-checkbox" type="checkbox" />
+ </form>
+ </div>'
diff --git a/mercurial/templates/gitweb/fileannotate.tmpl b/mercurial/templates/gitweb/fileannotate.tmpl
--- a/mercurial/templates/gitweb/fileannotate.tmpl
+++ b/mercurial/templates/gitweb/fileannotate.tmpl
@@ -62,6 +62,13 @@
</div>
<div class="page_path description">{desc|strip|escape|websub|nonempty}</div>
+
+{diffoptsform}
+
+<script type="text/javascript"{if(nonce, ' nonce="{nonce}"')}>
+ renderDiffOptsForm();
+</script>
+
<div class="page_body">
<table>
<tbody class="sourcelines"
diff --git a/mercurial/hgweb/webcommands.py b/mercurial/hgweb/webcommands.py
--- a/mercurial/hgweb/webcommands.py
+++ b/mercurial/hgweb/webcommands.py
@@ -930,14 +930,18 @@
"linenumber": "% 6d" % (lineno + 1),
"revdate": f.date()}
+ diffopts = webutil.difffeatureopts(req, web.repo.ui, 'annotate')
+ diffopts = {k: getattr(diffopts, k) for k in diffopts.defaults}
+
return tmpl("fileannotate",
file=f,
annotate=annotate,
path=webutil.up(f),
symrev=webutil.symrevorshortnode(req, fctx),
rename=webutil.renamelink(fctx),
permissions=fctx.manifest().flags(f),
ishead=int(ishead),
+ diffopts=diffopts,
**webutil.commonentry(web.repo, fctx))
@webcommand('filelog')
To: indygreg, #hg-reviewers, simpkins, durin42
Cc: simpkins, mercurial-devel
More information about the Mercurial-devel
mailing list