AutorÃa | Ultima modificación | Ver Log |
/*!* Bootstrap Confirmation (v4.1.0)* @copyright 2013 Nimit Suwannagate <ethaizone@hotmail.com>* @copyright 2014-2018 Damien "Mistic" Sorel <contact@git.strangeplanet.fr>* @licence Apache License, Version 2.0*/(function (global, factory) {typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'), require('bootstrap')) :typeof define === 'function' && define.amd ? define(['jquery', 'bootstrap'], factory) :(global = global || self, factory(global.jQuery));}(this, function ($) { 'use strict';$ = $ && $.hasOwnProperty('default') ? $['default'] : $;function _defineProperties(target, props) {for (var i = 0; i < props.length; i++) {var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);}}function _createClass(Constructor, protoProps, staticProps) {if (protoProps) _defineProperties(Constructor.prototype, protoProps);if (staticProps) _defineProperties(Constructor, staticProps);return Constructor;}function _defineProperty(obj, key, value) {if (key in obj) {Object.defineProperty(obj, key, {value: value,enumerable: true,configurable: true,writable: true});} else {obj[key] = value;}return obj;}function _objectSpread(target) {for (var i = 1; i < arguments.length; i++) {var source = arguments[i] != null ? arguments[i] : {};var ownKeys = Object.keys(source);if (typeof Object.getOwnPropertySymbols === 'function') {ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {return Object.getOwnPropertyDescriptor(source, sym).enumerable;}));}ownKeys.forEach(function (key) {_defineProperty(target, key, source[key]);});}return target;}function _inheritsLoose(subClass, superClass) {subClass.prototype = Object.create(superClass.prototype);subClass.prototype.constructor = subClass;subClass.__proto__ = superClass;}if (typeof $.fn.popover === 'undefined' || $.fn.popover.Constructor.VERSION.split('.').shift() !== '4') {throw new Error('Bootstrap Confirmation 4 requires Bootstrap Popover 4');}var Popover = $.fn.popover.Constructor;/*** ------------------------------------------------------------------------* Constants* ------------------------------------------------------------------------*/var NAME = 'confirmation';var VERSION = '4.1.0';var DATA_KEY = "bs." + NAME;var EVENT_KEY = "." + DATA_KEY;var JQUERY_NO_CONFLICT = $.fn[NAME];var BTN_CLASS_BASE = 'h-100 d-flex align-items-center';var BTN_CLASS_DEFAULT = 'btn btn-sm';var DefaultType = _objectSpread({}, Popover.DefaultType, {singleton: 'boolean',popout: 'boolean',copyAttributes: '(string|array)',onConfirm: 'function',onCancel: 'function',btnOkClass: 'string',btnOkLabel: 'string',btnOkIconClass: 'string',btnOkIconContent: 'string',btnCancelClass: 'string',btnCancelLabel: 'string',btnCancelIconClass: 'string',btnCancelIconContent: 'string',buttons: 'array'});var Default = _objectSpread({}, Popover.Default, {_attributes: {},_selector: null,placement: 'top',title: 'Are you sure?',trigger: 'click',confirmationEvent: undefined,content: '',singleton: false,popout: false,copyAttributes: 'href target',onConfirm: $.noop,onCancel: $.noop,btnOkClass: BTN_CLASS_DEFAULT + " btn-primary",btnOkLabel: 'Yes',btnOkIconClass: '',btnOkIconContent: '',btnCancelClass: BTN_CLASS_DEFAULT + " btn-secondary",btnCancelLabel: 'No',btnCancelIconClass: '',btnCancelIconContent: '',buttons: [],// @formatter:offtemplate: "\n<div class=\"popover confirmation\">\n <div class=\"arrow\"></div>\n <h3 class=\"popover-header\"></h3>\n <div class=\"popover-body\">\n <p class=\"confirmation-content\"></p>\n <div class=\"confirmation-buttons text-center\">\n <div class=\"btn-group\"></div>\n </div>\n </div>\n</div>" // @formatter:on});if (Default.whiteList) {Default.whiteList['*'].push('data-apply', 'data-dismiss');}var ClassName = {FADE: 'fade',SHOW: 'show'};var Selector = {TITLE: '.popover-header',CONTENT: '.confirmation-content',BUTTONS: '.confirmation-buttons .btn-group'};var Keymap = {13: 'Enter',27: 'Escape',39: 'ArrowRight',40: 'ArrowDown'};var Event = {HIDE: "hide" + EVENT_KEY,HIDDEN: "hidden" + EVENT_KEY,SHOW: "show" + EVENT_KEY,SHOWN: "shown" + EVENT_KEY,INSERTED: "inserted" + EVENT_KEY,CLICK: "click" + EVENT_KEY,FOCUSIN: "focusin" + EVENT_KEY,FOCUSOUT: "focusout" + EVENT_KEY,MOUSEENTER: "mouseenter" + EVENT_KEY,MOUSELEAVE: "mouseleave" + EVENT_KEY,CONFIRMED: "confirmed" + EVENT_KEY,CANCELED: "canceled" + EVENT_KEY,KEYUP: "keyup" + EVENT_KEY};/*** ------------------------------------------------------------------------* Class Definition* ------------------------------------------------------------------------*/// keep track of the last openned confirmation for keyboard navigationvar activeConfirmation;var Confirmation =/*#__PURE__*/function (_Popover) {_inheritsLoose(Confirmation, _Popover);_createClass(Confirmation, null, [{key: "VERSION",// Gettersget: function get() {return VERSION;}}, {key: "Default",get: function get() {return Default;}}, {key: "NAME",get: function get() {return NAME;}}, {key: "DATA_KEY",get: function get() {return DATA_KEY;}}, {key: "Event",get: function get() {return Event;}}, {key: "EVENT_KEY",get: function get() {return EVENT_KEY;}}, {key: "DefaultType",get: function get() {return DefaultType;} // Constructor}]);function Confirmation(element, config) {var _this;_this = _Popover.call(this, element, config) || this;if ((_this.config.popout || _this.config.singleton) && !_this.config.rootSelector) {throw new Error('The rootSelector option is required to use popout and singleton features since jQuery 3.');} // keep trace of selectors_this._isDelegate = false;if (config.selector) {// container of buttonsconfig._selector = config.rootSelector + " " + config.selector;_this.config._selector = config._selector;} else if (config._selector) {// children of container_this.config._selector = config._selector;_this._isDelegate = true;} else {// standalone_this.config._selector = config.rootSelector;}if (_this.config.confirmationEvent === undefined) {_this.config.confirmationEvent = _this.config.trigger;}if (!_this.config.selector) {_this._copyAttributes();}_this._setConfirmationListeners();return _this;} // Overridesvar _proto = Confirmation.prototype;_proto.isWithContent = function isWithContent() {return true;};_proto.setContent = function setContent() {var $tip = $(this.getTipElement());var content = this._getContent();if (typeof content === 'function') {content = content.call(this.element);}this.setElementContent($tip.find(Selector.TITLE), this.getTitle());$tip.find(Selector.CONTENT).toggle(!!content);if (content) {this.setElementContent($tip.find(Selector.CONTENT), content);}if (this.config.buttons.length > 0) {this._setButtons($tip, this.config.buttons);} else {this._setStandardButtons($tip);}$tip.removeClass(ClassName.FADE + " " + ClassName.SHOW);this._setupKeyupEvent();};_proto.dispose = function dispose() {$('body').off(Event.CLICK + "." + this.uid);this.eventBody = false;this._cleanKeyupEvent();_Popover.prototype.dispose.call(this);};_proto.hide = function hide(callback) {this._cleanKeyupEvent();_Popover.prototype.hide.call(this, callback);} // Private/*** Copy the value of `copyAttributes` on the config object* @private*/;_proto._copyAttributes = function _copyAttributes() {var _this2 = this;this.config._attributes = {};if (this.config.copyAttributes) {if (typeof this.config.copyAttributes === 'string') {this.config.copyAttributes = this.config.copyAttributes.split(' ');}} else {this.config.copyAttributes = [];}this.config.copyAttributes.forEach(function (attr) {_this2.config._attributes[attr] = $(_this2.element).attr(attr);});}/*** Custom event listeners for popouts and singletons* @private*/;_proto._setConfirmationListeners = function _setConfirmationListeners() {var self = this;if (!this.config.selector) {// cancel original event$(this.element).on(this.config.trigger, function (e, ack) {if (!ack) {e.preventDefault();e.stopPropagation();e.stopImmediatePropagation();}}); // manage singleton$(this.element).on(Event.SHOWN, function () {if (self.config.singleton) {// close all other popover already initialized$(self.config._selector).not($(this)).filter(function () {return $(this).data(DATA_KEY) !== undefined;}).confirmation('hide');}});} else {// cancel original event$(this.element).on(this.config.trigger, this.config.selector, function (e, ack) {if (!ack) {e.preventDefault();e.stopPropagation();e.stopImmediatePropagation();}});}if (!this._isDelegate) {// manage popoutthis.eventBody = false;this.uid = this.element.id || Confirmation.getUID(NAME + "_group");$(this.element).on(Event.SHOWN, function () {if (self.config.popout && !self.eventBody) {self.eventBody = $('body').on(Event.CLICK + "." + self.uid, function (e) {if ($(self.config._selector).is(e.target) || $(self.config._selector).has(e.target).length > 0) {return;} // close all popover already initialized$(self.config._selector).filter(function () {return $(this).data(DATA_KEY) !== undefined;}).confirmation('hide');$('body').off(Event.CLICK + "." + self.uid);self.eventBody = false;});}});}}/*** Init the standard ok/cancel buttons* @param $tip* @private*/;_proto._setStandardButtons = function _setStandardButtons($tip) {var buttons = [{class: this.config.btnOkClass,label: this.config.btnOkLabel,iconClass: this.config.btnOkIconClass,iconContent: this.config.btnOkIconContent,attr: this.config._attributes}, {class: this.config.btnCancelClass,label: this.config.btnCancelLabel,iconClass: this.config.btnCancelIconClass,iconContent: this.config.btnCancelIconContent,cancel: true}];this._setButtons($tip, buttons);}/*** Init the buttons* @param $tip* @param buttons* @private*/;_proto._setButtons = function _setButtons($tip, buttons) {var self = this;var $group = $tip.find(Selector.BUTTONS).empty();buttons.forEach(function (button) {var btn = $('<a href="#"></a>').addClass(BTN_CLASS_BASE).addClass(button.class || BTN_CLASS_DEFAULT + " btn-secondary").html(button.label || '').attr(button.attr || {});if (button.iconClass || button.iconContent) {btn.prepend($('<i></i>').addClass(button.iconClass || '').text(button.iconContent || ''));}btn.one('click', function (e) {if ($(this).attr('href') === '#') {e.preventDefault();}if (button.onClick) {button.onClick.call($(self.element));}if (button.cancel) {self.config.onCancel.call(self.element, button.value);$(self.element).trigger(Event.CANCELED, [button.value]);} else {self.config.onConfirm.call(self.element, button.value);$(self.element).trigger(Event.CONFIRMED, [button.value]);$(self.element).trigger(self.config.confirmationEvent, [true]);}self.hide();});$group.append(btn);});}/*** Install the keyboatd event handler* @private*/;_proto._setupKeyupEvent = function _setupKeyupEvent() {activeConfirmation = this;$(window).off(Event.KEYUP).on(Event.KEYUP, this._onKeyup.bind(this));}/*** Remove the keyboard event handler* @private*/;_proto._cleanKeyupEvent = function _cleanKeyupEvent() {if (activeConfirmation === this) {activeConfirmation = undefined;$(window).off(Event.KEYUP);}}/*** Event handler for keyboard navigation* @param event* @private*/;_proto._onKeyup = function _onKeyup(event) {if (!this.tip) {this._cleanKeyupEvent();return;}var $tip = $(this.getTipElement());var key = event.key || Keymap[event.keyCode || event.which];var $group = $tip.find(Selector.BUTTONS);var $active = $group.find('.active');var $next;switch (key) {case 'Escape':this.hide();break;case 'ArrowRight':if ($active.length && $active.next().length) {$next = $active.next();} else {$next = $group.children().first();}$active.removeClass('active');$next.addClass('active').focus();break;case 'ArrowLeft':if ($active.length && $active.prev().length) {$next = $active.prev();} else {$next = $group.children().last();}$active.removeClass('active');$next.addClass('active').focus();break;default:break;}} // Static/*** Generates an uui, copied from Bootrap's utils* @param {string} prefix* @returns {string}*/;Confirmation.getUID = function getUID(prefix) {var uid = prefix;do {// eslint-disable-next-line no-bitwiseuid += ~~(Math.random() * 1000000); // "~~" acts like a faster Math.floor() here} while (document.getElementById(uid));return uid;};Confirmation._jQueryInterface = function _jQueryInterface(config) {return this.each(function () {var data = $(this).data(DATA_KEY);var _config = typeof config === 'object' ? config : {};_config.rootSelector = $(this).selector || _config.rootSelector; // this.selector removed in jQuery > 3if (!data && /destroy|hide/.test(config)) {return;}if (!data) {data = new Confirmation(this, _config);$(this).data(DATA_KEY, data);}if (typeof config === 'string') {if (typeof data[config] === 'undefined') {throw new TypeError("No method named \"" + config + "\"");}data[config]();}});};return Confirmation;}(Popover);/*** ------------------------------------------------------------------------* jQuery* ------------------------------------------------------------------------*/$.fn[NAME] = Confirmation._jQueryInterface;$.fn[NAME].Constructor = Confirmation;$.fn[NAME].noConflict = function () {$.fn[NAME] = JQUERY_NO_CONFLICT;return Confirmation._jQueryInterface;};}));//# sourceMappingURL=bootstrap-confirmation.js.map