Skip to content

Instantly share code, notes, and snippets.

@semiarthanoian
Created April 27, 2022 11:22
Show Gist options
  • Save semiarthanoian/f7a43f76e9ce3f18ac04ddcc1e629fe9 to your computer and use it in GitHub Desktop.
Save semiarthanoian/f7a43f76e9ce3f18ac04ddcc1e629fe9 to your computer and use it in GitHub Desktop.
/* Utility Functions */
const elementHasClass = function(element, theClass) {
return element.className.includes(theClass);
};
const elementAddsClass = function (element, theClass) {
var classArray = element.className.split(' ');
var newClassArray = classArray.concat(theClass);
element.className = newClassArray.join(' ');
};
const elementRemovesClass = function(element, theClass) {
var classArray = element.className.split(' ');
var newClassArray = classArray.filter((oneClass) => (oneClass != theClass));
element.className = newClassArray.join(' ');
};
const elementTogglesClass = function(element, theClass) {
if (elementHasClass(element, theClass))
elementRemovesClass(element, theClass);
else
elementAddsClass(element, theClass);
};
/* Subsequent Tasks */
const findTheList = function(event) {
var theButton = event.target;
var theList = theButton.nextElementSibling;
// ---
return theList
};
const findOtherShownLists = function(event) {
var theList = findTheList(event);
// ---
var allShownLists = document.querySelectorAll('.dropdown-list.shown');
var allShownListArray = Array.from(allShownLists);
var otherShownListArray = allShownListArray.filter((oneList) => (oneList != theList));
// ---
return otherShownListArray
};
const toggleVisibility = function(arrayOfList) {
// ---
var toggleVisibilityClasses = function(oneList) {
elementTogglesClass(oneList, 'shown');
elementTogglesClass(oneList, 'hidden');
};
// ---
arrayOfList.forEach((oneList) => toggleVisibilityClasses(oneList));
};
/* Event Listeners */
const toggleTheList = function(event) {
var theList = findTheList(event);
toggleVisibility( [theList] );
};
const hideOtherShownLists = function(event) {
var otherShownListArray = findOtherShownLists(event);
toggleVisibility(otherShownListArray);
};
/* Binding Lísteners */
const buttonList = document.getElementsByClassName('dropdown-button');
const buttonArray = Array.from(buttonList);
const bindListeners = function(button) {
button.addEventListener('click', toggleTheList);
button.addEventListener('click', hideOtherShownLists);
};
buttonArray.forEach(bindListeners);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment