twitter-bootswatch-rails 3.0.3.0 → 3.1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/twitter/bootstrap/affix.js +34 -23
  3. data/app/assets/javascripts/twitter/bootstrap/alert.js +5 -15
  4. data/app/assets/javascripts/twitter/bootstrap/button.js +21 -29
  5. data/app/assets/javascripts/twitter/bootstrap/carousel.js +16 -28
  6. data/app/assets/javascripts/twitter/bootstrap/collapse.js +7 -16
  7. data/app/assets/javascripts/twitter/bootstrap/dropdown.js +19 -26
  8. data/app/assets/javascripts/twitter/bootstrap/modal.js +25 -28
  9. data/app/assets/javascripts/twitter/bootstrap/popover.js +14 -21
  10. data/app/assets/javascripts/twitter/bootstrap/scrollspy.js +16 -21
  11. data/app/assets/javascripts/twitter/bootstrap/tab.js +7 -17
  12. data/app/assets/javascripts/twitter/bootstrap/tooltip.js +52 -39
  13. data/app/assets/javascripts/twitter/bootstrap/transition.js +11 -19
  14. data/lib/generators/bootswatch/install/templates/loader.js.tt +1 -1
  15. data/lib/generators/bootswatch/install/templates/mixins.less.tt +130 -49
  16. data/lib/generators/bootswatch/install/templates/variables.less.tt +346 -161
  17. data/lib/twitter/bootswatch/rails/version.rb +1 -1
  18. data/vendor/toolkit/twitter/bootstrap/badges.less +4 -0
  19. data/vendor/toolkit/twitter/bootstrap/breadcrumbs.less +4 -1
  20. data/vendor/toolkit/twitter/bootstrap/button-groups.less +10 -11
  21. data/vendor/toolkit/twitter/bootstrap/buttons.less +8 -8
  22. data/vendor/toolkit/twitter/bootstrap/code.less +10 -0
  23. data/vendor/toolkit/twitter/bootstrap/dropdowns.less +28 -2
  24. data/vendor/toolkit/twitter/bootstrap/forms.less +82 -38
  25. data/vendor/toolkit/twitter/bootstrap/glyphicons.less +1 -5
  26. data/vendor/toolkit/twitter/bootstrap/grid.less +26 -5
  27. data/vendor/toolkit/twitter/bootstrap/input-groups.less +39 -18
  28. data/vendor/toolkit/twitter/bootstrap/jumbotron.less +3 -5
  29. data/vendor/toolkit/twitter/bootstrap/list-group.less +25 -3
  30. data/vendor/toolkit/twitter/bootstrap/mixins.less +130 -49
  31. data/vendor/toolkit/twitter/bootstrap/modals.less +16 -7
  32. data/vendor/toolkit/twitter/bootstrap/navbar.less +24 -20
  33. data/vendor/toolkit/twitter/bootstrap/navs.less +2 -2
  34. data/vendor/toolkit/twitter/bootstrap/normalize.less +139 -122
  35. data/vendor/toolkit/twitter/bootstrap/pager.less +5 -5
  36. data/vendor/toolkit/twitter/bootstrap/pagination.less +6 -3
  37. data/vendor/toolkit/twitter/bootstrap/panels.less +64 -16
  38. data/vendor/toolkit/twitter/bootstrap/print.less +0 -4
  39. data/vendor/toolkit/twitter/bootstrap/responsive-utilities.less +13 -129
  40. data/vendor/toolkit/twitter/bootstrap/scaffolding.less +17 -2
  41. data/vendor/toolkit/twitter/bootstrap/tables.less +3 -1
  42. data/vendor/toolkit/twitter/bootstrap/theme.less +1 -1
  43. data/vendor/toolkit/twitter/bootstrap/tooltip.less +1 -1
  44. data/vendor/toolkit/twitter/bootstrap/type.less +78 -63
  45. data/vendor/toolkit/twitter/bootstrap/variables.less +346 -161
  46. data/vendor/toolkit/twitter/bootstrap/wells.less +1 -1
  47. metadata +2 -3
  48. data/lib/generators/bootswatch/import/import_generator.rb +0 -49
@@ -1,24 +1,14 @@
1
1
  /* ========================================================================
2
- * Bootstrap: modal.js v3.0.3
2
+ * Bootstrap: modal.js v3.1.0
3
3
  * http://getbootstrap.com/javascript/#modals
4
4
  * ========================================================================
5
- * Copyright 2013 Twitter, Inc.
6
- *
7
- * Licensed under the Apache License, Version 2.0 (the "License");
8
- * you may not use this file except in compliance with the License.
9
- * You may obtain a copy of the License at
10
- *
11
- * http://www.apache.org/licenses/LICENSE-2.0
12
- *
13
- * Unless required by applicable law or agreed to in writing, software
14
- * distributed under the License is distributed on an "AS IS" BASIS,
15
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- * See the License for the specific language governing permissions and
17
- * limitations under the License.
5
+ * Copyright 2011-2014 Twitter, Inc.
6
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
18
7
  * ======================================================================== */
19
8
 
20
9
 
21
- +function ($) { "use strict";
10
+ +function ($) {
11
+ 'use strict';
22
12
 
23
13
  // MODAL CLASS DEFINITION
24
14
  // ======================
@@ -29,13 +19,19 @@
29
19
  this.$backdrop =
30
20
  this.isShown = null
31
21
 
32
- if (this.options.remote) this.$element.load(this.options.remote)
22
+ if (this.options.remote) {
23
+ this.$element
24
+ .find('.modal-content')
25
+ .load(this.options.remote, $.proxy(function () {
26
+ this.$element.trigger('loaded.bs.modal')
27
+ }, this))
28
+ }
33
29
  }
34
30
 
35
31
  Modal.DEFAULTS = {
36
- backdrop: true
37
- , keyboard: true
38
- , show: true
32
+ backdrop: true,
33
+ keyboard: true,
34
+ show: true
39
35
  }
40
36
 
41
37
  Modal.prototype.toggle = function (_relatedTarget) {
@@ -54,7 +50,7 @@
54
50
 
55
51
  this.escape()
56
52
 
57
- this.$element.on('click.dismiss.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
53
+ this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
58
54
 
59
55
  this.backdrop(function () {
60
56
  var transition = $.support.transition && that.$element.hasClass('fade')
@@ -63,7 +59,9 @@
63
59
  that.$element.appendTo(document.body) // don't move modals dom position
64
60
  }
65
61
 
66
- that.$element.show()
62
+ that.$element
63
+ .show()
64
+ .scrollTop(0)
67
65
 
68
66
  if (transition) {
69
67
  that.$element[0].offsetWidth // force reflow
@@ -105,7 +103,7 @@
105
103
  this.$element
106
104
  .removeClass('in')
107
105
  .attr('aria-hidden', true)
108
- .off('click.dismiss.modal')
106
+ .off('click.dismiss.bs.modal')
109
107
 
110
108
  $.support.transition && this.$element.hasClass('fade') ?
111
109
  this.$element
@@ -149,7 +147,6 @@
149
147
  }
150
148
 
151
149
  Modal.prototype.backdrop = function (callback) {
152
- var that = this
153
150
  var animate = this.$element.hasClass('fade') ? 'fade' : ''
154
151
 
155
152
  if (this.isShown && this.options.backdrop) {
@@ -158,7 +155,7 @@
158
155
  this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
159
156
  .appendTo(document.body)
160
157
 
161
- this.$element.on('click.dismiss.modal', $.proxy(function (e) {
158
+ this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
162
159
  if (e.target !== e.currentTarget) return
163
160
  this.options.backdrop == 'static'
164
161
  ? this.$element[0].focus.call(this.$element[0])
@@ -180,7 +177,7 @@
180
177
  } else if (!this.isShown && this.$backdrop) {
181
178
  this.$backdrop.removeClass('in')
182
179
 
183
- $.support.transition && this.$element.hasClass('fade')?
180
+ $.support.transition && this.$element.hasClass('fade') ?
184
181
  this.$backdrop
185
182
  .one($.support.transition.end, callback)
186
183
  .emulateTransitionEnd(150) :
@@ -228,9 +225,9 @@
228
225
  var $this = $(this)
229
226
  var href = $this.attr('href')
230
227
  var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7
231
- var option = $target.data('modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
228
+ var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
232
229
 
233
- e.preventDefault()
230
+ if ($this.is('a')) e.preventDefault()
234
231
 
235
232
  $target
236
233
  .modal(option, this)
@@ -240,7 +237,7 @@
240
237
  })
241
238
 
242
239
  $(document)
243
- .on('show.bs.modal', '.modal', function () { $(document.body).addClass('modal-open') })
240
+ .on('show.bs.modal', '.modal', function () { $(document.body).addClass('modal-open') })
244
241
  .on('hidden.bs.modal', '.modal', function () { $(document.body).removeClass('modal-open') })
245
242
 
246
243
  }(jQuery);
@@ -1,24 +1,14 @@
1
1
  /* ========================================================================
2
- * Bootstrap: popover.js v3.0.3
2
+ * Bootstrap: popover.js v3.1.0
3
3
  * http://getbootstrap.com/javascript/#popovers
4
4
  * ========================================================================
5
- * Copyright 2013 Twitter, Inc.
6
- *
7
- * Licensed under the Apache License, Version 2.0 (the "License");
8
- * you may not use this file except in compliance with the License.
9
- * You may obtain a copy of the License at
10
- *
11
- * http://www.apache.org/licenses/LICENSE-2.0
12
- *
13
- * Unless required by applicable law or agreed to in writing, software
14
- * distributed under the License is distributed on an "AS IS" BASIS,
15
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- * See the License for the specific language governing permissions and
17
- * limitations under the License.
5
+ * Copyright 2011-2014 Twitter, Inc.
6
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
18
7
  * ======================================================================== */
19
8
 
20
9
 
21
- +function ($) { "use strict";
10
+ +function ($) {
11
+ 'use strict';
22
12
 
23
13
  // POPOVER PUBLIC CLASS DEFINITION
24
14
  // ===============================
@@ -29,11 +19,11 @@
29
19
 
30
20
  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
31
21
 
32
- Popover.DEFAULTS = $.extend({} , $.fn.tooltip.Constructor.DEFAULTS, {
33
- placement: 'right'
34
- , trigger: 'click'
35
- , content: ''
36
- , template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
22
+ Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
23
+ placement: 'right',
24
+ trigger: 'click',
25
+ content: '',
26
+ template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
37
27
  })
38
28
 
39
29
 
@@ -54,7 +44,9 @@
54
44
  var content = this.getContent()
55
45
 
56
46
  $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
57
- $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content)
47
+ $tip.find('.popover-content')[ // we use append for html objects to maintain js events
48
+ this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
49
+ ](content)
58
50
 
59
51
  $tip.removeClass('fade top bottom left right in')
60
52
 
@@ -98,6 +90,7 @@
98
90
  var data = $this.data('bs.popover')
99
91
  var options = typeof option == 'object' && option
100
92
 
93
+ if (!data && option == 'destroy') return
101
94
  if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
102
95
  if (typeof option == 'string') data[option]()
103
96
  })
@@ -1,24 +1,14 @@
1
1
  /* ========================================================================
2
- * Bootstrap: scrollspy.js v3.0.3
2
+ * Bootstrap: scrollspy.js v3.1.0
3
3
  * http://getbootstrap.com/javascript/#scrollspy
4
4
  * ========================================================================
5
- * Copyright 2013 Twitter, Inc.
6
- *
7
- * Licensed under the Apache License, Version 2.0 (the "License");
8
- * you may not use this file except in compliance with the License.
9
- * You may obtain a copy of the License at
10
- *
11
- * http://www.apache.org/licenses/LICENSE-2.0
12
- *
13
- * Unless required by applicable law or agreed to in writing, software
14
- * distributed under the License is distributed on an "AS IS" BASIS,
15
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- * See the License for the specific language governing permissions and
17
- * limitations under the License.
5
+ * Copyright 2011-2014 Twitter, Inc.
6
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
18
7
  * ======================================================================== */
19
8
 
20
9
 
21
- +function ($) { "use strict";
10
+ +function ($) {
11
+ 'use strict';
22
12
 
23
13
  // SCROLLSPY CLASS DEFINITION
24
14
  // ==========================
@@ -58,10 +48,11 @@
58
48
  .map(function () {
59
49
  var $el = $(this)
60
50
  var href = $el.data('target') || $el.attr('href')
61
- var $href = /^#\w/.test(href) && $(href)
51
+ var $href = /^#./.test(href) && $(href)
62
52
 
63
53
  return ($href
64
54
  && $href.length
55
+ && $href.is(':visible')
65
56
  && [[ $href[offsetMethod]().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]]) || null
66
57
  })
67
58
  .sort(function (a, b) { return a[0] - b[0] })
@@ -84,6 +75,10 @@
84
75
  return activeTarget != (i = targets.last()[0]) && this.activate(i)
85
76
  }
86
77
 
78
+ if (activeTarget && scrollTop <= offsets[0]) {
79
+ return activeTarget != (i = targets[0]) && this.activate(i)
80
+ }
81
+
87
82
  for (i = offsets.length; i--;) {
88
83
  activeTarget != targets[i]
89
84
  && scrollTop >= offsets[i]
@@ -96,18 +91,18 @@
96
91
  this.activeTarget = target
97
92
 
98
93
  $(this.selector)
99
- .parents('.active')
94
+ .parentsUntil(this.options.target, '.active')
100
95
  .removeClass('active')
101
96
 
102
- var selector = this.selector
103
- + '[data-target="' + target + '"],'
104
- + this.selector + '[href="' + target + '"]'
97
+ var selector = this.selector +
98
+ '[data-target="' + target + '"],' +
99
+ this.selector + '[href="' + target + '"]'
105
100
 
106
101
  var active = $(selector)
107
102
  .parents('li')
108
103
  .addClass('active')
109
104
 
110
- if (active.parent('.dropdown-menu').length) {
105
+ if (active.parent('.dropdown-menu').length) {
111
106
  active = active
112
107
  .closest('li.dropdown')
113
108
  .addClass('active')
@@ -1,24 +1,14 @@
1
1
  /* ========================================================================
2
- * Bootstrap: tab.js v3.0.3
2
+ * Bootstrap: tab.js v3.1.0
3
3
  * http://getbootstrap.com/javascript/#tabs
4
4
  * ========================================================================
5
- * Copyright 2013 Twitter, Inc.
6
- *
7
- * Licensed under the Apache License, Version 2.0 (the "License");
8
- * you may not use this file except in compliance with the License.
9
- * You may obtain a copy of the License at
10
- *
11
- * http://www.apache.org/licenses/LICENSE-2.0
12
- *
13
- * Unless required by applicable law or agreed to in writing, software
14
- * distributed under the License is distributed on an "AS IS" BASIS,
15
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- * See the License for the specific language governing permissions and
17
- * limitations under the License.
5
+ * Copyright 2011-2014 Twitter, Inc.
6
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
18
7
  * ======================================================================== */
19
8
 
20
9
 
21
- +function ($) { "use strict";
10
+ +function ($) {
11
+ 'use strict';
22
12
 
23
13
  // TAB CLASS DEFINITION
24
14
  // ====================
@@ -53,8 +43,8 @@
53
43
  this.activate($this.parent('li'), $ul)
54
44
  this.activate($target, $target.parent(), function () {
55
45
  $this.trigger({
56
- type: 'shown.bs.tab'
57
- , relatedTarget: previous
46
+ type: 'shown.bs.tab',
47
+ relatedTarget: previous
58
48
  })
59
49
  })
60
50
  }
@@ -1,25 +1,15 @@
1
1
  /* ========================================================================
2
- * Bootstrap: tooltip.js v3.0.3
2
+ * Bootstrap: tooltip.js v3.1.0
3
3
  * http://getbootstrap.com/javascript/#tooltip
4
4
  * Inspired by the original jQuery.tipsy by Jason Frame
5
5
  * ========================================================================
6
- * Copyright 2013 Twitter, Inc.
7
- *
8
- * Licensed under the Apache License, Version 2.0 (the "License");
9
- * you may not use this file except in compliance with the License.
10
- * You may obtain a copy of the License at
11
- *
12
- * http://www.apache.org/licenses/LICENSE-2.0
13
- *
14
- * Unless required by applicable law or agreed to in writing, software
15
- * distributed under the License is distributed on an "AS IS" BASIS,
16
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
- * See the License for the specific language governing permissions and
18
- * limitations under the License.
6
+ * Copyright 2011-2014 Twitter, Inc.
7
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
19
8
  * ======================================================================== */
20
9
 
21
10
 
22
- +function ($) { "use strict";
11
+ +function ($) {
12
+ 'use strict';
23
13
 
24
14
  // TOOLTIP PUBLIC CLASS DEFINITION
25
15
  // ===============================
@@ -36,15 +26,15 @@
36
26
  }
37
27
 
38
28
  Tooltip.DEFAULTS = {
39
- animation: true
40
- , placement: 'top'
41
- , selector: false
42
- , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
43
- , trigger: 'hover focus'
44
- , title: ''
45
- , delay: 0
46
- , html: false
47
- , container: false
29
+ animation: true,
30
+ placement: 'top',
31
+ selector: false,
32
+ template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
33
+ trigger: 'hover focus',
34
+ title: '',
35
+ delay: 0,
36
+ html: false,
37
+ container: false
48
38
  }
49
39
 
50
40
  Tooltip.prototype.init = function (type, element, options) {
@@ -61,8 +51,8 @@
61
51
  if (trigger == 'click') {
62
52
  this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
63
53
  } else if (trigger != 'manual') {
64
- var eventIn = trigger == 'hover' ? 'mouseenter' : 'focus'
65
- var eventOut = trigger == 'hover' ? 'mouseleave' : 'blur'
54
+ var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
55
+ var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
66
56
 
67
57
  this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
68
58
  this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
@@ -83,8 +73,8 @@
83
73
 
84
74
  if (options.delay && typeof options.delay == 'number') {
85
75
  options.delay = {
86
- show: options.delay
87
- , hide: options.delay
76
+ show: options.delay,
77
+ hide: options.delay
88
78
  }
89
79
  }
90
80
 
@@ -133,12 +123,13 @@
133
123
  }
134
124
 
135
125
  Tooltip.prototype.show = function () {
136
- var e = $.Event('show.bs.'+ this.type)
126
+ var e = $.Event('show.bs.' + this.type)
137
127
 
138
128
  if (this.hasContent() && this.enabled) {
139
129
  this.$element.trigger(e)
140
130
 
141
131
  if (e.isDefaultPrevented()) return
132
+ var that = this;
142
133
 
143
134
  var $tip = this.tip()
144
135
 
@@ -188,11 +179,21 @@
188
179
  var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
189
180
 
190
181
  this.applyPlacement(calculatedOffset, placement)
191
- this.$element.trigger('shown.bs.' + this.type)
182
+ this.hoverState = null
183
+
184
+ var complete = function() {
185
+ that.$element.trigger('shown.bs.' + that.type)
186
+ }
187
+
188
+ $.support.transition && this.$tip.hasClass('fade') ?
189
+ $tip
190
+ .one($.support.transition.end, complete)
191
+ .emulateTransitionEnd(150) :
192
+ complete()
192
193
  }
193
194
  }
194
195
 
195
- Tooltip.prototype.applyPlacement = function(offset, placement) {
196
+ Tooltip.prototype.applyPlacement = function (offset, placement) {
196
197
  var replace
197
198
  var $tip = this.tip()
198
199
  var width = $tip[0].offsetWidth
@@ -209,9 +210,18 @@
209
210
  offset.top = offset.top + marginTop
210
211
  offset.left = offset.left + marginLeft
211
212
 
212
- $tip
213
- .offset(offset)
214
- .addClass('in')
213
+ // $.fn.offset doesn't round pixel values
214
+ // so we use setOffset directly with our own function B-0
215
+ $.offset.setOffset($tip[0], $.extend({
216
+ using: function (props) {
217
+ $tip.css({
218
+ top: Math.round(props.top),
219
+ left: Math.round(props.left)
220
+ })
221
+ }
222
+ }, offset), 0)
223
+
224
+ $tip.addClass('in')
215
225
 
216
226
  // check to see if placing tip in new offset caused the tip to resize itself
217
227
  var actualWidth = $tip[0].offsetWidth
@@ -243,8 +253,8 @@
243
253
  if (replace) $tip.offset(offset)
244
254
  }
245
255
 
246
- Tooltip.prototype.replaceArrow = function(delta, dimension, position) {
247
- this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + "%") : '')
256
+ Tooltip.prototype.replaceArrow = function (delta, dimension, position) {
257
+ this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + '%') : '')
248
258
  }
249
259
 
250
260
  Tooltip.prototype.setContent = function () {
@@ -262,6 +272,7 @@
262
272
 
263
273
  function complete() {
264
274
  if (that.hoverState != 'in') $tip.detach()
275
+ that.$element.trigger('hidden.bs.' + that.type)
265
276
  }
266
277
 
267
278
  this.$element.trigger(e)
@@ -276,7 +287,7 @@
276
287
  .emulateTransitionEnd(150) :
277
288
  complete()
278
289
 
279
- this.$element.trigger('hidden.bs.' + this.type)
290
+ this.hoverState = null
280
291
 
281
292
  return this
282
293
  }
@@ -295,8 +306,8 @@
295
306
  Tooltip.prototype.getPosition = function () {
296
307
  var el = this.$element[0]
297
308
  return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {
298
- width: el.offsetWidth
299
- , height: el.offsetHeight
309
+ width: el.offsetWidth,
310
+ height: el.offsetHeight
300
311
  }, this.$element.offset())
301
312
  }
302
313
 
@@ -352,6 +363,7 @@
352
363
  }
353
364
 
354
365
  Tooltip.prototype.destroy = function () {
366
+ clearTimeout(this.timeout)
355
367
  this.hide().$element.off('.' + this.type).removeData('bs.' + this.type)
356
368
  }
357
369
 
@@ -367,6 +379,7 @@
367
379
  var data = $this.data('bs.tooltip')
368
380
  var options = typeof option == 'object' && option
369
381
 
382
+ if (!data && option == 'destroy') return
370
383
  if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
371
384
  if (typeof option == 'string') data[option]()
372
385
  })