|
/*! |
|
* Bootstrap v3.0.3 (http://getbootstrap.com) |
|
* Copyright 2013 Twitter, Inc. |
|
* Licensed under http://www.apache.org/licenses/LICENSE-2.0 |
|
*/ |
|
|
|
if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery") } |
|
|
|
/* ======================================================================== |
|
* Bootstrap: transition.js v3.0.3 |
|
* http://getbootstrap.com/javascript/#transitions |
|
* ======================================================================== |
|
* Copyright 2013 Twitter, Inc. |
|
* |
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
* you may not use this file except in compliance with the License. |
|
* You may obtain a copy of the License at |
|
* |
|
* http://www.apache.org/licenses/LICENSE-2.0 |
|
* |
|
* Unless required by applicable law or agreed to in writing, software |
|
* distributed under the License is distributed on an "AS IS" BASIS, |
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
* See the License for the specific language governing permissions and |
|
* limitations under the License. |
|
* ======================================================================== */ |
|
|
|
|
|
+function ($) { "use strict"; |
|
|
|
// CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) |
|
// ============================================================ |
|
|
|
function transitionEnd() { |
|
var el = document.createElement('bootstrap') |
|
|
|
var transEndEventNames = { |
|
'WebkitTransition' : 'webkitTransitionEnd' |
|
, 'MozTransition' : 'transitionend' |
|
, 'OTransition' : 'oTransitionEnd otransitionend' |
|
, 'transition' : 'transitionend' |
|
} |
|
|
|
for (var name in transEndEventNames) { |
|
if (el.style[name] !== undefined) { |
|
return { end: transEndEventNames[name] } |
|
} |
|
} |
|
} |
|
|
|
// http://blog.alexmaccaw.com/css-transitions |
|
$.fn.emulateTransitionEnd = function (duration) { |
|
var called = false, $el = this |
|
$(this).one($.support.transition.end, function () { called = true }) |
|
var callback = function () { if (!called) $($el).trigger($.support.transition.end) } |
|
setTimeout(callback, duration) |
|
return this |
|
} |
|
|
|
$(function () { |
|
$.support.transition = transitionEnd() |
|
}) |
|
|
|
}(jQuery); |
|
|
|
/* ======================================================================== |
|
* Bootstrap: alert.js v3.0.3 |
|
* http://getbootstrap.com/javascript/#alerts |
|
* ======================================================================== |
|
* Copyright 2013 Twitter, Inc. |
|
* |
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
* you may not use this file except in compliance with the License. |
|
* You may obtain a copy of the License at |
|
* |
|
* http://www.apache.org/licenses/LICENSE-2.0 |
|
* |
|
* Unless required by applicable law or agreed to in writing, software |
|
* distributed under the License is distributed on an "AS IS" BASIS, |
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
* See the License for the specific language governing permissions and |
|
* limitations under the License. |
|
* ======================================================================== */ |
|
|
|
|
|
+function ($) { "use strict"; |
|
|
|
// ALERT CLASS DEFINITION |
|
// ====================== |
|
|
|
var dismiss = '[data-dismiss="alert"]' |
|
var Alert = function (el) { |
|
$(el).on('click', dismiss, this.close) |
|
} |
|
|
|
Alert.prototype.close = function (e) { |
|
var $this = $(this) |
|
var selector = $this.attr('data-target') |
|
|
|
if (!selector) { |
|
selector = $this.attr('href') |
|
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 |
|
} |
|
|
|
var $parent = $(selector) |
|
|
|
if (e) e.preventDefault() |
|
|
|
if (!$parent.length) { |
|
$parent = $this.hasClass('alert') ? $this : $this.parent() |
|
} |
|
|
|
$parent.trigger(e = $.Event('close.bs.alert')) |
|
|
|
if (e.isDefaultPrevented()) return |
|
|
|
$parent.removeClass('in') |
|
|
|
function removeElement() { |
|
$parent.trigger('closed.bs.alert').remove() |
|
} |
|
|
|
$.support.transition && $parent.hasClass('fade') ? |
|
$parent |
|
.one($.support.transition.end, removeElement) |
|
.emulateTransitionEnd(150) : |
|
removeElement() |
|
} |
|
|
|
|
|
// ALERT PLUGIN DEFINITION |
|
// ======================= |
|
|
|
var old = $.fn.alert |
|
|
|
$.fn.alert = function (option) { |
|
return this.each(function () { |
|
var $this = $(this) |
|
var data = $this.data('bs.alert') |
|
|
|
if (!data) $this.data('bs.alert', (data = new Alert(this))) |
|
if (typeof option == 'string') data[option].call($this) |
|
}) |
|
} |
|
|
|
$.fn.alert.Constructor = Alert |
|
|
|
|
|
// ALERT NO CONFLICT |
|
// ================= |
|
|
|
$.fn.alert.noConflict = function () { |
|
$.fn.alert = old |
|
return this |
|
} |
|
|
|
|
|
// ALERT DATA-API |
|
// ============== |
|
|
|
$(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) |
|
|
|
}(jQuery); |
|
|
|
/* ======================================================================== |
|
* Bootstrap: button.js v3.0.3 |
|
* http://getbootstrap.com/javascript/#buttons |
|
* ======================================================================== |
|
* Copyright 2013 Twitter, Inc. |
|
* |
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
* you may not use this file except in compliance with the License. |
|
* You may obtain a copy of the License at |
|
* |
|
* http://www.apache.org/licenses/LICENSE-2.0 |
|
* |
|
* Unless required by applicable law or agreed to in writing, software |
|
* distributed under the License is distributed on an "AS IS" BASIS, |
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
* See the License for the specific language governing permissions and |
|
* limitations under the License. |
|
* ======================================================================== */ |
|
|
|
|
|
+function ($) { "use strict"; |
|
|
|
// BUTTON PUBLIC CLASS DEFINITION |
|
// ============================== |
|
|
|
var Button = function (element, options) { |
|
this.$element = $(element) |
|
this.options = $.extend({}, Button.DEFAULTS, options) |
|
} |
|
|
|
Button.DEFAULTS = { |
|
loadingText: 'loading...' |
|
} |
|
|
|
Button.prototype.setState = function (state) { |
|
var d = 'disabled' |
|
var $el = this.$element |
|
var val = $el.is('input') ? 'val' : 'html' |
|
var data = $el.data() |
|
|
|
state = state + 'Text' |
|
|
|
if (!data.resetText) $el.data('resetText', $el[val]()) |
|
|
|
$el[val](data[state] || this.options[state]) |
|
|
|
// push to event loop to allow forms to submit |
|
setTimeout(function () { |
|
state == 'loadingText' ? |
|
$el.addClass(d).attr(d, d) : |
|
$el.removeClass(d).removeAttr(d); |
|
}, 0) |
|
} |
|
|
|
Button.prototype.toggle = function () { |
|
var $parent = this.$element.closest('[data-toggle="buttons"]') |
|
var changed = true |
|
|
|
if ($parent.length) { |
|
var $input = this.$element.find('input') |
|
if ($input.prop('type') === 'radio') { |
|
// see if clicking on current one |
|
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') |
|
} |
|
|
|
if (changed) this.$element.toggleClass('active') |
|
} |
|
|
|
|
|
// BUTTON PLUGIN DEFINITION |
|
// ======================== |
|
|
|
var old = $.fn.button |
|
|
|
$.fn.button = function (option) { |
|
return this.each(function () { |
|
var $this = $(this) |
|
var data = $this.data('bs.button') |
|
var options = typeof option == 'object' && option |
|
|
|
if (!data) $this.data('bs.button', (data = new Button(this, options))) |
|
|
|
if (option == 'toggle') data.toggle() |
|
else if (option) data.setState(option) |
|
}) |
|
} |
|
|
|
$.fn.button.Constructor = Button |
|
|
|
|
|
// BUTTON NO CONFLICT |
|
// ================== |
|
|
|
$.fn.button.noConflict = function () { |
|
$.fn.button = old |
|
return this |
|
} |
|
|
|
|
|
// BUTTON DATA-API |
|
// =============== |
|
|
|
$(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) { |
|
var $btn = $(e.target) |
|
if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') |
|
$btn.button('toggle') |
|
e.preventDefault() |
|
}) |
|
|
|
}(jQuery); |
|
|
|
/* ======================================================================== |
|
* Bootstrap: carousel.js v3.0.3 |
|
* http://getbootstrap.com/javascript/#carousel |
|
* ======================================================================== |
|
* Copyright 2013 Twitter, Inc. |
|
* |
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
* you may not use this file except in compliance with the License. |
|
* You may obtain a copy of the License at |
|
* |
|
* http://www.apache.org/licenses/LICENSE-2.0 |
|
* |
|
* Unless required by applicable law or agreed to in writing, software |
|
* distributed under the License is distributed on an "AS IS" BASIS, |
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
* See the License for the specific language governing permissions and |
|
* limitations under the License. |
|
* ======================================================================== */ |
|
|
|
|
|
+function ($) { "use strict"; |
|
|
|
// CAROUSEL CLASS DEFINITION |
|
// ========================= |
|
|
|
var Carousel = function (element, options) { |
|
this.$element = $(element) |
|
this.$indicators = this.$element.find('.carousel-indicators') |
|
this.options = options |
|
this.paused = |
|
this.sliding = |
|
this.interval = |
|
this.$active = |
|
this.$items = null |
|
|
|
this.options.pause == 'hover' && this.$element |
|
.on('mouseenter', $.proxy(this.pause, this)) |
|
.on('mouseleave', $.proxy(this.cycle, this)) |
|
} |
|
|
|
Carousel.DEFAULTS = { |
|
interval: 5000 |
|
, pause: 'hover' |
|
, wrap: true |
|
} |
|
|
|
Carousel.prototype.cycle = function (e) { |
|
e || (this.paused = false) |
|
|
|
this.interval && clearInterval(this.interval) |
|
|
|
this.options.interval |
|
&& !this.paused |
|
&& (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) |
|
|
|
return this |
|
} |
|
|
|
Carousel.prototype.getActiveIndex = function () { |
|
this.$active = this.$element.find('.item.active') |
|
this.$items = this.$active.parent().children() |
|
|
|
return this.$items.index(this.$active) |
|
} |
|
|
|
Carousel.prototype.to = function (pos) { |
|
var that = this |
|
var activeIndex = this.getActiveIndex() |
|
|
|
if (pos > (this.$items.length - 1) || pos < 0) return |
|
|
|
if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) |
|
if (activeIndex == pos) return this.pause().cycle() |
|
|
|
return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) |
|
} |
|
|
|
Carousel.prototype.pause = function (e) { |
|
e || (this.paused = true) |
|
|
|
if (this.$element.find('.next, .prev').length && $.support.transition.end) { |
|
this.$element.trigger($.support.transition.end) |
|
this.cycle(true) |
|
} |
|
|
|
this.interval = clearInterval(this.interval) |
|
|
|
return this |
|
} |
|
|
|
Carousel.prototype.next = function () { |
|
if (this.sliding) return |
|
return this.slide('next') |
|
} |
|
|
|
Carousel.prototype.prev = function () { |
|
if (this.sliding) return |
|
return this.slide('prev') |
|
} |
|
|
|
Carousel.prototype.slide = function (type, next) { |
|
var $active = this.$element.find('.item.active') |
|
var $next = next || $active[type]() |
|
var isCycling = this.interval |
|
var direction = type == 'next' ? 'left' : 'right' |
|