button.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. (function (global, factory) {
  2. if (typeof define === 'function' && define.amd) {
  3. define(['exports', 'module'], factory);
  4. } else if (typeof exports !== 'undefined' && typeof module !== 'undefined') {
  5. factory(exports, module);
  6. } else {
  7. var mod = {
  8. exports: {}
  9. };
  10. factory(mod.exports, mod);
  11. global.button = mod.exports;
  12. }
  13. })(this, function (exports, module) {
  14. /**
  15. * --------------------------------------------------------------------------
  16. * Bootstrap (v4.0.0): button.js
  17. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
  18. * --------------------------------------------------------------------------
  19. */
  20. 'use strict';
  21. var _createClass = (function () { 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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
  22. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
  23. var Button = (function ($) {
  24. /**
  25. * ------------------------------------------------------------------------
  26. * Constants
  27. * ------------------------------------------------------------------------
  28. */
  29. var NAME = 'button';
  30. var VERSION = '4.0.0';
  31. var DATA_KEY = 'bs.button';
  32. var EVENT_KEY = '.' + DATA_KEY;
  33. var DATA_API_KEY = '.data-api';
  34. var JQUERY_NO_CONFLICT = $.fn[NAME];
  35. var ClassName = {
  36. ACTIVE: 'active',
  37. BUTTON: 'btn',
  38. FOCUS: 'focus'
  39. };
  40. var Selector = {
  41. DATA_TOGGLE_CARROT: '[data-toggle^="button"]',
  42. DATA_TOGGLE: '[data-toggle="buttons"]',
  43. INPUT: 'input',
  44. ACTIVE: '.active',
  45. BUTTON: '.btn'
  46. };
  47. var Event = {
  48. CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY,
  49. FOCUS_BLUR_DATA_API: 'focus' + EVENT_KEY + DATA_API_KEY + ' ' + ('blur' + EVENT_KEY + DATA_API_KEY)
  50. };
  51. /**
  52. * ------------------------------------------------------------------------
  53. * Class Definition
  54. * ------------------------------------------------------------------------
  55. */
  56. var Button = (function () {
  57. function Button(element) {
  58. _classCallCheck(this, Button);
  59. this._element = element;
  60. }
  61. /**
  62. * ------------------------------------------------------------------------
  63. * Data Api implementation
  64. * ------------------------------------------------------------------------
  65. */
  66. // getters
  67. _createClass(Button, [{
  68. key: 'toggle',
  69. // public
  70. value: function toggle() {
  71. var triggerChangeEvent = true;
  72. var rootElement = $(this._element).closest(Selector.DATA_TOGGLE)[0];
  73. if (rootElement) {
  74. var input = $(this._element).find(Selector.INPUT)[0];
  75. if (input) {
  76. if (input.type === 'radio') {
  77. if (input.checked && $(this._element).hasClass(ClassName.ACTIVE)) {
  78. triggerChangeEvent = false;
  79. } else {
  80. var activeElement = $(rootElement).find(Selector.ACTIVE)[0];
  81. if (activeElement) {
  82. $(activeElement).removeClass(ClassName.ACTIVE);
  83. }
  84. }
  85. }
  86. if (triggerChangeEvent) {
  87. input.checked = !$(this._element).hasClass(ClassName.ACTIVE);
  88. $(this._element).trigger('change');
  89. }
  90. }
  91. } else {
  92. this._element.setAttribute('aria-pressed', !$(this._element).hasClass(ClassName.ACTIVE));
  93. }
  94. if (triggerChangeEvent) {
  95. $(this._element).toggleClass(ClassName.ACTIVE);
  96. }
  97. }
  98. }, {
  99. key: 'dispose',
  100. value: function dispose() {
  101. $.removeData(this._element, DATA_KEY);
  102. this._element = null;
  103. }
  104. // static
  105. }], [{
  106. key: '_jQueryInterface',
  107. value: function _jQueryInterface(config) {
  108. return this.each(function () {
  109. var data = $(this).data(DATA_KEY);
  110. if (!data) {
  111. data = new Button(this);
  112. $(this).data(DATA_KEY, data);
  113. }
  114. if (config === 'toggle') {
  115. data[config]();
  116. }
  117. });
  118. }
  119. }, {
  120. key: 'VERSION',
  121. get: function get() {
  122. return VERSION;
  123. }
  124. }]);
  125. return Button;
  126. })();
  127. $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {
  128. event.preventDefault();
  129. var button = event.target;
  130. if (!$(button).hasClass(ClassName.BUTTON)) {
  131. button = $(button).closest(Selector.BUTTON);
  132. }
  133. Button._jQueryInterface.call($(button), 'toggle');
  134. }).on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {
  135. var button = $(event.target).closest(Selector.BUTTON)[0];
  136. $(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type));
  137. });
  138. /**
  139. * ------------------------------------------------------------------------
  140. * jQuery
  141. * ------------------------------------------------------------------------
  142. */
  143. $.fn[NAME] = Button._jQueryInterface;
  144. $.fn[NAME].Constructor = Button;
  145. $.fn[NAME].noConflict = function () {
  146. $.fn[NAME] = JQUERY_NO_CONFLICT;
  147. return Button._jQueryInterface;
  148. };
  149. return Button;
  150. })(jQuery);
  151. module.exports = Button;
  152. });