All Downloads are FREE. Search and download functionalities are using the official Maven repository.

META-INF.resources.butterfaces-ts.butterfaces-waitingpanel.jquery.ts Maven / Gradle / Ivy

The newest version!
///
///

namespace ButterFaces {
    export class WaitingPanel {
        overlay: ButterFaces.Overlay;

        constructor(overlay: ButterFaces.Overlay) {
            this.overlay = overlay;
        }

        public processAjaxUpdate() {
            let ajaxRequestsRunning = 0;

            return ({status}) => {
                console.log("ButterFaces.WaitingPanel.onEvent - processEvent: " + status);
                if (status === "begin") {
                    ajaxRequestsRunning++;
                } else if (status === "success") {
                    ajaxRequestsRunning--;
                }
                if (ajaxRequestsRunning > 0) {
                    console.log("ButterFaces.WaitingPanel.onEvent  - show " + ajaxRequestsRunning);
                    this.overlay.show();
                } else {
                    console.log("ButterFaces.WaitingPanel.onEvent  - hide " + ajaxRequestsRunning);
                    this.overlay.hide();
                }
            };
        }

        public processOnError(data: jsf.ajax.RequestData) {
            if (data) {
                console.error("ButterFaces.WaitingPanel.onError  - An error occured, closing waiting panel. errorType: " + data.status + ", description: " + data.description);
                ButterFaces.Overlay.hideAll();
            }
        }
    }
}

(function ($: any) {
    // extend jQuery --------------------------------------------------------------------
    let eventRegistered = false;
    let overlay: ButterFaces.Overlay;

    $.fn.waitingPanel = function ({waitingPanelDelay, blockpage}) {

        return this.each(function () {
            // I found no way to remove event listener from jsf js.
            // I tried to register a callback once and change it on render waiting panel but after this
            // no waiting panel appears anymore.
            // Actually on each rendering of this component a new callback is put on event listener collection.
            if (!eventRegistered) {
                // console.log("waitingPanel - register: " + _elementId);
                overlay = new ButterFaces.Overlay(waitingPanelDelay, blockpage);
                let waitingPanel = new ButterFaces.WaitingPanel(overlay);
                jsf.ajax.addOnEvent(waitingPanel.processAjaxUpdate());
                jsf.ajax.addOnError(waitingPanel.processOnError);
                eventRegistered = true;
            }

            overlay.delay = waitingPanelDelay;
            overlay.isTransparentBlockingOverlayActive = blockpage;
        });

    };
}(jQuery));




© 2015 - 2025 Weber Informatics LLC | Privacy Policy