var dialog = (function () {
var DIALOG_FADE_IN_SPEED = 250;
var DIALOG_FADE_OUT_SPEED = 150;
var $mainContainer = null;
var onClose = null;
function getContainer() {
if (! $mainContainer) {
$mainContainer = $('#dialogs-container');
}
return $mainContainer;
}
var mainLayout = (
'
'
);
function getContent(opt) {
return mainLayout.format(opt.id);
}
function getButton(btnOpt) {
var template = '';
var id = btnOpt.id ? ' id="' + btnOpt.id + '-modal-btn" ' : '';
var className = btnOpt.className ? btnOpt.className : '';
var text = btnOpt.text;
return template.format(id, className, text);
}
function close() {
getContainer()
.removeClass('open')
.find('div.modal').fadeOut(DIALOG_FADE_OUT_SPEED);
if (onClose && onClose.call) {
onClose();
}
}
function onFooterBtnClick(data) {
if (data.action && data.action.call) {
data.action.call(this, data.params || []);
}
if (! data.dontClose) {
close();
}
}
function show(opt) {
onClose = null;
close();
if ((typeof opt).toLowerCase() === 'string') {
opt = {
content: opt
};
}
if (! opt.id) {
opt.id = +new Date;
}
onClose = (opt.onClose && opt.onClose.call) ? opt.onClose : null;
var dialogId = '#{0}-modal'.format(opt.id);
if (! getContainer().find(dialogId).length) {
getContainer().append(getContent(opt));
}
$dialog = $(dialogId);
if (opt.big || opt.imageSrc) {
var windowHeight = $(window).height();
var minHeight = parseInt(windowHeight * 0.8) - 100;
var top = parseInt(windowHeight * 0.08);
$dialog.css('top', top + 'px');
if (! opt.dontStretch) {
$dialog.find('.modal-content').css('min-height', minHeight);
}
$dialog.addClass('modal-big');
if (opt.imageSrc) {
$dialog.find('.modal-content').css({
'background-image': 'url(' + opt.imageSrc + ')',
'background-size': 'contain',
'background-repeat' : 'no-repeat',
'background-position': 'center center'
});
}
}
if (opt.maxWidth) {
$dialog.css('max-width', opt.maxWidth);
}
if (opt.width) {
$dialog.css('width', opt.width);
}
if (opt.top) {
$dialog.css('top', opt.top);
}
$dialog
.find('.modal-title').html(opt.title).end()
.find('.modal-content').html(opt.content || opt.text || '').end()
.bindClick(function (e) {
e.stopPropagation();
})
.fadeIn(DIALOG_FADE_IN_SPEED);
getContainer().addClass('open');
if (! opt.title) {
$dialog
.find('.modal-header').hide().end()
.find('.modal-content').css('padding', '30px 20px')
}
if (opt.removeWrapper) {
$dialog.find('.modal-content *').first().unwrap();
}
$footer = $dialog.find('.modal-footer').first().empty();
if (! opt.disableOverlay) {
getContainer().bindClick(close);
} else {
getContainer().off('click');
}
if (! opt.buttons || ! opt.buttons.length) {
opt.buttons = [{
id: 'modal-close-button',
text: 'Ok'
}];
}
for (var i = 0, len = opt.buttons.length; i < len; i++) {
if (! opt.buttons[i].id) {
opt.buttons[i].id = Math.floor(Math.random() * 1000000);
}
$footer
.append(getButton(opt.buttons[i]))
.find('#' + opt.buttons[i].id + '-modal-btn')
.bindClick(onFooterBtnClick, [opt.buttons[i]]);
}
return $dialog;
}
function showConfirm(text, action) {
this.show({
id: 'main-confirmation',
title: 'Confirmation',
content: text,
buttons: [
{
text: 'Yes',
className: 'danger',
action: action
}, {
text: 'No'
}
]
});
}
function showImage(src, title, buttons, maxWidth) {
this.show({
id: 'image-dialog',
imageSrc: '/sdapi/v1/eyemask/v1/static/images/' + src,
big: true,
maxWidth: maxWidth || null,
title: title || null,
buttons: buttons || null
});
}
function showError(message) {
this.show({
id: 'error-dialog',
title: 'Error',
content: message,
});
}
function hide() {
close();
}
return {
show: show,
hide: hide,
confirm: showConfirm,
image: showImage,
error: showError,
};
})();