summaryrefslogtreecommitdiff
path: root/src/fossil.page.brlist.js
diff options
context:
space:
mode:
authorcashmere <cashmere@autistici.org>2026-09-04 09:05:24 +0200
committercashmere <cashmere@autistici.org>2026-09-04 09:05:24 +0200
commit4f49b16079b27d7ce633619e4cddfdf2bffbc952 (patch)
treec296c1e7f3c3e2f6859c6d3a1b1b208779b89679 /src/fossil.page.brlist.js
downloadrelic-master.tar.gz
initial commitHEADmaster
Diffstat (limited to 'src/fossil.page.brlist.js')
-rw-r--r--src/fossil.page.brlist.js74
1 files changed, 74 insertions, 0 deletions
diff --git a/src/fossil.page.brlist.js b/src/fossil.page.brlist.js
new file mode 100644
index 0000000..f263145
--- /dev/null
+++ b/src/fossil.page.brlist.js
@@ -0,0 +1,74 @@
+/*
+ * This script adds multiselect facility for the list of branches.
+ *
+ * Some info on 'const':
+ * https://caniuse.com/const
+ * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const#browser_compatibility
+ *
+ * According to MDN 'const' requires Android's WebView 37,
+ * which may not be available.
+ * For the time being, continueing without 'const' and 'indexOf'
+ * (but that may be reconsidered later).
+*/
+window.addEventListener( 'load', function() {
+
+var submenu = document.querySelector("div.submenu");
+var anchor = document.createElement("A");
+var brlistDataObj = document.getElementById("brlist-data");
+var brlistDataTxt = brlistDataObj.textContent || brlistDataObj.innerText;
+var brlistData = JSON.parse(brlistDataTxt);
+anchor.classList.add("label");
+anchor.classList.add("timeline-link");
+anchor.href = brlistData.timelineUrl;
+var prefix = anchor.href.toString() + "?ms=brlist&t=";
+submenu.insertBefore(anchor,submenu.childNodes[0]);
+
+var amendAnchor = function( selected ){
+ if( selected.length == 0 ){
+ anchor.classList.remove('selected');
+ anchor.href = prefix;
+ return;
+ }
+ re = selected.join(",");
+ try{re = encodeURIComponent(re);}
+ catch{console.log("encodeURIComponent() failed for ",re);}
+ anchor.href = prefix + re;
+ anchor.innerHTML = "View " + selected.length +
+ ( selected.length > 1 ? " branches" : " branch" );
+ anchor.classList.add('selected');
+}
+
+var onChange = function( event ){
+ var cbx = event.target;
+ var tr = cbx.parentElement.parentElement;
+ var tag = cbx.parentElement.children[0].innerText;
+ var re = anchor.href.substr(prefix.length);
+ try{re = decodeURIComponent(re);}
+ catch{console.log("decodeURIComponent() failed for ",re);}
+ var selected = ( re != "" ? re.split(",") : [] );
+ if( cbx.checked ){
+ selected.push(tag);
+ tr.classList.add('selected');
+ }
+ else {
+ tr.classList.remove('selected');
+ for( var i = selected.length; --i >= 0 ;)
+ if( selected[i] == tag )
+ selected.splice(i,1);
+ }
+ amendAnchor( selected );
+}
+
+var stags = []; /* initially selected tags, not used above */
+document.querySelectorAll("div.brlist > table td:first-child > input")
+ .forEach( function( cbx ){
+ cbx.onchange = onChange;
+ cbx.disabled = false;
+ if( cbx.checked ){
+ stags.push(cbx.parentElement.children[0].innerText);
+ cbx.parentElement.parentElement.classList.add('selected');
+ }
+ });
+amendAnchor( stags );
+
+}); // window.addEventListener( 'load' ...