PHP Classes

File: modules/system/assets/js/snowboard/extras/AttachLoading.js

Recommend this page to a friend!
  Packages of Luke Towers   Winter   modules/system/assets/js/snowboard/extras/AttachLoading.js   Download  
File: modules/system/assets/js/snowboard/extras/AttachLoading.js
Role: Auxiliary data
Content type: text/plain
Description: Auxiliary data
Class: Winter
Content management system that uses MVC
Author: By
Last change:
Date: 8 months ago
Size: 2,041 bytes
 

Contents

Class file image Download
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'; } }