88 lines
3.1 KiB
JavaScript
88 lines
3.1 KiB
JavaScript
; (function ($, window, document, undefined) {
|
|
|
|
'use strict';
|
|
var
|
|
pluginName = 'bsModalConfirm',
|
|
defaults = {
|
|
template: '<div class="modal fade" tabindex="-1" role="dialog"><div class="modal-dialog modal-sm"><div class="modal-content"><div class="modal-header bg-{{type}} text-{{type}}"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 id="mySmallModalLabel" class="modal-title">{{title}}</h4></div><div class="modal-body">{{message}}</div><div class="modal-footer"><button class="btn btn-default" data-dismiss="modal">Cancel</button><button class="btn btn-{{type}}" data-trigger="confirm">Confirm</button></div></div></div></div>',
|
|
title: 'Confirm',
|
|
message: 'Are you sure?',
|
|
type: 'success'
|
|
};
|
|
|
|
|
|
function Plugin(element, options) {
|
|
this.element = element;
|
|
|
|
this.settings = $.extend({}, defaults, options, $(element).data());
|
|
this._defaults = defaults;
|
|
this._name = pluginName;
|
|
this.init();
|
|
}
|
|
|
|
$.extend(Plugin.prototype, {
|
|
renderTemplate: function () {
|
|
var
|
|
settings = this.settings,
|
|
templateString = settings.template;
|
|
for (var option in settings) {
|
|
if (typeof (settings[option]) === 'string' && option !== 'template' && settings.hasOwnProperty(option)) {
|
|
var rgx = new RegExp('\{\{' + option.trim() + '\}\}', 'g');
|
|
templateString = templateString.replace(rgx, settings[option]);
|
|
}
|
|
}
|
|
|
|
return templateString;
|
|
},
|
|
init: function () {
|
|
var
|
|
$this = $(this.element),
|
|
settings = this.settings,
|
|
nodeName = this.element.nodeName.toLowerCase(),
|
|
inputType = this.element.type,
|
|
$modal = $($.parseHTML(this.renderTemplate())),
|
|
handler;
|
|
|
|
if (nodeName == 'a') {
|
|
var that = this;
|
|
handler = function (e) {
|
|
window.location.href = that.element.href;
|
|
$modal.modal('hide');
|
|
};
|
|
} else if (inputType == 'submit') {
|
|
var form = $this.closest('form')[0];
|
|
|
|
$(form).submit(function (e) {
|
|
e.preventDefault();
|
|
});
|
|
|
|
handler = function (e) {
|
|
form.submit();
|
|
$modal.modal('hide');
|
|
|
|
};
|
|
|
|
} else {
|
|
handler = function () { };
|
|
}
|
|
|
|
$modal.find('[data-trigger="confirm"]').click(handler);
|
|
|
|
$this.click(function (e) {
|
|
e.preventDefault();
|
|
$modal.modal();
|
|
});
|
|
|
|
}
|
|
});
|
|
|
|
$.fn[pluginName] = function (options) {
|
|
return this.each(function () {
|
|
if (!$.data(this, "plugin_" + pluginName)) {
|
|
$.data(this, "plugin_" + pluginName, new Plugin(this, options));
|
|
}
|
|
});
|
|
};
|
|
$('[data-toggle="confirm"]').bsModalConfirm();
|
|
})(jQuery, window, document);
|