vendor: 5,991 bytes, lines 1-212
1/* ======================================================================== 2 * Bootstrap: collapse.js v3.3.7 3 * http://getbootstrap.com/javascript/#collapse 4 * ======================================================================== 5 * Copyright 2011-2016 Twitter, Inc. 6 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 7 * ======================================================================== */ 8 9/* jshint latedef: false */ 10 11+function ($) { 12 'use strict'; 13 14 // COLLAPSE PUBLIC CLASS DEFINITION 15 // ================================ 16 17 var Collapse = function (element, options) { 18 this.$element = $(element) 19 this.options = $.extend({}, Collapse.DEFAULTS, options) 20 this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' + 21 '[data-toggle="collapse"][data-target="#' + element.id + '"]') 22 this.transitioning = null 23 24 if (this.options.parent) { 25 this.$parent = this.getParent() 26 } else { 27 this.addAriaAndCollapsedClass(this.$element, this.$trigger) 28 } 29 30 if (this.options.toggle) this.toggle() 31 } 32 33 Collapse.VERSION = '3.3.7' 34 35 Collapse.TRANSITION_DURATION = 350 36 37 Collapse.DEFAULTS = { 38 toggle: true 39 } 40 41 Collapse.prototype.dimension = function () { 42 var hasWidth = this.$element.hasClass('width') 43 return hasWidth ? 'width' : 'height' 44 } 45 46 Collapse.prototype.show = function () { 47 if (this.transitioning || this.$element.hasClass('in')) return 48 49 var activesData 50 var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing') 51 52 if (actives && actives.length) { 53 activesData = actives.data('bs.collapse') 54 if (activesData && activesData.transitioning) return 55 } 56 57 var startEvent = $.Event('show.bs.collapse') 58 this.$element.trigger(startEvent) 59 if (startEvent.isDefaultPrevented()) return 60 61 if (actives && actives.length) { 62 Plugin.call(actives, 'hide') 63 activesData || actives.data('bs.collapse', null) 64 } 65 66 var dimension = this.dimension() 67 68 this.$element 69 .removeClass('collapse') 70 .addClass('collapsing')[dimension](0) 71 .attr('aria-expanded', true) 72 73 this.$trigger 74 .removeClass('collapsed') 75 .attr('aria-expanded', true) 76 77 this.transitioning = 1 78 79 var complete = function () { 80 this.$element 81 .removeClass('collapsing') 82 .addClass('collapse in')[dimension]('') 83 this.transitioning = 0 84 this.$element 85 .trigger('shown.bs.collapse') 86 } 87 88 if (!$.support.transition) return complete.call(this) 89 90 var scrollSize = $.camelCase(['scroll', dimension].join('-')) 91 92 this.$element 93 .one('bsTransitionEnd', $.proxy(complete, this)) 94 .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize]) 95 } 96 97 Collapse.prototype.hide = function () { 98 if (this.transitioning || !this.$element.hasClass('in')) return 99 100 var startEvent = $.Event('hide.bs.collapse') 101 this.$element.trigger(startEvent) 102 if (startEvent.isDefaultPrevented()) return 103 104 var dimension = this.dimension() 105 106 this.$element[dimension](this.$element[dimension]())[0].offsetHeight 107 108 this.$element 109 .addClass('collapsing') 110 .removeClass('collapse in') 111 .attr('aria-expanded', false) 112 113 this.$trigger 114 .addClass('collapsed') 115 .attr('aria-expanded', false) 116 117 this.transitioning = 1 118 119 var complete = function () { 120 this.transitioning = 0 121 this.$element 122 .removeClass('collapsing') 123 .addClass('collapse') 124 .trigger('hidden.bs.collapse') 125 } 126 127 if (!$.support.transition) return complete.call(this) 128 129 this.$element 130 [dimension](0) 131 .one('bsTransitionEnd', $.proxy(complete, this)) 132 .emulateTransitionEnd(Collapse.TRANSITION_DURATION) 133 } 134 135 Collapse.prototype.toggle = function () { 136 this[this.$element.hasClass('in') ? 'hide' : 'show']() 137 } 138 139 Collapse.prototype.getParent = function () { 140 return $(this.options.parent) 141 .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]') 142 .each($.proxy(function (i, element) { 143 var $element = $(element) 144 this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element) 145 }, this)) 146 .end() 147 } 148 149 Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) { 150 var isOpen = $element.hasClass('in') 151 152 $element.attr('aria-expanded', isOpen) 153 $trigger 154 .toggleClass('collapsed', !isOpen) 155 .attr('aria-expanded', isOpen) 156 } 157 158 function getTargetFromTrigger($trigger) { 159 var href 160 var target = $trigger.attr('data-target') 161 || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7 162 163 return $(target) 164 } 165 166 167 // COLLAPSE PLUGIN DEFINITION 168 // ========================== 169 170 function Plugin(option) { 171 return this.each(function () { 172 var $this = $(this) 173 var data = $this.data('bs.collapse') 174 var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) 175 176 if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false 177 if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) 178 if (typeof option == 'string') data[option]() 179 }) 180 } 181 182 var old = $.fn.collapse 183 184 $.fn.collapse = Plugin 185 $.fn.collapse.Constructor = Collapse 186 187 188 // COLLAPSE NO CONFLICT 189 // ==================== 190 191 $.fn.collapse.noConflict = function () { 192 $.fn.collapse = old 193 return this 194 } 195 196 197 // COLLAPSE DATA-API 198 // ================= 199 200 $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) { 201 var $this = $(this) 202 203 if (!$this.attr('data-target')) e.preventDefault() 204 205 var $target = getTargetFromTrigger($this) 206 var data = $target.data('bs.collapse') 207 var option = data ? 'toggle' : $this.data() 208 209 Plugin.call($target, option) 210 }) 211 212}(jQuery);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.