docserver/resources/sitehome_model/assets/js/utils.js
2023-08-14 23:33:21 +00:00

127 lines
5.0 KiB
JavaScript

let _trace_bin=[];
const utils = {
/* To avoid checking element and global css tasks handling
utils.css('toggle','main-header','',document,'h-10!')
utils.css('get','img','tag:3')
*/
css: (task, css_target, typ='object', root=document, css_name=['hidden'] ) => {
let target = typeof css_target == 'string' ? undefined : css_target;
let is_array = false;
const elem_toggle = (elem, css_class) => {
if (elem.classList) {
if (elem.classList.contains(css_class)) {
elem.classList.remove(css_class);
} else {
elem.classList.add(css_class);
}
}
}
let css_typ = typ;
if (task == 'get' && typ === 'object') { css_typ='id';}
let pos = -1;
if (css_typ.includes(':')) {
const arr_css = typ.split(':');
css_typ = arr_css[0];
pos = arr_css[1];
}
if (typeof target === 'undefined') {
switch(css_typ) {
case 'object':
case 'id':
target = document.getElementById(css_target);
break;
case 'class':
if (root.getElementsByClassName) {
is_array=true;
if (pos != -1) {
const class_targets = root.getElementsByClassName(css_target);
if (class_targets && class_targets[pos]) { target = class_targets[pos]; }
} else {
target = root.getElementsByClassName(css_target);
}
}
break;
case 'tag':
if (root.getElementsByClassName) {
is_array=true;
if (pos != -1) {
const tag_targets = root.getElementsByTagName(css_target);
if (tag_targets && tag_targets[pos]) { target = tag_targets[pos]; }
} else {
target = root.getElementsByTagName(css_target);
}
}
break;
default:
target = document.getElementById(css_target);
}
}
if (target) {
if (typeof target.classList == 'undefined') { is_array = true;}
switch (task) {
case 'get':
return target;
break;
case 'is_add':
case 'is_hide':
if (is_array) {
return target[0].classList && target[0].classList.contains(css_name) ? true : false;
} else {
return target.classList && target.classList.contains(css_name) ? true : false;
}
break;
case 'add':
case 'hide':
if (is_array) {
[...target].forEach(it => { if (it.classList) { it.classList.add(css_name);} });
} else {
if (target.classList) target.classList.add(css_name);
}
return target;
break;
case 'remove':
case 'show':
if (is_array) {
[...target].forEach(it => { if (it.classList) { it.classList.remove(css_name);} } );
} else {
if (target.classList) target.classList.remove(css_name);
}
return target;
break;
case 'is_show':
case 'is_show':
if (is_array) {
return target[0].classList && !target[0].classList.contains(css_name) ? true : false;
} else {
return target.classList && !target.classList.contains(css_name) ? true : false;
}
break;
case 'toggle':
if (is_array) {
[...target].forEach(it => elem_toggle(it, css_name));
} else {
elem_toggle(target, css_name);
}
return target;
default:
break;
}
}
return target;
},
update_session: async (data) => {
if (UPDATE_SESSION_URL) {
const response = await fetch(UPDATE_SESSION_URL, {
method: 'POST',
body: JSON.stringify(data),
headers: {
'Content-type': 'application/json; charset=UTF-8',
}
});
if (!response.ok && response.status != 200 ) {
throw new Error('Update session was not OK');
return false;
}
}
},
};