bootstrap.js 65.8 KB
Newer Older
1
/*!
Mark Otto's avatar
Mark Otto committed
2
 * Bootstrap v3.3.1 (http://getbootstrap.com)
Mark Otto's avatar
Mark Otto committed
3
 * Copyright 2011-2015 Twitter, Inc.
Mark Otto's avatar
Mark Otto committed
4
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
Chris Rebert's avatar
Chris Rebert committed
5
 */
6

Heinrich Fenkart's avatar
grunt    
Heinrich Fenkart committed
7
8
9
10
11
12
13
14
15
16
if (typeof jQuery === 'undefined') {
  throw new Error('Bootstrap\'s JavaScript requires jQuery')
}

+function ($) {
  var version = $.fn.jquery.split(' ')[0].split('.')
  if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1)) {
    throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher')
  }
}(jQuery);
17

18
/* ========================================================================
Mark Otto's avatar
Mark Otto committed
19
 * Bootstrap: transition.js v3.3.1
Mark Otto's avatar
Mark Otto committed
20
 * http://getbootstrap.com/javascript/#transitions
21
 * ========================================================================
22
 * Copyright 2011-2014 Twitter, Inc.
23
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24
 * ======================================================================== */
25
26


XhmikosR's avatar
XhmikosR committed
27
28
+function ($) {
  'use strict';
Mark Otto's avatar
grunt    
Mark Otto committed
29

XhmikosR's avatar
XhmikosR committed
30
31
  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
  // ============================================================
32

XhmikosR's avatar
XhmikosR committed
33
34
  function transitionEnd() {
    var el = document.createElement('bootstrap')
35

XhmikosR's avatar
XhmikosR committed
36
37
38
39
40
41
    var transEndEventNames = {
      WebkitTransition : 'webkitTransitionEnd',
      MozTransition    : 'transitionend',
      OTransition      : 'oTransitionEnd otransitionend',
      transition       : 'transitionend'
    }
42

XhmikosR's avatar
XhmikosR committed
43
44
45
    for (var name in transEndEventNames) {
      if (el.style[name] !== undefined) {
        return { end: transEndEventNames[name] }
46
      }
Chris Rebert's avatar
Chris Rebert committed
47
48
    }

XhmikosR's avatar
XhmikosR committed
49
50
    return false // explicit for ie8 (  ._.)
  }
51

XhmikosR's avatar
XhmikosR committed
52
53
54
55
56
57
58
59
60
  // http://blog.alexmaccaw.com/css-transitions
  $.fn.emulateTransitionEnd = function (duration) {
    var called = false
    var $el = this
    $(this).one('bsTransitionEnd', function () { called = true })
    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
    setTimeout(callback, duration)
    return this
  }
61

XhmikosR's avatar
XhmikosR committed
62
63
  $(function () {
    $.support.transition = transitionEnd()
Chris Rebert's avatar
Chris Rebert committed
64

XhmikosR's avatar
XhmikosR committed
65
    if (!$.support.transition) return
66

XhmikosR's avatar
XhmikosR committed
67
68
69
70
71
72
73
    $.event.special.bsTransitionEnd = {
      bindType: $.support.transition.end,
      delegateType: $.support.transition.end,
      handle: function (e) {
        if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
      }
    }
fat's avatar
fat committed
74
  })
75

XhmikosR's avatar
XhmikosR committed
76
}(jQuery);
77

78
/* ========================================================================
Mark Otto's avatar
Mark Otto committed
79
 * Bootstrap: alert.js v3.3.1
Mark Otto's avatar
Mark Otto committed
80
 * http://getbootstrap.com/javascript/#alerts
81
 * ========================================================================
82
 * Copyright 2011-2014 Twitter, Inc.
83
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
84
 * ======================================================================== */
85
86


XhmikosR's avatar
XhmikosR committed
87
88
+function ($) {
  'use strict';
89

XhmikosR's avatar
XhmikosR committed
90
91
  // ALERT CLASS DEFINITION
  // ======================
92

XhmikosR's avatar
XhmikosR committed
93
94
95
96
  var dismiss = '[data-dismiss="alert"]'
  var Alert   = function (el) {
    $(el).on('click', dismiss, this.close)
  }
Mark Otto's avatar
grunt    
Mark Otto committed
97

Mark Otto's avatar
Mark Otto committed
98
  Alert.VERSION = '3.3.1'
99

100
101
  Alert.TRANSITION_DURATION = 150

XhmikosR's avatar
XhmikosR committed
102
103
104
  Alert.prototype.close = function (e) {
    var $this    = $(this)
    var selector = $this.attr('data-target')
105

XhmikosR's avatar
XhmikosR committed
106
107
108
109
    if (!selector) {
      selector = $this.attr('href')
      selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
    }
110

XhmikosR's avatar
XhmikosR committed
111
    var $parent = $(selector)
112

XhmikosR's avatar
XhmikosR committed
113
    if (e) e.preventDefault()
114

XhmikosR's avatar
XhmikosR committed
115
    if (!$parent.length) {
Chris Rebert's avatar
grunt    
Chris Rebert committed
116
      $parent = $this.closest('.alert')
XhmikosR's avatar
XhmikosR committed
117
    }
118

XhmikosR's avatar
XhmikosR committed
119
    $parent.trigger(e = $.Event('close.bs.alert'))
Chris Rebert's avatar
Chris Rebert committed
120

XhmikosR's avatar
XhmikosR committed
121
    if (e.isDefaultPrevented()) return
122

XhmikosR's avatar
XhmikosR committed
123
    $parent.removeClass('in')
124

XhmikosR's avatar
XhmikosR committed
125
126
127
    function removeElement() {
      // detach from parent, fire event then clean up data
      $parent.detach().trigger('closed.bs.alert').remove()
128
129
    }

XhmikosR's avatar
XhmikosR committed
130
131
132
    $.support.transition && $parent.hasClass('fade') ?
      $parent
        .one('bsTransitionEnd', removeElement)
133
        .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
XhmikosR's avatar
XhmikosR committed
134
135
      removeElement()
  }
136
137


XhmikosR's avatar
XhmikosR committed
138
139
  // ALERT PLUGIN DEFINITION
  // =======================
140

XhmikosR's avatar
XhmikosR committed
141
142
143
144
  function Plugin(option) {
    return this.each(function () {
      var $this = $(this)
      var data  = $this.data('bs.alert')
fat's avatar
fat committed
145

XhmikosR's avatar
XhmikosR committed
146
147
148
149
      if (!data) $this.data('bs.alert', (data = new Alert(this)))
      if (typeof option == 'string') data[option].call($this)
    })
  }
150

XhmikosR's avatar
XhmikosR committed
151
  var old = $.fn.alert
Mark Otto's avatar
Mark Otto committed
152

XhmikosR's avatar
XhmikosR committed
153
154
  $.fn.alert             = Plugin
  $.fn.alert.Constructor = Alert
155
156


XhmikosR's avatar
XhmikosR committed
157
158
  // ALERT NO CONFLICT
  // =================
159

XhmikosR's avatar
XhmikosR committed
160
161
162
163
  $.fn.alert.noConflict = function () {
    $.fn.alert = old
    return this
  }
164
165


XhmikosR's avatar
XhmikosR committed
166
167
  // ALERT DATA-API
  // ==============
168

XhmikosR's avatar
XhmikosR committed
169
  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
170

XhmikosR's avatar
XhmikosR committed
171
}(jQuery);
172

173
/* ========================================================================
Mark Otto's avatar
Mark Otto committed
174
 * Bootstrap: button.js v3.3.1
Mark Otto's avatar
Mark Otto committed
175
 * http://getbootstrap.com/javascript/#buttons
176
 * ========================================================================
177
 * Copyright 2011-2014 Twitter, Inc.
178
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
179
 * ======================================================================== */
180
181


XhmikosR's avatar
XhmikosR committed
182
183
+function ($) {
  'use strict';
fat's avatar
fat committed
184

XhmikosR's avatar
XhmikosR committed
185
186
  // BUTTON PUBLIC CLASS DEFINITION
  // ==============================
Mark Otto's avatar
grunt    
Mark Otto committed
187

XhmikosR's avatar
XhmikosR committed
188
189
190
191
192
  var Button = function (element, options) {
    this.$element  = $(element)
    this.options   = $.extend({}, Button.DEFAULTS, options)
    this.isLoading = false
  }
193

Mark Otto's avatar
Mark Otto committed
194
  Button.VERSION  = '3.3.1'
195

XhmikosR's avatar
XhmikosR committed
196
197
198
  Button.DEFAULTS = {
    loadingText: 'loading...'
  }
fat's avatar
fat committed
199

XhmikosR's avatar
XhmikosR committed
200
201
202
203
204
  Button.prototype.setState = function (state) {
    var d    = 'disabled'
    var $el  = this.$element
    var val  = $el.is('input') ? 'val' : 'html'
    var data = $el.data()
205

XhmikosR's avatar
XhmikosR committed
206
    state = state + 'Text'
207

XhmikosR's avatar
XhmikosR committed
208
    if (data.resetText == null) $el.data('resetText', $el[val]())
Chris Rebert's avatar
Chris Rebert committed
209

XhmikosR's avatar
XhmikosR committed
210
211
    // push to event loop to allow forms to submit
    setTimeout($.proxy(function () {
Heinrich Fenkart's avatar
grunt    
Heinrich Fenkart committed
212
213
      $el[val](data[state] == null ? this.options[state] : data[state])

XhmikosR's avatar
XhmikosR committed
214
215
216
217
218
219
      if (state == 'loadingText') {
        this.isLoading = true
        $el.addClass(d).attr(d, d)
      } else if (this.isLoading) {
        this.isLoading = false
        $el.removeClass(d).removeAttr(d)
220
      }
XhmikosR's avatar
XhmikosR committed
221
222
223
224
225
226
227
228
229
230
231
232
233
234
    }, this), 0)
  }

  Button.prototype.toggle = function () {
    var changed = true
    var $parent = this.$element.closest('[data-toggle="buttons"]')

    if ($parent.length) {
      var $input = this.$element.find('input')
      if ($input.prop('type') == 'radio') {
        if ($input.prop('checked') && this.$element.hasClass('active')) changed = false
        else $parent.find('.active').removeClass('active')
      }
      if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')
Heinrich Fenkart's avatar
grunt    
Heinrich Fenkart committed
235
236
    } else {
      this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
fat's avatar
fat committed
237
    }
238

XhmikosR's avatar
XhmikosR committed
239
240
    if (changed) this.$element.toggleClass('active')
  }
241
242


XhmikosR's avatar
XhmikosR committed
243
244
  // BUTTON PLUGIN DEFINITION
  // ========================
245

XhmikosR's avatar
XhmikosR committed
246
247
248
249
250
  function Plugin(option) {
    return this.each(function () {
      var $this   = $(this)
      var data    = $this.data('bs.button')
      var options = typeof option == 'object' && option
fat's avatar
fat committed
251

XhmikosR's avatar
XhmikosR committed
252
      if (!data) $this.data('bs.button', (data = new Button(this, options)))
fat's avatar
fat committed
253

XhmikosR's avatar
XhmikosR committed
254
255
256
257
      if (option == 'toggle') data.toggle()
      else if (option) data.setState(option)
    })
  }
258

XhmikosR's avatar
XhmikosR committed
259
  var old = $.fn.button
Mark Otto's avatar
Mark Otto committed
260

XhmikosR's avatar
XhmikosR committed
261
262
  $.fn.button             = Plugin
  $.fn.button.Constructor = Button
263
264


XhmikosR's avatar
XhmikosR committed
265
266
  // BUTTON NO CONFLICT
  // ==================
267

XhmikosR's avatar
XhmikosR committed
268
269
270
271
  $.fn.button.noConflict = function () {
    $.fn.button = old
    return this
  }
272
273


XhmikosR's avatar
XhmikosR committed
274
275
  // BUTTON DATA-API
  // ===============
276

Mark Otto's avatar
grunt    
Mark Otto committed
277
278
279
280
281
282
283
  $(document)
    .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
      var $btn = $(e.target)
      if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
      Plugin.call($btn, 'toggle')
      e.preventDefault()
    })
Chris Rebert's avatar
Chris Rebert committed
284
    .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
Heinrich Fenkart's avatar
grunt    
Heinrich Fenkart committed
285
      $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
Mark Otto's avatar
grunt    
Mark Otto committed
286
    })
287

XhmikosR's avatar
XhmikosR committed
288
}(jQuery);
289

290
/* ========================================================================
Mark Otto's avatar
Mark Otto committed
291
 * Bootstrap: carousel.js v3.3.1
Mark Otto's avatar
Mark Otto committed
292
 * http://getbootstrap.com/javascript/#carousel
293
 * ========================================================================
294
 * Copyright 2011-2014 Twitter, Inc.
295
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
296
 * ======================================================================== */
297
298


XhmikosR's avatar
XhmikosR committed
299
300
+function ($) {
  'use strict';
301

XhmikosR's avatar
XhmikosR committed
302
303
  // CAROUSEL CLASS DEFINITION
  // =========================
304

XhmikosR's avatar
XhmikosR committed
305
  var Carousel = function (element, options) {
Heinrich Fenkart's avatar
grunt    
Heinrich Fenkart committed
306
    this.$element    = $(element)
XhmikosR's avatar
XhmikosR committed
307
308
309
310
311
312
313
    this.$indicators = this.$element.find('.carousel-indicators')
    this.options     = options
    this.paused      =
    this.sliding     =
    this.interval    =
    this.$active     =
    this.$items      = null
fat's avatar
fat committed
314

Heinrich Fenkart's avatar
grunt    
Heinrich Fenkart committed
315
316
    this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))

317
    this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
XhmikosR's avatar
XhmikosR committed
318
319
320
      .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
      .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
  }
321

Mark Otto's avatar
Mark Otto committed
322
  Carousel.VERSION  = '3.3.1'
Mark Otto's avatar
grunt    
Mark Otto committed
323

324
325
  Carousel.TRANSITION_DURATION = 600

XhmikosR's avatar
XhmikosR committed
326
327
328
  Carousel.DEFAULTS = {
    interval: 5000,
    pause: 'hover',
Heinrich Fenkart's avatar
grunt    
Heinrich Fenkart committed
329
330
    wrap: true,
    keyboard: true
XhmikosR's avatar
XhmikosR committed
331
  }
332

XhmikosR's avatar
XhmikosR committed
333
  Carousel.prototype.keydown = function (e) {
Heinrich Fenkart's avatar
grunt    
Heinrich Fenkart committed
334
    if (/input|textarea/i.test(e.target.tagName)) return
XhmikosR's avatar
XhmikosR committed
335
336
337
338
    switch (e.which) {
      case 37: this.prev(); break
      case 39: this.next(); break
      default: return
Mark Otto's avatar
Mark Otto committed
339
340
    }

XhmikosR's avatar
XhmikosR committed
341
342
    e.preventDefault()
  }
343

XhmikosR's avatar
XhmikosR committed
344
345
  Carousel.prototype.cycle = function (e) {
    e || (this.paused = false)
fat's avatar
fat committed
346

XhmikosR's avatar
XhmikosR committed
347
    this.interval && clearInterval(this.interval)
348

XhmikosR's avatar
XhmikosR committed
349
350
351
    this.options.interval
      && !this.paused
      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
352

XhmikosR's avatar
XhmikosR committed
353
354
    return this
  }
355

XhmikosR's avatar
XhmikosR committed
356
  Carousel.prototype.getItemIndex = function (item) {
Mark Otto's avatar
grunt    
Mark Otto committed
357
    this.$items = item.parent().children('.carousel-item')
XhmikosR's avatar
XhmikosR committed
358
359
    return this.$items.index(item || this.$active)
  }
360

XhmikosR's avatar
XhmikosR committed
361
362
  Carousel.prototype.getItemForDirection = function (direction, active) {
    var activeIndex = this.getItemIndex(active)
Heinrich Fenkart's avatar
grunt    
Heinrich Fenkart committed
363
364
365
366
    var willWrap = (direction == 'prev' && activeIndex === 0)
                || (direction == 'next' && activeIndex == (this.$items.length - 1))
    if (willWrap && !this.options.wrap) return active
    var delta = direction == 'prev' ? -1 : 1
XhmikosR's avatar
XhmikosR committed
367
368
369
370
    var itemIndex = (activeIndex + delta) % this.$items.length
    return this.$items.eq(itemIndex)
  }

XhmikosR's avatar
XhmikosR committed
371
372
  Carousel.prototype.to = function (pos) {
    var that        = this
Mark Otto's avatar
grunt    
Mark Otto committed
373
    var activeIndex = this.getItemIndex(this.$active = this.$element.find('.carousel-item.active'))
374

XhmikosR's avatar
XhmikosR committed
375
    if (pos > (this.$items.length - 1) || pos < 0) return
fat's avatar
fat committed
376

XhmikosR's avatar
XhmikosR committed
377
378
    if (this.sliding)       return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
    if (activeIndex == pos) return this.pause().cycle()
379

XhmikosR's avatar
XhmikosR committed
380
    return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
XhmikosR's avatar
XhmikosR committed
381
  }
fat's avatar
fat committed
382

XhmikosR's avatar
XhmikosR committed
383
384
385
386
387
388
  Carousel.prototype.pause = function (e) {
    e || (this.paused = true)

    if (this.$element.find('.next, .prev').length && $.support.transition) {
      this.$element.trigger($.support.transition.end)
      this.cycle(true)
389
390
    }

XhmikosR's avatar
XhmikosR committed
391
    this.interval = clearInterval(this.interval)
392

XhmikosR's avatar
XhmikosR committed
393
394
    return this
  }
395

XhmikosR's avatar
XhmikosR committed
396
397
398
399
  Carousel.prototype.next = function () {
    if (this.sliding) return
    return this.slide('next')
  }
400

XhmikosR's avatar
XhmikosR committed
401
402
403
404
  Carousel.prototype.prev = function () {
    if (this.sliding) return
    return this.slide('prev')
  }
405

XhmikosR's avatar
XhmikosR committed
406
  Carousel.prototype.slide = function (type, next) {
Mark Otto's avatar
grunt    
Mark Otto committed
407
    var $active   = this.$element.find('.carousel-item.active')
XhmikosR's avatar
XhmikosR committed
408
    var $next     = next || this.getItemForDirection(type, $active)
XhmikosR's avatar
XhmikosR committed
409
410
411
    var isCycling = this.interval
    var direction = type == 'next' ? 'left' : 'right'
    var that      = this
Jacob Thornton's avatar
Jacob Thornton committed
412

XhmikosR's avatar
XhmikosR committed
413
    if ($next.hasClass('active')) return (this.sliding = false)
414

XhmikosR's avatar
XhmikosR committed
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
    var relatedTarget = $next[0]
    var slideEvent = $.Event('slide.bs.carousel', {
      relatedTarget: relatedTarget,
      direction: direction
    })
    this.$element.trigger(slideEvent)
    if (slideEvent.isDefaultPrevented()) return

    this.sliding = true

    isCycling && this.pause()

    if (this.$indicators.length) {
      this.$indicators.find('.active').removeClass('active')
      var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
      $nextIndicator && $nextIndicator.addClass('active')
    }

    var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
    if ($.support.transition && this.$element.hasClass('slide')) {
      $next.addClass(type)
      $next[0].offsetWidth // force reflow
      $active.addClass(direction)
      $next.addClass(direction)
      $active
        .one('bsTransitionEnd', function () {
          $next.removeClass([type, direction].join(' ')).addClass('active')
          $active.removeClass(['active', direction].join(' '))
          that.sliding = false
          setTimeout(function () {
            that.$element.trigger(slidEvent)
          }, 0)
        })
448
        .emulateTransitionEnd(Carousel.TRANSITION_DURATION)
XhmikosR's avatar
XhmikosR committed
449
450
451
452
453
454
    } else {
      $active.removeClass('active')
      $next.addClass('active')
      this.sliding = false
      this.$element.trigger(slidEvent)
    }
fat's avatar
fat committed
455

XhmikosR's avatar
XhmikosR committed
456
    isCycling && this.cycle()
457

XhmikosR's avatar
XhmikosR committed
458
459
    return this
  }
460
461


XhmikosR's avatar
XhmikosR committed
462
463
  // CAROUSEL PLUGIN DEFINITION
  // ==========================
Chris Rebert's avatar
Chris Rebert committed
464

XhmikosR's avatar
XhmikosR committed
465
466
467
468
469
470
471
472
473
474
475
476
477
  function Plugin(option) {
    return this.each(function () {
      var $this   = $(this)
      var data    = $this.data('bs.carousel')
      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
      var action  = typeof option == 'string' ? option : options.slide

      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
      if (typeof option == 'number') data.to(option)
      else if (action) data[action]()
      else if (options.interval) data.pause().cycle()
    })
  }
478

XhmikosR's avatar
XhmikosR committed
479
  var old = $.fn.carousel
Mark Otto's avatar
Mark Otto committed
480

XhmikosR's avatar
XhmikosR committed
481
482
  $.fn.carousel             = Plugin
  $.fn.carousel.Constructor = Carousel
483
484


XhmikosR's avatar
XhmikosR committed
485
486
  // CAROUSEL NO CONFLICT
  // ====================
487

XhmikosR's avatar
XhmikosR committed
488
489
490
491
  $.fn.carousel.noConflict = function () {
    $.fn.carousel = old
    return this
  }
492

fat's avatar
fat committed
493

XhmikosR's avatar
XhmikosR committed
494
495
  // CAROUSEL DATA-API
  // =================
496

Heinrich Fenkart's avatar
grunt    
Heinrich Fenkart committed
497
  var clickHandler = function (e) {
XhmikosR's avatar
XhmikosR committed
498
499
500
501
502
503
504
    var href
    var $this   = $(this)
    var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
    if (!$target.hasClass('carousel')) return
    var options = $.extend({}, $target.data(), $this.data())
    var slideIndex = $this.attr('data-slide-to')
    if (slideIndex) options.interval = false
505

XhmikosR's avatar
XhmikosR committed
506
    Plugin.call($target, options)
507

XhmikosR's avatar
XhmikosR committed
508
509
    if (slideIndex) {
      $target.data('bs.carousel').to(slideIndex)
510
511
    }

XhmikosR's avatar
XhmikosR committed
512
    e.preventDefault()
Heinrich Fenkart's avatar
grunt    
Heinrich Fenkart committed
513
514
515
516
517
  }

  $(document)
    .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
    .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
518

XhmikosR's avatar
XhmikosR committed
519
520
521
522
  $(window).on('load', function () {
    $('[data-ride="carousel"]').each(function () {
      var $carousel = $(this)
      Plugin.call($carousel, $carousel.data())
fat's avatar
fat committed
523
524
525
    })
  })

XhmikosR's avatar
XhmikosR committed
526
}(jQuery);
527

528
/* ========================================================================
Mark Otto's avatar
Mark Otto committed
529
 * Bootstrap: collapse.js v3.3.1
Mark Otto's avatar
Mark Otto committed
530
 * http://getbootstrap.com/javascript/#collapse
531
 * ========================================================================
532
 * Copyright 2011-2014 Twitter, Inc.
533
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
534
 * ======================================================================== */
535
536


XhmikosR's avatar
XhmikosR committed
537
538
+function ($) {
  'use strict';
539

XhmikosR's avatar
XhmikosR committed
540
541
  // COLLAPSE PUBLIC CLASS DEFINITION
  // ================================
Mark Otto's avatar
grunt    
Mark Otto committed
542

XhmikosR's avatar
XhmikosR committed
543
544
545
  var Collapse = function (element, options) {
    this.$element      = $(element)
    this.options       = $.extend({}, Collapse.DEFAULTS, options)
Heinrich Fenkart's avatar
grunt    
Heinrich Fenkart committed
546
    this.$trigger      = $(this.options.trigger).filter('[href="#' + element.id + '"], [data-target="#' + element.id + '"]')
XhmikosR's avatar
XhmikosR committed
547
    this.transitioning = null
548

Heinrich Fenkart's avatar
grunt    
Heinrich Fenkart committed
549
550
551
552
553
554
    if (this.options.parent) {
      this.$parent = this.getParent()
    } else {
      this.addAriaAndCollapsedClass(this.$element, this.$trigger)
    }

XhmikosR's avatar
XhmikosR committed
555
556
    if (this.options.toggle) this.toggle()
  }
557

Mark Otto's avatar
Mark Otto committed
558
  Collapse.VERSION  = '3.3.1'
559

560
561
  Collapse.TRANSITION_DURATION = 350

XhmikosR's avatar
XhmikosR committed
562
  Collapse.DEFAULTS = {
Heinrich Fenkart's avatar
grunt    
Heinrich Fenkart committed
563
564
    toggle: true,
    trigger: '[data-toggle="collapse"]'
XhmikosR's avatar
XhmikosR committed
565
  }
fat's avatar
fat committed
566

XhmikosR's avatar
XhmikosR committed
567
568
569
570
  Collapse.prototype.dimension = function () {
    var hasWidth = this.$element.hasClass('width')
    return hasWidth ? 'width' : 'height'
  }
571

XhmikosR's avatar
XhmikosR committed
572
573
  Collapse.prototype.show = function () {
    if (this.transitioning || this.$element.hasClass('in')) return
574

Heinrich Fenkart's avatar
grunt    
Heinrich Fenkart committed
575
    var activesData
Heinrich Fenkart's avatar
grunt    
Heinrich Fenkart committed
576
    var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
Heinrich Fenkart's avatar
grunt    
Heinrich Fenkart committed
577
578
579
580
581
582

    if (actives && actives.length) {
      activesData = actives.data('bs.collapse')
      if (activesData && activesData.transitioning) return
    }

XhmikosR's avatar
XhmikosR committed
583
584
585
    var startEvent = $.Event('show.bs.collapse')
    this.$element.trigger(startEvent)
    if (startEvent.isDefaultPrevented()) return
586

XhmikosR's avatar
XhmikosR committed
587
588
    if (actives && actives.length) {
      Plugin.call(actives, 'hide')
Heinrich Fenkart's avatar
grunt    
Heinrich Fenkart committed
589
      activesData || actives.data('bs.collapse', null)
XhmikosR's avatar
XhmikosR committed
590
    }
591

XhmikosR's avatar
XhmikosR committed
592
    var dimension = this.dimension()
593

XhmikosR's avatar
XhmikosR committed
594
595
596
    this.$element
      .removeClass('collapse')
      .addClass('collapsing')[dimension](0)
Heinrich Fenkart's avatar
Heinrich Fenkart committed
597
      .attr('aria-expanded', true)
598

Heinrich Fenkart's avatar
grunt    
Heinrich Fenkart committed
599
600
601
602
    this.$trigger
      .removeClass('collapsed')
      .attr('aria-expanded', true)

XhmikosR's avatar
XhmikosR committed
603
    this.transitioning = 1
604

XhmikosR's avatar
XhmikosR committed
605
606
607
608
609
    var complete = function () {
      this.$element
        .removeClass('collapsing')
        .addClass('collapse in')[dimension]('')
      this.transitioning = 0
Chris Rebert's avatar
Chris Rebert committed
610
      this.$element
XhmikosR's avatar
XhmikosR committed
611
        .trigger('shown.bs.collapse')
Chris Rebert's avatar
Chris Rebert committed
612
    }
613

XhmikosR's avatar
XhmikosR committed
614
    if (!$.support.transition) return complete.call(this)
fat's avatar
fat committed
615

XhmikosR's avatar
XhmikosR committed
616
    var scrollSize = $.camelCase(['scroll', dimension].join('-'))
fat's avatar
fat committed
617

XhmikosR's avatar
XhmikosR committed
618
619
    this.$element
      .one('bsTransitionEnd', $.proxy(complete, this))
620
      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
XhmikosR's avatar
XhmikosR committed
621
  }
622

XhmikosR's avatar
XhmikosR committed
623
624
  Collapse.prototype.hide = function () {
    if (this.transitioning || !this.$element.hasClass('in')) return
625

XhmikosR's avatar
XhmikosR committed
626
627
628
    var startEvent = $.Event('hide.bs.collapse')
    this.$element.trigger(startEvent)
    if (startEvent.isDefaultPrevented()) return
629

XhmikosR's avatar
XhmikosR committed
630
    var dimension = this.dimension()
631

XhmikosR's avatar
XhmikosR committed
632
633
634
635
    this.$element[dimension](this.$element[dimension]())[0].offsetHeight

    this.$element
      .addClass('collapsing')
Mark Otto's avatar
grunt    
Mark Otto committed
636
      .removeClass('collapse in')
Heinrich Fenkart's avatar
Heinrich Fenkart committed
637
      .attr('aria-expanded', false)
638

Heinrich Fenkart's avatar
grunt    
Heinrich Fenkart committed
639
640
641
642
    this.$trigger
      .addClass('collapsed')
      .attr('aria-expanded', false)

XhmikosR's avatar
XhmikosR committed
643
    this.transitioning = 1
644

XhmikosR's avatar
XhmikosR committed
645
646
    var complete = function () {
      this.transitioning = 0
Chris Rebert's avatar
Chris Rebert committed
647
      this.$element
XhmikosR's avatar
XhmikosR committed
648
649
        .removeClass('collapsing')
        .addClass('collapse')
Heinrich Fenkart's avatar
Heinrich Fenkart committed
650
        .trigger('hidden.bs.collapse')
Chris Rebert's avatar
Chris Rebert committed
651
    }
652

XhmikosR's avatar
XhmikosR committed
653
    if (!$.support.transition) return complete.call(this)
654

XhmikosR's avatar
XhmikosR committed
655
656
657
    this.$element
      [dimension](0)
      .one('bsTransitionEnd', $.proxy(complete, this))
658
      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)
XhmikosR's avatar
XhmikosR committed
659
  }
660

XhmikosR's avatar
XhmikosR committed
661
662
663
  Collapse.prototype.toggle = function () {
    this[this.$element.hasClass('in') ? 'hide' : 'show']()
  }
664

Heinrich Fenkart's avatar
grunt    
Heinrich Fenkart committed
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
  Collapse.prototype.getParent = function () {
    return $(this.options.parent)
      .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
      .each($.proxy(function (i, element) {
        var $element = $(element)
        this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
      }, this))
      .end()
  }

  Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
    var isOpen = $element.hasClass('in')

    $element.attr('aria-expanded', isOpen)
    $trigger
      .toggleClass('collapsed', !isOpen)
      .attr('aria-expanded', isOpen)
  }

  function getTargetFromTrigger($trigger) {
    var href
    var target = $trigger.attr('data-target')
      || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7

    return $(target)
  }

692

XhmikosR's avatar
XhmikosR committed
693
694
  // COLLAPSE PLUGIN DEFINITION
  // ==========================
695

XhmikosR's avatar
XhmikosR committed
696
697
698
699
700
  function Plugin(option) {
    return this.each(function () {
      var $this   = $(this)
      var data    = $this.data('bs.collapse')
      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
Mark Otto's avatar
Mark Otto committed
701

Mark Otto's avatar
grunt    
Mark Otto committed
702
      if (!data && options.toggle && option == 'show') options.toggle = false
XhmikosR's avatar
XhmikosR committed
703
704
705
706
      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
      if (typeof option == 'string') data[option]()
    })
  }
707

XhmikosR's avatar
XhmikosR committed
708
  var old = $.fn.collapse
709

XhmikosR's avatar
XhmikosR committed
710
711
  $.fn.collapse             = Plugin
  $.fn.collapse.Constructor = Collapse
712

713

XhmikosR's avatar
XhmikosR committed
714
715
  // COLLAPSE NO CONFLICT
  // ====================
716

XhmikosR's avatar
XhmikosR committed
717
718
719
720
  $.fn.collapse.noConflict = function () {
    $.fn.collapse = old
    return this
  }
721

722

XhmikosR's avatar
XhmikosR committed
723
724
725
726
727
  // COLLAPSE DATA-API
  // =================

  $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
    var $this   = $(this)
Heinrich Fenkart's avatar
grunt    
Heinrich Fenkart committed
728
729
730
731

    if (!$this.attr('data-target')) e.preventDefault()

    var $target = getTargetFromTrigger($this)
XhmikosR's avatar
XhmikosR committed
732
    var data    = $target.data('bs.collapse')
Heinrich Fenkart's avatar
grunt    
Heinrich Fenkart committed
733
    var option  = data ? 'toggle' : $.extend({}, $this.data(), { trigger: this })
fat's avatar
fat committed
734

XhmikosR's avatar
XhmikosR committed
735
    Plugin.call($target, option)
736
737
  })

XhmikosR's avatar
XhmikosR committed
738
}(jQuery);
739

740
/* ========================================================================
Mark Otto's avatar
Mark Otto committed
741
 * Bootstrap: dropdown.js v3.3.1
Mark Otto's avatar
Mark Otto committed
742
 * http://getbootstrap.com/javascript/#dropdowns
743
 * ========================================================================
744
 * Copyright 2011-2014 Twitter, Inc.
745
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
746
 * ======================================================================== */
747
748


XhmikosR's avatar
XhmikosR committed
749
750
+function ($) {
  'use strict';
Chris Rebert's avatar
Chris Rebert committed
751

XhmikosR's avatar
XhmikosR committed
752
753
  // DROPDOWN CLASS DEFINITION
  // =========================
Mark Otto's avatar
grunt    
Mark Otto committed
754

XhmikosR's avatar
XhmikosR committed
755
756
757
758
759
  var backdrop = '.dropdown-backdrop'
  var toggle   = '[data-toggle="dropdown"]'
  var Dropdown = function (element) {
    $(element).on('click.bs.dropdown', this.toggle)
  }
760

Mark Otto's avatar
Mark Otto committed
761
  Dropdown.VERSION = '3.3.1'
Mark Otto's avatar
grunt    
Mark Otto committed
762

XhmikosR's avatar
XhmikosR committed
763
764
  Dropdown.prototype.toggle = function (e) {
    var $this = $(this)
765

XhmikosR's avatar
XhmikosR committed
766
    if ($this.is('.disabled, :disabled')) return
767

XhmikosR's avatar
XhmikosR committed
768
769
    var $parent  = getParent($this)
    var isActive = $parent.hasClass('open')
770

XhmikosR's avatar
XhmikosR committed
771
    clearMenus()
fat's avatar
fat committed
772

XhmikosR's avatar
XhmikosR committed
773
774
775
776
777
    if (!isActive) {
      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
        // if mobile we use a backdrop because click events don't delegate
        $('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus)
      }
778

XhmikosR's avatar
XhmikosR committed
779
780
      var relatedTarget = { relatedTarget: this }
      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
781

XhmikosR's avatar
XhmikosR committed
782
      if (e.isDefaultPrevented()) return
783

784
785
786
      $this
        .trigger('focus')
        .attr('aria-expanded', 'true')
Mark Otto's avatar
Mark Otto committed
787

XhmikosR's avatar
XhmikosR committed
788
789
790
      $parent
        .toggleClass('open')
        .trigger('shown.bs.dropdown', relatedTarget)
fat's avatar
rebuild    
fat committed
791
    }
792

XhmikosR's avatar
XhmikosR committed
793
794
    return false
  }
795

XhmikosR's avatar
XhmikosR committed
796
  Dropdown.prototype.keydown = function (e) {
Mark Otto's avatar
grunt    
Mark Otto committed
797
    if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
798

XhmikosR's avatar
XhmikosR committed
799
    var $this = $(this)
800

XhmikosR's avatar
XhmikosR committed
801
802
    e.preventDefault()
    e.stopPropagation()
803

XhmikosR's avatar
XhmikosR committed
804
    if ($this.is('.disabled, :disabled')) return
805

XhmikosR's avatar
XhmikosR committed
806
807
    var $parent  = getParent($this)
    var isActive = $parent.hasClass('open')
808

Mark Otto's avatar
grunt    
Mark Otto committed
809
    if ((!isActive && e.which != 27) || (isActive && e.which == 27)) {
XhmikosR's avatar
XhmikosR committed
810
811
812
      if (e.which == 27) $parent.find(toggle).trigger('focus')
      return $this.trigger('click')
    }
813

XhmikosR's avatar
XhmikosR committed
814
815
    var desc = ' li:not(.divider):visible a'
    var $items = $parent.find('[role="menu"]' + desc + ', [role="listbox"]' + desc)
816

XhmikosR's avatar
XhmikosR committed
817
    if (!$items.length) return
818

Heinrich Fenkart's avatar
grunt    
Heinrich Fenkart committed
819
    var index = $items.index(e.target)
820

Mark Otto's avatar
grunt    
Mark Otto committed
821
822
    if (e.which == 38 && index > 0)                 index--                        // up
    if (e.which == 40 && index < $items.length - 1) index++                        // down
XhmikosR's avatar
XhmikosR committed
823
    if (!~index)                                      index = 0
824

XhmikosR's avatar
XhmikosR committed
825
826
    $items.eq(index).trigger('focus')
  }
Chris Rebert's avatar
Chris Rebert committed
827

XhmikosR's avatar
XhmikosR committed
828
829
830
831
  function clearMenus(e) {
    if (e && e.which === 3) return
    $(backdrop).remove()
    $(toggle).each(function () {
832
833
      var $this         = $(this)
      var $parent       = getParent($this)
XhmikosR's avatar
XhmikosR committed
834
      var relatedTarget = { relatedTarget: this }
835

XhmikosR's avatar
XhmikosR committed
836
      if (!$parent.hasClass('open')) return
837

XhmikosR's avatar
XhmikosR committed
838
      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
839

XhmikosR's avatar
XhmikosR committed
840
      if (e.isDefaultPrevented()) return
841
842

      $this.attr('aria-expanded', 'false')
XhmikosR's avatar
XhmikosR committed
843
844
845
      $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)
    })
  }
846

XhmikosR's avatar
XhmikosR committed
847
848
  function getParent($this) {
    var selector = $this.attr('data-target')
849

XhmikosR's avatar
XhmikosR committed
850
851
852
    if (!selector) {
      selector = $this.attr('href')
      selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
853
854
    }

XhmikosR's avatar
XhmikosR committed
855
    var $parent = selector && $(selector)
856

XhmikosR's avatar
XhmikosR committed
857
858
    return $parent && $parent.length ? $parent : $this.parent()
  }
859
860


XhmikosR's avatar
XhmikosR committed
861
862
  // DROPDOWN PLUGIN DEFINITION
  // ==========================
863

XhmikosR's avatar
XhmikosR committed
864
865
866
867
  function Plugin(option) {
    return this.each(function () {
      var $this = $(this)
      var data  = $this.data('bs.dropdown')
868

XhmikosR's avatar
XhmikosR committed
869
870
871
872
      if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
      if (typeof option == 'string') data[option].call($this)
    })
  }
Mark Otto's avatar
Mark Otto committed
873

XhmikosR's avatar
XhmikosR committed
874
  var old = $.fn.dropdown
875

XhmikosR's avatar
XhmikosR committed
876
877
  $.fn.dropdown             = Plugin
  $.fn.dropdown.Constructor = Dropdown
878

879

XhmikosR's avatar
XhmikosR committed
880
881
  // DROPDOWN NO CONFLICT
  // ====================
882

XhmikosR's avatar
XhmikosR committed
883
884
885
886
  $.fn.dropdown.noConflict = function () {
    $.fn.dropdown = old
    return this
  }
887

888

XhmikosR's avatar
XhmikosR committed
889
890
891
892
893
894
895
  // APPLY TO STANDARD DROPDOWN ELEMENTS
  // ===================================

  $(document)
    .on('click.bs.dropdown.data-api', clearMenus)
    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
    .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
Heinrich Fenkart's avatar
grunt    
Heinrich Fenkart committed
896
897
898
    .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
    .on('keydown.bs.dropdown.data-api', '[role="menu"]', Dropdown.prototype.keydown)
    .on('keydown.bs.dropdown.data-api', '[role="listbox"]', Dropdown.prototype.keydown)
899

XhmikosR's avatar
XhmikosR committed
900
}(jQuery);
901

902
/* ========================================================================
Mark Otto's avatar
Mark Otto committed
903
 * Bootstrap: modal.js v3.3.1
Mark Otto's avatar
Mark Otto committed
904
 * http://getbootstrap.com/javascript/#modals
905
 * ========================================================================
906
 * Copyright 2011-2014 Twitter, Inc.
907
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
908
 * ======================================================================== */
909
910


XhmikosR's avatar
XhmikosR committed
911
912
+function ($) {
  'use strict';
913

XhmikosR's avatar
XhmikosR committed
914
915
  // MODAL CLASS DEFINITION
  // ======================
916

XhmikosR's avatar
XhmikosR committed
917
918
919
920
921
922
923
  var Modal = function (element, options) {
    this.options        = options
    this.$body          = $(document.body)
    this.$element       = $(element)
    this.$backdrop      =
    this.isShown        = null
    this.scrollbarWidth = 0
924

XhmikosR's avatar
XhmikosR committed
925
926
927
928
929
930
    if (this.options.remote) {
      this.$element
        .find('.modal-content')
        .load(this.options.remote, $.proxy(function () {
          this.$element.trigger('loaded.bs.modal')
        }, this))
931
    }
XhmikosR's avatar
XhmikosR committed
932
  }
933

Mark Otto's avatar
Mark Otto committed
934
  Modal.VERSION  = '3.3.1'
Mark Otto's avatar
grunt    
Mark Otto committed
935

936
937
938
  Modal.TRANSITION_DURATION = 300
  Modal.BACKDROP_TRANSITION_DURATION = 150

XhmikosR's avatar
XhmikosR committed
939
940
941
942
943
  Modal.DEFAULTS = {
    backdrop: true,
    keyboard: true,
    show: true
  }
944

XhmikosR's avatar
XhmikosR committed
945
946
947
  Modal.prototype.toggle = function (_relatedTarget) {
    return this.isShown ? this.hide() : this.show(_relatedTarget)
  }
948

XhmikosR's avatar
XhmikosR committed
949
950
951
  Modal.prototype.show = function (_relatedTarget) {
    var that = this
    var e    = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
952

XhmikosR's avatar
XhmikosR committed
953
    this.$element.trigger(e)
954

XhmikosR's avatar
XhmikosR committed
955
    if (this.isShown || e.isDefaultPrevented()) return
956

XhmikosR's avatar
XhmikosR committed
957
    this.isShown = true
fat's avatar
build    
fat committed
958

XhmikosR's avatar
XhmikosR committed
959
    this.checkScrollbar()
Heinrich Fenkart's avatar
grunt    
Heinrich Fenkart committed
960
    this.setScrollbar()
XhmikosR's avatar
XhmikosR committed
961
    this.$body.addClass('modal-open')
962

XhmikosR's avatar
XhmikosR committed
963
    this.escape()
Heinrich Fenkart's avatar
grunt    
Heinrich Fenkart committed
964
    this.resize()
fat's avatar
rebuild    
fat committed
965

XhmikosR's avatar
XhmikosR committed
966
    this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
967

XhmikosR's avatar
XhmikosR committed
968
969
    this.backdrop(function () {
      var transition = $.support.transition && that.$element.hasClass('fade')
970

XhmikosR's avatar
XhmikosR committed
971
972
973
      if (!that.$element.parent().length) {
        that.$element.appendTo(that.$body) // don't move modals dom position
      }
974

XhmikosR's avatar
XhmikosR committed
975
976
977
      that.$element
        .show()
        .scrollTop(0)
Jacob Thornton's avatar
Jacob Thornton committed
978

Heinrich Fenkart's avatar
grunt    
Heinrich Fenkart committed
979
980
      if (that.options.backdrop) that.adjustBackdrop()
      that.adjustDialog()
Heinrich Fenkart's avatar
grunt    
Heinrich Fenkart committed
981

XhmikosR's avatar
XhmikosR committed
982
983
984
      if (transition) {
        that.$element[0].offsetWidth // force reflow
      }
985

XhmikosR's avatar
XhmikosR committed
986
987
988
      that.$element
        .addClass('in')
        .attr('aria-hidden', false)
989

XhmikosR's avatar
XhmikosR committed
990
      that.enforceFocus()
991

XhmikosR's avatar
XhmikosR committed
992
      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
993

XhmikosR's avatar
XhmikosR committed
994
995
996
997
998
      transition ?
        that.$element.find('.modal-dialog') // wait for modal to slide in
          .one('bsTransitionEnd', function () {
            that.$element.trigger('focus').trigger(e)
          })
999
          .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
XhmikosR's avatar
XhmikosR committed
1000
        that.$element.trigger('focus').trigger(e)
For faster browsing, not all history is shown. View entire blame