Comparing version 0.2.1 to 0.2.2
/* =================================================== | ||
* bootstrap-transition.js v2.1.0 | ||
* bootstrap-transition.js v2.3.0 | ||
* http://twitter.github.com/bootstrap/javascript.html#transitions | ||
@@ -23,9 +23,9 @@ * =================================================== | ||
$(function () { | ||
"use strict"; // jshint ;_; | ||
"use strict"; // jshint ;_; | ||
/* CSS TRANSITION SUPPORT (http://www.modernizr.com/) | ||
* ======================================================= */ | ||
/* CSS TRANSITION SUPPORT (http://www.modernizr.com/) | ||
* ======================================================= */ | ||
$(function () { | ||
@@ -61,7 +61,6 @@ $.support.transition = (function () { | ||
}(window.jQuery); | ||
/* ========================================================= | ||
* bootstrap-modal.js v2.1.0 | ||
* http://twitter.github.com/bootstrap/javascript.html#modals | ||
* ========================================================= | ||
}(window.jQuery);/* ========================================================== | ||
* bootstrap-alert.js v2.3.0 | ||
* http://twitter.github.com/bootstrap/javascript.html#alerts | ||
* ========================================================== | ||
* Copyright 2012 Twitter, Inc. | ||
@@ -80,3 +79,3 @@ * | ||
* limitations under the License. | ||
* ========================================================= */ | ||
* ========================================================== */ | ||
@@ -89,218 +88,553 @@ | ||
/* MODAL CLASS DEFINITION | ||
/* ALERT CLASS DEFINITION | ||
* ====================== */ | ||
var Modal = function (element, options) { | ||
this.options = options | ||
var dismiss = '[data-dismiss="alert"]' | ||
, Alert = function (el) { | ||
$(el).on('click', dismiss, this.close) | ||
} | ||
Alert.prototype.close = function (e) { | ||
var $this = $(this) | ||
, selector = $this.attr('data-target') | ||
, $parent | ||
if (!selector) { | ||
selector = $this.attr('href') | ||
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 | ||
} | ||
$parent = $(selector) | ||
e && e.preventDefault() | ||
$parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent()) | ||
$parent.trigger(e = $.Event('close')) | ||
if (e.isDefaultPrevented()) return | ||
$parent.removeClass('in') | ||
function removeElement() { | ||
$parent | ||
.trigger('closed') | ||
.remove() | ||
} | ||
$.support.transition && $parent.hasClass('fade') ? | ||
$parent.on($.support.transition.end, removeElement) : | ||
removeElement() | ||
} | ||
/* ALERT PLUGIN DEFINITION | ||
* ======================= */ | ||
var old = $.fn.alert | ||
$.fn.alert = function (option) { | ||
return this.each(function () { | ||
var $this = $(this) | ||
, data = $this.data('alert') | ||
if (!data) $this.data('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.alert.data-api', dismiss, Alert.prototype.close) | ||
}(window.jQuery);/* ============================================================ | ||
* bootstrap-button.js v2.3.0 | ||
* http://twitter.github.com/bootstrap/javascript.html#buttons | ||
* ============================================================ | ||
* Copyright 2012 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"; // jshint ;_; | ||
/* BUTTON PUBLIC CLASS DEFINITION | ||
* ============================== */ | ||
var Button = function (element, options) { | ||
this.$element = $(element) | ||
.delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this)) | ||
this.options.remote && this.$element.find('.modal-body').load(this.options.remote) | ||
this.options = $.extend({}, $.fn.button.defaults, options) | ||
} | ||
Modal.prototype = { | ||
Button.prototype.setState = function (state) { | ||
var d = 'disabled' | ||
, $el = this.$element | ||
, data = $el.data() | ||
, val = $el.is('input') ? 'val' : 'html' | ||
constructor: Modal | ||
state = state + 'Text' | ||
data.resetText || $el.data('resetText', $el[val]()) | ||
, toggle: function () { | ||
return this[!this.isShown ? 'show' : 'hide']() | ||
} | ||
$el[val](data[state] || this.options[state]) | ||
, show: function () { | ||
var that = this | ||
, e = $.Event('show') | ||
// 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) | ||
} | ||
this.$element.trigger(e) | ||
Button.prototype.toggle = function () { | ||
var $parent = this.$element.closest('[data-toggle="buttons-radio"]') | ||
if (this.isShown || e.isDefaultPrevented()) return | ||
$parent && $parent | ||
.find('.active') | ||
.removeClass('active') | ||
$('body').addClass('modal-open') | ||
this.$element.toggleClass('active') | ||
} | ||
this.isShown = true | ||
this.escape() | ||
/* BUTTON PLUGIN DEFINITION | ||
* ======================== */ | ||
this.backdrop(function () { | ||
var transition = $.support.transition && that.$element.hasClass('fade') | ||
var old = $.fn.button | ||
if (!that.$element.parent().length) { | ||
that.$element.appendTo(document.body) //don't move modals dom position | ||
} | ||
$.fn.button = function (option) { | ||
return this.each(function () { | ||
var $this = $(this) | ||
, data = $this.data('button') | ||
, options = typeof option == 'object' && option | ||
if (!data) $this.data('button', (data = new Button(this, options))) | ||
if (option == 'toggle') data.toggle() | ||
else if (option) data.setState(option) | ||
}) | ||
} | ||
that.$element | ||
.show() | ||
$.fn.button.defaults = { | ||
loadingText: 'loading...' | ||
} | ||
if (transition) { | ||
that.$element[0].offsetWidth // force reflow | ||
} | ||
$.fn.button.Constructor = Button | ||
that.$element | ||
.addClass('in') | ||
.attr('aria-hidden', false) | ||
.focus() | ||
that.enforceFocus() | ||
/* BUTTON NO CONFLICT | ||
* ================== */ | ||
transition ? | ||
that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) : | ||
that.$element.trigger('shown') | ||
$.fn.button.noConflict = function () { | ||
$.fn.button = old | ||
return this | ||
} | ||
}) | ||
} | ||
, hide: function (e) { | ||
e && e.preventDefault() | ||
/* BUTTON DATA-API | ||
* =============== */ | ||
var that = this | ||
$(document).on('click.button.data-api', '[data-toggle^=button]', function (e) { | ||
var $btn = $(e.target) | ||
if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') | ||
$btn.button('toggle') | ||
}) | ||
e = $.Event('hide') | ||
}(window.jQuery);/* ========================================================== | ||
* bootstrap-carousel.js v2.3.0 | ||
* http://twitter.github.com/bootstrap/javascript.html#carousel | ||
* ========================================================== | ||
* Copyright 2012 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. | ||
* ========================================================== */ | ||
this.$element.trigger(e) | ||
if (!this.isShown || e.isDefaultPrevented()) return | ||
!function ($) { | ||
this.isShown = false | ||
"use strict"; // jshint ;_; | ||
$('body').removeClass('modal-open') | ||
this.escape() | ||
/* CAROUSEL CLASS DEFINITION | ||
* ========================= */ | ||
$(document).off('focusin.modal') | ||
var Carousel = function (element, options) { | ||
this.$element = $(element) | ||
this.$indicators = this.$element.find('.carousel-indicators') | ||
this.options = options | ||
this.options.pause == 'hover' && this.$element | ||
.on('mouseenter', $.proxy(this.pause, this)) | ||
.on('mouseleave', $.proxy(this.cycle, this)) | ||
} | ||
this.$element | ||
.removeClass('in') | ||
.attr('aria-hidden', true) | ||
Carousel.prototype = { | ||
$.support.transition && this.$element.hasClass('fade') ? | ||
this.hideWithTransition() : | ||
this.hideModal() | ||
} | ||
cycle: function (e) { | ||
if (!e) this.paused = false | ||
if (this.interval) clearInterval(this.interval); | ||
this.options.interval | ||
&& !this.paused | ||
&& (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) | ||
return this | ||
} | ||
, enforceFocus: function () { | ||
var that = this | ||
$(document).on('focusin.modal', function (e) { | ||
if (that.$element[0] !== e.target && !that.$element.has(e.target).length) { | ||
that.$element.focus() | ||
} | ||
, getActiveIndex: function () { | ||
this.$active = this.$element.find('.item.active') | ||
this.$items = this.$active.parent().children() | ||
return this.$items.index(this.$active) | ||
} | ||
, to: function (pos) { | ||
var activeIndex = this.getActiveIndex() | ||
, that = this | ||
if (pos > (this.$items.length - 1) || pos < 0) return | ||
if (this.sliding) { | ||
return this.$element.one('slid', function () { | ||
that.to(pos) | ||
}) | ||
} | ||
, escape: function () { | ||
var that = this | ||
if (this.isShown && this.options.keyboard) { | ||
this.$element.on('keyup.dismiss.modal', function ( e ) { | ||
e.which == 27 && that.hide() | ||
}) | ||
} else if (!this.isShown) { | ||
this.$element.off('keyup.dismiss.modal') | ||
} | ||
if (activeIndex == pos) { | ||
return this.pause().cycle() | ||
} | ||
, hideWithTransition: function () { | ||
var that = this | ||
, timeout = setTimeout(function () { | ||
that.$element.off($.support.transition.end) | ||
that.hideModal() | ||
}, 500) | ||
return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) | ||
} | ||
, pause: function (e) { | ||
if (!e) this.paused = true | ||
if (this.$element.find('.next, .prev').length && $.support.transition.end) { | ||
this.$element.trigger($.support.transition.end) | ||
this.cycle() | ||
} | ||
clearInterval(this.interval) | ||
this.interval = null | ||
return this | ||
} | ||
, next: function () { | ||
if (this.sliding) return | ||
return this.slide('next') | ||
} | ||
, prev: function () { | ||
if (this.sliding) return | ||
return this.slide('prev') | ||
} | ||
, slide: function (type, next) { | ||
var $active = this.$element.find('.item.active') | ||
, $next = next || $active[type]() | ||
, isCycling = this.interval | ||
, direction = type == 'next' ? 'left' : 'right' | ||
, fallback = type == 'next' ? 'first' : 'last' | ||
, that = this | ||
, e | ||
this.sliding = true | ||
isCycling && this.pause() | ||
$next = $next.length ? $next : this.$element.find('.item')[fallback]() | ||
e = $.Event('slide', { | ||
relatedTarget: $next[0] | ||
, direction: direction | ||
}) | ||
if ($next.hasClass('active')) return | ||
if (this.$indicators.length) { | ||
this.$indicators.find('.active').removeClass('active') | ||
this.$element.one('slid', function () { | ||
var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) | ||
$nextIndicator && $nextIndicator.addClass('active') | ||
}) | ||
} | ||
if ($.support.transition && this.$element.hasClass('slide')) { | ||
this.$element.trigger(e) | ||
if (e.isDefaultPrevented()) return | ||
$next.addClass(type) | ||
$next[0].offsetWidth // force reflow | ||
$active.addClass(direction) | ||
$next.addClass(direction) | ||
this.$element.one($.support.transition.end, function () { | ||
clearTimeout(timeout) | ||
that.hideModal() | ||
$next.removeClass([type, direction].join(' ')).addClass('active') | ||
$active.removeClass(['active', direction].join(' ')) | ||
that.sliding = false | ||
setTimeout(function () { that.$element.trigger('slid') }, 0) | ||
}) | ||
} else { | ||
this.$element.trigger(e) | ||
if (e.isDefaultPrevented()) return | ||
$active.removeClass('active') | ||
$next.addClass('active') | ||
this.sliding = false | ||
this.$element.trigger('slid') | ||
} | ||
, hideModal: function (that) { | ||
this.$element | ||
.hide() | ||
.trigger('hidden') | ||
isCycling && this.cycle() | ||
this.backdrop() | ||
} | ||
return this | ||
} | ||
, removeBackdrop: function () { | ||
this.$backdrop.remove() | ||
this.$backdrop = null | ||
} | ||
/* CAROUSEL PLUGIN DEFINITION | ||
* ========================== */ | ||
var old = $.fn.carousel | ||
$.fn.carousel = function (option) { | ||
return this.each(function () { | ||
var $this = $(this) | ||
, data = $this.data('carousel') | ||
, options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option) | ||
, action = typeof option == 'string' ? option : options.slide | ||
if (!data) $this.data('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() | ||
}) | ||
} | ||
$.fn.carousel.defaults = { | ||
interval: 5000 | ||
, pause: 'hover' | ||
} | ||
$.fn.carousel.Constructor = Carousel | ||
/* CAROUSEL NO CONFLICT | ||
* ==================== */ | ||
$.fn.carousel.noConflict = function () { | ||
$.fn.carousel = old | ||
return this | ||
} | ||
/* CAROUSEL DATA-API | ||
* ================= */ | ||
$(document).on('click.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { | ||
var $this = $(this), href | ||
, $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 | ||
, options = $.extend({}, $target.data(), $this.data()) | ||
, slideIndex | ||
$target.carousel(options) | ||
if (slideIndex = $this.attr('data-slide-to')) { | ||
$target.data('carousel').pause().to(slideIndex).cycle() | ||
} | ||
e.preventDefault() | ||
}) | ||
}(window.jQuery);/* ============================================================= | ||
* bootstrap-collapse.js v2.3.0 | ||
* http://twitter.github.com/bootstrap/javascript.html#collapse | ||
* ============================================================= | ||
* Copyright 2012 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"; // jshint ;_; | ||
/* COLLAPSE PUBLIC CLASS DEFINITION | ||
* ================================ */ | ||
var Collapse = function (element, options) { | ||
this.$element = $(element) | ||
this.options = $.extend({}, $.fn.collapse.defaults, options) | ||
if (this.options.parent) { | ||
this.$parent = $(this.options.parent) | ||
} | ||
this.options.toggle && this.toggle() | ||
} | ||
Collapse.prototype = { | ||
constructor: Collapse | ||
, dimension: function () { | ||
var hasWidth = this.$element.hasClass('width') | ||
return hasWidth ? 'width' : 'height' | ||
} | ||
, show: function () { | ||
var dimension | ||
, scroll | ||
, actives | ||
, hasData | ||
if (this.transitioning || this.$element.hasClass('in')) return | ||
dimension = this.dimension() | ||
scroll = $.camelCase(['scroll', dimension].join('-')) | ||
actives = this.$parent && this.$parent.find('> .accordion-group > .in') | ||
if (actives && actives.length) { | ||
hasData = actives.data('collapse') | ||
if (hasData && hasData.transitioning) return | ||
actives.collapse('hide') | ||
hasData || actives.data('collapse', null) | ||
} | ||
, backdrop: function (callback) { | ||
var that = this | ||
, animate = this.$element.hasClass('fade') ? 'fade' : '' | ||
this.$element[dimension](0) | ||
this.transition('addClass', $.Event('show'), 'shown') | ||
$.support.transition && this.$element[dimension](this.$element[0][scroll]) | ||
} | ||
if (this.isShown && this.options.backdrop) { | ||
var doAnimate = $.support.transition && animate | ||
, hide: function () { | ||
var dimension | ||
if (this.transitioning || !this.$element.hasClass('in')) return | ||
dimension = this.dimension() | ||
this.reset(this.$element[dimension]()) | ||
this.transition('removeClass', $.Event('hide'), 'hidden') | ||
this.$element[dimension](0) | ||
} | ||
this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />') | ||
.appendTo(document.body) | ||
, reset: function (size) { | ||
var dimension = this.dimension() | ||
if (this.options.backdrop != 'static') { | ||
this.$backdrop.click($.proxy(this.hide, this)) | ||
this.$element | ||
.removeClass('collapse') | ||
[dimension](size || 'auto') | ||
[0].offsetWidth | ||
this.$element[size !== null ? 'addClass' : 'removeClass']('collapse') | ||
return this | ||
} | ||
, transition: function (method, startEvent, completeEvent) { | ||
var that = this | ||
, complete = function () { | ||
if (startEvent.type == 'show') that.reset() | ||
that.transitioning = 0 | ||
that.$element.trigger(completeEvent) | ||
} | ||
if (doAnimate) this.$backdrop[0].offsetWidth // force reflow | ||
this.$element.trigger(startEvent) | ||
this.$backdrop.addClass('in') | ||
if (startEvent.isDefaultPrevented()) return | ||
doAnimate ? | ||
this.$backdrop.one($.support.transition.end, callback) : | ||
callback() | ||
this.transitioning = 1 | ||
} else if (!this.isShown && this.$backdrop) { | ||
this.$backdrop.removeClass('in') | ||
this.$element[method]('in') | ||
$.support.transition && this.$element.hasClass('fade')? | ||
this.$backdrop.one($.support.transition.end, $.proxy(this.removeBackdrop, this)) : | ||
this.removeBackdrop() | ||
$.support.transition && this.$element.hasClass('collapse') ? | ||
this.$element.one($.support.transition.end, complete) : | ||
complete() | ||
} | ||
} else if (callback) { | ||
callback() | ||
} | ||
} | ||
, toggle: function () { | ||
this[this.$element.hasClass('in') ? 'hide' : 'show']() | ||
} | ||
} | ||
/* MODAL PLUGIN DEFINITION | ||
* ======================= */ | ||
/* COLLAPSE PLUGIN DEFINITION | ||
* ========================== */ | ||
$.fn.modal = function (option) { | ||
var old = $.fn.collapse | ||
$.fn.collapse = function (option) { | ||
return this.each(function () { | ||
var $this = $(this) | ||
, data = $this.data('modal') | ||
, options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option) | ||
if (!data) $this.data('modal', (data = new Modal(this, options))) | ||
, data = $this.data('collapse') | ||
, options = $.extend({}, $.fn.collapse.defaults, $this.data(), typeof option == 'object' && option) | ||
if (!data) $this.data('collapse', (data = new Collapse(this, options))) | ||
if (typeof option == 'string') data[option]() | ||
else if (options.show) data.show() | ||
}) | ||
} | ||
$.fn.modal.defaults = { | ||
backdrop: true | ||
, keyboard: true | ||
, show: true | ||
$.fn.collapse.defaults = { | ||
toggle: true | ||
} | ||
$.fn.modal.Constructor = Modal | ||
$.fn.collapse.Constructor = Collapse | ||
/* MODAL DATA-API | ||
* ============== */ | ||
/* COLLAPSE NO CONFLICT | ||
* ==================== */ | ||
$(function () { | ||
$('body').on('click.modal.data-api', '[data-toggle="modal"]', function ( e ) { | ||
var $this = $(this) | ||
, href = $this.attr('href') | ||
, $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7 | ||
, option = $target.data('modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data()) | ||
$.fn.collapse.noConflict = function () { | ||
$.fn.collapse = old | ||
return this | ||
} | ||
e.preventDefault() | ||
$target | ||
.modal(option) | ||
.one('hide', function () { | ||
$this.focus() | ||
}) | ||
}) | ||
/* COLLAPSE DATA-API | ||
* ================= */ | ||
$(document).on('click.collapse.data-api', '[data-toggle=collapse]', function (e) { | ||
var $this = $(this), href | ||
, target = $this.attr('data-target') | ||
|| e.preventDefault() | ||
|| (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 | ||
, option = $(target).data('collapse') ? 'toggle' : $this.data() | ||
$this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed') | ||
$(target).collapse(option) | ||
}) | ||
}(window.jQuery); | ||
/* ============================================================ | ||
* bootstrap-dropdown.js v2.1.0 | ||
}(window.jQuery);/* ============================================================ | ||
* bootstrap-dropdown.js v2.3.0 | ||
* http://twitter.github.com/bootstrap/javascript.html#dropdowns | ||
@@ -359,5 +693,6 @@ * ============================================================ | ||
$parent.toggleClass('open') | ||
$this.focus() | ||
} | ||
$this.focus() | ||
return false | ||
@@ -387,5 +722,8 @@ } | ||
if (!isActive || (isActive && e.keyCode == 27)) return $this.click() | ||
if (!isActive || (isActive && e.keyCode == 27)) { | ||
if (e.which == 27) $parent.find(toggle).focus() | ||
return $this.click() | ||
} | ||
$items = $('[role=menu] li:not(.divider) a', $parent) | ||
$items = $('[role=menu] li:not(.divider):visible a', $parent) | ||
@@ -408,4 +746,5 @@ if (!$items.length) return | ||
function clearMenus() { | ||
getParent($(toggle)) | ||
.removeClass('open') | ||
$(toggle).each(function () { | ||
getParent($(this)).removeClass('open') | ||
}) | ||
} | ||
@@ -419,8 +758,9 @@ | ||
selector = $this.attr('href') | ||
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 | ||
selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 | ||
} | ||
$parent = $(selector) | ||
$parent.length || ($parent = $this.parent()) | ||
$parent = selector && $(selector) | ||
if (!$parent || !$parent.length) $parent = $this.parent() | ||
return $parent | ||
@@ -433,2 +773,4 @@ } | ||
var old = $.fn.dropdown | ||
$.fn.dropdown = function (option) { | ||
@@ -446,19 +788,26 @@ return this.each(function () { | ||
/* DROPDOWN NO CONFLICT | ||
* ==================== */ | ||
$.fn.dropdown.noConflict = function () { | ||
$.fn.dropdown = old | ||
return this | ||
} | ||
/* APPLY TO STANDARD DROPDOWN ELEMENTS | ||
* =================================== */ | ||
$(function () { | ||
$('html') | ||
.on('click.dropdown.data-api touchstart.dropdown.data-api', clearMenus) | ||
$('body') | ||
.on('click.dropdown touchstart.dropdown.data-api', '.dropdown', function (e) { e.stopPropagation() }) | ||
.on('click.dropdown.data-api touchstart.dropdown.data-api' , toggle, Dropdown.prototype.toggle) | ||
.on('keydown.dropdown.data-api touchstart.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown) | ||
}) | ||
$(document) | ||
.on('click.dropdown.data-api', clearMenus) | ||
.on('click.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) | ||
.on('.dropdown-menu', function (e) { e.stopPropagation() }) | ||
.on('click.dropdown.data-api' , toggle, Dropdown.prototype.toggle) | ||
.on('keydown.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown) | ||
}(window.jQuery); | ||
/* ============================================================= | ||
* bootstrap-scrollspy.js v2.1.0 | ||
* http://twitter.github.com/bootstrap/javascript.html#scrollspy | ||
* ============================================================= | ||
/* ========================================================= | ||
* bootstrap-modal.js v2.3.0 | ||
* http://twitter.github.com/bootstrap/javascript.html#modals | ||
* ========================================================= | ||
* Copyright 2012 Twitter, Inc. | ||
@@ -477,3 +826,3 @@ * | ||
* limitations under the License. | ||
* ============================================================== */ | ||
* ========================================================= */ | ||
@@ -486,260 +835,221 @@ | ||
/* SCROLLSPY CLASS DEFINITION | ||
* ========================== */ | ||
/* MODAL CLASS DEFINITION | ||
* ====================== */ | ||
function ScrollSpy(element, options) { | ||
var process = $.proxy(this.process, this) | ||
, $element = $(element).is('body') ? $(window) : $(element) | ||
, href | ||
this.options = $.extend({}, $.fn.scrollspy.defaults, options) | ||
this.$scrollElement = $element.on('scroll.scroll-spy.data-api', process) | ||
this.selector = (this.options.target | ||
|| ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 | ||
|| '') + ' .nav li > a' | ||
this.$body = $('body') | ||
this.refresh() | ||
this.process() | ||
var Modal = function (element, options) { | ||
this.options = options | ||
this.$element = $(element) | ||
.delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this)) | ||
this.options.remote && this.$element.find('.modal-body').load(this.options.remote) | ||
} | ||
ScrollSpy.prototype = { | ||
Modal.prototype = { | ||
constructor: ScrollSpy | ||
constructor: Modal | ||
, refresh: function () { | ||
var self = this | ||
, $targets | ||
this.offsets = $([]) | ||
this.targets = $([]) | ||
$targets = this.$body | ||
.find(this.selector) | ||
.map(function () { | ||
var $el = $(this) | ||
, href = $el.data('target') || $el.attr('href') | ||
, $href = /^#\w/.test(href) && $(href) | ||
return ( $href | ||
&& $href.length | ||
&& [[ $href.position().top, href ]] ) || null | ||
}) | ||
.sort(function (a, b) { return a[0] - b[0] }) | ||
.each(function () { | ||
self.offsets.push(this[0]) | ||
self.targets.push(this[1]) | ||
}) | ||
, toggle: function () { | ||
return this[!this.isShown ? 'show' : 'hide']() | ||
} | ||
, process: function () { | ||
var scrollTop = this.$scrollElement.scrollTop() + this.options.offset | ||
, scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight | ||
, maxScroll = scrollHeight - this.$scrollElement.height() | ||
, offsets = this.offsets | ||
, targets = this.targets | ||
, activeTarget = this.activeTarget | ||
, i | ||
, show: function () { | ||
var that = this | ||
, e = $.Event('show') | ||
if (scrollTop >= maxScroll) { | ||
return activeTarget != (i = targets.last()[0]) | ||
&& this.activate ( i ) | ||
} | ||
this.$element.trigger(e) | ||
for (i = offsets.length; i--;) { | ||
activeTarget != targets[i] | ||
&& scrollTop >= offsets[i] | ||
&& (!offsets[i + 1] || scrollTop <= offsets[i + 1]) | ||
&& this.activate( targets[i] ) | ||
} | ||
} | ||
if (this.isShown || e.isDefaultPrevented()) return | ||
, activate: function (target) { | ||
var active | ||
, selector | ||
this.isShown = true | ||
this.activeTarget = target | ||
this.escape() | ||
$(this.selector) | ||
.parent('.active') | ||
.removeClass('active') | ||
this.backdrop(function () { | ||
var transition = $.support.transition && that.$element.hasClass('fade') | ||
selector = this.selector | ||
+ '[data-target="' + target + '"],' | ||
+ this.selector + '[href="' + target + '"]' | ||
if (!that.$element.parent().length) { | ||
that.$element.appendTo(document.body) //don't move modals dom position | ||
} | ||
active = $(selector) | ||
.parent('li') | ||
.addClass('active') | ||
that.$element.show() | ||
if (active.parent('.dropdown-menu').length) { | ||
active = active.closest('li.dropdown').addClass('active') | ||
} | ||
if (transition) { | ||
that.$element[0].offsetWidth // force reflow | ||
} | ||
active.trigger('activate') | ||
} | ||
that.$element | ||
.addClass('in') | ||
.attr('aria-hidden', false) | ||
} | ||
that.enforceFocus() | ||
transition ? | ||
that.$element.one($.support.transition.end, function () { that.$element.focus().trigger('shown') }) : | ||
that.$element.focus().trigger('shown') | ||
/* SCROLLSPY PLUGIN DEFINITION | ||
* =========================== */ | ||
}) | ||
} | ||
$.fn.scrollspy = function (option) { | ||
return this.each(function () { | ||
var $this = $(this) | ||
, data = $this.data('scrollspy') | ||
, options = typeof option == 'object' && option | ||
if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options))) | ||
if (typeof option == 'string') data[option]() | ||
}) | ||
} | ||
, hide: function (e) { | ||
e && e.preventDefault() | ||
$.fn.scrollspy.Constructor = ScrollSpy | ||
var that = this | ||
$.fn.scrollspy.defaults = { | ||
offset: 10 | ||
} | ||
e = $.Event('hide') | ||
this.$element.trigger(e) | ||
/* SCROLLSPY DATA-API | ||
* ================== */ | ||
if (!this.isShown || e.isDefaultPrevented()) return | ||
$(window).on('load', function () { | ||
$('[data-spy="scroll"]').each(function () { | ||
var $spy = $(this) | ||
$spy.scrollspy($spy.data()) | ||
}) | ||
}) | ||
this.isShown = false | ||
}(window.jQuery); | ||
/* ======================================================== | ||
* bootstrap-tab.js v2.1.0 | ||
* http://twitter.github.com/bootstrap/javascript.html#tabs | ||
* ======================================================== | ||
* Copyright 2012 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. | ||
* ======================================================== */ | ||
this.escape() | ||
$(document).off('focusin.modal') | ||
!function ($) { | ||
this.$element | ||
.removeClass('in') | ||
.attr('aria-hidden', true) | ||
"use strict"; // jshint ;_; | ||
$.support.transition && this.$element.hasClass('fade') ? | ||
this.hideWithTransition() : | ||
this.hideModal() | ||
} | ||
, enforceFocus: function () { | ||
var that = this | ||
$(document).on('focusin.modal', function (e) { | ||
if (that.$element[0] !== e.target && !that.$element.has(e.target).length) { | ||
that.$element.focus() | ||
} | ||
}) | ||
} | ||
/* TAB CLASS DEFINITION | ||
* ==================== */ | ||
, escape: function () { | ||
var that = this | ||
if (this.isShown && this.options.keyboard) { | ||
this.$element.on('keyup.dismiss.modal', function ( e ) { | ||
e.which == 27 && that.hide() | ||
}) | ||
} else if (!this.isShown) { | ||
this.$element.off('keyup.dismiss.modal') | ||
} | ||
} | ||
var Tab = function (element) { | ||
this.element = $(element) | ||
} | ||
, hideWithTransition: function () { | ||
var that = this | ||
, timeout = setTimeout(function () { | ||
that.$element.off($.support.transition.end) | ||
that.hideModal() | ||
}, 500) | ||
Tab.prototype = { | ||
this.$element.one($.support.transition.end, function () { | ||
clearTimeout(timeout) | ||
that.hideModal() | ||
}) | ||
} | ||
constructor: Tab | ||
, hideModal: function () { | ||
var that = this | ||
this.$element.hide() | ||
this.backdrop(function () { | ||
that.removeBackdrop() | ||
that.$element.trigger('hidden') | ||
}) | ||
} | ||
, show: function () { | ||
var $this = this.element | ||
, $ul = $this.closest('ul:not(.dropdown-menu)') | ||
, selector = $this.attr('data-target') | ||
, previous | ||
, $target | ||
, e | ||
if (!selector) { | ||
selector = $this.attr('href') | ||
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 | ||
, removeBackdrop: function () { | ||
this.$backdrop.remove() | ||
this.$backdrop = null | ||
} | ||
if ( $this.parent('li').hasClass('active') ) return | ||
, backdrop: function (callback) { | ||
var that = this | ||
, animate = this.$element.hasClass('fade') ? 'fade' : '' | ||
previous = $ul.find('.active a').last()[0] | ||
if (this.isShown && this.options.backdrop) { | ||
var doAnimate = $.support.transition && animate | ||
e = $.Event('show', { | ||
relatedTarget: previous | ||
}) | ||
this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />') | ||
.appendTo(document.body) | ||
$this.trigger(e) | ||
this.$backdrop.click( | ||
this.options.backdrop == 'static' ? | ||
$.proxy(this.$element[0].focus, this.$element[0]) | ||
: $.proxy(this.hide, this) | ||
) | ||
if (e.isDefaultPrevented()) return | ||
if (doAnimate) this.$backdrop[0].offsetWidth // force reflow | ||
$target = $(selector) | ||
this.$backdrop.addClass('in') | ||
this.activate($this.parent('li'), $ul) | ||
this.activate($target, $target.parent(), function () { | ||
$this.trigger({ | ||
type: 'shown' | ||
, relatedTarget: previous | ||
}) | ||
}) | ||
} | ||
if (!callback) return | ||
, activate: function ( element, container, callback) { | ||
var $active = container.find('> .active') | ||
, transition = callback | ||
&& $.support.transition | ||
&& $active.hasClass('fade') | ||
doAnimate ? | ||
this.$backdrop.one($.support.transition.end, callback) : | ||
callback() | ||
function next() { | ||
$active | ||
.removeClass('active') | ||
.find('> .dropdown-menu > .active') | ||
.removeClass('active') | ||
} else if (!this.isShown && this.$backdrop) { | ||
this.$backdrop.removeClass('in') | ||
element.addClass('active') | ||
$.support.transition && this.$element.hasClass('fade')? | ||
this.$backdrop.one($.support.transition.end, callback) : | ||
callback() | ||
if (transition) { | ||
element[0].offsetWidth // reflow for transition | ||
element.addClass('in') | ||
} else { | ||
element.removeClass('fade') | ||
} else if (callback) { | ||
callback() | ||
} | ||
if ( element.parent('.dropdown-menu') ) { | ||
element.closest('li.dropdown').addClass('active') | ||
} | ||
callback && callback() | ||
} | ||
} | ||
transition ? | ||
$active.one($.support.transition.end, next) : | ||
next() | ||
$active.removeClass('in') | ||
} | ||
} | ||
/* MODAL PLUGIN DEFINITION | ||
* ======================= */ | ||
var old = $.fn.modal | ||
/* TAB PLUGIN DEFINITION | ||
* ===================== */ | ||
$.fn.tab = function ( option ) { | ||
$.fn.modal = function (option) { | ||
return this.each(function () { | ||
var $this = $(this) | ||
, data = $this.data('tab') | ||
if (!data) $this.data('tab', (data = new Tab(this))) | ||
, data = $this.data('modal') | ||
, options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option) | ||
if (!data) $this.data('modal', (data = new Modal(this, options))) | ||
if (typeof option == 'string') data[option]() | ||
else if (options.show) data.show() | ||
}) | ||
} | ||
$.fn.tab.Constructor = Tab | ||
$.fn.modal.defaults = { | ||
backdrop: true | ||
, keyboard: true | ||
, show: true | ||
} | ||
$.fn.modal.Constructor = Modal | ||
/* TAB DATA-API | ||
* ============ */ | ||
$(function () { | ||
$('body').on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) { | ||
e.preventDefault() | ||
$(this).tab('show') | ||
}) | ||
/* MODAL NO CONFLICT | ||
* ================= */ | ||
$.fn.modal.noConflict = function () { | ||
$.fn.modal = old | ||
return this | ||
} | ||
/* MODAL DATA-API | ||
* ============== */ | ||
$(document).on('click.modal.data-api', '[data-toggle="modal"]', function (e) { | ||
var $this = $(this) | ||
, href = $this.attr('href') | ||
, $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7 | ||
, option = $target.data('modal') ? 'toggle' : $.extend({ remote:!/#/.test(href) && href }, $target.data(), $this.data()) | ||
e.preventDefault() | ||
$target | ||
.modal(option) | ||
.one('hide', function () { | ||
$this.focus() | ||
}) | ||
}) | ||
@@ -749,3 +1059,3 @@ | ||
/* =========================================================== | ||
* bootstrap-tooltip.js v2.1.0 | ||
* bootstrap-tooltip.js v2.3.0 | ||
* http://twitter.github.com/bootstrap/javascript.html#tooltips | ||
@@ -789,2 +1099,5 @@ * Inspired by the original jQuery.tipsy by Jason Frame | ||
, eventOut | ||
, triggers | ||
, trigger | ||
, i | ||
@@ -796,9 +1109,14 @@ this.type = type | ||
if (this.options.trigger == 'click') { | ||
this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) | ||
} else if (this.options.trigger != 'manual') { | ||
eventIn = this.options.trigger == 'hover' ? 'mouseenter' : 'focus' | ||
eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur' | ||
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)) | ||
triggers = this.options.trigger.split(' ') | ||
for (i = triggers.length; i--;) { | ||
trigger = triggers[i] | ||
if (trigger == 'click') { | ||
this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) | ||
} else if (trigger != 'manual') { | ||
eventIn = trigger == 'hover' ? 'mouseenter' : 'focus' | ||
eventOut = trigger == 'hover' ? 'mouseleave' : 'blur' | ||
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)) | ||
} | ||
} | ||
@@ -812,3 +1130,3 @@ | ||
, getOptions: function (options) { | ||
options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data()) | ||
options = $.extend({}, $.fn[this.type].defaults, this.$element.data(), options) | ||
@@ -851,3 +1169,2 @@ if (options.delay && typeof options.delay == 'number') { | ||
var $tip | ||
, inside | ||
, pos | ||
@@ -858,4 +1175,7 @@ , actualWidth | ||
, tp | ||
, e = $.Event('show') | ||
if (this.hasContent() && this.enabled) { | ||
this.$element.trigger(e) | ||
if (e.isDefaultPrevented()) return | ||
$tip = this.tip() | ||
@@ -872,15 +1192,14 @@ this.setContent() | ||
inside = /in/.test(placement) | ||
$tip | ||
.remove() | ||
.detach() | ||
.css({ top: 0, left: 0, display: 'block' }) | ||
.appendTo(inside ? this.$element : document.body) | ||
pos = this.getPosition(inside) | ||
this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) | ||
pos = this.getPosition() | ||
actualWidth = $tip[0].offsetWidth | ||
actualHeight = $tip[0].offsetHeight | ||
switch (inside ? placement.split(' ')[1] : placement) { | ||
switch (placement) { | ||
case 'bottom': | ||
@@ -900,9 +1219,54 @@ tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2} | ||
$tip | ||
.css(tp) | ||
.addClass(placement) | ||
.addClass('in') | ||
this.applyPlacement(tp, placement) | ||
this.$element.trigger('shown') | ||
} | ||
} | ||
, applyPlacement: function(offset, placement){ | ||
var $tip = this.tip() | ||
, width = $tip[0].offsetWidth | ||
, height = $tip[0].offsetHeight | ||
, actualWidth | ||
, actualHeight | ||
, delta | ||
, replace | ||
$tip | ||
.offset(offset) | ||
.addClass(placement) | ||
.addClass('in') | ||
actualWidth = $tip[0].offsetWidth | ||
actualHeight = $tip[0].offsetHeight | ||
if (placement == 'top' && actualHeight != height) { | ||
offset.top = offset.top + height - actualHeight | ||
replace = true | ||
} | ||
if (placement == 'bottom' || placement == 'top') { | ||
delta = 0 | ||
if (offset.left < 0){ | ||
delta = offset.left * -2 | ||
offset.left = 0 | ||
$tip.offset(offset) | ||
actualWidth = $tip[0].offsetWidth | ||
actualHeight = $tip[0].offsetHeight | ||
} | ||
this.replaceArrow(delta - width + actualWidth, actualWidth, 'left') | ||
} else { | ||
this.replaceArrow(actualHeight - height, actualHeight, 'top') | ||
} | ||
if (replace) $tip.offset(offset) | ||
} | ||
, replaceArrow: function(delta, dimension, position){ | ||
this | ||
.arrow() | ||
.css(position, delta ? (50 * (1 - delta / dimension) + "%") : '') | ||
} | ||
, setContent: function () { | ||
@@ -919,3 +1283,7 @@ var $tip = this.tip() | ||
, $tip = this.tip() | ||
, e = $.Event('hide') | ||
this.$element.trigger(e) | ||
if (e.isDefaultPrevented()) return | ||
$tip.removeClass('in') | ||
@@ -925,3 +1293,3 @@ | ||
var timeout = setTimeout(function () { | ||
$tip.off($.support.transition.end).remove() | ||
$tip.off($.support.transition.end).detach() | ||
}, 500) | ||
@@ -931,3 +1299,3 @@ | ||
clearTimeout(timeout) | ||
$tip.remove() | ||
$tip.detach() | ||
}) | ||
@@ -938,4 +1306,6 @@ } | ||
removeWithAnimation() : | ||
$tip.remove() | ||
$tip.detach() | ||
this.$element.trigger('hidden') | ||
return this | ||
@@ -947,3 +1317,3 @@ } | ||
if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') { | ||
$e.attr('data-original-title', $e.attr('title') || '').removeAttr('title') | ||
$e.attr('data-original-title', $e.attr('title') || '').attr('title', '') | ||
} | ||
@@ -956,7 +1326,8 @@ } | ||
, getPosition: function (inside) { | ||
return $.extend({}, (inside ? {top: 0, left: 0} : this.$element.offset()), { | ||
width: this.$element[0].offsetWidth | ||
, height: this.$element[0].offsetHeight | ||
}) | ||
, getPosition: function () { | ||
var el = this.$element[0] | ||
return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : { | ||
width: el.offsetWidth | ||
, height: el.offsetHeight | ||
}, this.$element.offset()) | ||
} | ||
@@ -979,2 +1350,6 @@ | ||
, arrow: function(){ | ||
return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow") | ||
} | ||
, validate: function () { | ||
@@ -1000,4 +1375,5 @@ if (!this.$element[0].parentNode) { | ||
, toggle: function () { | ||
this[this.tip().hasClass('in') ? 'hide' : 'show']() | ||
, toggle: function (e) { | ||
var self = e ? $(e.currentTarget)[this.type](this._options).data(this.type) : this | ||
self.tip().hasClass('in') ? self.hide() : self.show() | ||
} | ||
@@ -1015,2 +1391,4 @@ | ||
var old = $.fn.tooltip | ||
$.fn.tooltip = function ( option ) { | ||
@@ -1033,12 +1411,21 @@ return this.each(function () { | ||
, template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>' | ||
, trigger: 'hover' | ||
, trigger: 'hover focus' | ||
, title: '' | ||
, delay: 0 | ||
, html: true | ||
, html: false | ||
, container: false | ||
} | ||
/* TOOLTIP NO CONFLICT | ||
* =================== */ | ||
$.fn.tooltip.noConflict = function () { | ||
$.fn.tooltip = old | ||
return this | ||
} | ||
}(window.jQuery); | ||
/* =========================================================== | ||
* bootstrap-popover.js v2.1.0 | ||
* bootstrap-popover.js v2.3.0 | ||
* http://twitter.github.com/bootstrap/javascript.html#popovers | ||
@@ -1088,3 +1475,3 @@ * =========================================================== | ||
$tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) | ||
$tip.find('.popover-content > *')[this.options.html ? 'html' : 'text'](content) | ||
$tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content) | ||
@@ -1103,4 +1490,4 @@ $tip.removeClass('fade top bottom left right in') | ||
content = $e.attr('data-content') | ||
|| (typeof o.content == 'function' ? o.content.call($e[0]) : o.content) | ||
content = (typeof o.content == 'function' ? o.content.call($e[0]) : o.content) | ||
|| $e.attr('data-content') | ||
@@ -1127,2 +1514,4 @@ return content | ||
var old = $.fn.popover | ||
$.fn.popover = function (option) { | ||
@@ -1144,114 +1533,19 @@ return this.each(function () { | ||
, content: '' | ||
, template: '<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>' | ||
, template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>' | ||
}) | ||
}(window.jQuery); | ||
/* ========================================================== | ||
* bootstrap-affix.js v2.1.0 | ||
* http://twitter.github.com/bootstrap/javascript.html#affix | ||
* ========================================================== | ||
* Copyright 2012 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. | ||
* ========================================================== */ | ||
/* POPOVER NO CONFLICT | ||
* =================== */ | ||
!function ($) { | ||
"use strict"; // jshint ;_; | ||
/* AFFIX CLASS DEFINITION | ||
* ====================== */ | ||
var Affix = function (element, options) { | ||
this.options = $.extend({}, $.fn.affix.defaults, options) | ||
this.$window = $(window).on('scroll.affix.data-api', $.proxy(this.checkPosition, this)) | ||
this.$element = $(element) | ||
this.checkPosition() | ||
$.fn.popover.noConflict = function () { | ||
$.fn.popover = old | ||
return this | ||
} | ||
Affix.prototype.checkPosition = function () { | ||
if (!this.$element.is(':visible')) return | ||
var scrollHeight = $(document).height() | ||
, scrollTop = this.$window.scrollTop() | ||
, position = this.$element.offset() | ||
, offset = this.options.offset | ||
, offsetBottom = offset.bottom | ||
, offsetTop = offset.top | ||
, reset = 'affix affix-top affix-bottom' | ||
, affix | ||
if (typeof offset != 'object') offsetBottom = offsetTop = offset | ||
if (typeof offsetTop == 'function') offsetTop = offset.top() | ||
if (typeof offsetBottom == 'function') offsetBottom = offset.bottom() | ||
affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? | ||
false : offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? | ||
'bottom' : offsetTop != null && scrollTop <= offsetTop ? | ||
'top' : false | ||
if (this.affixed === affix) return | ||
this.affixed = affix | ||
this.unpin = affix == 'bottom' ? position.top - scrollTop : null | ||
this.$element.removeClass(reset).addClass('affix' + (affix ? '-' + affix : '')) | ||
} | ||
/* AFFIX PLUGIN DEFINITION | ||
* ======================= */ | ||
$.fn.affix = function (option) { | ||
return this.each(function () { | ||
var $this = $(this) | ||
, data = $this.data('affix') | ||
, options = typeof option == 'object' && option | ||
if (!data) $this.data('affix', (data = new Affix(this, options))) | ||
if (typeof option == 'string') data[option]() | ||
}) | ||
} | ||
$.fn.affix.Constructor = Affix | ||
$.fn.affix.defaults = { | ||
offset: 0 | ||
} | ||
/* AFFIX DATA-API | ||
* ============== */ | ||
$(window).on('load', function () { | ||
$('[data-spy="affix"]').each(function () { | ||
var $spy = $(this) | ||
, data = $spy.data() | ||
data.offset = data.offset || {} | ||
data.offsetBottom && (data.offset.bottom = data.offsetBottom) | ||
data.offsetTop && (data.offset.top = data.offsetTop) | ||
$spy.affix(data) | ||
}) | ||
}) | ||
}(window.jQuery); | ||
/* ========================================================== | ||
* bootstrap-alert.js v2.1.0 | ||
* http://twitter.github.com/bootstrap/javascript.html#alerts | ||
* ========================================================== | ||
/* ============================================================= | ||
* bootstrap-scrollspy.js v2.3.0 | ||
* http://twitter.github.com/bootstrap/javascript.html#scrollspy | ||
* ============================================================= | ||
* Copyright 2012 Twitter, Inc. | ||
@@ -1270,3 +1564,3 @@ * | ||
* limitations under the License. | ||
* ========================================================== */ | ||
* ============================================================== */ | ||
@@ -1279,167 +1573,142 @@ | ||
/* ALERT CLASS DEFINITION | ||
* ====================== */ | ||
/* SCROLLSPY CLASS DEFINITION | ||
* ========================== */ | ||
var dismiss = '[data-dismiss="alert"]' | ||
, Alert = function (el) { | ||
$(el).on('click', dismiss, this.close) | ||
} | ||
Alert.prototype.close = function (e) { | ||
var $this = $(this) | ||
, selector = $this.attr('data-target') | ||
, $parent | ||
if (!selector) { | ||
selector = $this.attr('href') | ||
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 | ||
} | ||
$parent = $(selector) | ||
e && e.preventDefault() | ||
$parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent()) | ||
$parent.trigger(e = $.Event('close')) | ||
if (e.isDefaultPrevented()) return | ||
$parent.removeClass('in') | ||
function removeElement() { | ||
$parent | ||
.trigger('closed') | ||
.remove() | ||
} | ||
$.support.transition && $parent.hasClass('fade') ? | ||
$parent.on($.support.transition.end, removeElement) : | ||
removeElement() | ||
function ScrollSpy(element, options) { | ||
var process = $.proxy(this.process, this) | ||
, $element = $(element).is('body') ? $(window) : $(element) | ||
, href | ||
this.options = $.extend({}, $.fn.scrollspy.defaults, options) | ||
this.$scrollElement = $element.on('scroll.scroll-spy.data-api', process) | ||
this.selector = (this.options.target | ||
|| ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 | ||
|| '') + ' .nav li > a' | ||
this.$body = $('body') | ||
this.refresh() | ||
this.process() | ||
} | ||
ScrollSpy.prototype = { | ||
/* ALERT PLUGIN DEFINITION | ||
* ======================= */ | ||
constructor: ScrollSpy | ||
$.fn.alert = function (option) { | ||
return this.each(function () { | ||
var $this = $(this) | ||
, data = $this.data('alert') | ||
if (!data) $this.data('alert', (data = new Alert(this))) | ||
if (typeof option == 'string') data[option].call($this) | ||
}) | ||
} | ||
, refresh: function () { | ||
var self = this | ||
, $targets | ||
$.fn.alert.Constructor = Alert | ||
this.offsets = $([]) | ||
this.targets = $([]) | ||
$targets = this.$body | ||
.find(this.selector) | ||
.map(function () { | ||
var $el = $(this) | ||
, href = $el.data('target') || $el.attr('href') | ||
, $href = /^#\w/.test(href) && $(href) | ||
return ( $href | ||
&& $href.length | ||
&& [[ $href.position().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]] ) || null | ||
}) | ||
.sort(function (a, b) { return a[0] - b[0] }) | ||
.each(function () { | ||
self.offsets.push(this[0]) | ||
self.targets.push(this[1]) | ||
}) | ||
} | ||
/* ALERT DATA-API | ||
* ============== */ | ||
, process: function () { | ||
var scrollTop = this.$scrollElement.scrollTop() + this.options.offset | ||
, scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight | ||
, maxScroll = scrollHeight - this.$scrollElement.height() | ||
, offsets = this.offsets | ||
, targets = this.targets | ||
, activeTarget = this.activeTarget | ||
, i | ||
$(function () { | ||
$('body').on('click.alert.data-api', dismiss, Alert.prototype.close) | ||
}) | ||
if (scrollTop >= maxScroll) { | ||
return activeTarget != (i = targets.last()[0]) | ||
&& this.activate ( i ) | ||
} | ||
}(window.jQuery); | ||
/* ============================================================ | ||
* bootstrap-button.js v2.1.0 | ||
* http://twitter.github.com/bootstrap/javascript.html#buttons | ||
* ============================================================ | ||
* Copyright 2012 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. | ||
* ============================================================ */ | ||
for (i = offsets.length; i--;) { | ||
activeTarget != targets[i] | ||
&& scrollTop >= offsets[i] | ||
&& (!offsets[i + 1] || scrollTop <= offsets[i + 1]) | ||
&& this.activate( targets[i] ) | ||
} | ||
} | ||
, activate: function (target) { | ||
var active | ||
, selector | ||
!function ($) { | ||
this.activeTarget = target | ||
"use strict"; // jshint ;_; | ||
$(this.selector) | ||
.parent('.active') | ||
.removeClass('active') | ||
selector = this.selector | ||
+ '[data-target="' + target + '"],' | ||
+ this.selector + '[href="' + target + '"]' | ||
/* BUTTON PUBLIC CLASS DEFINITION | ||
* ============================== */ | ||
active = $(selector) | ||
.parent('li') | ||
.addClass('active') | ||
var Button = function (element, options) { | ||
this.$element = $(element) | ||
this.options = $.extend({}, $.fn.button.defaults, options) | ||
} | ||
if (active.parent('.dropdown-menu').length) { | ||
active = active.closest('li.dropdown').addClass('active') | ||
} | ||
Button.prototype.setState = function (state) { | ||
var d = 'disabled' | ||
, $el = this.$element | ||
, data = $el.data() | ||
, val = $el.is('input') ? 'val' : 'html' | ||
active.trigger('activate') | ||
} | ||
state = state + 'Text' | ||
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.parent('[data-toggle="buttons-radio"]') | ||
$parent && $parent | ||
.find('.active') | ||
.removeClass('active') | ||
/* SCROLLSPY PLUGIN DEFINITION | ||
* =========================== */ | ||
this.$element.toggleClass('active') | ||
} | ||
var old = $.fn.scrollspy | ||
/* BUTTON PLUGIN DEFINITION | ||
* ======================== */ | ||
$.fn.button = function (option) { | ||
$.fn.scrollspy = function (option) { | ||
return this.each(function () { | ||
var $this = $(this) | ||
, data = $this.data('button') | ||
, data = $this.data('scrollspy') | ||
, options = typeof option == 'object' && option | ||
if (!data) $this.data('button', (data = new Button(this, options))) | ||
if (option == 'toggle') data.toggle() | ||
else if (option) data.setState(option) | ||
if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options))) | ||
if (typeof option == 'string') data[option]() | ||
}) | ||
} | ||
$.fn.button.defaults = { | ||
loadingText: 'loading...' | ||
$.fn.scrollspy.Constructor = ScrollSpy | ||
$.fn.scrollspy.defaults = { | ||
offset: 10 | ||
} | ||
$.fn.button.Constructor = Button | ||
/* SCROLLSPY NO CONFLICT | ||
* ===================== */ | ||
/* BUTTON DATA-API | ||
* =============== */ | ||
$.fn.scrollspy.noConflict = function () { | ||
$.fn.scrollspy = old | ||
return this | ||
} | ||
$(function () { | ||
$('body').on('click.button.data-api', '[data-toggle^=button]', function ( e ) { | ||
var $btn = $(e.target) | ||
if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') | ||
$btn.button('toggle') | ||
/* SCROLLSPY DATA-API | ||
* ================== */ | ||
$(window).on('load', function () { | ||
$('[data-spy="scroll"]').each(function () { | ||
var $spy = $(this) | ||
$spy.scrollspy($spy.data()) | ||
}) | ||
}) | ||
}(window.jQuery); | ||
/* ============================================================= | ||
* bootstrap-collapse.js v2.1.0 | ||
* http://twitter.github.com/bootstrap/javascript.html#collapse | ||
* ============================================================= | ||
}(window.jQuery);/* ======================================================== | ||
* bootstrap-tab.js v2.3.0 | ||
* http://twitter.github.com/bootstrap/javascript.html#tabs | ||
* ======================================================== | ||
* Copyright 2012 Twitter, Inc. | ||
@@ -1458,3 +1727,3 @@ * | ||
* limitations under the License. | ||
* ============================================================ */ | ||
* ======================================================== */ | ||
@@ -1467,108 +1736,96 @@ | ||
/* COLLAPSE PUBLIC CLASS DEFINITION | ||
* ================================ */ | ||
/* TAB CLASS DEFINITION | ||
* ==================== */ | ||
var Collapse = function (element, options) { | ||
this.$element = $(element) | ||
this.options = $.extend({}, $.fn.collapse.defaults, options) | ||
if (this.options.parent) { | ||
this.$parent = $(this.options.parent) | ||
} | ||
this.options.toggle && this.toggle() | ||
var Tab = function (element) { | ||
this.element = $(element) | ||
} | ||
Collapse.prototype = { | ||
Tab.prototype = { | ||
constructor: Collapse | ||
constructor: Tab | ||
, dimension: function () { | ||
var hasWidth = this.$element.hasClass('width') | ||
return hasWidth ? 'width' : 'height' | ||
} | ||
, show: function () { | ||
var dimension | ||
, scroll | ||
, actives | ||
, hasData | ||
var $this = this.element | ||
, $ul = $this.closest('ul:not(.dropdown-menu)') | ||
, selector = $this.attr('data-target') | ||
, previous | ||
, $target | ||
, e | ||
if (this.transitioning) return | ||
if (!selector) { | ||
selector = $this.attr('href') | ||
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 | ||
} | ||
dimension = this.dimension() | ||
scroll = $.camelCase(['scroll', dimension].join('-')) | ||
actives = this.$parent && this.$parent.find('> .accordion-group > .in') | ||
if ( $this.parent('li').hasClass('active') ) return | ||
if (actives && actives.length) { | ||
hasData = actives.data('collapse') | ||
if (hasData && hasData.transitioning) return | ||
actives.collapse('hide') | ||
hasData || actives.data('collapse', null) | ||
} | ||
previous = $ul.find('.active:last a')[0] | ||
this.$element[dimension](0) | ||
this.transition('addClass', $.Event('show'), 'shown') | ||
$.support.transition && this.$element[dimension](this.$element[0][scroll]) | ||
} | ||
e = $.Event('show', { | ||
relatedTarget: previous | ||
}) | ||
, hide: function () { | ||
var dimension | ||
if (this.transitioning) return | ||
dimension = this.dimension() | ||
this.reset(this.$element[dimension]()) | ||
this.transition('removeClass', $.Event('hide'), 'hidden') | ||
this.$element[dimension](0) | ||
} | ||
$this.trigger(e) | ||
, reset: function (size) { | ||
var dimension = this.dimension() | ||
if (e.isDefaultPrevented()) return | ||
this.$element | ||
.removeClass('collapse') | ||
[dimension](size || 'auto') | ||
[0].offsetWidth | ||
$target = $(selector) | ||
this.$element[size !== null ? 'addClass' : 'removeClass']('collapse') | ||
return this | ||
this.activate($this.parent('li'), $ul) | ||
this.activate($target, $target.parent(), function () { | ||
$this.trigger({ | ||
type: 'shown' | ||
, relatedTarget: previous | ||
}) | ||
}) | ||
} | ||
, transition: function (method, startEvent, completeEvent) { | ||
var that = this | ||
, complete = function () { | ||
if (startEvent.type == 'show') that.reset() | ||
that.transitioning = 0 | ||
that.$element.trigger(completeEvent) | ||
} | ||
, activate: function ( element, container, callback) { | ||
var $active = container.find('> .active') | ||
, transition = callback | ||
&& $.support.transition | ||
&& $active.hasClass('fade') | ||
this.$element.trigger(startEvent) | ||
function next() { | ||
$active | ||
.removeClass('active') | ||
.find('> .dropdown-menu > .active') | ||
.removeClass('active') | ||
if (startEvent.isDefaultPrevented()) return | ||
element.addClass('active') | ||
this.transitioning = 1 | ||
if (transition) { | ||
element[0].offsetWidth // reflow for transition | ||
element.addClass('in') | ||
} else { | ||
element.removeClass('fade') | ||
} | ||
this.$element[method]('in') | ||
if ( element.parent('.dropdown-menu') ) { | ||
element.closest('li.dropdown').addClass('active') | ||
} | ||
$.support.transition && this.$element.hasClass('collapse') ? | ||
this.$element.one($.support.transition.end, complete) : | ||
complete() | ||
} | ||
callback && callback() | ||
} | ||
, toggle: function () { | ||
this[this.$element.hasClass('in') ? 'hide' : 'show']() | ||
transition ? | ||
$active.one($.support.transition.end, next) : | ||
next() | ||
$active.removeClass('in') | ||
} | ||
} | ||
/* COLLAPSIBLE PLUGIN DEFINITION | ||
* ============================== */ | ||
/* TAB PLUGIN DEFINITION | ||
* ===================== */ | ||
$.fn.collapse = function (option) { | ||
var old = $.fn.tab | ||
$.fn.tab = function ( option ) { | ||
return this.each(function () { | ||
var $this = $(this) | ||
, data = $this.data('collapse') | ||
, options = typeof option == 'object' && option | ||
if (!data) $this.data('collapse', (data = new Collapse(this, options))) | ||
, data = $this.data('tab') | ||
if (!data) $this.data('tab', (data = new Tab(this))) | ||
if (typeof option == 'string') data[option]() | ||
@@ -1578,203 +1835,24 @@ }) | ||
$.fn.collapse.defaults = { | ||
toggle: true | ||
} | ||
$.fn.tab.Constructor = Tab | ||
$.fn.collapse.Constructor = Collapse | ||
/* TAB NO CONFLICT | ||
* =============== */ | ||
/* COLLAPSIBLE DATA-API | ||
* ==================== */ | ||
$(function () { | ||
$('body').on('click.collapse.data-api', '[data-toggle=collapse]', function (e) { | ||
var $this = $(this), href | ||
, target = $this.attr('data-target') | ||
|| e.preventDefault() | ||
|| (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 | ||
, option = $(target).data('collapse') ? 'toggle' : $this.data() | ||
$this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed') | ||
$(target).collapse(option) | ||
}) | ||
}) | ||
}(window.jQuery); | ||
/* ========================================================== | ||
* bootstrap-carousel.js v2.1.0 | ||
* http://twitter.github.com/bootstrap/javascript.html#carousel | ||
* ========================================================== | ||
* Copyright 2012 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"; // jshint ;_; | ||
/* CAROUSEL CLASS DEFINITION | ||
* ========================= */ | ||
var Carousel = function (element, options) { | ||
this.$element = $(element) | ||
this.options = options | ||
this.options.slide && this.slide(this.options.slide) | ||
this.options.pause == 'hover' && this.$element | ||
.on('mouseenter', $.proxy(this.pause, this)) | ||
.on('mouseleave', $.proxy(this.cycle, this)) | ||
$.fn.tab.noConflict = function () { | ||
$.fn.tab = old | ||
return this | ||
} | ||
Carousel.prototype = { | ||
cycle: function (e) { | ||
if (!e) this.paused = false | ||
this.options.interval | ||
&& !this.paused | ||
&& (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) | ||
return this | ||
} | ||
/* TAB DATA-API | ||
* ============ */ | ||
, to: function (pos) { | ||
var $active = this.$element.find('.item.active') | ||
, children = $active.parent().children() | ||
, activePos = children.index($active) | ||
, that = this | ||
if (pos > (children.length - 1) || pos < 0) return | ||
if (this.sliding) { | ||
return this.$element.one('slid', function () { | ||
that.to(pos) | ||
}) | ||
} | ||
if (activePos == pos) { | ||
return this.pause().cycle() | ||
} | ||
return this.slide(pos > activePos ? 'next' : 'prev', $(children[pos])) | ||
} | ||
, pause: function (e) { | ||
if (!e) this.paused = true | ||
if (this.$element.find('.next, .prev').length && $.support.transition.end) { | ||
this.$element.trigger($.support.transition.end) | ||
this.cycle() | ||
} | ||
clearInterval(this.interval) | ||
this.interval = null | ||
return this | ||
} | ||
, next: function () { | ||
if (this.sliding) return | ||
return this.slide('next') | ||
} | ||
, prev: function () { | ||
if (this.sliding) return | ||
return this.slide('prev') | ||
} | ||
, slide: function (type, next) { | ||
var $active = this.$element.find('.item.active') | ||
, $next = next || $active[type]() | ||
, isCycling = this.interval | ||
, direction = type == 'next' ? 'left' : 'right' | ||
, fallback = type == 'next' ? 'first' : 'last' | ||
, that = this | ||
, e = $.Event('slide', { | ||
relatedTarget: $next[0] | ||
}) | ||
this.sliding = true | ||
isCycling && this.pause() | ||
$next = $next.length ? $next : this.$element.find('.item')[fallback]() | ||
if ($next.hasClass('active')) return | ||
if ($.support.transition && this.$element.hasClass('slide')) { | ||
this.$element.trigger(e) | ||
if (e.isDefaultPrevented()) return | ||
$next.addClass(type) | ||
$next[0].offsetWidth // force reflow | ||
$active.addClass(direction) | ||
$next.addClass(direction) | ||
this.$element.one($.support.transition.end, function () { | ||
$next.removeClass([type, direction].join(' ')).addClass('active') | ||
$active.removeClass(['active', direction].join(' ')) | ||
that.sliding = false | ||
setTimeout(function () { that.$element.trigger('slid') }, 0) | ||
}) | ||
} else { | ||
this.$element.trigger(e) | ||
if (e.isDefaultPrevented()) return | ||
$active.removeClass('active') | ||
$next.addClass('active') | ||
this.sliding = false | ||
this.$element.trigger('slid') | ||
} | ||
isCycling && this.cycle() | ||
return this | ||
} | ||
} | ||
/* CAROUSEL PLUGIN DEFINITION | ||
* ========================== */ | ||
$.fn.carousel = function (option) { | ||
return this.each(function () { | ||
var $this = $(this) | ||
, data = $this.data('carousel') | ||
, options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option) | ||
, action = typeof option == 'string' ? option : options.slide | ||
if (!data) $this.data('carousel', (data = new Carousel(this, options))) | ||
if (typeof option == 'number') data.to(option) | ||
else if (action) data[action]() | ||
else if (options.interval) data.cycle() | ||
}) | ||
} | ||
$.fn.carousel.defaults = { | ||
interval: 5000 | ||
, pause: 'hover' | ||
} | ||
$.fn.carousel.Constructor = Carousel | ||
/* CAROUSEL DATA-API | ||
* ================= */ | ||
$(function () { | ||
$('body').on('click.carousel.data-api', '[data-slide]', function ( e ) { | ||
var $this = $(this), href | ||
, $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 | ||
, options = !$target.data('modal') && $.extend({}, $target.data(), $this.data()) | ||
$target.carousel(options) | ||
e.preventDefault() | ||
}) | ||
$(document).on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) { | ||
e.preventDefault() | ||
$(this).tab('show') | ||
}) | ||
}(window.jQuery); | ||
/* ============================================================= | ||
* bootstrap-typeahead.js v2.1.0 | ||
}(window.jQuery);/* ============================================================= | ||
* bootstrap-typeahead.js v2.3.0 | ||
* http://twitter.github.com/bootstrap/javascript.html#typeahead | ||
@@ -1813,4 +1891,4 @@ * ============================================================= | ||
this.updater = this.options.updater || this.updater | ||
this.$menu = $(this.options.menu).appendTo('body') | ||
this.source = this.options.source | ||
this.$menu = $(this.options.menu) | ||
this.shown = false | ||
@@ -1837,12 +1915,14 @@ this.listen() | ||
, show: function () { | ||
var pos = $.extend({}, this.$element.offset(), { | ||
var pos = $.extend({}, this.$element.position(), { | ||
height: this.$element[0].offsetHeight | ||
}) | ||
this.$menu.css({ | ||
top: pos.top + pos.height | ||
, left: pos.left | ||
}) | ||
this.$menu | ||
.insertAfter(this.$element) | ||
.css({ | ||
top: pos.top + pos.height | ||
, left: pos.left | ||
}) | ||
.show() | ||
this.$menu.show() | ||
this.shown = true | ||
@@ -1952,2 +2032,3 @@ return this | ||
this.$element | ||
.on('focus', $.proxy(this.focus, this)) | ||
.on('blur', $.proxy(this.blur, this)) | ||
@@ -1957,3 +2038,3 @@ .on('keypress', $.proxy(this.keypress, this)) | ||
if ($.browser.webkit || $.browser.msie) { | ||
if (this.eventSupported('keydown')) { | ||
this.$element.on('keydown', $.proxy(this.keydown, this)) | ||
@@ -1965,4 +2046,14 @@ } | ||
.on('mouseenter', 'li', $.proxy(this.mouseenter, this)) | ||
.on('mouseleave', 'li', $.proxy(this.mouseleave, this)) | ||
} | ||
, eventSupported: function(eventName) { | ||
var isSupported = eventName in this.$element | ||
if (!isSupported) { | ||
this.$element.setAttribute(eventName, 'return;') | ||
isSupported = typeof this.$element[eventName] === 'function' | ||
} | ||
return isSupported | ||
} | ||
, move: function (e) { | ||
@@ -1993,3 +2084,3 @@ if (!this.shown) return | ||
, keydown: function (e) { | ||
this.suppressKeyPressRepeat = !~$.inArray(e.keyCode, [40,38,9,13,27]) | ||
this.suppressKeyPressRepeat = ~$.inArray(e.keyCode, [40,38,9,13,27]) | ||
this.move(e) | ||
@@ -2007,2 +2098,5 @@ } | ||
case 38: // up arrow | ||
case 16: // shift | ||
case 17: // ctrl | ||
case 18: // alt | ||
break | ||
@@ -2029,5 +2123,9 @@ | ||
, focus: function (e) { | ||
this.focused = true | ||
} | ||
, blur: function (e) { | ||
var that = this | ||
setTimeout(function () { that.hide() }, 150) | ||
this.focused = false | ||
if (!this.mousedover && this.shown) this.hide() | ||
} | ||
@@ -2039,5 +2137,7 @@ | ||
this.select() | ||
this.$element.focus() | ||
} | ||
, mouseenter: function (e) { | ||
this.mousedover = true | ||
this.$menu.find('.active').removeClass('active') | ||
@@ -2047,2 +2147,7 @@ $(e.currentTarget).addClass('active') | ||
, mouseleave: function (e) { | ||
this.mousedover = false | ||
if (!this.focused && this.shown) this.hide() | ||
} | ||
} | ||
@@ -2054,2 +2159,4 @@ | ||
var old = $.fn.typeahead | ||
$.fn.typeahead = function (option) { | ||
@@ -2076,14 +2183,137 @@ return this.each(function () { | ||
/* TYPEAHEAD DATA-API | ||
/* TYPEAHEAD NO CONFLICT | ||
* =================== */ | ||
$.fn.typeahead.noConflict = function () { | ||
$.fn.typeahead = old | ||
return this | ||
} | ||
/* TYPEAHEAD DATA-API | ||
* ================== */ | ||
$(function () { | ||
$('body').on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) { | ||
$(document).on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) { | ||
var $this = $(this) | ||
if ($this.data('typeahead')) return | ||
$this.typeahead($this.data()) | ||
}) | ||
}(window.jQuery); | ||
/* ========================================================== | ||
* bootstrap-affix.js v2.3.0 | ||
* http://twitter.github.com/bootstrap/javascript.html#affix | ||
* ========================================================== | ||
* Copyright 2012 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"; // jshint ;_; | ||
/* AFFIX CLASS DEFINITION | ||
* ====================== */ | ||
var Affix = function (element, options) { | ||
this.options = $.extend({}, $.fn.affix.defaults, options) | ||
this.$window = $(window) | ||
.on('scroll.affix.data-api', $.proxy(this.checkPosition, this)) | ||
.on('click.affix.data-api', $.proxy(function () { setTimeout($.proxy(this.checkPosition, this), 1) }, this)) | ||
this.$element = $(element) | ||
this.checkPosition() | ||
} | ||
Affix.prototype.checkPosition = function () { | ||
if (!this.$element.is(':visible')) return | ||
var scrollHeight = $(document).height() | ||
, scrollTop = this.$window.scrollTop() | ||
, position = this.$element.offset() | ||
, offset = this.options.offset | ||
, offsetBottom = offset.bottom | ||
, offsetTop = offset.top | ||
, reset = 'affix affix-top affix-bottom' | ||
, affix | ||
if (typeof offset != 'object') offsetBottom = offsetTop = offset | ||
if (typeof offsetTop == 'function') offsetTop = offset.top() | ||
if (typeof offsetBottom == 'function') offsetBottom = offset.bottom() | ||
affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? | ||
false : offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? | ||
'bottom' : offsetTop != null && scrollTop <= offsetTop ? | ||
'top' : false | ||
if (this.affixed === affix) return | ||
this.affixed = affix | ||
this.unpin = affix == 'bottom' ? position.top - scrollTop : null | ||
this.$element.removeClass(reset).addClass('affix' + (affix ? '-' + affix : '')) | ||
} | ||
/* AFFIX PLUGIN DEFINITION | ||
* ======================= */ | ||
var old = $.fn.affix | ||
$.fn.affix = function (option) { | ||
return this.each(function () { | ||
var $this = $(this) | ||
if ($this.data('typeahead')) return | ||
e.preventDefault() | ||
$this.typeahead($this.data()) | ||
, data = $this.data('affix') | ||
, options = typeof option == 'object' && option | ||
if (!data) $this.data('affix', (data = new Affix(this, options))) | ||
if (typeof option == 'string') data[option]() | ||
}) | ||
} | ||
$.fn.affix.Constructor = Affix | ||
$.fn.affix.defaults = { | ||
offset: 0 | ||
} | ||
/* AFFIX NO CONFLICT | ||
* ================= */ | ||
$.fn.affix.noConflict = function () { | ||
$.fn.affix = old | ||
return this | ||
} | ||
/* AFFIX DATA-API | ||
* ============== */ | ||
$(window).on('load', function () { | ||
$('[data-spy="affix"]').each(function () { | ||
var $spy = $(this) | ||
, data = $spy.data() | ||
data.offset = data.offset || {} | ||
data.offsetBottom && (data.offset.bottom = data.offsetBottom) | ||
data.offsetTop && (data.offset.top = data.offsetTop) | ||
$spy.affix(data) | ||
}) | ||
}) | ||
}(window.jQuery); | ||
}(window.jQuery); |
@@ -1,7 +0,6 @@ | ||
/** | ||
/*! | ||
* Bootstrap.js by @fat & @mdo | ||
* plugins: bootstrap-transition.js, bootstrap-modal.js, bootstrap-dropdown.js, bootstrap-scrollspy.js, bootstrap-tab.js, bootstrap-tooltip.js, bootstrap-popover.js, bootstrap-affix.js, bootstrap-alert.js, bootstrap-button.js, bootstrap-collapse.js, bootstrap-carousel.js, bootstrap-typeahead.js | ||
* Copyright 2012 Twitter, Inc. | ||
* http://www.apache.org/licenses/LICENSE-2.0.txt | ||
*/ | ||
!function(a){a(function(){a.support.transition=function(){var a=function(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},c;for(c in b)if(a.style[c]!==undefined)return b[c]}();return a&&{end:a}}()})}(window.jQuery),!function(a){var b=function(b,c){this.options=c,this.$element=a(b).delegate('[data-dismiss="modal"]',"click.dismiss.modal",a.proxy(this.hide,this)),this.options.remote&&this.$element.find(".modal-body").load(this.options.remote)};b.prototype={constructor:b,toggle:function(){return this[this.isShown?"hide":"show"]()},show:function(){var b=this,c=a.Event("show");this.$element.trigger(c);if(this.isShown||c.isDefaultPrevented())return;a("body").addClass("modal-open"),this.isShown=!0,this.escape(),this.backdrop(function(){var c=a.support.transition&&b.$element.hasClass("fade");b.$element.parent().length||b.$element.appendTo(document.body),b.$element.show(),c&&b.$element[0].offsetWidth,b.$element.addClass("in").attr("aria-hidden",!1).focus(),b.enforceFocus(),c?b.$element.one(a.support.transition.end,function(){b.$element.trigger("shown")}):b.$element.trigger("shown")})},hide:function(b){b&&b.preventDefault();var c=this;b=a.Event("hide"),this.$element.trigger(b);if(!this.isShown||b.isDefaultPrevented())return;this.isShown=!1,a("body").removeClass("modal-open"),this.escape(),a(document).off("focusin.modal"),this.$element.removeClass("in").attr("aria-hidden",!0),a.support.transition&&this.$element.hasClass("fade")?this.hideWithTransition():this.hideModal()},enforceFocus:function(){var b=this;a(document).on("focusin.modal",function(a){b.$element[0]!==a.target&&!b.$element.has(a.target).length&&b.$element.focus()})},escape:function(){var a=this;this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.modal",function(b){b.which==27&&a.hide()}):this.isShown||this.$element.off("keyup.dismiss.modal")},hideWithTransition:function(){var b=this,c=setTimeout(function(){b.$element.off(a.support.transition.end),b.hideModal()},500);this.$element.one(a.support.transition.end,function(){clearTimeout(c),b.hideModal()})},hideModal:function(a){this.$element.hide().trigger("hidden"),this.backdrop()},removeBackdrop:function(){this.$backdrop.remove(),this.$backdrop=null},backdrop:function(b){var c=this,d=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var e=a.support.transition&&d;this.$backdrop=a('<div class="modal-backdrop '+d+'" />').appendTo(document.body),this.options.backdrop!="static"&&this.$backdrop.click(a.proxy(this.hide,this)),e&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),e?this.$backdrop.one(a.support.transition.end,b):b()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(a.support.transition.end,a.proxy(this.removeBackdrop,this)):this.removeBackdrop()):b&&b()}},a.fn.modal=function(c){return this.each(function(){var d=a(this),e=d.data("modal"),f=a.extend({},a.fn.modal.defaults,d.data(),typeof c=="object"&&c);e||d.data("modal",e=new b(this,f)),typeof c=="string"?e[c]():f.show&&e.show()})},a.fn.modal.defaults={backdrop:!0,keyboard:!0,show:!0},a.fn.modal.Constructor=b,a(function(){a("body").on("click.modal.data-api",'[data-toggle="modal"]',function(b){var c=a(this),d=c.attr("href"),e=a(c.attr("data-target")||d&&d.replace(/.*(?=#[^\s]+$)/,"")),f=e.data("modal")?"toggle":a.extend({remote:!/#/.test(d)&&d},e.data(),c.data());b.preventDefault(),e.modal(f).one("hide",function(){c.focus()})})})}(window.jQuery),!function(a){function d(){e(a(b)).removeClass("open")}function e(b){var c=b.attr("data-target"),d;return c||(c=b.attr("href"),c=c&&c.replace(/.*(?=#[^\s]*$)/,"")),d=a(c),d.length||(d=b.parent()),d}var b="[data-toggle=dropdown]",c=function(b){var c=a(b).on("click.dropdown.data-api",this.toggle);a("html").on("click.dropdown.data-api",function(){c.parent().removeClass("open")})};c.prototype={constructor:c,toggle:function(b){var c=a(this),f,g;if(c.is(".disabled, :disabled"))return;return f=e(c),g=f.hasClass("open"),d(),g||(f.toggleClass("open"),c.focus()),!1},keydown:function(b){var c,d,f,g,h,i;if(!/(38|40|27)/.test(b.keyCode))return;c=a(this),b.preventDefault(),b.stopPropagation();if(c.is(".disabled, :disabled"))return;g=e(c),h=g.hasClass("open");if(!h||h&&b.keyCode==27)return c.click();d=a("[role=menu] li:not(.divider) a",g);if(!d.length)return;i=d.index(d.filter(":focus")),b.keyCode==38&&i>0&&i--,b.keyCode==40&&i<d.length-1&&i++,~i||(i=0),d.eq(i).focus()}},a.fn.dropdown=function(b){return this.each(function(){var d=a(this),e=d.data("dropdown");e||d.data("dropdown",e=new c(this)),typeof b=="string"&&e[b].call(d)})},a.fn.dropdown.Constructor=c,a(function(){a("html").on("click.dropdown.data-api touchstart.dropdown.data-api",d),a("body").on("click.dropdown touchstart.dropdown.data-api",".dropdown",function(a){a.stopPropagation()}).on("click.dropdown.data-api touchstart.dropdown.data-api",b,c.prototype.toggle).on("keydown.dropdown.data-api touchstart.dropdown.data-api",b+", [role=menu]",c.prototype.keydown)})}(window.jQuery),!function(a){function b(b,c){var d=a.proxy(this.process,this),e=a(b).is("body")?a(window):a(b),f;this.options=a.extend({},a.fn.scrollspy.defaults,c),this.$scrollElement=e.on("scroll.scroll-spy.data-api",d),this.selector=(this.options.target||(f=a(b).attr("href"))&&f.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.$body=a("body"),this.refresh(),this.process()}b.prototype={constructor:b,refresh:function(){var b=this,c;this.offsets=a([]),this.targets=a([]),c=this.$body.find(this.selector).map(function(){var b=a(this),c=b.data("target")||b.attr("href"),d=/^#\w/.test(c)&&a(c);return d&&d.length&&[[d.position().top,c]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},process:function(){var a=this.$scrollElement.scrollTop()+this.options.offset,b=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,c=b-this.$scrollElement.height(),d=this.offsets,e=this.targets,f=this.activeTarget,g;if(a>=c)return f!=(g=e.last()[0])&&this.activate(g);for(g=d.length;g--;)f!=e[g]&&a>=d[g]&&(!d[g+1]||a<=d[g+1])&&this.activate(e[g])},activate:function(b){var c,d;this.activeTarget=b,a(this.selector).parent(".active").removeClass("active"),d=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',c=a(d).parent("li").addClass("active"),c.parent(".dropdown-menu").length&&(c=c.closest("li.dropdown").addClass("active")),c.trigger("activate")}},a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("scrollspy"),f=typeof c=="object"&&c;e||d.data("scrollspy",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.defaults={offset:10},a(window).on("load",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(window.jQuery),!function(a){var b=function(b){this.element=a(b)};b.prototype={constructor:b,show:function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.attr("data-target"),e,f,g;d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,""));if(b.parent("li").hasClass("active"))return;e=c.find(".active a").last()[0],g=a.Event("show",{relatedTarget:e}),b.trigger(g);if(g.isDefaultPrevented())return;f=a(d),this.activate(b.parent("li"),c),this.activate(f,f.parent(),function(){b.trigger({type:"shown",relatedTarget:e})})},activate:function(b,c,d){function g(){e.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),f?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var e=c.find("> .active"),f=d&&a.support.transition&&e.hasClass("fade");f?e.one(a.support.transition.end,g):g(),e.removeClass("in")}},a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("tab");e||d.data("tab",e=new b(this)),typeof c=="string"&&e[c]()})},a.fn.tab.Constructor=b,a(function(){a("body").on("click.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})})}(window.jQuery),!function(a){var b=function(a,b){this.init("tooltip",a,b)};b.prototype={constructor:b,init:function(b,c,d){var e,f;this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.enabled=!0,this.options.trigger=="click"?this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this)):this.options.trigger!="manual"&&(e=this.options.trigger=="hover"?"mouseenter":"focus",f=this.options.trigger=="hover"?"mouseleave":"blur",this.$element.on(e+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(f+"."+this.type,this.options.selector,a.proxy(this.leave,this))),this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},getOptions:function(b){return b=a.extend({},a.fn[this.type].defaults,b,this.$element.data()),b.delay&&typeof b.delay=="number"&&(b.delay={show:b.delay,hide:b.delay}),b},enter:function(b){var c=a(b.currentTarget)[this.type](this._options).data(this.type);if(!c.options.delay||!c.options.delay.show)return c.show();clearTimeout(this.timeout),c.hoverState="in",this.timeout=setTimeout(function(){c.hoverState=="in"&&c.show()},c.options.delay.show)},leave:function(b){var c=a(b.currentTarget)[this.type](this._options).data(this.type);this.timeout&&clearTimeout(this.timeout);if(!c.options.delay||!c.options.delay.hide)return c.hide();c.hoverState="out",this.timeout=setTimeout(function(){c.hoverState=="out"&&c.hide()},c.options.delay.hide)},show:function(){var a,b,c,d,e,f,g;if(this.hasContent()&&this.enabled){a=this.tip(),this.setContent(),this.options.animation&&a.addClass("fade"),f=typeof this.options.placement=="function"?this.options.placement.call(this,a[0],this.$element[0]):this.options.placement,b=/in/.test(f),a.remove().css({top:0,left:0,display:"block"}).appendTo(b?this.$element:document.body),c=this.getPosition(b),d=a[0].offsetWidth,e=a[0].offsetHeight;switch(b?f.split(" ")[1]:f){case"bottom":g={top:c.top+c.height,left:c.left+c.width/2-d/2};break;case"top":g={top:c.top-e,left:c.left+c.width/2-d/2};break;case"left":g={top:c.top+c.height/2-e/2,left:c.left-d};break;case"right":g={top:c.top+c.height/2-e/2,left:c.left+c.width}}a.css(g).addClass(f).addClass("in")}},setContent:function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},hide:function(){function d(){var b=setTimeout(function(){c.off(a.support.transition.end).remove()},500);c.one(a.support.transition.end,function(){clearTimeout(b),c.remove()})}var b=this,c=this.tip();return c.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d():c.remove(),this},fixTitle:function(){var a=this.$element;(a.attr("title")||typeof a.attr("data-original-title")!="string")&&a.attr("data-original-title",a.attr("title")||"").removeAttr("title")},hasContent:function(){return this.getTitle()},getPosition:function(b){return a.extend({},b?{top:0,left:0}:this.$element.offset(),{width:this.$element[0].offsetWidth,height:this.$element[0].offsetHeight})},getTitle:function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||(typeof c.title=="function"?c.title.call(b[0]):c.title),a},tip:function(){return this.$tip=this.$tip||a(this.options.template)},validate:function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},toggleEnabled:function(){this.enabled=!this.enabled},toggle:function(){this[this.tip().hasClass("in")?"hide":"show"]()},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}},a.fn.tooltip=function(c){return this.each(function(){var d=a(this),e=d.data("tooltip"),f=typeof c=="object"&&c;e||d.data("tooltip",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.tooltip.Constructor=b,a.fn.tooltip.defaults={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover",title:"",delay:0,html:!0}}(window.jQuery),!function(a){var b=function(a,b){this.init("popover",a,b)};b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype,{constructor:b,setContent:function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content > *")[this.options.html?"html":"text"](c),a.removeClass("fade top bottom left right in")},hasContent:function(){return this.getTitle()||this.getContent()},getContent:function(){var a,b=this.$element,c=this.options;return a=b.attr("data-content")||(typeof c.content=="function"?c.content.call(b[0]):c.content),a},tip:function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}}),a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("popover"),f=typeof c=="object"&&c;e||d.data("popover",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.popover.Constructor=b,a.fn.popover.defaults=a.extend({},a.fn.tooltip.defaults,{placement:"right",trigger:"click",content:"",template:'<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>'})}(window.jQuery),!function(a){var b=function(b,c){this.options=a.extend({},a.fn.affix.defaults,c),this.$window=a(window).on("scroll.affix.data-api",a.proxy(this.checkPosition,this)),this.$element=a(b),this.checkPosition()};b.prototype.checkPosition=function(){if(!this.$element.is(":visible"))return;var b=a(document).height(),c=this.$window.scrollTop(),d=this.$element.offset(),e=this.options.offset,f=e.bottom,g=e.top,h="affix affix-top affix-bottom",i;typeof e!="object"&&(f=g=e),typeof g=="function"&&(g=e.top()),typeof f=="function"&&(f=e.bottom()),i=this.unpin!=null&&c+this.unpin<=d.top?!1:f!=null&&d.top+this.$element.height()>=b-f?"bottom":g!=null&&c<=g?"top":!1;if(this.affixed===i)return;this.affixed=i,this.unpin=i=="bottom"?d.top-c:null,this.$element.removeClass(h).addClass("affix"+(i?"-"+i:""))},a.fn.affix=function(c){return this.each(function(){var d=a(this),e=d.data("affix"),f=typeof c=="object"&&c;e||d.data("affix",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.affix.Constructor=b,a.fn.affix.defaults={offset:0},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var b=a(this),c=b.data();c.offset=c.offset||{},c.offsetBottom&&(c.offset.bottom=c.offsetBottom),c.offsetTop&&(c.offset.top=c.offsetTop),b.affix(c)})})}(window.jQuery),!function(a){var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function f(){e.trigger("closed").remove()}var c=a(this),d=c.attr("data-target"),e;d||(d=c.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),e=a(d),b&&b.preventDefault(),e.length||(e=c.hasClass("alert")?c:c.parent()),e.trigger(b=a.Event("close"));if(b.isDefaultPrevented())return;e.removeClass("in"),a.support.transition&&e.hasClass("fade")?e.on(a.support.transition.end,f):f()},a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("alert");e||d.data("alert",e=new c(this)),typeof b=="string"&&e[b].call(d)})},a.fn.alert.Constructor=c,a(function(){a("body").on("click.alert.data-api",b,c.prototype.close)})}(window.jQuery),!function(a){var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.button.defaults,c)};b.prototype.setState=function(a){var b="disabled",c=this.$element,d=c.data(),e=c.is("input")?"val":"html";a+="Text",d.resetText||c.data("resetText",c[e]()),c[e](d[a]||this.options[a]),setTimeout(function(){a=="loadingText"?c.addClass(b).attr(b,b):c.removeClass(b).removeAttr(b)},0)},b.prototype.toggle=function(){var a=this.$element.parent('[data-toggle="buttons-radio"]');a&&a.find(".active").removeClass("active"),this.$element.toggleClass("active")},a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("button"),f=typeof c=="object"&&c;e||d.data("button",e=new b(this,f)),c=="toggle"?e.toggle():c&&e.setState(c)})},a.fn.button.defaults={loadingText:"loading..."},a.fn.button.Constructor=b,a(function(){a("body").on("click.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle")})})}(window.jQuery),!function(a){var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.collapse.defaults,c),this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.prototype={constructor:b,dimension:function(){var a=this.$element.hasClass("width");return a?"width":"height"},show:function(){var b,c,d,e;if(this.transitioning)return;b=this.dimension(),c=a.camelCase(["scroll",b].join("-")),d=this.$parent&&this.$parent.find("> .accordion-group > .in");if(d&&d.length){e=d.data("collapse");if(e&&e.transitioning)return;d.collapse("hide"),e||d.data("collapse",null)}this.$element[b](0),this.transition("addClass",a.Event("show"),"shown"),a.support.transition&&this.$element[b](this.$element[0][c])},hide:function(){var b;if(this.transitioning)return;b=this.dimension(),this.reset(this.$element[b]()),this.transition("removeClass",a.Event("hide"),"hidden"),this.$element[b](0)},reset:function(a){var b=this.dimension();return this.$element.removeClass("collapse")[b](a||"auto")[0].offsetWidth,this.$element[a!==null?"addClass":"removeClass"]("collapse"),this},transition:function(b,c,d){var e=this,f=function(){c.type=="show"&&e.reset(),e.transitioning=0,e.$element.trigger(d)};this.$element.trigger(c);if(c.isDefaultPrevented())return;this.transitioning=1,this.$element[b]("in"),a.support.transition&&this.$element.hasClass("collapse")?this.$element.one(a.support.transition.end,f):f()},toggle:function(){this[this.$element.hasClass("in")?"hide":"show"]()}},a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("collapse"),f=typeof c=="object"&&c;e||d.data("collapse",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.collapse.defaults={toggle:!0},a.fn.collapse.Constructor=b,a(function(){a("body").on("click.collapse.data-api","[data-toggle=collapse]",function(b){var c=a(this),d,e=c.attr("data-target")||b.preventDefault()||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),f=a(e).data("collapse")?"toggle":c.data();c[a(e).hasClass("in")?"addClass":"removeClass"]("collapsed"),a(e).collapse(f)})})}(window.jQuery),!function(a){var b=function(b,c){this.$element=a(b),this.options=c,this.options.slide&&this.slide(this.options.slide),this.options.pause=="hover"&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.prototype={cycle:function(b){return b||(this.paused=!1),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},to:function(b){var c=this.$element.find(".item.active"),d=c.parent().children(),e=d.index(c),f=this;if(b>d.length-1||b<0)return;return this.sliding?this.$element.one("slid",function(){f.to(b)}):e==b?this.pause().cycle():this.slide(b>e?"next":"prev",a(d[b]))},pause:function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition.end&&(this.$element.trigger(a.support.transition.end),this.cycle()),clearInterval(this.interval),this.interval=null,this},next:function(){if(this.sliding)return;return this.slide("next")},prev:function(){if(this.sliding)return;return this.slide("prev")},slide:function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g=b=="next"?"left":"right",h=b=="next"?"first":"last",i=this,j=a.Event("slide",{relatedTarget:e[0]});this.sliding=!0,f&&this.pause(),e=e.length?e:this.$element.find(".item")[h]();if(e.hasClass("active"))return;if(a.support.transition&&this.$element.hasClass("slide")){this.$element.trigger(j);if(j.isDefaultPrevented())return;e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),this.$element.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid")},0)})}else{this.$element.trigger(j);if(j.isDefaultPrevented())return;d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return f&&this.cycle(),this}},a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("carousel"),f=a.extend({},a.fn.carousel.defaults,typeof c=="object"&&c),g=typeof c=="string"?c:f.slide;e||d.data("carousel",e=new b(this,f)),typeof c=="number"?e.to(c):g?e[g]():f.interval&&e.cycle()})},a.fn.carousel.defaults={interval:5e3,pause:"hover"},a.fn.carousel.Constructor=b,a(function(){a("body").on("click.carousel.data-api","[data-slide]",function(b){var c=a(this),d,e=a(c.attr("data-target")||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,"")),f=!e.data("modal")&&a.extend({},e.data(),c.data());e.carousel(f),b.preventDefault()})})}(window.jQuery),!function(a){var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.typeahead.defaults,c),this.matcher=this.options.matcher||this.matcher,this.sorter=this.options.sorter||this.sorter,this.highlighter=this.options.highlighter||this.highlighter,this.updater=this.options.updater||this.updater,this.$menu=a(this.options.menu).appendTo("body"),this.source=this.options.source,this.shown=!1,this.listen()};b.prototype={constructor:b,select:function(){var a=this.$menu.find(".active").attr("data-value");return this.$element.val(this.updater(a)).change(),this.hide()},updater:function(a){return a},show:function(){var b=a.extend({},this.$element.offset(),{height:this.$element[0].offsetHeight});return this.$menu.css({top:b.top+b.height,left:b.left}),this.$menu.show(),this.shown=!0,this},hide:function(){return this.$menu.hide(),this.shown=!1,this},lookup:function(b){var c;return this.query=this.$element.val(),!this.query||this.query.length<this.options.minLength?this.shown?this.hide():this:(c=a.isFunction(this.source)?this.source(this.query,a.proxy(this.process,this)):this.source,c?this.process(c):this)},process:function(b){var c=this;return b=a.grep(b,function(a){return c.matcher(a)}),b=this.sorter(b),b.length?this.render(b.slice(0,this.options.items)).show():this.shown?this.hide():this},matcher:function(a){return~a.toLowerCase().indexOf(this.query.toLowerCase())},sorter:function(a){var b=[],c=[],d=[],e;while(e=a.shift())e.toLowerCase().indexOf(this.query.toLowerCase())?~e.indexOf(this.query)?c.push(e):d.push(e):b.push(e);return b.concat(c,d)},highlighter:function(a){var b=this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&");return a.replace(new RegExp("("+b+")","ig"),function(a,b){return"<strong>"+b+"</strong>"})},render:function(b){var c=this;return b=a(b).map(function(b,d){return b=a(c.options.item).attr("data-value",d),b.find("a").html(c.highlighter(d)),b[0]}),b.first().addClass("active"),this.$menu.html(b),this},next:function(b){var c=this.$menu.find(".active").removeClass("active"),d=c.next();d.length||(d=a(this.$menu.find("li")[0])),d.addClass("active")},prev:function(a){var b=this.$menu.find(".active").removeClass("active"),c=b.prev();c.length||(c=this.$menu.find("li").last()),c.addClass("active")},listen:function(){this.$element.on("blur",a.proxy(this.blur,this)).on("keypress",a.proxy(this.keypress,this)).on("keyup",a.proxy(this.keyup,this)),(a.browser.webkit||a.browser.msie)&&this.$element.on("keydown",a.proxy(this.keydown,this)),this.$menu.on("click",a.proxy(this.click,this)).on("mouseenter","li",a.proxy(this.mouseenter,this))},move:function(a){if(!this.shown)return;switch(a.keyCode){case 9:case 13:case 27:a.preventDefault();break;case 38:a.preventDefault(),this.prev();break;case 40:a.preventDefault(),this.next()}a.stopPropagation()},keydown:function(b){this.suppressKeyPressRepeat=!~a.inArray(b.keyCode,[40,38,9,13,27]),this.move(b)},keypress:function(a){if(this.suppressKeyPressRepeat)return;this.move(a)},keyup:function(a){switch(a.keyCode){case 40:case 38:break;case 9:case 13:if(!this.shown)return;this.select();break;case 27:if(!this.shown)return;this.hide();break;default:this.lookup()}a.stopPropagation(),a.preventDefault()},blur:function(a){var b=this;setTimeout(function(){b.hide()},150)},click:function(a){a.stopPropagation(),a.preventDefault(),this.select()},mouseenter:function(b){this.$menu.find(".active").removeClass("active"),a(b.currentTarget).addClass("active")}},a.fn.typeahead=function(c){return this.each(function(){var d=a(this),e=d.data("typeahead"),f=typeof c=="object"&&c;e||d.data("typeahead",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.typeahead.defaults={source:[],items:8,menu:'<ul class="typeahead dropdown-menu"></ul>',item:'<li><a href="#"></a></li>',minLength:1},a.fn.typeahead.Constructor=b,a(function(){a("body").on("focus.typeahead.data-api",'[data-provide="typeahead"]',function(b){var c=a(this);if(c.data("typeahead"))return;b.preventDefault(),c.typeahead(c.data())})})}(window.jQuery) | ||
!function(e){"use strict";e(function(){e.support.transition=function(){var e=function(){var e=document.createElement("bootstrap"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},n;for(n in t)if(e.style[n]!==undefined)return t[n]}();return e&&{end:e}}()})}(window.jQuery),!function(e){"use strict";var t='[data-dismiss="alert"]',n=function(n){e(n).on("click",t,this.close)};n.prototype.close=function(t){function s(){i.trigger("closed").remove()}var n=e(this),r=n.attr("data-target"),i;r||(r=n.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,"")),i=e(r),t&&t.preventDefault(),i.length||(i=n.hasClass("alert")?n:n.parent()),i.trigger(t=e.Event("close"));if(t.isDefaultPrevented())return;i.removeClass("in"),e.support.transition&&i.hasClass("fade")?i.on(e.support.transition.end,s):s()};var r=e.fn.alert;e.fn.alert=function(t){return this.each(function(){var r=e(this),i=r.data("alert");i||r.data("alert",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.alert.Constructor=n,e.fn.alert.noConflict=function(){return e.fn.alert=r,this},e(document).on("click.alert.data-api",t,n.prototype.close)}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.button.defaults,n)};t.prototype.setState=function(e){var t="disabled",n=this.$element,r=n.data(),i=n.is("input")?"val":"html";e+="Text",r.resetText||n.data("resetText",n[i]()),n[i](r[e]||this.options[e]),setTimeout(function(){e=="loadingText"?n.addClass(t).attr(t,t):n.removeClass(t).removeAttr(t)},0)},t.prototype.toggle=function(){var e=this.$element.closest('[data-toggle="buttons-radio"]');e&&e.find(".active").removeClass("active"),this.$element.toggleClass("active")};var n=e.fn.button;e.fn.button=function(n){return this.each(function(){var r=e(this),i=r.data("button"),s=typeof n=="object"&&n;i||r.data("button",i=new t(this,s)),n=="toggle"?i.toggle():n&&i.setState(n)})},e.fn.button.defaults={loadingText:"loading..."},e.fn.button.Constructor=t,e.fn.button.noConflict=function(){return e.fn.button=n,this},e(document).on("click.button.data-api","[data-toggle^=button]",function(t){var n=e(t.target);n.hasClass("btn")||(n=n.closest(".btn")),n.button("toggle")})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.$indicators=this.$element.find(".carousel-indicators"),this.options=n,this.options.pause=="hover"&&this.$element.on("mouseenter",e.proxy(this.pause,this)).on("mouseleave",e.proxy(this.cycle,this))};t.prototype={cycle:function(t){return t||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(e.proxy(this.next,this),this.options.interval)),this},getActiveIndex:function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},to:function(t){var n=this.getActiveIndex(),r=this;if(t>this.$items.length-1||t<0)return;return this.sliding?this.$element.one("slid",function(){r.to(t)}):n==t?this.pause().cycle():this.slide(t>n?"next":"prev",e(this.$items[t]))},pause:function(t){return t||(this.paused=!0),this.$element.find(".next, .prev").length&&e.support.transition.end&&(this.$element.trigger(e.support.transition.end),this.cycle()),clearInterval(this.interval),this.interval=null,this},next:function(){if(this.sliding)return;return this.slide("next")},prev:function(){if(this.sliding)return;return this.slide("prev")},slide:function(t,n){var r=this.$element.find(".item.active"),i=n||r[t](),s=this.interval,o=t=="next"?"left":"right",u=t=="next"?"first":"last",a=this,f;this.sliding=!0,s&&this.pause(),i=i.length?i:this.$element.find(".item")[u](),f=e.Event("slide",{relatedTarget:i[0],direction:o});if(i.hasClass("active"))return;this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid",function(){var t=e(a.$indicators.children()[a.getActiveIndex()]);t&&t.addClass("active")}));if(e.support.transition&&this.$element.hasClass("slide")){this.$element.trigger(f);if(f.isDefaultPrevented())return;i.addClass(t),i[0].offsetWidth,r.addClass(o),i.addClass(o),this.$element.one(e.support.transition.end,function(){i.removeClass([t,o].join(" ")).addClass("active"),r.removeClass(["active",o].join(" ")),a.sliding=!1,setTimeout(function(){a.$element.trigger("slid")},0)})}else{this.$element.trigger(f);if(f.isDefaultPrevented())return;r.removeClass("active"),i.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return s&&this.cycle(),this}};var n=e.fn.carousel;e.fn.carousel=function(n){return this.each(function(){var r=e(this),i=r.data("carousel"),s=e.extend({},e.fn.carousel.defaults,typeof n=="object"&&n),o=typeof n=="string"?n:s.slide;i||r.data("carousel",i=new t(this,s)),typeof n=="number"?i.to(n):o?i[o]():s.interval&&i.pause().cycle()})},e.fn.carousel.defaults={interval:5e3,pause:"hover"},e.fn.carousel.Constructor=t,e.fn.carousel.noConflict=function(){return e.fn.carousel=n,this},e(document).on("click.carousel.data-api","[data-slide], [data-slide-to]",function(t){var n=e(this),r,i=e(n.attr("data-target")||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,"")),s=e.extend({},i.data(),n.data()),o;i.carousel(s),(o=n.attr("data-slide-to"))&&i.data("carousel").pause().to(o).cycle(),t.preventDefault()})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.collapse.defaults,n),this.options.parent&&(this.$parent=e(this.options.parent)),this.options.toggle&&this.toggle()};t.prototype={constructor:t,dimension:function(){var e=this.$element.hasClass("width");return e?"width":"height"},show:function(){var t,n,r,i;if(this.transitioning||this.$element.hasClass("in"))return;t=this.dimension(),n=e.camelCase(["scroll",t].join("-")),r=this.$parent&&this.$parent.find("> .accordion-group > .in");if(r&&r.length){i=r.data("collapse");if(i&&i.transitioning)return;r.collapse("hide"),i||r.data("collapse",null)}this.$element[t](0),this.transition("addClass",e.Event("show"),"shown"),e.support.transition&&this.$element[t](this.$element[0][n])},hide:function(){var t;if(this.transitioning||!this.$element.hasClass("in"))return;t=this.dimension(),this.reset(this.$element[t]()),this.transition("removeClass",e.Event("hide"),"hidden"),this.$element[t](0)},reset:function(e){var t=this.dimension();return this.$element.removeClass("collapse")[t](e||"auto")[0].offsetWidth,this.$element[e!==null?"addClass":"removeClass"]("collapse"),this},transition:function(t,n,r){var i=this,s=function(){n.type=="show"&&i.reset(),i.transitioning=0,i.$element.trigger(r)};this.$element.trigger(n);if(n.isDefaultPrevented())return;this.transitioning=1,this.$element[t]("in"),e.support.transition&&this.$element.hasClass("collapse")?this.$element.one(e.support.transition.end,s):s()},toggle:function(){this[this.$element.hasClass("in")?"hide":"show"]()}};var n=e.fn.collapse;e.fn.collapse=function(n){return this.each(function(){var r=e(this),i=r.data("collapse"),s=e.extend({},e.fn.collapse.defaults,r.data(),typeof n=="object"&&n);i||r.data("collapse",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.collapse.defaults={toggle:!0},e.fn.collapse.Constructor=t,e.fn.collapse.noConflict=function(){return e.fn.collapse=n,this},e(document).on("click.collapse.data-api","[data-toggle=collapse]",function(t){var n=e(this),r,i=n.attr("data-target")||t.preventDefault()||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,""),s=e(i).data("collapse")?"toggle":n.data();n[e(i).hasClass("in")?"addClass":"removeClass"]("collapsed"),e(i).collapse(s)})}(window.jQuery),!function(e){"use strict";function r(){e(t).each(function(){i(e(this)).removeClass("open")})}function i(t){var n=t.attr("data-target"),r;n||(n=t.attr("href"),n=n&&/#/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,"")),r=n&&e(n);if(!r||!r.length)r=t.parent();return r}var t="[data-toggle=dropdown]",n=function(t){var n=e(t).on("click.dropdown.data-api",this.toggle);e("html").on("click.dropdown.data-api",function(){n.parent().removeClass("open")})};n.prototype={constructor:n,toggle:function(t){var n=e(this),s,o;if(n.is(".disabled, :disabled"))return;return s=i(n),o=s.hasClass("open"),r(),o||s.toggleClass("open"),n.focus(),!1},keydown:function(n){var r,s,o,u,a,f;if(!/(38|40|27)/.test(n.keyCode))return;r=e(this),n.preventDefault(),n.stopPropagation();if(r.is(".disabled, :disabled"))return;u=i(r),a=u.hasClass("open");if(!a||a&&n.keyCode==27)return n.which==27&&u.find(t).focus(),r.click();s=e("[role=menu] li:not(.divider):visible a",u);if(!s.length)return;f=s.index(s.filter(":focus")),n.keyCode==38&&f>0&&f--,n.keyCode==40&&f<s.length-1&&f++,~f||(f=0),s.eq(f).focus()}};var s=e.fn.dropdown;e.fn.dropdown=function(t){return this.each(function(){var r=e(this),i=r.data("dropdown");i||r.data("dropdown",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.dropdown.Constructor=n,e.fn.dropdown.noConflict=function(){return e.fn.dropdown=s,this},e(document).on("click.dropdown.data-api",r).on("click.dropdown.data-api",".dropdown form",function(e){e.stopPropagation()}).on(".dropdown-menu",function(e){e.stopPropagation()}).on("click.dropdown.data-api",t,n.prototype.toggle).on("keydown.dropdown.data-api",t+", [role=menu]",n.prototype.keydown)}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.options=n,this.$element=e(t).delegate('[data-dismiss="modal"]',"click.dismiss.modal",e.proxy(this.hide,this)),this.options.remote&&this.$element.find(".modal-body").load(this.options.remote)};t.prototype={constructor:t,toggle:function(){return this[this.isShown?"hide":"show"]()},show:function(){var t=this,n=e.Event("show");this.$element.trigger(n);if(this.isShown||n.isDefaultPrevented())return;this.isShown=!0,this.escape(),this.backdrop(function(){var n=e.support.transition&&t.$element.hasClass("fade");t.$element.parent().length||t.$element.appendTo(document.body),t.$element.show(),n&&t.$element[0].offsetWidth,t.$element.addClass("in").attr("aria-hidden",!1),t.enforceFocus(),n?t.$element.one(e.support.transition.end,function(){t.$element.focus().trigger("shown")}):t.$element.focus().trigger("shown")})},hide:function(t){t&&t.preventDefault();var n=this;t=e.Event("hide"),this.$element.trigger(t);if(!this.isShown||t.isDefaultPrevented())return;this.isShown=!1,this.escape(),e(document).off("focusin.modal"),this.$element.removeClass("in").attr("aria-hidden",!0),e.support.transition&&this.$element.hasClass("fade")?this.hideWithTransition():this.hideModal()},enforceFocus:function(){var t=this;e(document).on("focusin.modal",function(e){t.$element[0]!==e.target&&!t.$element.has(e.target).length&&t.$element.focus()})},escape:function(){var e=this;this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.modal",function(t){t.which==27&&e.hide()}):this.isShown||this.$element.off("keyup.dismiss.modal")},hideWithTransition:function(){var t=this,n=setTimeout(function(){t.$element.off(e.support.transition.end),t.hideModal()},500);this.$element.one(e.support.transition.end,function(){clearTimeout(n),t.hideModal()})},hideModal:function(){var e=this;this.$element.hide(),this.backdrop(function(){e.removeBackdrop(),e.$element.trigger("hidden")})},removeBackdrop:function(){this.$backdrop.remove(),this.$backdrop=null},backdrop:function(t){var n=this,r=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var i=e.support.transition&&r;this.$backdrop=e('<div class="modal-backdrop '+r+'" />').appendTo(document.body),this.$backdrop.click(this.options.backdrop=="static"?e.proxy(this.$element[0].focus,this.$element[0]):e.proxy(this.hide,this)),i&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in");if(!t)return;i?this.$backdrop.one(e.support.transition.end,t):t()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),e.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(e.support.transition.end,t):t()):t&&t()}};var n=e.fn.modal;e.fn.modal=function(n){return this.each(function(){var r=e(this),i=r.data("modal"),s=e.extend({},e.fn.modal.defaults,r.data(),typeof n=="object"&&n);i||r.data("modal",i=new t(this,s)),typeof n=="string"?i[n]():s.show&&i.show()})},e.fn.modal.defaults={backdrop:!0,keyboard:!0,show:!0},e.fn.modal.Constructor=t,e.fn.modal.noConflict=function(){return e.fn.modal=n,this},e(document).on("click.modal.data-api",'[data-toggle="modal"]',function(t){var n=e(this),r=n.attr("href"),i=e(n.attr("data-target")||r&&r.replace(/.*(?=#[^\s]+$)/,"")),s=i.data("modal")?"toggle":e.extend({remote:!/#/.test(r)&&r},i.data(),n.data());t.preventDefault(),i.modal(s).one("hide",function(){n.focus()})})}(window.jQuery),!function(e){"use strict";var t=function(e,t){this.init("tooltip",e,t)};t.prototype={constructor:t,init:function(t,n,r){var i,s,o,u,a;this.type=t,this.$element=e(n),this.options=this.getOptions(r),this.enabled=!0,o=this.options.trigger.split(" ");for(a=o.length;a--;)u=o[a],u=="click"?this.$element.on("click."+this.type,this.options.selector,e.proxy(this.toggle,this)):u!="manual"&&(i=u=="hover"?"mouseenter":"focus",s=u=="hover"?"mouseleave":"blur",this.$element.on(i+"."+this.type,this.options.selector,e.proxy(this.enter,this)),this.$element.on(s+"."+this.type,this.options.selector,e.proxy(this.leave,this)));this.options.selector?this._options=e.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},getOptions:function(t){return t=e.extend({},e.fn[this.type].defaults,this.$element.data(),t),t.delay&&typeof t.delay=="number"&&(t.delay={show:t.delay,hide:t.delay}),t},enter:function(t){var n=e(t.currentTarget)[this.type](this._options).data(this.type);if(!n.options.delay||!n.options.delay.show)return n.show();clearTimeout(this.timeout),n.hoverState="in",this.timeout=setTimeout(function(){n.hoverState=="in"&&n.show()},n.options.delay.show)},leave:function(t){var n=e(t.currentTarget)[this.type](this._options).data(this.type);this.timeout&&clearTimeout(this.timeout);if(!n.options.delay||!n.options.delay.hide)return n.hide();n.hoverState="out",this.timeout=setTimeout(function(){n.hoverState=="out"&&n.hide()},n.options.delay.hide)},show:function(){var t,n,r,i,s,o,u=e.Event("show");if(this.hasContent()&&this.enabled){this.$element.trigger(u);if(u.isDefaultPrevented())return;t=this.tip(),this.setContent(),this.options.animation&&t.addClass("fade"),s=typeof this.options.placement=="function"?this.options.placement.call(this,t[0],this.$element[0]):this.options.placement,t.detach().css({top:0,left:0,display:"block"}),this.options.container?t.appendTo(this.options.container):t.insertAfter(this.$element),n=this.getPosition(),r=t[0].offsetWidth,i=t[0].offsetHeight;switch(s){case"bottom":o={top:n.top+n.height,left:n.left+n.width/2-r/2};break;case"top":o={top:n.top-i,left:n.left+n.width/2-r/2};break;case"left":o={top:n.top+n.height/2-i/2,left:n.left-r};break;case"right":o={top:n.top+n.height/2-i/2,left:n.left+n.width}}this.applyPlacement(o,s),this.$element.trigger("shown")}},applyPlacement:function(e,t){var n=this.tip(),r=n[0].offsetWidth,i=n[0].offsetHeight,s,o,u,a;n.offset(e).addClass(t).addClass("in"),s=n[0].offsetWidth,o=n[0].offsetHeight,t=="top"&&o!=i&&(e.top=e.top+i-o,a=!0),t=="bottom"||t=="top"?(u=0,e.left<0&&(u=e.left*-2,e.left=0,n.offset(e),s=n[0].offsetWidth,o=n[0].offsetHeight),this.replaceArrow(u-r+s,s,"left")):this.replaceArrow(o-i,o,"top"),a&&n.offset(e)},replaceArrow:function(e,t,n){this.arrow().css(n,e?50*(1-e/t)+"%":"")},setContent:function(){var e=this.tip(),t=this.getTitle();e.find(".tooltip-inner")[this.options.html?"html":"text"](t),e.removeClass("fade in top bottom left right")},hide:function(){function i(){var t=setTimeout(function(){n.off(e.support.transition.end).detach()},500);n.one(e.support.transition.end,function(){clearTimeout(t),n.detach()})}var t=this,n=this.tip(),r=e.Event("hide");this.$element.trigger(r);if(r.isDefaultPrevented())return;return n.removeClass("in"),e.support.transition&&this.$tip.hasClass("fade")?i():n.detach(),this.$element.trigger("hidden"),this},fixTitle:function(){var e=this.$element;(e.attr("title")||typeof e.attr("data-original-title")!="string")&&e.attr("data-original-title",e.attr("title")||"").attr("title","")},hasContent:function(){return this.getTitle()},getPosition:function(){var t=this.$element[0];return e.extend({},typeof t.getBoundingClientRect=="function"?t.getBoundingClientRect():{width:t.offsetWidth,height:t.offsetHeight},this.$element.offset())},getTitle:function(){var e,t=this.$element,n=this.options;return e=t.attr("data-original-title")||(typeof n.title=="function"?n.title.call(t[0]):n.title),e},tip:function(){return this.$tip=this.$tip||e(this.options.template)},arrow:function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},validate:function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},toggleEnabled:function(){this.enabled=!this.enabled},toggle:function(t){var n=t?e(t.currentTarget)[this.type](this._options).data(this.type):this;n.tip().hasClass("in")?n.hide():n.show()},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}};var n=e.fn.tooltip;e.fn.tooltip=function(n){return this.each(function(){var r=e(this),i=r.data("tooltip"),s=typeof n=="object"&&n;i||r.data("tooltip",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.tooltip.Constructor=t,e.fn.tooltip.defaults={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},e.fn.tooltip.noConflict=function(){return e.fn.tooltip=n,this}}(window.jQuery),!function(e){"use strict";var t=function(e,t){this.init("popover",e,t)};t.prototype=e.extend({},e.fn.tooltip.Constructor.prototype,{constructor:t,setContent:function(){var e=this.tip(),t=this.getTitle(),n=this.getContent();e.find(".popover-title")[this.options.html?"html":"text"](t),e.find(".popover-content")[this.options.html?"html":"text"](n),e.removeClass("fade top bottom left right in")},hasContent:function(){return this.getTitle()||this.getContent()},getContent:function(){var e,t=this.$element,n=this.options;return e=(typeof n.content=="function"?n.content.call(t[0]):n.content)||t.attr("data-content"),e},tip:function(){return this.$tip||(this.$tip=e(this.options.template)),this.$tip},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}});var n=e.fn.popover;e.fn.popover=function(n){return this.each(function(){var r=e(this),i=r.data("popover"),s=typeof n=="object"&&n;i||r.data("popover",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.popover.Constructor=t,e.fn.popover.defaults=e.extend({},e.fn.tooltip.defaults,{placement:"right",trigger:"click",content:"",template:'<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),e.fn.popover.noConflict=function(){return e.fn.popover=n,this}}(window.jQuery),!function(e){"use strict";function t(t,n){var r=e.proxy(this.process,this),i=e(t).is("body")?e(window):e(t),s;this.options=e.extend({},e.fn.scrollspy.defaults,n),this.$scrollElement=i.on("scroll.scroll-spy.data-api",r),this.selector=(this.options.target||(s=e(t).attr("href"))&&s.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.$body=e("body"),this.refresh(),this.process()}t.prototype={constructor:t,refresh:function(){var t=this,n;this.offsets=e([]),this.targets=e([]),n=this.$body.find(this.selector).map(function(){var n=e(this),r=n.data("target")||n.attr("href"),i=/^#\w/.test(r)&&e(r);return i&&i.length&&[[i.position().top+(!e.isWindow(t.$scrollElement.get(0))&&t.$scrollElement.scrollTop()),r]]||null}).sort(function(e,t){return e[0]-t[0]}).each(function(){t.offsets.push(this[0]),t.targets.push(this[1])})},process:function(){var e=this.$scrollElement.scrollTop()+this.options.offset,t=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,n=t-this.$scrollElement.height(),r=this.offsets,i=this.targets,s=this.activeTarget,o;if(e>=n)return s!=(o=i.last()[0])&&this.activate(o);for(o=r.length;o--;)s!=i[o]&&e>=r[o]&&(!r[o+1]||e<=r[o+1])&&this.activate(i[o])},activate:function(t){var n,r;this.activeTarget=t,e(this.selector).parent(".active").removeClass("active"),r=this.selector+'[data-target="'+t+'"],'+this.selector+'[href="'+t+'"]',n=e(r).parent("li").addClass("active"),n.parent(".dropdown-menu").length&&(n=n.closest("li.dropdown").addClass("active")),n.trigger("activate")}};var n=e.fn.scrollspy;e.fn.scrollspy=function(n){return this.each(function(){var r=e(this),i=r.data("scrollspy"),s=typeof n=="object"&&n;i||r.data("scrollspy",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.scrollspy.Constructor=t,e.fn.scrollspy.defaults={offset:10},e.fn.scrollspy.noConflict=function(){return e.fn.scrollspy=n,this},e(window).on("load",function(){e('[data-spy="scroll"]').each(function(){var t=e(this);t.scrollspy(t.data())})})}(window.jQuery),!function(e){"use strict";var t=function(t){this.element=e(t)};t.prototype={constructor:t,show:function(){var t=this.element,n=t.closest("ul:not(.dropdown-menu)"),r=t.attr("data-target"),i,s,o;r||(r=t.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,""));if(t.parent("li").hasClass("active"))return;i=n.find(".active:last a")[0],o=e.Event("show",{relatedTarget:i}),t.trigger(o);if(o.isDefaultPrevented())return;s=e(r),this.activate(t.parent("li"),n),this.activate(s,s.parent(),function(){t.trigger({type:"shown",relatedTarget:i})})},activate:function(t,n,r){function o(){i.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),t.addClass("active"),s?(t[0].offsetWidth,t.addClass("in")):t.removeClass("fade"),t.parent(".dropdown-menu")&&t.closest("li.dropdown").addClass("active"),r&&r()}var i=n.find("> .active"),s=r&&e.support.transition&&i.hasClass("fade");s?i.one(e.support.transition.end,o):o(),i.removeClass("in")}};var n=e.fn.tab;e.fn.tab=function(n){return this.each(function(){var r=e(this),i=r.data("tab");i||r.data("tab",i=new t(this)),typeof n=="string"&&i[n]()})},e.fn.tab.Constructor=t,e.fn.tab.noConflict=function(){return e.fn.tab=n,this},e(document).on("click.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(t){t.preventDefault(),e(this).tab("show")})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.typeahead.defaults,n),this.matcher=this.options.matcher||this.matcher,this.sorter=this.options.sorter||this.sorter,this.highlighter=this.options.highlighter||this.highlighter,this.updater=this.options.updater||this.updater,this.source=this.options.source,this.$menu=e(this.options.menu),this.shown=!1,this.listen()};t.prototype={constructor:t,select:function(){var e=this.$menu.find(".active").attr("data-value");return this.$element.val(this.updater(e)).change(),this.hide()},updater:function(e){return e},show:function(){var t=e.extend({},this.$element.position(),{height:this.$element[0].offsetHeight});return this.$menu.insertAfter(this.$element).css({top:t.top+t.height,left:t.left}).show(),this.shown=!0,this},hide:function(){return this.$menu.hide(),this.shown=!1,this},lookup:function(t){var n;return this.query=this.$element.val(),!this.query||this.query.length<this.options.minLength?this.shown?this.hide():this:(n=e.isFunction(this.source)?this.source(this.query,e.proxy(this.process,this)):this.source,n?this.process(n):this)},process:function(t){var n=this;return t=e.grep(t,function(e){return n.matcher(e)}),t=this.sorter(t),t.length?this.render(t.slice(0,this.options.items)).show():this.shown?this.hide():this},matcher:function(e){return~e.toLowerCase().indexOf(this.query.toLowerCase())},sorter:function(e){var t=[],n=[],r=[],i;while(i=e.shift())i.toLowerCase().indexOf(this.query.toLowerCase())?~i.indexOf(this.query)?n.push(i):r.push(i):t.push(i);return t.concat(n,r)},highlighter:function(e){var t=this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&");return e.replace(new RegExp("("+t+")","ig"),function(e,t){return"<strong>"+t+"</strong>"})},render:function(t){var n=this;return t=e(t).map(function(t,r){return t=e(n.options.item).attr("data-value",r),t.find("a").html(n.highlighter(r)),t[0]}),t.first().addClass("active"),this.$menu.html(t),this},next:function(t){var n=this.$menu.find(".active").removeClass("active"),r=n.next();r.length||(r=e(this.$menu.find("li")[0])),r.addClass("active")},prev:function(e){var t=this.$menu.find(".active").removeClass("active"),n=t.prev();n.length||(n=this.$menu.find("li").last()),n.addClass("active")},listen:function(){this.$element.on("focus",e.proxy(this.focus,this)).on("blur",e.proxy(this.blur,this)).on("keypress",e.proxy(this.keypress,this)).on("keyup",e.proxy(this.keyup,this)),this.eventSupported("keydown")&&this.$element.on("keydown",e.proxy(this.keydown,this)),this.$menu.on("click",e.proxy(this.click,this)).on("mouseenter","li",e.proxy(this.mouseenter,this)).on("mouseleave","li",e.proxy(this.mouseleave,this))},eventSupported:function(e){var t=e in this.$element;return t||(this.$element.setAttribute(e,"return;"),t=typeof this.$element[e]=="function"),t},move:function(e){if(!this.shown)return;switch(e.keyCode){case 9:case 13:case 27:e.preventDefault();break;case 38:e.preventDefault(),this.prev();break;case 40:e.preventDefault(),this.next()}e.stopPropagation()},keydown:function(t){this.suppressKeyPressRepeat=~e.inArray(t.keyCode,[40,38,9,13,27]),this.move(t)},keypress:function(e){if(this.suppressKeyPressRepeat)return;this.move(e)},keyup:function(e){switch(e.keyCode){case 40:case 38:case 16:case 17:case 18:break;case 9:case 13:if(!this.shown)return;this.select();break;case 27:if(!this.shown)return;this.hide();break;default:this.lookup()}e.stopPropagation(),e.preventDefault()},focus:function(e){this.focused=!0},blur:function(e){this.focused=!1,!this.mousedover&&this.shown&&this.hide()},click:function(e){e.stopPropagation(),e.preventDefault(),this.select(),this.$element.focus()},mouseenter:function(t){this.mousedover=!0,this.$menu.find(".active").removeClass("active"),e(t.currentTarget).addClass("active")},mouseleave:function(e){this.mousedover=!1,!this.focused&&this.shown&&this.hide()}};var n=e.fn.typeahead;e.fn.typeahead=function(n){return this.each(function(){var r=e(this),i=r.data("typeahead"),s=typeof n=="object"&&n;i||r.data("typeahead",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.typeahead.defaults={source:[],items:8,menu:'<ul class="typeahead dropdown-menu"></ul>',item:'<li><a href="#"></a></li>',minLength:1},e.fn.typeahead.Constructor=t,e.fn.typeahead.noConflict=function(){return e.fn.typeahead=n,this},e(document).on("focus.typeahead.data-api",'[data-provide="typeahead"]',function(t){var n=e(this);if(n.data("typeahead"))return;n.typeahead(n.data())})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.options=e.extend({},e.fn.affix.defaults,n),this.$window=e(window).on("scroll.affix.data-api",e.proxy(this.checkPosition,this)).on("click.affix.data-api",e.proxy(function(){setTimeout(e.proxy(this.checkPosition,this),1)},this)),this.$element=e(t),this.checkPosition()};t.prototype.checkPosition=function(){if(!this.$element.is(":visible"))return;var t=e(document).height(),n=this.$window.scrollTop(),r=this.$element.offset(),i=this.options.offset,s=i.bottom,o=i.top,u="affix affix-top affix-bottom",a;typeof i!="object"&&(s=o=i),typeof o=="function"&&(o=i.top()),typeof s=="function"&&(s=i.bottom()),a=this.unpin!=null&&n+this.unpin<=r.top?!1:s!=null&&r.top+this.$element.height()>=t-s?"bottom":o!=null&&n<=o?"top":!1;if(this.affixed===a)return;this.affixed=a,this.unpin=a=="bottom"?r.top-n:null,this.$element.removeClass(u).addClass("affix"+(a?"-"+a:""))};var n=e.fn.affix;e.fn.affix=function(n){return this.each(function(){var r=e(this),i=r.data("affix"),s=typeof n=="object"&&n;i||r.data("affix",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.affix.Constructor=t,e.fn.affix.defaults={offset:0},e.fn.affix.noConflict=function(){return e.fn.affix=n,this},e(window).on("load",function(){e('[data-spy="affix"]').each(function(){var t=e(this),n=t.data();n.offset=n.offset||{},n.offsetBottom&&(n.offset.bottom=n.offsetBottom),n.offsetTop&&(n.offset.top=n.offsetTop),t.affix(n)})})}(window.jQuery); |
"use strict"; | ||
var _ = require("../extended"), | ||
format = _.format, | ||
Reporter = require("./reporter"); | ||
@@ -23,3 +24,3 @@ | ||
startTests: function (tests) { | ||
console.log('%d..%d', 1, (this.numActions = tests.numActions)); | ||
console.log(format('%d..%d', 1, (this.numActions = tests.numActions))); | ||
}, | ||
@@ -29,3 +30,3 @@ | ||
this.passed++; | ||
console.log('ok %d %s', ++this.ran, getActionName(action)); | ||
console.log(format('ok %d %s', ++this.ran, getActionName(action))); | ||
@@ -35,3 +36,3 @@ }, | ||
actionPending: function printPending(action) { | ||
console.log('ok %d %s # SKIP -', ++this.ran, getActionName(action)); | ||
console.log(format('ok %d %s # SKIP -', ++this.ran, getActionName(action))); | ||
}, | ||
@@ -42,5 +43,7 @@ | ||
var summary = action.get("summary"), err = summary.error; | ||
console.log('not ok %d %s', ++this.ran, getActionName(action)); | ||
console.log(format('not ok %d %s', ++this.ran, getActionName(action))); | ||
if (err.stack) { | ||
console.log(err.stack.replace(/^/gm, ' ')); | ||
} else if (err.message) { | ||
console.log(err.message); | ||
} else { | ||
@@ -47,0 +50,0 @@ console.log(err); |
@@ -39,3 +39,3 @@ "use strict"; | ||
_(["description", "should", "describe", "timeout", "getAction", "beforeAll", "beforeEach", | ||
"afterAll", "afterEach", "context", "get", "set", "skip"]).forEach(function (key) { | ||
"afterAll", "afterEach", "context", "get", "set", "skip", "ignoreErrors"]).forEach(function (key) { | ||
it[key] = test[key]; | ||
@@ -42,0 +42,0 @@ }); |
@@ -27,3 +27,3 @@ "use strict"; | ||
ignoreProcessError: false, | ||
__ignoreProcessError: false, | ||
@@ -43,5 +43,13 @@ constructor: function constructor(description, options) { | ||
} | ||
_.bindAll(this, ["_addAction", "_addTest", "timeout", "getAction", "beforeAll", "beforeEach", "afterAll", "afterEach", "context", "get", "set", "skip"]); | ||
_.bindAll(this, ["_addAction", "ignoreErrors", "_addTest", "timeout", "getAction", "beforeAll", "beforeEach", "afterAll", "afterEach", "context", "get", "set", "skip"]); | ||
}, | ||
ignoreErrors: function (val) { | ||
if (_.isBoolean(val)) { | ||
this.__ignoreProcessError = val; | ||
} else { | ||
return this.__ignoreProcessError; | ||
} | ||
}, | ||
timeout: function (num) { | ||
@@ -106,3 +114,3 @@ this.__timeout = num; | ||
var it = cloned._addAction; | ||
_(["suite", "test", "should", "describe", "timeout", "getAction", "beforeAll", "beforeEach", | ||
_(["suite", "test", "should", "describe", "timeout", "ignoreErrors", "getAction", "beforeAll", "beforeEach", | ||
"afterAll", "afterEach", "context", "get", "set", "skip"]).forEach(function (key) { | ||
@@ -299,5 +307,4 @@ if (_.isFunction(cloned[key])) { | ||
parent: behavior, | ||
reporter: behavior.reporter, | ||
stopOnError: behavior.stopOnError, | ||
ignoreProcessError: behavior.ignoreProcessError | ||
__ignoreProcessError: behavior.ignoreErrors() | ||
}, options), cb); | ||
@@ -304,0 +311,0 @@ }, |
@@ -41,3 +41,3 @@ "use strict"; | ||
_(["suite", "test", "timeout", "getAction", "beforeAll", "beforeEach", | ||
"afterAll", "afterEach", "context", "get", "set", "skip"]).forEach(function (key) { | ||
"afterAll", "afterEach", "context", "get", "set", "skip", "ignoreErrors"]).forEach(function (key) { | ||
it[key] = test[key]; | ||
@@ -44,0 +44,0 @@ }); |
539
lib/it.js
@@ -5,540 +5,3 @@ /** | ||
* @github https://github.com/doug-martin/it | ||
* @header | ||
* [![Build Status](https://travis-ci.org/doug-martin/it.png)](https://travis-ci.org/doug-martin/it) | ||
* | ||
* [![browser support](http://ci.testling.com/doug-martin/it.png)](http://ci.testling.com/doug-martin/it) | ||
* | ||
* # It | ||
* | ||
* ## Overview | ||
* | ||
* It is a testing framework for node.js and the browser. | ||
* | ||
* **Features** | ||
* | ||
* * Supports Promises, and the mocha `done(err)` style of async tests. | ||
* * Browser Support | ||
* * AMD support | ||
* * Node.js Support | ||
* * Proper exit codes for ci | ||
* * Multiple reporters, including TAP for testling ci | ||
* * Does not export global variables, you can run your tests individually with node or with the it executable. | ||
* * Support for filtering tests. | ||
* | ||
* ## Installation | ||
* | ||
* npm install it | ||
* | ||
* To use the it executable | ||
* | ||
* npm install -g it | ||
* | ||
* In the browser | ||
* | ||
* ```html | ||
* <!DOCTYPE html> | ||
* <html> | ||
* <head> | ||
* <meta http-equiv="X-UA-Compatible" content="IE=edge"> | ||
* <meta charset="utf-8"> | ||
* <title>It Tests</title> | ||
* <link rel="stylesheet" type="text/css" href="it.css"> | ||
* </head> | ||
* <body> | ||
* <div id="it"></div> | ||
* <script src="it.js"></script> | ||
* <script> | ||
* //optionally export assert as a global | ||
* assert = it.assert; | ||
* </script> | ||
* <!--Import your scripts--> | ||
* <script> | ||
* it.run(); | ||
* </script> | ||
* </body> | ||
* </html> | ||
* ``` | ||
* | ||
* With requirejs | ||
* | ||
* ```html | ||
* <!DOCTYPE html> | ||
* <html> | ||
* <head> | ||
* <meta http-equiv="X-UA-Compatible" content="IE=edge"> | ||
* <meta charset="utf-8"> | ||
* <title>It Tests Requirejs</title> | ||
* <link rel="stylesheet" type="text/css" href="it.css"> | ||
* </head> | ||
* <body> | ||
* <div id="it"></div> | ||
* <script data-main="scripts/main" src="scripts/require.js"></script> | ||
* <script> | ||
* require([ | ||
* 'it', | ||
* //require your tests | ||
* ], function (it) { | ||
* it.run(); | ||
* }); | ||
* </script> | ||
* </body> | ||
* </html> | ||
* | ||
* ``` | ||
* | ||
* ## Usage | ||
* | ||
* ### Getting Started | ||
* | ||
* The basic structure of a test in `it` looks like the following. | ||
* | ||
* ```javascript | ||
* | ||
* var it = require("it"), | ||
* assert = require("assert"); | ||
* | ||
* it.describe("an it test", function(it){ | ||
* | ||
* //the should method is a conveience over writing it("should"). | ||
* it.should("have a should method", function(){ | ||
* assert.isFunction(it.should); | ||
* }); | ||
* | ||
* //it can also be used as a function | ||
* it("should be able to be called as a function", function(){ | ||
* assert.isFunction(it); | ||
* }); | ||
* | ||
* it.describe("#describe", function(it){ | ||
* //now we can write some more tests! | ||
* }); | ||
* | ||
* }); | ||
* | ||
* ``` | ||
* | ||
* | ||
* ### Synchronous tests | ||
* | ||
* Writing synchronous tests in **It** is extremely simple. So lets start off with an example. | ||
* | ||
* Lets assume we have a Person Object | ||
* | ||
* ```javascript | ||
* var Person = function (name, age) { | ||
* this.name = name; | ||
* this.age = age; | ||
* | ||
* this.getOlder = function (years) { | ||
* if (years > 0) { | ||
* this.age = this.age + years; | ||
* } | ||
* }; | ||
* | ||
* }; | ||
* ``` | ||
* | ||
* The first tests we could run on person could be testing the setting of name and age. | ||
* | ||
* ```javascript | ||
* | ||
* var it = require("../index"), | ||
* assert = require("assert"); | ||
* | ||
* it.describe("Person", function (it) { | ||
* | ||
* it.should("set set name", function () { | ||
* var person = new Person("bob", 1); | ||
* assert.equal(person.name, "bob"); | ||
* }); | ||
* | ||
* it.should("set set age", function () { | ||
* var person = new Person("bob", 1); | ||
* assert.equal(person.age, 1); | ||
* }); | ||
* | ||
* }); | ||
* | ||
* ``` | ||
* Notice we use the **it** passed back to the describe callback. | ||
* | ||
* Next we could test different scenarios of Person#getOlder | ||
* | ||
* ```javascript | ||
* var it = require("../index"), | ||
* assert = require("assert"); | ||
* | ||
* it.describe("Person", function (it) { | ||
* | ||
* it.describe("#getOlder", function (it) { | ||
* | ||
* it.should("accept positive numbers", function () { | ||
* var person = new Person("bob", 1); | ||
* person.getOlder(2); | ||
* assert.equal(person.age, 3); | ||
* }); | ||
* | ||
* it.should("not apply negative numbers", function () { | ||
* var person = new Person("bob", 1); | ||
* person.getOlder(-2); | ||
* assert.equal(person.age, 1); | ||
* }); | ||
* }); | ||
* | ||
* }); | ||
* | ||
* ``` | ||
* | ||
* In this example we are describing the **getOlder** method and run different tests against it. | ||
* Notice the **it** passed back is used again. | ||
* | ||
* You may nest tests as deep as you like as long as you remember to use the proper **it**. | ||
* | ||
* ```javascript | ||
* it.describe("#getOlder nested", function (it) { | ||
* | ||
* it.describe("with positive numbers", function (it) { | ||
* | ||
* it.should("work", function () { | ||
* var person = new Person("bob", 1); | ||
* person.getOlder(2); | ||
* assert.equal(person.age, 3); | ||
* }); | ||
* | ||
* }); | ||
* | ||
* it.describe("with negative numbers", function () { | ||
* | ||
* //uh oh wrong it | ||
* it.should("not work", function () { | ||
* var person = new Person("bob", 1); | ||
* person.getOlder(-2); | ||
* assert.equal(person.age, 1); | ||
* }); | ||
* | ||
* }); | ||
* | ||
* }); | ||
* ``` | ||
* | ||
* ### Asynchronous tests | ||
* | ||
* Writing asynchronous tests in **It** is just as easy as writing synchronous tests. | ||
* | ||
* Lets modify Person to make get older async | ||
* | ||
* ```javascript | ||
* var Person = function (name, age) { | ||
* this.name = name; | ||
* this.age = age; | ||
* | ||
* this.getOlder = function (years, next) { | ||
* setTimeout(function () { | ||
* this.age = this.age + years; | ||
* next(null, this); | ||
* }.bind(this), years * 500); | ||
* }; | ||
* }; | ||
* ``` | ||
* | ||
* Now that **getOlder** is async lets test it | ||
* | ||
* In this example a promise is the return value. If you have used `comb`, `Q`, `promises-extedned` or any other framework that uses | ||
* **Promises** then this will feel pretty natural to you. The test will wait for the promise to resolve before continuing any other tests. | ||
* | ||
* | ||
* ```javascript | ||
* | ||
* var p = require("promise-extended"); | ||
* | ||
* it.describe("#getOlder", function (it) { | ||
* //return promise | ||
* it.should("not apply negative numbers", function () { | ||
* var ret = new p.promise(); | ||
* var person = new Person("bob", 1); | ||
* person.getOlder(-2, function (err, person) { | ||
* assert.equal(person.age, 1); | ||
* ret.callback(); | ||
* }); | ||
* return ret.promise(); | ||
* }); | ||
* }); | ||
* ``` | ||
* | ||
* In this example the should callback accepts a `next(err)` argument which is a function that should be called when the current test is done. So if next is invoked with a first argument other than null or undefined then | ||
* it is assumed that the test errored. | ||
* | ||
* ```javascript | ||
* | ||
* it.describe("#getOlder", function (it) { | ||
* //Call with next | ||
* it.should("accept positive numbers", function (next) { | ||
* var person = new Person("bob", 1); | ||
* person.getOlder(2, function (err, person) { | ||
* assert.equal(person.age, 3); | ||
* next(); | ||
* }); | ||
* }); | ||
* }); | ||
* ``` | ||
* | ||
* ### context | ||
* | ||
* `it` also supports the concept of a context, which is a set of functionality that should belong to the current `describe` or `suite` tests but needs something extra like extra setup or tear down functionality. | ||
* | ||
* In fact anything you can do withing the `describe` callback you can do in a `context`. | ||
* | ||
* | ||
* ``` | ||
* | ||
* it.describe("contexts", function(it){ | ||
* | ||
* it.context(function(it){ | ||
* | ||
* var called; | ||
* it.beforeAll(function(){ | ||
* called = true; | ||
* }); | ||
* | ||
* it("should allow custom beforeAll", function(){ | ||
* assert.isTrue(called); | ||
* }); | ||
* }); | ||
* | ||
* it.context(function(it){ | ||
* | ||
* var called | ||
* it.beforeEach(function(){ | ||
* called = true; | ||
* }); | ||
* | ||
* it("should allow custom beforeEach", function(){ | ||
* assert.isTrue(called); | ||
* }); | ||
* }); | ||
* }) | ||
* | ||
* ``` | ||
* | ||
* | ||
* | ||
* | ||
* ### Timeouts | ||
* | ||
* To set a duration limit on each test within a suite use the `timeout(duration)` method. | ||
* | ||
* ``` | ||
* | ||
* it.describe("#timeouts", function(){ | ||
* | ||
* it.timeout(100); | ||
* | ||
* //this spec will fail | ||
* it.should("fail it action duration is > 100", function(next){ | ||
* setTimeout(function(){ | ||
* next(); | ||
* }, 200); | ||
* }); | ||
* | ||
* //this spec will pass! | ||
* it.should("not fail it action duration < 100", function(){ | ||
* assert.isTrue(true); | ||
* }); | ||
* | ||
* }); | ||
* | ||
* ``` | ||
* | ||
* ### Skip | ||
* | ||
* If you wish to skip an action you can use the `skip` method which will put the action into a `pending` state, and not run it. | ||
* | ||
* ```javascript | ||
* | ||
* | ||
* it.describe("#timeouts", function(){ | ||
* | ||
* it.timeout(100); | ||
* | ||
* //this spec be skipped | ||
* it.skip("fail it action duration is > 100", function(next){ | ||
* setTimeout(function(){ | ||
* next(); | ||
* }, 200); | ||
* }); | ||
* | ||
* //this spec will not | ||
* it("not fail it action duration < 100", function(){ | ||
* assert.isTrue(true); | ||
* }); | ||
* | ||
* }); | ||
* | ||
* ``` | ||
* | ||
* ## Tdd | ||
* | ||
* `it` also supports tdd style tests. | ||
* | ||
* ```javascript | ||
* | ||
* it.suite("Person", function (it) { | ||
* | ||
* it.suite("#getOlder", function (it) { | ||
* | ||
* it.test("accept positive numbers", function () { | ||
* var person = new Person("bob", 1); | ||
* person.getOlder(2); | ||
* assert.equal(person.age, 3); | ||
* }); | ||
* | ||
* it.test("not apply negative numbers", function () { | ||
* var person = new Person("bob", 1); | ||
* person.getOlder(-2); | ||
* assert.equal(person.age, 1); | ||
* }); | ||
* }); | ||
* | ||
* }); | ||
* | ||
* ``` | ||
* | ||
* ### Running Tests | ||
* | ||
* To run tests there are two options the **it** executable | ||
* | ||
* Options | ||
* | ||
* * -d, --directory : The root directory of your tests | ||
* * -f --filter : A filter to apply to run certain behaviors/suites/tests | ||
* * -r, --reporter : The reporter to use when running the tests | ||
* * --cov-html : create coverage output in html, if an output path is included then the file will be written to that file otherwise it will defalt to `./coverage.html` | ||
* * --reporters : Display a list of reporters that are available | ||
* * -h, --help : Displays help. | ||
* | ||
* To run an entire suite | ||
* | ||
* it -d ./mytests -r dotmatrix | ||
* | ||
* | ||
* To run an individual test | ||
* | ||
* it ./mytests/person.test.js | ||
* Or | ||
* | ||
* it -f "Person" | ||
* | ||
* To run the #getOlder spec | ||
* | ||
* it -f "Person:#getOlder" | ||
* | ||
* | ||
* | ||
* You can alternatively run the test directly. | ||
* | ||
* **Note** When running tests using the `it.run()` method, `it` will not automatically exit the program on completion, therefore if you still have items like DB connections still open your program will not exit. | ||
* | ||
* ```javascript | ||
* | ||
* it.describe("A Person", function(it){ | ||
* | ||
* it.should("set set name", function () { | ||
* var person = new Person("bob", 1); | ||
* assert.equal(person.name, "bob"); | ||
* }); | ||
* | ||
* it.should("set set age", function () { | ||
* var person = new Person("bob", 1); | ||
* assert.equal(person.age, 1); | ||
* }); | ||
* }); | ||
* | ||
* it.run(); | ||
* | ||
* ``` | ||
* | ||
* You can also filter the tests to run from within the test | ||
* | ||
* ```javascript | ||
* | ||
* it.describe("A Person", function(it){ | ||
* | ||
* it.should("set name", function () { | ||
* var person = new Person("bob", 1); | ||
* assert.equal(person.name, "bob"); | ||
* }); | ||
* | ||
* it.should("set age", function () { | ||
* var person = new Person("bob", 1); | ||
* assert.equal(person.age, 1); | ||
* }); | ||
* | ||
* }); | ||
* | ||
* it.run("A Person:should set name"); | ||
* | ||
* ``` | ||
* | ||
* ### Reporters | ||
* | ||
* **`spec`** | ||
* | ||
* ![spec](https://raw.github.com/doug-martin/it/master/assets/spec.png) | ||
* | ||
* **`dot`** | ||
* | ||
* ![dot](https://raw.github.com/doug-martin/it/master/assets/dot.png) | ||
* | ||
* **`tap`** | ||
* | ||
* ![tap](https://raw.github.com/doug-martin/it/master/assets/tap.png) | ||
* | ||
* **`doc`** | ||
* | ||
* ![doc](https://raw.github.com/doug-martin/it/master/assets/doc.png) | ||
* | ||
* **`html`** | ||
* | ||
* ![html](https://raw.github.com/doug-martin/it/master/assets/browser.png) | ||
* | ||
* ### Code Coverage | ||
* If you use [node-jscoverage](https://github.com/visionmedia/node-jscoverage) to generate coverage then by default `it` will output a coverage report. You may also output coverage to an `HTML` file by passing in the `--cov-html` flag to the executable. | ||
* | ||
* For example out put see [patio test coverage](http://c2fo.github.com/patio/coverage.html). | ||
* | ||
* | ||
* ### Assert extensions | ||
* | ||
* The following methods are added to assert for convenience | ||
* | ||
* * `lengthOf` - assert the length of an array | ||
* * `isTrue` - assert that a value is true | ||
* * `isFalse` - assert that a value is false | ||
* * `isRegExp` - assert that a value is a Regular Expression | ||
* * `isArray` - assert that a value is an Array | ||
* * `isHash` - assert that a value is a plain object | ||
* * `isObject` - assert that a value is a object | ||
* * `isNumber` - assert that a value is a Number | ||
* * `isDate` - assert that a value is a Date | ||
* * `isBoolean` - assert that a value is a Boolean | ||
* * `isString` - assert that a value is a String | ||
* * `isUndefined` - assert that a value is undefined | ||
* * `isUndefinedOrNull` - assert that a value is undefined or null | ||
* * `isPromiseLike` - assert that a value is Promise like (contains the funtions "then", "addErrback", and "addCallback") | ||
* * `isFunction` - assert that a value is a function | ||
* * `isNull` - assert that a value is null | ||
* * `isNotNull` - assert that a value is not null | ||
* * `instanceOf` - assert that a value is an instanceof a particular object | ||
* * `truthy` - assert that the value is truthy. | ||
* * `falsy` - assert that the value is falsy. | ||
* | ||
* ### License | ||
* | ||
* | ||
* MIT <https://github.com/doug-martin/it/raw/master/LICENSE> | ||
* | ||
* ### Meta | ||
* | ||
* * Code: `git clone git://github.com/doug-martin/it.git` | ||
* | ||
* @header [../readme.md] | ||
*/ | ||
@@ -545,0 +8,0 @@ |
@@ -12,4 +12,4 @@ "use strict"; | ||
ret = _(filter.split("|")).map(function (filter) { | ||
return _(filter.trim().split(":")).map(function (f) { | ||
return f.trim(); | ||
return _(filter.replace(/^\s*|\s$/g, "").split(":")).map(function (f) { | ||
return f.replace(/^\s*|\s$/g, ""); | ||
}).value(); | ||
@@ -31,3 +31,3 @@ }).value(); | ||
var ignoreProcessError = it.ignoreProcessError === true; | ||
var ignoreProcessError = it.ignoreErrors() === true; | ||
var errorHandler = function (err) { | ||
@@ -34,0 +34,0 @@ if (!isCallback) { |
{ | ||
"name": "it", | ||
"description": "A testing framework for node", | ||
"version": "0.2.1", | ||
"version": "0.2.2", | ||
"keywords": [ | ||
@@ -22,3 +22,3 @@ "testing", | ||
"dependencies": { | ||
"declare.js": "0.0.3", | ||
"declare.js": "~0.0.3", | ||
"extended": "~0.0.3", | ||
@@ -33,13 +33,14 @@ "is-extended": "~0.0.3", | ||
"commander": "~1.1.1", | ||
"glob-whatev": "0.1.8" | ||
"glob-whatev": "~0.1.8" | ||
}, | ||
"testling": { | ||
"files": "test/browserling.js", | ||
"browsers": { | ||
"ie": [6,7,8,9], | ||
"chrome": [4,23,"canary"], | ||
"firefox": [3,3.5,3.6,4,17,"nightly"], | ||
"opera": [10,10.5,11,11.5,11.6,12,"next"], | ||
"safari": ["5.0.5",5.1] | ||
} | ||
"browsers": [ | ||
"ie/6..latest", | ||
"chrome/20..latest", | ||
"firefox/10..latest", | ||
"safari/latest", | ||
"opera/11.0..latest", | ||
"iphone/6", "ipad/6" | ||
] | ||
}, | ||
@@ -46,0 +47,0 @@ "devDependencies": { |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
1946142
84
29720
- Removeddeclare.js@0.0.3(transitive)
Updateddeclare.js@~0.0.3
Updatedglob-whatev@~0.1.8