/*
* 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' ...