File diff 81062ec426ce → ecd9ba4a37ca
bootstrap-3.0.0/js/button.js
Show inline comments
 
new file 100644
 
/* ========================================================================
 
 * Bootstrap: button.js v3.0.0
 
 * http://twbs.github.com/bootstrap/javascript.html#buttons
 
 * ========================================================================
 
 * Copyright 2013 Twitter, Inc.
 
 *
 
 * Licensed under the Apache License, Version 2.0 (the "License");
 
 * you may not use this file except in compliance with the License.
 
 * You may obtain a copy of the License at
 
 *
 
 * http://www.apache.org/licenses/LICENSE-2.0
 
 *
 
 * Unless required by applicable law or agreed to in writing, software
 
 * distributed under the License is distributed on an "AS IS" BASIS,
 
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
 * See the License for the specific language governing permissions and
 
 * limitations under the License.
 
 * ======================================================================== */
 

	
 

	
 
+function ($) { "use strict";
 

	
 
  // BUTTON PUBLIC CLASS DEFINITION
 
  // ==============================
 

	
 
  var Button = function (element, options) {
 
    this.$element = $(element)
 
    this.options  = $.extend({}, Button.DEFAULTS, options)
 
  }
 

	
 
  Button.DEFAULTS = {
 
    loadingText: 'loading...'
 
  }
 

	
 
  Button.prototype.setState = function (state) {
 
    var d    = 'disabled'
 
    var $el  = this.$element
 
    var val  = $el.is('input') ? 'val' : 'html'
 
    var data = $el.data()
 

	
 
    state = state + 'Text'
 

	
 
    if (!data.resetText) $el.data('resetText', $el[val]())
 

	
 
    $el[val](data[state] || this.options[state])
 

	
 
    // push to event loop to allow forms to submit
 
    setTimeout(function () {
 
      state == 'loadingText' ?
 
        $el.addClass(d).attr(d, d) :
 
        $el.removeClass(d).removeAttr(d);
 
    }, 0)
 
  }
 

	
 
  Button.prototype.toggle = function () {
 
    var $parent = this.$element.closest('[data-toggle="buttons"]')
 

	
 
    if ($parent.length) {
 
      var $input = this.$element.find('input')
 
        .prop('checked', !this.$element.hasClass('active'))
 
        .trigger('change')
 
      if ($input.prop('type') === 'radio') $parent.find('.active').removeClass('active')
 
    }
 

	
 
    this.$element.toggleClass('active')
 
  }
 

	
 

	
 
  // BUTTON PLUGIN DEFINITION
 
  // ========================
 

	
 
  var old = $.fn.button
 

	
 
  $.fn.button = function (option) {
 
    return this.each(function () {
 
      var $this   = $(this)
 
      var data    = $this.data('bs.button')
 
      var options = typeof option == 'object' && option
 

	
 
      if (!data) $this.data('bs.button', (data = new Button(this, options)))
 

	
 
      if (option == 'toggle') data.toggle()
 
      else if (option) data.setState(option)
 
    })
 
  }
 

	
 
  $.fn.button.Constructor = Button
 

	
 

	
 
  // BUTTON NO CONFLICT
 
  // ==================
 

	
 
  $.fn.button.noConflict = function () {
 
    $.fn.button = old
 
    return this
 
  }
 

	
 

	
 
  // BUTTON DATA-API
 
  // ===============
 

	
 
  $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) {
 
    var $btn = $(e.target)
 
    if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
 
    $btn.button('toggle')
 
    e.preventDefault()
 
  })
 

	
 
}(window.jQuery);