diff options
Diffstat (limited to 'static/js/jquery.confirm.js')
| -rw-r--r-- | static/js/jquery.confirm.js | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/static/js/jquery.confirm.js b/static/js/jquery.confirm.js new file mode 100644 index 0000000..ec1ac92 --- /dev/null +++ b/static/js/jquery.confirm.js @@ -0,0 +1,145 @@ +/*! + * jquery.confirm + * + * @version 2.3.1 + * + * @author My C-Labs + * @author Matthieu Napoli <matthieu@mnapoli.fr> + * @author Russel Vela + * @author Marcus Schwarz <msspamfang@gmx.de> + * + * @license MIT + * @url http://myclabs.github.io/jquery.confirm/ + */ +(function ($) { + + /** + * Confirm a link or a button + * @param [options] {{title, text, confirm, cancel, confirmButton, cancelButton, post, confirmButtonClass}} + */ + $.fn.confirm = function (options) { + if (typeof options === 'undefined') { + options = {}; + } + + this.click(function (e) { + e.preventDefault(); + + var newOptions = $.extend({ + button: $(this) + }, options); + + $.confirm(newOptions, e); + }); + + return this; + }; + + /** + * Show a confirmation dialog + * @param [options] {{title, text, confirm, cancel, confirmButton, cancelButton, post, confirmButtonClass}} + * @param [e] {Event} + */ + $.confirm = function (options, e) { + // Do nothing when active confirm modal. + if ($('.confirmation-modal').length > 0) + return; + + // Parse options defined with "data-" attributes + var dataOptions = {}; + if (options.button) { + var dataOptionsMapping = { + 'title': 'title', + 'text': 'text', + 'confirm-button': 'confirmButton', + 'cancel-button': 'cancelButton', + 'confirm-button-class': 'confirmButtonClass', + 'cancel-button-class': 'cancelButtonClass' + }; + $.each(dataOptionsMapping, function(attributeName, optionName) { + var value = options.button.data(attributeName); + if (value) { + dataOptions[optionName] = value; + } + }); + } + + // Default options + var settings = $.extend({}, $.confirm.options, { + confirm: function () { + var url = e && (('string' === typeof e && e) || (e.currentTarget && e.currentTarget.attributes['href'].value)); + if (url) { + if (options.post) { + var form = $('<form method="post" class="hide" action="' + url + '"></form>'); + $("body").append(form); + form.submit(); + } else { + window.location = url; + } + } + }, + cancel: function (o) { + }, + button: null + }, dataOptions, options); + + // Modal + var modalHeader = ''; + if (settings.title !== '') { + modalHeader = + '<div class=modal-header>' + + '<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>' + + '<h4 class="modal-title">' + settings.title+'</h4>' + + '</div>'; + } + var modalHTML = + '<div class="confirmation-modal modal fade" tabindex="-1" role="dialog">' + + '<div class="modal-dialog">' + + '<div class="modal-content">' + + modalHeader + + '<div class="modal-body">' + settings.text + '</div>' + + '<div class="modal-footer">' + + '<button class="confirm btn ' + settings.confirmButtonClass + '" type="button" data-dismiss="modal">' + + settings.confirmButton + + '</button>' + + '<button class="cancel btn ' + settings.cancelButtonClass + '" type="button" data-dismiss="modal">' + + settings.cancelButton + + '</button>' + + '</div>' + + '</div>' + + '</div>' + + '</div>'; + + var modal = $(modalHTML); + + modal.on('shown.bs.modal', function () { + modal.find(".btn-primary:first").focus(); + }); + modal.on('hidden.bs.modal', function () { + modal.remove(); + }); + modal.find(".confirm").click(function () { + settings.confirm(settings.button); + }); + modal.find(".cancel").click(function () { + settings.cancel(settings.button); + }); + + // Show the modal + $("body").append(modal); + modal.modal('show'); + }; + + /** + * Globally definable rules + */ + $.confirm.options = { + text: "Are you sure?", + title: "", + confirmButton: "Yes", + cancelButton: "Cancel", + post: false, + confirmButtonClass: "btn-primary", + cancelButtonClass: "btn-default" + } +})(jQuery); |
