# LoadMask.js

    /**
     * @class Ext.LoadMask
     * A simple utility class for generically masking elements while loading data.  If the element being masked has
     * an underlying {@link Ext.data.Store}, the masking will be automatically synchronized with the store's loading
     * process and the mask element will be cached for reuse.  For all other elements, this mask will replace the
     * element's UpdateManager load indicator and will be destroyed after the initial load.
     * @constructor
     * Create a new LoadMask
     * @param {Object} config The config object
     */
    Ext.LoadMask = function(el, config){
        this.el = Ext.get(el);
        Ext.apply(this, config);
        if(this.store){
            this.store.on('beforeload', this.onBeforeLoad, this);
            this.store.on('load', this.onLoad, this);
            this.store.on('loadexception', this.onLoad, this);
            this.removeMask = false;
        }else{
            var um = this.el.getUpdateManager();
            um.showLoadIndicator = false; // disable the default indicator
            um.on('beforeupdate', this.onBeforeLoad, this);
            um.on('update', this.onLoad, this);
            um.on('failure', this.onLoad, this);
            this.removeMask = true;
        }
    };

    Ext.LoadMask.prototype = {
        /**
         * @cfg {Boolean} removeMask
         * True to create a single-use mask that is automatically destroyed after loading (useful for page loads),
         * False to persist the mask element reference for multiple uses (e.g., for paged data widgets).  Defaults to false.
         */
    // holder
    /***
         * @cfg {String} msg
         * The text to display in a centered loading message box (defaults to 'Loading...')
         */
        msg : 'Loading...',
        /**
         * @cfg {String} msgCls
         * The CSS class to apply to the loading message element (defaults to "x-mask-loading")
         */
        msgCls : 'x-mask-loading',

        /**
         * Read-only. True if the mask is currently disabled so that it will not be displayed (defaults to false)
         * @type Boolean
         */
        disabled: false,

        /**
         * Disables the mask to prevent it from being displayed
         */
        disable : function(){
           this.disabled = true;
        },

        /**
         * Enables the mask so that it can be displayed
         */
        enable : function(){
            this.disabled = false;
        },

        // private
        onLoad : function(){
            this.el.unmask(this.removeMask);
        },

        // private
        onBeforeLoad : function(){
            if(!this.disabled){
                this.el.mask(this.msg, this.msgCls);
            }
        },

        // private
        destroy : function(){
            if(this.store){
                this.store.un('beforeload', this.onBeforeLoad, this);
                this.store.un('load', this.onLoad, this);
                this.store.un('loadexception', this.onLoad, this);
            }else{
                var um = this.el.getUpdateManager();
                um.un('beforeupdate', this.onBeforeLoad, this);
                um.un('update', this.onLoad, this);
                um.un('failure', this.onLoad, this);
            }
        }
    };

Ext - Copyright © 2006-2007 Ext JS, LLC
All rights reserved.