/*+***********************************************************************************
* The contents of this file are subject to the vtiger CRM Public License Version 1.0
* ("License"); You may not use this file except in compliance with the License
* The Original Code is: vtiger CRM Open Source
* The Initial Developer of the Original Code is vtiger.
* Portions created by vtiger are Copyright (C) vtiger.
* All Rights Reserved.
*************************************************************************************/
(function( $ ) {
var ProgressIndicatorHelper = function() {
var thisInstance = this;
this.defaults = {
'position' : 'append',
'mode' : 'show',
'blockInfo' : {
'elementToBlock' : 'body'
},
'message' : ''
}
this.imageContainerCss = {
'text-align' : 'center'
}
this.blockOverlayCSS = {
'opacity' : '0.2'
}
this.blockCss = {
'border': '',
'backgroundColor':'',
'background-clip': 'border-box',
'border-radius': '2px'
}
this.showTopCSS ={
'left' : '48.2%',
'position': 'fixed',
'top' : '4.5%',
'z-index' : '100000'
}
this.showOnTop = false;
this.init = function(element, options){
if(typeof options == 'undefined'){
options = {};
}
thisInstance.options = $.extend(true, this.defaults, options);
thisInstance.container = element;
thisInstance.position = options.position;
if(typeof options.imageContainerCss != 'undefined'){
thisInstance.imageContainerCss = $.extend(true,this.imageContainerCss,options.imageContainerCss);
}
if(this.isBlockMode()) {
thisInstance.elementToBlock = $(thisInstance.options.blockInfo.elementToBlock);
}
return this;
}
this.initActions = function() {
if(this.options.mode == 'show'){
this.show();
}else if(this.options.mode == 'hide') {
this.hide();
}
}
this.getImagePath = function() {
if(this.options.smallLoadingImage == true && typeof this.options.smallLoadingImage != 'undefined' ) {
return app.vimage_path('loading.gif');
} else {
return app.vimage_path('loading.gif');
}
}
this.isPageBlockMode = function() {
if ( (typeof this.elementToBlock != 'undefined' )&& this.elementToBlock.is('body')) {
return true;
}
return false;
}
this.isBlockMode = function() {
if((typeof this.options.blockInfo != 'undefined') && (this.options.blockInfo.enabled==true)) {
return true;
}
return false;
}
this.show = function(){
// TODO use app.vimage_path
var imagePath = this.getImagePath();
var imageHtml = '
'+
'

'+
'
';
var jQImageHtml = jQuery(imageHtml).css(this.imageContainerCss);
if(thisInstance.options.message.length > 0) {
var jQMessage = thisInstance.options.message;
if(!(jQMessage instanceof jQuery)){
jQMessage = jQuery('').html(jQMessage)
}
var messageContainer = jQuery('').append(jQMessage);
jQImageHtml.append(messageContainer);
}
if(this.isBlockMode()) {
jQImageHtml.addClass('blockMessageContainer');
}
switch(thisInstance.position) {
case "prepend":
thisInstance.container.prepend(jQImageHtml);
break;
case "html":
thisInstance.container.html(jQImageHtml);
break;
case "replace":
thisInstance.container.replaceWith(jQImageHtml);
break;
default:
thisInstance.container.append(jQImageHtml);
}
if(this.isBlockMode()) {
thisInstance.blockedElement = thisInstance.elementToBlock;
if(thisInstance.isPageBlockMode()) {
$.blockUI({
'message' : thisInstance.container,
'overlayCSS' : thisInstance.blockOverlayCSS,
'css' : thisInstance.blockCss
});
}else{
thisInstance.elementToBlock.block({
'message' : thisInstance.container,
'overlayCSS' : thisInstance.blockOverlayCSS,
'css' : thisInstance.blockCss
})
}
}
if(thisInstance.showOnTop) {
this.container.css(this.showTopCSS).appendTo('body');
}
}
this.hide = function() {
$('.imageHolder',this.container).remove();
if(typeof this.blockedElement != 'undefined') {
if(this.isPageBlockMode()) {
$.unblockUI();
}
else{
this.blockedElement.unblock();
}
}
this.container.removeData('progressIndicator');
}
}
$.fn.progressIndicator = function(options) {
var element = this;
if(this.length <= 0) {
element = jQuery('body');
}
return element.each(function(index, element){
var jQueryObject = $(element);
if(typeof jQueryObject.data('progressIndicator') != 'undefined'){
var progressIndicatorInstance = jQueryObject.data('progressIndicator');
}else{
var progressIndicatorInstance = new ProgressIndicatorHelper();
jQueryObject.data('progressIndicator',progressIndicatorInstance);
}
progressIndicatorInstance.init(jQueryObject, options).initActions();
});
};
$.progressIndicator = function(options) {
var progressImageContainer = jQuery('');
var progressIndicatorInstance = new ProgressIndicatorHelper();
progressIndicatorInstance.init(progressImageContainer, options);
if(!progressIndicatorInstance.isBlockMode()) {
progressIndicatorInstance.showOnTop = true;
}
progressIndicatorInstance.initActions();
return progressImageContainer.data('progressIndicator',progressIndicatorInstance);
}
//Change the z-index of the block overlay value
$.blockUI.defaults.baseZ = 10000;
})( jQuery );