github.com/kayoticsully/syncthing@v0.8.9-0.20140724133906-c45a2fdc03f8/assets/bootstrap-3.1.1/js/tab.js (about)

     1  /* ========================================================================
     2   * Bootstrap: tab.js v3.1.1
     3   * http://getbootstrap.com/javascript/#tabs
     4   * ========================================================================
     5   * Copyright 2011-2014 Twitter, Inc.
     6   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
     7   * ======================================================================== */
     8  
     9  
    10  +function ($) {
    11    'use strict';
    12  
    13    // TAB CLASS DEFINITION
    14    // ====================
    15  
    16    var Tab = function (element) {
    17      this.element = $(element)
    18    }
    19  
    20    Tab.prototype.show = function () {
    21      var $this    = this.element
    22      var $ul      = $this.closest('ul:not(.dropdown-menu)')
    23      var selector = $this.data('target')
    24  
    25      if (!selector) {
    26        selector = $this.attr('href')
    27        selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
    28      }
    29  
    30      if ($this.parent('li').hasClass('active')) return
    31  
    32      var previous = $ul.find('.active:last a')[0]
    33      var e        = $.Event('show.bs.tab', {
    34        relatedTarget: previous
    35      })
    36  
    37      $this.trigger(e)
    38  
    39      if (e.isDefaultPrevented()) return
    40  
    41      var $target = $(selector)
    42  
    43      this.activate($this.parent('li'), $ul)
    44      this.activate($target, $target.parent(), function () {
    45        $this.trigger({
    46          type: 'shown.bs.tab',
    47          relatedTarget: previous
    48        })
    49      })
    50    }
    51  
    52    Tab.prototype.activate = function (element, container, callback) {
    53      var $active    = container.find('> .active')
    54      var transition = callback
    55        && $.support.transition
    56        && $active.hasClass('fade')
    57  
    58      function next() {
    59        $active
    60          .removeClass('active')
    61          .find('> .dropdown-menu > .active')
    62          .removeClass('active')
    63  
    64        element.addClass('active')
    65  
    66        if (transition) {
    67          element[0].offsetWidth // reflow for transition
    68          element.addClass('in')
    69        } else {
    70          element.removeClass('fade')
    71        }
    72  
    73        if (element.parent('.dropdown-menu')) {
    74          element.closest('li.dropdown').addClass('active')
    75        }
    76  
    77        callback && callback()
    78      }
    79  
    80      transition ?
    81        $active
    82          .one($.support.transition.end, next)
    83          .emulateTransitionEnd(150) :
    84        next()
    85  
    86      $active.removeClass('in')
    87    }
    88  
    89  
    90    // TAB PLUGIN DEFINITION
    91    // =====================
    92  
    93    var old = $.fn.tab
    94  
    95    $.fn.tab = function ( option ) {
    96      return this.each(function () {
    97        var $this = $(this)
    98        var data  = $this.data('bs.tab')
    99  
   100        if (!data) $this.data('bs.tab', (data = new Tab(this)))
   101        if (typeof option == 'string') data[option]()
   102      })
   103    }
   104  
   105    $.fn.tab.Constructor = Tab
   106  
   107  
   108    // TAB NO CONFLICT
   109    // ===============
   110  
   111    $.fn.tab.noConflict = function () {
   112      $.fn.tab = old
   113      return this
   114    }
   115  
   116  
   117    // TAB DATA-API
   118    // ============
   119  
   120    $(document).on('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
   121      e.preventDefault()
   122      $(this).tab('show')
   123    })
   124  
   125  }(jQuery);