if(typeof jQuery==='undefined'){
throw new Error('jquery-confirm requires jQuery');
}
var jconfirm, Jconfirm;
(function ($, window){
"use strict";
$.fn.confirm=function (options, option2){
if(typeof options==='undefined') options={};
if(typeof options==='string'){
options={
content: options,
title: (option2) ? option2:false
};}
$(this).each(function (){
var $this=$(this);
$this.on('click', function (e){
e.preventDefault();
var jcOption=$.extend({}, options);
if($this.attr('data-title'))
jcOption['title']=$this.attr('data-title');
if($this.attr('data-content'))
jcOption['content']=$this.attr('data-content');
if(typeof jcOption['buttons']=='undefined')
jcOption['buttons']={};
jcOption['$target']=$this;
if($this.attr('href')&&Object.keys(jcOption['buttons']).length==0){
var buttons=$.extend(true, {}, jconfirm.pluginDefaults.defaultButtons, (jconfirm.defaults||{}).defaultButtons||{});
var firstBtn=Object.keys(buttons)[0];
jcOption['buttons']=buttons;
jcOption.buttons[firstBtn].action=function (){
location.href=$this.attr('href');
};}
jcOption['closeIcon']=false;
$.confirm(jcOption);
});
});
return $(this);
};
$.confirm=function (options, option2){
if(typeof options==='undefined') options={};
if(typeof options==='string'){
options={
content: options,
title: (option2) ? option2:false
};}
if(typeof options['buttons']!='object')
options['buttons']={};
if(Object.keys(options['buttons']).length==0){
var buttons=$.extend(true, {}, jconfirm.pluginDefaults.defaultButtons, (jconfirm.defaults||{}).defaultButtons||{});
options['buttons']=buttons;
}
return jconfirm(options);
};
$.alert=function (options, option2){
if(typeof options==='undefined') options={};
if(typeof options==='string'){
options={
content: options,
title: (option2) ? option2:false
};}
if(typeof options.buttons!='object')
options.buttons={};
if(Object.keys(options['buttons']).length==0){
var buttons=$.extend(true, {}, jconfirm.pluginDefaults.defaultButtons, (jconfirm.defaults||{}).defaultButtons||{});
var firstBtn=Object.keys(buttons)[0];
options['buttons'][firstBtn]=buttons[firstBtn];
}
return jconfirm(options);
};
$.dialog=function (options, option2){
if(typeof options==='undefined') options={};
if(typeof options==='string'){
options={
content: options,
title: (option2) ? option2:false,
closeIcon: function (){
}};}
options['buttons']={};
if(typeof options['closeIcon']=='undefined'){
options['closeIcon']=function (){
}}
options.confirmKeys=[13];
return jconfirm(options);
};
jconfirm=function (options){
if(typeof options==='undefined') options={};
var pluginOptions=$.extend(true, {}, jconfirm.pluginDefaults);
if(jconfirm.defaults){
pluginOptions=$.extend(true, pluginOptions, jconfirm.defaults);
}
pluginOptions=$.extend(true, {}, pluginOptions, options);
var instance=new Jconfirm(pluginOptions);
jconfirm.instances.push(instance);
return instance;
};
Jconfirm=function (options){
$.extend(this, options);
this._init();
};
Jconfirm.prototype={
_init: function (){
var that=this;
if(!jconfirm.instances.length)
jconfirm.lastFocused=$('body').find(':focus');
this._id=Math.round(Math.random() * 99999);
if(!this.lazyOpen){
setTimeout(function (){
that.open();
}, 0);
}},
_buildHTML: function (){
var that=this;
this._parseAnimation(this.animation, 'o');
this._parseAnimation(this.closeAnimation, 'c');
this._parseBgDismissAnimation(this.backgroundDismissAnimation);
this._parseColumnClass(this.columnClass);
this._parseTheme(this.theme);
this._parseType(this.type);
var template=$(this.template);
template.find('.jconfirm-box').addClass(this.animationParsed).addClass(this.backgroundDismissAnimationParsed).addClass(this.typeParsed);
if(this.typeAnimated)
template.find('.jconfirm-box').addClass('jconfirm-type-animated');
if(this.useBootstrap){
template.find('.jc-bs3-row').addClass(this.bootstrapClasses.row);
template.find('.jc-bs3-row').addClass('justify-content-md-center justify-content-sm-center justify-content-xs-center justify-content-lg-center');
template.find('.jconfirm-box-container').addClass(this.columnClassParsed);
if(this.containerFluid)
template.find('.jc-bs3-container').addClass(this.bootstrapClasses.containerFluid);
else
template.find('.jc-bs3-container').addClass(this.bootstrapClasses.container);
}else{
template.find('.jconfirm-box').css('width', this.boxWidth);
}
if(this.titleClass)
template.find('.jconfirm-title-c').addClass(this.titleClass);
template.addClass(this.themeParsed);
var ariaLabel='jconfirm-box' + this._id;
template.find('.jconfirm-box').attr('aria-labelledby', ariaLabel).attr('tabindex', -1);
template.find('.jconfirm-content').attr('id', ariaLabel);
if(this.bgOpacity!=null)
template.find('.jconfirm-bg').css('opacity', this.bgOpacity);
if(this.rtl)
template.addClass('jconfirm-rtl');
this.$el=template.appendTo(this.container);
this.$jconfirmBoxContainer=this.$el.find('.jconfirm-box-container');
this.$jconfirmBox=this.$body=this.$el.find('.jconfirm-box');
this.$jconfirmBg=this.$el.find('.jconfirm-bg');
this.$title=this.$el.find('.jconfirm-title');
this.$titleContainer=this.$el.find('.jconfirm-title-c');
this.$content=this.$el.find('div.jconfirm-content');
this.$contentPane=this.$el.find('.jconfirm-content-pane');
this.$icon=this.$el.find('.jconfirm-icon-c');
this.$closeIcon=this.$el.find('.jconfirm-closeIcon');
this.$btnc=this.$el.find('.jconfirm-buttons');
this.$scrollPane=this.$el.find('.jconfirm-scrollpane');
this._contentReady=$.Deferred();
this._modalReady=$.Deferred();
this.setTitle();
this.setIcon();
this._setButtons();
this._parseContent();
this.initDraggable();
if(this.isAjax)
this.showLoading(false);
$.when(this._contentReady, this._modalReady).then(function (){
if(that.isAjaxLoading)
setTimeout(function (){
that.isAjaxLoading=false;
that.setContent();
that.setTitle();
that.setIcon();
setTimeout(function (){
that.hideLoading(false);
}, 100);
if(typeof that.onContentReady=='function')
that.onContentReady();
}, 50);
else {
that.setContent();
that.setTitle();
that.setIcon();
if(typeof that.onContentReady=='function')
that.onContentReady();
}
if(that.autoClose)
that._startCountDown();
});
that._contentHash=this._hash(that.$content.html());
that._contentHeight=this.$content.height();
this._watchContent();
this.setDialogCenter();
if(this.animation=='none'){
this.animationSpeed=1;
this.animationBounce=1;
}
this.$body.css(this._getCSS(this.animationSpeed, this.animationBounce));
this.$contentPane.css(this._getCSS(this.animationSpeed, 1));
this.$jconfirmBg.css(this._getCSS(this.animationSpeed, 1));
},
_typePrefix: 'jconfirm-type-',
typeParsed: '',
_parseType: function (type){
this.typeParsed=this._typePrefix + type;
},
setType: function (type){
var oldClass=this.typeParsed;
this._parseType(type);
this.$jconfirmBox.removeClass(oldClass).addClass(this.typeParsed);
},
themeParsed: '',
_themePrefix: 'jconfirm-',
setTheme: function (theme){
var previous=this.theme;
this.theme=theme||this.theme;
this._parseTheme(this.theme);
if(previous)
this.$el.removeClass(previous);
this.$el.addClass(this.themeParsed);
this.theme=theme;
},
_parseTheme: function (theme){
var that=this;
theme=theme.split(',');
$.each(theme, function (k, a){
if(a.indexOf(that._themePrefix)==-1)
theme[k]=that._themePrefix + $.trim(a);
});
this.themeParsed=theme.join(' ').toLowerCase();
},
backgroundDismissAnimationParsed: '',
_bgDismissPrefix: 'jconfirm-hilight-',
_parseBgDismissAnimation: function (bgDismissAnimation){
var animation=bgDismissAnimation.split(',');
var that=this;
$.each(animation, function (k, a){
if(a.indexOf(that._bgDismissPrefix)==-1)
animation[k]=that._bgDismissPrefix + $.trim(a);
});
this.backgroundDismissAnimationParsed=animation.join(' ').toLowerCase();
},
animationParsed: '',
closeAnimationParsed: '',
_animationPrefix: 'jconfirm-animation-',
setAnimation: function (animation){
this.animation=animation||this.animation;
this._parseAnimation(this.animation, 'o');
},
_parseAnimation: function (animation, which){
which=which||'o';
var animations=animation.split(',');
var that=this;
$.each(animations, function (k, a){
if(a.indexOf(that._animationPrefix)==-1)
animations[k]=that._animationPrefix + $.trim(a);
});
var a_string=animations.join(' ').toLowerCase();
if(which=='o')
this.animationParsed=a_string;
else
this.closeAnimationParsed=a_string;
return a_string;
},
setCloseAnimation: function (closeAnimation){
this.closeAnimation=closeAnimation||this.closeAnimation;
this._parseAnimation(this.closeAnimation, 'c');
},
setAnimationSpeed: function (speed){
this.animationSpeed=speed||this.animationSpeed;
},
columnClassParsed: '',
setColumnClass: function (colClass){
if(!this.useBootstrap){
console.warn("cannot set columnClass, useBootstrap is set to false");
return;
}
this.columnClass=colClass||this.columnClass;
this._parseColumnClass(this.columnClass);
this.$jconfirmBoxContainer.addClass(this.columnClassParsed);
},
setBoxWidth: function (){
if(this.useBootstrap){
console.warn("cannot set boxWidth, useBootstrap is set to true");
return;
}
this.$jconfirmBox.css('width', this.boxWidth);
},
_parseColumnClass: function (colClass){
colClass=colClass.toLowerCase();
var p;
switch (colClass){
case 'xl':
case 'xlarge':
p='col-md-12';
break;
case 'l':
case 'large':
p='col-md-8 col-md-offset-2';
break;
case 'm':
case 'medium':
p='col-md-6 col-md-offset-3';
break;
case 's':
case 'small':
p='col-md-4 col-md-offset-4';
break;
case 'xs':
case 'xsmall':
p='col-md-2 col-md-offset-5';
break;
default:
p=colClass;
}
this.columnClassParsed=p;
},
initDraggable: function (){
var that=this;
var $t=this.$titleContainer;
this.resetDrag();
if(this.draggable){
$t.addClass('jconfirm-hand');
$t.on('mousedown', function (e){
that.mouseX=e.clientX;
that.mouseY=e.clientY;
that.isDrag=true;
});
$(window).on('mousemove.' + this._id, function (e){
if(that.isDrag){
that.movingX=e.clientX - that.mouseX + that.initialX;
that.movingY=e.clientY - that.mouseY + that.initialY;
that.setDrag();
}});
$(window).on('mouseup.' + this._id, function (){
if(that.isDrag){
that.isDrag=false;
that.initialX=that.movingX;
that.initialY=that.movingY;
}})
}},
resetDrag: function (){
this.isDrag=false;
this.initialX=0;
this.initialY=0;
this.movingX=0;
this.movingY=0;
this.movingXCurrent=0;
this.movingYCurrent=0;
this.mouseX=0;
this.mouseY=0;
this.$jconfirmBoxContainer.css('transform', 'translate(' + 0 + 'px, ' + 0 + 'px)');
},
setDrag: function (){
if(!this.draggable)
return;
this.alignMiddle=false;
this._boxWidth=this.$jconfirmBox.outerWidth();
var ww=$(window).width();
var that=this;
if(that.movingX % 2==0||that.movingY % 2==0){
var tb=that._boxTopMargin - that.dragWindowGap;
if(tb + that.movingY < 0){
that.movingY=-tb;
}else{
that.movingYCurrent=that.movingY;
}
var lb=(ww / 2) - that._boxWidth / 2;
var rb=(ww / 2) + (that._boxWidth / 2) - that._boxWidth;
rb -=that.dragWindowGap;
lb -=that.dragWindowGap;
if(lb + that.movingX < 0){
that.movingX=-lb;
}else if(rb - that.movingX < 0){
that.movingX=rb;
}else{
that.movingXCurrent=that.movingX;
}
that.$jconfirmBoxContainer.css('transform', 'translate(' + that.movingX + 'px, ' + that.movingY + 'px)');
}},
_hash: function (a){
var string=a.toString();
var h=0;
if(string.length==0) return h;
for (var i=0; i < string.length; i++){
var c=string.toString().charCodeAt(i);
h=((h << 5) - h) + c;
h=h & h;
}
return h;
},
_watchContent: function (){
var that=this;
if(this._timer) clearInterval(this._timer);
this._timer=setInterval(function (){
var now=that._hash(that.$content.html());
var nowHeight=that.$content.height();
if(that._contentHash!=now||that._contentHeight!=nowHeight){
that._contentHash=now;
that._contentHeight=nowHeight;
that.setDialogCenter();
that._imagesLoaded();
}}, this.watchInterval);
},
_hilightAnimating: false,
_hiLightModal: function (){
var that=this;
if(this._hilightAnimating)
return;
that.$body.addClass('hilight');
var duration=2;
this._hilightAnimating=true;
setTimeout(function (){
that._hilightAnimating=false;
that.$body.removeClass('hilight');
}, duration * 1000);
},
_bindEvents: function (){
var that=this;
this.boxClicked=false;
this.$scrollPane.click(function (e){
if(!that.boxClicked){
var buttonName=false;
var shouldClose=false;
var str;
if(typeof that.backgroundDismiss=='function')
str=that.backgroundDismiss();
else
str=that.backgroundDismiss;
if(typeof str=='string'&&typeof that.buttons[str]!='undefined'){
buttonName=str;
shouldClose=false;
}else if(typeof str=='undefined'||!!(str)==true){
shouldClose=true;
}else{
shouldClose=false;
}
if(buttonName){
var btnResponse=that.buttons[buttonName].action.apply(that);
shouldClose=(typeof btnResponse=='undefined')||!!(btnResponse);
}
if(shouldClose)
that.close();
else
that._hiLightModal();
}
that.boxClicked=false;
});
this.$jconfirmBox.click(function (e){
that.boxClicked=true;
});
var isKeyDown=false;
$(window).on('jcKeyDown.' + that._id, function (e){
if(!isKeyDown){
isKeyDown=true;
}});
$(window).on('keyup.' + that._id, function (e){
if(isKeyDown){
that.reactOnKey(e);
isKeyDown=false;
}});
$(window).on('resize.' + this._id, function (){
that.setDialogCenter(true);
setTimeout(function (){
that.resetDrag();
}, 100);
});
},
_cubic_bezier: '0.36, 0.55, 0.19',
_getCSS: function (speed, bounce){
return {
'-webkit-transition-duration': speed / 1000 + 's',
'transition-duration': speed / 1000 + 's',
'-webkit-transition-timing-function': 'cubic-bezier(' + this._cubic_bezier + ', ' + bounce + ')',
'transition-timing-function': 'cubic-bezier(' + this._cubic_bezier + ', ' + bounce + ')'
};},
_imagesLoaded: function (){
var that=this;
if(that.imageLoadInterval)
clearInterval(that.imageLoadInterval);
$.each(this.$content.find('img:not(.loaded)'), function (i, a){
that.imageLoadInterval=setInterval(function (){
var h=$(a).css('height');
if(h!=='0px'){
$(a).addClass('loaded');
clearInterval(that.imageLoadInterval);
that.setDialogCenter();
}}, 40);
});
},
_setButtons: function (){
var that=this;
var total_buttons=0;
if(typeof this.buttons!=='object')
this.buttons={};
$.each(this.buttons, function (key, button){
total_buttons +=1;
if(typeof button==='function'){
that.buttons[key]=button={
action: button
};}
that.buttons[key].text=button.text||key;
that.buttons[key].btnClass=button.btnClass||'btn-default';
that.buttons[key].action=button.action||function (){
};
that.buttons[key].keys=button.keys||[];
that.buttons[key].isHidden=button.isHidden||false;
that.buttons[key].isDisabled=button.isDisabled||false;
$.each(that.buttons[key].keys, function (i, a){
that.buttons[key].keys[i]=a.toLowerCase();
});
var button_element=$('<button type="button" class="btn"></button>')
.html(that.buttons[key].text)
.addClass(that.buttons[key].btnClass)
.prop('disabled', that.buttons[key].isDisabled)
.css('display', that.buttons[key].isHidden ? 'none':'')
.click(function (e){
e.preventDefault();
var res=that.buttons[key].action.apply(that);
that.onAction(key);
that._stopCountDown();
if(typeof res==='undefined'||res)
that.close();
});
that.buttons[key].el=button_element;
that.buttons[key].setText=function (text){
button_element.html(text);
};
that.buttons[key].addClass=function (className){
button_element.addClass(className);
};
that.buttons[key].removeClass=function (className){
button_element.removeClass(className);
};
that.buttons[key].disable=function (){
that.buttons[key].isDisabled=true;
button_element.prop('disabled', true);
};
that.buttons[key].enable=function (){
that.buttons[key].isDisabled=false;
button_element.prop('disabled', false);
};
that.buttons[key].show=function (){
that.buttons[key].isHidden=false;
button_element.css('display', '');
that.setDialogCenter();
};
that.buttons[key].hide=function (){
that.buttons[key].isHidden=true;
button_element.css('display', 'none');
that.setDialogCenter();
};
that['$_' + key]=that['$$' + key]=button_element;
that.$btnc.append(button_element);
});
if(total_buttons===0) this.$btnc.hide();
if(this.closeIcon===null&&total_buttons===0){
this.closeIcon=true;
}
if(this.closeIcon){
if(this.closeIconClass){
var closeHtml='<i class="' + this.closeIconClass + '"></i>';
this.$closeIcon.html(closeHtml);
}
this.$closeIcon.click(function (e){
e.preventDefault();
var buttonName=false;
var shouldClose=false;
var str;
if(typeof that.closeIcon=='function'){
str=that.closeIcon();
}else{
str=that.closeIcon;
}
if(typeof str=='string'&&typeof that.buttons[str]!='undefined'){
buttonName=str;
shouldClose=false;
}else if(typeof str=='undefined'||!!(str)==true){
shouldClose=true;
}else{
shouldClose=false;
}
if(buttonName){
var btnResponse=that.buttons[buttonName].action.apply(that);
shouldClose=(typeof btnResponse=='undefined')||!!(btnResponse);
}
if(shouldClose){
that.close();
}});
this.$closeIcon.show();
}else{
this.$closeIcon.hide();
}},
setTitle: function (string, force){
force=force||false;
if(typeof string!=='undefined')
if(typeof string=='string')
this.title=string;
else if(typeof string=='function'){
if(typeof string.promise=='function')
console.error('Promise was returned from title function, this is not supported.');
var response=string();
if(typeof response=='string')
this.title=response;
else
this.title=false;
} else
this.title=false;
if(this.isAjaxLoading&&!force)
return;
this.$title.html(this.title||'');
},
setIcon: function (iconClass, force){
force=force||false;
if(typeof iconClass!=='undefined')
if(typeof iconClass=='string')
this.icon=iconClass;
else if(typeof iconClass==='function'){
var response=iconClass();
if(typeof response=='string')
this.icon=response;
else
this.icon=false;
}
else
this.icon=false;
if(this.isAjaxLoading&&!force)
return;
this.$icon.html(this.icon ? '<i class="' + this.icon + '"></i>':'');
},
setContentPrepend: function (string, force){
this.contentParsed=string + this.contentParsed;
if(this.isAjaxLoading&&!force)
return;
this.$content.prepend(string);
},
setContentAppend: function (string, force){
this.contentParsed=this.contentParsed + string;
if(this.isAjaxLoading&&!force)
return;
this.$content.append(string);
},
setContent: function (string, force){
force=force||false;
var that=this;
this.contentParsed=(typeof string=='undefined') ? this.contentParsed:string;
if(this.isAjaxLoading&&!force)
return;
this.$content.html(this.contentParsed);
this.setDialogCenter();
setTimeout(function (){
that.$body.find('input[autofocus]:visible:first').focus();
}, 100);
},
loadingSpinner: false,
showLoading: function (disableButtons){
this.loadingSpinner=true;
this.$jconfirmBox.addClass('loading');
if(disableButtons)
this.$btnc.find('button').prop('disabled', true);
this.setDialogCenter();
},
hideLoading: function (enableButtons){
this.loadingSpinner=false;
this.$jconfirmBox.removeClass('loading');
if(enableButtons)
this.$btnc.find('button').prop('disabled', false);
this.setDialogCenter();
},
ajaxResponse: false,
contentParsed: '',
isAjax: false,
isAjaxLoading: false,
_parseContent: function (){
var that=this;
var e='&nbsp;';
if(typeof this.content=='function'){
var res=this.content.apply(this);
if(typeof res=='string'){
this.content=res;
}
else if(typeof res=='object'&&typeof res.always=='function'){
this.isAjax=true;
this.isAjaxLoading=true;
res.always(function (data, status, xhr){
that.ajaxResponse={
data: data,
status: status,
xhr: xhr
};
that._contentReady.resolve(data, status, xhr);
if(typeof that.contentLoaded=='function')
that.contentLoaded(data, status, xhr);
});
this.content=e;
}else{
this.content=e;
}}
if(typeof this.content=='string'&&this.content.substr(0, 4).toLowerCase()==='url:'){
this.isAjax=true;
this.isAjaxLoading=true;
var u=this.content.substring(4, this.content.length);
$.get(u).done(function (html){
that.contentParsed=html;
}).always(function (data, status, xhr){
that.ajaxResponse={
data: data,
status: status,
xhr: xhr
};
that._contentReady.resolve(data, status, xhr);
if(typeof that.contentLoaded=='function')
that.contentLoaded(data, status, xhr);
});
}
if(!this.content)
this.content=e;
if(!this.isAjax){
this.contentParsed=this.content;
this.setContent(this.contentParsed);
that._contentReady.resolve();
}},
_stopCountDown: function (){
clearInterval(this.autoCloseInterval);
if(this.$cd)
this.$cd.remove();
},
_startCountDown: function (){
var that=this;
var opt=this.autoClose.split('|');
if(opt.length!==2){
console.error('Invalid option for autoClose. example \'close|10000\'');
return false;
}
var button_key=opt[0];
var time=parseInt(opt[1]);
if(typeof this.buttons[button_key]==='undefined'){
console.error('Invalid button key \'' + button_key + '\' for autoClose');
return false;
}
var seconds=Math.ceil(time / 1000);
this.$cd=$('<span class="countdown"> (' + seconds + ')</span>')
.appendTo(this['$_' + button_key]);
this.autoCloseInterval=setInterval(function (){
that.$cd.html(' (' + (seconds -=1) + ') ');
if(seconds <=0){
that['$$' + button_key].trigger('click');
that._stopCountDown();
}}, 1000);
},
_getKey: function (key){
switch (key){
case 192:
return 'tilde';
case 13:
return 'enter';
case 16:
return 'shift';
case 9:
return 'tab';
case 20:
return 'capslock';
case 17:
return 'ctrl';
case 91:
return 'win';
case 18:
return 'alt';
case 27:
return 'esc';
case 32:
return 'space';
}
var initial=String.fromCharCode(key);
if(/^[A-z0-9]+$/.test(initial))
return initial.toLowerCase();
else
return false;
},
reactOnKey: function (e){
var that=this;
var a=$('.jconfirm');
if(a.eq(a.length - 1)[0]!==this.$el[0])
return false;
var key=e.which;
if(this.$content.find(':input').is(':focus')&&/13|32/.test(key))
return false;
var keyChar=this._getKey(key);
if(keyChar==='esc'&&this.escapeKey){
if(this.escapeKey===true){
this.$scrollPane.trigger('click');
}
else if(typeof this.escapeKey==='string'||typeof this.escapeKey==='function'){
var buttonKey;
if(typeof this.escapeKey==='function'){
buttonKey=this.escapeKey();
}else{
buttonKey=this.escapeKey;
}
if(buttonKey)
if(typeof this.buttons[buttonKey]==='undefined'){
console.warn('Invalid escapeKey, no buttons found with key ' + buttonKey);
}else{
this['$_' + buttonKey].trigger('click');
}}
}
$.each(this.buttons, function (key, button){
if(button.keys.indexOf(keyChar)!=-1){
that['$_' + key].trigger('click');
}});
},
_boxTopMargin: 0,
_boxBottomMargin: 0,
_boxWidth: 0,
setDialogCenter: function (){
var contentHeight;
var paneHeight;
var style;
contentHeight=0;
paneHeight=0;
if(this.$contentPane.css('display')!='none'){
contentHeight=this.$content.outerHeight()||0;
paneHeight=this.$contentPane.height()||0;
}
var children=this.$content.children();
if(children.length!=0){
var marginTopChild=parseInt(children.eq(0).css('margin-top'));
if(marginTopChild)
contentHeight +=marginTopChild;
}
if(paneHeight==0){
paneHeight=contentHeight;
}
var windowHeight=$(window).height();
var boxHeight;
boxHeight=(this.$body.outerHeight() - paneHeight) + contentHeight;
var topMargin=(windowHeight - boxHeight) / 2;
if(boxHeight > (windowHeight - (this.offsetTop + this.offsetBottom))||!this.alignMiddle){
style={
'margin-top': this.offsetTop,
'margin-bottom': this.offsetBottom
};
this._boxTopMargin=this.offsetTop;
this._boxBottomMargin=this.offsetBottom;
$('body').addClass('jconfirm-no-scroll-' + this._id);
}else{
style={
'margin-top': topMargin,
'margin-bottom': this.offsetBottom
};
this._boxTopMargin=topMargin;
this._boxBottomMargin=this.offsetBottom;
$('body').removeClass('jconfirm-no-scroll-' + this._id);
}
this.$contentPane.css({
'height': contentHeight
}).scrollTop(0);
this.$body.css(style);
this.setDrag();
},
_unwatchContent: function (){
clearInterval(this._timer);
},
close: function (){
var that=this;
if(typeof this.onClose==='function')
this.onClose();
this._unwatchContent();
clearInterval(this.imageLoadInterval);
$(window).unbind('resize.' + this._id);
$(window).unbind('keyup.' + this._id);
$(window).unbind('jcKeyDown.' + this._id);
if(this.draggable){
$(window).unbind('mousemove.' + this._id);
$(window).unbind('mouseup.' + this._id);
this.$titleContainer.unbind('mousedown');
}
$('body').removeClass('jconfirm-no-scroll-' + this._id);
this.$body.addClass(this.closeAnimationParsed);
this.$jconfirmBg.addClass('jconfirm-bg-h');
var closeTimer=(this.closeAnimation=='none') ? 1:this.animationSpeed;
that.$el.removeClass(that.loadedClass);
setTimeout(function (){
that.$el.remove();
var l=jconfirm.instances;
var i=jconfirm.instances.length - 1;
for (i; i >=0; i--){
if(jconfirm.instances[i]._id==that._id){
jconfirm.instances.splice(i, 1);
}}
if(!jconfirm.instances.length){
if(that.scrollToPreviousElement&&jconfirm.lastFocused&&jconfirm.lastFocused.length&&$.contains(document, jconfirm.lastFocused[0])){
var $lf=jconfirm.lastFocused;
if(that.scrollToPreviousElementAnimate){
var st=$(window).scrollTop();
var ot=jconfirm.lastFocused.offset().top;
var wh=$(window).height();
if(!(ot > st&&ot < (st + wh))){
var scrollTo=(ot - Math.round((wh / 3)));
$('html, body').animate({
scrollTop: scrollTo
}, that.animationSpeed, 'swing', function (){
$lf.focus();
});
}else{
$lf.focus();
}}else{
$lf.focus();
}
jconfirm.lastFocused=false;
}}
if(typeof that.onDestroy=='function')
that.onDestroy();
}, closeTimer * 0.40);
return true;
},
open: function (){
if(this.isOpen())
return false;
this._buildHTML();
this._bindEvents();
this._open();
return true;
},
_open: function (){
var that=this;
if(typeof that.onOpenBefore=='function')
that.onOpenBefore();
this.$body.removeClass(this.animationParsed);
this.$jconfirmBg.removeClass('jconfirm-bg-h');
this.$body.focus();
setTimeout(function (){
that.$body.css(that._getCSS(that.animationSpeed, 1));
that.$body.css({
'transition-property': that.$body.css('transition-property') + ', margin'
});
that._modalReady.resolve();
if(typeof that.onOpen==='function')
that.onOpen();
that.$el.addClass(that.loadedClass);
}, this.animationSpeed);
},
loadedClass: 'jconfirm-open',
isClosed: function (){
return !this.$el||this.$el.css('display')==='';
},
isOpen: function (){
return !this.isClosed();
},
toggle: function (){
if(!this.isOpen())
this.open();
else
this.close();
}};
jconfirm.instances=[];
jconfirm.lastFocused=false;
jconfirm.pluginDefaults={
template: '' +
'<div class="jconfirm">' +
'<div class="jconfirm-bg jconfirm-bg-h"></div>' +
'<div class="jconfirm-scrollpane">' +
'<div class="jc-bs3-container">' +
'<div class="jc-bs3-row">' +
'<div class="jconfirm-box-container">' +
'<div class="jconfirm-box" role="dialog" aria-labelledby="labelled" tabindex="-1">' +
'<div class="jconfirm-closeIcon">&times;</div>' +
'<div class="jconfirm-title-c">' +
'<span class="jconfirm-icon-c"></span>' +
'<span class="jconfirm-title"></span></div>' +
'<div class="jconfirm-content-pane">' +
'<div class="jconfirm-content"></div>' +
'</div>' +
'<div class="jconfirm-buttons">' +
'</div>' +
'<div class="jconfirm-clear">' +
'</div></div></div></div></div></div></div>',
title: 'Hello',
titleClass: '',
type: 'default',
typeAnimated: true,
draggable: false,
alignMiddle: true,
content: 'Are you sure to continue?',
buttons: {},
defaultButtons: {
ok: {
action: function (){
}},
close: {
action: function (){
}}
},
contentLoaded: function (){
},
icon: '',
lazyOpen: false,
bgOpacity: null,
theme: 'light',
animation: 'zoom',
closeAnimation: 'scale',
animationSpeed: 400,
animationBounce: 1.2,
escapeKey: true,
rtl: false,
container: 'body',
containerFluid: false,
backgroundDismiss: false,
backgroundDismissAnimation: 'shake',
autoClose: false,
closeIcon: null,
closeIconClass: false,
watchInterval: 100,
columnClass: 'col-md-4 col-md-offset-4 col-sm-6 col-sm-offset-3 col-xs-10 col-xs-offset-1',
boxWidth: '50%',
scrollToPreviousElement: true,
scrollToPreviousElementAnimate: true,
useBootstrap: true,
offsetTop: 50,
offsetBottom: 50,
dragWindowGap: 15,
bootstrapClasses: {
container: 'container',
containerFluid: 'container-fluid',
row: 'row'
},
onContentReady: function (){
},
onOpenBefore: function (){
},
onOpen: function (){
},
onClose: function (){
},
onDestroy: function (){
},
onAction: function (){
}};
var keyDown=false;
$(window).on('keydown', function (e){
if(!keyDown){
var $target=$(e.target);
var pass=false;
if($target.closest('.jconfirm-box').length)
pass=true;
if(pass)
$(window).trigger('jcKeyDown');
keyDown=true;
}});
$(window).on('keyup', function (e){
keyDown=false;
});
})(jQuery, window);