260 lines
9.3 KiB
JavaScript
Executable File
260 lines
9.3 KiB
JavaScript
Executable File
const urlParams = new URLSearchParams(window.location.search);
|
|
const start_filter = urlParams.get('filter');
|
|
const input = document.getElementById("bug_filter_input");
|
|
var buglist_cache = []
|
|
input.value = start_filter;
|
|
|
|
function sleepms(ms) {
|
|
return new Promise(resolve => setTimeout(resolve, ms));
|
|
}
|
|
function populate_buglist_cache()
|
|
{
|
|
buglist_cache = [];
|
|
var users = document.getElementsByClassName("user");
|
|
for (var i = 0; i < users.length; i++)
|
|
{
|
|
entry = {
|
|
"elem": users[i],
|
|
"user": users[i].querySelector("#user"),
|
|
"email": users[i].querySelector("#email"),
|
|
"branches": []
|
|
};
|
|
var user = entry["user"].textContent;
|
|
var email = entry["email"].title;
|
|
var branches = users[i].getElementsByClassName("branch");
|
|
for (var ii = 0; ii < branches.length; ii++)
|
|
{
|
|
var buglines = branches[ii].getElementsByClassName("bugline");
|
|
var branch =
|
|
{
|
|
"elem": branches[ii],
|
|
"branch": branches[ii].querySelector("#branch")
|
|
};
|
|
var bugs = [];
|
|
for(var iii = 0; iii < buglines.length; iii++)
|
|
{
|
|
bugs.push(
|
|
{
|
|
"bugline": buglines[iii],
|
|
"date": buglines[iii].querySelector("#date"),
|
|
"status": buglines[iii].querySelector("#status"),
|
|
"cl": buglines[iii].querySelector("#cl"),
|
|
"bug": buglines[iii].querySelector("#bug"),
|
|
"sum": buglines[iii].querySelector("#sum")
|
|
});
|
|
var date = bugs[iii]["date"].textContent;
|
|
var status = bugs[iii]["status"].title;
|
|
var cl = bugs[iii]["cl"].title;
|
|
var bug = bugs[iii]["bug"].title;
|
|
var sum = bugs[iii]["sum"].textContent;
|
|
var br = branch["branch"].textContent;
|
|
bugs[iii]["txtValue"] = br + " " + user + " " + email + " " + date + " " + status + " " + cl + " " + bug + " " + sum;
|
|
bugs[iii]["txtValue"] = bugs[iii]["txtValue"].toUpperCase();
|
|
}
|
|
branch["bugs"] = bugs;
|
|
entry["branches"].push(branch);
|
|
}
|
|
buglist_cache.push(entry);
|
|
}
|
|
}
|
|
populate_buglist_cache();
|
|
var filtering = false
|
|
function filter_bugs(force) {
|
|
if (input.value) {
|
|
insertUrlParam("filter", input.value);
|
|
}
|
|
else {
|
|
removeUrlParam("filter");
|
|
}
|
|
if (filtering && !force)
|
|
{
|
|
return;
|
|
}
|
|
var filter = input.value;
|
|
var filters = [];
|
|
if(filter)
|
|
{
|
|
filters = filter.split(" OR ");
|
|
filters.forEach((elem, i) => { filters[i] = elem.split(" AND "); });
|
|
filters.forEach((_, i) => {
|
|
filters[i].forEach((elem, ii) => { filters[i][ii] = elem.toUpperCase(); });
|
|
});
|
|
}
|
|
const apply_filter = async () =>
|
|
{
|
|
var users = buglist_cache;
|
|
for(var i = 0; i < users.length; i++)
|
|
{
|
|
var branches = users[i]["branches"];
|
|
var filtered_branches = [];
|
|
for(var ii = 0; ii < branches.length; ii++)
|
|
{
|
|
var bugs = branches[ii]["bugs"];
|
|
var filtered_bugs = [];
|
|
for (var iii = 0; iii < bugs.length; iii++)
|
|
{
|
|
var all_found = true;
|
|
if(filters)
|
|
{
|
|
var txtValue = bugs[iii]["txtValue"];
|
|
for(var s1 = 0; s1 < filters.length; s1++)
|
|
{
|
|
all_found = true;
|
|
for(var s2 = 0; s2 < filters[s1].length; s2++)
|
|
{
|
|
if (!txtValue.includes(filters[s1][s2]))
|
|
{
|
|
all_found = false;
|
|
break;
|
|
}
|
|
}
|
|
if(all_found)
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (all_found)
|
|
{
|
|
bugs[iii]["bugline"].style.display = "";
|
|
}
|
|
else
|
|
{
|
|
filtered_bugs.push(bugs[iii]["bugline"]);
|
|
}
|
|
}
|
|
if (filtered_bugs.length != bugs.length)
|
|
{
|
|
filtered_bugs.forEach(bug => bug.style.display = "none");
|
|
branches[ii]["elem"].style.display = "";
|
|
}
|
|
else
|
|
{
|
|
filtered_branches.push(branches[ii]["elem"]);
|
|
}
|
|
}
|
|
if(filtered_branches.length != branches.length)
|
|
{
|
|
filtered_branches.forEach(branch => branch.style.display = "none");
|
|
users[i]["elem"].style.display = "";
|
|
}
|
|
else
|
|
{
|
|
users[i]["elem"].style.display = "none";
|
|
}
|
|
if(filter != input.value && !force)
|
|
{
|
|
return;
|
|
}
|
|
// Use this in cases where machines are slower.
|
|
// if (!force)
|
|
// {
|
|
// await sleepms(1);
|
|
// }
|
|
}
|
|
}
|
|
filtering = true;
|
|
while(true)
|
|
{
|
|
apply_filter();
|
|
if(filter == input.value)
|
|
{
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
filter = input.value;
|
|
}
|
|
}
|
|
filtering = false;
|
|
}
|
|
function removeUrlParam(key) {
|
|
if (history.pushState) {
|
|
let searchParams = new URLSearchParams(window.location.search);
|
|
searchParams.delete(key);
|
|
let newurl = window.location.protocol + "//" + window.location.host + window.location.pathname + '?' + searchParams.toString();
|
|
window.history.pushState({path: newurl}, '', newurl);
|
|
}
|
|
}
|
|
function insertUrlParam(key, value) {
|
|
if (history.pushState) {
|
|
let searchParams = new URLSearchParams(window.location.search);
|
|
searchParams.set(key, value);
|
|
let newurl = window.location.protocol + "//" + window.location.host + window.location.pathname + '?' + searchParams.toString();
|
|
window.history.pushState({path: newurl}, '', newurl);
|
|
}
|
|
}
|
|
window.onload = function(e)
|
|
{
|
|
var date = document.getElementById("start_date");
|
|
var calendar = document.getElementById("gotodate");
|
|
calendar.value = date.textContent;
|
|
};
|
|
var show_owners = true;
|
|
function update_elements()
|
|
{
|
|
(async () => {
|
|
var response = await fetch(window.location.pathname + window.location.search + window.location.hash);
|
|
switch (response.status) {
|
|
// status "OK"
|
|
case 200:
|
|
var template = await response.text();
|
|
var doc = new DOMParser().parseFromString(template, "text/html");
|
|
var newelem = doc.getElementById("buglist");
|
|
var oldelem = document.getElementById("buglist");
|
|
oldelem.innerHTML = newelem.innerHTML;
|
|
newelem = doc.getElementById("changeinfo");
|
|
oldelem = document.getElementById("changeinfo");
|
|
oldelem.innerHTML = newelem.innerHTML;
|
|
var date = doc.getElementById("start_date");
|
|
var calendar = document.getElementById("gotodate");
|
|
calendar.value = date.textContent;
|
|
populate_buglist_cache();
|
|
filter_bugs(true);
|
|
if(!show_owners) { only_bugs(); }
|
|
console.log("bugs updated");
|
|
break;
|
|
case 404:
|
|
break;
|
|
}
|
|
})();
|
|
}
|
|
setInterval(update_elements, 60000);
|
|
document.addEventListener("DOMContentLoaded", function(event) {
|
|
var scrollpos = sessionStorage.getItem('scrollpos');
|
|
if (scrollpos) window.scrollTo(0, scrollpos);
|
|
sessionStorage.removeItem("scrollpos");
|
|
});
|
|
|
|
window.onbeforeunload = function(e) {
|
|
sessionStorage.setItem('scrollpos', window.scrollY);
|
|
};
|
|
filter_bugs(true);
|
|
function only_bugs() {
|
|
var userline = document.getElementsByClassName("user");
|
|
var branch = document.getElementsByClassName("branch");
|
|
var changeinfo = document.getElementById("changeinfo");
|
|
changeinfo.style.display = "none";
|
|
for (var i = 0; i < userline.length; i++) {
|
|
userline[i].querySelector("#user").style.display = "none";
|
|
}
|
|
for (var i = 0; i < branch.length; i++) {
|
|
branch[i].querySelector("#branch").style.display = "none";
|
|
}
|
|
var rules = document.getElementsByTagName("hr");
|
|
for (var i = 0; i < rules.length; i++) {
|
|
rules[i].style.display = "none";
|
|
}
|
|
var uls = document.getElementsByTagName("ul");
|
|
for (var i = 0; i < uls.length; i++) {
|
|
uls[i].style.margin = 0;
|
|
}
|
|
}
|
|
function gotodate(e)
|
|
{
|
|
let searchParams = new URLSearchParams(window.location.search);
|
|
date = e.target.value.split("-")
|
|
url = "stickbug-" + date[2] + date[1] + date[0] + ".html" + '?' + searchParams.toString();
|
|
window.location.href = url;
|
|
}
|