2022-11-30 13:15:01 -07:00

157 lines
4.8 KiB
JavaScript

// Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification
// for details on configuring this project to bundle and minify static web assets.
// Write your JavaScript code.
window.onload = (event) => {
initMultiselect();
};
function displayBusyIndicator() {
document.getElementById("LoadingDisplay").style.display = "block";
}
function initMultiselect() {
allCheckboxStatusCheck();
document.addEventListener("click", function (evt) {
var flyoutElement = document.getElementsByClassName("myMultiselect");
var yieldElement = document.getElementById("expandYield");
var targetElement = evt.target; // clicked element
var myMultiselect = false;
var clickedYield = false;
var count = 0;
if (flyoutElement.length != 0)
count = flyoutElement.length
else
count = 1
do {
for (let i = 0; i < count; i++) {
if (targetElement == flyoutElement[i] && flyoutElement.length > 0) {
myMultiselect = true;
break;
}
if (targetElement == yieldElement) {
clickedYield = true;
break;
}
}
if (myMultiselect || clickedYield)
break;
// Go up the DOM
targetElement = targetElement.parentNode;
} while (targetElement);
// This is a click outside
if (!myMultiselect) {
toggleCheckboxArea(true);
}
if (clickedYield)
expandYield();
});
}
function checkboxStatusChange() {
var parentNodeId = event.target.parentNode.parentNode.parentNode.parentNode.id;
var multiselect = document.getElementById(parentNodeId).getElementsByClassName("mySelectLabel")[0];
var multiselectOption = multiselect.getElementsByTagName('option')[0];
var values = [];
var checkboxes = document.getElementById(parentNodeId).getElementsByClassName("mySelectOptions")[0];
var checkedCheckboxes = checkboxes.querySelectorAll('input[type=checkbox]:checked');
for (const item of checkedCheckboxes) {
var checkboxValue = item.getAttribute('value');
values.push(checkboxValue);
}
var dropdownText = "Nothing is selected";
var dropdownValue = "Nothing is selected";
if (values.length > 0) {
dropdownText = values.join(', ');
dropdownValue = values.join(',');
}
multiselectOption.innerText = dropdownText;
multiselectOption.value = dropdownValue;
}
function allCheckboxStatusCheck() {
var multiselects = document.getElementsByClassName("myMultiselect");
for (let i = 0; i < multiselects.length; i++) {
var multiselectOption = multiselects[i].getElementsByTagName('option')[0];
var values = [];
var checkboxes = multiselects[i].getElementsByClassName("mySelectOptions")[0];
var checkedCheckboxes = checkboxes.querySelectorAll('input[type=checkbox]:checked');
for (const item of checkedCheckboxes) {
var checkboxValue = item.getAttribute('value');
values.push(checkboxValue);
}
var dropdownText = "Nothing is selected";
var dropdownValue = "Nothing is selected";
if (values.length > 0) {
dropdownText = values.join(', ');
dropdownValue = values.join(',');
}
multiselectOption.innerText = dropdownText;
multiselectOption.value = dropdownValue;
}
}
function clearList() {
var parentNodeId = event.target.parentNode.parentNode.id;
var checkboxes = document.getElementById(parentNodeId).getElementsByClassName("mySelectOptions")[0].getElementsByTagName("input");
for (let j = 0; j < checkboxes.length; j++) {
if (checkboxes[j].checked)
checkboxes[j].click();
}
}
function toggleCheckboxArea(onlyHide = false) {
var parentNodeId = "";
if (event.target.parentNode.parentNode.parentNode != null)
parentNodeId = event.target.parentNode.parentNode.parentNode.id;
if (parentNodeId != "") {
var checkboxes = document.getElementById(parentNodeId).getElementsByClassName("mySelectOptions")[0];
var displayValue = checkboxes.style.display;
}
if (displayValue != "block" && parentNodeId != "") {
if (onlyHide == false) {
checkboxes.style.display = "block";
}
} else {
var htmlElements = document.getElementsByClassName("mySelectOptions");
for (let j = 0; j < htmlElements.length; j++) {
htmlElements[j].style.display = "none";
}
}
}
function expandYield() {
var yieldDivs = document.getElementsByClassName("yield");
for (let i = 0; i < yieldDivs.length; i++) {
yieldDivs[i].classList.toggle("hidden");
}
}