scala-news-reader

rss/atom news reader in scala

git clone https://9o.is/git/scala-news-reader.git

bootstrap-tab.js

(3496B)


      1 /* ========================================================
      2  * bootstrap-tab.js v2.3.2
      3  * http://twitter.github.com/bootstrap/javascript.html#tabs
      4  * ========================================================
      5  * Copyright 2012 Twitter, Inc.
      6  *
      7  * Licensed under the Apache License, Version 2.0 (the "License");
      8  * you may not use this file except in compliance with the License.
      9  * You may obtain a copy of the License at
     10  *
     11  * http://www.apache.org/licenses/LICENSE-2.0
     12  *
     13  * Unless required by applicable law or agreed to in writing, software
     14  * distributed under the License is distributed on an "AS IS" BASIS,
     15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     16  * See the License for the specific language governing permissions and
     17  * limitations under the License.
     18  * ======================================================== */
     19 
     20 
     21 !function ($) {
     22 
     23   "use strict"; // jshint ;_;
     24 
     25 
     26  /* TAB CLASS DEFINITION
     27   * ==================== */
     28 
     29   var Tab = function (element) {
     30     this.element = $(element)
     31   }
     32 
     33   Tab.prototype = {
     34 
     35     constructor: Tab
     36 
     37   , show: function () {
     38       var $this = this.element
     39         , $ul = $this.closest('ul:not(.dropdown-menu)')
     40         , selector = $this.attr('data-target')
     41         , previous
     42         , $target
     43         , e
     44 
     45       if (!selector) {
     46         selector = $this.attr('href')
     47         selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
     48       }
     49 
     50       if ( $this.parent('li').hasClass('active') ) return
     51 
     52       previous = $ul.find('.active:last a')[0]
     53 
     54       e = $.Event('show', {
     55         relatedTarget: previous
     56       })
     57 
     58       $this.trigger(e)
     59 
     60       if (e.isDefaultPrevented()) return
     61 
     62       $target = $(selector)
     63 
     64       this.activate($this.parent('li'), $ul)
     65       this.activate($target, $target.parent(), function () {
     66         $this.trigger({
     67           type: 'shown'
     68         , relatedTarget: previous
     69         })
     70       })
     71     }
     72 
     73   , activate: function ( element, container, callback) {
     74       var $active = container.find('> .active')
     75         , transition = callback
     76             && $.support.transition
     77             && $active.hasClass('fade')
     78 
     79       function next() {
     80         $active
     81           .removeClass('active')
     82           .find('> .dropdown-menu > .active')
     83           .removeClass('active')
     84 
     85         element.addClass('active')
     86 
     87         if (transition) {
     88           element[0].offsetWidth // reflow for transition
     89           element.addClass('in')
     90         } else {
     91           element.removeClass('fade')
     92         }
     93 
     94         if ( element.parent('.dropdown-menu') ) {
     95           element.closest('li.dropdown').addClass('active')
     96         }
     97 
     98         callback && callback()
     99       }
    100 
    101       transition ?
    102         $active.one($.support.transition.end, next) :
    103         next()
    104 
    105       $active.removeClass('in')
    106     }
    107   }
    108 
    109 
    110  /* TAB PLUGIN DEFINITION
    111   * ===================== */
    112 
    113   var old = $.fn.tab
    114 
    115   $.fn.tab = function ( option ) {
    116     return this.each(function () {
    117       var $this = $(this)
    118         , data = $this.data('tab')
    119       if (!data) $this.data('tab', (data = new Tab(this)))
    120       if (typeof option == 'string') data[option]()
    121     })
    122   }
    123 
    124   $.fn.tab.Constructor = Tab
    125 
    126 
    127  /* TAB NO CONFLICT
    128   * =============== */
    129 
    130   $.fn.tab.noConflict = function () {
    131     $.fn.tab = old
    132     return this
    133   }
    134 
    135 
    136  /* TAB DATA-API
    137   * ============ */
    138 
    139   $(document).on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
    140     e.preventDefault()
    141     $(this).tab('show')
    142   })
    143 
    144 }(window.jQuery);