bootstrap.js 60.5 KB
Newer Older
XhmikosR's avatar
XhmikosR committed
1001
1002
1003
1004
        this.options.backdrop == 'static'
          ? this.$element[0].focus.call(this.$element[0])
          : this.hide.call(this)
      }, this))
1005

XhmikosR's avatar
XhmikosR committed
1006
      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
1007

XhmikosR's avatar
XhmikosR committed
1008
      this.$backdrop.addClass('in')
1009

XhmikosR's avatar
XhmikosR committed
1010
      if (!callback) return
1011

XhmikosR's avatar
XhmikosR committed
1012
1013
1014
1015
1016
      doAnimate ?
        this.$backdrop
          .one('bsTransitionEnd', callback)
          .emulateTransitionEnd(150) :
        callback()
1017

XhmikosR's avatar
XhmikosR committed
1018
1019
    } else if (!this.isShown && this.$backdrop) {
      this.$backdrop.removeClass('in')
Chris Rebert's avatar
Chris Rebert committed
1020

XhmikosR's avatar
XhmikosR committed
1021
1022
1023
      var callbackRemove = function () {
        that.removeBackdrop()
        callback && callback()
Chris Rebert's avatar
Chris Rebert committed
1024
      }
XhmikosR's avatar
XhmikosR committed
1025
1026
1027
1028
1029
      $.support.transition && this.$element.hasClass('fade') ?
        this.$backdrop
          .one('bsTransitionEnd', callbackRemove)
          .emulateTransitionEnd(150) :
        callbackRemove()
1030

XhmikosR's avatar
XhmikosR committed
1031
1032
    } else if (callback) {
      callback()
Chris Rebert's avatar
Chris Rebert committed
1033
    }
XhmikosR's avatar
XhmikosR committed
1034
  }
1035

XhmikosR's avatar
XhmikosR committed
1036
1037
1038
1039
  Modal.prototype.checkScrollbar = function () {
    if (document.body.clientWidth >= window.innerWidth) return
    this.scrollbarWidth = this.scrollbarWidth || this.measureScrollbar()
  }
fat's avatar
build    
fat committed
1040

XhmikosR's avatar
XhmikosR committed
1041
1042
1043
1044
  Modal.prototype.setScrollbar = function () {
    var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
    if (this.scrollbarWidth) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
  }
fat's avatar
build    
fat committed
1045

XhmikosR's avatar
XhmikosR committed
1046
1047
1048
  Modal.prototype.resetScrollbar = function () {
    this.$body.css('padding-right', '')
  }
fat's avatar
build    
fat committed
1049

XhmikosR's avatar
XhmikosR committed
1050
1051
1052
1053
1054
1055
1056
1057
  Modal.prototype.measureScrollbar = function () { // thx walsh
    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
  }
1058
1059


XhmikosR's avatar
XhmikosR committed
1060
1061
  // MODAL PLUGIN DEFINITION
  // =======================
fat's avatar
fat committed
1062

XhmikosR's avatar
XhmikosR committed
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
  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)
    })
  }
1074

XhmikosR's avatar
XhmikosR committed
1075
  var old = $.fn.modal
Mark Otto's avatar
Mark Otto committed
1076

XhmikosR's avatar
XhmikosR committed
1077
1078
  $.fn.modal             = Plugin
  $.fn.modal.Constructor = Modal
1079
1080


XhmikosR's avatar
XhmikosR committed
1081
1082
  // MODAL NO CONFLICT
  // =================
1083

XhmikosR's avatar
XhmikosR committed
1084
1085
1086
1087
  $.fn.modal.noConflict = function () {
    $.fn.modal = old
    return this
  }
1088
1089


XhmikosR's avatar
XhmikosR committed
1090
1091
  // MODAL DATA-API
  // ==============
1092

XhmikosR's avatar
XhmikosR committed
1093
1094
1095
1096
1097
  $(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]+$)/, ''))) // strip for ie7
    var option  = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
1098

XhmikosR's avatar
XhmikosR committed
1099
    if ($this.is('a')) e.preventDefault()
1100

XhmikosR's avatar
XhmikosR committed
1101
1102
1103
1104
    $target.one('show.bs.modal', function (showEvent) {
      if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
      $target.one('hidden.bs.modal', function () {
        $this.is(':visible') && $this.trigger('focus')
Mark Otto's avatar
grunt    
Mark Otto committed
1105
      })
Mark Otto's avatar
Mark Otto committed
1106
    })
XhmikosR's avatar
XhmikosR committed
1107
    Plugin.call($target, option, this)
Jacob Thornton's avatar
Jacob Thornton committed
1108
  })
1109

XhmikosR's avatar
XhmikosR committed
1110
}(jQuery);
1111

1112
/* ========================================================================
Mark Otto's avatar
Mark Otto committed
1113
 * Bootstrap: tooltip.js v3.2.0
Mark Otto's avatar
Mark Otto committed
1114
 * http://getbootstrap.com/javascript/#tooltip
1115
 * Inspired by the original jQuery.tipsy by Jason Frame
1116
 * ========================================================================
1117
 * Copyright 2011-2014 Twitter, Inc.
1118
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1119
 * ======================================================================== */
1120
1121


XhmikosR's avatar
XhmikosR committed
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
+function ($) {
  'use strict';

  // TOOLTIP PUBLIC CLASS DEFINITION
  // ===============================

  var Tooltip = function (element, options) {
    this.type       =
    this.options    =
    this.enabled    =
    this.timeout    =
    this.hoverState =
    this.$element   = null

    this.init('tooltip', element, options)
  }

Mark Otto's avatar
Mark Otto committed
1139
  Tooltip.VERSION  = '3.2.0'
XhmikosR's avatar
XhmikosR committed
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178

  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 && $(this.options.viewport.selector || this.options.viewport)

    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))
      }
    }
1179

XhmikosR's avatar
XhmikosR committed
1180
1181
1182
1183
    this.options.selector ?
      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
      this.fixTitle()
  }
1184

XhmikosR's avatar
XhmikosR committed
1185
1186
1187
  Tooltip.prototype.getDefaults = function () {
    return Tooltip.DEFAULTS
  }
1188

XhmikosR's avatar
XhmikosR committed
1189
1190
  Tooltip.prototype.getOptions = function (options) {
    options = $.extend({}, this.getDefaults(), this.$element.data(), options)
1191

XhmikosR's avatar
XhmikosR committed
1192
1193
1194
1195
    if (options.delay && typeof options.delay == 'number') {
      options.delay = {
        show: options.delay,
        hide: options.delay
1196
1197
      }
    }
1198

XhmikosR's avatar
XhmikosR committed
1199
1200
    return options
  }
Jacob Thornton's avatar
Jacob Thornton committed
1201

XhmikosR's avatar
XhmikosR committed
1202
1203
1204
  Tooltip.prototype.getDelegateOptions = function () {
    var options  = {}
    var defaults = this.getDefaults()
1205

XhmikosR's avatar
XhmikosR committed
1206
1207
1208
    this._options && $.each(this._options, function (key, value) {
      if (defaults[key] != value) options[key] = value
    })
fat's avatar
rebuild    
fat committed
1209

XhmikosR's avatar
XhmikosR committed
1210
1211
    return options
  }
Jacob Thornton's avatar
Jacob Thornton committed
1212

XhmikosR's avatar
XhmikosR committed
1213
1214
1215
  Tooltip.prototype.enter = function (obj) {
    var self = obj instanceof this.constructor ?
      obj : $(obj.currentTarget).data('bs.' + this.type)
Mark Otto's avatar
Mark Otto committed
1216

XhmikosR's avatar
XhmikosR committed
1217
1218
1219
    if (!self) {
      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
      $(obj.currentTarget).data('bs.' + this.type, self)
Mark Otto's avatar
Mark Otto committed
1220
    }
1221

XhmikosR's avatar
XhmikosR committed
1222
    clearTimeout(self.timeout)
1223

XhmikosR's avatar
XhmikosR committed
1224
    self.hoverState = 'in'
1225

XhmikosR's avatar
XhmikosR committed
1226
    if (!self.options.delay || !self.options.delay.show) return self.show()
1227

XhmikosR's avatar
XhmikosR committed
1228
1229
1230
1231
    self.timeout = setTimeout(function () {
      if (self.hoverState == 'in') self.show()
    }, self.options.delay.show)
  }
1232

XhmikosR's avatar
XhmikosR committed
1233
1234
1235
  Tooltip.prototype.leave = function (obj) {
    var self = obj instanceof this.constructor ?
      obj : $(obj.currentTarget).data('bs.' + this.type)
Mark Otto's avatar
Mark Otto committed
1236

XhmikosR's avatar
XhmikosR committed
1237
1238
1239
    if (!self) {
      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
      $(obj.currentTarget).data('bs.' + this.type, self)
Mark Otto's avatar
Mark Otto committed
1240
    }
1241

XhmikosR's avatar
XhmikosR committed
1242
    clearTimeout(self.timeout)
fat's avatar
fat committed
1243

XhmikosR's avatar
XhmikosR committed
1244
    self.hoverState = 'out'
1245

XhmikosR's avatar
XhmikosR committed
1246
    if (!self.options.delay || !self.options.delay.hide) return self.hide()
1247

XhmikosR's avatar
XhmikosR committed
1248
1249
1250
1251
    self.timeout = setTimeout(function () {
      if (self.hoverState == 'out') self.hide()
    }, self.options.delay.hide)
  }
1252

XhmikosR's avatar
XhmikosR committed
1253
1254
  Tooltip.prototype.show = function () {
    var e = $.Event('show.bs.' + this.type)
Chris Rebert's avatar
Chris Rebert committed
1255

XhmikosR's avatar
XhmikosR committed
1256
1257
    if (this.hasContent() && this.enabled) {
      this.$element.trigger(e)
fat's avatar
fat committed
1258

XhmikosR's avatar
XhmikosR committed
1259
1260
1261
      var inDom = $.contains(document.documentElement, this.$element[0])
      if (e.isDefaultPrevented() || !inDom) return
      var that = this
1262

XhmikosR's avatar
XhmikosR committed
1263
      var $tip = this.tip()
fat's avatar
fat committed
1264

XhmikosR's avatar
XhmikosR committed
1265
      var tipId = this.getUID(this.type)
fat's avatar
fat committed
1266

XhmikosR's avatar
XhmikosR committed
1267
1268
1269
      this.setContent()
      $tip.attr('id', tipId)
      this.$element.attr('aria-describedby', tipId)
1270

XhmikosR's avatar
XhmikosR committed
1271
      if (this.options.animation) $tip.addClass('fade')
1272

XhmikosR's avatar
XhmikosR committed
1273
1274
1275
      var placement = typeof this.options.placement == 'function' ?
        this.options.placement.call(this, $tip[0], this.$element[0]) :
        this.options.placement
1276

XhmikosR's avatar
XhmikosR committed
1277
1278
1279
      var autoToken = /\s?auto?\s?/i
      var autoPlace = autoToken.test(placement)
      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
1280

XhmikosR's avatar
XhmikosR committed
1281
1282
1283
1284
1285
      $tip
        .detach()
        .css({ top: 0, left: 0, display: 'block' })
        .addClass(placement)
        .data('bs.' + this.type, this)
fat's avatar
fat committed
1286

XhmikosR's avatar
XhmikosR committed
1287
      this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
1288

XhmikosR's avatar
XhmikosR committed
1289
1290
1291
      var pos          = this.getPosition()
      var actualWidth  = $tip[0].offsetWidth
      var actualHeight = $tip[0].offsetHeight
Chris Rebert's avatar
Chris Rebert committed
1292

XhmikosR's avatar
XhmikosR committed
1293
1294
1295
1296
      if (autoPlace) {
        var orgPlacement = placement
        var $parent      = this.$element.parent()
        var parentDim    = this.getPosition($parent)
Chris Rebert's avatar
Chris Rebert committed
1297

XhmikosR's avatar
XhmikosR committed
1298
1299
1300
1301
1302
        placement = placement == 'bottom' && pos.top   + pos.height       + actualHeight - parentDim.scroll > parentDim.height ? 'top'    :
                    placement == 'top'    && pos.top   - parentDim.scroll - actualHeight < 0                                   ? 'bottom' :
                    placement == 'right'  && pos.right + actualWidth      > parentDim.width                                    ? 'left'   :
                    placement == 'left'   && pos.left  - actualWidth      < parentDim.left                                     ? 'right'  :
                    placement
fat's avatar
fat committed
1303

1304
        $tip
XhmikosR's avatar
XhmikosR committed
1305
          .removeClass(orgPlacement)
1306
          .addClass(placement)
XhmikosR's avatar
XhmikosR committed
1307
      }
1308

XhmikosR's avatar
XhmikosR committed
1309
      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
1310

XhmikosR's avatar
XhmikosR committed
1311
      this.applyPlacement(calculatedOffset, placement)
fat's avatar
fat committed
1312

XhmikosR's avatar
XhmikosR committed
1313
1314
1315
1316
      var complete = function () {
        that.$element.trigger('shown.bs.' + that.type)
        that.hoverState = null
      }
fat's avatar
fat committed
1317

XhmikosR's avatar
XhmikosR committed
1318
1319
1320
1321
1322
1323
1324
      $.support.transition && this.$tip.hasClass('fade') ?
        $tip
          .one('bsTransitionEnd', complete)
          .emulateTransitionEnd(150) :
        complete()
    }
  }
fat's avatar
fat committed
1325

XhmikosR's avatar
XhmikosR committed
1326
1327
1328
1329
  Tooltip.prototype.applyPlacement = function (offset, placement) {
    var $tip   = this.tip()
    var width  = $tip[0].offsetWidth
    var height = $tip[0].offsetHeight
fat's avatar
fat committed
1330

XhmikosR's avatar
XhmikosR committed
1331
1332
1333
    // manually read margins because getBoundingClientRect includes difference
    var marginTop = parseInt($tip.css('margin-top'), 10)
    var marginLeft = parseInt($tip.css('margin-left'), 10)
fat's avatar
fat committed
1334

XhmikosR's avatar
XhmikosR committed
1335
1336
1337
    // we must check for NaN for ie 8/9
    if (isNaN(marginTop))  marginTop  = 0
    if (isNaN(marginLeft)) marginLeft = 0
fat's avatar
fat committed
1338

XhmikosR's avatar
XhmikosR committed
1339
1340
    offset.top  = offset.top  + marginTop
    offset.left = offset.left + marginLeft
fat's avatar
fat committed
1341

XhmikosR's avatar
XhmikosR committed
1342
1343
1344
1345
1346
1347
1348
1349
    // $.fn.offset doesn't round pixel values
    // so we use setOffset directly with our own function B-0
    $.offset.setOffset($tip[0], $.extend({
      using: function (props) {
        $tip.css({
          top: Math.round(props.top),
          left: Math.round(props.left)
        })
1350
      }
XhmikosR's avatar
XhmikosR committed
1351
    }, offset), 0)
1352

XhmikosR's avatar
XhmikosR committed
1353
    $tip.addClass('in')
fat's avatar
fat committed
1354

XhmikosR's avatar
XhmikosR committed
1355
1356
1357
    // check to see if placing tip in new offset caused the tip to resize itself
    var actualWidth  = $tip[0].offsetWidth
    var actualHeight = $tip[0].offsetHeight
fat's avatar
fat committed
1358

XhmikosR's avatar
XhmikosR committed
1359
1360
1361
    if (placement == 'top' && actualHeight != height) {
      offset.top = offset.top + height - actualHeight
    }
fat's avatar
fat committed
1362

XhmikosR's avatar
XhmikosR committed
1363
    var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
fat's avatar
fat committed
1364

XhmikosR's avatar
XhmikosR committed
1365
1366
    if (delta.left) offset.left += delta.left
    else offset.top += delta.top
1367

XhmikosR's avatar
XhmikosR committed
1368
1369
1370
    var arrowDelta          = delta.left ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
    var arrowPosition       = delta.left ? 'left'        : 'top'
    var arrowOffsetPosition = delta.left ? 'offsetWidth' : 'offsetHeight'
1371

XhmikosR's avatar
XhmikosR committed
1372
1373
1374
    $tip.offset(offset)
    this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], arrowPosition)
  }
1375

XhmikosR's avatar
XhmikosR committed
1376
1377
1378
  Tooltip.prototype.replaceArrow = function (delta, dimension, position) {
    this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + '%') : '')
  }
1379

XhmikosR's avatar
XhmikosR committed
1380
1381
1382
  Tooltip.prototype.setContent = function () {
    var $tip  = this.tip()
    var title = this.getTitle()
1383

XhmikosR's avatar
XhmikosR committed
1384
1385
1386
    $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
    $tip.removeClass('fade in top bottom left right')
  }
1387

XhmikosR's avatar
XhmikosR committed
1388
1389
1390
1391
  Tooltip.prototype.hide = function () {
    var that = this
    var $tip = this.tip()
    var e    = $.Event('hide.bs.' + this.type)
1392

XhmikosR's avatar
XhmikosR committed
1393
    this.$element.removeAttr('aria-describedby')
1394

XhmikosR's avatar
XhmikosR committed
1395
1396
1397
1398
    function complete() {
      if (that.hoverState != 'in') $tip.detach()
      that.$element.trigger('hidden.bs.' + that.type)
    }
Jacob Thornton's avatar
Jacob Thornton committed
1399

XhmikosR's avatar
XhmikosR committed
1400
    this.$element.trigger(e)
1401

XhmikosR's avatar
XhmikosR committed
1402
    if (e.isDefaultPrevented()) return
1403

XhmikosR's avatar
XhmikosR committed
1404
    $tip.removeClass('in')
1405

XhmikosR's avatar
XhmikosR committed
1406
1407
1408
1409
1410
    $.support.transition && this.$tip.hasClass('fade') ?
      $tip
        .one('bsTransitionEnd', complete)
        .emulateTransitionEnd(150) :
      complete()
1411

XhmikosR's avatar
XhmikosR committed
1412
    this.hoverState = null
1413

XhmikosR's avatar
XhmikosR committed
1414
1415
    return this
  }
1416

XhmikosR's avatar
XhmikosR committed
1417
1418
1419
1420
  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', '')
1421
    }
XhmikosR's avatar
XhmikosR committed
1422
  }
1423

XhmikosR's avatar
XhmikosR committed
1424
1425
1426
  Tooltip.prototype.hasContent = function () {
    return this.getTitle()
  }
1427

XhmikosR's avatar
XhmikosR committed
1428
1429
  Tooltip.prototype.getPosition = function ($element) {
    $element   = $element || this.$element
Mark Otto's avatar
grunt    
Mark Otto committed
1430

XhmikosR's avatar
XhmikosR committed
1431
1432
    var el     = $element[0]
    var isBody = el.tagName == 'BODY'
Mark Otto's avatar
grunt    
Mark Otto committed
1433
1434
    var isSvg  = window.SVGElement && el instanceof window.SVGElement

XhmikosR's avatar
XhmikosR committed
1435
    var elRect    = el.getBoundingClientRect ? el.getBoundingClientRect() : null
Mark Otto's avatar
grunt    
Mark Otto committed
1436
1437
    var elOffset  = isBody ? { top: 0, left: 0 } : $element.offset()
    var scroll    = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
Chris Rebert's avatar
Chris Rebert committed
1438
    var outerDims = isSvg ? {} : {
XhmikosR's avatar
XhmikosR committed
1439
1440
      width:  isBody ? $(window).width()  : $element.outerWidth(),
      height: isBody ? $(window).height() : $element.outerHeight()
Chris Rebert's avatar
Chris Rebert committed
1441
    }
Mark Otto's avatar
grunt    
Mark Otto committed
1442
1443

    return $.extend({}, elRect, scroll, outerDims, elOffset)
XhmikosR's avatar
XhmikosR committed
1444
  }
1445

XhmikosR's avatar
XhmikosR committed
1446
1447
1448
1449
1450
  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 } :
        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width   }
1451

XhmikosR's avatar
XhmikosR committed
1452
  }
1453

XhmikosR's avatar
XhmikosR committed
1454
1455
1456
  Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
    var delta = { top: 0, left: 0 }
    if (!this.$viewport) return delta
1457

XhmikosR's avatar
XhmikosR committed
1458
1459
    var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
    var viewportDimensions = this.getPosition(this.$viewport)
1460

XhmikosR's avatar
XhmikosR committed
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
    if (/right|left/.test(placement)) {
      var topEdgeOffset    = pos.top - viewportPadding - viewportDimensions.scroll
      var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
      if (topEdgeOffset < viewportDimensions.top) { // top overflow
        delta.top = viewportDimensions.top - topEdgeOffset
      } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
        delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
      }
    } else {
      var leftEdgeOffset  = pos.left - viewportPadding
      var rightEdgeOffset = pos.left + viewportPadding + actualWidth
      if (leftEdgeOffset < viewportDimensions.left) { // left overflow
        delta.left = viewportDimensions.left - leftEdgeOffset
      } else if (rightEdgeOffset > viewportDimensions.width) { // right overflow
        delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
1476
      }
Chris Rebert's avatar
Chris Rebert committed
1477
    }
fat's avatar
fat committed
1478

XhmikosR's avatar
XhmikosR committed
1479
1480
    return delta
  }
1481

XhmikosR's avatar
XhmikosR committed
1482
1483
1484
1485
  Tooltip.prototype.getTitle = function () {
    var title
    var $e = this.$element
    var o  = this.options
1486

XhmikosR's avatar
XhmikosR committed
1487
1488
    title = $e.attr('data-original-title')
      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)
1489

XhmikosR's avatar
XhmikosR committed
1490
1491
    return title
  }
1492

XhmikosR's avatar
XhmikosR committed
1493
1494
1495
1496
1497
  Tooltip.prototype.getUID = function (prefix) {
    do prefix += ~~(Math.random() * 1000000)
    while (document.getElementById(prefix))
    return prefix
  }
1498

XhmikosR's avatar
XhmikosR committed
1499
1500
1501
  Tooltip.prototype.tip = function () {
    return (this.$tip = this.$tip || $(this.options.template))
  }
1502

XhmikosR's avatar
XhmikosR committed
1503
1504
1505
  Tooltip.prototype.arrow = function () {
    return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
  }
1506

XhmikosR's avatar
XhmikosR committed
1507
1508
1509
1510
1511
  Tooltip.prototype.validate = function () {
    if (!this.$element[0].parentNode) {
      this.hide()
      this.$element = null
      this.options  = null
Chris Rebert's avatar
Chris Rebert committed
1512
    }
XhmikosR's avatar
XhmikosR committed
1513
  }
1514

XhmikosR's avatar
XhmikosR committed
1515
1516
1517
  Tooltip.prototype.enable = function () {
    this.enabled = true
  }
1518

XhmikosR's avatar
XhmikosR committed
1519
1520
1521
  Tooltip.prototype.disable = function () {
    this.enabled = false
  }
Mark Otto's avatar
Mark Otto committed
1522

XhmikosR's avatar
XhmikosR committed
1523
1524
1525
  Tooltip.prototype.toggleEnabled = function () {
    this.enabled = !this.enabled
  }
Chris Rebert's avatar
Chris Rebert committed
1526

XhmikosR's avatar
XhmikosR committed
1527
1528
1529
1530
1531
1532
1533
1534
  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)
      }
Mark Otto's avatar
Mark Otto committed
1535
1536
    }

XhmikosR's avatar
XhmikosR committed
1537
1538
    self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
  }
1539

XhmikosR's avatar
XhmikosR committed
1540
1541
1542
1543
  Tooltip.prototype.destroy = function () {
    clearTimeout(this.timeout)
    this.hide().$element.off('.' + this.type).removeData('bs.' + this.type)
  }
1544
1545


XhmikosR's avatar
XhmikosR committed
1546
1547
  // TOOLTIP PLUGIN DEFINITION
  // =========================
1548

XhmikosR's avatar
XhmikosR committed
1549
1550
1551
1552
1553
  function Plugin(option) {
    return this.each(function () {
      var $this   = $(this)
      var data    = $this.data('bs.tooltip')
      var options = typeof option == 'object' && option
fat's avatar
fat committed
1554

XhmikosR's avatar
XhmikosR committed
1555
1556
1557
1558
1559
      if (!data && option == 'destroy') return
      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
      if (typeof option == 'string') data[option]()
    })
  }
1560

XhmikosR's avatar
XhmikosR committed
1561
  var old = $.fn.tooltip
Mark Otto's avatar
Mark Otto committed
1562

XhmikosR's avatar
XhmikosR committed
1563
1564
  $.fn.tooltip             = Plugin
  $.fn.tooltip.Constructor = Tooltip
1565

1566

XhmikosR's avatar
XhmikosR committed
1567
1568
  // TOOLTIP NO CONFLICT
  // ===================
1569

XhmikosR's avatar
XhmikosR committed
1570
1571
1572
1573
  $.fn.tooltip.noConflict = function () {
    $.fn.tooltip = old
    return this
  }
1574

XhmikosR's avatar
XhmikosR committed
1575
}(jQuery);
1576

1577
/* ========================================================================
Mark Otto's avatar
Mark Otto committed
1578
 * Bootstrap: popover.js v3.2.0
Mark Otto's avatar
Mark Otto committed
1579
 * http://getbootstrap.com/javascript/#popovers
1580
 * ========================================================================
1581
 * Copyright 2011-2014 Twitter, Inc.
1582
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1583
 * ======================================================================== */
1584
1585


XhmikosR's avatar
XhmikosR committed
1586
1587
+function ($) {
  'use strict';
Mark Otto's avatar
grunt    
Mark Otto committed
1588

XhmikosR's avatar
XhmikosR committed
1589
1590
  // POPOVER PUBLIC CLASS DEFINITION
  // ===============================
1591

XhmikosR's avatar
XhmikosR committed
1592
1593
1594
  var Popover = function (element, options) {
    this.init('popover', element, options)
  }
fat's avatar
fat committed
1595

XhmikosR's avatar
XhmikosR committed
1596
  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
1597

Mark Otto's avatar
Mark Otto committed
1598
  Popover.VERSION  = '3.2.0'
1599

XhmikosR's avatar
XhmikosR committed
1600
1601
1602
1603
1604
1605
  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>'
  })
fat's avatar
fat committed
1606
1607


XhmikosR's avatar
XhmikosR committed
1608
1609
  // NOTE: POPOVER EXTENDS tooltip.js
  // ================================
1610

XhmikosR's avatar
XhmikosR committed
1611
  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
fat's avatar
fat committed
1612

XhmikosR's avatar
XhmikosR committed
1613
  Popover.prototype.constructor = Popover
1614

XhmikosR's avatar
XhmikosR committed
1615
1616
1617
  Popover.prototype.getDefaults = function () {
    return Popover.DEFAULTS
  }
1618

XhmikosR's avatar
XhmikosR committed
1619
1620
1621
1622
  Popover.prototype.setContent = function () {
    var $tip    = this.tip()
    var title   = this.getTitle()
    var content = this.getContent()
1623

XhmikosR's avatar
XhmikosR committed
1624
1625
1626
1627
    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
    $tip.find('.popover-content').empty()[ // we use append for html objects to maintain js events
      this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
    ](content)
1628

XhmikosR's avatar
XhmikosR committed
1629
    $tip.removeClass('fade top bottom left right in')
1630

XhmikosR's avatar
XhmikosR committed
1631
1632
1633
1634
    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
    // this manually by checking the contents.
    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
  }
1635

XhmikosR's avatar
XhmikosR committed
1636
1637
1638
  Popover.prototype.hasContent = function () {
    return this.getTitle() || this.getContent()
  }
1639

XhmikosR's avatar
XhmikosR committed
1640
1641
1642
  Popover.prototype.getContent = function () {
    var $e = this.$element
    var o  = this.options
1643

XhmikosR's avatar
XhmikosR committed
1644
1645
1646
1647
1648
    return $e.attr('data-content')
      || (typeof o.content == 'function' ?
            o.content.call($e[0]) :
            o.content)
  }
fat's avatar
fat committed
1649

XhmikosR's avatar
XhmikosR committed
1650
1651
1652
  Popover.prototype.arrow = function () {
    return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
  }
1653

XhmikosR's avatar
XhmikosR committed
1654
1655
1656
1657
  Popover.prototype.tip = function () {
    if (!this.$tip) this.$tip = $(this.options.template)
    return this.$tip
  }
1658

1659

XhmikosR's avatar
XhmikosR committed
1660
1661
  // POPOVER PLUGIN DEFINITION
  // =========================
1662

XhmikosR's avatar
XhmikosR committed
1663
1664
1665
1666
1667
  function Plugin(option) {
    return this.each(function () {
      var $this   = $(this)
      var data    = $this.data('bs.popover')
      var options = typeof option == 'object' && option
Chris Rebert's avatar
Chris Rebert committed
1668

XhmikosR's avatar
XhmikosR committed
1669
1670
1671
1672
1673
      if (!data && option == 'destroy') return
      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
      if (typeof option == 'string') data[option]()
    })
  }
1674

XhmikosR's avatar
XhmikosR committed
1675
  var old = $.fn.popover
Mark Otto's avatar
Mark Otto committed
1676

XhmikosR's avatar
XhmikosR committed
1677
1678
  $.fn.popover             = Plugin
  $.fn.popover.Constructor = Popover
fat's avatar
fat committed
1679

1680

XhmikosR's avatar
XhmikosR committed
1681
1682
  // POPOVER NO CONFLICT
  // ===================
1683

XhmikosR's avatar
XhmikosR committed
1684
1685
1686
1687
  $.fn.popover.noConflict = function () {
    $.fn.popover = old
    return this
  }
1688

XhmikosR's avatar
XhmikosR committed
1689
}(jQuery);
1690

1691
/* ========================================================================
Mark Otto's avatar
Mark Otto committed
1692
 * Bootstrap: scrollspy.js v3.2.0
Mark Otto's avatar
Mark Otto committed
1693
 * http://getbootstrap.com/javascript/#scrollspy
1694
 * ========================================================================
1695
 * Copyright 2011-2014 Twitter, Inc.
1696
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1697
 * ======================================================================== */
1698
1699


XhmikosR's avatar
XhmikosR committed
1700
1701
+function ($) {
  'use strict';
1702

XhmikosR's avatar
XhmikosR committed
1703
1704
  // SCROLLSPY CLASS DEFINITION
  // ==========================
1705

XhmikosR's avatar
XhmikosR committed
1706
1707
  function ScrollSpy(element, options) {
    var process  = $.proxy(this.process, this)
1708

XhmikosR's avatar
XhmikosR committed
1709
1710
1711
1712
1713
1714
1715
1716
    this.$body          = $('body')
    this.$scrollElement = $(element).is('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
1717

XhmikosR's avatar
XhmikosR committed
1718
1719
1720
1721
    this.$scrollElement.on('scroll.bs.scrollspy', process)
    this.refresh()
    this.process()
  }
1722

Mark Otto's avatar
Mark Otto committed
1723
  ScrollSpy.VERSION  = '3.2.0'
Mark Otto's avatar
grunt    
Mark Otto committed
1724

XhmikosR's avatar
XhmikosR committed
1725
1726
1727
  ScrollSpy.DEFAULTS = {
    offset: 10
  }
1728

XhmikosR's avatar
XhmikosR committed
1729
1730
1731
  ScrollSpy.prototype.getScrollHeight = function () {
    return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
  }
Mark Otto's avatar
grunt    
Mark Otto committed
1732

XhmikosR's avatar
XhmikosR committed
1733
1734
1735
  ScrollSpy.prototype.refresh = function () {
    var offsetMethod = 'offset'
    var offsetBase   = 0
Mark Otto's avatar
grunt    
Mark Otto committed
1736

XhmikosR's avatar
XhmikosR committed
1737
1738
1739
1740
    if (!$.isWindow(this.$scrollElement[0])) {
      offsetMethod = 'position'
      offsetBase   = this.$scrollElement.scrollTop()
    }
Mark Otto's avatar
grunt    
Mark Otto committed
1741

XhmikosR's avatar
XhmikosR committed
1742
1743
1744
    this.offsets = []
    this.targets = []
    this.scrollHeight = this.getScrollHeight()
fat's avatar
fat committed
1745

XhmikosR's avatar
XhmikosR committed
1746
    var self     = this
XhmikosR's avatar
XhmikosR committed
1747

XhmikosR's avatar
XhmikosR committed
1748
1749
1750
1751
1752
1753
    this.$body
      .find(this.selector)
      .map(function () {
        var $el   = $(this)
        var href  = $el.data('target') || $el.attr('href')
        var $href = /^#./.test(href) && $(href)
1754

XhmikosR's avatar
XhmikosR committed
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
        return ($href
          && $href.length
          && $href.is(':visible')
          && [[$href[offsetMethod]().top + offsetBase, href]]) || null
      })
      .sort(function (a, b) { return a[0] - b[0] })
      .each(function () {
        self.offsets.push(this[0])
        self.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()
Mark Otto's avatar
grunt    
Mark Otto committed
1778
1779
    }

XhmikosR's avatar
XhmikosR committed
1780
1781
1782
    if (scrollTop >= maxScroll) {
      return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
    }
1783

XhmikosR's avatar
XhmikosR committed
1784
1785
    if (activeTarget && scrollTop <= offsets[0]) {
      return activeTarget != (i = targets[0]) && this.activate(i)
Chris Rebert's avatar
Chris Rebert committed
1786
    }
1787

XhmikosR's avatar
XhmikosR committed
1788
1789
1790
1791
1792
1793
1794
    for (i = offsets.length; i--;) {
      activeTarget != targets[i]
        && scrollTop >= offsets[i]
        && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
        && this.activate(targets[i])
    }
  }
1795

XhmikosR's avatar
XhmikosR committed
1796
1797
  ScrollSpy.prototype.activate = function (target) {
    this.activeTarget = target
1798

XhmikosR's avatar
XhmikosR committed
1799
1800
1801
    $(this.selector)
      .parentsUntil(this.options.target, '.active')
      .removeClass('active')
1802

XhmikosR's avatar
XhmikosR committed
1803
1804
1805
    var selector = this.selector +
        '[data-target="' + target + '"],' +
        this.selector + '[href="' + target + '"]'
1806

XhmikosR's avatar
XhmikosR committed
1807
1808
1809
    var active = $(selector)
      .parents('li')
      .addClass('active')
1810

XhmikosR's avatar
XhmikosR committed
1811
1812
1813
1814
    if (active.parent('.dropdown-menu').length) {
      active = active
        .closest('li.dropdown')
        .addClass('active')
Chris Rebert's avatar
Chris Rebert committed
1815
    }
1816

XhmikosR's avatar
XhmikosR committed
1817
1818
    active.trigger('activate.bs.scrollspy')
  }
1819
1820


XhmikosR's avatar
XhmikosR committed
1821
1822
  // SCROLLSPY PLUGIN DEFINITION
  // ===========================
1823

XhmikosR's avatar
XhmikosR committed
1824
1825
1826
1827
1828
  function Plugin(option) {
    return this.each(function () {
      var $this   = $(this)
      var data    = $this.data('bs.scrollspy')
      var options = typeof option == 'object' && option
Mark Otto's avatar
Mark Otto committed
1829

XhmikosR's avatar
XhmikosR committed
1830
1831
1832
1833
      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
      if (typeof option == 'string') data[option]()
    })
  }
1834

XhmikosR's avatar
XhmikosR committed
1835
  var old = $.fn.scrollspy
1836

XhmikosR's avatar
XhmikosR committed
1837
1838
  $.fn.scrollspy             = Plugin
  $.fn.scrollspy.Constructor = ScrollSpy
1839

1840

XhmikosR's avatar
XhmikosR committed
1841
1842
  // SCROLLSPY NO CONFLICT
  // =====================
1843

XhmikosR's avatar
XhmikosR committed
1844
1845
1846
1847
  $.fn.scrollspy.noConflict = function () {
    $.fn.scrollspy = old
    return this
  }
1848

Chris Rebert's avatar
Chris Rebert committed
1849

XhmikosR's avatar
XhmikosR committed
1850
1851
  // SCROLLSPY DATA-API
  // ==================
Chris Rebert's avatar
Chris Rebert committed
1852

XhmikosR's avatar
XhmikosR committed
1853
1854
1855
1856
1857
  $(window).on('load.bs.scrollspy.data-api', function () {
    $('[data-spy="scroll"]').each(function () {
      var $spy = $(this)
      Plugin.call($spy, $spy.data())
    })
1858
  })
1859

XhmikosR's avatar
XhmikosR committed
1860
}(jQuery);
1861

1862
/* ========================================================================
Mark Otto's avatar
Mark Otto committed
1863
 * Bootstrap: tab.js v3.2.0
Mark Otto's avatar
Mark Otto committed
1864
 * http://getbootstrap.com/javascript/#tabs
1865
 * ========================================================================
1866
 * Copyright 2011-2014 Twitter, Inc.
1867
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1868
 * ======================================================================== */
1869

1870

XhmikosR's avatar
XhmikosR committed
1871
1872
+function ($) {
  'use strict';
Mark Otto's avatar
grunt    
Mark Otto committed
1873

XhmikosR's avatar
XhmikosR committed
1874
1875
  // TAB CLASS DEFINITION
  // ====================
1876

XhmikosR's avatar
XhmikosR committed
1877
1878
1879
  var Tab = function (element) {
    this.element = $(element)
  }
1880

Mark Otto's avatar
Mark Otto committed
1881
  Tab.VERSION = '3.2.0'
Mark Otto's avatar
grunt    
Mark Otto committed
1882

XhmikosR's avatar
XhmikosR committed
1883
1884
1885
1886
  Tab.prototype.show = function () {
    var $this    = this.element
    var $ul      = $this.closest('ul:not(.dropdown-menu)')
    var selector = $this.data('target')
1887

XhmikosR's avatar
XhmikosR committed
1888
1889
1890
1891
    if (!selector) {
      selector = $this.attr('href')
      selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
    }
1892

XhmikosR's avatar
XhmikosR committed
1893
    if ($this.parent('li').hasClass('active')) return
1894

XhmikosR's avatar
XhmikosR committed
1895
1896
1897
1898
    var previous = $ul.find('.active:last a')[0]
    var e        = $.Event('show.bs.tab', {
      relatedTarget: previous
    })
1899

XhmikosR's avatar
XhmikosR committed
1900
    $this.trigger(e)
1901

XhmikosR's avatar
XhmikosR committed
1902
    if (e.isDefaultPrevented()) return
1903

XhmikosR's avatar
XhmikosR committed
1904
    var $target = $(selector)
1905

XhmikosR's avatar
XhmikosR committed
1906
1907
1908
1909
1910
    this.activate($this.closest('li'), $ul)
    this.activate($target, $target.parent(), function () {
      $this.trigger({
        type: 'shown.bs.tab',
        relatedTarget: previous
1911
      })
XhmikosR's avatar
XhmikosR committed
1912
1913
    })
  }
1914

XhmikosR's avatar
XhmikosR committed
1915
1916
1917
1918
  Tab.prototype.activate = function (element, container, callback) {
    var $active    = container.find('> .active')
    var transition = callback
      && $.support.transition
Mark Otto's avatar
grunt    
Mark Otto committed
1919
      && (($active.length && $active.hasClass('fade')) || !!container.find('> .fade').length)
1920

XhmikosR's avatar
XhmikosR committed
1921
1922
1923
1924
1925
    function next() {
      $active
        .removeClass('active')
        .find('> .dropdown-menu > .active')
        .removeClass('active')
1926

XhmikosR's avatar
XhmikosR committed
1927
1928
1929
1930
1931
1932
1933
      element.addClass('active')

      if (transition) {
        element[0].offsetWidth // reflow for transition
        element.addClass('in')
      } else {
        element.removeClass('fade')
1934
      }
1935

XhmikosR's avatar
XhmikosR committed
1936
1937
1938
      if (element.parent('.dropdown-menu')) {
        element.closest('li.dropdown').addClass('active')
      }
fat's avatar
fat committed
1939

XhmikosR's avatar
XhmikosR committed
1940
      callback && callback()
1941
    }
fat's avatar
fat committed
1942

Mark Otto's avatar
grunt    
Mark Otto committed
1943
    $active.length && transition ?
XhmikosR's avatar
XhmikosR committed
1944
1945
1946
1947
      $active
        .one('bsTransitionEnd', next)
        .emulateTransitionEnd(150) :
      next()
1948

XhmikosR's avatar
XhmikosR committed
1949
1950
    $active.removeClass('in')
  }
1951
1952


XhmikosR's avatar
XhmikosR committed
1953
1954
  // TAB PLUGIN DEFINITION
  // =====================
fat's avatar
fat committed
1955

XhmikosR's avatar
XhmikosR committed
1956
1957
1958
1959
  function Plugin(option) {
    return this.each(function () {
      var $this = $(this)
      var data  = $this.data('bs.tab')
1960

XhmikosR's avatar
XhmikosR committed
1961
1962
1963
1964
      if (!data) $this.data('bs.tab', (data = new Tab(this)))
      if (typeof option == 'string') data[option]()
    })
  }
Mark Otto's avatar
Mark Otto committed
1965

XhmikosR's avatar
XhmikosR committed
1966
  var old = $.fn.tab
1967

XhmikosR's avatar
XhmikosR committed
1968
1969
  $.fn.tab             = Plugin
  $.fn.tab.Constructor = Tab
1970

1971

XhmikosR's avatar
XhmikosR committed
1972
1973
  // TAB NO CONFLICT
  // ===============
1974

XhmikosR's avatar
XhmikosR committed
1975
1976
1977
1978
  $.fn.tab.noConflict = function () {
    $.fn.tab = old
    return this
  }
1979
1980


XhmikosR's avatar
XhmikosR committed
1981
1982
1983
1984
1985
1986
  // TAB DATA-API
  // ============

  $(document).on('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
    e.preventDefault()
    Plugin.call($(this), 'show')
1987
1988
  })

XhmikosR's avatar
XhmikosR committed
1989
}(jQuery);
1990

1991
/* ========================================================================
Mark Otto's avatar
Mark Otto committed
1992
 * Bootstrap: affix.js v3.2.0
Mark Otto's avatar
Mark Otto committed
1993
 * http://getbootstrap.com/javascript/#affix
1994
 * ========================================================================
1995
 * Copyright 2011-2014 Twitter, Inc.
1996
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
1997
 * ======================================================================== */
Mark Otto's avatar
Mark Otto committed
1998
1999


XhmikosR's avatar
XhmikosR committed
2000
+function ($) {
For faster browsing, not all history is shown. View entire blame