mirror of https://github.com/twbs/bootstrap.git
add collapse
This commit is contained in:
parent
1b183e2ff7
commit
8bab38bb71
|
@ -67,6 +67,7 @@ module.exports = function (grunt) {
|
||||||
'js/dist/alert.js': 'js/src/alert.js',
|
'js/dist/alert.js': 'js/src/alert.js',
|
||||||
'js/dist/button.js': 'js/src/button.js',
|
'js/dist/button.js': 'js/src/button.js',
|
||||||
'js/dist/carousel.js': 'js/src/carousel.js',
|
'js/dist/carousel.js': 'js/src/carousel.js',
|
||||||
|
'js/dist/collapse.js': 'js/src/collapse.js',
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
237
js/carousel.js
237
js/carousel.js
|
@ -1,237 +0,0 @@
|
||||||
/* ========================================================================
|
|
||||||
* Bootstrap: carousel.js v3.3.4
|
|
||||||
* http://getbootstrap.com/javascript/#carousel
|
|
||||||
* ========================================================================
|
|
||||||
* Copyright 2011-2015 Twitter, Inc.
|
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
|
||||||
* ======================================================================== */
|
|
||||||
|
|
||||||
|
|
||||||
+function ($) {
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
// CAROUSEL CLASS DEFINITION
|
|
||||||
// =========================
|
|
||||||
|
|
||||||
var Carousel = function (element, options) {
|
|
||||||
this.$element = $(element)
|
|
||||||
this.$indicators = this.$element.find('.carousel-indicators')
|
|
||||||
this.options = options
|
|
||||||
this.paused = null
|
|
||||||
this.sliding = null
|
|
||||||
this.interval = null
|
|
||||||
this.$active = null
|
|
||||||
this.$items = null
|
|
||||||
|
|
||||||
this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
|
|
||||||
|
|
||||||
this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
|
|
||||||
.on('mouseenter.bs.carousel', $.proxy(this.pause, this))
|
|
||||||
.on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
|
|
||||||
}
|
|
||||||
|
|
||||||
Carousel.VERSION = '3.3.4'
|
|
||||||
|
|
||||||
Carousel.TRANSITION_DURATION = 600
|
|
||||||
|
|
||||||
Carousel.DEFAULTS = {
|
|
||||||
interval: 5000,
|
|
||||||
pause: 'hover',
|
|
||||||
wrap: true,
|
|
||||||
keyboard: true
|
|
||||||
}
|
|
||||||
|
|
||||||
Carousel.prototype.keydown = function (e) {
|
|
||||||
if (/input|textarea/i.test(e.target.tagName)) return
|
|
||||||
switch (e.which) {
|
|
||||||
case 37: this.prev(); break
|
|
||||||
case 39: this.next(); break
|
|
||||||
default: return
|
|
||||||
}
|
|
||||||
|
|
||||||
e.preventDefault()
|
|
||||||
}
|
|
||||||
|
|
||||||
Carousel.prototype.cycle = function (e) {
|
|
||||||
e || (this.paused = false)
|
|
||||||
|
|
||||||
this.interval && clearInterval(this.interval)
|
|
||||||
|
|
||||||
this.options.interval
|
|
||||||
&& !this.paused
|
|
||||||
&& (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
|
|
||||||
|
|
||||||
return this
|
|
||||||
}
|
|
||||||
|
|
||||||
Carousel.prototype.getItemIndex = function (item) {
|
|
||||||
this.$items = item.parent().children('.item')
|
|
||||||
return this.$items.index(item || this.$active)
|
|
||||||
}
|
|
||||||
|
|
||||||
Carousel.prototype.getItemForDirection = function (direction, active) {
|
|
||||||
var activeIndex = this.getItemIndex(active)
|
|
||||||
var willWrap = (direction == 'prev' && activeIndex === 0)
|
|
||||||
|| (direction == 'next' && activeIndex == (this.$items.length - 1))
|
|
||||||
if (willWrap && !this.options.wrap) return active
|
|
||||||
var delta = direction == 'prev' ? -1 : 1
|
|
||||||
var itemIndex = (activeIndex + delta) % this.$items.length
|
|
||||||
return this.$items.eq(itemIndex)
|
|
||||||
}
|
|
||||||
|
|
||||||
Carousel.prototype.to = function (pos) {
|
|
||||||
var that = this
|
|
||||||
var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
|
|
||||||
|
|
||||||
if (pos > (this.$items.length - 1) || pos < 0) return
|
|
||||||
|
|
||||||
if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
|
|
||||||
if (activeIndex == pos) return this.pause().cycle()
|
|
||||||
|
|
||||||
return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
|
|
||||||
}
|
|
||||||
|
|
||||||
Carousel.prototype.pause = function (e) {
|
|
||||||
e || (this.paused = true)
|
|
||||||
|
|
||||||
if (this.$element.find('.next, .prev').length && $.support.transition) {
|
|
||||||
this.$element.trigger($.support.transition.end)
|
|
||||||
this.cycle(true)
|
|
||||||
}
|
|
||||||
|
|
||||||
this.interval = clearInterval(this.interval)
|
|
||||||
|
|
||||||
return this
|
|
||||||
}
|
|
||||||
|
|
||||||
Carousel.prototype.next = function () {
|
|
||||||
if (this.sliding) return
|
|
||||||
return this.slide('next')
|
|
||||||
}
|
|
||||||
|
|
||||||
Carousel.prototype.prev = function () {
|
|
||||||
if (this.sliding) return
|
|
||||||
return this.slide('prev')
|
|
||||||
}
|
|
||||||
|
|
||||||
Carousel.prototype.slide = function (type, next) {
|
|
||||||
var $active = this.$element.find('.item.active')
|
|
||||||
var $next = next || this.getItemForDirection(type, $active)
|
|
||||||
var isCycling = this.interval
|
|
||||||
var direction = type == 'next' ? 'left' : 'right'
|
|
||||||
var that = this
|
|
||||||
|
|
||||||
if ($next.hasClass('active')) return (this.sliding = false)
|
|
||||||
|
|
||||||
var relatedTarget = $next[0]
|
|
||||||
var slideEvent = $.Event('slide.bs.carousel', {
|
|
||||||
relatedTarget: relatedTarget,
|
|
||||||
direction: direction
|
|
||||||
})
|
|
||||||
this.$element.trigger(slideEvent)
|
|
||||||
if (slideEvent.isDefaultPrevented()) return
|
|
||||||
|
|
||||||
this.sliding = true
|
|
||||||
|
|
||||||
isCycling && this.pause()
|
|
||||||
|
|
||||||
if (this.$indicators.length) {
|
|
||||||
this.$indicators.find('.active').removeClass('active')
|
|
||||||
var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
|
|
||||||
$nextIndicator && $nextIndicator.addClass('active')
|
|
||||||
}
|
|
||||||
|
|
||||||
var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
|
|
||||||
if ($.support.transition && this.$element.hasClass('slide')) {
|
|
||||||
$next.addClass(type)
|
|
||||||
$next[0].offsetWidth // force reflow
|
|
||||||
$active.addClass(direction)
|
|
||||||
$next.addClass(direction)
|
|
||||||
$active
|
|
||||||
.one('bsTransitionEnd', function () {
|
|
||||||
$next.removeClass([type, direction].join(' ')).addClass('active')
|
|
||||||
$active.removeClass(['active', direction].join(' '))
|
|
||||||
that.sliding = false
|
|
||||||
setTimeout(function () {
|
|
||||||
that.$element.trigger(slidEvent)
|
|
||||||
}, 0)
|
|
||||||
})
|
|
||||||
.emulateTransitionEnd(Carousel.TRANSITION_DURATION)
|
|
||||||
} else {
|
|
||||||
$active.removeClass('active')
|
|
||||||
$next.addClass('active')
|
|
||||||
this.sliding = false
|
|
||||||
this.$element.trigger(slidEvent)
|
|
||||||
}
|
|
||||||
|
|
||||||
isCycling && this.cycle()
|
|
||||||
|
|
||||||
return this
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// CAROUSEL PLUGIN DEFINITION
|
|
||||||
// ==========================
|
|
||||||
|
|
||||||
function Plugin(option) {
|
|
||||||
return this.each(function () {
|
|
||||||
var $this = $(this)
|
|
||||||
var data = $this.data('bs.carousel')
|
|
||||||
var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
|
|
||||||
var action = typeof option == 'string' ? option : options.slide
|
|
||||||
|
|
||||||
if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
|
|
||||||
if (typeof option == 'number') data.to(option)
|
|
||||||
else if (action) data[action]()
|
|
||||||
else if (options.interval) data.pause().cycle()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
var old = $.fn.carousel
|
|
||||||
|
|
||||||
$.fn.carousel = Plugin
|
|
||||||
$.fn.carousel.Constructor = Carousel
|
|
||||||
|
|
||||||
|
|
||||||
// CAROUSEL NO CONFLICT
|
|
||||||
// ====================
|
|
||||||
|
|
||||||
$.fn.carousel.noConflict = function () {
|
|
||||||
$.fn.carousel = old
|
|
||||||
return this
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// CAROUSEL DATA-API
|
|
||||||
// =================
|
|
||||||
|
|
||||||
var clickHandler = function (e) {
|
|
||||||
var href
|
|
||||||
var $this = $(this)
|
|
||||||
var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
|
|
||||||
if (!$target.hasClass('carousel')) return
|
|
||||||
var options = $.extend({}, $target.data(), $this.data())
|
|
||||||
var slideIndex = $this.attr('data-slide-to')
|
|
||||||
if (slideIndex) options.interval = false
|
|
||||||
|
|
||||||
Plugin.call($target, options)
|
|
||||||
|
|
||||||
if (slideIndex) {
|
|
||||||
$target.data('bs.carousel').to(slideIndex)
|
|
||||||
}
|
|
||||||
|
|
||||||
e.preventDefault()
|
|
||||||
}
|
|
||||||
|
|
||||||
$(document)
|
|
||||||
.on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
|
|
||||||
.on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
|
|
||||||
|
|
||||||
$(window).on('load', function () {
|
|
||||||
$('[data-ride="carousel"]').each(function () {
|
|
||||||
var $carousel = $(this)
|
|
||||||
Plugin.call($carousel, $carousel.data())
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
}(jQuery);
|
|
211
js/collapse.js
211
js/collapse.js
|
@ -1,211 +0,0 @@
|
||||||
/* ========================================================================
|
|
||||||
* Bootstrap: collapse.js v3.3.4
|
|
||||||
* http://getbootstrap.com/javascript/#collapse
|
|
||||||
* ========================================================================
|
|
||||||
* Copyright 2011-2015 Twitter, Inc.
|
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
|
||||||
* ======================================================================== */
|
|
||||||
|
|
||||||
|
|
||||||
+function ($) {
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
// COLLAPSE PUBLIC CLASS DEFINITION
|
|
||||||
// ================================
|
|
||||||
|
|
||||||
var Collapse = function (element, options) {
|
|
||||||
this.$element = $(element)
|
|
||||||
this.options = $.extend({}, Collapse.DEFAULTS, options)
|
|
||||||
this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
|
|
||||||
'[data-toggle="collapse"][data-target="#' + element.id + '"]')
|
|
||||||
this.transitioning = null
|
|
||||||
|
|
||||||
if (this.options.parent) {
|
|
||||||
this.$parent = this.getParent()
|
|
||||||
} else {
|
|
||||||
this.addAriaAndCollapsedClass(this.$element, this.$trigger)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.options.toggle) this.toggle()
|
|
||||||
}
|
|
||||||
|
|
||||||
Collapse.VERSION = '3.3.4'
|
|
||||||
|
|
||||||
Collapse.TRANSITION_DURATION = 350
|
|
||||||
|
|
||||||
Collapse.DEFAULTS = {
|
|
||||||
toggle: true
|
|
||||||
}
|
|
||||||
|
|
||||||
Collapse.prototype.dimension = function () {
|
|
||||||
var hasWidth = this.$element.hasClass('width')
|
|
||||||
return hasWidth ? 'width' : 'height'
|
|
||||||
}
|
|
||||||
|
|
||||||
Collapse.prototype.show = function () {
|
|
||||||
if (this.transitioning || this.$element.hasClass('in')) return
|
|
||||||
|
|
||||||
var activesData
|
|
||||||
var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
|
|
||||||
|
|
||||||
if (actives && actives.length) {
|
|
||||||
activesData = actives.data('bs.collapse')
|
|
||||||
if (activesData && activesData.transitioning) return
|
|
||||||
}
|
|
||||||
|
|
||||||
var startEvent = $.Event('show.bs.collapse')
|
|
||||||
this.$element.trigger(startEvent)
|
|
||||||
if (startEvent.isDefaultPrevented()) return
|
|
||||||
|
|
||||||
if (actives && actives.length) {
|
|
||||||
Plugin.call(actives, 'hide')
|
|
||||||
activesData || actives.data('bs.collapse', null)
|
|
||||||
}
|
|
||||||
|
|
||||||
var dimension = this.dimension()
|
|
||||||
|
|
||||||
this.$element
|
|
||||||
.removeClass('collapse')
|
|
||||||
.addClass('collapsing')[dimension](0)
|
|
||||||
.attr('aria-expanded', true)
|
|
||||||
|
|
||||||
this.$trigger
|
|
||||||
.removeClass('collapsed')
|
|
||||||
.attr('aria-expanded', true)
|
|
||||||
|
|
||||||
this.transitioning = 1
|
|
||||||
|
|
||||||
var complete = function () {
|
|
||||||
this.$element
|
|
||||||
.removeClass('collapsing')
|
|
||||||
.addClass('collapse in')[dimension]('')
|
|
||||||
this.transitioning = 0
|
|
||||||
this.$element
|
|
||||||
.trigger('shown.bs.collapse')
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$.support.transition) return complete.call(this)
|
|
||||||
|
|
||||||
var scrollSize = $.camelCase(['scroll', dimension].join('-'))
|
|
||||||
|
|
||||||
this.$element
|
|
||||||
.one('bsTransitionEnd', $.proxy(complete, this))
|
|
||||||
.emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
|
|
||||||
}
|
|
||||||
|
|
||||||
Collapse.prototype.hide = function () {
|
|
||||||
if (this.transitioning || !this.$element.hasClass('in')) return
|
|
||||||
|
|
||||||
var startEvent = $.Event('hide.bs.collapse')
|
|
||||||
this.$element.trigger(startEvent)
|
|
||||||
if (startEvent.isDefaultPrevented()) return
|
|
||||||
|
|
||||||
var dimension = this.dimension()
|
|
||||||
|
|
||||||
this.$element[dimension](this.$element[dimension]())[0].offsetHeight
|
|
||||||
|
|
||||||
this.$element
|
|
||||||
.addClass('collapsing')
|
|
||||||
.removeClass('collapse in')
|
|
||||||
.attr('aria-expanded', false)
|
|
||||||
|
|
||||||
this.$trigger
|
|
||||||
.addClass('collapsed')
|
|
||||||
.attr('aria-expanded', false)
|
|
||||||
|
|
||||||
this.transitioning = 1
|
|
||||||
|
|
||||||
var complete = function () {
|
|
||||||
this.transitioning = 0
|
|
||||||
this.$element
|
|
||||||
.removeClass('collapsing')
|
|
||||||
.addClass('collapse')
|
|
||||||
.trigger('hidden.bs.collapse')
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$.support.transition) return complete.call(this)
|
|
||||||
|
|
||||||
this.$element
|
|
||||||
[dimension](0)
|
|
||||||
.one('bsTransitionEnd', $.proxy(complete, this))
|
|
||||||
.emulateTransitionEnd(Collapse.TRANSITION_DURATION)
|
|
||||||
}
|
|
||||||
|
|
||||||
Collapse.prototype.toggle = function () {
|
|
||||||
this[this.$element.hasClass('in') ? 'hide' : 'show']()
|
|
||||||
}
|
|
||||||
|
|
||||||
Collapse.prototype.getParent = function () {
|
|
||||||
return $(this.options.parent)
|
|
||||||
.find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
|
|
||||||
.each($.proxy(function (i, element) {
|
|
||||||
var $element = $(element)
|
|
||||||
this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
|
|
||||||
}, this))
|
|
||||||
.end()
|
|
||||||
}
|
|
||||||
|
|
||||||
Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
|
|
||||||
var isOpen = $element.hasClass('in')
|
|
||||||
|
|
||||||
$element.attr('aria-expanded', isOpen)
|
|
||||||
$trigger
|
|
||||||
.toggleClass('collapsed', !isOpen)
|
|
||||||
.attr('aria-expanded', isOpen)
|
|
||||||
}
|
|
||||||
|
|
||||||
function getTargetFromTrigger($trigger) {
|
|
||||||
var href
|
|
||||||
var target = $trigger.attr('data-target')
|
|
||||||
|| (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
|
|
||||||
|
|
||||||
return $(target)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// COLLAPSE PLUGIN DEFINITION
|
|
||||||
// ==========================
|
|
||||||
|
|
||||||
function Plugin(option) {
|
|
||||||
return this.each(function () {
|
|
||||||
var $this = $(this)
|
|
||||||
var data = $this.data('bs.collapse')
|
|
||||||
var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
|
|
||||||
|
|
||||||
if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false
|
|
||||||
if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
|
|
||||||
if (typeof option == 'string') data[option]()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
var old = $.fn.collapse
|
|
||||||
|
|
||||||
$.fn.collapse = Plugin
|
|
||||||
$.fn.collapse.Constructor = Collapse
|
|
||||||
|
|
||||||
|
|
||||||
// COLLAPSE NO CONFLICT
|
|
||||||
// ====================
|
|
||||||
|
|
||||||
$.fn.collapse.noConflict = function () {
|
|
||||||
$.fn.collapse = old
|
|
||||||
return this
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// COLLAPSE DATA-API
|
|
||||||
// =================
|
|
||||||
|
|
||||||
$(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
|
|
||||||
var $this = $(this)
|
|
||||||
|
|
||||||
if (!$this.attr('data-target')) e.preventDefault()
|
|
||||||
|
|
||||||
var $target = getTargetFromTrigger($this)
|
|
||||||
var data = $target.data('bs.collapse')
|
|
||||||
var option = data ? 'toggle' : $this.data()
|
|
||||||
|
|
||||||
Plugin.call($target, option)
|
|
||||||
})
|
|
||||||
|
|
||||||
}(jQuery);
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -26,11 +26,11 @@ var Carousel = (function ($) {
|
||||||
var TRANSITION_DURATION = 600;
|
var TRANSITION_DURATION = 600;
|
||||||
|
|
||||||
var Defaults = {
|
var Defaults = {
|
||||||
'interval': 5000,
|
interval: 5000,
|
||||||
'keyboard': true,
|
keyboard: true,
|
||||||
'slide': false,
|
slide: false,
|
||||||
'pause': 'hover',
|
pause: 'hover',
|
||||||
'wrap': true
|
wrap: true
|
||||||
};
|
};
|
||||||
|
|
||||||
var Direction = {
|
var Direction = {
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,322 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
|
||||||
|
|
||||||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* --------------------------------------------------------------------------
|
||||||
|
* Bootstrap (v4.0.0): collapse.js
|
||||||
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
|
* --------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
var Collapse = (function ($) {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ------------------------------------------------------------------------
|
||||||
|
* Constants
|
||||||
|
* ------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
var NAME = 'collapse';
|
||||||
|
var VERSION = '4.0.0';
|
||||||
|
var DATA_KEY = 'bs.collapse';
|
||||||
|
var JQUERY_NO_CONFLICT = $.fn[NAME];
|
||||||
|
var TRANSITION_DURATION = 600;
|
||||||
|
|
||||||
|
var Defaults = {
|
||||||
|
toggle: true,
|
||||||
|
parent: null
|
||||||
|
};
|
||||||
|
|
||||||
|
var Event = {
|
||||||
|
SHOW: 'show.bs.collapse',
|
||||||
|
SHOWN: 'shown.bs.collapse',
|
||||||
|
HIDE: 'hide.bs.collapse',
|
||||||
|
HIDDEN: 'hidden.bs.collapse',
|
||||||
|
CLICK: 'click.bs.collapse.data-api'
|
||||||
|
};
|
||||||
|
|
||||||
|
var ClassName = {
|
||||||
|
IN: 'in',
|
||||||
|
COLLAPSE: 'collapse',
|
||||||
|
COLLAPSING: 'collapsing',
|
||||||
|
COLLAPSED: 'collapsed'
|
||||||
|
};
|
||||||
|
|
||||||
|
var Dimension = {
|
||||||
|
WIDTH: 'width',
|
||||||
|
HEIGHT: 'height'
|
||||||
|
};
|
||||||
|
|
||||||
|
var Selector = {
|
||||||
|
ACTIVES: '.panel > .in, .panel > .collapsing',
|
||||||
|
DATA_TOGGLE: '[data-toggle="collapse"]'
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ------------------------------------------------------------------------
|
||||||
|
* Class Definition
|
||||||
|
* ------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
var Collapse = (function () {
|
||||||
|
function Collapse(element, config) {
|
||||||
|
_classCallCheck(this, Collapse);
|
||||||
|
|
||||||
|
this._isTransitioning = false;
|
||||||
|
this._element = element;
|
||||||
|
this._config = $.extend({}, Defaults, config);
|
||||||
|
this._triggerArray = $.makeArray($('[data-toggle="collapse"][href="#' + element.id + '"],' + ('[data-toggle="collapse"][data-target="#' + element.id + '"]')));
|
||||||
|
|
||||||
|
this._parent = this._config.parent ? this._getParent() : null;
|
||||||
|
|
||||||
|
if (!this._config.parent) {
|
||||||
|
this._addAriaAndCollapsedClass(this._element, this._triggerArray);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this._config.toggle) {
|
||||||
|
this.toggle();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_createClass(Collapse, [{
|
||||||
|
key: 'toggle',
|
||||||
|
|
||||||
|
// public
|
||||||
|
|
||||||
|
value: function toggle() {
|
||||||
|
if ($(this._element).hasClass(ClassName.IN)) {
|
||||||
|
this.hide();
|
||||||
|
} else {
|
||||||
|
this.show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
key: 'show',
|
||||||
|
value: function show() {
|
||||||
|
var _this = this;
|
||||||
|
|
||||||
|
if (this._isTransitioning || $(this._element).hasClass(ClassName.IN)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var activesData = undefined;
|
||||||
|
var actives = undefined;
|
||||||
|
|
||||||
|
if (this._parent) {
|
||||||
|
actives = $.makeArray($(Selector.ACTIVES));
|
||||||
|
if (!actives.length) {
|
||||||
|
actives = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (actives) {
|
||||||
|
activesData = $(actives).data(DATA_KEY);
|
||||||
|
if (activesData && activesData._isTransitioning) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var startEvent = $.Event(Event.SHOW);
|
||||||
|
$(this._element).trigger(startEvent);
|
||||||
|
if (startEvent.isDefaultPrevented()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (actives) {
|
||||||
|
Collapse._jQueryInterface.call($(actives), 'hide');
|
||||||
|
if (!activesData) {
|
||||||
|
$(actives).data(DATA_KEY, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var dimension = this._getDimension();
|
||||||
|
|
||||||
|
$(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING);
|
||||||
|
|
||||||
|
this._element.style[dimension] = 0;
|
||||||
|
this._element.setAttribute('aria-expanded', true);
|
||||||
|
|
||||||
|
if (this._triggerArray.length) {
|
||||||
|
$(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.setTransitioning(true);
|
||||||
|
|
||||||
|
var complete = function complete() {
|
||||||
|
$(_this._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.IN);
|
||||||
|
|
||||||
|
_this._element.style[dimension] = '';
|
||||||
|
|
||||||
|
_this.setTransitioning(false);
|
||||||
|
|
||||||
|
$(_this._element).trigger(Event.SHOWN);
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!Util.supportsTransitionEnd()) {
|
||||||
|
complete();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var scrollSize = 'scroll' + (dimension[0].toUpperCase() + dimension.slice(1));
|
||||||
|
|
||||||
|
$(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
|
||||||
|
|
||||||
|
this._element.style[dimension] = this._element[scrollSize] + 'px';
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
key: 'hide',
|
||||||
|
value: function hide() {
|
||||||
|
var _this2 = this;
|
||||||
|
|
||||||
|
if (this._isTransitioning || !$(this._element).hasClass(ClassName.IN)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var startEvent = $.Event(Event.HIDE);
|
||||||
|
$(this._element).trigger(startEvent);
|
||||||
|
if (startEvent.isDefaultPrevented()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var dimension = this._getDimension();
|
||||||
|
var offsetDimension = dimension === Dimension.WIDTH ? 'offsetWidth' : 'offsetHeight';
|
||||||
|
|
||||||
|
this._element.style[dimension] = this._element[offsetDimension] + 'px';
|
||||||
|
|
||||||
|
Util.reflow(this._element);
|
||||||
|
|
||||||
|
$(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.IN);
|
||||||
|
|
||||||
|
this._element.setAttribute('aria-expanded', false);
|
||||||
|
|
||||||
|
if (this._triggerArray.length) {
|
||||||
|
$(this._triggerArray).addClass(ClassName.COLLAPSED).attr('aria-expanded', false);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.setTransitioning(true);
|
||||||
|
|
||||||
|
var complete = function complete() {
|
||||||
|
_this2.setTransitioning(false);
|
||||||
|
$(_this2._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN);
|
||||||
|
};
|
||||||
|
|
||||||
|
this._element.style[dimension] = 0;
|
||||||
|
|
||||||
|
if (!Util.supportsTransitionEnd()) {
|
||||||
|
return complete();
|
||||||
|
}
|
||||||
|
|
||||||
|
$(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
key: 'setTransitioning',
|
||||||
|
value: function setTransitioning(isTransitioning) {
|
||||||
|
this._isTransitioning = isTransitioning;
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
key: '_getDimension',
|
||||||
|
|
||||||
|
// private
|
||||||
|
|
||||||
|
value: function _getDimension() {
|
||||||
|
var hasWidth = $(this._element).hasClass(Dimension.WIDTH);
|
||||||
|
return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
key: '_getParent',
|
||||||
|
value: function _getParent() {
|
||||||
|
var _this3 = this;
|
||||||
|
|
||||||
|
var parent = $(this._config.parent)[0];
|
||||||
|
var selector = '[data-toggle="collapse"][data-parent="' + this._config.parent + '"]';
|
||||||
|
|
||||||
|
$(parent).find(selector).each(function (i, element) {
|
||||||
|
_this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);
|
||||||
|
});
|
||||||
|
|
||||||
|
return parent;
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
key: '_addAriaAndCollapsedClass',
|
||||||
|
value: function _addAriaAndCollapsedClass(element, triggerArray) {
|
||||||
|
if (element) {
|
||||||
|
var isOpen = $(element).hasClass(ClassName.IN);
|
||||||
|
element.setAttribute('aria-expanded', isOpen);
|
||||||
|
|
||||||
|
if (triggerArray.length) {
|
||||||
|
$(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}], [{
|
||||||
|
key: '_getTargetFromElement',
|
||||||
|
|
||||||
|
// static
|
||||||
|
|
||||||
|
value: function _getTargetFromElement(element) {
|
||||||
|
var selector = Util.getSelectorFromElement(element);
|
||||||
|
return selector ? $(selector)[0] : null;
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
key: '_jQueryInterface',
|
||||||
|
value: function _jQueryInterface(config) {
|
||||||
|
return this.each(function () {
|
||||||
|
var $this = $(this);
|
||||||
|
var data = $this.data(DATA_KEY);
|
||||||
|
var _config = $.extend({}, Defaults, $this.data(), typeof config === 'object' && config);
|
||||||
|
|
||||||
|
if (!data && _config.toggle && /show|hide/.test(config)) {
|
||||||
|
_config.toggle = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!data) {
|
||||||
|
data = new Collapse(this, _config);
|
||||||
|
$this.data(DATA_KEY, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof config === 'string') {
|
||||||
|
data[config]();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}]);
|
||||||
|
|
||||||
|
return Collapse;
|
||||||
|
})();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ------------------------------------------------------------------------
|
||||||
|
* Data Api implementation
|
||||||
|
* ------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
$(document).on(Event.CLICK, Selector.DATA_TOGGLE, function (event) {
|
||||||
|
event.preventDefault();
|
||||||
|
|
||||||
|
var target = Collapse._getTargetFromElement(this);
|
||||||
|
|
||||||
|
var data = $(target).data(DATA_KEY);
|
||||||
|
var config = data ? 'toggle' : $(this).data();
|
||||||
|
|
||||||
|
Collapse._jQueryInterface.call($(target), config);
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ------------------------------------------------------------------------
|
||||||
|
* jQuery
|
||||||
|
* ------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
$.fn[NAME] = Collapse._jQueryInterface;
|
||||||
|
$.fn[NAME].Constructor = Collapse;
|
||||||
|
$.fn[NAME].noConflict = function () {
|
||||||
|
$.fn[NAME] = JQUERY_NO_CONFLICT;
|
||||||
|
return Collapse._jQueryInterface;
|
||||||
|
};
|
||||||
|
|
||||||
|
return Collapse;
|
||||||
|
})(jQuery);
|
||||||
|
//# sourceMappingURL=collapse.js.map
|
File diff suppressed because one or more lines are too long
|
@ -80,7 +80,7 @@ const Alert = (($) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!parent) {
|
if (!parent) {
|
||||||
parent = $(element).closest('.' + ClassName.ALERT)[0]
|
parent = $(element).closest(`.${ClassName.ALERT}`)[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
return parent
|
return parent
|
||||||
|
|
|
@ -0,0 +1,345 @@
|
||||||
|
import Util from './util'
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* --------------------------------------------------------------------------
|
||||||
|
* Bootstrap (v4.0.0): collapse.js
|
||||||
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
|
* --------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
const Collapse = (($) => {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ------------------------------------------------------------------------
|
||||||
|
* Constants
|
||||||
|
* ------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
const NAME = 'collapse'
|
||||||
|
const VERSION = '4.0.0'
|
||||||
|
const DATA_KEY = 'bs.collapse'
|
||||||
|
const JQUERY_NO_CONFLICT = $.fn[NAME]
|
||||||
|
const TRANSITION_DURATION = 600
|
||||||
|
|
||||||
|
const Defaults = {
|
||||||
|
toggle : true,
|
||||||
|
parent : null
|
||||||
|
}
|
||||||
|
|
||||||
|
const Event = {
|
||||||
|
SHOW : 'show.bs.collapse',
|
||||||
|
SHOWN : 'shown.bs.collapse',
|
||||||
|
HIDE : 'hide.bs.collapse',
|
||||||
|
HIDDEN : 'hidden.bs.collapse',
|
||||||
|
CLICK : 'click.bs.collapse.data-api'
|
||||||
|
}
|
||||||
|
|
||||||
|
const ClassName = {
|
||||||
|
IN : 'in',
|
||||||
|
COLLAPSE : 'collapse',
|
||||||
|
COLLAPSING : 'collapsing',
|
||||||
|
COLLAPSED : 'collapsed'
|
||||||
|
}
|
||||||
|
|
||||||
|
const Dimension = {
|
||||||
|
WIDTH : 'width',
|
||||||
|
HEIGHT : 'height'
|
||||||
|
}
|
||||||
|
|
||||||
|
const Selector = {
|
||||||
|
ACTIVES : '.panel > .in, .panel > .collapsing',
|
||||||
|
DATA_TOGGLE : '[data-toggle="collapse"]'
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ------------------------------------------------------------------------
|
||||||
|
* Class Definition
|
||||||
|
* ------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
class Collapse {
|
||||||
|
|
||||||
|
constructor(element, config) {
|
||||||
|
|
||||||
|
this._isTransitioning = false
|
||||||
|
this._element = element
|
||||||
|
this._config = $.extend({}, Defaults, config)
|
||||||
|
this._triggerArray = $.makeArray($(
|
||||||
|
`[data-toggle="collapse"][href="#${element.id}"],` +
|
||||||
|
`[data-toggle="collapse"][data-target="#${element.id}"]`
|
||||||
|
))
|
||||||
|
|
||||||
|
this._parent = this._config.parent ? this._getParent() : null
|
||||||
|
|
||||||
|
if (!this._config.parent) {
|
||||||
|
this._addAriaAndCollapsedClass(this._element, this._triggerArray)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this._config.toggle) {
|
||||||
|
this.toggle()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// public
|
||||||
|
|
||||||
|
toggle() {
|
||||||
|
if ($(this._element).hasClass(ClassName.IN)) {
|
||||||
|
this.hide()
|
||||||
|
} else {
|
||||||
|
this.show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
show() {
|
||||||
|
if (this._isTransitioning ||
|
||||||
|
$(this._element).hasClass(ClassName.IN)) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
let activesData
|
||||||
|
let actives
|
||||||
|
|
||||||
|
if (this._parent) {
|
||||||
|
actives = $.makeArray($(Selector.ACTIVES))
|
||||||
|
if (!actives.length) {
|
||||||
|
actives = null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (actives) {
|
||||||
|
activesData = $(actives).data(DATA_KEY)
|
||||||
|
if (activesData && activesData._isTransitioning) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let startEvent = $.Event(Event.SHOW)
|
||||||
|
$(this._element).trigger(startEvent)
|
||||||
|
if (startEvent.isDefaultPrevented()) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (actives) {
|
||||||
|
Collapse._jQueryInterface.call($(actives), 'hide')
|
||||||
|
if (!activesData) {
|
||||||
|
$(actives).data(DATA_KEY, null)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let dimension = this._getDimension()
|
||||||
|
|
||||||
|
$(this._element)
|
||||||
|
.removeClass(ClassName.COLLAPSE)
|
||||||
|
.addClass(ClassName.COLLAPSING)
|
||||||
|
|
||||||
|
this._element.style[dimension] = 0
|
||||||
|
this._element.setAttribute('aria-expanded', true)
|
||||||
|
|
||||||
|
if (this._triggerArray.length) {
|
||||||
|
$(this._triggerArray)
|
||||||
|
.removeClass(ClassName.COLLAPSED)
|
||||||
|
.attr('aria-expanded', true)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.setTransitioning(true)
|
||||||
|
|
||||||
|
let complete = () => {
|
||||||
|
$(this._element)
|
||||||
|
.removeClass(ClassName.COLLAPSING)
|
||||||
|
.addClass(ClassName.COLLAPSE)
|
||||||
|
.addClass(ClassName.IN)
|
||||||
|
|
||||||
|
this._element.style[dimension] = ''
|
||||||
|
|
||||||
|
this.setTransitioning(false)
|
||||||
|
|
||||||
|
$(this._element).trigger(Event.SHOWN)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Util.supportsTransitionEnd()) {
|
||||||
|
complete()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
let scrollSize = 'scroll'
|
||||||
|
+ (dimension[0].toUpperCase()
|
||||||
|
+ dimension.slice(1))
|
||||||
|
|
||||||
|
$(this._element)
|
||||||
|
.one(Util.TRANSITION_END, complete)
|
||||||
|
.emulateTransitionEnd(TRANSITION_DURATION)
|
||||||
|
|
||||||
|
this._element.style[dimension] = this._element[scrollSize] + 'px'
|
||||||
|
}
|
||||||
|
|
||||||
|
hide() {
|
||||||
|
if (this._isTransitioning ||
|
||||||
|
!$(this._element).hasClass(ClassName.IN)) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
let startEvent = $.Event(Event.HIDE)
|
||||||
|
$(this._element).trigger(startEvent)
|
||||||
|
if (startEvent.isDefaultPrevented()) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
let dimension = this._getDimension()
|
||||||
|
let offsetDimension = dimension === Dimension.WIDTH ?
|
||||||
|
'offsetWidth' : 'offsetHeight'
|
||||||
|
|
||||||
|
this._element.style[dimension] = this._element[offsetDimension] + 'px'
|
||||||
|
|
||||||
|
Util.reflow(this._element)
|
||||||
|
|
||||||
|
$(this._element)
|
||||||
|
.addClass(ClassName.COLLAPSING)
|
||||||
|
.removeClass(ClassName.COLLAPSE)
|
||||||
|
.removeClass(ClassName.IN)
|
||||||
|
|
||||||
|
this._element.setAttribute('aria-expanded', false)
|
||||||
|
|
||||||
|
if (this._triggerArray.length) {
|
||||||
|
$(this._triggerArray)
|
||||||
|
.addClass(ClassName.COLLAPSED)
|
||||||
|
.attr('aria-expanded', false)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.setTransitioning(true)
|
||||||
|
|
||||||
|
let complete = () => {
|
||||||
|
this.setTransitioning(false)
|
||||||
|
$(this._element)
|
||||||
|
.removeClass(ClassName.COLLAPSING)
|
||||||
|
.addClass(ClassName.COLLAPSE)
|
||||||
|
.trigger(Event.HIDDEN)
|
||||||
|
}
|
||||||
|
|
||||||
|
this._element.style[dimension] = 0
|
||||||
|
|
||||||
|
if (!Util.supportsTransitionEnd()) {
|
||||||
|
return complete()
|
||||||
|
}
|
||||||
|
|
||||||
|
$(this._element)
|
||||||
|
.one(Util.TRANSITION_END, complete)
|
||||||
|
.emulateTransitionEnd(TRANSITION_DURATION)
|
||||||
|
}
|
||||||
|
|
||||||
|
setTransitioning(isTransitioning) {
|
||||||
|
this._isTransitioning = isTransitioning
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// private
|
||||||
|
|
||||||
|
_getDimension() {
|
||||||
|
let hasWidth = $(this._element).hasClass(Dimension.WIDTH)
|
||||||
|
return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT
|
||||||
|
}
|
||||||
|
|
||||||
|
_getParent() {
|
||||||
|
let parent = $(this._config.parent)[0]
|
||||||
|
let selector =
|
||||||
|
`[data-toggle="collapse"][data-parent="${this._config.parent}"]`
|
||||||
|
|
||||||
|
$(parent).find(selector).each((i, element) => {
|
||||||
|
this._addAriaAndCollapsedClass(
|
||||||
|
Collapse._getTargetFromElement(element),
|
||||||
|
[element]
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
return parent
|
||||||
|
}
|
||||||
|
|
||||||
|
_addAriaAndCollapsedClass(element, triggerArray) {
|
||||||
|
if (element) {
|
||||||
|
let isOpen = $(element).hasClass(ClassName.IN)
|
||||||
|
element.setAttribute('aria-expanded', isOpen)
|
||||||
|
|
||||||
|
if (triggerArray.length) {
|
||||||
|
$(triggerArray)
|
||||||
|
.toggleClass(ClassName.COLLAPSED, !isOpen)
|
||||||
|
.attr('aria-expanded', isOpen)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// static
|
||||||
|
|
||||||
|
static _getTargetFromElement(element) {
|
||||||
|
let selector = Util.getSelectorFromElement(element)
|
||||||
|
return selector ? $(selector)[0] : null
|
||||||
|
}
|
||||||
|
|
||||||
|
static _jQueryInterface(config) {
|
||||||
|
return this.each(function () {
|
||||||
|
let $this = $(this)
|
||||||
|
let data = $this.data(DATA_KEY)
|
||||||
|
let _config = $.extend(
|
||||||
|
{},
|
||||||
|
Defaults,
|
||||||
|
$this.data(),
|
||||||
|
typeof config === 'object' && config
|
||||||
|
)
|
||||||
|
|
||||||
|
if (!data && _config.toggle && /show|hide/.test(config)) {
|
||||||
|
_config.toggle = false
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!data) {
|
||||||
|
data = new Collapse(this, _config)
|
||||||
|
$this.data(DATA_KEY, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof config === 'string') {
|
||||||
|
data[config]()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ------------------------------------------------------------------------
|
||||||
|
* Data Api implementation
|
||||||
|
* ------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
$(document).on(Event.CLICK, Selector.DATA_TOGGLE, function (event) {
|
||||||
|
event.preventDefault()
|
||||||
|
|
||||||
|
let target = Collapse._getTargetFromElement(this)
|
||||||
|
|
||||||
|
let data = $(target).data(DATA_KEY)
|
||||||
|
let config = data ? 'toggle' : $(this).data()
|
||||||
|
|
||||||
|
Collapse._jQueryInterface.call($(target), config)
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ------------------------------------------------------------------------
|
||||||
|
* jQuery
|
||||||
|
* ------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
$.fn[NAME] = Collapse._jQueryInterface
|
||||||
|
$.fn[NAME].Constructor = Collapse
|
||||||
|
$.fn[NAME].noConflict = function () {
|
||||||
|
$.fn[NAME] = JQUERY_NO_CONFLICT
|
||||||
|
return Collapse._jQueryInterface
|
||||||
|
}
|
||||||
|
|
||||||
|
return Collapse
|
||||||
|
|
||||||
|
})(jQuery)
|
||||||
|
|
||||||
|
export default Collapse
|
|
@ -134,9 +134,9 @@
|
||||||
<script src="../../js/dist/alert.js"></script>
|
<script src="../../js/dist/alert.js"></script>
|
||||||
<script src="../../js/dist/button.js"></script>
|
<script src="../../js/dist/button.js"></script>
|
||||||
<script src="../../js/dist/carousel.js"></script>
|
<script src="../../js/dist/carousel.js"></script>
|
||||||
|
<script src="../../js/dist/collapse.js"></script>
|
||||||
|
|
||||||
<!-- Old Plugin sources -->
|
<!-- Old Plugin sources -->
|
||||||
<script src="../../js/collapse.js"></script>
|
|
||||||
<script src="../../js/dropdown.js"></script>
|
<script src="../../js/dropdown.js"></script>
|
||||||
<script src="../../js/modal.js"></script>
|
<script src="../../js/modal.js"></script>
|
||||||
<script src="../../js/scrollspy.js"></script>
|
<script src="../../js/scrollspy.js"></script>
|
||||||
|
|
|
@ -355,7 +355,7 @@ $(function () {
|
||||||
|
|
||||||
$('<div id="body1" aria-expanded="true" class="in"/>').appendTo($groups.eq(0))
|
$('<div id="body1" aria-expanded="true" class="in"/>').appendTo($groups.eq(0))
|
||||||
|
|
||||||
var $target2 = $('<a class="collapsed" data-toggle="collapse" role="button" href="#body2" data-parent="#accordion"/>').appendTo($groups.eq(1))
|
var $target2 = $('<a role="button" data-toggle="collapse" href="#body2" data-parent="#accordion" class="collapsed" />').appendTo($groups.eq(1))
|
||||||
|
|
||||||
$('<div id="body2" aria-expanded="false"/>').appendTo($groups.eq(1))
|
$('<div id="body2" aria-expanded="false"/>').appendTo($groups.eq(1))
|
||||||
|
|
||||||
|
@ -400,7 +400,7 @@ $(function () {
|
||||||
|
|
||||||
$body2
|
$body2
|
||||||
.toggleClass('in collapsing')
|
.toggleClass('in collapsing')
|
||||||
.data('bs.collapse').transitioning = 1
|
.data('bs.collapse')._isTransitioning = 1
|
||||||
|
|
||||||
$target1.trigger('click')
|
$target1.trigger('click')
|
||||||
|
|
||||||
|
|
|
@ -71,8 +71,8 @@
|
||||||
|
|
||||||
<!-- JavaScript Includes -->
|
<!-- JavaScript Includes -->
|
||||||
<script src="../vendor/jquery.min.js"></script>
|
<script src="../vendor/jquery.min.js"></script>
|
||||||
<script src="../../transition.js"></script>
|
<script src="../../dist/util.js"></script>
|
||||||
<script src="../../collapse.js"></script>
|
<script src="../../dist/collapse.js"></script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
Loading…
Reference in New Issue