scala-news-reader

rss/atom news reader in scala

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

bootstrap-collapse.js

(4735B)


      1 /* =============================================================
      2  * bootstrap-collapse.js v2.3.2
      3  * http://twitter.github.com/bootstrap/javascript.html#collapse
      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  /* COLLAPSE PUBLIC CLASS DEFINITION
     27   * ================================ */
     28 
     29   var Collapse = function (element, options) {
     30     this.$element = $(element)
     31     this.options = $.extend({}, $.fn.collapse.defaults, options)
     32 
     33     if (this.options.parent) {
     34       this.$parent = $(this.options.parent)
     35     }
     36 
     37     this.options.toggle && this.toggle()
     38   }
     39 
     40   Collapse.prototype = {
     41 
     42     constructor: Collapse
     43 
     44   , dimension: function () {
     45       var hasWidth = this.$element.hasClass('width')
     46       return hasWidth ? 'width' : 'height'
     47     }
     48 
     49   , show: function () {
     50       var dimension
     51         , scroll
     52         , actives
     53         , hasData
     54 
     55       if (this.transitioning || this.$element.hasClass('in')) return
     56 
     57       dimension = this.dimension()
     58       scroll = $.camelCase(['scroll', dimension].join('-'))
     59       actives = this.$parent && this.$parent.find('> .accordion-group > .in')
     60 
     61       if (actives && actives.length) {
     62         hasData = actives.data('collapse')
     63         if (hasData && hasData.transitioning) return
     64         actives.collapse('hide')
     65         hasData || actives.data('collapse', null)
     66       }
     67 
     68       this.$element[dimension](0)
     69       this.transition('addClass', $.Event('show'), 'shown')
     70       $.support.transition && this.$element[dimension](this.$element[0][scroll])
     71     }
     72 
     73   , hide: function () {
     74       var dimension
     75       if (this.transitioning || !this.$element.hasClass('in')) return
     76       dimension = this.dimension()
     77       this.reset(this.$element[dimension]())
     78       this.transition('removeClass', $.Event('hide'), 'hidden')
     79       this.$element[dimension](0)
     80     }
     81 
     82   , reset: function (size) {
     83       var dimension = this.dimension()
     84 
     85       this.$element
     86         .removeClass('collapse')
     87         [dimension](size || 'auto')
     88         [0].offsetWidth
     89 
     90       this.$element[size !== null ? 'addClass' : 'removeClass']('collapse')
     91 
     92       return this
     93     }
     94 
     95   , transition: function (method, startEvent, completeEvent) {
     96       var that = this
     97         , complete = function () {
     98             if (startEvent.type == 'show') that.reset()
     99             that.transitioning = 0
    100             that.$element.trigger(completeEvent)
    101           }
    102 
    103       this.$element.trigger(startEvent)
    104 
    105       if (startEvent.isDefaultPrevented()) return
    106 
    107       this.transitioning = 1
    108 
    109       this.$element[method]('in')
    110 
    111       $.support.transition && this.$element.hasClass('collapse') ?
    112         this.$element.one($.support.transition.end, complete) :
    113         complete()
    114     }
    115 
    116   , toggle: function () {
    117       this[this.$element.hasClass('in') ? 'hide' : 'show']()
    118     }
    119 
    120   }
    121 
    122 
    123  /* COLLAPSE PLUGIN DEFINITION
    124   * ========================== */
    125 
    126   var old = $.fn.collapse
    127 
    128   $.fn.collapse = function (option) {
    129     return this.each(function () {
    130       var $this = $(this)
    131         , data = $this.data('collapse')
    132         , options = $.extend({}, $.fn.collapse.defaults, $this.data(), typeof option == 'object' && option)
    133       if (!data) $this.data('collapse', (data = new Collapse(this, options)))
    134       if (typeof option == 'string') data[option]()
    135     })
    136   }
    137 
    138   $.fn.collapse.defaults = {
    139     toggle: true
    140   }
    141 
    142   $.fn.collapse.Constructor = Collapse
    143 
    144 
    145  /* COLLAPSE NO CONFLICT
    146   * ==================== */
    147 
    148   $.fn.collapse.noConflict = function () {
    149     $.fn.collapse = old
    150     return this
    151   }
    152 
    153 
    154  /* COLLAPSE DATA-API
    155   * ================= */
    156 
    157   $(document).on('click.collapse.data-api', '[data-toggle=collapse]', function (e) {
    158     var $this = $(this), href
    159       , target = $this.attr('data-target')
    160         || e.preventDefault()
    161         || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
    162       , option = $(target).data('collapse') ? 'toggle' : $this.data()
    163     $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
    164     $(target).collapse(option)
    165   })
    166 
    167 }(window.jQuery);