twitter-bootstrap-rails 1.3.1 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of twitter-bootstrap-rails might be problematic. Click here for more details.

@@ -1,307 +1,310 @@
1
- /* ==========================================================
2
- * bootstrap-twipsy.js v1.3.0
3
- * http://twitter.github.com/bootstrap/javascript.html#twipsy
4
- * Adapted from the original jQuery.tipsy by Jason Frame
5
- * ==========================================================
6
- * Copyright 2011 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.
19
- * ========================================================== */
20
-
21
-
22
- !function( $ ) {
23
-
24
- /* CSS TRANSITION SUPPORT (https://gist.github.com/373874)
25
- * ======================================================= */
26
-
27
- var transitionEnd
28
-
29
- $(document).ready(function () {
30
-
31
- $.support.transition = (function () {
32
- var thisBody = document.body || document.documentElement
33
- , thisStyle = thisBody.style
34
- , support = thisStyle.transition !== undefined || thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.MsTransition !== undefined || thisStyle.OTransition !== undefined
35
- return support
36
- })()
37
-
38
- // set CSS transition event type
39
- if ( $.support.transition ) {
40
- transitionEnd = "TransitionEnd"
41
- if ( $.browser.webkit ) {
42
- transitionEnd = "webkitTransitionEnd"
43
- } else if ( $.browser.mozilla ) {
44
- transitionEnd = "transitionend"
45
- } else if ( $.browser.opera ) {
46
- transitionEnd = "oTransitionEnd"
47
- }
48
- }
49
-
50
- })
51
-
52
-
53
- /* TWIPSY PUBLIC CLASS DEFINITION
54
- * ============================== */
55
-
56
- var Twipsy = function ( element, options ) {
57
- this.$element = $(element)
58
- this.options = options
59
- this.enabled = true
60
- this.fixTitle()
61
- }
62
-
63
- Twipsy.prototype = {
64
-
65
- show: function() {
66
- var pos
67
- , actualWidth
68
- , actualHeight
69
- , placement
70
- , $tip
71
- , tp
72
-
73
- if (this.getTitle() && this.enabled) {
74
- $tip = this.tip()
75
- this.setContent()
76
-
77
- if (this.options.animate) {
78
- $tip.addClass('fade')
79
- }
80
-
81
- $tip
82
- .remove()
83
- .css({ top: 0, left: 0, display: 'block' })
84
- .prependTo(document.body)
85
-
86
- pos = $.extend({}, this.$element.offset(), {
87
- width: this.$element[0].offsetWidth
88
- , height: this.$element[0].offsetHeight
89
- })
90
-
91
- actualWidth = $tip[0].offsetWidth
92
- actualHeight = $tip[0].offsetHeight
93
- placement = _.maybeCall(this.options.placement, this.$element[0])
94
-
95
- switch (placement) {
96
- case 'below':
97
- tp = {top: pos.top + pos.height + this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2}
98
- break
99
- case 'above':
100
- tp = {top: pos.top - actualHeight - this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2}
101
- break
102
- case 'left':
103
- tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth - this.options.offset}
104
- break
105
- case 'right':
106
- tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width + this.options.offset}
107
- break
108
- }
109
-
110
- $tip
111
- .css(tp)
112
- .addClass(placement)
113
- .addClass('in')
114
- }
115
- }
116
-
117
- , setContent: function () {
118
- var $tip = this.tip()
119
- $tip.find('.twipsy-inner')[this.options.html ? 'html' : 'text'](this.getTitle())
120
- $tip[0].className = 'twipsy'
121
- }
122
-
123
- , hide: function() {
124
- var that = this
125
- , $tip = this.tip()
126
-
127
- $tip.removeClass('in')
128
-
129
- function removeElement () {
130
- $tip.remove()
131
- }
132
-
133
- $.support.transition && this.$tip.hasClass('fade') ?
134
- $tip.bind(transitionEnd, removeElement) :
135
- removeElement()
136
- }
137
-
138
- , fixTitle: function() {
139
- var $e = this.$element
140
- if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
141
- $e.attr('data-original-title', $e.attr('title') || '').removeAttr('title')
142
- }
143
- }
144
-
145
- , getTitle: function() {
146
- var title
147
- , $e = this.$element
148
- , o = this.options
149
-
150
- this.fixTitle()
151
-
152
- if (typeof o.title == 'string') {
153
- title = $e.attr(o.title == 'title' ? 'data-original-title' : o.title)
154
- } else if (typeof o.title == 'function') {
155
- title = o.title.call($e[0])
156
- }
157
-
158
- title = ('' + title).replace(/(^\s*|\s*$)/, "")
159
-
160
- return title || o.fallback
161
- }
162
-
163
- , tip: function() {
164
- if (!this.$tip) {
165
- this.$tip = $('<div class="twipsy" />').html('<div class="twipsy-arrow"></div><div class="twipsy-inner"></div>')
166
- }
167
- return this.$tip
168
- }
169
-
170
- , validate: function() {
171
- if (!this.$element[0].parentNode) {
172
- this.hide()
173
- this.$element = null
174
- this.options = null
175
- }
176
- }
177
-
178
- , enable: function() {
179
- this.enabled = true
180
- }
181
-
182
- , disable: function() {
183
- this.enabled = false
184
- }
185
-
186
- , toggleEnabled: function() {
187
- this.enabled = !this.enabled
188
- }
189
-
190
- }
191
-
192
-
193
- /* TWIPSY PRIVATE METHODS
194
- * ====================== */
195
-
196
- var _ = {
197
-
198
- maybeCall: function ( thing, ctx ) {
199
- return (typeof thing == 'function') ? (thing.call(ctx)) : thing
200
- }
201
-
202
- }
203
-
204
-
205
- /* TWIPSY PLUGIN DEFINITION
206
- * ======================== */
207
-
208
- $.fn.twipsy = function (options) {
209
- $.fn.twipsy.initWith.call(this, options, Twipsy, 'twipsy')
210
- return this
211
- }
212
-
213
- $.fn.twipsy.initWith = function (options, Constructor, name) {
214
- var twipsy
215
- , binder
216
- , eventIn
217
- , eventOut
218
-
219
- if (options === true) {
220
- return this.data(name)
221
- } else if (typeof options == 'string') {
222
- twipsy = this.data(name)
223
- if (twipsy) {
224
- twipsy[options]()
225
- }
226
- return this
227
- }
228
-
229
- options = $.extend({}, $.fn[name].defaults, options)
230
-
231
- function get(ele) {
232
- var twipsy = $.data(ele, name)
233
-
234
- if (!twipsy) {
235
- twipsy = new Constructor(ele, $.fn.twipsy.elementOptions(ele, options))
236
- $.data(ele, name, twipsy)
237
- }
238
-
239
- return twipsy
240
- }
241
-
242
- function enter() {
243
- var twipsy = get(this)
244
- twipsy.hoverState = 'in'
245
-
246
- if (options.delayIn == 0) {
247
- twipsy.show()
248
- } else {
249
- twipsy.fixTitle()
250
- setTimeout(function() {
251
- if (twipsy.hoverState == 'in') {
252
- twipsy.show()
253
- }
254
- }, options.delayIn)
255
- }
256
- }
257
-
258
- function leave() {
259
- var twipsy = get(this)
260
- twipsy.hoverState = 'out'
261
- if (options.delayOut == 0) {
262
- twipsy.hide()
263
- } else {
264
- setTimeout(function() {
265
- if (twipsy.hoverState == 'out') {
266
- twipsy.hide()
267
- }
268
- }, options.delayOut)
269
- }
270
- }
271
-
272
- if (!options.live) {
273
- this.each(function() {
274
- get(this)
275
- })
276
- }
277
-
278
- if (options.trigger != 'manual') {
279
- binder = options.live ? 'live' : 'bind'
280
- eventIn = options.trigger == 'hover' ? 'mouseenter' : 'focus'
281
- eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur'
282
- this[binder](eventIn, enter)[binder](eventOut, leave)
283
- }
284
-
285
- return this
286
- }
287
-
288
- $.fn.twipsy.Twipsy = Twipsy
289
-
290
- $.fn.twipsy.defaults = {
291
- animate: true
292
- , delayIn: 0
293
- , delayOut: 0
294
- , fallback: ''
295
- , placement: 'above'
296
- , html: false
297
- , live: false
298
- , offset: 0
299
- , title: 'title'
300
- , trigger: 'hover'
301
- }
302
-
303
- $.fn.twipsy.elementOptions = function(ele, options) {
304
- return $.metadata ? $.extend({}, options, $(ele).metadata()) : options
305
- }
306
-
1
+ /* ==========================================================
2
+ * bootstrap-twipsy.js v1.4.0
3
+ * http://twitter.github.com/bootstrap/javascript.html#twipsy
4
+ * Adapted from the original jQuery.tipsy by Jason Frame
5
+ * ==========================================================
6
+ * Copyright 2011 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.
19
+ * ========================================================== */
20
+
21
+
22
+ !function( $ ) {
23
+
24
+ "use strict"
25
+
26
+ /* CSS TRANSITION SUPPORT (https://gist.github.com/373874)
27
+ * ======================================================= */
28
+
29
+ var transitionEnd
30
+
31
+ $(document).ready(function () {
32
+
33
+ $.support.transition = (function () {
34
+ var thisBody = document.body || document.documentElement
35
+ , thisStyle = thisBody.style
36
+ , support = thisStyle.transition !== undefined || thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.MsTransition !== undefined || thisStyle.OTransition !== undefined
37
+ return support
38
+ })()
39
+
40
+ // set CSS transition event type
41
+ if ( $.support.transition ) {
42
+ transitionEnd = "TransitionEnd"
43
+ if ( $.browser.webkit ) {
44
+ transitionEnd = "webkitTransitionEnd"
45
+ } else if ( $.browser.mozilla ) {
46
+ transitionEnd = "transitionend"
47
+ } else if ( $.browser.opera ) {
48
+ transitionEnd = "oTransitionEnd"
49
+ }
50
+ }
51
+
52
+ })
53
+
54
+
55
+ /* TWIPSY PUBLIC CLASS DEFINITION
56
+ * ============================== */
57
+
58
+ var Twipsy = function ( element, options ) {
59
+ this.$element = $(element)
60
+ this.options = options
61
+ this.enabled = true
62
+ this.fixTitle()
63
+ }
64
+
65
+ Twipsy.prototype = {
66
+
67
+ show: function() {
68
+ var pos
69
+ , actualWidth
70
+ , actualHeight
71
+ , placement
72
+ , $tip
73
+ , tp
74
+
75
+ if (this.hasContent() && this.enabled) {
76
+ $tip = this.tip()
77
+ this.setContent()
78
+
79
+ if (this.options.animate) {
80
+ $tip.addClass('fade')
81
+ }
82
+
83
+ $tip
84
+ .remove()
85
+ .css({ top: 0, left: 0, display: 'block' })
86
+ .prependTo(document.body)
87
+
88
+ pos = $.extend({}, this.$element.offset(), {
89
+ width: this.$element[0].offsetWidth
90
+ , height: this.$element[0].offsetHeight
91
+ })
92
+
93
+ actualWidth = $tip[0].offsetWidth
94
+ actualHeight = $tip[0].offsetHeight
95
+
96
+ placement = maybeCall(this.options.placement, this, [ $tip[0], this.$element[0] ])
97
+
98
+ switch (placement) {
99
+ case 'below':
100
+ tp = {top: pos.top + pos.height + this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2}
101
+ break
102
+ case 'above':
103
+ tp = {top: pos.top - actualHeight - this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2}
104
+ break
105
+ case 'left':
106
+ tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth - this.options.offset}
107
+ break
108
+ case 'right':
109
+ tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width + this.options.offset}
110
+ break
111
+ }
112
+
113
+ $tip
114
+ .css(tp)
115
+ .addClass(placement)
116
+ .addClass('in')
117
+ }
118
+ }
119
+
120
+ , setContent: function () {
121
+ var $tip = this.tip()
122
+ $tip.find('.twipsy-inner')[this.options.html ? 'html' : 'text'](this.getTitle())
123
+ $tip[0].className = 'twipsy'
124
+ }
125
+
126
+ , hide: function() {
127
+ var that = this
128
+ , $tip = this.tip()
129
+
130
+ $tip.removeClass('in')
131
+
132
+ function removeElement () {
133
+ $tip.remove()
134
+ }
135
+
136
+ $.support.transition && this.$tip.hasClass('fade') ?
137
+ $tip.bind(transitionEnd, removeElement) :
138
+ removeElement()
139
+ }
140
+
141
+ , fixTitle: function() {
142
+ var $e = this.$element
143
+ if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
144
+ $e.attr('data-original-title', $e.attr('title') || '').removeAttr('title')
145
+ }
146
+ }
147
+
148
+ , hasContent: function () {
149
+ return this.getTitle()
150
+ }
151
+
152
+ , getTitle: function() {
153
+ var title
154
+ , $e = this.$element
155
+ , o = this.options
156
+
157
+ this.fixTitle()
158
+
159
+ if (typeof o.title == 'string') {
160
+ title = $e.attr(o.title == 'title' ? 'data-original-title' : o.title)
161
+ } else if (typeof o.title == 'function') {
162
+ title = o.title.call($e[0])
163
+ }
164
+
165
+ title = ('' + title).replace(/(^\s*|\s*$)/, "")
166
+
167
+ return title || o.fallback
168
+ }
169
+
170
+ , tip: function() {
171
+ if (!this.$tip) {
172
+ this.$tip = $('<div class="twipsy" />').html(this.options.template)
173
+ }
174
+ return this.$tip
175
+ }
176
+
177
+ , validate: function() {
178
+ if (!this.$element[0].parentNode) {
179
+ this.hide()
180
+ this.$element = null
181
+ this.options = null
182
+ }
183
+ }
184
+
185
+ , enable: function() {
186
+ this.enabled = true
187
+ }
188
+
189
+ , disable: function() {
190
+ this.enabled = false
191
+ }
192
+
193
+ , toggleEnabled: function() {
194
+ this.enabled = !this.enabled
195
+ }
196
+
197
+ }
198
+
199
+
200
+ /* TWIPSY PRIVATE METHODS
201
+ * ====================== */
202
+
203
+ function maybeCall ( thing, ctx, args ) {
204
+ return typeof thing == 'function' ? thing.apply(ctx, args) : thing
205
+ }
206
+
207
+ /* TWIPSY PLUGIN DEFINITION
208
+ * ======================== */
209
+
210
+ $.fn.twipsy = function (options) {
211
+ $.fn.twipsy.initWith.call(this, options, Twipsy, 'twipsy')
212
+ return this
213
+ }
214
+
215
+ $.fn.twipsy.initWith = function (options, Constructor, name) {
216
+ var twipsy
217
+ , binder
218
+ , eventIn
219
+ , eventOut
220
+
221
+ if (options === true) {
222
+ return this.data(name)
223
+ } else if (typeof options == 'string') {
224
+ twipsy = this.data(name)
225
+ if (twipsy) {
226
+ twipsy[options]()
227
+ }
228
+ return this
229
+ }
230
+
231
+ options = $.extend({}, $.fn[name].defaults, options)
232
+
233
+ function get(ele) {
234
+ var twipsy = $.data(ele, name)
235
+
236
+ if (!twipsy) {
237
+ twipsy = new Constructor(ele, $.fn.twipsy.elementOptions(ele, options))
238
+ $.data(ele, name, twipsy)
239
+ }
240
+
241
+ return twipsy
242
+ }
243
+
244
+ function enter() {
245
+ var twipsy = get(this)
246
+ twipsy.hoverState = 'in'
247
+
248
+ if (options.delayIn == 0) {
249
+ twipsy.show()
250
+ } else {
251
+ twipsy.fixTitle()
252
+ setTimeout(function() {
253
+ if (twipsy.hoverState == 'in') {
254
+ twipsy.show()
255
+ }
256
+ }, options.delayIn)
257
+ }
258
+ }
259
+
260
+ function leave() {
261
+ var twipsy = get(this)
262
+ twipsy.hoverState = 'out'
263
+ if (options.delayOut == 0) {
264
+ twipsy.hide()
265
+ } else {
266
+ setTimeout(function() {
267
+ if (twipsy.hoverState == 'out') {
268
+ twipsy.hide()
269
+ }
270
+ }, options.delayOut)
271
+ }
272
+ }
273
+
274
+ if (!options.live) {
275
+ this.each(function() {
276
+ get(this)
277
+ })
278
+ }
279
+
280
+ if (options.trigger != 'manual') {
281
+ binder = options.live ? 'live' : 'bind'
282
+ eventIn = options.trigger == 'hover' ? 'mouseenter' : 'focus'
283
+ eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur'
284
+ this[binder](eventIn, enter)[binder](eventOut, leave)
285
+ }
286
+
287
+ return this
288
+ }
289
+
290
+ $.fn.twipsy.Twipsy = Twipsy
291
+
292
+ $.fn.twipsy.defaults = {
293
+ animate: true
294
+ , delayIn: 0
295
+ , delayOut: 0
296
+ , fallback: ''
297
+ , placement: 'above'
298
+ , html: false
299
+ , live: false
300
+ , offset: 0
301
+ , title: 'title'
302
+ , trigger: 'hover'
303
+ , template: '<div class="twipsy-arrow"></div><div class="twipsy-inner"></div>'
304
+ }
305
+
306
+ $.fn.twipsy.elementOptions = function(ele, options) {
307
+ return $.extend({}, options, $(ele).data())
308
+ }
309
+
307
310
  }( window.jQuery || window.ender );