button.js 5.46 KB
Newer Older
Mark Otto's avatar
dist    
Mark Otto committed
1
2
'use strict';

Mark Otto's avatar
grunt    
Mark Otto committed
3
4
5
6
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
7
8
/**
 * --------------------------------------------------------------------------
Mark Otto's avatar
Mark Otto committed
9
 * Bootstrap (v4.0.0-beta): button.js
fat's avatar
fat committed
10
11
12
13
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 * --------------------------------------------------------------------------
 */

Mark Otto's avatar
dist    
Mark Otto committed
14
var Button = function () {
fat's avatar
fat committed
15
16
17
18
19
20
21
22

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

  var NAME = 'button';
Mark Otto's avatar
Mark Otto committed
23
  var VERSION = '4.0.0-beta';
fat's avatar
fat committed
24
  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
  var JQUERY_NO_CONFLICT = $.fn[NAME];

  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
44
45
    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
46

Mark Otto's avatar
dist    
Mark Otto committed
47
48
49
50
51
    /**
     * ------------------------------------------------------------------------
     * Class Definition
     * ------------------------------------------------------------------------
     */
fat's avatar
fat committed
52

Mark Otto's avatar
dist    
Mark Otto committed
53
  };
Mark Otto's avatar
grunt    
Mark Otto committed
54
  var Button = function () {
fat's avatar
fat committed
55
56
57
    function Button(element) {
      _classCallCheck(this, Button);

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

Jacob Thornton's avatar
Jacob Thornton committed
61
62
    // getters

Mark Otto's avatar
dist    
Mark Otto committed
63
64
65
66
67
    _createClass(Button, [{
      key: 'toggle',


      // public
fat's avatar
fat committed
68

Mark Otto's avatar
dist    
Mark Otto committed
69
70
71
72
      value: function toggle() {
        var triggerChangeEvent = true;
        var addAriaPressed = true;
        var rootElement = $(this._element).closest(Selector.DATA_TOGGLE)[0];
fat's avatar
fat committed
73

Mark Otto's avatar
dist    
Mark Otto committed
74
75
        if (rootElement) {
          var input = $(this._element).find(Selector.INPUT)[0];
fat's avatar
fat committed
76

Mark Otto's avatar
dist    
Mark Otto committed
77
78
79
80
81
82
          if (input) {
            if (input.type === 'radio') {
              if (input.checked && $(this._element).hasClass(ClassName.ACTIVE)) {
                triggerChangeEvent = false;
              } else {
                var activeElement = $(rootElement).find(Selector.ACTIVE)[0];
fat's avatar
fat committed
83

Mark Otto's avatar
dist    
Mark Otto committed
84
85
86
                if (activeElement) {
                  $(activeElement).removeClass(ClassName.ACTIVE);
                }
fat's avatar
fat committed
87
88
89
              }
            }

Mark Otto's avatar
dist    
Mark Otto committed
90
91
92
93
94
95
            if (triggerChangeEvent) {
              if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) {
                return;
              }
              input.checked = !$(this._element).hasClass(ClassName.ACTIVE);
              $(input).trigger('change');
Johann-S's avatar
build    
Johann-S committed
96
            }
Mark Otto's avatar
dist    
Mark Otto committed
97
98
99

            input.focus();
            addAriaPressed = false;
fat's avatar
fat committed
100
          }
Mark Otto's avatar
dist    
Mark Otto committed
101
        }
fat's avatar
fat committed
102

Mark Otto's avatar
dist    
Mark Otto committed
103
104
        if (addAriaPressed) {
          this._element.setAttribute('aria-pressed', !$(this._element).hasClass(ClassName.ACTIVE));
fat's avatar
fat committed
105
        }
Mark Otto's avatar
grunt    
Mark Otto committed
106

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

Mark Otto's avatar
dist    
Mark Otto committed
118
      // static
fat's avatar
fat committed
119

Mark Otto's avatar
dist    
Mark Otto committed
120
121
122
123
124
    }], [{
      key: '_jQueryInterface',
      value: function _jQueryInterface(config) {
        return this.each(function () {
          var data = $(this).data(DATA_KEY);
Mark Otto's avatar
grunt    
Mark Otto committed
125

Mark Otto's avatar
dist    
Mark Otto committed
126
127
128
129
          if (!data) {
            data = new Button(this);
            $(this).data(DATA_KEY, data);
          }
Mark Otto's avatar
grunt    
Mark Otto committed
130

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

    return Button;
Mark Otto's avatar
grunt    
Mark Otto committed
144
145
146
147
148
149
150
  }();

  /**
   * ------------------------------------------------------------------------
   * Data Api implementation
   * ------------------------------------------------------------------------
   */
fat's avatar
fat committed
151

fat's avatar
fat committed
152
  $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {
fat's avatar
fat committed
153
154
155
156
157
158
159
160
161
    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
162
  }).on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {
fat's avatar
fat committed
163
164
    var button = $(event.target).closest(Selector.BUTTON)[0];
    $(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type));
Mark Otto's avatar
Mark Otto committed
165
  });
fat's avatar
fat committed
166
167
168
169
170
171
172

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

Mark Otto's avatar
Mark Otto committed
173
  $.fn[NAME] = Button._jQueryInterface;
fat's avatar
fat committed
174
175
176
177
178
179
180
  $.fn[NAME].Constructor = Button;
  $.fn[NAME].noConflict = function () {
    $.fn[NAME] = JQUERY_NO_CONFLICT;
    return Button._jQueryInterface;
  };

  return Button;
Mark Otto's avatar
grunt    
Mark Otto committed
181
}(jQuery);
Mark Otto's avatar
build    
Mark Otto committed
182
//# sourceMappingURL=button.js.map