button.js 5.0 KB

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