vendor: 12,625 bytes, lines 1-404
1/* ======================================================================== 2 * Bootstrap: tooltip.js v3.0.0 3 * http://twbs.github.com/bootstrap/javascript.html#tooltip 4 * Inspired by the original jQuery.tipsy by Jason Frame 5 * ======================================================================== 6 * Copyright 2012 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 ($) { "use strict"; 23 24 // TOOLTIP PUBLIC CLASS DEFINITION 25 // =============================== 26 27 var Tooltip = function (element, options) { 28 this.type = 29 this.options = 30 this.enabled = 31 this.timeout = 32 this.hoverState = 33 this.$element = null 34 35 this.init('tooltip', element, options) 36 } 37 38 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 48 } 49 50 Tooltip.prototype.init = function (type, element, options) { 51 this.enabled = true 52 this.type = type 53 this.$element = $(element) 54 this.options = this.getOptions(options) 55 56 var triggers = this.options.trigger.split(' ') 57 58 for (var i = triggers.length; i--;) { 59 var trigger = triggers[i] 60 61 if (trigger == 'click') { 62 this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) 63 } else if (trigger != 'manual') { 64 var eventIn = trigger == 'hover' ? 'mouseenter' : 'focus' 65 var eventOut = trigger == 'hover' ? 'mouseleave' : 'blur' 66 67 this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this)) 68 this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this)) 69 } 70 } 71 72 this.options.selector ? 73 (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : 74 this.fixTitle() 75 } 76 77 Tooltip.prototype.getDefaults = function () { 78 return Tooltip.DEFAULTS 79 } 80 81 Tooltip.prototype.getOptions = function (options) { 82 options = $.extend({}, this.getDefaults(), this.$element.data(), options) 83 84 if (options.delay && typeof options.delay == 'number') { 85 options.delay = { 86 show: options.delay 87 , hide: options.delay 88 } 89 } 90 91 return options 92 } 93 94 Tooltip.prototype.getDelegateOptions = function () { 95 var options = {} 96 var defaults = this.getDefaults() 97 98 this._options && $.each(this._options, function (key, value) { 99 if (defaults[key] != value) options[key] = value 100 }) 101 102 return options 103 } 104 105 Tooltip.prototype.enter = function (obj) { 106 var self = obj instanceof this.constructor ? 107 obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type) 108 109 clearTimeout(self.timeout) 110 111 self.hoverState = 'in' 112 113 if (!self.options.delay || !self.options.delay.show) return self.show() 114 115 self.timeout = setTimeout(function () { 116 if (self.hoverState == 'in') self.show() 117 }, self.options.delay.show) 118 } 119 120 Tooltip.prototype.leave = function (obj) { 121 var self = obj instanceof this.constructor ? 122 obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type) 123 124 clearTimeout(self.timeout) 125 126 self.hoverState = 'out' 127 128 if (!self.options.delay || !self.options.delay.hide) return self.hide() 129 130 self.timeout = setTimeout(function () { 131 if (self.hoverState == 'out') self.hide() 132 }, self.options.delay.hide) 133 } 134 135 Tooltip.prototype.show = function () { 136 var e = $.Event('show.bs.'+ this.type) 137 138 if (this.hasContent() && this.enabled) { 139 this.$element.trigger(e) 140 141 if (e.isDefaultPrevented()) return 142 143 var $tip = this.tip() 144 145 this.setContent() 146 147 if (this.options.animation) $tip.addClass('fade') 148 149 var placement = typeof this.options.placement == 'function' ? 150 this.options.placement.call(this, $tip[0], this.$element[0]) : 151 this.options.placement 152 153 var autoToken = /\s?auto?\s?/i 154 var autoPlace = autoToken.test(placement) 155 if (autoPlace) placement = placement.replace(autoToken, '') || 'top' 156 157 $tip 158 .detach() 159 .css({ top: 0, left: 0, display: 'block' }) 160 .addClass(placement) 161 162 this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) 163 164 var pos = this.getPosition() 165 var actualWidth = $tip[0].offsetWidth 166 var actualHeight = $tip[0].offsetHeight 167 168 if (autoPlace) { 169 var $parent = this.$element.parent() 170 171 var orgPlacement = placement 172 var docScroll = document.documentElement.scrollTop || document.body.scrollTop 173 var parentWidth = this.options.container == 'body' ? window.innerWidth : $parent.outerWidth() 174 var parentHeight = this.options.container == 'body' ? window.innerHeight : $parent.outerHeight() 175 var parentLeft = this.options.container == 'body' ? 0 : $parent.offset().left 176 177 placement = placement == 'bottom' && pos.top + pos.height + actualHeight - docScroll > parentHeight ? 'top' : 178 placement == 'top' && pos.top - docScroll - actualHeight < 0 ? 'bottom' : 179 placement == 'right' && pos.right + actualWidth > parentWidth ? 'left' : 180 placement == 'left' && pos.left - actualWidth < parentLeft ? 'right' : 181 placement 182 183 $tip 184 .removeClass(orgPlacement) 185 .addClass(placement) 186 } 187 188 var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight) 189 190 this.applyPlacement(calculatedOffset, placement) 191 this.$element.trigger('shown.bs.' + this.type) 192 } 193 } 194 195 Tooltip.prototype.applyPlacement = function(offset, placement) { 196 var replace 197 var $tip = this.tip() 198 var width = $tip[0].offsetWidth 199 var height = $tip[0].offsetHeight 200 201 // manually read margins because getBoundingClientRect includes difference 202 var marginTop = parseInt($tip.css('margin-top'), 10) 203 var marginLeft = parseInt($tip.css('margin-left'), 10) 204 205 // we must check for NaN for ie 8/9 206 if (isNaN(marginTop)) marginTop = 0 207 if (isNaN(marginLeft)) marginLeft = 0 208 209 offset.top = offset.top + marginTop 210 offset.left = offset.left + marginLeft 211 212 $tip 213 .offset(offset) 214 .addClass('in') 215 216 // check to see if placing tip in new offset caused the tip to resize itself 217 var actualWidth = $tip[0].offsetWidth 218 var actualHeight = $tip[0].offsetHeight 219 220 if (placement == 'top' && actualHeight != height) { 221 replace = true 222 offset.top = offset.top + height - actualHeight 223 } 224 225 if (/bottom|top/.test(placement)) { 226 var delta = 0 227 228 if (offset.left < 0) { 229 delta = offset.left * -2 230 offset.left = 0 231 232 $tip.offset(offset) 233 234 actualWidth = $tip[0].offsetWidth 235 actualHeight = $tip[0].offsetHeight 236 } 237 238 this.replaceArrow(delta - width + actualWidth, actualWidth, 'left') 239 } else { 240 this.replaceArrow(actualHeight - height, actualHeight, 'top') 241 } 242 243 if (replace) $tip.offset(offset) 244 } 245 246 Tooltip.prototype.replaceArrow = function(delta, dimension, position) { 247 this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + "%") : '') 248 } 249 250 Tooltip.prototype.setContent = function () { 251 var $tip = this.tip() 252 var title = this.getTitle() 253 254 $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) 255 $tip.removeClass('fade in top bottom left right') 256 } 257 258 Tooltip.prototype.hide = function () { 259 var that = this 260 var $tip = this.tip() 261 var e = $.Event('hide.bs.' + this.type) 262 263 function complete() { 264 if (that.hoverState != 'in') $tip.detach() 265 } 266 267 this.$element.trigger(e) 268 269 if (e.isDefaultPrevented()) return 270 271 $tip.removeClass('in') 272 273 $.support.transition && this.$tip.hasClass('fade') ? 274 $tip 275 .one($.support.transition.end, complete) 276 .emulateTransitionEnd(150) : 277 complete() 278 279 this.$element.trigger('hidden.bs.' + this.type) 280 281 return this 282 } 283 284 Tooltip.prototype.fixTitle = function () { 285 var $e = this.$element 286 if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') { 287 $e.attr('data-original-title', $e.attr('title') || '').attr('title', '') 288 } 289 } 290 291 Tooltip.prototype.hasContent = function () { 292 return this.getTitle() 293 } 294 295 Tooltip.prototype.getPosition = function () { 296 var el = this.$element[0] 297 return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : { 298 width: el.offsetWidth 299 , height: el.offsetHeight 300 }, this.$element.offset()) 301 } 302 303 Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) { 304 return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } : 305 placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } : 306 placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } : 307 /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width } 308 } 309 310 Tooltip.prototype.getTitle = function () { 311 var title 312 var $e = this.$element 313 var o = this.options 314 315 title = $e.attr('data-original-title') 316 || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) 317 318 return title 319 } 320 321 Tooltip.prototype.tip = function () { 322 return this.$tip = this.$tip || $(this.options.template) 323 } 324 325 Tooltip.prototype.arrow = function () { 326 return this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow') 327 } 328 329 Tooltip.prototype.validate = function () { 330 if (!this.$element[0].parentNode) { 331 this.hide() 332 this.$element = null 333 this.options = null 334 } 335 } 336 337 Tooltip.prototype.enable = function () { 338 this.enabled = true 339 } 340 341 Tooltip.prototype.disable = function () { 342 this.enabled = false 343 } 344 345 Tooltip.prototype.toggleEnabled = function () { 346 this.enabled = !this.enabled 347 } 348 349 Tooltip.prototype.toggle = function (e) { 350 var self = e ? $(e.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type) : this 351 self.tip().hasClass('in') ? self.leave(self) : self.enter(self) 352 } 353 354 Tooltip.prototype.destroy = function () { 355 this.hide().$element.off('.' + this.type).removeData('bs.' + this.type) 356 } 357 358 359 // TOOLTIP PLUGIN DEFINITION 360 // ========================= 361 362 var old = $.fn.tooltip 363 364 $.fn.tooltip = function (option) { 365 return this.each(function () { 366 var $this = $(this) 367 var data = $this.data('bs.tooltip') 368 var options = typeof option == 'object' && option 369 370 if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options))) 371 if (typeof option == 'string') data[option]() 372 }) 373 } 374 375 $.fn.tooltip.Constructor = Tooltip 376 377 378 // TOOLTIP NO CONFLICT 379 // =================== 380 381 $.fn.tooltip.noConflict = function () { 382 $.fn.tooltip = old 383 return this 384 } 385 386 // http://blog.alexmaccaw.com/css-transitions 387 $.fn.emulateTransitionEnd = function (duration) { 388 var called = false, $el = this 389 $(this).one($.support.transition.end, function () { called = true }) 390 var callback = function () { if (!called) $($el).trigger($.support.transition.end) } 391 setTimeout(callback, duration) 392 return this 393 } 394 395}(window.jQuery); 396 397 398/* ======================================================================== 399 * Bootstrap: alert.js v3.0.0 400 * http://twbs.github.com/bootstrap/javascript.html#alerts 401 * ======================================================================== 402 * Copyright 2013 Twitter, Inc. 403 * 404 * Licensed under the Apache License, Version 2.0 (the "License");
405 * you may not use this file except in compliance with the License. 406 * You may obtain a copy of the License at 407 * 408 * http://www.apache.org/licenses/LICENSE-2.0 409 * 410 * Unless required by applicable law or agreed to in writing, software 411 * distributed under the License is distributed on an "AS IS" BASIS, 412 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 413 * See the License for the specific language governing permissions and 414 * limitations under the License. 415 * ======================================================================== */ 416 417 418+function ($) { "use strict"; 419 420 // ALERT CLASS DEFINITION 421 // ====================== 422 423 var dismiss = '[data-dismiss="alert"]' 424 var Alert = function (el) { 425 $(el).on('click', dismiss, this.close) 426 } 427 428 Alert.prototype.close = function (e) { 429 var $this = $(this) 430 var selector = $this.attr('data-target') 431 432 if (!selector) { 433 selector = $this.attr('href') 434 selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 435 } 436 437 var $parent = $(selector) 438 439 if (e) e.preventDefault() 440 441 if (!$parent.length) { 442 $parent = $this.hasClass('dokan-alert') ? $this : $this.parent() 443 } 444 445 $parent.trigger(e = $.Event('dokan-close.bs.alert')) 446 447 if (e.isDefaultPrevented()) return 448 449 $parent.removeClass('in') 450 451 function removeElement() { 452 $parent.trigger('dokan-closed.bs.alert').remove() 453 } 454 455 $.support.transition && $parent.hasClass('fade') ? 456 $parent 457 .one($.support.transition.end, removeElement) 458 .emulateTransitionEnd(150) : 459 removeElement() 460 } 461 462 463 // ALERT PLUGIN DEFINITION 464 // ======================= 465 466 var old = $.fn.alert 467 468 $.fn.alert = function (option) { 469 return this.each(function () { 470 var $this = $(this) 471 var data = $this.data('bs.alert') 472 473 if (!data) $this.data('bs.alert', (data = new Alert(this))) 474 if (typeof option == 'string') data[option].call($this) 475 }) 476 } 477 478 $.fn.alert.Constructor = Alert 479 480 481 // ALERT NO CONFLICT 482 // ================= 483 484 $.fn.alert.noConflict = function () { 485 $.fn.alert = old 486 return this 487 } 488 489 490 // ALERT DATA-API 491 // ============== 492 493 $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) 494 495}(window.jQuery); 496
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.