button.js 5.17 KB
Newer Older
fat's avatar
fat committed
1
2
3
4
5
6
7
/**
 * --------------------------------------------------------------------------
 * Bootstrap (v4.0.0): button.js
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 * --------------------------------------------------------------------------
 */

Jacob Thornton's avatar
Jacob Thornton committed
8
9
10
11
12
13
'use strict';

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; }; })();

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }

fat's avatar
fat committed
14
15
16
17
18
19
20
21
22
23
24
var Button = (function ($) {

  /**
   * ------------------------------------------------------------------------
   * Constants
   * ------------------------------------------------------------------------
   */

  var NAME = 'button';
  var VERSION = '4.0.0';
  var DATA_KEY = 'bs.button';
fat's avatar
fat committed
25
26
  var EVENT_KEY = '.' + DATA_KEY;
  var DATA_API_KEY = '.data-api';
fat's avatar
fat committed
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
  var JQUERY_NO_CONFLICT = $.fn[NAME];
  var TRANSITION_DURATION = 150;

  var ClassName = {
    ACTIVE: 'active',
    BUTTON: 'btn',
    FOCUS: 'focus'
  };

  var Selector = {
    DATA_TOGGLE_CARROT: '[data-toggle^="button"]',
    DATA_TOGGLE: '[data-toggle="buttons"]',
    INPUT: 'input',
    ACTIVE: '.active',
    BUTTON: '.btn'
  };

  var Event = {
Jacob Thornton's avatar
Jacob Thornton committed
45
46
    CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY,
    FOCUS_BLUR_DATA_API: 'focus' + EVENT_KEY + DATA_API_KEY + ' ' + ('blur' + EVENT_KEY + DATA_API_KEY)
fat's avatar
fat committed
47
48
49
50
51
52
53
54
55
56
57
58
  };

  /**
   * ------------------------------------------------------------------------
   * Class Definition
   * ------------------------------------------------------------------------
   */

  var Button = (function () {
    function Button(element) {
      _classCallCheck(this, Button);

fat's avatar
fat committed
59
      this._element = element;
fat's avatar
fat committed
60
61
    }

Jacob Thornton's avatar
Jacob Thornton committed
62
63
64
65
66
67
68
69
    /**
     * ------------------------------------------------------------------------
     * Data Api implementation
     * ------------------------------------------------------------------------
     */

    // getters

fat's avatar
fat committed
70
71
72
73
74
75
76
    _createClass(Button, [{
      key: 'toggle',

      // public

      value: function toggle() {
        var triggerChangeEvent = true;
fat's avatar
fat committed
77
        var rootElement = $(this._element).closest(Selector.DATA_TOGGLE)[0];
fat's avatar
fat committed
78
79

        if (rootElement) {
fat's avatar
fat committed
80
          var input = $(this._element).find(Selector.INPUT)[0];
fat's avatar
fat committed
81
82
83

          if (input) {
            if (input.type === 'radio') {
fat's avatar
fat committed
84
              if (input.checked && $(this._element).hasClass(ClassName.ACTIVE)) {
fat's avatar
fat committed
85
86
87
88
89
90
91
92
93
94
95
                triggerChangeEvent = false;
              } else {
                var activeElement = $(rootElement).find(Selector.ACTIVE)[0];

                if (activeElement) {
                  $(activeElement).removeClass(ClassName.ACTIVE);
                }
              }
            }

            if (triggerChangeEvent) {
fat's avatar
fat committed
96
97
              input.checked = !$(this._element).hasClass(ClassName.ACTIVE);
              $(this._element).trigger('change');
fat's avatar
fat committed
98
99
100
            }
          }
        } else {
fat's avatar
fat committed
101
          this._element.setAttribute('aria-pressed', !$(this._element).hasClass(ClassName.ACTIVE));
fat's avatar
fat committed
102
103
104
        }

        if (triggerChangeEvent) {
fat's avatar
fat committed
105
          $(this._element).toggleClass(ClassName.ACTIVE);
fat's avatar
fat committed
106
107
        }
      }
fat's avatar
fat committed
108
109
110
111
112
113
    }, {
      key: 'dispose',
      value: function dispose() {
        $.removeData(this._element, DATA_KEY);
        this._element = null;
      }
fat's avatar
fat committed
114
115
116

      // static

Jacob Thornton's avatar
Jacob Thornton committed
117
118
    }], [{
      key: '_jQueryInterface',
fat's avatar
fat committed
119
120
121
122
123
124
125
126
127
128
129
130
131
132
      value: function _jQueryInterface(config) {
        return this.each(function () {
          var data = $(this).data(DATA_KEY);

          if (!data) {
            data = new Button(this);
            $(this).data(DATA_KEY, data);
          }

          if (config === 'toggle') {
            data[config]();
          }
        });
      }
Jacob Thornton's avatar
Jacob Thornton committed
133
134
135
136
137
    }, {
      key: 'VERSION',
      get: function get() {
        return VERSION;
      }
fat's avatar
fat committed
138
139
140
141
142
    }]);

    return Button;
  })();

fat's avatar
fat committed
143
  $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {
fat's avatar
fat committed
144
145
146
147
148
149
150
151
152
    event.preventDefault();

    var button = event.target;

    if (!$(button).hasClass(ClassName.BUTTON)) {
      button = $(button).closest(Selector.BUTTON);
    }

    Button._jQueryInterface.call($(button), 'toggle');
fat's avatar
fat committed
153
  }).on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {
fat's avatar
fat committed
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
    var button = $(event.target).closest(Selector.BUTTON)[0];
    $(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type));
  });

  /**
   * ------------------------------------------------------------------------
   * jQuery
   * ------------------------------------------------------------------------
   */

  $.fn[NAME] = Button._jQueryInterface;
  $.fn[NAME].Constructor = Button;
  $.fn[NAME].noConflict = function () {
    $.fn[NAME] = JQUERY_NO_CONFLICT;
    return Button._jQueryInterface;
  };

  return Button;
})(jQuery);
Jacob Thornton's avatar
Jacob Thornton committed
173
//# sourceMappingURL=button.js.map