Some checks are pending
Module sub-split / Sub-split (push) Waiting to run
- Base: wintercms/winter branch 1.2 (full framework) - Theme vivespos: Canvas 7 + Bootstrap 5 CDN, custom CSS - Layout: deferred GTM/GA4 tracking, JSON-LD SoftwareApplication - Partials: hero (offline-first), features, modes (offline/nube toggle), screenshots, pricing (3 planes), comparison, FAQ, CTA - Plugin VivesPOS.Site with ContactForm - Dockerfile: PHP 8.2 Apache, port 80, healthcheck - Added winter/wn-pages, blog, sitemap, seo plugins - Active theme set to vivespos
71 lines
2.0 KiB
JavaScript
71 lines
2.0 KiB
JavaScript
import Singleton from '../abstracts/Singleton';
|
|
|
|
/**
|
|
* Allows attaching a loading class on elements that an AJAX request is targeting.
|
|
*
|
|
* @copyright 2021 Winter.
|
|
* @author Ben Thomson <git@alfreido.com>
|
|
*/
|
|
export default class AttachLoading extends Singleton {
|
|
/**
|
|
* Defines dependenices.
|
|
*
|
|
* @returns {string[]}
|
|
*/
|
|
dependencies() {
|
|
return ['request'];
|
|
}
|
|
|
|
/**
|
|
* Defines listeners.
|
|
*
|
|
* @returns {Object}
|
|
*/
|
|
listens() {
|
|
return {
|
|
ajaxStart: 'ajaxStart',
|
|
ajaxDone: 'ajaxDone',
|
|
};
|
|
}
|
|
|
|
ajaxStart(promise, request) {
|
|
if (!request.element) {
|
|
return;
|
|
}
|
|
|
|
if (request.element.tagName === 'FORM') {
|
|
const loadElements = request.element.querySelectorAll('[data-attach-loading]');
|
|
if (loadElements.length > 0) {
|
|
loadElements.forEach((element) => {
|
|
element.classList.add(this.getLoadingClass(element));
|
|
});
|
|
}
|
|
} else if (request.element.dataset.attachLoading !== undefined) {
|
|
request.element.classList.add(this.getLoadingClass(request.element));
|
|
}
|
|
}
|
|
|
|
ajaxDone(data, request) {
|
|
if (!request.element) {
|
|
return;
|
|
}
|
|
|
|
if (request.element.tagName === 'FORM') {
|
|
const loadElements = request.element.querySelectorAll('[data-attach-loading]');
|
|
if (loadElements.length > 0) {
|
|
loadElements.forEach((element) => {
|
|
element.classList.remove(this.getLoadingClass(element));
|
|
});
|
|
}
|
|
} else if (request.element.dataset.attachLoading !== undefined) {
|
|
request.element.classList.remove(this.getLoadingClass(request.element));
|
|
}
|
|
}
|
|
|
|
getLoadingClass(element) {
|
|
return (element.dataset.attachLoading !== undefined && element.dataset.attachLoading !== '')
|
|
? element.dataset.attachLoading
|
|
: 'wn-loading';
|
|
}
|
|
}
|