(function ($, window, document, undefined) { "use strict"; var pluginName = "loadingModal", defaults = { position: "auto", text: "", color: "#fff", opacity: "0.7", backgroundColor: "rgb(0,0,0)", animation: "doubleBounce", }; // The actual plugin constructor function Plugin(element, options) { var $that = this; this.element = element; this.animations = { doubleBounce: { html: '
', }, rotatingPlane: { html: '
', setBackground: function (color) { $that.animationBox.find("*").each(function (k, e) { if ( $(e).css("background-color") && $(e).css("background-color") != "rgba(0, 0, 0, 0)" ) { $(e).css("background-color", color); } }); }, }, wave: { html: '
', }, wanderingCubes: { html: '
', }, spinner: { html: '
' }, chasingDots: { html: '
', }, threeBounce: { html: '
', }, circle: { html: '
', setBackground: function (color) { $that.animationBox .children() .find("*") .each(function (k, e) { if ( window .getComputedStyle(e, ":before") .getPropertyValue("background-color") !== "rgba(0, 0, 0, 0)" ) { $("body").append( $( "" ) ); } }); }, }, cubeGrid: { html: '
', }, fadingCircle: { html: '
', setBackground: function (color) { $that.animationBox .children() .find("*") .each(function (k, e) { if ( window .getComputedStyle(e, ":before") .getPropertyValue("background-color") !== "rgba(0, 0, 0, 0)" ) { $("body").append( $( "" ) ); } }); }, }, foldingCube: { html: '
', setBackground: function (color) { $that.animationBox.find("*").each(function (k, e) { if ( window .getComputedStyle(e, ":before") .getPropertyValue("background-color") !== "rgba(0, 0, 0, 0)" ) { $("body").append( $( "" ) ); } }); }, }, }; // jQuery has an extend method which merges the contents of two or // more objects, storing the result in the first object. The first object // is generally empty as we don't want to alter the default options for // future instances of the plugin this.settings = $.extend({}, defaults, options); this.modal = null; this.modalText = null; this.animationBox = null; this.modalBg = null; this.currenAnimation = null; this.init(); return this; } // Avoid Plugin.prototype conflicts $.extend(Plugin.prototype, { init: function () { // Create all elements var $modal = $( '
' ); var $modalBg = $('
'); var $animationBox = $( '
' ); var $infoBox = $('
'); var $text = $('
'); // Hide text element if no text available if (this.settings.text !== "") { $text.html(this.settings.text); } else { $text.hide(); } // Add selected animation loader element this.currenAnimation = this.animations[this.settings.animation]; $animationBox.append(this.currenAnimation.html); $infoBox.append($animationBox).append($text); $modal.append($modalBg); $modal.append($infoBox); if ( this.settings.position === "auto" && this.element.tagName.toLowerCase() !== "body" ) { $modal.css("position", "absolute"); $(this.element).css("position", "relative"); } else if (this.settings.position !== "auto") { $(this.element).css("position", this.settings.position); } $(this.element).append($modal); this.modalBg = $modalBg; this.modal = $modal; this.modalText = $text; this.animationBox = $animationBox; this.color(this.settings.color); this.backgroundColor(this.settings.backgroundColor); this.opacity(this.settings.opacity); }, hide: function () { var modal = this.modal; modal .removeClass("jquery-loading-modal--visible") .addClass("jquery-loading-modal--hidden"); setTimeout(function () { modal.hide(); }, 1000); }, backgroundColor: function (color) { this.modalBg.css({ "background-color": color }); }, color: function (color) { $("[data-custom-style]").remove(); this.modalText.css("color", color); if (this.currenAnimation.setBackground) { this.currenAnimation.setBackground(color); } else { this.animationBox .children() .find("*") .each(function (k, e) { if ( $(e).css("background-color") && $(e).css("background-color") != "rgba(0, 0, 0, 0)" ) { $(e).css("background-color", color); } if ( window .getComputedStyle(e, ":before") .getPropertyValue("background-color") !== "rgba(0, 0, 0, 0)" ) { $("body").append( $( "" ) ); } }); } }, opacity: function (opacity) { this.modalBg.css({ opacity: opacity }); }, show: function () { this.modal .show() .removeClass("jquery-loading-modal--hidden") .addClass("jquery-loading-modal--visible"); }, animation: function (animation) { this.animationBox.html(""); this.currenAnimation = this.animations[animation]; this.animationBox.append(this.currenAnimation.html); }, destroy: function () { $("[data-custom-style]").remove(); this.modal.remove(); }, text: function (text) { this.modalText.html(text); }, }); // You don't need to change something below: // A really lightweight plugin wrapper around the constructor, // preventing against multiple instantiations and allowing any // public function (ie. a function whose name doesn't start // with an underscore) to be called via the jQuery plugin, // e.g. $(element).defaultPluginName('functionName', arg1, arg2) $.fn[pluginName] = function (options) { var args = arguments; // Is the first parameter an object (options), or was omitted, // instantiate a new instance of the plugin. if (options === undefined || typeof options === "object") { return this.each(function () { // Only allow the plugin to be instantiated once, // so we check that the element has no plugin instantiation yet if (!$.data(this, "plugin_" + pluginName)) { // if it has no instance, create a new one, // pass options to our plugin constructor, // and store the plugin instance // in the elements jQuery data object. $.data(this, "plugin_" + pluginName, new Plugin(this, options)); } }); // If the first parameter is a string and it doesn't start // with an underscore or "contains" the `init`-function, // treat this as a call to a public method. } else if ( typeof options === "string" && options[0] !== "_" && options !== "init" ) { // Cache the method call // to make it possible // to return a value var returns; this.each(function () { var instance = $.data(this, "plugin_" + pluginName); // Tests that there's already a plugin-instance // and checks that the requested public method exists if ( instance instanceof Plugin && typeof instance[options] === "function" ) { // Call the method of our plugin instance, // and pass it the supplied arguments. returns = instance[options].apply( instance, Array.prototype.slice.call(args, 1) ); } // Allow instances to be destroyed via the 'destroy' method if (options === "destroy") { $.data(this, "plugin_" + pluginName, null); } }); // If the earlier cached method // gives a value back return the value, // otherwise return this to preserve chainability. return returns !== undefined ? returns : this; } }; })(jQuery, window, document);