function imLoaded(){ var filterGroups; var checkboxes; var i, j; // set up callbacks for all of the checkboxes, only checkboxes in // "filterSet" DIVs are considered. This is probably too obsessive. filterGroups = document.querySelectorAll("div.filterSet"); for(i = 0; i < filterGroups.length; i++){ checkboxes = filterGroups[i].querySelectorAll("input[type='checkbox']"); for(j = 0; j < checkboxes.length; j++){ checkboxes[j].addEventListener("change", filterTable); } } var button_clear = document.getElementById("button_clear"); button_clear.addEventListener("click", doUncheckAll); var button_default = document.getElementById("button_default"); button_default.addEventListener("click", doDefaultChecked); var button_default = document.getElementById("button_linux"); button_linux.addEventListener("click", doLinuxChecked); var button_windows = document.getElementById("button_windows"); button_windows.addEventListener("click", doWindowsChecked); // do this to report the number of rows filterTable(); } function doUncheckAll(){ doCheckBoxes("uncheck"); filterTable(); } function doDefaultChecked(){ doCheckBoxes("def_checked"); filterTable(); } function doLinuxChecked(){ doCheckBoxes("linux"); filterTable(); } function doWindowsChecked(){ doCheckBoxes("windows"); filterTable(); } function doCheckBoxes(x){ var filterGroups; var checkboxes; var i, j; // set up callbacks for all of the checkboxes, only checkboxes in // "filterSet" DIVs are considered. This is probably too obsessive. filterGroups = document.querySelectorAll("div.filterSet"); for(i = 0; i < filterGroups.length; i++){ checkboxes = filterGroups[i].querySelectorAll("input[type='checkbox']"); for(j = 0; j < checkboxes.length; j++){ switch(x){ case "uncheck": checkboxes[j].checked=false; break; case "def_checked": if(checkboxes[j].hasAttribute("checked")){ checkboxes[j].checked = true; } else { checkboxes[j].checked = false; } break; case "linux": if( checkboxes[j].hasAttribute("data-checked-linux") || checkboxes[j].hasAttribute("data-newish") || checkboxes[j].hasAttribute("data-common-default") ){ checkboxes[j].checked = true; } else { checkboxes[j].checked = false; } break; case "windows": if( checkboxes[j].hasAttribute("data-checked-windows") || checkboxes[j].hasAttribute("data-newish") || checkboxes[j].hasAttribute("data-common-default") ){ checkboxes[j].checked = true; } else { checkboxes[j].checked = false; } break; } } } } // this function hides rows that should not be shown function filterTable(){ var filters = []; // boolean reported if any checkbox is checked var oneIsChecked = false; // the table listing qualified downloads var tt = document.getElementById("theTable"); var filterGroups = document.querySelectorAll("div.filterSet"); for(var i = 0; i < filterGroups.length; i++) { checkboxes = filterGroups[i].querySelectorAll("input[type='checkbox']"); var checkedCheckboxes = filterGroups[i].querySelectorAll(":checked"); if(checkedCheckboxes.length == 0){ continue; } oneIsChecked = true; for( var j = 0; j < checkboxes.length; j++){ if(! checkboxes[j].checked){ filters.push(checkboxes[j].getAttribute("name")); } } } var e; var cssRule = ""; var selector = ""; if(oneIsChecked){ e = document.createElement("style"); e.setAttribute("id", "filterStyle"); for(var i = 0; i < filters.length; i++){ cssRule += "." + filters[i] + ", "; } cssRule = cssRule.slice(0, -2); selector = cssRule; cssRule += " { display: none; }\n"; } var e_old = document.getElementById("filterStyle"); if(e_old !== null){ e_old.remove(); } var rowCount = tt.rows.length; if(oneIsChecked){ document.head.appendChild(e); e.sheet.insertRule(cssRule,0); rowCount -= tt.querySelectorAll(selector).length; } var rowCountSpan = document.getElementById("reportRowCount"); rowCountSpan.textContent = "(found " + rowCount + " items)"; } document.addEventListener("DOMContentLoaded", imLoaded);