138 lines
4.8 KiB
JavaScript
138 lines
4.8 KiB
JavaScript
|
|
import Validation from "./lib/validation.js";
|
|
|
|
// Module for DOM manipulation
|
|
export default class DOM {
|
|
static setElementValueCurrent(element, data) {
|
|
element.setAttribute(attrValueCurrent, data);
|
|
if (element.type === "checkbox") {
|
|
element.checked = data;
|
|
}
|
|
else if (element.tagName === 'INPUT' || element.tagName === 'TEXTAREA' || element.tagName === 'SELECT') {
|
|
element.value = data;
|
|
}
|
|
else {
|
|
element.textContent = data;
|
|
}
|
|
}
|
|
static setElementValuePrevious(element, data) {
|
|
element.setAttribute(attrValuePrevious, data);
|
|
}
|
|
static getCellFromElement(element) {
|
|
return element.closest('td');
|
|
}
|
|
static getRowFromElement(element) {
|
|
return element.closest('tr');
|
|
}
|
|
static convertForm2JSON(elementForm) {
|
|
let dataForm = {};
|
|
if (Validation.isEmpty(elementForm)) {
|
|
console.log("empty form element");
|
|
return dataForm;
|
|
}
|
|
let containersFilter = elementForm.querySelectorAll('.' + flagContainerInput + '.' + flagFilter);
|
|
console.log("containersFilter: " + containersFilter);
|
|
let containerFilter, labelFilter, keyFilter, filter;
|
|
for (let indexFilter = 0; indexFilter < containersFilter.length; indexFilter++) {
|
|
containerFilter = containersFilter[indexFilter];
|
|
labelFilter = containerFilter.querySelector('label');
|
|
keyFilter = labelFilter.getAttribute('for');
|
|
filter = containerFilter.querySelector(`#${keyFilter}`);
|
|
dataForm[keyFilter] = DOM.getElementValueCurrent(filter);
|
|
}
|
|
return dataForm;
|
|
}
|
|
static loadPageBody(contentNew) {
|
|
let pageBody = document.querySelector(idPageBody);
|
|
pageBody.innerHTML = contentNew;
|
|
}
|
|
static getHashPageCurrent() {
|
|
const hashPageCurrent = document.body.dataset.page;
|
|
console.log("hashPageCurrent: " + hashPageCurrent);
|
|
return hashPageCurrent;
|
|
}
|
|
static isElementDirty(element) {
|
|
element.setAttribute(attrValueCurrent, DOM.getElementValueCurrent(element));
|
|
let isDirty = element.getAttribute(attrValuePrevious) != element.getAttribute(attrValueCurrent);
|
|
DOM.handleDirtyElement(element, isDirty);
|
|
return isDirty;
|
|
}
|
|
static handleDirtyElement(element, isDirty) {
|
|
if (isDirty) {
|
|
element.classList.add(flagDirty);
|
|
} else {
|
|
element.classList.remove(flagDirty);
|
|
}
|
|
}
|
|
static getElementValueCurrent(element) {
|
|
let returnVal = '';
|
|
|
|
if (!Validation.isEmpty(element)) {
|
|
|
|
if (element.type === "checkbox") {
|
|
returnVal = element.checked;
|
|
}
|
|
/*
|
|
else if (element.classList.contains(flagIsDatePicker)) {
|
|
returnVal = getDatePickerDate(element, adjust4DayLightSavings);
|
|
}
|
|
*/
|
|
else if (element.tagName === 'INPUT' || element.tagName === 'TEXTAREA' || element.tagName === 'SELECT') {
|
|
returnVal = element.value;
|
|
}
|
|
else {
|
|
returnVal = element.textContent;
|
|
}
|
|
}
|
|
|
|
if (Validation.isEmpty(returnVal)) returnVal = '';
|
|
|
|
return returnVal;
|
|
}
|
|
static isTableElementDirty(element) {
|
|
let isDirty = DOM.isElementDirty(element);
|
|
let cell = DOM.getCellFromElement(element);
|
|
if (isDirty) {
|
|
cell.classList.add(flagDirty);
|
|
} else {
|
|
cell.classList.remove(flagDirty);
|
|
}
|
|
}
|
|
|
|
/*
|
|
static updateElement(id, data) {
|
|
const element = document.getElementById(id);
|
|
if (element) {
|
|
element.textContent = data;
|
|
}
|
|
}
|
|
*/
|
|
/* non-static method on page object to use
|
|
static handleChangeElement(element) {}
|
|
*/
|
|
scrollToElement(parent, element) {
|
|
// REQUIRED: parent has scroll-bar
|
|
parent.scrollTop(parent.scrollTop() + (element.offset().top - parent.offset().top));
|
|
}
|
|
isElementInContainer(container, element) {
|
|
|
|
if (typeof jQuery === 'function') {
|
|
if (container instanceof jQuery) container = container[0];
|
|
if (element instanceof jQuery) element = element[0];
|
|
}
|
|
|
|
var containerBounds = container.getBoundingClientRect();
|
|
var elementBounds = element.getBoundingClientRect();
|
|
|
|
return (
|
|
containerBounds.top <= elementBounds.top &&
|
|
containerBounds.left <= elementBounds.left &&
|
|
((elementBounds.top + elementBounds.height) <= (containerBounds.top + containerBounds.height)) &&
|
|
((elementBounds.left + elementBounds.width) <= (containerBounds.left + containerBounds.width))
|
|
);
|
|
}
|
|
alertError(errorType, errorText) {
|
|
alert(errorType + '\n' + errorText);
|
|
}
|
|
}
|