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, }; })();