/*! * jquery-confirm v1.7.8 (http://craftpip.github.io/jquery-confirm/) * Author: Boniface Pereira * Website: www.craftpip.com * Contact: hey@craftpip.com * * Copyright 2013-2015 jquery-confirm * Licensed under MIT (https://github.com/craftpip/jquery-confirm/blob/master/LICENSE) */ if (typeof jQuery === 'undefined') { throw new Error('jquery-confirm requires jQuery'); } var jconfirm, Jconfirm; (function ($) { "use strict"; $.confirm = function (options) { /* * Alias of jconfirm */ return jconfirm(options); }; $.alert = function (options) { /* * Alias of jconfirm */ options.cancelButton = false; return jconfirm(options); }; $.dialog = function (options) { /* * Alias of jconfirm */ options.cancelButton = false; options.confirmButton = false; options.confirmKeys = [13]; return jconfirm(options); }; jconfirm = function (options) { /* * initial function for calling. */ if (jconfirm.defaults) { /* * Merge global defaults with plugin defaults */ $.extend(jconfirm.pluginDefaults, jconfirm.defaults); } /* * merge options with plugin defaults. */ var options = $.extend({}, jconfirm.pluginDefaults, options); return new Jconfirm(options); }; Jconfirm = function (options) { /* * constructor function Jconfirm, * options = user options. */ $.extend(this, options); this._init(); }; Jconfirm.prototype = { _init: function () { var that = this; this._rand = Math.round(Math.random() * 99999); this._buildHTML(); this._bindEvents(); setTimeout(function () { that.open(); }, 0); }, animations: ['anim-scale', 'anim-top', 'anim-bottom', 'anim-left', 'anim-right', 'anim-zoom', 'anim-opacity', 'anim-none', 'anim-rotate', 'anim-rotatex', 'anim-rotatey', 'anim-scalex', 'anim-scaley'], _buildHTML: function () { var that = this; /* * Cleaning animations. */ this.animation = 'anim-' + this.animation.toLowerCase(); if (this.animation === 'none') this.animationSpeed = 0; /* * Append html to body. */ this.$el = $(this.template).appendTo(this.container).addClass(this.theme); this.$el.find('.jconfirm-box-container').addClass(this.columnClass); this.CSS = { '-webkit-transition-duration': this.animationSpeed / 1000 + 's', 'transition-duration': this.animationSpeed / 1000 + 's', '-webkjit-transition-timing-function': 'cubic-bezier(0.27, 1.12, 0.32, ' + this.animationBounce + ')', 'transition-timing-function': 'cubic-bezier(0.27, 1.12, 0.32, ' + this.animationBounce + ')', }; this.$el.find('.jconfirm-bg').css(this.CSS); this.$b = this.$el.find('.jconfirm-box').css(this.CSS).addClass(this.animation); /* * Add rtl class if rtl option has selected */ if (this.rtl) this.$el.addClass("rtl"); /* * Setup title contents */ this.setTitle(); this.contentDiv = this.$el.find('div.content'); /* * Settings up buttons */ this.$btnc = this.$el.find('.buttons'); if (this.confirmButton && this.confirmButton.trim() !== '') { this.$confirmButton = $('') .appendTo(this.$btnc) .addClass(this.confirmButtonClass); } if (this.cancelButton && this.cancelButton.trim() !== '') { this.$cancelButton = $('') .appendTo(this.$btnc) .addClass(this.cancelButtonClass); } if (!this.confirmButton && !this.cancelButton) { this.$btnc.remove(); } if (!this.confirmButton && !this.cancelButton && this.closeIcon == null) { this.$closeButton = this.$b.find('.closeIcon').show(); } if (this.closeIcon === true) { this.$closeButton = this.$b.find('.closeIcon').show(); } this.setContent(); if (this.autoClose) this._startCountDown(); }, setTitle: function (string) { this.title = (typeof string !== 'undefined') ? string : this.title; if (this.title) { this.$el.find('div.title').html(' ' + this.title); } else { this.$el.find('div.title').remove(); } }, setContent: function (string) { var that = this; this.content = (string) ? string : this.content; var animate = (string) ? true : false; /* * Set content. */ if (typeof this.content === 'boolean') { if (!this.content) this.contentDiv.remove(); else console.error('Invalid option for property content: passed TRUE'); } else if (typeof this.content === 'string') { if (this.content.substr(0, 4).toLowerCase() === 'url:') { this.contentDiv.html(''); this.$btnc.find('button').prop('disabled', true); var url = this.content.substring(4, this.content.length); $.get(url).done(function (html) { that.contentDiv.html(html); }).always(function (data, status, xhr) { if (typeof that.contentLoaded === 'function') that.contentLoaded(data, status, xhr); that.$btnc.find('button').prop('disabled', false); that.setDialogCenter(); }); } else { this.contentDiv.html(this.content); } } else if (typeof this.content === 'function') { this.contentDiv.html(''); this.$btnc.find('button').attr('disabled', 'disabled'); var promise = this.content(this); if (typeof promise !== 'object') { console.error('The content function must return jquery promise.'); } else if (typeof promise.always !== 'function') { console.error('The object returned is not a jquery promise.'); } else { promise.always(function (data, status) { that.$btnc.find('button').removeAttr('disabled'); that.setDialogCenter(); }); } } else { console.error('Invalid option for property content, passed: ' + typeof this.content); } this.setDialogCenter(animate); }, _startCountDown: function () { var opt = this.autoClose.split('|'); if (/cancel/.test(opt[0]) && this.type === 'alert') { return false; } else if (/confirm|cancel/.test(opt[0])) { this.$cd = $('').appendTo(this['$' + opt[0] + 'Button']); var that = this; that.$cd.parent().click(); var time = opt[1] / 1000; this.interval = setInterval(function () { that.$cd.html(' [' + (time -= 1) + ']'); if (time === 0) { that.$cd.parent().trigger('click'); clearInterval(that.interval); } }, 1000); } else { console.error('Invalid option ' + opt[0] + ', must be confirm/cancel'); } }, _bindEvents: function () { var that = this; var boxClicked = false; this.$el.find('.jconfirm-scrollpane').click(function (e) { // ignore propagated clicks if (!boxClicked) { // background clicked if (that.backgroundDismiss) { that.cancel(); that.close(); } else { that.$b.addClass('hilight'); setTimeout(function () { that.$b.removeClass('hilight'); }, 400); } } boxClicked = false; }); this.$el.find('.jconfirm-box').click(function (e) { boxClicked = true; }); if (this.$confirmButton) { this.$confirmButton.click(function (e) { e.preventDefault(); var r = that.confirm(that.$b); that.onAction(); if (typeof r === 'undefined' || r) that.close(); }); } if (this.$cancelButton) { this.$cancelButton.click(function (e) { e.preventDefault(); var r = that.cancel(that.$b); that.onAction(); if (typeof r === 'undefined' || r) that.close(); }); } if (this.$closeButton) { this.$closeButton.click(function (e) { e.preventDefault(); that.cancel(); that.onAction(); that.close(); }); } if (this.keyboardEnabled) { setTimeout(function () { $(window).on('keyup.' + this._rand, function (e) { that.reactOnKey(e); }); }, 500); } $(window).on('resize.' + this._rand, function () { that.setDialogCenter(true); }); }, reactOnKey: function key(e) { /* * prevent keyup event if the dialog is not last! */ var a = $('.jconfirm'); if (a.eq(a.length - 1)[0] !== this.$el[0]) return false; var key = e.which; if ($.inArray(key, this.cancelKeys) !== -1) { /* * Cancel key pressed. */ if (!this.backgroundDismiss) { /* * If background dismiss is false, Glow the modal. */ this.$el.find('.jconfirm-bg').click(); return false; } if (this.$cancelButton) { this.$cancelButton.click(); } else { this.close(); } } if ($.inArray(key, this.confirmKeys) !== -1) { /* * Confirm key pressed. */ if (this.$confirmButton) { this.$confirmButton.click(); } else { } } }, setDialogCenter: function (animate) { var windowHeight = $(window).height(); var boxHeight = this.$b.outerHeight(); var topMargin = (windowHeight - boxHeight) / 2; var minMargin = 100; if (boxHeight > (windowHeight - minMargin)) { var style = { 'margin-top': minMargin / 2, 'margin-bottom': minMargin / 2, } } else { var style = { 'margin-top': topMargin, } } if (animate) { this.$b.animate(style, { duration: this.animationSpeed, queue: false }); } else { this.$b.css(style); } }, close: function () { var that = this; if (this.isClosed()) return false; if (typeof this.onClose === 'function') this.onClose(); /* unbind the window resize & keyup event. */ $(window).unbind('resize.' + this._rand); if (this.keyboardEnabled) $(window).unbind('keyup.' + this._rand); that.$el.find('.jconfirm-bg').removeClass('seen'); this.$b.addClass(this.animation); setTimeout(function () { that.$el.remove(); }, this.animationSpeed + 10); // wait 10 miliseconds more, ensure everything is done. jconfirm.record.closed += 1; jconfirm.record.currentlyOpen -= 1; if (jconfirm.record.currentlyOpen < 1) $('body').removeClass('jconfirm-noscroll'); return true; }, open: function () { var that = this; if (this.isClosed()) return false; that.$el.find('.jconfirm-bg').addClass('seen'); $('body').addClass('jconfirm-noscroll'); this.$b.removeClass(this.animations.join(' ')); /** * Blur the focused elements, prevents re-execution with button press. */ $('body :focus').trigger('blur'); this.$b.find('input[autofocus]:visible:first').focus(); jconfirm.record.opened += 1; jconfirm.record.currentlyOpen += 1; if (typeof this.onOpen === 'function') this.onOpen(); return true; }, isClosed: function () { return (this.$el.css('display') === '') ? true : false; } }; jconfirm.pluginDefaults = { template: '
', title: 'Hello', content: 'Are you sure to continue?', contentLoaded: function () { }, icon: '', confirmButton: 'Okay', cancelButton: 'Cancel', confirmButtonClass: 'btn-default', cancelButtonClass: 'btn-default', theme: 'white', animation: 'scale', animationSpeed: 400, animationBounce: 1.5, keyboardEnabled: false, rtl: false, confirmKeys: [13, 32], // ENTER or SPACE key cancelKeys: [27], // ESC key container: 'body', confirm: function () { }, cancel: function () { }, backgroundDismiss: true, autoClose: false, closeIcon: null, columnClass: 'col-md-6 col-md-offset-3', onOpen: function () { }, onClose: function () { }, onAction: function () { } }; jconfirm.record = { opened: 0, closed: 0, currentlyOpen: 0, }; })(jQuery);