WooCommerce Wishlist Plugin - Version 1.1.7

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 Icon 128x128 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 CHANGED
@@ -1,6 +1,6 @@
1
  /*!
2
- * Bootstrap v3.3.6 (http://getbootstrap.com)
3
- * Copyright 2011-2015 Twitter, Inc.
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] > 2)) {
15
- throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 3')
16
  }
17
  }(jQuery);
18
 
19
  /* ========================================================================
20
- * Bootstrap: transition.js v3.3.6
21
  * http://getbootstrap.com/javascript/#transitions
22
  * ========================================================================
23
- * Copyright 2011-2015 Twitter, Inc.
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.6
81
  * http://getbootstrap.com/javascript/#alerts
82
  * ========================================================================
83
- * Copyright 2011-2015 Twitter, Inc.
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.6'
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.6
176
  * http://getbootstrap.com/javascript/#buttons
177
  * ========================================================================
178
- * Copyright 2011-2015 Twitter, Inc.
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.6'
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"]') || $(e.target).is('input[type="checkbox"]'))) e.preventDefault()
 
 
 
 
 
 
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.6
297
  * http://getbootstrap.com/javascript/#carousel
298
  * ========================================================================
299
- * Copyright 2011-2015 Twitter, Inc.
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.6'
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.6
535
  * http://getbootstrap.com/javascript/#collapse
536
  * ========================================================================
537
- * Copyright 2011-2015 Twitter, Inc.
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.6'
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.6
747
  * http://getbootstrap.com/javascript/#dropdowns
748
  * ========================================================================
749
- * Copyright 2011-2015 Twitter, Inc.
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.6'
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.6
913
  * http://getbootstrap.com/javascript/#modals
914
  * ========================================================================
915
- * Copyright 2011-2015 Twitter, Inc.
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.6'
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 (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
 
 
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.6
1251
  * http://getbootstrap.com/javascript/#tooltip
1252
  * Inspired by the original jQuery.tipsy by Jason Frame
1253
  * ========================================================================
1254
- * Copyright 2011-2015 Twitter, Inc.
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.6'
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
- .removeAttr('aria-describedby')
1570
- .trigger('hidden.bs.' + that.type)
 
 
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 elOffset = isBody ? { top: 0, left: 0 } : $element.offset()
 
 
 
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.6
1766
  * http://getbootstrap.com/javascript/#popovers
1767
  * ========================================================================
1768
- * Copyright 2011-2015 Twitter, Inc.
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.6'
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.6
1875
  * http://getbootstrap.com/javascript/#scrollspy
1876
  * ========================================================================
1877
- * Copyright 2011-2015 Twitter, Inc.
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.6'
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.6
2048
  * http://getbootstrap.com/javascript/#tabs
2049
  * ========================================================================
2050
- * Copyright 2011-2015 Twitter, Inc.
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.6'
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.6
2204
  * http://getbootstrap.com/javascript/#affix
2205
  * ========================================================================
2206
- * Copyright 2011-2015 Twitter, Inc.
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.6'
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: 2016-12-09 11:36+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,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:200
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:401
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:199
751
  #, php-format
752
  msgid "%1$s of %2$s"
753
  msgstr ""
754
 
755
- #: ../public/tinvwl.class.php:338
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 = get_query_var( 'paged', 1 );
383
- $paged = 1 < $paged ? $paged : 1;
 
 
 
 
 
 
384
 
385
  $product_data = array(
386
- 'count' => 10,
387
- 'offset' => 10 * ($paged - 1),
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.5
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.5
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.5' );
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
- strtolower( TINVWL_PATH . implode( DIRECTORY_SEPARATOR, $basicclass ) ),
37
- strtolower( TINVWL_PATH . implode( DIRECTORY_SEPARATOR, $class ) ),
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 ) {