0xV3NOMx
Linux ip-172-26-7-228 5.4.0-1103-aws #111~18.04.1-Ubuntu SMP Tue May 23 20:04:10 UTC 2023 x86_64



Your IP : 3.21.244.34


Current Path : /var/www/html/stph/js/
Upload File :
Current File : /var/www/html/stph/js/collinfo_popup.js

;(function($) {
    "use strict";

    /**
     * Remodal settings
     * @private
     */
    var pluginName = "remodal",
        defaults = {
            hashTracking: true,
           /*  closeOnConfirm: true,
             closeOnCancel: true,
           closeOnEscape: true,
            closeOnAnyClick: true */
        },

        // Current modal
        current,

        // Scroll position
        scrollTop;

    /**
     * Get a transition duration in ms
     * @param {jQuery} $elem
     * @return {Number}
     * @private
     */
    function getTransitionDuration($elem) {
        var duration = $elem.css("transition-duration") ||
                $elem.css("-webkit-transition-duration") ||
                $elem.css("-moz-transition-duration") ||
                $elem.css("-o-transition-duration") ||
                $elem.css("-ms-transition-duration") ||
                0,

            delay = $elem.css("transition-delay") ||
                $elem.css("-webkit-transition-delay") ||
                $elem.css("-moz-transition-delay") ||
                $elem.css("-o-transition-delay") ||
                $elem.css("-ms-transition-delay") ||
                0;

        return (parseFloat(duration) + parseFloat(delay)) * 1000;
    }

    /**
     * Get a scrollbar width
     * @return {Number}
     * @private
     */
    function getScrollbarWidth() {
        if ($(document.body).height() <= $(window).height()) {
            return 0;
        }

        var outer = document.createElement("div"),
            inner = document.createElement("div"),
            widthNoScroll,
            widthWithScroll;

        outer.style.visibility = "hidden";
        outer.style.width = "100px";
        document.body.appendChild(outer);

        widthNoScroll = outer.offsetWidth;

        // Force scrollbars
        outer.style.overflow = "scroll";

        // Add innerdiv
        inner.style.width = "100%";
        outer.appendChild(inner);

        widthWithScroll = inner.offsetWidth;

        // Remove divs
        outer.parentNode.removeChild(outer);

        return widthNoScroll - widthWithScroll;
    }

    /**
     * Lock screen
     * @private
     */
    function lockScreen() {
        var $body = $(document.body),

            // Zepto does not support '-=', '+=' in the `css` method
            paddingRight = parseInt($body.css("padding-right"), 10) + getScrollbarWidth();

        $body.css("padding-right", paddingRight + "px");
        $("html, body").addClass(pluginName + "_lock");
    }

    /**
     * Unlock screen
     * @private
     */
    function unlockScreen() {
        var $body = $(document.body),

            // Zepto does not support '-=', '+=' in the `css` method
            paddingRight = parseInt($body.css("padding-right"), 10) - getScrollbarWidth();

        $body.css("padding-right", paddingRight + "px");
        $("html, body").removeClass(pluginName + "_lock");
    }

    /**
     * Parse string with options
     * @param str
     * @returns {Object}
     * @private
     */
    function parseOptions(str) {
        var obj = {},
            arr, len, val, i;

        // Remove spaces before and after delimiters
        str = str.replace(/\s*:\s*/g, ":").replace(/\s*,\s*/g, ",");

        // Parse string
        arr = str.split(",");
        for (i = 0, len = arr.length; i < len; i++) {
            arr[i] = arr[i].split(":");
            val = arr[i][1];

            // Convert string value if it is like a boolean
            if (typeof val === "string" || val instanceof String) {
                val = val === "true" || (val === "false" ? false : val);
            }

            // Convert string value if it is like a number
            if (typeof val === "string" || val instanceof String) {
                val = !isNaN(val) ? +val : val;
            }

            obj[arr[i][0]] = val;
        }

        return obj;
    }

    /**
     * Remodal constructor
     * @param {jQuery} $modal
     * @param {Object} options
     * @constructor
     */
    function Remodal($modal, options) {
        var remodal = this,
            tdOverlay,
            tdModal,
            tdBg;

        remodal.settings = $.extend({}, defaults, options);

        // Build DOM
        remodal.$body = $(document.body);
        remodal.$bg = $("." + pluginName + "-bg");
        remodal.$closeButton = $("<a href='#'>").addClass(pluginName + "-close");
        remodal.$overlay = $("<div>").addClass(pluginName + "-overlay");
        remodal.$modal = $modal;
        remodal.$modal.addClass(pluginName);
        remodal.$modal.css("visibility", "visible");
        remodal.$modal.append(remodal.$closeButton);
        remodal.$overlay.append(remodal.$modal);
        remodal.$body.append(remodal.$overlay);
        remodal.$confirmButton = remodal.$modal.find("." + pluginName + "-confirm");
        remodal.$cancelButton = remodal.$modal.find("." + pluginName + "-cancel");

        // Calculate timeouts
        tdOverlay = getTransitionDuration(remodal.$overlay);
        tdModal = getTransitionDuration(remodal.$modal);
        tdBg = getTransitionDuration(remodal.$bg);
        remodal.td = tdModal > tdOverlay ? tdModal : tdOverlay;
        remodal.td = tdBg > remodal.td ? tdBg : remodal.td;

        // Add close button event listener
        remodal.$closeButton.bind("click." + pluginName, function(e) {
            e.preventDefault();

            remodal.close();
        });

        // Add cancel button event listener
        remodal.$cancelButton.bind("click." + pluginName, function(e) {
            e.preventDefault();

            remodal.$modal.trigger("cancel");

            if (remodal.settings.closeOnCancel) {
                remodal.close();
            }
        });

        // Add confirm button event listener
        remodal.$confirmButton.bind("click." + pluginName, function(e) {
            e.preventDefault();

            remodal.$modal.trigger("confirm");

            if (remodal.settings.closeOnConfirm) {
                remodal.close();
            }
        });

        // Add keyboard event listener
        $(document).bind("keyup." + pluginName, function(e) {
            if (e.keyCode === 27 && remodal.settings.closeOnEscape) {
                remodal.close();
            }
        });

        // Add overlay event listener
        remodal.$overlay.bind("click." + pluginName, function(e) {
            var $target = $(e.target);

            if (!$target.hasClass(pluginName + "-overlay")) {
                return;
            }

            if (remodal.settings.closeOnAnyClick) {
                remodal.close();
            }
        });

        remodal.index = $[pluginName].lookup.push(remodal) - 1;
        remodal.busy = false;
    }

    /**
     * Open the modal window
     * @public
     */
    Remodal.prototype.open = function() {
        // Check if animation is complete
        if (this.busy) {
            return;
        }

        var remodal = this,
            id;

        remodal.busy = true;
        remodal.$modal.trigger("open");

        id = remodal.$modal.attr("data-" + pluginName + "-id");

        if (id && remodal.settings.hashTracking) {
            scrollTop = $(window).scrollTop();
            location.hash = id;
        }

        if (current && current !== remodal) {
            current.$overlay.hide();
            current.$body.removeClass(pluginName + "_active");
        }

        current = remodal;

        lockScreen();
        remodal.$overlay.show();

        setTimeout(function() {
            remodal.$body.addClass(pluginName + "_active");

            setTimeout(function() {
                remodal.busy = false;
                remodal.$modal.trigger("opened");
            }, remodal.td + 50);
        }, 25);
    };

    /**
     * Close the modal window
     * @public
     */
    Remodal.prototype.close = function() {
        // Check if animation is complete
        if (this.busy) {
            return;
        }

        this.busy = true;
        this.$modal.trigger("close");

        var remodal = this;

        if (remodal.settings.hashTracking &&
            remodal.$modal.attr("data-" + pluginName + "-id") === location.hash.substr(1)) {
            location.hash = "";
            $(window).scrollTop(scrollTop);
        }

        remodal.$body.removeClass(pluginName + "_active");

        setTimeout(function() {
            remodal.$overlay.hide();
            unlockScreen();

            remodal.busy = false;
            remodal.$modal.trigger("closed");
        }, remodal.td + 50);
    };

    /**
     * Special plugin object for instances.
     * @type {Object}
     * @public
     */
    $[pluginName] = {
        lookup: []
    };

    /**
     * Plugin constructor
     * @param {Object} options
     * @returns {JQuery}
     * @constructor
     */
    $.fn[pluginName] = function(opts) {
        var instance,
            $elem;

        this.each(function(index, elem) {
            $elem = $(elem);

            if ($elem.data(pluginName) == null) {
                instance = new Remodal($elem, opts);
                $elem.data(pluginName, instance.index);

                if (instance.settings.hashTracking &&
                    $elem.attr("data-" + pluginName + "-id") === location.hash.substr(1)) {
                    instance.open();
                }
            }
        });

        return instance;
    };

    $(document).ready(function() {

        // data-remodal-target opens a modal window with the special Id.
        $(document).on("click", "[data-" + pluginName + "-target]", function(e) {
            e.preventDefault();

            var elem = e.currentTarget,
                id = elem.getAttribute("data-" + pluginName + "-target"),
                $target = $("[data-" + pluginName + "-id=" + id + "]");

            $[pluginName].lookup[$target.data(pluginName)].open();
        });

        // Auto initialization of modal windows.
        // They should have the 'remodal' class attribute.
        // Also you can write `data-remodal-options` attribute to pass params into the modal.
        $(document).find("." + pluginName).each(function(i, container) {
            var $container = $(container),
                options = $container.data(pluginName + "-options");

            if (!options) {
                options = {};
            } else if (typeof options === "string" || options instanceof String) {
                options = parseOptions(options);
            }

            $container[pluginName](options);
        });
    });

    /**
     * Hashchange handler
     * @param {Event} e
     * @param {Boolean} [closeOnEmptyHash=true]
     * @private
     */
    function hashHandler(e, closeOnEmptyHash) {
        var id = location.hash.replace("#", ""),
            instance,
            $elem;

        if (typeof closeOnEmptyHash === "undefined") {
            closeOnEmptyHash = true;
        }

        if (!id) {
            if (closeOnEmptyHash) {

                // Check if we have currently opened modal and animation is complete
                if (current && !current.busy && current.settings.hashTracking) {
                    current.close();
                }
            }
        } else {

            // Catch syntax error if your hash is bad
            try {
                $elem = $(
                    "[data-" + pluginName + "-id=" +
                    id.replace(new RegExp("/", "g"), "\\/") + "]"
                );
            } catch (err) {}

            if ($elem && $elem.length) {
                instance = $[pluginName].lookup[$elem.data(pluginName)];

                if (instance && instance.settings.hashTracking) {
                    instance.open();
                }
            }

        }
    }

    $(window).bind("hashchange." + pluginName, hashHandler);

})(window.jQuery || window.Zepto);