You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

101 lines
2.8 KiB

/**
*
* @param {Object | Array<Object>} singleOrArray
* @param {Function} fun
* @returns {Object | Array<Object>}
*/
function onSingleOrArray(singleOrArray, fun) {
if (singleOrArray instanceof Array) {
return singleOrArray.map(fun);
}
return fun(singleOrArray);
}
/**
*
*/
const helperFun = {
/**
* Iterates over the keys of attrs,
* extracts the corresponding value
* and applies the callback (cb) on it in the order (key, value, targetContainer)
* @extends StyleAndScriptStoringComponent
* @param {map<string,any>} attrs
* @param {Object} intoContainer
* @param {Function<string, any, Object>} cb
* @returns {Object} the filled container
*/
fillAttrsInContainerByCb: function (attrs, intoContainer, cb) {
let keys = Object.keys(attrs);
for (let i = 0; i < keys.length; i++) {
cb(keys[i], attrs[keys[i]], intoContainer);
}
return intoContainer;
},
/**
*
* @param {HTMLElement} element
* @returns {string}
*/
getHigherCompSelector: function (element) {
let dac = "data-autocompel";
let hcompel = element.closest('[data-compel-ishcompel="true"]');
return `[${dac}="${hcompel.getAttribute(dac)}"]`;
},
/**
*
* @param {string} selector
* @returns {boolean} [ensureHidden=false] for true element is now hidden and false it is not hidden.
*/
toggleSelectorElementVisibility: function (selector, ensureHidden = false) {
/**
* @type {HTMLElement}
*/
let el = document.querySelector(selector);
let name = el.getAttribute("data-autocompel");
console.log("De-/hiding", name, selector);
return helperFun.toggleElementVisibility(el, ensureHidden);
},
/**
* (De-) hides the given element.
* On ensureHidden=true it will be hidden regardless of the current state.
*
* @param {HTMLElement} element
* @param {boolean} ensureHidden
* @returns {boolean}
*/
toggleElementVisibility: function (element, ensureHidden = false) {
element.classList.toggle("compel-mech-hidden");
let isNowHidden = false;
if (element.hasAttribute("hidden")) {
element.removeAttribute("hidden");
element.style["display"] = "flex";
isNowHidden = false;
} else {
element.setAttribute("hidden", "hidden");
element.style.removeProperty("display");
isNowHidden = true;
}
if (ensureHidden && !isNowHidden) {
return helperFun.toggleSelectorElementVisibility(selector)
} else {
return isNowHidden;
}
},
/**
* Contains helperFun functions from the installed/loaded extensions
* (jpclwe-<extension-name>)
*/
extensions: {}
}