-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjquery.ultima.block.min.js
2 lines (2 loc) · 6.49 KB
/
jquery.ultima.block.min.js
1
2
// MIT, Copyright (c) 2014-2018 Alexander Kwaschny, kwaschny.net
(function(){"use strict";if(!window.UltimaBlock){if(jQuery===undefined){throw new Error("jQuery missing for UltimaBlock")}if(!jQuery.isPlainObject){throw new Error("jQuery 1.4+ required for UltimaBlock")}window.UltimaBlock=function(target,options){if(!(this instanceof UltimaBlock)){return new UltimaBlock(options)}target=jQuery(target);var i=0,len=UltimaBlock.collection.length;for(i;i<len;i++){if(target[0]===UltimaBlock.collection[i].target[0]){var overlay=UltimaBlock.collection[i];overlay.options.current=overlay._.methods.mergeOptions(overlay.options.current,options);return overlay}}this._={};var self=this;this.target=target;this.overlay=null;this.message=null;this.options={};this.options.current={};this.options["default"]={message:"",behavior:{zIndexInc:true},css:{overlay:{className:"",zIndex:9001},message:{className:"",offset:{x:0,y:0},viewport:"auto",x:"50%",y:"50%"}},callbacks:{onBlocking:undefined,onUnblocking:undefined}};this._.properties={classNames:{overlay:"UltimaBlock-overlay",message:"UltimaBlock-message"}};this.block=function(message){if(jQuery.isFunction(this.options.current.callbacks.onBlocking)){if(this.options.current.callbacks.onBlocking(this)===false){return false}}if(this.overlay===null||!document.body.contains(this.overlay.dom.element[0])){this.overlay=this._.methods.createOverlay();this.target.css({position:"relative"});this.target.append(this.overlay.dom.element)}if(this.message===null||!document.body.contains(this.message.dom.outerElement[0])){this.message=this._.methods.createMessage();this.overlay.dom.element.append(this.message.dom.outerElement)}this.message.set(message);this.overlay.show();this.message.show()};this.unblock=function(){if(jQuery.isFunction(this.options.current.callbacks.onUnblocking)){if(this.options.current.callbacks.onUnblocking(this)===false){return false}}if(this.overlay===null){return false}this.overlay.hide()};this._.methods={createOverlay:function(){var overlay={dom:{element:jQuery("<div></div>").hide()},hide:function(){this.dom.element.hide()},show:function(){this.dom.element.show();this._.methods.reposition()},_:{methods:{reposition:function(){var overlayW,overlayH;if(typeof self.options.current.css.message.viewport.width==="number"){overlayW=self.options.current.css.message.viewport.width}else{overlayW=self.overlay.dom.element.outerWidth()}if(typeof self.options.current.css.message.viewport.height==="number"){overlayH=self.options.current.css.message.viewport.height}else{overlayH=self.overlay.dom.element.outerHeight()}var messageW=self.message.dom.innerElement.width();var messageH=self.message.dom.innerElement.height();var left,top;if(/^[0-9]{1,3}%$/.test(self.options.current.css.message.x)){left=self.options.current.css.message.x.replace("%","")*overlayW/100-messageW/2}else{left=self.options.current.css.message.x}if(/^[0-9]{1,3}%$/.test(self.options.current.css.message.y)){top=self.options.current.css.message.y.replace("%","")*overlayH/100-messageH/2}else{top=self.options.current.css.message.y}self.message.dom.innerElement.css({left:left+self.options.current.css.message.offset.x,top:top+self.options.current.css.message.offset.y})}}}};overlay.dom.element.addClass(self._.properties.classNames.overlay);overlay.dom.element.addClass(self.options.current.css.overlay.className);var cssAttr={};if(!self.options.current.css.overlay.className){cssAttr.backgroundColor="rgba(0, 0, 0, 0.50)"}jQuery.extend(true,cssAttr,self.options.current.css.overlay);jQuery.extend(true,cssAttr,{bottom:0,height:"100%",left:0,margin:0,position:"absolute",right:0,top:0,width:"100%",zIndex:self.options.current.css.overlay.zIndex+(self.options.current.behavior.zIndexInc?UltimaBlock.collection.length:0)});overlay.dom.element.css(cssAttr);return overlay},createMessage:function(){var message={dom:{outerElement:jQuery("<div></div>"),innerElement:jQuery("<div></div>")},hide:function(){this.dom.outerElement.hide()},set:function(content){this.dom.innerElement.html(content!==undefined?content:"")},show:function(){this.dom.outerElement.show()}};message.dom.innerElement.addClass(self._.properties.classNames.message);message.dom.innerElement.addClass(self.options.current.css.message.className);message.dom.outerElement.css({height:"100%",position:"relative",width:"100%"});var cssAttr={};if(!self.options.current.css.message.className){cssAttr.color="#FFFFFF"}jQuery.extend(true,cssAttr,self.options.current.css.message);jQuery.extend(true,cssAttr,{position:"absolute"});message.dom.innerElement.css(cssAttr);message.dom.outerElement.append(message.dom.innerElement);return message},mergeOptions:function(options1,options2){self._.methods.translateOptions(options2);var result={};jQuery.extend(true,result,options1);jQuery.extend(true,result,options2);return result},translateOptions:function(options){var buffer,length,i,result,ref;for(var key in options){if(!options.hasOwnProperty(key)){continue}if(key.indexOf("->")!==0){continue}buffer=key.replace("->","");buffer=buffer.split(".");length=buffer.length;result={};ref=result;for(i=0;i<length-1;i++){ref[buffer[i]]={};ref=ref[buffer[i]]}ref[buffer[length-1]]=options[key];delete options[key];jQuery.extend(true,options,result)}return options}};this.options.current=this._.methods.mergeOptions(this.options["default"],UltimaBlock.options);this.options.current=this._.methods.mergeOptions(this.options.current,options);UltimaBlock.collection.push(this)};UltimaBlock.collection=[];UltimaBlock.options={};jQuery.UltimaBlock={options:{}};jQuery.UltimaBlock.block=function(target,options){var mergedOptions={};jQuery.extend(true,mergedOptions,jQuery.UltimaBlock.options);jQuery.extend(true,mergedOptions,options);var overlay=new UltimaBlock(target,mergedOptions);overlay.block();return overlay};jQuery.UltimaBlock.unblock=function(target,options){var mergedOptions={};jQuery.extend(true,mergedOptions,jQuery.UltimaBlock.options);jQuery.extend(true,mergedOptions,options);var overlay=new UltimaBlock(target,mergedOptions);overlay.unblock();return overlay};jQuery.fn.block=function(message,options){if(options===undefined){if(typeof message!=="string"){options=message}}var mergedOptions={};jQuery.extend(true,mergedOptions,jQuery.UltimaBlock.options);jQuery.extend(true,mergedOptions,options);this.each(function(){new UltimaBlock(this,mergedOptions).block(message)});return this};jQuery.fn.unblock=function(options){var mergedOptions={};jQuery.extend(true,mergedOptions,jQuery.UltimaBlock.options);jQuery.extend(true,mergedOptions,options);this.each(function(){new UltimaBlock(this,mergedOptions).unblock()});return this};UltimaBlock.version="0.3.6"}})();