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.6): 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.6';
  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. $(input).trigger('change');
  68. }
  69. input.focus();
  70. }
  71. }
  72. this._element.setAttribute('aria-pressed', !$(this._element).hasClass(ClassName.ACTIVE));
  73. if (triggerChangeEvent) {
  74. $(this._element).toggleClass(ClassName.ACTIVE);
  75. }
  76. };
  77. Button.prototype.dispose = function dispose() {
  78. $.removeData(this._element, DATA_KEY);
  79. this._element = null;
  80. };
  81. // static
  82. Button._jQueryInterface = function _jQueryInterface(config) {
  83. return this.each(function () {
  84. var data = $(this).data(DATA_KEY);
  85. if (!data) {
  86. data = new Button(this);
  87. $(this).data(DATA_KEY, data);
  88. }
  89. if (config === 'toggle') {
  90. data[config]();
  91. }
  92. });
  93. };
  94. _createClass(Button, null, [{
  95. key: 'VERSION',
  96. get: function get() {
  97. return VERSION;
  98. }
  99. }]);
  100. return Button;
  101. }();
  102. /**
  103. * ------------------------------------------------------------------------
  104. * Data Api implementation
  105. * ------------------------------------------------------------------------
  106. */
  107. $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {
  108. event.preventDefault();
  109. var button = event.target;
  110. if (!$(button).hasClass(ClassName.BUTTON)) {
  111. button = $(button).closest(Selector.BUTTON);
  112. }
  113. Button._jQueryInterface.call($(button), 'toggle');
  114. }).on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {
  115. var button = $(event.target).closest(Selector.BUTTON)[0];
  116. $(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type));
  117. });
  118. /**
  119. * ------------------------------------------------------------------------
  120. * jQuery
  121. * ------------------------------------------------------------------------
  122. */
  123. $.fn[NAME] = Button._jQueryInterface;
  124. $.fn[NAME].Constructor = Button;
  125. $.fn[NAME].noConflict = function () {
  126. $.fn[NAME] = JQUERY_NO_CONFLICT;
  127. return Button._jQueryInterface;
  128. };
  129. return Button;
  130. }(jQuery);
  131. //# sourceMappingURL=button.js.map