Viewing File: /usr/local/cpanel/base/webmail/jupiter/_assets/disk_usage_meter.js

/*
# cpanel - base/webmail/jupiter/_assets/disk_usage_meter.js
#                                                  Copyright 2022 cPanel, L.L.C.
#                                                           All rights reserved.
# copyright@cpanel.net                                         http://cpanel.net
# This code is subject to the cPanel license. Unauthorized copying is prohibited
*/

/* global CPANEL: false */

/* jshint -W064 */

/*
 * Both of the following classes expose the same methods:
 *
 * @class Disk_Usage_Meter_Cpuser
 *
 *     //The parameter is a DOM element that will contain the disk usage.
 *     var du_meter = new Disk_Usage_Meter_Cpuser(usage_el);
 *
 *     //Sets the disk usage immediately.
 *     du_meter.set( usage_in_bytes );
 *
 *     //Fires off an AJAX request to fetch the disk usage;
 *     //sets the disk usage once the API call returns.
 *     du_meter.refresh();
 *
 * @class Disk_Usage_Meter_Mailuser
 *
 *     //For a mail user that has no quota.
 *     var du_meter = new Disk_Usage_Meter_Mailuser(usage_el);
 *
 *     //or …
 *
 *     //For a mail user with a quota.
 *     //
 *     //“link_el” is a DOM element that will
 *     //receive the disk usage percentage as a two-character integer in the
 *     //“data-quotausage” attribute. (i.e., 0-9 will have a leading “0”)
 *     //
 *     //It is assumed that the user’s quota will not change over the lifetime
 *     //of this object; adding an interface to change that would be trivial.
 *     //
 *     var du_meter = new Disk_Usage_Meter_Mailuser(usage_el, link_el, quota_in_bytes);
 *
 */
(function(window) {
    "use strict";

    function Disk_Usage_Meter_Base(el) {
        this._el = el;
    }

    $.extend(
        Disk_Usage_Meter_Base.prototype,
        {
            _get_refresher: function _get_refresher() {
                var dum_obj = this;

                // TODO: Update this to whatever new, post-CJT1 hotness we
                // concoct for API access without AngularJS.
                return CPANEL.api( {
                    version: 3,
                    module: this.MODULE,
                    func: this.FUNC,
                    callback: {
                        success: function(o) {
                            delete dum_obj._refreshing;

                            var usage = parseInt( dum_obj._get_usage(o.cpanel_data), 10 );
                            dum_obj.set(usage);

                        },
                        failure: function(o) {
                            delete dum_obj._refreshing;
                            console.error(o);
                        },
                    },
                } );
            },

            refresh: function refresh() {
                if (this._refreshing) {
                    return false;
                }

                this._refreshing = this._get_refresher();

                return true;
            },

            set: function set(usage) {
                this._el.textContent = LOCALE.format_bytes(usage);

                if (this._after_set) {
                    this._after_set(usage);
                }
            },
        }
    );

    function Disk_Usage_Meter_Cpuser(el) {
        Disk_Usage_Meter_Base.call(this, el);
    }
    Disk_Usage_Meter_Cpuser.prototype = Object.create(
        Disk_Usage_Meter_Base.prototype
    );
    $.extend(
        Disk_Usage_Meter_Cpuser.prototype,
        {
            MODULE: "Email",
            FUNC: "get_main_account_disk_usage_bytes",
            _get_usage: String,
        }
    );

    function Disk_Usage_Meter_Mailuser(el, usage_data_el, quota) {
        Disk_Usage_Meter_Base.call(this, el);
        this._usage_data_el = usage_data_el;
        this._quota = quota;
    }
    Disk_Usage_Meter_Mailuser.prototype = Object.create(
        Disk_Usage_Meter_Base.prototype
    );
    $.extend(
        Disk_Usage_Meter_Mailuser.prototype,
        {
            MODULE: "Email",
            FUNC: "list_pops_with_disk",
            _get_usage: function(cpanel_data) {
                return cpanel_data[0]._diskused;
            },

            _after_set: function(usage) {
                if (this._quota) {
                    var usage_pct = Math.min( 99, Math.floor(100 * usage / this._quota) );

                    if (String(usage_pct).length === 1) {
                        usage_pct = "0" + usage_pct;
                    }

                    this._usage_data_el.setAttribute("data-quotausage", usage_pct);
                }
            },
        }
    );

    window.Disk_Usage_Meter_Cpuser = Disk_Usage_Meter_Cpuser;
    window.Disk_Usage_Meter_Mailuser = Disk_Usage_Meter_Mailuser;
})(window);
Back to Directory File Manager