Version Description
Release Date - 30 January 2017
- Fixed an issue when maximum 10 products can be added to cart from a Wishlist page using the "Add all to cart" button
Download this release
Release Info
Developer | templateinvaders |
Plugin | WooCommerce Wishlist Plugin |
Version | 1.1.7 |
Comparing to | |
See all releases |
Code changes from version 1.1.5 to 1.1.7
- asset/js/bootstrap.js +64 -50
- asset/js/bootstrap.min.js +7 -1
- includes/tinvwl.class.php +18 -1
- languages/ti-woocommerce-wishlist.pot +17 -5
- public/tinvwl.class.php +19 -0
- public/wishlist/buttons.class.php +10 -4
- public/wishlist/view.class.php +22 -0
- readme.txt +13 -2
- ti-woocommerce-wishlist.php +2 -2
- tinv-wishlists-function.php +2 -2
asset/js/bootstrap.js
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
/*!
|
2 |
-
* Bootstrap v3.3.
|
3 |
-
* Copyright 2011-
|
4 |
* Licensed under the MIT license
|
5 |
*/
|
6 |
|
@@ -11,16 +11,16 @@ if (typeof jQuery === 'undefined') {
|
|
11 |
+function ($) {
|
12 |
'use strict';
|
13 |
var version = $.fn.jquery.split(' ')[0].split('.')
|
14 |
-
if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] >
|
15 |
-
throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version
|
16 |
}
|
17 |
}(jQuery);
|
18 |
|
19 |
/* ========================================================================
|
20 |
-
* Bootstrap: transition.js v3.3.
|
21 |
* http://getbootstrap.com/javascript/#transitions
|
22 |
* ========================================================================
|
23 |
-
* Copyright 2011-
|
24 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
25 |
* ======================================================================== */
|
26 |
|
@@ -77,10 +77,10 @@ if (typeof jQuery === 'undefined') {
|
|
77 |
}(jQuery);
|
78 |
|
79 |
/* ========================================================================
|
80 |
-
* Bootstrap: alert.js v3.3.
|
81 |
* http://getbootstrap.com/javascript/#alerts
|
82 |
* ========================================================================
|
83 |
-
* Copyright 2011-
|
84 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
85 |
* ======================================================================== */
|
86 |
|
@@ -96,7 +96,7 @@ if (typeof jQuery === 'undefined') {
|
|
96 |
$(el).on('click', dismiss, this.close)
|
97 |
}
|
98 |
|
99 |
-
Alert.VERSION = '3.3.
|
100 |
|
101 |
Alert.TRANSITION_DURATION = 150
|
102 |
|
@@ -109,7 +109,7 @@ if (typeof jQuery === 'undefined') {
|
|
109 |
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
|
110 |
}
|
111 |
|
112 |
-
var $parent = $(selector)
|
113 |
|
114 |
if (e) e.preventDefault()
|
115 |
|
@@ -172,10 +172,10 @@ if (typeof jQuery === 'undefined') {
|
|
172 |
}(jQuery);
|
173 |
|
174 |
/* ========================================================================
|
175 |
-
* Bootstrap: button.js v3.3.
|
176 |
* http://getbootstrap.com/javascript/#buttons
|
177 |
* ========================================================================
|
178 |
-
* Copyright 2011-
|
179 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
180 |
* ======================================================================== */
|
181 |
|
@@ -192,7 +192,7 @@ if (typeof jQuery === 'undefined') {
|
|
192 |
this.isLoading = false
|
193 |
}
|
194 |
|
195 |
-
Button.VERSION = '3.3.
|
196 |
|
197 |
Button.DEFAULTS = {
|
198 |
loadingText: 'loading...'
|
@@ -214,10 +214,10 @@ if (typeof jQuery === 'undefined') {
|
|
214 |
|
215 |
if (state == 'loadingText') {
|
216 |
this.isLoading = true
|
217 |
-
$el.addClass(d).attr(d, d)
|
218 |
} else if (this.isLoading) {
|
219 |
this.isLoading = false
|
220 |
-
$el.removeClass(d).removeAttr(d)
|
221 |
}
|
222 |
}, this), 0)
|
223 |
}
|
@@ -281,10 +281,15 @@ if (typeof jQuery === 'undefined') {
|
|
281 |
|
282 |
$(document)
|
283 |
.on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
|
284 |
-
var $btn = $(e.target)
|
285 |
-
if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
|
286 |
Plugin.call($btn, 'toggle')
|
287 |
-
if (!($(e.target).is('input[type="radio"]
|
|
|
|
|
|
|
|
|
|
|
|
|
288 |
})
|
289 |
.on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
|
290 |
$(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
|
@@ -293,10 +298,10 @@ if (typeof jQuery === 'undefined') {
|
|
293 |
}(jQuery);
|
294 |
|
295 |
/* ========================================================================
|
296 |
-
* Bootstrap: carousel.js v3.3.
|
297 |
* http://getbootstrap.com/javascript/#carousel
|
298 |
* ========================================================================
|
299 |
-
* Copyright 2011-
|
300 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
301 |
* ======================================================================== */
|
302 |
|
@@ -324,7 +329,7 @@ if (typeof jQuery === 'undefined') {
|
|
324 |
.on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
|
325 |
}
|
326 |
|
327 |
-
Carousel.VERSION = '3.3.
|
328 |
|
329 |
Carousel.TRANSITION_DURATION = 600
|
330 |
|
@@ -531,13 +536,14 @@ if (typeof jQuery === 'undefined') {
|
|
531 |
}(jQuery);
|
532 |
|
533 |
/* ========================================================================
|
534 |
-
* Bootstrap: collapse.js v3.3.
|
535 |
* http://getbootstrap.com/javascript/#collapse
|
536 |
* ========================================================================
|
537 |
-
* Copyright 2011-
|
538 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
539 |
* ======================================================================== */
|
540 |
|
|
|
541 |
|
542 |
+function ($) {
|
543 |
'use strict';
|
@@ -561,7 +567,7 @@ if (typeof jQuery === 'undefined') {
|
|
561 |
if (this.options.toggle) this.toggle()
|
562 |
}
|
563 |
|
564 |
-
Collapse.VERSION = '3.3.
|
565 |
|
566 |
Collapse.TRANSITION_DURATION = 350
|
567 |
|
@@ -743,10 +749,10 @@ if (typeof jQuery === 'undefined') {
|
|
743 |
}(jQuery);
|
744 |
|
745 |
/* ========================================================================
|
746 |
-
* Bootstrap: dropdown.js v3.3.
|
747 |
* http://getbootstrap.com/javascript/#dropdowns
|
748 |
* ========================================================================
|
749 |
-
* Copyright 2011-
|
750 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
751 |
* ======================================================================== */
|
752 |
|
@@ -763,7 +769,7 @@ if (typeof jQuery === 'undefined') {
|
|
763 |
$(element).on('click.bs.dropdown', this.toggle)
|
764 |
}
|
765 |
|
766 |
-
Dropdown.VERSION = '3.3.
|
767 |
|
768 |
function getParent($this) {
|
769 |
var selector = $this.attr('data-target')
|
@@ -909,10 +915,10 @@ if (typeof jQuery === 'undefined') {
|
|
909 |
}(jQuery);
|
910 |
|
911 |
/* ========================================================================
|
912 |
-
* Bootstrap: modal.js v3.3.
|
913 |
* http://getbootstrap.com/javascript/#modals
|
914 |
* ========================================================================
|
915 |
-
* Copyright 2011-
|
916 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
917 |
* ======================================================================== */
|
918 |
|
@@ -943,7 +949,7 @@ if (typeof jQuery === 'undefined') {
|
|
943 |
}
|
944 |
}
|
945 |
|
946 |
-
Modal.VERSION = '3.3.
|
947 |
|
948 |
Modal.TRANSITION_DURATION = 300
|
949 |
Modal.BACKDROP_TRANSITION_DURATION = 150
|
@@ -1050,7 +1056,9 @@ if (typeof jQuery === 'undefined') {
|
|
1050 |
$(document)
|
1051 |
.off('focusin.bs.modal') // guard against infinite focus loop
|
1052 |
.on('focusin.bs.modal', $.proxy(function (e) {
|
1053 |
-
if (
|
|
|
|
|
1054 |
this.$element.trigger('focus')
|
1055 |
}
|
1056 |
}, this))
|
@@ -1247,11 +1255,11 @@ if (typeof jQuery === 'undefined') {
|
|
1247 |
}(jQuery);
|
1248 |
|
1249 |
/* ========================================================================
|
1250 |
-
* Bootstrap: tooltip.js v3.3.
|
1251 |
* http://getbootstrap.com/javascript/#tooltip
|
1252 |
* Inspired by the original jQuery.tipsy by Jason Frame
|
1253 |
* ========================================================================
|
1254 |
-
* Copyright 2011-
|
1255 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
1256 |
* ======================================================================== */
|
1257 |
|
@@ -1274,7 +1282,7 @@ if (typeof jQuery === 'undefined') {
|
|
1274 |
this.init('tooltip', element, options)
|
1275 |
}
|
1276 |
|
1277 |
-
Tooltip.VERSION = '3.3.
|
1278 |
|
1279 |
Tooltip.TRANSITION_DURATION = 150
|
1280 |
|
@@ -1565,9 +1573,11 @@ if (typeof jQuery === 'undefined') {
|
|
1565 |
|
1566 |
function complete() {
|
1567 |
if (that.hoverState != 'in') $tip.detach()
|
1568 |
-
that.$element
|
1569 |
-
|
1570 |
-
|
|
|
|
|
1571 |
callback && callback()
|
1572 |
}
|
1573 |
|
@@ -1610,7 +1620,10 @@ if (typeof jQuery === 'undefined') {
|
|
1610 |
// width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
|
1611 |
elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
|
1612 |
}
|
1613 |
-
var
|
|
|
|
|
|
|
1614 |
var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
|
1615 |
var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
|
1616 |
|
@@ -1726,6 +1739,7 @@ if (typeof jQuery === 'undefined') {
|
|
1726 |
that.$tip = null
|
1727 |
that.$arrow = null
|
1728 |
that.$viewport = null
|
|
|
1729 |
})
|
1730 |
}
|
1731 |
|
@@ -1762,10 +1776,10 @@ if (typeof jQuery === 'undefined') {
|
|
1762 |
}(jQuery);
|
1763 |
|
1764 |
/* ========================================================================
|
1765 |
-
* Bootstrap: popover.js v3.3.
|
1766 |
* http://getbootstrap.com/javascript/#popovers
|
1767 |
* ========================================================================
|
1768 |
-
* Copyright 2011-
|
1769 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
1770 |
* ======================================================================== */
|
1771 |
|
@@ -1782,7 +1796,7 @@ if (typeof jQuery === 'undefined') {
|
|
1782 |
|
1783 |
if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
|
1784 |
|
1785 |
-
Popover.VERSION = '3.3.
|
1786 |
|
1787 |
Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
|
1788 |
placement: 'right',
|
@@ -1871,10 +1885,10 @@ if (typeof jQuery === 'undefined') {
|
|
1871 |
}(jQuery);
|
1872 |
|
1873 |
/* ========================================================================
|
1874 |
-
* Bootstrap: scrollspy.js v3.3.
|
1875 |
* http://getbootstrap.com/javascript/#scrollspy
|
1876 |
* ========================================================================
|
1877 |
-
* Copyright 2011-
|
1878 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
1879 |
* ======================================================================== */
|
1880 |
|
@@ -1900,7 +1914,7 @@ if (typeof jQuery === 'undefined') {
|
|
1900 |
this.process()
|
1901 |
}
|
1902 |
|
1903 |
-
ScrollSpy.VERSION = '3.3.
|
1904 |
|
1905 |
ScrollSpy.DEFAULTS = {
|
1906 |
offset: 10
|
@@ -2044,10 +2058,10 @@ if (typeof jQuery === 'undefined') {
|
|
2044 |
}(jQuery);
|
2045 |
|
2046 |
/* ========================================================================
|
2047 |
-
* Bootstrap: tab.js v3.3.
|
2048 |
* http://getbootstrap.com/javascript/#tabs
|
2049 |
* ========================================================================
|
2050 |
-
* Copyright 2011-
|
2051 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
2052 |
* ======================================================================== */
|
2053 |
|
@@ -2064,7 +2078,7 @@ if (typeof jQuery === 'undefined') {
|
|
2064 |
// jscs:enable requireDollarBeforejQueryAssignment
|
2065 |
}
|
2066 |
|
2067 |
-
Tab.VERSION = '3.3.
|
2068 |
|
2069 |
Tab.TRANSITION_DURATION = 150
|
2070 |
|
@@ -2200,10 +2214,10 @@ if (typeof jQuery === 'undefined') {
|
|
2200 |
}(jQuery);
|
2201 |
|
2202 |
/* ========================================================================
|
2203 |
-
* Bootstrap: affix.js v3.3.
|
2204 |
* http://getbootstrap.com/javascript/#affix
|
2205 |
* ========================================================================
|
2206 |
-
* Copyright 2011-
|
2207 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
2208 |
* ======================================================================== */
|
2209 |
|
@@ -2229,7 +2243,7 @@ if (typeof jQuery === 'undefined') {
|
|
2229 |
this.checkPosition()
|
2230 |
}
|
2231 |
|
2232 |
-
Affix.VERSION = '3.3.
|
2233 |
|
2234 |
Affix.RESET = 'affix affix-top affix-bottom'
|
2235 |
|
1 |
/*!
|
2 |
+
* Bootstrap v3.3.7 (http://getbootstrap.com)
|
3 |
+
* Copyright 2011-2016 Twitter, Inc.
|
4 |
* Licensed under the MIT license
|
5 |
*/
|
6 |
|
11 |
+function ($) {
|
12 |
'use strict';
|
13 |
var version = $.fn.jquery.split(' ')[0].split('.')
|
14 |
+
if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {
|
15 |
+
throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')
|
16 |
}
|
17 |
}(jQuery);
|
18 |
|
19 |
/* ========================================================================
|
20 |
+
* Bootstrap: transition.js v3.3.7
|
21 |
* http://getbootstrap.com/javascript/#transitions
|
22 |
* ========================================================================
|
23 |
+
* Copyright 2011-2016 Twitter, Inc.
|
24 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
25 |
* ======================================================================== */
|
26 |
|
77 |
}(jQuery);
|
78 |
|
79 |
/* ========================================================================
|
80 |
+
* Bootstrap: alert.js v3.3.7
|
81 |
* http://getbootstrap.com/javascript/#alerts
|
82 |
* ========================================================================
|
83 |
+
* Copyright 2011-2016 Twitter, Inc.
|
84 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
85 |
* ======================================================================== */
|
86 |
|
96 |
$(el).on('click', dismiss, this.close)
|
97 |
}
|
98 |
|
99 |
+
Alert.VERSION = '3.3.7'
|
100 |
|
101 |
Alert.TRANSITION_DURATION = 150
|
102 |
|
109 |
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
|
110 |
}
|
111 |
|
112 |
+
var $parent = $(selector === '#' ? [] : selector)
|
113 |
|
114 |
if (e) e.preventDefault()
|
115 |
|
172 |
}(jQuery);
|
173 |
|
174 |
/* ========================================================================
|
175 |
+
* Bootstrap: button.js v3.3.7
|
176 |
* http://getbootstrap.com/javascript/#buttons
|
177 |
* ========================================================================
|
178 |
+
* Copyright 2011-2016 Twitter, Inc.
|
179 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
180 |
* ======================================================================== */
|
181 |
|
192 |
this.isLoading = false
|
193 |
}
|
194 |
|
195 |
+
Button.VERSION = '3.3.7'
|
196 |
|
197 |
Button.DEFAULTS = {
|
198 |
loadingText: 'loading...'
|
214 |
|
215 |
if (state == 'loadingText') {
|
216 |
this.isLoading = true
|
217 |
+
$el.addClass(d).attr(d, d).prop(d, true)
|
218 |
} else if (this.isLoading) {
|
219 |
this.isLoading = false
|
220 |
+
$el.removeClass(d).removeAttr(d).prop(d, false)
|
221 |
}
|
222 |
}, this), 0)
|
223 |
}
|
281 |
|
282 |
$(document)
|
283 |
.on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
|
284 |
+
var $btn = $(e.target).closest('.btn')
|
|
|
285 |
Plugin.call($btn, 'toggle')
|
286 |
+
if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) {
|
287 |
+
// Prevent double click on radios, and the double selections (so cancellation) on checkboxes
|
288 |
+
e.preventDefault()
|
289 |
+
// The target component still receive the focus
|
290 |
+
if ($btn.is('input,button')) $btn.trigger('focus')
|
291 |
+
else $btn.find('input:visible,button:visible').first().trigger('focus')
|
292 |
+
}
|
293 |
})
|
294 |
.on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
|
295 |
$(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
|
298 |
}(jQuery);
|
299 |
|
300 |
/* ========================================================================
|
301 |
+
* Bootstrap: carousel.js v3.3.7
|
302 |
* http://getbootstrap.com/javascript/#carousel
|
303 |
* ========================================================================
|
304 |
+
* Copyright 2011-2016 Twitter, Inc.
|
305 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
306 |
* ======================================================================== */
|
307 |
|
329 |
.on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
|
330 |
}
|
331 |
|
332 |
+
Carousel.VERSION = '3.3.7'
|
333 |
|
334 |
Carousel.TRANSITION_DURATION = 600
|
335 |
|
536 |
}(jQuery);
|
537 |
|
538 |
/* ========================================================================
|
539 |
+
* Bootstrap: collapse.js v3.3.7
|
540 |
* http://getbootstrap.com/javascript/#collapse
|
541 |
* ========================================================================
|
542 |
+
* Copyright 2011-2016 Twitter, Inc.
|
543 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
544 |
* ======================================================================== */
|
545 |
|
546 |
+
/* jshint latedef: false */
|
547 |
|
548 |
+function ($) {
|
549 |
'use strict';
|
567 |
if (this.options.toggle) this.toggle()
|
568 |
}
|
569 |
|
570 |
+
Collapse.VERSION = '3.3.7'
|
571 |
|
572 |
Collapse.TRANSITION_DURATION = 350
|
573 |
|
749 |
}(jQuery);
|
750 |
|
751 |
/* ========================================================================
|
752 |
+
* Bootstrap: dropdown.js v3.3.7
|
753 |
* http://getbootstrap.com/javascript/#dropdowns
|
754 |
* ========================================================================
|
755 |
+
* Copyright 2011-2016 Twitter, Inc.
|
756 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
757 |
* ======================================================================== */
|
758 |
|
769 |
$(element).on('click.bs.dropdown', this.toggle)
|
770 |
}
|
771 |
|
772 |
+
Dropdown.VERSION = '3.3.7'
|
773 |
|
774 |
function getParent($this) {
|
775 |
var selector = $this.attr('data-target')
|
915 |
}(jQuery);
|
916 |
|
917 |
/* ========================================================================
|
918 |
+
* Bootstrap: modal.js v3.3.7
|
919 |
* http://getbootstrap.com/javascript/#modals
|
920 |
* ========================================================================
|
921 |
+
* Copyright 2011-2016 Twitter, Inc.
|
922 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
923 |
* ======================================================================== */
|
924 |
|
949 |
}
|
950 |
}
|
951 |
|
952 |
+
Modal.VERSION = '3.3.7'
|
953 |
|
954 |
Modal.TRANSITION_DURATION = 300
|
955 |
Modal.BACKDROP_TRANSITION_DURATION = 150
|
1056 |
$(document)
|
1057 |
.off('focusin.bs.modal') // guard against infinite focus loop
|
1058 |
.on('focusin.bs.modal', $.proxy(function (e) {
|
1059 |
+
if (document !== e.target &&
|
1060 |
+
this.$element[0] !== e.target &&
|
1061 |
+
!this.$element.has(e.target).length) {
|
1062 |
this.$element.trigger('focus')
|
1063 |
}
|
1064 |
}, this))
|
1255 |
}(jQuery);
|
1256 |
|
1257 |
/* ========================================================================
|
1258 |
+
* Bootstrap: tooltip.js v3.3.7
|
1259 |
* http://getbootstrap.com/javascript/#tooltip
|
1260 |
* Inspired by the original jQuery.tipsy by Jason Frame
|
1261 |
* ========================================================================
|
1262 |
+
* Copyright 2011-2016 Twitter, Inc.
|
1263 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
1264 |
* ======================================================================== */
|
1265 |
|
1282 |
this.init('tooltip', element, options)
|
1283 |
}
|
1284 |
|
1285 |
+
Tooltip.VERSION = '3.3.7'
|
1286 |
|
1287 |
Tooltip.TRANSITION_DURATION = 150
|
1288 |
|
1573 |
|
1574 |
function complete() {
|
1575 |
if (that.hoverState != 'in') $tip.detach()
|
1576 |
+
if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.
|
1577 |
+
that.$element
|
1578 |
+
.removeAttr('aria-describedby')
|
1579 |
+
.trigger('hidden.bs.' + that.type)
|
1580 |
+
}
|
1581 |
callback && callback()
|
1582 |
}
|
1583 |
|
1620 |
// width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
|
1621 |
elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
|
1622 |
}
|
1623 |
+
var isSvg = window.SVGElement && el instanceof window.SVGElement
|
1624 |
+
// Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.
|
1625 |
+
// See https://github.com/twbs/bootstrap/issues/20280
|
1626 |
+
var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())
|
1627 |
var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
|
1628 |
var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
|
1629 |
|
1739 |
that.$tip = null
|
1740 |
that.$arrow = null
|
1741 |
that.$viewport = null
|
1742 |
+
that.$element = null
|
1743 |
})
|
1744 |
}
|
1745 |
|
1776 |
}(jQuery);
|
1777 |
|
1778 |
/* ========================================================================
|
1779 |
+
* Bootstrap: popover.js v3.3.7
|
1780 |
* http://getbootstrap.com/javascript/#popovers
|
1781 |
* ========================================================================
|
1782 |
+
* Copyright 2011-2016 Twitter, Inc.
|
1783 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
1784 |
* ======================================================================== */
|
1785 |
|
1796 |
|
1797 |
if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
|
1798 |
|
1799 |
+
Popover.VERSION = '3.3.7'
|
1800 |
|
1801 |
Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
|
1802 |
placement: 'right',
|
1885 |
}(jQuery);
|
1886 |
|
1887 |
/* ========================================================================
|
1888 |
+
* Bootstrap: scrollspy.js v3.3.7
|
1889 |
* http://getbootstrap.com/javascript/#scrollspy
|
1890 |
* ========================================================================
|
1891 |
+
* Copyright 2011-2016 Twitter, Inc.
|
1892 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
1893 |
* ======================================================================== */
|
1894 |
|
1914 |
this.process()
|
1915 |
}
|
1916 |
|
1917 |
+
ScrollSpy.VERSION = '3.3.7'
|
1918 |
|
1919 |
ScrollSpy.DEFAULTS = {
|
1920 |
offset: 10
|
2058 |
}(jQuery);
|
2059 |
|
2060 |
/* ========================================================================
|
2061 |
+
* Bootstrap: tab.js v3.3.7
|
2062 |
* http://getbootstrap.com/javascript/#tabs
|
2063 |
* ========================================================================
|
2064 |
+
* Copyright 2011-2016 Twitter, Inc.
|
2065 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
2066 |
* ======================================================================== */
|
2067 |
|
2078 |
// jscs:enable requireDollarBeforejQueryAssignment
|
2079 |
}
|
2080 |
|
2081 |
+
Tab.VERSION = '3.3.7'
|
2082 |
|
2083 |
Tab.TRANSITION_DURATION = 150
|
2084 |
|
2214 |
}(jQuery);
|
2215 |
|
2216 |
/* ========================================================================
|
2217 |
+
* Bootstrap: affix.js v3.3.7
|
2218 |
* http://getbootstrap.com/javascript/#affix
|
2219 |
* ========================================================================
|
2220 |
+
* Copyright 2011-2016 Twitter, Inc.
|
2221 |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
2222 |
* ======================================================================== */
|
2223 |
|
2243 |
this.checkPosition()
|
2244 |
}
|
2245 |
|
2246 |
+
Affix.VERSION = '3.3.7'
|
2247 |
|
2248 |
Affix.RESET = 'affix affix-top affix-bottom'
|
2249 |
|
asset/js/bootstrap.min.js
CHANGED
@@ -1 +1,7 @@
|
|
1 |
-
if(typeof jQuery==='undefined'){throw new Error('Bootstrap\'s JavaScript requires jQuery')} +function($){'use strict';var version=$.fn.jquery.split(' ')[0].split('.') if((version[0]<2&&version[1]<9)||(version[0]==1&&version[1]==9&&version[2]<1)||(version[0]>2)){throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 3')}}(jQuery);+function($){'use strict';function transitionEnd(){var el=document.createElement('bootstrap') var transEndEventNames={WebkitTransition:'webkitTransitionEnd',MozTransition:'transitionend',OTransition:'oTransitionEnd otransitionend',transition:'transitionend'} for(var name in transEndEventNames){if(el.style[name]!==undefined){return{end:transEndEventNames[name]}}} return false} $.fn.emulateTransitionEnd=function(duration){var called=false var $el=this $(this).one('bsTransitionEnd',function(){called=true}) var callback=function(){if(!called)$($el).trigger($.support.transition.end)} setTimeout(callback,duration) return this} $(function(){$.support.transition=transitionEnd() if(!$.support.transition)return $.event.special.bsTransitionEnd={bindType:$.support.transition.end,delegateType:$.support.transition.end,handle:function(e){if($(e.target).is(this))return e.handleObj.handler.apply(this,arguments)}}})}(jQuery);+function($){'use strict';var dismiss='[data-dismiss="alert"]' var Alert=function(el){$(el).on('click',dismiss,this.close)} Alert.VERSION='3.3.6' Alert.TRANSITION_DURATION=150 Alert.prototype.close=function(e){var $this=$(this) var selector=$this.attr('data-target') if(!selector){selector=$this.attr('href') selector=selector&&selector.replace(/.*(?=#[^\s]*$)/,'')} var $parent=$(selector) if(e)e.preventDefault() if(!$parent.length){$parent=$this.closest('.alert')} $parent.trigger(e=$.Event('close.bs.alert')) if(e.isDefaultPrevented())return $parent.removeClass('in') function removeElement(){$parent.detach().trigger('closed.bs.alert').remove()} $.support.transition&&$parent.hasClass('fade')?$parent.one('bsTransitionEnd',removeElement).emulateTransitionEnd(Alert.TRANSITION_DURATION):removeElement()} function Plugin(option){return this.each(function(){var $this=$(this) var data=$this.data('bs.alert') if(!data)$this.data('bs.alert',(data=new Alert(this))) if(typeof option=='string')data[option].call($this)})} var old=$.fn.alert $.fn.alert=Plugin $.fn.alert.Constructor=Alert $.fn.alert.noConflict=function(){$.fn.alert=old return this} $(document).on('click.bs.alert.data-api',dismiss,Alert.prototype.close)}(jQuery);+function($){'use strict';var Button=function(element,options){this.$element=$(element) this.options=$.extend({},Button.DEFAULTS,options) this.isLoading=false} Button.VERSION='3.3.6' Button.DEFAULTS={loadingText:'loading...'} Button.prototype.setState=function(state){var d='disabled' var $el=this.$element var val=$el.is('input')?'val':'html' var data=$el.data() state+='Text' if(data.resetText==null)$el.data('resetText',$el[val]()) setTimeout($.proxy(function(){$el[val](data[state]==null?this.options[state]:data[state]) if(state=='loadingText'){this.isLoading=true $el.addClass(d).attr(d,d)}else if(this.isLoading){this.isLoading=false $el.removeClass(d).removeAttr(d)}},this),0)} Button.prototype.toggle=function(){var changed=true var $parent=this.$element.closest('[data-toggle="buttons"]') if($parent.length){var $input=this.$element.find('input') if($input.prop('type')=='radio'){if($input.prop('checked'))changed=false $parent.find('.active').removeClass('active') this.$element.addClass('active')}else if($input.prop('type')=='checkbox'){if(($input.prop('checked'))!==this.$element.hasClass('active'))changed=false this.$element.toggleClass('active')} $input.prop('checked',this.$element.hasClass('active')) if(changed)$input.trigger('change')}else{this.$element.attr('aria-pressed',!this.$element.hasClass('active')) this.$element.toggleClass('active')}} function Plugin(option){return this.each(function(){var $this=$(this) var data=$this.data('bs.button') var options=typeof option=='object'&&option if(!data)$this.data('bs.button',(data=new Button(this,options))) if(option=='toggle')data.toggle() else if(option)data.setState(option)})} var old=$.fn.button $.fn.button=Plugin $.fn.button.Constructor=Button $.fn.button.noConflict=function(){$.fn.button=old return this} $(document).on('click.bs.button.data-api','[data-toggle^="button"]',function(e){var $btn=$(e.target) if(!$btn.hasClass('btn'))$btn=$btn.closest('.btn') Plugin.call($btn,'toggle') if(!($(e.target).is('input[type="radio"]')||$(e.target).is('input[type="checkbox"]')))e.preventDefault()}).on('focus.bs.button.data-api blur.bs.button.data-api','[data-toggle^="button"]',function(e){$(e.target).closest('.btn').toggleClass('focus',/^focus(in)?$/.test(e.type))})}(jQuery);+function($){'use strict';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.6' 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)}) 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}) if($.support.transition&&this.$element.hasClass('slide')){$next.addClass(type) $next[0].offsetWidth $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} 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 $.fn.carousel.noConflict=function(){$.fn.carousel=old return this} var clickHandler=function(e){var href var $this=$(this) var $target=$($this.attr('data-target')||(href=$this.attr('href'))&&href.replace(/.*(?=#[^\s]+$)/,'')) 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);+function($){'use strict';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.6' 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]+$)/,'') return $(target)} 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 $.fn.collapse.noConflict=function(){$.fn.collapse=old return this} $(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);+function($){'use strict';var backdrop='.dropdown-backdrop' var toggle='[data-toggle="dropdown"]' var Dropdown=function(element){$(element).on('click.bs.dropdown',this.toggle)} Dropdown.VERSION='3.3.6' function getParent($this){var selector=$this.attr('data-target') if(!selector){selector=$this.attr('href') selector=selector&&/#[A-Za-z]/.test(selector)&&selector.replace(/.*(?=#[^\s]*$)/,'')} var $parent=selector&&$(selector) return $parent&&$parent.length?$parent:$this.parent()} function clearMenus(e){if(e&&e.which===3)return $(backdrop).remove() $(toggle).each(function(){var $this=$(this) var $parent=getParent($this) var relatedTarget={relatedTarget:this} if(!$parent.hasClass('open'))return if(e&&e.type=='click'&&/input|textarea/i.test(e.target.tagName)&&$.contains($parent[0],e.target))return $parent.trigger(e=$.Event('hide.bs.dropdown',relatedTarget)) if(e.isDefaultPrevented())return $this.attr('aria-expanded','false') $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown',relatedTarget))})} Dropdown.prototype.toggle=function(e){var $this=$(this) if($this.is('.disabled, :disabled'))return var $parent=getParent($this) var isActive=$parent.hasClass('open') clearMenus() if(!isActive){if('ontouchstart'in document.documentElement&&!$parent.closest('.navbar-nav').length){$(document.createElement('div')).addClass('dropdown-backdrop').insertAfter($(this)).on('click',clearMenus)} var relatedTarget={relatedTarget:this} $parent.trigger(e=$.Event('show.bs.dropdown',relatedTarget)) if(e.isDefaultPrevented())return $this.trigger('focus').attr('aria-expanded','true') $parent.toggleClass('open').trigger($.Event('shown.bs.dropdown',relatedTarget))} return false} Dropdown.prototype.keydown=function(e){if(!/(38|40|27|32)/.test(e.which)||/input|textarea/i.test(e.target.tagName))return var $this=$(this) e.preventDefault() e.stopPropagation() if($this.is('.disabled, :disabled'))return var $parent=getParent($this) var isActive=$parent.hasClass('open') if(!isActive&&e.which!=27||isActive&&e.which==27){if(e.which==27)$parent.find(toggle).trigger('focus') return $this.trigger('click')} var desc=' li:not(.disabled):visible a' var $items=$parent.find('.dropdown-menu'+desc) if(!$items.length)return var index=$items.index(e.target) if(e.which==38&&index>0)index-- if(e.which==40&&index<$items.length-1)index++ if(!~index)index=0 $items.eq(index).trigger('focus')} function Plugin(option){return this.each(function(){var $this=$(this) var data=$this.data('bs.dropdown') if(!data)$this.data('bs.dropdown',(data=new Dropdown(this))) if(typeof option=='string')data[option].call($this)})} var old=$.fn.dropdown $.fn.dropdown=Plugin $.fn.dropdown.Constructor=Dropdown $.fn.dropdown.noConflict=function(){$.fn.dropdown=old return this} $(document).on('click.bs.dropdown.data-api',clearMenus).on('click.bs.dropdown.data-api','.dropdown form',function(e){e.stopPropagation()}).on('click.bs.dropdown.data-api',toggle,Dropdown.prototype.toggle).on('keydown.bs.dropdown.data-api',toggle,Dropdown.prototype.keydown).on('keydown.bs.dropdown.data-api','.dropdown-menu',Dropdown.prototype.keydown)}(jQuery);+function($){'use strict';var Modal=function(element,options){this.options=options this.$body=$(document.body) this.$element=$(element) this.$dialog=this.$element.find('.modal-dialog') this.$backdrop=null this.isShown=null this.originalBodyPad=null this.scrollbarWidth=0 this.ignoreBackdropClick=false if(this.options.remote){this.$element.find('.modal-content').load(this.options.remote,$.proxy(function(){this.$element.trigger('loaded.bs.modal')},this))}} Modal.VERSION='3.3.6' Modal.TRANSITION_DURATION=300 Modal.BACKDROP_TRANSITION_DURATION=150 Modal.DEFAULTS={backdrop:true,keyboard:true,show:true} Modal.prototype.toggle=function(_relatedTarget){return this.isShown?this.hide():this.show(_relatedTarget)} Modal.prototype.show=function(_relatedTarget){var that=this var e=$.Event('show.bs.modal',{relatedTarget:_relatedTarget}) this.$element.trigger(e) if(this.isShown||e.isDefaultPrevented())return this.isShown=true this.checkScrollbar() this.setScrollbar() this.$body.addClass('modal-open') this.escape() this.resize() this.$element.on('click.dismiss.bs.modal','[data-dismiss="modal"]',$.proxy(this.hide,this)) this.$dialog.on('mousedown.dismiss.bs.modal',function(){that.$element.one('mouseup.dismiss.bs.modal',function(e){if($(e.target).is(that.$element))that.ignoreBackdropClick=true})}) this.backdrop(function(){var transition=$.support.transition&&that.$element.hasClass('fade') if(!that.$element.parent().length){that.$element.appendTo(that.$body)} that.$element.show().scrollTop(0) that.adjustDialog() if(transition){that.$element[0].offsetWidth} that.$element.addClass('in') that.enforceFocus() var e=$.Event('shown.bs.modal',{relatedTarget:_relatedTarget}) transition?that.$dialog.one('bsTransitionEnd',function(){that.$element.trigger('focus').trigger(e)}).emulateTransitionEnd(Modal.TRANSITION_DURATION):that.$element.trigger('focus').trigger(e)})} Modal.prototype.hide=function(e){if(e)e.preventDefault() e=$.Event('hide.bs.modal') this.$element.trigger(e) if(!this.isShown||e.isDefaultPrevented())return this.isShown=false this.escape() this.resize() $(document).off('focusin.bs.modal') this.$element.removeClass('in').off('click.dismiss.bs.modal').off('mouseup.dismiss.bs.modal') this.$dialog.off('mousedown.dismiss.bs.modal') $.support.transition&&this.$element.hasClass('fade')?this.$element.one('bsTransitionEnd',$.proxy(this.hideModal,this)).emulateTransitionEnd(Modal.TRANSITION_DURATION):this.hideModal()} Modal.prototype.enforceFocus=function(){$(document).off('focusin.bs.modal').on('focusin.bs.modal',$.proxy(function(e){if(this.$element[0]!==e.target&&!this.$element.has(e.target).length){this.$element.trigger('focus')}},this))} Modal.prototype.escape=function(){if(this.isShown&&this.options.keyboard){this.$element.on('keydown.dismiss.bs.modal',$.proxy(function(e){e.which==27&&this.hide()},this))}else if(!this.isShown){this.$element.off('keydown.dismiss.bs.modal')}} Modal.prototype.resize=function(){if(this.isShown){$(window).on('resize.bs.modal',$.proxy(this.handleUpdate,this))}else{$(window).off('resize.bs.modal')}} Modal.prototype.hideModal=function(){var that=this this.$element.hide() this.backdrop(function(){that.$body.removeClass('modal-open') that.resetAdjustments() that.resetScrollbar() that.$element.trigger('hidden.bs.modal')})} Modal.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove() this.$backdrop=null} Modal.prototype.backdrop=function(callback){var that=this var animate=this.$element.hasClass('fade')?'fade':'' if(this.isShown&&this.options.backdrop){var doAnimate=$.support.transition&&animate this.$backdrop=$(document.createElement('div')).addClass('modal-backdrop '+animate).appendTo(this.$body) this.$element.on('click.dismiss.bs.modal',$.proxy(function(e){if(this.ignoreBackdropClick){this.ignoreBackdropClick=false return} if(e.target!==e.currentTarget)return this.options.backdrop=='static'?this.$element[0].focus():this.hide()},this)) if(doAnimate)this.$backdrop[0].offsetWidth this.$backdrop.addClass('in') if(!callback)return doAnimate?this.$backdrop.one('bsTransitionEnd',callback).emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION):callback()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass('in') var callbackRemove=function(){that.removeBackdrop() callback&&callback()} $.support.transition&&this.$element.hasClass('fade')?this.$backdrop.one('bsTransitionEnd',callbackRemove).emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION):callbackRemove()}else if(callback){callback()}} Modal.prototype.handleUpdate=function(){this.adjustDialog()} Modal.prototype.adjustDialog=function(){var modalIsOverflowing=this.$element[0].scrollHeight>document.documentElement.clientHeight this.$element.css({paddingLeft:!this.bodyIsOverflowing&&modalIsOverflowing?this.scrollbarWidth:'',paddingRight:this.bodyIsOverflowing&&!modalIsOverflowing?this.scrollbarWidth:''})} Modal.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:'',paddingRight:''})} Modal.prototype.checkScrollbar=function(){var fullWindowWidth=window.innerWidth if(!fullWindowWidth){var documentElementRect=document.documentElement.getBoundingClientRect() fullWindowWidth=documentElementRect.right-Math.abs(documentElementRect.left)} this.bodyIsOverflowing=document.body.clientWidth<fullWindowWidth this.scrollbarWidth=this.measureScrollbar()} Modal.prototype.setScrollbar=function(){var bodyPad=parseInt((this.$body.css('padding-right')||0),10) this.originalBodyPad=document.body.style.paddingRight||'' if(this.bodyIsOverflowing)this.$body.css('padding-right',bodyPad+this.scrollbarWidth)} Modal.prototype.resetScrollbar=function(){this.$body.css('padding-right',this.originalBodyPad)} Modal.prototype.measureScrollbar=function(){var scrollDiv=document.createElement('div') scrollDiv.className='modal-scrollbar-measure' this.$body.append(scrollDiv) var scrollbarWidth=scrollDiv.offsetWidth-scrollDiv.clientWidth this.$body[0].removeChild(scrollDiv) return scrollbarWidth} function Plugin(option,_relatedTarget){return this.each(function(){var $this=$(this) var data=$this.data('bs.modal') var options=$.extend({},Modal.DEFAULTS,$this.data(),typeof option=='object'&&option) if(!data)$this.data('bs.modal',(data=new Modal(this,options))) if(typeof option=='string')data[option](_relatedTarget) else if(options.show)data.show(_relatedTarget)})} var old=$.fn.modal $.fn.modal=Plugin $.fn.modal.Constructor=Modal $.fn.modal.noConflict=function(){$.fn.modal=old return this} $(document).on('click.bs.modal.data-api','[data-toggle="modal"]',function(e){var $this=$(this) var href=$this.attr('href') var $target=$($this.attr('data-target')||(href&&href.replace(/.*(?=#[^\s]+$)/,''))) var option=$target.data('bs.modal')?'toggle':$.extend({remote:!/#/.test(href)&&href},$target.data(),$this.data()) if($this.is('a'))e.preventDefault() $target.one('show.bs.modal',function(showEvent){if(showEvent.isDefaultPrevented())return $target.one('hidden.bs.modal',function(){$this.is(':visible')&&$this.trigger('focus')})}) Plugin.call($target,option,this)})}(jQuery);+function($){'use strict';var Tooltip=function(element,options){this.type=null this.options=null this.enabled=null this.timeout=null this.hoverState=null this.$element=null this.inState=null this.init('tooltip',element,options)} Tooltip.VERSION='3.3.6' Tooltip.TRANSITION_DURATION=150 Tooltip.DEFAULTS={animation:true,placement:'top',selector:false,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:'hover focus',title:'',delay:0,html:false,container:false,viewport:{selector:'body',padding:0}} Tooltip.prototype.init=function(type,element,options){this.enabled=true this.type=type this.$element=$(element) this.options=this.getOptions(options) this.$viewport=this.options.viewport&&$($.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):(this.options.viewport.selector||this.options.viewport)) this.inState={click:false,hover:false,focus:false} if(this.$element[0]instanceof document.constructor&&!this.options.selector){throw new Error('`selector` option must be specified when initializing '+this.type+' on the window.document object!')} var triggers=this.options.trigger.split(' ') for(var i=triggers.length;i--;){var trigger=triggers[i] if(trigger=='click'){this.$element.on('click.'+this.type,this.options.selector,$.proxy(this.toggle,this))}else if(trigger!='manual'){var eventIn=trigger=='hover'?'mouseenter':'focusin' var eventOut=trigger=='hover'?'mouseleave':'focusout' this.$element.on(eventIn+'.'+this.type,this.options.selector,$.proxy(this.enter,this)) this.$element.on(eventOut+'.'+this.type,this.options.selector,$.proxy(this.leave,this))}} this.options.selector?(this._options=$.extend({},this.options,{trigger:'manual',selector:''})):this.fixTitle()} Tooltip.prototype.getDefaults=function(){return Tooltip.DEFAULTS} Tooltip.prototype.getOptions=function(options){options=$.extend({},this.getDefaults(),this.$element.data(),options) if(options.delay&&typeof options.delay=='number'){options.delay={show:options.delay,hide:options.delay}} return options} Tooltip.prototype.getDelegateOptions=function(){var options={} var defaults=this.getDefaults() this._options&&$.each(this._options,function(key,value){if(defaults[key]!=value)options[key]=value}) return options} Tooltip.prototype.enter=function(obj){var self=obj instanceof this.constructor?obj:$(obj.currentTarget).data('bs.'+this.type) if(!self){self=new this.constructor(obj.currentTarget,this.getDelegateOptions()) $(obj.currentTarget).data('bs.'+this.type,self)} if(obj instanceof $.Event){self.inState[obj.type=='focusin'?'focus':'hover']=true} if(self.tip().hasClass('in')||self.hoverState=='in'){self.hoverState='in' return} clearTimeout(self.timeout) self.hoverState='in' if(!self.options.delay||!self.options.delay.show)return self.show() self.timeout=setTimeout(function(){if(self.hoverState=='in')self.show()},self.options.delay.show)} Tooltip.prototype.isInStateTrue=function(){for(var key in this.inState){if(this.inState[key])return true} return false} Tooltip.prototype.leave=function(obj){var self=obj instanceof this.constructor?obj:$(obj.currentTarget).data('bs.'+this.type) if(!self){self=new this.constructor(obj.currentTarget,this.getDelegateOptions()) $(obj.currentTarget).data('bs.'+this.type,self)} if(obj instanceof $.Event){self.inState[obj.type=='focusout'?'focus':'hover']=false} if(self.isInStateTrue())return clearTimeout(self.timeout) self.hoverState='out' if(!self.options.delay||!self.options.delay.hide)return self.hide() self.timeout=setTimeout(function(){if(self.hoverState=='out')self.hide()},self.options.delay.hide)} Tooltip.prototype.show=function(){var e=$.Event('show.bs.'+this.type) if(this.hasContent()&&this.enabled){this.$element.trigger(e) var inDom=$.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]) if(e.isDefaultPrevented()||!inDom)return var that=this var $tip=this.tip() var tipId=this.getUID(this.type) this.setContent() $tip.attr('id',tipId) this.$element.attr('aria-describedby',tipId) if(this.options.animation)$tip.addClass('fade') var placement=typeof this.options.placement=='function'?this.options.placement.call(this,$tip[0],this.$element[0]):this.options.placement var autoToken=/\s?auto?\s?/i var autoPlace=autoToken.test(placement) if(autoPlace)placement=placement.replace(autoToken,'')||'top' $tip.detach().css({top:0,left:0,display:'block'}).addClass(placement).data('bs.'+this.type,this) this.options.container?$tip.appendTo(this.options.container):$tip.insertAfter(this.$element) this.$element.trigger('inserted.bs.'+this.type) var pos=this.getPosition() var actualWidth=$tip[0].offsetWidth var actualHeight=$tip[0].offsetHeight if(autoPlace){var orgPlacement=placement var viewportDim=this.getPosition(this.$viewport) placement=placement=='bottom'&&pos.bottom+actualHeight>viewportDim.bottom?'top':placement=='top'&&pos.top-actualHeight<viewportDim.top?'bottom':placement=='right'&&pos.right+actualWidth>viewportDim.width?'left':placement=='left'&&pos.left-actualWidth<viewportDim.left?'right':placement $tip.removeClass(orgPlacement).addClass(placement)} var calculatedOffset=this.getCalculatedOffset(placement,pos,actualWidth,actualHeight) this.applyPlacement(calculatedOffset,placement) var complete=function(){var prevHoverState=that.hoverState that.$element.trigger('shown.bs.'+that.type) that.hoverState=null if(prevHoverState=='out')that.leave(that)} $.support.transition&&this.$tip.hasClass('fade')?$tip.one('bsTransitionEnd',complete).emulateTransitionEnd(Tooltip.TRANSITION_DURATION):complete()}} Tooltip.prototype.applyPlacement=function(offset,placement){var $tip=this.tip() var width=$tip[0].offsetWidth var height=$tip[0].offsetHeight var marginTop=parseInt($tip.css('margin-top'),10) var marginLeft=parseInt($tip.css('margin-left'),10) if(isNaN(marginTop))marginTop=0 if(isNaN(marginLeft))marginLeft=0 offset.top+=marginTop offset.left+=marginLeft $.offset.setOffset($tip[0],$.extend({using:function(props){$tip.css({top:Math.round(props.top),left:Math.round(props.left)})}},offset),0) $tip.addClass('in') var actualWidth=$tip[0].offsetWidth var actualHeight=$tip[0].offsetHeight if(placement=='top'&&actualHeight!=height){offset.top=offset.top+height-actualHeight} var delta=this.getViewportAdjustedDelta(placement,offset,actualWidth,actualHeight) if(delta.left)offset.left+=delta.left else offset.top+=delta.top var isVertical=/top|bottom/.test(placement) var arrowDelta=isVertical?delta.left*2-width+actualWidth:delta.top*2-height+actualHeight var arrowOffsetPosition=isVertical?'offsetWidth':'offsetHeight' $tip.offset(offset) this.replaceArrow(arrowDelta,$tip[0][arrowOffsetPosition],isVertical)} Tooltip.prototype.replaceArrow=function(delta,dimension,isVertical){this.arrow().css(isVertical?'left':'top',50*(1-delta/dimension)+'%').css(isVertical?'top':'left','')} Tooltip.prototype.setContent=function(){var $tip=this.tip() var title=this.getTitle() $tip.find('.tooltip-inner')[this.options.html?'html':'text'](title) $tip.removeClass('fade in top bottom left right')} Tooltip.prototype.hide=function(callback){var that=this var $tip=$(this.$tip) var e=$.Event('hide.bs.'+this.type) function complete(){if(that.hoverState!='in')$tip.detach() that.$element.removeAttr('aria-describedby').trigger('hidden.bs.'+that.type) callback&&callback()} this.$element.trigger(e) if(e.isDefaultPrevented())return $tip.removeClass('in') $.support.transition&&$tip.hasClass('fade')?$tip.one('bsTransitionEnd',complete).emulateTransitionEnd(Tooltip.TRANSITION_DURATION):complete() this.hoverState=null return this} Tooltip.prototype.fixTitle=function(){var $e=this.$element if($e.attr('title')||typeof $e.attr('data-original-title')!='string'){$e.attr('data-original-title',$e.attr('title')||'').attr('title','')}} Tooltip.prototype.hasContent=function(){return this.getTitle()} Tooltip.prototype.getPosition=function($element){$element=$element||this.$element var el=$element[0] var isBody=el.tagName=='BODY' var elRect=el.getBoundingClientRect() if(elRect.width==null){elRect=$.extend({},elRect,{width:elRect.right-elRect.left,height:elRect.bottom-elRect.top})} var elOffset=isBody?{top:0,left:0}:$element.offset() var scroll={scroll:isBody?document.documentElement.scrollTop||document.body.scrollTop:$element.scrollTop()} var outerDims=isBody?{width:$(window).width(),height:$(window).height()}:null return $.extend({},elRect,scroll,outerDims,elOffset)} Tooltip.prototype.getCalculatedOffset=function(placement,pos,actualWidth,actualHeight){return placement=='bottom'?{top:pos.top+pos.height,left:pos.left+pos.width/2-actualWidth/2}:placement=='top'?{top:pos.top-actualHeight,left:pos.left+pos.width/2-actualWidth/2}:placement=='left'?{top:pos.top+pos.height/2-actualHeight/2,left:pos.left-actualWidth}:{top:pos.top+pos.height/2-actualHeight/2,left:pos.left+pos.width}} Tooltip.prototype.getViewportAdjustedDelta=function(placement,pos,actualWidth,actualHeight){var delta={top:0,left:0} if(!this.$viewport)return delta var viewportPadding=this.options.viewport&&this.options.viewport.padding||0 var viewportDimensions=this.getPosition(this.$viewport) if(/right|left/.test(placement)){var topEdgeOffset=pos.top-viewportPadding-viewportDimensions.scroll var bottomEdgeOffset=pos.top+viewportPadding-viewportDimensions.scroll+actualHeight if(topEdgeOffset<viewportDimensions.top){delta.top=viewportDimensions.top-topEdgeOffset}else if(bottomEdgeOffset>viewportDimensions.top+viewportDimensions.height){delta.top=viewportDimensions.top+viewportDimensions.height-bottomEdgeOffset}}else{var leftEdgeOffset=pos.left-viewportPadding var rightEdgeOffset=pos.left+viewportPadding+actualWidth if(leftEdgeOffset<viewportDimensions.left){delta.left=viewportDimensions.left-leftEdgeOffset}else if(rightEdgeOffset>viewportDimensions.right){delta.left=viewportDimensions.left+viewportDimensions.width-rightEdgeOffset}} return delta} Tooltip.prototype.getTitle=function(){var title var $e=this.$element var o=this.options title=$e.attr('data-original-title')||(typeof o.title=='function'?o.title.call($e[0]):o.title) return title} Tooltip.prototype.getUID=function(prefix){do prefix+=~~(Math.random()*1000000) while(document.getElementById(prefix)) return prefix} Tooltip.prototype.tip=function(){if(!this.$tip){this.$tip=$(this.options.template) if(this.$tip.length!=1){throw new Error(this.type+' `template` option must consist of exactly 1 top-level element!')}} return this.$tip} Tooltip.prototype.arrow=function(){return(this.$arrow=this.$arrow||this.tip().find('.tooltip-arrow'))} Tooltip.prototype.enable=function(){this.enabled=true} Tooltip.prototype.disable=function(){this.enabled=false} Tooltip.prototype.toggleEnabled=function(){this.enabled=!this.enabled} Tooltip.prototype.toggle=function(e){var self=this if(e){self=$(e.currentTarget).data('bs.'+this.type) if(!self){self=new this.constructor(e.currentTarget,this.getDelegateOptions()) $(e.currentTarget).data('bs.'+this.type,self)}} if(e){self.inState.click=!self.inState.click if(self.isInStateTrue())self.enter(self) else self.leave(self)}else{self.tip().hasClass('in')?self.leave(self):self.enter(self)}} Tooltip.prototype.destroy=function(){var that=this clearTimeout(this.timeout) this.hide(function(){that.$element.off('.'+that.type).removeData('bs.'+that.type) if(that.$tip){that.$tip.detach()} that.$tip=null that.$arrow=null that.$viewport=null})} function Plugin(option){return this.each(function(){var $this=$(this) var data=$this.data('bs.tooltip') var options=typeof option=='object'&&option if(!data&&/destroy|hide/.test(option))return if(!data)$this.data('bs.tooltip',(data=new Tooltip(this,options))) if(typeof option=='string')data[option]()})} var old=$.fn.tooltip $.fn.tooltip=Plugin $.fn.tooltip.Constructor=Tooltip $.fn.tooltip.noConflict=function(){$.fn.tooltip=old return this}}(jQuery);+function($){'use strict';var Popover=function(element,options){this.init('popover',element,options)} if(!$.fn.tooltip)throw new Error('Popover requires tooltip.js') Popover.VERSION='3.3.6' Popover.DEFAULTS=$.extend({},$.fn.tooltip.Constructor.DEFAULTS,{placement:'right',trigger:'click',content:'',template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}) Popover.prototype=$.extend({},$.fn.tooltip.Constructor.prototype) Popover.prototype.constructor=Popover Popover.prototype.getDefaults=function(){return Popover.DEFAULTS} Popover.prototype.setContent=function(){var $tip=this.tip() var title=this.getTitle() var content=this.getContent() $tip.find('.popover-title')[this.options.html?'html':'text'](title) $tip.find('.popover-content').children().detach().end()[this.options.html?(typeof content=='string'?'html':'append'):'text'](content) $tip.removeClass('fade top bottom left right in') if(!$tip.find('.popover-title').html())$tip.find('.popover-title').hide()} Popover.prototype.hasContent=function(){return this.getTitle()||this.getContent()} Popover.prototype.getContent=function(){var $e=this.$element var o=this.options return $e.attr('data-content')||(typeof o.content=='function'?o.content.call($e[0]):o.content)} Popover.prototype.arrow=function(){return(this.$arrow=this.$arrow||this.tip().find('.arrow'))} function Plugin(option){return this.each(function(){var $this=$(this) var data=$this.data('bs.popover') var options=typeof option=='object'&&option if(!data&&/destroy|hide/.test(option))return if(!data)$this.data('bs.popover',(data=new Popover(this,options))) if(typeof option=='string')data[option]()})} var old=$.fn.popover $.fn.popover=Plugin $.fn.popover.Constructor=Popover $.fn.popover.noConflict=function(){$.fn.popover=old return this}}(jQuery);+function($){'use strict';function ScrollSpy(element,options){this.$body=$(document.body) this.$scrollElement=$(element).is(document.body)?$(window):$(element) this.options=$.extend({},ScrollSpy.DEFAULTS,options) this.selector=(this.options.target||'')+' .nav li > a' this.offsets=[] this.targets=[] this.activeTarget=null this.scrollHeight=0 this.$scrollElement.on('scroll.bs.scrollspy',$.proxy(this.process,this)) this.refresh() this.process()} ScrollSpy.VERSION='3.3.6' ScrollSpy.DEFAULTS={offset:10} ScrollSpy.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)} ScrollSpy.prototype.refresh=function(){var that=this var offsetMethod='offset' var offsetBase=0 this.offsets=[] this.targets=[] this.scrollHeight=this.getScrollHeight() if(!$.isWindow(this.$scrollElement[0])){offsetMethod='position' offsetBase=this.$scrollElement.scrollTop()} this.$body.find(this.selector).map(function(){var $el=$(this) var href=$el.data('target')||$el.attr('href') var $href=/^#./.test(href)&&$(href) return($href&&$href.length&&$href.is(':visible')&&[[$href[offsetMethod]().top+offsetBase,href]])||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){that.offsets.push(this[0]) that.targets.push(this[1])})} ScrollSpy.prototype.process=function(){var scrollTop=this.$scrollElement.scrollTop()+this.options.offset var scrollHeight=this.getScrollHeight() var maxScroll=this.options.offset+scrollHeight-this.$scrollElement.height() var offsets=this.offsets var targets=this.targets var activeTarget=this.activeTarget var i if(this.scrollHeight!=scrollHeight){this.refresh()} if(scrollTop>=maxScroll){return activeTarget!=(i=targets[targets.length-1])&&this.activate(i)} if(activeTarget&&scrollTop<offsets[0]){this.activeTarget=null return this.clear()} for(i=offsets.length;i--;){activeTarget!=targets[i]&&scrollTop>=offsets[i]&&(offsets[i+1]===undefined||scrollTop<offsets[i+1])&&this.activate(targets[i])}} ScrollSpy.prototype.activate=function(target){this.activeTarget=target this.clear() var selector=this.selector+'[data-target="'+target+'"],'+ this.selector+'[href="'+target+'"]' var active=$(selector).parents('li').addClass('active') if(active.parent('.dropdown-menu').length){active=active.closest('li.dropdown').addClass('active')} active.trigger('activate.bs.scrollspy')} ScrollSpy.prototype.clear=function(){$(this.selector).parentsUntil(this.options.target,'.active').removeClass('active')} function Plugin(option){return this.each(function(){var $this=$(this) var data=$this.data('bs.scrollspy') var options=typeof option=='object'&&option if(!data)$this.data('bs.scrollspy',(data=new ScrollSpy(this,options))) if(typeof option=='string')data[option]()})} var old=$.fn.scrollspy $.fn.scrollspy=Plugin $.fn.scrollspy.Constructor=ScrollSpy $.fn.scrollspy.noConflict=function(){$.fn.scrollspy=old return this} $(window).on('load.bs.scrollspy.data-api',function(){$('[data-spy="scroll"]').each(function(){var $spy=$(this) Plugin.call($spy,$spy.data())})})}(jQuery);+function($){'use strict';var Tab=function(element){this.element=$(element)} Tab.VERSION='3.3.6' Tab.TRANSITION_DURATION=150 Tab.prototype.show=function(){var $this=this.element var $ul=$this.closest('ul:not(.dropdown-menu)') var selector=$this.data('target') if(!selector){selector=$this.attr('href') selector=selector&&selector.replace(/.*(?=#[^\s]*$)/,'')} if($this.parent('li').hasClass('active'))return var $previous=$ul.find('.active:last a') var hideEvent=$.Event('hide.bs.tab',{relatedTarget:$this[0]}) var showEvent=$.Event('show.bs.tab',{relatedTarget:$previous[0]}) $previous.trigger(hideEvent) $this.trigger(showEvent) if(showEvent.isDefaultPrevented()||hideEvent.isDefaultPrevented())return var $target=$(selector) this.activate($this.closest('li'),$ul) this.activate($target,$target.parent(),function(){$previous.trigger({type:'hidden.bs.tab',relatedTarget:$this[0]}) $this.trigger({type:'shown.bs.tab',relatedTarget:$previous[0]})})} Tab.prototype.activate=function(element,container,callback){var $active=container.find('> .active') var transition=callback&&$.support.transition&&($active.length&&$active.hasClass('fade')||!!container.find('> .fade').length) function next(){$active.removeClass('active').find('> .dropdown-menu > .active').removeClass('active').end().find('[data-toggle="tab"]').attr('aria-expanded',false) element.addClass('active').find('[data-toggle="tab"]').attr('aria-expanded',true) if(transition){element[0].offsetWidth element.addClass('in')}else{element.removeClass('fade')} if(element.parent('.dropdown-menu').length){element.closest('li.dropdown').addClass('active').end().find('[data-toggle="tab"]').attr('aria-expanded',true)} callback&&callback()} $active.length&&transition?$active.one('bsTransitionEnd',next).emulateTransitionEnd(Tab.TRANSITION_DURATION):next() $active.removeClass('in')} function Plugin(option){return this.each(function(){var $this=$(this) var data=$this.data('bs.tab') if(!data)$this.data('bs.tab',(data=new Tab(this))) if(typeof option=='string')data[option]()})} var old=$.fn.tab $.fn.tab=Plugin $.fn.tab.Constructor=Tab $.fn.tab.noConflict=function(){$.fn.tab=old return this} var clickHandler=function(e){e.preventDefault() Plugin.call($(this),'show')} $(document).on('click.bs.tab.data-api','[data-toggle="tab"]',clickHandler).on('click.bs.tab.data-api','[data-toggle="pill"]',clickHandler)}(jQuery);+function($){'use strict';var Affix=function(element,options){this.options=$.extend({},Affix.DEFAULTS,options) this.$target=$(this.options.target).on('scroll.bs.affix.data-api',$.proxy(this.checkPosition,this)).on('click.bs.affix.data-api',$.proxy(this.checkPositionWithEventLoop,this)) this.$element=$(element) this.affixed=null this.unpin=null this.pinnedOffset=null this.checkPosition()} Affix.VERSION='3.3.6' Affix.RESET='affix affix-top affix-bottom' Affix.DEFAULTS={offset:0,target:window} Affix.prototype.getState=function(scrollHeight,height,offsetTop,offsetBottom){var scrollTop=this.$target.scrollTop() var position=this.$element.offset() var targetHeight=this.$target.height() if(offsetTop!=null&&this.affixed=='top')return scrollTop<offsetTop?'top':false if(this.affixed=='bottom'){if(offsetTop!=null)return(scrollTop+this.unpin<=position.top)?false:'bottom' return(scrollTop+targetHeight<=scrollHeight-offsetBottom)?false:'bottom'} var initializing=this.affixed==null var colliderTop=initializing?scrollTop:position.top var colliderHeight=initializing?targetHeight:height if(offsetTop!=null&&scrollTop<=offsetTop)return'top' if(offsetBottom!=null&&(colliderTop+colliderHeight>=scrollHeight-offsetBottom))return'bottom' return false} Affix.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset this.$element.removeClass(Affix.RESET).addClass('affix') var scrollTop=this.$target.scrollTop() var position=this.$element.offset() return(this.pinnedOffset=position.top-scrollTop)} Affix.prototype.checkPositionWithEventLoop=function(){setTimeout($.proxy(this.checkPosition,this),1)} Affix.prototype.checkPosition=function(){if(!this.$element.is(':visible'))return var height=this.$element.height() var offset=this.options.offset var offsetTop=offset.top var offsetBottom=offset.bottom var scrollHeight=Math.max($(document).height(),$(document.body).height()) if(typeof offset!='object')offsetBottom=offsetTop=offset if(typeof offsetTop=='function')offsetTop=offset.top(this.$element) if(typeof offsetBottom=='function')offsetBottom=offset.bottom(this.$element) var affix=this.getState(scrollHeight,height,offsetTop,offsetBottom) if(this.affixed!=affix){if(this.unpin!=null)this.$element.css('top','') var affixType='affix'+(affix?'-'+affix:'') var e=$.Event(affixType+'.bs.affix') this.$element.trigger(e) if(e.isDefaultPrevented())return this.affixed=affix this.unpin=affix=='bottom'?this.getPinnedOffset():null this.$element.removeClass(Affix.RESET).addClass(affixType).trigger(affixType.replace('affix','affixed')+'.bs.affix')} if(affix=='bottom'){this.$element.offset({top:scrollHeight-height-offsetBottom})}} function Plugin(option){return this.each(function(){var $this=$(this) var data=$this.data('bs.affix') var options=typeof option=='object'&&option if(!data)$this.data('bs.affix',(data=new Affix(this,options))) if(typeof option=='string')data[option]()})} var old=$.fn.affix $.fn.affix=Plugin $.fn.affix.Constructor=Affix $.fn.affix.noConflict=function(){$.fn.affix=old return this} $(window).on('load',function(){$('[data-spy="affix"]').each(function(){var $spy=$(this) var data=$spy.data() data.offset=data.offset||{} if(data.offsetBottom!=null)data.offset.bottom=data.offsetBottom if(data.offsetTop!=null)data.offset.top=data.offsetTop Plugin.call($spy,data)})})}(jQuery);
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*!
|
2 |
+
* Bootstrap v3.3.7 (http://getbootstrap.com)
|
3 |
+
* Copyright 2011-2016 Twitter, Inc.
|
4 |
+
* Licensed under the MIT license
|
5 |
+
*/
|
6 |
+
if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){if(a(b.target).is(this))return b.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.7",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a("#"===f?[]:f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.7",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c).prop(c,!0)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c).prop(c,!1))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target).closest(".btn");b.call(d,"toggle"),a(c.target).is('input[type="radio"], input[type="checkbox"]')||(c.preventDefault(),d.is("input,button")?d.trigger("focus"):d.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(a>this.$items.length-1||a<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide("next")},c.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.7",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.7",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",c).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){d.$element.one("mouseup.dismiss.bs.modal",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in"),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$dialog.one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){document===a.target||this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a(document.createElement("div")).addClass("modal-backdrop "+e).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",a,b)};c.VERSION="3.3.7",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);if(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),!c.isInStateTrue())return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-m<o.top?"bottom":"right"==h&&k.right+l>o.width?"left":"left"==h&&k.left-l<o.left?"right":h,f.removeClass(n).addClass(h)}var p=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(p,h);var q=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",q).emulateTransitionEnd(c.TRANSITION_DURATION):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top+=g,b.left+=h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element&&e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event("hide.bs."+this.type);if(this.$element.trigger(g),!g.isDefaultPrevented())return f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=window.SVGElement&&c instanceof window.SVGElement,g=d?{top:0,left:0}:f?null:b.offset(),h={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},i=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,h,i,g)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.7",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.7",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){
|
7 |
+
this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.7",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.7",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return e<c&&"top";if("bottom"==this.affixed)return null!=c?!(e+this.unpin<=f.top)&&"bottom":!(e+g<=a-d)&&"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&e<=c?"top":null!=d&&i+j>=a-d&&"bottom"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
|
includes/tinvwl.class.php
CHANGED
@@ -84,7 +84,7 @@ class TInvWL {
|
|
84 |
* Define hooks
|
85 |
*/
|
86 |
function define_hooks() {
|
87 |
-
|
88 |
}
|
89 |
|
90 |
/**
|
@@ -110,4 +110,21 @@ class TInvWL {
|
|
110 |
update_option( $this->_n . '_ver', $this->_v );
|
111 |
}
|
112 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
113 |
}
|
84 |
* Define hooks
|
85 |
*/
|
86 |
function define_hooks() {
|
87 |
+
add_filter( 'plugin_action_links_' . plugin_basename(TINVWL_PATH . 'ti-woocommerce-wishlist.php'), array( $this,'action_links') );
|
88 |
}
|
89 |
|
90 |
/**
|
110 |
update_option( $this->_n . '_ver', $this->_v );
|
111 |
}
|
112 |
}
|
113 |
+
|
114 |
+
|
115 |
+
/**
|
116 |
+
* action_links function.
|
117 |
+
*
|
118 |
+
* @access public
|
119 |
+
*
|
120 |
+
* @param mixed $links
|
121 |
+
* @return array
|
122 |
+
*/
|
123 |
+
public function action_links( $links ) {
|
124 |
+
$plugin_links[] = '<a href="' . admin_url( 'admin.php?page=tinvwl' ) . '">' . __( 'Settings', 'ti-woocommerce-wishlist' ) . '</a>';
|
125 |
+
$plugin_links[] = '<a target="_blank" href="https://templateinvaders.com/product/ti-woocommerce-wishlist-wordpress-plugin/" style="color:#ff5739">' . __( 'Premium Version', 'ti-woocommerce-wishlist' ) . '</a>';
|
126 |
+
$plugin_links[] = '<a target="_blank" href="https://demo.templateinvaders.com/wordpress/plugins/wishlist/" style="color:#515151">' . __( 'Live Demo', 'ti-woocommerce-wishlist' ) . '</a>';
|
127 |
+
|
128 |
+
return array_merge( $links, $plugin_links );
|
129 |
+
}
|
130 |
}
|
languages/ti-woocommerce-wishlist.pot
CHANGED
@@ -3,7 +3,7 @@ msgid ""
|
|
3 |
msgstr ""
|
4 |
"Project-Id-Version: TI WooCommerce Wishlist\n"
|
5 |
"Report-Msgid-Bugs-To: \n"
|
6 |
-
"POT-Creation-Date:
|
7 |
"POT-Revision-Date: Sun Apr 10 2016 12:21:06 GMT+0200 (Västeuropa, "
|
8 |
"sommartid)\n"
|
9 |
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
@@ -80,7 +80,7 @@ msgid "Wishlist Page Options"
|
|
80 |
msgstr ""
|
81 |
|
82 |
#: ../admin/settings/general.class.php:90
|
83 |
-
#: ../admin/settings/general.class.php:107 ../public/tinvwl.class.php:
|
84 |
msgid "Coming soon"
|
85 |
msgstr ""
|
86 |
|
@@ -685,6 +685,18 @@ msgid ""
|
|
685 |
"%1$s %3$s is required. Please activate it before activating this plugin."
|
686 |
msgstr ""
|
687 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
688 |
#: ../includes/view.helper.php:177
|
689 |
msgid "Attention!"
|
690 |
msgstr ""
|
@@ -711,7 +723,7 @@ msgid "Page Setup"
|
|
711 |
msgstr ""
|
712 |
|
713 |
#: ../includes/wizard.class.php:281 ../includes/wizard.class.php:311
|
714 |
-
#: ../public/tinvwl.class.php:
|
715 |
msgid "Wishlist"
|
716 |
msgstr ""
|
717 |
|
@@ -747,12 +759,12 @@ msgstr ""
|
|
747 |
msgid "Product option is not selected!"
|
748 |
msgstr ""
|
749 |
|
750 |
-
#: ../public/tinvwl.class.php:
|
751 |
#, php-format
|
752 |
msgid "%1$s of %2$s"
|
753 |
msgstr ""
|
754 |
|
755 |
-
#: ../public/tinvwl.class.php:
|
756 |
msgid "Create New"
|
757 |
msgstr ""
|
758 |
|
3 |
msgstr ""
|
4 |
"Project-Id-Version: TI WooCommerce Wishlist\n"
|
5 |
"Report-Msgid-Bugs-To: \n"
|
6 |
+
"POT-Creation-Date: 2017-01-27 22:26+0700\n"
|
7 |
"POT-Revision-Date: Sun Apr 10 2016 12:21:06 GMT+0200 (Västeuropa, "
|
8 |
"sommartid)\n"
|
9 |
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
80 |
msgstr ""
|
81 |
|
82 |
#: ../admin/settings/general.class.php:90
|
83 |
+
#: ../admin/settings/general.class.php:107 ../public/tinvwl.class.php:201
|
84 |
msgid "Coming soon"
|
85 |
msgstr ""
|
86 |
|
685 |
"%1$s %3$s is required. Please activate it before activating this plugin."
|
686 |
msgstr ""
|
687 |
|
688 |
+
#: ../includes/tinvwl.class.php:124
|
689 |
+
msgid "Settings"
|
690 |
+
msgstr ""
|
691 |
+
|
692 |
+
#: ../includes/tinvwl.class.php:125
|
693 |
+
msgid "Premium Version"
|
694 |
+
msgstr ""
|
695 |
+
|
696 |
+
#: ../includes/tinvwl.class.php:126
|
697 |
+
msgid "Live Demo"
|
698 |
+
msgstr ""
|
699 |
+
|
700 |
#: ../includes/view.helper.php:177
|
701 |
msgid "Attention!"
|
702 |
msgstr ""
|
723 |
msgstr ""
|
724 |
|
725 |
#: ../includes/wizard.class.php:281 ../includes/wizard.class.php:311
|
726 |
+
#: ../public/tinvwl.class.php:402
|
727 |
msgid "Wishlist"
|
728 |
msgstr ""
|
729 |
|
759 |
msgid "Product option is not selected!"
|
760 |
msgstr ""
|
761 |
|
762 |
+
#: ../public/tinvwl.class.php:200
|
763 |
#, php-format
|
764 |
msgid "%1$s of %2$s"
|
765 |
msgstr ""
|
766 |
|
767 |
+
#: ../public/tinvwl.class.php:339
|
768 |
msgid "Create New"
|
769 |
msgstr ""
|
770 |
|
public/tinvwl.class.php
CHANGED
@@ -49,6 +49,7 @@ class TInvWL_Public_TInvWL {
|
|
49 |
add_action( 'init', array( $this, 'apply_rewrite_rules' ), 0 );
|
50 |
add_action( 'init', array( $this, 'add_rewrite_rules' ), 0 );
|
51 |
add_filter( 'query_vars', array( $this, 'add_query_var' ) );
|
|
|
52 |
|
53 |
add_action( 'wp_ajax_nopriv_' . $this->_n . '_css', array( $this, 'dynaminc_css' ) );
|
54 |
add_action( 'wp_ajax_' . $this->_n . '_css', array( $this, 'dynaminc_css' ) );
|
@@ -420,4 +421,22 @@ class TInvWL_Public_TInvWL {
|
|
420 |
}
|
421 |
return $url;
|
422 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
423 |
}
|
49 |
add_action( 'init', array( $this, 'apply_rewrite_rules' ), 0 );
|
50 |
add_action( 'init', array( $this, 'add_rewrite_rules' ), 0 );
|
51 |
add_filter( 'query_vars', array( $this, 'add_query_var' ) );
|
52 |
+
add_action( 'deleted_user', array( $this, 'delete_user_wishlist' ) );
|
53 |
|
54 |
add_action( 'wp_ajax_nopriv_' . $this->_n . '_css', array( $this, 'dynaminc_css' ) );
|
55 |
add_action( 'wp_ajax_' . $this->_n . '_css', array( $this, 'dynaminc_css' ) );
|
421 |
}
|
422 |
return $url;
|
423 |
}
|
424 |
+
|
425 |
+
/**
|
426 |
+
* Remove Wishlist a user when the user is deleted
|
427 |
+
*
|
428 |
+
* @param integer $id Removed userid.
|
429 |
+
*/
|
430 |
+
function delete_user_wishlist( $id ) {
|
431 |
+
$wl = new TInvWL_Wishlist( $this->_n );
|
432 |
+
$wishlists = $wl->get( array(
|
433 |
+
'author' => $id,
|
434 |
+
'count' => 9999999,
|
435 |
+
) );
|
436 |
+
if ( ! empty( $wishlists ) ) {
|
437 |
+
foreach ( $wishlists as $wishlist ) {
|
438 |
+
$wl->remove( $wishlist['ID'] );
|
439 |
+
}
|
440 |
+
}
|
441 |
+
}
|
442 |
}
|
public/wishlist/buttons.class.php
CHANGED
@@ -379,12 +379,18 @@ class TInvWL_Public_Wishlist_Buttons {
|
|
379 |
return array();
|
380 |
}
|
381 |
|
382 |
-
$paged
|
383 |
-
$paged
|
|
|
|
|
|
|
|
|
|
|
|
|
384 |
|
385 |
$product_data = array(
|
386 |
-
'count' =>
|
387 |
-
'offset' =>
|
388 |
'external' => false,
|
389 |
);
|
390 |
|
379 |
return array();
|
380 |
}
|
381 |
|
382 |
+
$paged = get_query_var( 'paged', 1 );
|
383 |
+
$paged = 1 < $paged ? $paged : 1;
|
384 |
+
$per_page = apply_filters( 'tinvwl_wishlist_buttons_per_page', filter_input( INPUT_POST, 'lists_per_page', FILTER_VALIDATE_INT, array(
|
385 |
+
'options' => array(
|
386 |
+
'default' => 10,
|
387 |
+
'min_range' => 1,
|
388 |
+
),
|
389 |
+
) ) );
|
390 |
|
391 |
$product_data = array(
|
392 |
+
'count' => $per_page,
|
393 |
+
'offset' => $per_page * ($paged - 1),
|
394 |
'external' => false,
|
395 |
);
|
396 |
|
public/wishlist/view.class.php
CHANGED
@@ -29,6 +29,13 @@ class TInvWL_Public_Wishlist_View {
|
|
29 |
*/
|
30 |
private $_v;
|
31 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
32 |
/**
|
33 |
* Constructor
|
34 |
*
|
@@ -54,6 +61,7 @@ class TInvWL_Public_Wishlist_View {
|
|
54 |
|
55 |
add_action( 'tinvwl_wishlist_item_action_add_to_card', array( $this, 'product_allow_add_to_card' ), 10, 3 );
|
56 |
add_filter( 'tinvwl_wishlist_item_add_to_card', array( $this, 'external_text' ), 10, 3 );
|
|
|
57 |
|
58 |
TInvWL_Public_Wishlist_Buttons::init( $this->_n );
|
59 |
}
|
@@ -310,6 +318,8 @@ class TInvWL_Public_Wishlist_View {
|
|
310 |
|
311 |
$products = $this->get_current_products( $wishlist, true, absint( $atts['lists_per_page'] ) );
|
312 |
|
|
|
|
|
313 |
foreach ( $products as $key => $product ) {
|
314 |
if ( ! $product['data'] ) {
|
315 |
unset( $products[ $key ] );
|
@@ -424,4 +434,16 @@ class TInvWL_Public_Wishlist_View {
|
|
424 |
$this->htmloutput( $atts );
|
425 |
return ob_get_clean();
|
426 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
427 |
}
|
29 |
*/
|
30 |
private $_v;
|
31 |
|
32 |
+
/**
|
33 |
+
* List per page
|
34 |
+
*
|
35 |
+
* @var integer
|
36 |
+
*/
|
37 |
+
private $lists_per_page;
|
38 |
+
|
39 |
/**
|
40 |
* Constructor
|
41 |
*
|
61 |
|
62 |
add_action( 'tinvwl_wishlist_item_action_add_to_card', array( $this, 'product_allow_add_to_card' ), 10, 3 );
|
63 |
add_filter( 'tinvwl_wishlist_item_add_to_card', array( $this, 'external_text' ), 10, 3 );
|
64 |
+
add_action( 'tinvwl_after_wishlist_table', array( $this, 'get_per_page' ) );
|
65 |
|
66 |
TInvWL_Public_Wishlist_Buttons::init( $this->_n );
|
67 |
}
|
318 |
|
319 |
$products = $this->get_current_products( $wishlist, true, absint( $atts['lists_per_page'] ) );
|
320 |
|
321 |
+
$this->lists_per_page = $atts['lists_per_page'];
|
322 |
+
|
323 |
foreach ( $products as $key => $product ) {
|
324 |
if ( ! $product['data'] ) {
|
325 |
unset( $products[ $key ] );
|
434 |
$this->htmloutput( $atts );
|
435 |
return ob_get_clean();
|
436 |
}
|
437 |
+
|
438 |
+
/**
|
439 |
+
* Get per page items for buttons
|
440 |
+
*/
|
441 |
+
function get_per_page() {
|
442 |
+
if ( ! empty( $this->lists_per_page ) ) {
|
443 |
+
echo TInvWL_Form::_text( array( // WPCS: xss ok.
|
444 |
+
'type' => 'hidden',
|
445 |
+
'name' => 'lists_per_page',
|
446 |
+
), $this->lists_per_page);
|
447 |
+
}
|
448 |
+
}
|
449 |
}
|
readme.txt
CHANGED
@@ -3,8 +3,8 @@ Contributors: templateinvaders
|
|
3 |
Donate link: https://templateinvaders.com/
|
4 |
Tags: wishlist, woocommerce, products, e-commerce, shop, ecommerce wishlist, woocommerce wishlist, woocommerce , shop wishlist, wishlist for Woocommerce
|
5 |
Requires at least: 4.5
|
6 |
-
Tested up to: 4.7
|
7 |
-
Stable tag: 1.1.
|
8 |
License: GPLv3
|
9 |
License URI: https://www.gnu.org/licenses/gpl-3.0.html
|
10 |
|
@@ -114,6 +114,17 @@ There are few ways to install TI WooCommerce Wishlist plugin:
|
|
114 |
|
115 |
== Changelog ==
|
116 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
117 |
= 1.1.5 =
|
118 |
*Release Date - 10 January 2017*
|
119 |
|
3 |
Donate link: https://templateinvaders.com/
|
4 |
Tags: wishlist, woocommerce, products, e-commerce, shop, ecommerce wishlist, woocommerce wishlist, woocommerce , shop wishlist, wishlist for Woocommerce
|
5 |
Requires at least: 4.5
|
6 |
+
Tested up to: 4.7.2
|
7 |
+
Stable tag: 1.1.7
|
8 |
License: GPLv3
|
9 |
License URI: https://www.gnu.org/licenses/gpl-3.0.html
|
10 |
|
114 |
|
115 |
== Changelog ==
|
116 |
|
117 |
+
= 1.1.7 =
|
118 |
+
*Release Date - 30 January 2017*
|
119 |
+
|
120 |
+
* Fixed an issue when maximum 10 products can be added to cart from a Wishlist page using the "Add all to cart" button
|
121 |
+
|
122 |
+
= 1.1.6 =
|
123 |
+
*Release Date - 27 January 2017*
|
124 |
+
|
125 |
+
* Fixed class loading critical error after plugin activation
|
126 |
+
|
127 |
+
|
128 |
= 1.1.5 =
|
129 |
*Release Date - 10 January 2017*
|
130 |
|
ti-woocommerce-wishlist.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
* Plugin Name: TI WooCommerce Wishlist
|
5 |
* Plugin URI: https://templateinvaders.com/product/ti-woocommerce-wishlist-wordpress-plugin/
|
6 |
* Description: Wishlist functionality for your WooCommerce store.
|
7 |
-
* Version: 1.1.
|
8 |
* Author: Template Invaders
|
9 |
* Author URI: https://templateinvaders.com/
|
10 |
* License: GPL-2.0+
|
@@ -37,7 +37,7 @@ if ( ! defined( 'TINVWL_DOMAIN' ) ) {
|
|
37 |
}
|
38 |
|
39 |
if ( ! defined( 'TINVWL_FVERSION' ) ) {
|
40 |
-
define( 'TINVWL_FVERSION', '1.1.
|
41 |
}
|
42 |
|
43 |
if ( ! defined( 'TINVWL_LOAD_FREE' ) ) {
|
4 |
* Plugin Name: TI WooCommerce Wishlist
|
5 |
* Plugin URI: https://templateinvaders.com/product/ti-woocommerce-wishlist-wordpress-plugin/
|
6 |
* Description: Wishlist functionality for your WooCommerce store.
|
7 |
+
* Version: 1.1.7
|
8 |
* Author: Template Invaders
|
9 |
* Author URI: https://templateinvaders.com/
|
10 |
* License: GPL-2.0+
|
37 |
}
|
38 |
|
39 |
if ( ! defined( 'TINVWL_FVERSION' ) ) {
|
40 |
+
define( 'TINVWL_FVERSION', '1.1.7' );
|
41 |
}
|
42 |
|
43 |
if ( ! defined( 'TINVWL_LOAD_FREE' ) ) {
|
tinv-wishlists-function.php
CHANGED
@@ -33,8 +33,8 @@ if ( function_exists( 'spl_autoload_register' ) ) {
|
|
33 |
$basicclass = $class;
|
34 |
array_unshift( $class, 'includes' );
|
35 |
$classs = array(
|
36 |
-
|
37 |
-
|
38 |
);
|
39 |
foreach ( $classs as $class ) {
|
40 |
foreach ( array( '.class', '.helper' ) as $suffix ) {
|
33 |
$basicclass = $class;
|
34 |
array_unshift( $class, 'includes' );
|
35 |
$classs = array(
|
36 |
+
TINVWL_PATH . strtolower( implode( DIRECTORY_SEPARATOR, $basicclass ) ),
|
37 |
+
TINVWL_PATH . strtolower( implode( DIRECTORY_SEPARATOR, $class ) ),
|
38 |
);
|
39 |
foreach ( $classs as $class ) {
|
40 |
foreach ( array( '.class', '.helper' ) as $suffix ) {
|