Upgrade to 3.4.1

Change-Id: I38c8d1114fd6e6629b4f3a16a85e3e35d8d8d3d6
This commit is contained in:
Radomir Dopieralski 2020-03-02 21:26:30 +01:00
parent ca68078e75
commit 1ba0b95386
73 changed files with 1187 additions and 786 deletions

View File

@ -1,5 +1,5 @@
XStatic-Bootstrap-SCSS XStatic-Bootstrap-SCSS
-------------- ----------------------
Bootstrap style library packaged for setuptools (easy_install) / pip. Bootstrap style library packaged for setuptools (easy_install) / pip.

11
UPGRADING Normal file
View File

@ -0,0 +1,11 @@
In order to upgrade this package, it's currently easiest to follow those steps:
Checkout https://github.com/twbs/bootstrap-sass and enter the directory.
Check the hash of the version of bootstrap-scss that you want to build in
https://github.com/twbs/bootstrap repository.
Run "rake -v convert[the-hash-of-the-commit]".
Copy all files from assets/javascripts to data/js.
Copy all files from assets/fonts to data/fonts.
Copy all files from assets/stylesheets to data/scss.
Bump the version in __init__.py and run xstatic-release.
Commit the new files.

View File

@ -1,10 +1,10 @@
[metadata] [metadata]
name = XStatic-Bootstrap-SCSS name = XStatic-Bootstrap-SCSS
description = Bootstrap-SCSS 3.3.7 (XStatic packaging standard) description = Bootstrap-SCSS 3.4.1.0 (XStatic packaging standard)
description-file = README.rst description-file = README.rst
maintainer = Radomir Dopieralski maintainer = Radomir Dopieralski
maintainer-email = openstack@sheep.art.pl maintainer-email = openstack@sheep.art.pl
home-page = http://getbootstrap.com/ home-page = https://github.com/twbs/bootstrap-sass
keywords = bootstrap_scss xstatic keywords = bootstrap_scss xstatic
license = MIT license = MIT
zip_safe = False zip_safe = False

View File

@ -11,9 +11,9 @@ NAME = __name__.split('.')[-1] # package name (e.g. 'foo' or 'foo_bar')
# please use a all-lowercase valid python # please use a all-lowercase valid python
# package name # package name
VERSION = '3.3.7' # version of the packaged files, please use the upstream VERSION = '3.4.1' # version of the packaged files, please use the upstream
# version number # version number
BUILD = '1' # our package build number, so we can release new builds BUILD = '0' # our package build number, so we can release new builds
# with fixes for xstatic stuff. # with fixes for xstatic stuff.
PACKAGE_VERSION = VERSION + '.' + BUILD # version used for PyPi PACKAGE_VERSION = VERSION + '.' + BUILD # version used for PyPi
@ -28,7 +28,7 @@ MAINTAINER = 'Radomir Dopieralski'
MAINTAINER_EMAIL = 'openstack@sheep.art.pl' MAINTAINER_EMAIL = 'openstack@sheep.art.pl'
# this refers to the project homepage of the stuff we packaged: # this refers to the project homepage of the stuff we packaged:
HOMEPAGE = 'http://getbootstrap.com/' HOMEPAGE = 'https://github.com/twbs/bootstrap-sass'
# this refers to all files: # this refers to all files:
LICENSE = 'MIT' LICENSE = 'MIT'

View File

@ -1,12 +1,12 @@
//= require ./bootstrap/transition //= require ./bootstrap/affix
//= require ./bootstrap/alert //= require ./bootstrap/alert
//= require ./bootstrap/button //= require ./bootstrap/button
//= require ./bootstrap/carousel //= require ./bootstrap/carousel
//= require ./bootstrap/collapse //= require ./bootstrap/collapse
//= require ./bootstrap/dropdown //= require ./bootstrap/dropdown
//= require ./bootstrap/modal //= require ./bootstrap/modal
//= require ./bootstrap/tab
//= require ./bootstrap/affix
//= require ./bootstrap/scrollspy //= require ./bootstrap/scrollspy
//= require ./bootstrap/tab
//= require ./bootstrap/transition
//= require ./bootstrap/tooltip //= require ./bootstrap/tooltip
//= require ./bootstrap/popover //= require ./bootstrap/popover

View File

@ -1,6 +1,6 @@
/*! /*!
* Bootstrap v3.3.7 (http://getbootstrap.com) * Bootstrap v3.4.1 (https://getbootstrap.com/)
* Copyright 2011-2016 Twitter, Inc. * Copyright 2011-2019 Twitter, Inc.
* Licensed under the MIT license * Licensed under the MIT license
*/ */
@ -17,10 +17,10 @@ if (typeof jQuery === 'undefined') {
}(jQuery); }(jQuery);
/* ======================================================================== /* ========================================================================
* Bootstrap: transition.js v3.3.7 * Bootstrap: transition.js v3.4.1
* http://getbootstrap.com/javascript/#transitions * https://getbootstrap.com/docs/3.4/javascript/#transitions
* ======================================================================== * ========================================================================
* Copyright 2011-2016 Twitter, Inc. * Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */ * ======================================================================== */
@ -28,7 +28,7 @@ if (typeof jQuery === 'undefined') {
+function ($) { +function ($) {
'use strict'; 'use strict';
// CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) // CSS TRANSITION SUPPORT (Shoutout: https://modernizr.com/)
// ============================================================ // ============================================================
function transitionEnd() { function transitionEnd() {
@ -50,7 +50,7 @@ if (typeof jQuery === 'undefined') {
return false // explicit for ie8 ( ._.) return false // explicit for ie8 ( ._.)
} }
// http://blog.alexmaccaw.com/css-transitions // https://blog.alexmaccaw.com/css-transitions
$.fn.emulateTransitionEnd = function (duration) { $.fn.emulateTransitionEnd = function (duration) {
var called = false var called = false
var $el = this var $el = this
@ -77,10 +77,10 @@ if (typeof jQuery === 'undefined') {
}(jQuery); }(jQuery);
/* ======================================================================== /* ========================================================================
* Bootstrap: alert.js v3.3.7 * Bootstrap: alert.js v3.4.1
* http://getbootstrap.com/javascript/#alerts * https://getbootstrap.com/docs/3.4/javascript/#alerts
* ======================================================================== * ========================================================================
* Copyright 2011-2016 Twitter, Inc. * Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */ * ======================================================================== */
@ -96,7 +96,7 @@ if (typeof jQuery === 'undefined') {
$(el).on('click', dismiss, this.close) $(el).on('click', dismiss, this.close)
} }
Alert.VERSION = '3.3.7' Alert.VERSION = '3.4.1'
Alert.TRANSITION_DURATION = 150 Alert.TRANSITION_DURATION = 150
@ -109,7 +109,8 @@ if (typeof jQuery === 'undefined') {
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
} }
var $parent = $(selector === '#' ? [] : selector) selector = selector === '#' ? [] : selector
var $parent = $(document).find(selector)
if (e) e.preventDefault() if (e) e.preventDefault()
@ -172,10 +173,10 @@ if (typeof jQuery === 'undefined') {
}(jQuery); }(jQuery);
/* ======================================================================== /* ========================================================================
* Bootstrap: button.js v3.3.7 * Bootstrap: button.js v3.4.1
* http://getbootstrap.com/javascript/#buttons * https://getbootstrap.com/docs/3.4/javascript/#buttons
* ======================================================================== * ========================================================================
* Copyright 2011-2016 Twitter, Inc. * Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */ * ======================================================================== */
@ -192,7 +193,7 @@ if (typeof jQuery === 'undefined') {
this.isLoading = false this.isLoading = false
} }
Button.VERSION = '3.3.7' Button.VERSION = '3.4.1'
Button.DEFAULTS = { Button.DEFAULTS = {
loadingText: 'loading...' loadingText: 'loading...'
@ -298,10 +299,10 @@ if (typeof jQuery === 'undefined') {
}(jQuery); }(jQuery);
/* ======================================================================== /* ========================================================================
* Bootstrap: carousel.js v3.3.7 * Bootstrap: carousel.js v3.4.1
* http://getbootstrap.com/javascript/#carousel * https://getbootstrap.com/docs/3.4/javascript/#carousel
* ======================================================================== * ========================================================================
* Copyright 2011-2016 Twitter, Inc. * Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */ * ======================================================================== */
@ -329,7 +330,7 @@ if (typeof jQuery === 'undefined') {
.on('mouseleave.bs.carousel', $.proxy(this.cycle, this)) .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
} }
Carousel.VERSION = '3.3.7' Carousel.VERSION = '3.4.1'
Carousel.TRANSITION_DURATION = 600 Carousel.TRANSITION_DURATION = 600
@ -443,7 +444,9 @@ if (typeof jQuery === 'undefined') {
var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid" var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
if ($.support.transition && this.$element.hasClass('slide')) { if ($.support.transition && this.$element.hasClass('slide')) {
$next.addClass(type) $next.addClass(type)
if (typeof $next === 'object' && $next.length) {
$next[0].offsetWidth // force reflow $next[0].offsetWidth // force reflow
}
$active.addClass(direction) $active.addClass(direction)
$next.addClass(direction) $next.addClass(direction)
$active $active
@ -505,10 +508,17 @@ if (typeof jQuery === 'undefined') {
// ================= // =================
var clickHandler = function (e) { var clickHandler = function (e) {
var href
var $this = $(this) var $this = $(this)
var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7 var href = $this.attr('href')
if (href) {
href = href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
}
var target = $this.attr('data-target') || href
var $target = $(document).find(target)
if (!$target.hasClass('carousel')) return if (!$target.hasClass('carousel')) return
var options = $.extend({}, $target.data(), $this.data()) var options = $.extend({}, $target.data(), $this.data())
var slideIndex = $this.attr('data-slide-to') var slideIndex = $this.attr('data-slide-to')
if (slideIndex) options.interval = false if (slideIndex) options.interval = false
@ -536,10 +546,10 @@ if (typeof jQuery === 'undefined') {
}(jQuery); }(jQuery);
/* ======================================================================== /* ========================================================================
* Bootstrap: collapse.js v3.3.7 * Bootstrap: collapse.js v3.4.1
* http://getbootstrap.com/javascript/#collapse * https://getbootstrap.com/docs/3.4/javascript/#collapse
* ======================================================================== * ========================================================================
* Copyright 2011-2016 Twitter, Inc. * Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */ * ======================================================================== */
@ -567,7 +577,7 @@ if (typeof jQuery === 'undefined') {
if (this.options.toggle) this.toggle() if (this.options.toggle) this.toggle()
} }
Collapse.VERSION = '3.3.7' Collapse.VERSION = '3.4.1'
Collapse.TRANSITION_DURATION = 350 Collapse.TRANSITION_DURATION = 350
@ -674,7 +684,7 @@ if (typeof jQuery === 'undefined') {
} }
Collapse.prototype.getParent = function () { Collapse.prototype.getParent = function () {
return $(this.options.parent) return $(document).find(this.options.parent)
.find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]') .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
.each($.proxy(function (i, element) { .each($.proxy(function (i, element) {
var $element = $(element) var $element = $(element)
@ -697,7 +707,7 @@ if (typeof jQuery === 'undefined') {
var target = $trigger.attr('data-target') var target = $trigger.attr('data-target')
|| (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7 || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
return $(target) return $(document).find(target)
} }
@ -749,10 +759,10 @@ if (typeof jQuery === 'undefined') {
}(jQuery); }(jQuery);
/* ======================================================================== /* ========================================================================
* Bootstrap: dropdown.js v3.3.7 * Bootstrap: dropdown.js v3.4.1
* http://getbootstrap.com/javascript/#dropdowns * https://getbootstrap.com/docs/3.4/javascript/#dropdowns
* ======================================================================== * ========================================================================
* Copyright 2011-2016 Twitter, Inc. * Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */ * ======================================================================== */
@ -769,7 +779,7 @@ if (typeof jQuery === 'undefined') {
$(element).on('click.bs.dropdown', this.toggle) $(element).on('click.bs.dropdown', this.toggle)
} }
Dropdown.VERSION = '3.3.7' Dropdown.VERSION = '3.4.1'
function getParent($this) { function getParent($this) {
var selector = $this.attr('data-target') var selector = $this.attr('data-target')
@ -779,7 +789,7 @@ if (typeof jQuery === 'undefined') {
selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
} }
var $parent = selector && $(selector) var $parent = selector !== '#' ? $(document).find(selector) : null
return $parent && $parent.length ? $parent : $this.parent() return $parent && $parent.length ? $parent : $this.parent()
} }
@ -915,10 +925,10 @@ if (typeof jQuery === 'undefined') {
}(jQuery); }(jQuery);
/* ======================================================================== /* ========================================================================
* Bootstrap: modal.js v3.3.7 * Bootstrap: modal.js v3.4.1
* http://getbootstrap.com/javascript/#modals * https://getbootstrap.com/docs/3.4/javascript/#modals
* ======================================================================== * ========================================================================
* Copyright 2011-2016 Twitter, Inc. * Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */ * ======================================================================== */
@ -939,6 +949,7 @@ if (typeof jQuery === 'undefined') {
this.originalBodyPad = null this.originalBodyPad = null
this.scrollbarWidth = 0 this.scrollbarWidth = 0
this.ignoreBackdropClick = false this.ignoreBackdropClick = false
this.fixedContent = '.navbar-fixed-top, .navbar-fixed-bottom'
if (this.options.remote) { if (this.options.remote) {
this.$element this.$element
@ -949,7 +960,7 @@ if (typeof jQuery === 'undefined') {
} }
} }
Modal.VERSION = '3.3.7' Modal.VERSION = '3.4.1'
Modal.TRANSITION_DURATION = 300 Modal.TRANSITION_DURATION = 300
Modal.BACKDROP_TRANSITION_DURATION = 150 Modal.BACKDROP_TRANSITION_DURATION = 150
@ -1185,11 +1196,26 @@ if (typeof jQuery === 'undefined') {
Modal.prototype.setScrollbar = function () { Modal.prototype.setScrollbar = function () {
var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10) var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
this.originalBodyPad = document.body.style.paddingRight || '' this.originalBodyPad = document.body.style.paddingRight || ''
if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth) var scrollbarWidth = this.scrollbarWidth
if (this.bodyIsOverflowing) {
this.$body.css('padding-right', bodyPad + scrollbarWidth)
$(this.fixedContent).each(function (index, element) {
var actualPadding = element.style.paddingRight
var calculatedPadding = $(element).css('padding-right')
$(element)
.data('padding-right', actualPadding)
.css('padding-right', parseFloat(calculatedPadding) + scrollbarWidth + 'px')
})
}
} }
Modal.prototype.resetScrollbar = function () { Modal.prototype.resetScrollbar = function () {
this.$body.css('padding-right', this.originalBodyPad) this.$body.css('padding-right', this.originalBodyPad)
$(this.fixedContent).each(function (index, element) {
var padding = $(element).data('padding-right')
$(element).removeData('padding-right')
element.style.paddingRight = padding ? padding : ''
})
} }
Modal.prototype.measureScrollbar = function () { // thx walsh Modal.prototype.measureScrollbar = function () { // thx walsh
@ -1238,7 +1264,10 @@ if (typeof jQuery === 'undefined') {
$(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) { $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
var $this = $(this) var $this = $(this)
var href = $this.attr('href') var href = $this.attr('href')
var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7 var target = $this.attr('data-target') ||
(href && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
var $target = $(document).find(target)
var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data()) var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
if ($this.is('a')) e.preventDefault() if ($this.is('a')) e.preventDefault()
@ -1255,18 +1284,148 @@ if (typeof jQuery === 'undefined') {
}(jQuery); }(jQuery);
/* ======================================================================== /* ========================================================================
* Bootstrap: tooltip.js v3.3.7 * Bootstrap: tooltip.js v3.4.1
* http://getbootstrap.com/javascript/#tooltip * https://getbootstrap.com/docs/3.4/javascript/#tooltip
* Inspired by the original jQuery.tipsy by Jason Frame * Inspired by the original jQuery.tipsy by Jason Frame
* ======================================================================== * ========================================================================
* Copyright 2011-2016 Twitter, Inc. * Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */ * ======================================================================== */
+function ($) { +function ($) {
'use strict'; 'use strict';
var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']
var uriAttrs = [
'background',
'cite',
'href',
'itemtype',
'longdesc',
'poster',
'src',
'xlink:href'
]
var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i
var DefaultWhitelist = {
// Global attributes allowed on any supplied element below.
'*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
a: ['target', 'href', 'title', 'rel'],
area: [],
b: [],
br: [],
col: [],
code: [],
div: [],
em: [],
hr: [],
h1: [],
h2: [],
h3: [],
h4: [],
h5: [],
h6: [],
i: [],
img: ['src', 'alt', 'title', 'width', 'height'],
li: [],
ol: [],
p: [],
pre: [],
s: [],
small: [],
span: [],
sub: [],
sup: [],
strong: [],
u: [],
ul: []
}
/**
* A pattern that recognizes a commonly useful subset of URLs that are safe.
*
* Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
*/
var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi
/**
* A pattern that matches safe data URLs. Only matches image, video and audio types.
*
* Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
*/
var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i
function allowedAttribute(attr, allowedAttributeList) {
var attrName = attr.nodeName.toLowerCase()
if ($.inArray(attrName, allowedAttributeList) !== -1) {
if ($.inArray(attrName, uriAttrs) !== -1) {
return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN))
}
return true
}
var regExp = $(allowedAttributeList).filter(function (index, value) {
return value instanceof RegExp
})
// Check if a regular expression validates the attribute.
for (var i = 0, l = regExp.length; i < l; i++) {
if (attrName.match(regExp[i])) {
return true
}
}
return false
}
function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {
if (unsafeHtml.length === 0) {
return unsafeHtml
}
if (sanitizeFn && typeof sanitizeFn === 'function') {
return sanitizeFn(unsafeHtml)
}
// IE 8 and below don't support createHTMLDocument
if (!document.implementation || !document.implementation.createHTMLDocument) {
return unsafeHtml
}
var createdDocument = document.implementation.createHTMLDocument('sanitization')
createdDocument.body.innerHTML = unsafeHtml
var whitelistKeys = $.map(whiteList, function (el, i) { return i })
var elements = $(createdDocument.body).find('*')
for (var i = 0, len = elements.length; i < len; i++) {
var el = elements[i]
var elName = el.nodeName.toLowerCase()
if ($.inArray(elName, whitelistKeys) === -1) {
el.parentNode.removeChild(el)
continue
}
var attributeList = $.map(el.attributes, function (el) { return el })
var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])
for (var j = 0, len2 = attributeList.length; j < len2; j++) {
if (!allowedAttribute(attributeList[j], whitelistedAttributes)) {
el.removeAttribute(attributeList[j].nodeName)
}
}
}
return createdDocument.body.innerHTML
}
// TOOLTIP PUBLIC CLASS DEFINITION // TOOLTIP PUBLIC CLASS DEFINITION
// =============================== // ===============================
@ -1282,7 +1441,7 @@ if (typeof jQuery === 'undefined') {
this.init('tooltip', element, options) this.init('tooltip', element, options)
} }
Tooltip.VERSION = '3.3.7' Tooltip.VERSION = '3.4.1'
Tooltip.TRANSITION_DURATION = 150 Tooltip.TRANSITION_DURATION = 150
@ -1299,7 +1458,10 @@ if (typeof jQuery === 'undefined') {
viewport: { viewport: {
selector: 'body', selector: 'body',
padding: 0 padding: 0
} },
sanitize : true,
sanitizeFn : null,
whiteList : DefaultWhitelist
} }
Tooltip.prototype.init = function (type, element, options) { Tooltip.prototype.init = function (type, element, options) {
@ -1307,7 +1469,7 @@ if (typeof jQuery === 'undefined') {
this.type = type this.type = type
this.$element = $(element) this.$element = $(element)
this.options = this.getOptions(options) this.options = this.getOptions(options)
this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport)) this.$viewport = this.options.viewport && $(document).find($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
this.inState = { click: false, hover: false, focus: false } this.inState = { click: false, hover: false, focus: false }
if (this.$element[0] instanceof document.constructor && !this.options.selector) { if (this.$element[0] instanceof document.constructor && !this.options.selector) {
@ -1340,7 +1502,15 @@ if (typeof jQuery === 'undefined') {
} }
Tooltip.prototype.getOptions = function (options) { Tooltip.prototype.getOptions = function (options) {
options = $.extend({}, this.getDefaults(), this.$element.data(), options) var dataAttributes = this.$element.data()
for (var dataAttr in dataAttributes) {
if (dataAttributes.hasOwnProperty(dataAttr) && $.inArray(dataAttr, DISALLOWED_ATTRIBUTES) !== -1) {
delete dataAttributes[dataAttr]
}
}
options = $.extend({}, this.getDefaults(), dataAttributes, options)
if (options.delay && typeof options.delay == 'number') { if (options.delay && typeof options.delay == 'number') {
options.delay = { options.delay = {
@ -1349,6 +1519,10 @@ if (typeof jQuery === 'undefined') {
} }
} }
if (options.sanitize) {
options.template = sanitizeHtml(options.template, options.whiteList, options.sanitizeFn)
}
return options return options
} }
@ -1460,7 +1634,7 @@ if (typeof jQuery === 'undefined') {
.addClass(placement) .addClass(placement)
.data('bs.' + this.type, this) .data('bs.' + this.type, this)
this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) this.options.container ? $tip.appendTo($(document).find(this.options.container)) : $tip.insertAfter(this.$element)
this.$element.trigger('inserted.bs.' + this.type) this.$element.trigger('inserted.bs.' + this.type)
var pos = this.getPosition() var pos = this.getPosition()
@ -1562,7 +1736,16 @@ if (typeof jQuery === 'undefined') {
var $tip = this.tip() var $tip = this.tip()
var title = this.getTitle() var title = this.getTitle()
$tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) if (this.options.html) {
if (this.options.sanitize) {
title = sanitizeHtml(title, this.options.whiteList, this.options.sanitizeFn)
}
$tip.find('.tooltip-inner').html(title)
} else {
$tip.find('.tooltip-inner').text(title)
}
$tip.removeClass('fade in top bottom left right') $tip.removeClass('fade in top bottom left right')
} }
@ -1743,6 +1926,9 @@ if (typeof jQuery === 'undefined') {
}) })
} }
Tooltip.prototype.sanitizeHtml = function (unsafeHtml) {
return sanitizeHtml(unsafeHtml, this.options.whiteList, this.options.sanitizeFn)
}
// TOOLTIP PLUGIN DEFINITION // TOOLTIP PLUGIN DEFINITION
// ========================= // =========================
@ -1776,10 +1962,10 @@ if (typeof jQuery === 'undefined') {
}(jQuery); }(jQuery);
/* ======================================================================== /* ========================================================================
* Bootstrap: popover.js v3.3.7 * Bootstrap: popover.js v3.4.1
* http://getbootstrap.com/javascript/#popovers * https://getbootstrap.com/docs/3.4/javascript/#popovers
* ======================================================================== * ========================================================================
* Copyright 2011-2016 Twitter, Inc. * Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */ * ======================================================================== */
@ -1796,7 +1982,7 @@ if (typeof jQuery === 'undefined') {
if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js') if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
Popover.VERSION = '3.3.7' Popover.VERSION = '3.4.1'
Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, { Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
placement: 'right', placement: 'right',
@ -1822,10 +2008,25 @@ if (typeof jQuery === 'undefined') {
var title = this.getTitle() var title = this.getTitle()
var content = this.getContent() var content = this.getContent()
$tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) if (this.options.html) {
$tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events var typeContent = typeof content
this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
if (this.options.sanitize) {
title = this.sanitizeHtml(title)
if (typeContent === 'string') {
content = this.sanitizeHtml(content)
}
}
$tip.find('.popover-title').html(title)
$tip.find('.popover-content').children().detach().end()[
typeContent === 'string' ? 'html' : 'append'
](content) ](content)
} else {
$tip.find('.popover-title').text(title)
$tip.find('.popover-content').children().detach().end().text(content)
}
$tip.removeClass('fade top bottom left right in') $tip.removeClass('fade top bottom left right in')
@ -1885,10 +2086,10 @@ if (typeof jQuery === 'undefined') {
}(jQuery); }(jQuery);
/* ======================================================================== /* ========================================================================
* Bootstrap: scrollspy.js v3.3.7 * Bootstrap: scrollspy.js v3.4.1
* http://getbootstrap.com/javascript/#scrollspy * https://getbootstrap.com/docs/3.4/javascript/#scrollspy
* ======================================================================== * ========================================================================
* Copyright 2011-2016 Twitter, Inc. * Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */ * ======================================================================== */
@ -1914,7 +2115,7 @@ if (typeof jQuery === 'undefined') {
this.process() this.process()
} }
ScrollSpy.VERSION = '3.3.7' ScrollSpy.VERSION = '3.4.1'
ScrollSpy.DEFAULTS = { ScrollSpy.DEFAULTS = {
offset: 10 offset: 10
@ -2058,10 +2259,10 @@ if (typeof jQuery === 'undefined') {
}(jQuery); }(jQuery);
/* ======================================================================== /* ========================================================================
* Bootstrap: tab.js v3.3.7 * Bootstrap: tab.js v3.4.1
* http://getbootstrap.com/javascript/#tabs * https://getbootstrap.com/docs/3.4/javascript/#tabs
* ======================================================================== * ========================================================================
* Copyright 2011-2016 Twitter, Inc. * Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */ * ======================================================================== */
@ -2078,7 +2279,7 @@ if (typeof jQuery === 'undefined') {
// jscs:enable requireDollarBeforejQueryAssignment // jscs:enable requireDollarBeforejQueryAssignment
} }
Tab.VERSION = '3.3.7' Tab.VERSION = '3.4.1'
Tab.TRANSITION_DURATION = 150 Tab.TRANSITION_DURATION = 150
@ -2107,7 +2308,7 @@ if (typeof jQuery === 'undefined') {
if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
var $target = $(selector) var $target = $(document).find(selector)
this.activate($this.closest('li'), $ul) this.activate($this.closest('li'), $ul)
this.activate($target, $target.parent(), function () { this.activate($target, $target.parent(), function () {
@ -2214,10 +2415,10 @@ if (typeof jQuery === 'undefined') {
}(jQuery); }(jQuery);
/* ======================================================================== /* ========================================================================
* Bootstrap: affix.js v3.3.7 * Bootstrap: affix.js v3.4.1
* http://getbootstrap.com/javascript/#affix * https://getbootstrap.com/docs/3.4/javascript/#affix
* ======================================================================== * ========================================================================
* Copyright 2011-2016 Twitter, Inc. * Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */ * ======================================================================== */
@ -2231,7 +2432,9 @@ if (typeof jQuery === 'undefined') {
var Affix = function (element, options) { var Affix = function (element, options) {
this.options = $.extend({}, Affix.DEFAULTS, options) this.options = $.extend({}, Affix.DEFAULTS, options)
this.$target = $(this.options.target) var target = this.options.target === Affix.DEFAULTS.target ? $(this.options.target) : $(document).find(this.options.target)
this.$target = target
.on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this)) .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
.on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this)) .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
@ -2243,7 +2446,7 @@ if (typeof jQuery === 'undefined') {
this.checkPosition() this.checkPosition()
} }
Affix.VERSION = '3.3.7' Affix.VERSION = '3.4.1'
Affix.RESET = 'affix affix-top affix-bottom' Affix.RESET = 'affix affix-top affix-bottom'

File diff suppressed because one or more lines are too long

View File

@ -1,8 +1,8 @@
/* ======================================================================== /* ========================================================================
* Bootstrap: affix.js v3.3.7 * Bootstrap: affix.js v3.4.1
* http://getbootstrap.com/javascript/#affix * https://getbootstrap.com/docs/3.4/javascript/#affix
* ======================================================================== * ========================================================================
* Copyright 2011-2016 Twitter, Inc. * Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */ * ======================================================================== */
@ -16,7 +16,9 @@
var Affix = function (element, options) { var Affix = function (element, options) {
this.options = $.extend({}, Affix.DEFAULTS, options) this.options = $.extend({}, Affix.DEFAULTS, options)
this.$target = $(this.options.target) var target = this.options.target === Affix.DEFAULTS.target ? $(this.options.target) : $(document).find(this.options.target)
this.$target = target
.on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this)) .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
.on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this)) .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
@ -28,7 +30,7 @@
this.checkPosition() this.checkPosition()
} }
Affix.VERSION = '3.3.7' Affix.VERSION = '3.4.1'
Affix.RESET = 'affix affix-top affix-bottom' Affix.RESET = 'affix affix-top affix-bottom'

View File

@ -1,8 +1,8 @@
/* ======================================================================== /* ========================================================================
* Bootstrap: alert.js v3.3.7 * Bootstrap: alert.js v3.4.1
* http://getbootstrap.com/javascript/#alerts * https://getbootstrap.com/docs/3.4/javascript/#alerts
* ======================================================================== * ========================================================================
* Copyright 2011-2016 Twitter, Inc. * Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */ * ======================================================================== */
@ -18,7 +18,7 @@
$(el).on('click', dismiss, this.close) $(el).on('click', dismiss, this.close)
} }
Alert.VERSION = '3.3.7' Alert.VERSION = '3.4.1'
Alert.TRANSITION_DURATION = 150 Alert.TRANSITION_DURATION = 150
@ -31,7 +31,8 @@
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
} }
var $parent = $(selector === '#' ? [] : selector) selector = selector === '#' ? [] : selector
var $parent = $(document).find(selector)
if (e) e.preventDefault() if (e) e.preventDefault()

View File

@ -1,8 +1,8 @@
/* ======================================================================== /* ========================================================================
* Bootstrap: button.js v3.3.7 * Bootstrap: button.js v3.4.1
* http://getbootstrap.com/javascript/#buttons * https://getbootstrap.com/docs/3.4/javascript/#buttons
* ======================================================================== * ========================================================================
* Copyright 2011-2016 Twitter, Inc. * Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */ * ======================================================================== */
@ -19,7 +19,7 @@
this.isLoading = false this.isLoading = false
} }
Button.VERSION = '3.3.7' Button.VERSION = '3.4.1'
Button.DEFAULTS = { Button.DEFAULTS = {
loadingText: 'loading...' loadingText: 'loading...'

View File

@ -1,8 +1,8 @@
/* ======================================================================== /* ========================================================================
* Bootstrap: carousel.js v3.3.7 * Bootstrap: carousel.js v3.4.1
* http://getbootstrap.com/javascript/#carousel * https://getbootstrap.com/docs/3.4/javascript/#carousel
* ======================================================================== * ========================================================================
* Copyright 2011-2016 Twitter, Inc. * Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */ * ======================================================================== */
@ -30,7 +30,7 @@
.on('mouseleave.bs.carousel', $.proxy(this.cycle, this)) .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
} }
Carousel.VERSION = '3.3.7' Carousel.VERSION = '3.4.1'
Carousel.TRANSITION_DURATION = 600 Carousel.TRANSITION_DURATION = 600
@ -144,7 +144,9 @@
var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid" var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
if ($.support.transition && this.$element.hasClass('slide')) { if ($.support.transition && this.$element.hasClass('slide')) {
$next.addClass(type) $next.addClass(type)
if (typeof $next === 'object' && $next.length) {
$next[0].offsetWidth // force reflow $next[0].offsetWidth // force reflow
}
$active.addClass(direction) $active.addClass(direction)
$next.addClass(direction) $next.addClass(direction)
$active $active
@ -206,10 +208,17 @@
// ================= // =================
var clickHandler = function (e) { var clickHandler = function (e) {
var href
var $this = $(this) var $this = $(this)
var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7 var href = $this.attr('href')
if (href) {
href = href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
}
var target = $this.attr('data-target') || href
var $target = $(document).find(target)
if (!$target.hasClass('carousel')) return if (!$target.hasClass('carousel')) return
var options = $.extend({}, $target.data(), $this.data()) var options = $.extend({}, $target.data(), $this.data())
var slideIndex = $this.attr('data-slide-to') var slideIndex = $this.attr('data-slide-to')
if (slideIndex) options.interval = false if (slideIndex) options.interval = false

View File

@ -1,8 +1,8 @@
/* ======================================================================== /* ========================================================================
* Bootstrap: collapse.js v3.3.7 * Bootstrap: collapse.js v3.4.1
* http://getbootstrap.com/javascript/#collapse * https://getbootstrap.com/docs/3.4/javascript/#collapse
* ======================================================================== * ========================================================================
* Copyright 2011-2016 Twitter, Inc. * Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */ * ======================================================================== */
@ -30,7 +30,7 @@
if (this.options.toggle) this.toggle() if (this.options.toggle) this.toggle()
} }
Collapse.VERSION = '3.3.7' Collapse.VERSION = '3.4.1'
Collapse.TRANSITION_DURATION = 350 Collapse.TRANSITION_DURATION = 350
@ -137,7 +137,7 @@
} }
Collapse.prototype.getParent = function () { Collapse.prototype.getParent = function () {
return $(this.options.parent) return $(document).find(this.options.parent)
.find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]') .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
.each($.proxy(function (i, element) { .each($.proxy(function (i, element) {
var $element = $(element) var $element = $(element)
@ -160,7 +160,7 @@
var target = $trigger.attr('data-target') var target = $trigger.attr('data-target')
|| (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7 || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
return $(target) return $(document).find(target)
} }

View File

@ -1,8 +1,8 @@
/* ======================================================================== /* ========================================================================
* Bootstrap: dropdown.js v3.3.7 * Bootstrap: dropdown.js v3.4.1
* http://getbootstrap.com/javascript/#dropdowns * https://getbootstrap.com/docs/3.4/javascript/#dropdowns
* ======================================================================== * ========================================================================
* Copyright 2011-2016 Twitter, Inc. * Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */ * ======================================================================== */
@ -19,7 +19,7 @@
$(element).on('click.bs.dropdown', this.toggle) $(element).on('click.bs.dropdown', this.toggle)
} }
Dropdown.VERSION = '3.3.7' Dropdown.VERSION = '3.4.1'
function getParent($this) { function getParent($this) {
var selector = $this.attr('data-target') var selector = $this.attr('data-target')
@ -29,7 +29,7 @@
selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
} }
var $parent = selector && $(selector) var $parent = selector !== '#' ? $(document).find(selector) : null
return $parent && $parent.length ? $parent : $this.parent() return $parent && $parent.length ? $parent : $this.parent()
} }

View File

@ -1,8 +1,8 @@
/* ======================================================================== /* ========================================================================
* Bootstrap: modal.js v3.3.7 * Bootstrap: modal.js v3.4.1
* http://getbootstrap.com/javascript/#modals * https://getbootstrap.com/docs/3.4/javascript/#modals
* ======================================================================== * ========================================================================
* Copyright 2011-2016 Twitter, Inc. * Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */ * ======================================================================== */
@ -23,6 +23,7 @@
this.originalBodyPad = null this.originalBodyPad = null
this.scrollbarWidth = 0 this.scrollbarWidth = 0
this.ignoreBackdropClick = false this.ignoreBackdropClick = false
this.fixedContent = '.navbar-fixed-top, .navbar-fixed-bottom'
if (this.options.remote) { if (this.options.remote) {
this.$element this.$element
@ -33,7 +34,7 @@
} }
} }
Modal.VERSION = '3.3.7' Modal.VERSION = '3.4.1'
Modal.TRANSITION_DURATION = 300 Modal.TRANSITION_DURATION = 300
Modal.BACKDROP_TRANSITION_DURATION = 150 Modal.BACKDROP_TRANSITION_DURATION = 150
@ -269,11 +270,26 @@
Modal.prototype.setScrollbar = function () { Modal.prototype.setScrollbar = function () {
var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10) var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
this.originalBodyPad = document.body.style.paddingRight || '' this.originalBodyPad = document.body.style.paddingRight || ''
if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth) var scrollbarWidth = this.scrollbarWidth
if (this.bodyIsOverflowing) {
this.$body.css('padding-right', bodyPad + scrollbarWidth)
$(this.fixedContent).each(function (index, element) {
var actualPadding = element.style.paddingRight
var calculatedPadding = $(element).css('padding-right')
$(element)
.data('padding-right', actualPadding)
.css('padding-right', parseFloat(calculatedPadding) + scrollbarWidth + 'px')
})
}
} }
Modal.prototype.resetScrollbar = function () { Modal.prototype.resetScrollbar = function () {
this.$body.css('padding-right', this.originalBodyPad) this.$body.css('padding-right', this.originalBodyPad)
$(this.fixedContent).each(function (index, element) {
var padding = $(element).data('padding-right')
$(element).removeData('padding-right')
element.style.paddingRight = padding ? padding : ''
})
} }
Modal.prototype.measureScrollbar = function () { // thx walsh Modal.prototype.measureScrollbar = function () { // thx walsh
@ -322,7 +338,10 @@
$(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) { $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
var $this = $(this) var $this = $(this)
var href = $this.attr('href') var href = $this.attr('href')
var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7 var target = $this.attr('data-target') ||
(href && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
var $target = $(document).find(target)
var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data()) var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
if ($this.is('a')) e.preventDefault() if ($this.is('a')) e.preventDefault()

View File

@ -1,8 +1,8 @@
/* ======================================================================== /* ========================================================================
* Bootstrap: popover.js v3.3.7 * Bootstrap: popover.js v3.4.1
* http://getbootstrap.com/javascript/#popovers * https://getbootstrap.com/docs/3.4/javascript/#popovers
* ======================================================================== * ========================================================================
* Copyright 2011-2016 Twitter, Inc. * Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */ * ======================================================================== */
@ -19,7 +19,7 @@
if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js') if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
Popover.VERSION = '3.3.7' Popover.VERSION = '3.4.1'
Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, { Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
placement: 'right', placement: 'right',
@ -45,10 +45,25 @@
var title = this.getTitle() var title = this.getTitle()
var content = this.getContent() var content = this.getContent()
$tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) if (this.options.html) {
$tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events var typeContent = typeof content
this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
if (this.options.sanitize) {
title = this.sanitizeHtml(title)
if (typeContent === 'string') {
content = this.sanitizeHtml(content)
}
}
$tip.find('.popover-title').html(title)
$tip.find('.popover-content').children().detach().end()[
typeContent === 'string' ? 'html' : 'append'
](content) ](content)
} else {
$tip.find('.popover-title').text(title)
$tip.find('.popover-content').children().detach().end().text(content)
}
$tip.removeClass('fade top bottom left right in') $tip.removeClass('fade top bottom left right in')

View File

@ -1,8 +1,8 @@
/* ======================================================================== /* ========================================================================
* Bootstrap: scrollspy.js v3.3.7 * Bootstrap: scrollspy.js v3.4.1
* http://getbootstrap.com/javascript/#scrollspy * https://getbootstrap.com/docs/3.4/javascript/#scrollspy
* ======================================================================== * ========================================================================
* Copyright 2011-2016 Twitter, Inc. * Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */ * ======================================================================== */
@ -28,7 +28,7 @@
this.process() this.process()
} }
ScrollSpy.VERSION = '3.3.7' ScrollSpy.VERSION = '3.4.1'
ScrollSpy.DEFAULTS = { ScrollSpy.DEFAULTS = {
offset: 10 offset: 10

View File

@ -1,8 +1,8 @@
/* ======================================================================== /* ========================================================================
* Bootstrap: tab.js v3.3.7 * Bootstrap: tab.js v3.4.1
* http://getbootstrap.com/javascript/#tabs * https://getbootstrap.com/docs/3.4/javascript/#tabs
* ======================================================================== * ========================================================================
* Copyright 2011-2016 Twitter, Inc. * Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */ * ======================================================================== */
@ -19,7 +19,7 @@
// jscs:enable requireDollarBeforejQueryAssignment // jscs:enable requireDollarBeforejQueryAssignment
} }
Tab.VERSION = '3.3.7' Tab.VERSION = '3.4.1'
Tab.TRANSITION_DURATION = 150 Tab.TRANSITION_DURATION = 150
@ -48,7 +48,7 @@
if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
var $target = $(selector) var $target = $(document).find(selector)
this.activate($this.closest('li'), $ul) this.activate($this.closest('li'), $ul)
this.activate($target, $target.parent(), function () { this.activate($target, $target.parent(), function () {

View File

@ -1,16 +1,146 @@
/* ======================================================================== /* ========================================================================
* Bootstrap: tooltip.js v3.3.7 * Bootstrap: tooltip.js v3.4.1
* http://getbootstrap.com/javascript/#tooltip * https://getbootstrap.com/docs/3.4/javascript/#tooltip
* Inspired by the original jQuery.tipsy by Jason Frame * Inspired by the original jQuery.tipsy by Jason Frame
* ======================================================================== * ========================================================================
* Copyright 2011-2016 Twitter, Inc. * Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */ * ======================================================================== */
+function ($) { +function ($) {
'use strict'; 'use strict';
var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']
var uriAttrs = [
'background',
'cite',
'href',
'itemtype',
'longdesc',
'poster',
'src',
'xlink:href'
]
var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i
var DefaultWhitelist = {
// Global attributes allowed on any supplied element below.
'*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
a: ['target', 'href', 'title', 'rel'],
area: [],
b: [],
br: [],
col: [],
code: [],
div: [],
em: [],
hr: [],
h1: [],
h2: [],
h3: [],
h4: [],
h5: [],
h6: [],
i: [],
img: ['src', 'alt', 'title', 'width', 'height'],
li: [],
ol: [],
p: [],
pre: [],
s: [],
small: [],
span: [],
sub: [],
sup: [],
strong: [],
u: [],
ul: []
}
/**
* A pattern that recognizes a commonly useful subset of URLs that are safe.
*
* Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
*/
var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi
/**
* A pattern that matches safe data URLs. Only matches image, video and audio types.
*
* Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
*/
var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i
function allowedAttribute(attr, allowedAttributeList) {
var attrName = attr.nodeName.toLowerCase()
if ($.inArray(attrName, allowedAttributeList) !== -1) {
if ($.inArray(attrName, uriAttrs) !== -1) {
return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN))
}
return true
}
var regExp = $(allowedAttributeList).filter(function (index, value) {
return value instanceof RegExp
})
// Check if a regular expression validates the attribute.
for (var i = 0, l = regExp.length; i < l; i++) {
if (attrName.match(regExp[i])) {
return true
}
}
return false
}
function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {
if (unsafeHtml.length === 0) {
return unsafeHtml
}
if (sanitizeFn && typeof sanitizeFn === 'function') {
return sanitizeFn(unsafeHtml)
}
// IE 8 and below don't support createHTMLDocument
if (!document.implementation || !document.implementation.createHTMLDocument) {
return unsafeHtml
}
var createdDocument = document.implementation.createHTMLDocument('sanitization')
createdDocument.body.innerHTML = unsafeHtml
var whitelistKeys = $.map(whiteList, function (el, i) { return i })
var elements = $(createdDocument.body).find('*')
for (var i = 0, len = elements.length; i < len; i++) {
var el = elements[i]
var elName = el.nodeName.toLowerCase()
if ($.inArray(elName, whitelistKeys) === -1) {
el.parentNode.removeChild(el)
continue
}
var attributeList = $.map(el.attributes, function (el) { return el })
var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])
for (var j = 0, len2 = attributeList.length; j < len2; j++) {
if (!allowedAttribute(attributeList[j], whitelistedAttributes)) {
el.removeAttribute(attributeList[j].nodeName)
}
}
}
return createdDocument.body.innerHTML
}
// TOOLTIP PUBLIC CLASS DEFINITION // TOOLTIP PUBLIC CLASS DEFINITION
// =============================== // ===============================
@ -26,7 +156,7 @@
this.init('tooltip', element, options) this.init('tooltip', element, options)
} }
Tooltip.VERSION = '3.3.7' Tooltip.VERSION = '3.4.1'
Tooltip.TRANSITION_DURATION = 150 Tooltip.TRANSITION_DURATION = 150
@ -43,7 +173,10 @@
viewport: { viewport: {
selector: 'body', selector: 'body',
padding: 0 padding: 0
} },
sanitize : true,
sanitizeFn : null,
whiteList : DefaultWhitelist
} }
Tooltip.prototype.init = function (type, element, options) { Tooltip.prototype.init = function (type, element, options) {
@ -51,7 +184,7 @@
this.type = type this.type = type
this.$element = $(element) this.$element = $(element)
this.options = this.getOptions(options) this.options = this.getOptions(options)
this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport)) this.$viewport = this.options.viewport && $(document).find($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
this.inState = { click: false, hover: false, focus: false } this.inState = { click: false, hover: false, focus: false }
if (this.$element[0] instanceof document.constructor && !this.options.selector) { if (this.$element[0] instanceof document.constructor && !this.options.selector) {
@ -84,7 +217,15 @@
} }
Tooltip.prototype.getOptions = function (options) { Tooltip.prototype.getOptions = function (options) {
options = $.extend({}, this.getDefaults(), this.$element.data(), options) var dataAttributes = this.$element.data()
for (var dataAttr in dataAttributes) {
if (dataAttributes.hasOwnProperty(dataAttr) && $.inArray(dataAttr, DISALLOWED_ATTRIBUTES) !== -1) {
delete dataAttributes[dataAttr]
}
}
options = $.extend({}, this.getDefaults(), dataAttributes, options)
if (options.delay && typeof options.delay == 'number') { if (options.delay && typeof options.delay == 'number') {
options.delay = { options.delay = {
@ -93,6 +234,10 @@
} }
} }
if (options.sanitize) {
options.template = sanitizeHtml(options.template, options.whiteList, options.sanitizeFn)
}
return options return options
} }
@ -204,7 +349,7 @@
.addClass(placement) .addClass(placement)
.data('bs.' + this.type, this) .data('bs.' + this.type, this)
this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) this.options.container ? $tip.appendTo($(document).find(this.options.container)) : $tip.insertAfter(this.$element)
this.$element.trigger('inserted.bs.' + this.type) this.$element.trigger('inserted.bs.' + this.type)
var pos = this.getPosition() var pos = this.getPosition()
@ -306,7 +451,16 @@
var $tip = this.tip() var $tip = this.tip()
var title = this.getTitle() var title = this.getTitle()
$tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) if (this.options.html) {
if (this.options.sanitize) {
title = sanitizeHtml(title, this.options.whiteList, this.options.sanitizeFn)
}
$tip.find('.tooltip-inner').html(title)
} else {
$tip.find('.tooltip-inner').text(title)
}
$tip.removeClass('fade in top bottom left right') $tip.removeClass('fade in top bottom left right')
} }
@ -487,6 +641,9 @@
}) })
} }
Tooltip.prototype.sanitizeHtml = function (unsafeHtml) {
return sanitizeHtml(unsafeHtml, this.options.whiteList, this.options.sanitizeFn)
}
// TOOLTIP PLUGIN DEFINITION // TOOLTIP PLUGIN DEFINITION
// ========================= // =========================

View File

@ -1,8 +1,8 @@
/* ======================================================================== /* ========================================================================
* Bootstrap: transition.js v3.3.7 * Bootstrap: transition.js v3.4.1
* http://getbootstrap.com/javascript/#transitions * https://getbootstrap.com/docs/3.4/javascript/#transitions
* ======================================================================== * ========================================================================
* Copyright 2011-2016 Twitter, Inc. * Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */ * ======================================================================== */
@ -10,7 +10,7 @@
+function ($) { +function ($) {
'use strict'; 'use strict';
// CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) // CSS TRANSITION SUPPORT (Shoutout: https://modernizr.com/)
// ============================================================ // ============================================================
function transitionEnd() { function transitionEnd() {
@ -32,7 +32,7 @@
return false // explicit for ie8 ( ._.) return false // explicit for ie8 ( ._.)
} }
// http://blog.alexmaccaw.com/css-transitions // https://blog.alexmaccaw.com/css-transitions
$.fn.emulateTransitionEnd = function (duration) { $.fn.emulateTransitionEnd = function (duration) {
var called = false var called = false
var $el = this var $el = this

View File

@ -1,6 +1,6 @@
/*! /*!
* Bootstrap v3.3.7 (http://getbootstrap.com) * Bootstrap v3.4.1 (https://getbootstrap.com/)
* Copyright 2011-2016 Twitter, Inc. * Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/ */

View File

@ -15,8 +15,7 @@
// Headings for larger alerts // Headings for larger alerts
h4 { h4 {
margin-top: 0; margin-top: 0;
// Specified for the h4 to prevent conflicts of changing $headings-color color: inherit; // Specified for the h4 to prevent conflicts of changing $headings-color
color: inherit;
} }
// Provide class for links that match alerts // Provide class for links that match alerts
@ -39,7 +38,8 @@
// //
// Expand the right padding and account for the close button's positioning. // Expand the right padding and account for the close button's positioning.
.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0. // The misspelled .alert-dismissable was deprecated in 3.2.0.
.alert-dismissable,
.alert-dismissible { .alert-dismissible {
padding-right: ($alert-padding + 20); padding-right: ($alert-padding + 20);

View File

@ -10,11 +10,11 @@
padding: 3px 7px; padding: 3px 7px;
font-size: $font-size-small; font-size: $font-size-small;
font-weight: $badge-font-weight; font-weight: $badge-font-weight;
color: $badge-color;
line-height: $badge-line-height; line-height: $badge-line-height;
vertical-align: middle; color: $badge-color;
white-space: nowrap;
text-align: center; text-align: center;
white-space: nowrap;
vertical-align: middle;
background-color: $badge-bg; background-color: $badge-bg;
border-radius: $badge-border-radius; border-radius: $badge-border-radius;

View File

@ -14,11 +14,11 @@
display: inline-block; display: inline-block;
+ li:before { + li:before {
padding: 0 5px;
color: $breadcrumb-color;
// [converter] Workaround for https://github.com/sass/libsass/issues/1115 // [converter] Workaround for https://github.com/sass/libsass/issues/1115
$nbsp: "\00a0"; $nbsp: "\00a0";
content: "#{$breadcrumb-separator}#{$nbsp}"; // Unicode space added since inline-block means non-collapsing white-space content: "#{$breadcrumb-separator}#{$nbsp}"; // Unicode space added since inline-block means non-collapsing white-space
padding: 0 5px;
color: $breadcrumb-color;
} }
} }

View File

@ -103,18 +103,18 @@
// Give the line between buttons some depth // Give the line between buttons some depth
.btn-group > .btn + .dropdown-toggle { .btn-group > .btn + .dropdown-toggle {
padding-left: 8px;
padding-right: 8px; padding-right: 8px;
padding-left: 8px;
} }
.btn-group > .btn-lg + .dropdown-toggle { .btn-group > .btn-lg + .dropdown-toggle {
padding-left: 12px;
padding-right: 12px; padding-right: 12px;
padding-left: 12px;
} }
// The clickable button for toggling the menu // The clickable button for toggling the menu
// Remove the gradient and set the same inset shadow as the :active state // Remove the gradient and set the same inset shadow as the :active state
.btn-group.open .dropdown-toggle { .btn-group.open .dropdown-toggle {
@include box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); @include box-shadow(inset 0 3px 5px rgba(0, 0, 0, .125));
// Show no shadow for `.btn-link` since it has no other button styles. // Show no shadow for `.btn-link` since it has no other button styles.
&.btn-link { &.btn-link {
@ -205,8 +205,8 @@
border-collapse: separate; border-collapse: separate;
> .btn, > .btn,
> .btn-group { > .btn-group {
float: none;
display: table-cell; display: table-cell;
float: none;
width: 1%; width: 1%;
} }
> .btn-group .btn { > .btn-group .btn {
@ -237,7 +237,7 @@
input[type="radio"], input[type="radio"],
input[type="checkbox"] { input[type="checkbox"] {
position: absolute; position: absolute;
clip: rect(0,0,0,0); clip: rect(0, 0, 0, 0);
pointer-events: none; pointer-events: none;
} }
} }

View File

@ -11,12 +11,12 @@
margin-bottom: 0; // For input.btn margin-bottom: 0; // For input.btn
font-weight: $btn-font-weight; font-weight: $btn-font-weight;
text-align: center; text-align: center;
white-space: nowrap;
vertical-align: middle; vertical-align: middle;
touch-action: manipulation; touch-action: manipulation;
cursor: pointer; cursor: pointer;
background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
border: 1px solid transparent; border: 1px solid transparent;
white-space: nowrap;
@include button-size($padding-base-vertical, $padding-base-horizontal, $font-size-base, $line-height-base, $btn-border-radius-base); @include button-size($padding-base-vertical, $padding-base-horizontal, $font-size-base, $line-height-base, $btn-border-radius-base);
@include user-select(none); @include user-select(none);
@ -38,9 +38,9 @@
&:active, &:active,
&.active { &.active {
outline: 0;
background-image: none; background-image: none;
@include box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); outline: 0;
@include box-shadow(inset 0 3px 5px rgba(0, 0, 0, .125));
} }
&.disabled, &.disabled,
@ -94,8 +94,8 @@ a.btn {
// Make a button look and behave like a link // Make a button look and behave like a link
.btn-link { .btn-link {
font-weight: 400;
color: $link-color; color: $link-color;
font-weight: normal;
border-radius: 0; border-radius: 0;
&, &,

View File

@ -10,12 +10,12 @@
.carousel-inner { .carousel-inner {
position: relative; position: relative;
overflow: hidden;
width: 100%; width: 100%;
overflow: hidden;
> .item { > .item {
display: none;
position: relative; position: relative;
display: none;
@include transition(.6s ease-in-out left); @include transition(.6s ease-in-out left);
// Account for jankitude on images // Account for jankitude on images
@ -93,34 +93,34 @@
.carousel-control { .carousel-control {
position: absolute; position: absolute;
top: 0; top: 0;
left: 0;
bottom: 0; bottom: 0;
left: 0;
width: $carousel-control-width; width: $carousel-control-width;
@include opacity($carousel-control-opacity);
font-size: $carousel-control-font-size; font-size: $carousel-control-font-size;
color: $carousel-control-color; color: $carousel-control-color;
text-align: center; text-align: center;
text-shadow: $carousel-text-shadow; text-shadow: $carousel-text-shadow;
background-color: rgba(0, 0, 0, 0); // Fix IE9 click-thru bug background-color: rgba(0, 0, 0, 0); // Fix IE9 click-thru bug
@include opacity($carousel-control-opacity);
// We can't have this transition here because WebKit cancels the carousel // We can't have this transition here because WebKit cancels the carousel
// animation if you trip this while in the middle of another animation. // animation if you trip this while in the middle of another animation.
// Set gradients for backgrounds // Set gradients for backgrounds
&.left { &.left {
@include gradient-horizontal($start-color: rgba(0,0,0,.5), $end-color: rgba(0,0,0,.0001)); @include gradient-horizontal($start-color: rgba(0, 0, 0, .5), $end-color: rgba(0, 0, 0, .0001));
} }
&.right { &.right {
left: auto;
right: 0; right: 0;
@include gradient-horizontal($start-color: rgba(0,0,0,.0001), $end-color: rgba(0,0,0,.5)); left: auto;
@include gradient-horizontal($start-color: rgba(0, 0, 0, .0001), $end-color: rgba(0, 0, 0, .5));
} }
// Hover/focus state // Hover/focus state
&:hover, &:hover,
&:focus { &:focus {
outline: 0;
color: $carousel-control-color; color: $carousel-control-color;
text-decoration: none; text-decoration: none;
outline: 0;
@include opacity(.9); @include opacity(.9);
} }
@ -131,9 +131,9 @@
.glyphicon-chevron-right { .glyphicon-chevron-right {
position: absolute; position: absolute;
top: 50%; top: 50%;
margin-top: -10px;
z-index: 5; z-index: 5;
display: inline-block; display: inline-block;
margin-top: -10px;
} }
.icon-prev, .icon-prev,
.glyphicon-chevron-left { .glyphicon-chevron-left {
@ -149,19 +149,18 @@
.icon-next { .icon-next {
width: 20px; width: 20px;
height: 20px; height: 20px;
line-height: 1;
font-family: serif; font-family: serif;
line-height: 1;
} }
.icon-prev { .icon-prev {
&:before { &:before {
content: '\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039) content: "\2039";// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)
} }
} }
.icon-next { .icon-next {
&:before { &:before {
content: '\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A) content: "\203a";// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)
} }
} }
} }
@ -177,10 +176,10 @@
left: 50%; left: 50%;
z-index: 15; z-index: 15;
width: 60%; width: 60%;
margin-left: -30%;
padding-left: 0; padding-left: 0;
list-style: none; margin-left: -30%;
text-align: center; text-align: center;
list-style: none;
li { li {
display: inline-block; display: inline-block;
@ -188,10 +187,7 @@
height: 10px; height: 10px;
margin: 1px; margin: 1px;
text-indent: -999px; text-indent: -999px;
border: 1px solid $carousel-indicator-border-color;
border-radius: 10px;
cursor: pointer; cursor: pointer;
// IE8-9 hack for event handling // IE8-9 hack for event handling
// //
// Internet Explorer 8-9 does not support clicks on elements without a set // Internet Explorer 8-9 does not support clicks on elements without a set
@ -202,12 +198,16 @@
// For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we
// set alpha transparency for the best results possible. // set alpha transparency for the best results possible.
background-color: #000 \9; // IE8 background-color: #000 \9; // IE8
background-color: rgba(0,0,0,0); // IE9 background-color: rgba(0, 0, 0, 0); // IE9
border: 1px solid $carousel-indicator-border-color;
border-radius: 10px;
} }
.active { .active {
margin: 0;
width: 12px; width: 12px;
height: 12px; height: 12px;
margin: 0;
background-color: $carousel-indicator-active-bg; background-color: $carousel-indicator-active-bg;
} }
} }
@ -217,15 +217,16 @@
// Hidden by default for smaller viewports // Hidden by default for smaller viewports
.carousel-caption { .carousel-caption {
position: absolute; position: absolute;
left: 15%;
right: 15%; right: 15%;
bottom: 20px; bottom: 20px;
left: 15%;
z-index: 10; z-index: 10;
padding-top: 20px; padding-top: 20px;
padding-bottom: 20px; padding-bottom: 20px;
color: $carousel-caption-color; color: $carousel-caption-color;
text-align: center; text-align: center;
text-shadow: $carousel-text-shadow; text-shadow: $carousel-text-shadow;
& .btn { & .btn {
text-shadow: none; // No shadow for button elements in carousel-caption text-shadow: none; // No shadow for button elements in carousel-caption
} }
@ -258,8 +259,8 @@
// Show and left align the captions // Show and left align the captions
.carousel-caption { .carousel-caption {
left: 20%;
right: 20%; right: 20%;
left: 20%;
padding-bottom: 30px; padding-bottom: 30px;
} }

View File

@ -33,4 +33,5 @@ button.close {
background: transparent; background: transparent;
border: 0; border: 0;
-webkit-appearance: none; -webkit-appearance: none;
appearance: none;
} }

View File

@ -27,12 +27,12 @@ kbd {
color: $kbd-color; color: $kbd-color;
background-color: $kbd-bg; background-color: $kbd-bg;
border-radius: $border-radius-small; border-radius: $border-radius-small;
box-shadow: inset 0 -1px 0 rgba(0,0,0,.25); box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
kbd { kbd {
padding: 0; padding: 0;
font-size: 100%; font-size: 100%;
font-weight: bold; font-weight: 700;
box-shadow: none; box-shadow: none;
} }
} }
@ -44,9 +44,9 @@ pre {
margin: 0 0 ($line-height-computed / 2); margin: 0 0 ($line-height-computed / 2);
font-size: ($font-size-base - 1); // 14px to 13px font-size: ($font-size-base - 1); // 14px to 13px
line-height: $line-height-base; line-height: $line-height-base;
color: $pre-color;
word-break: break-all; word-break: break-all;
word-wrap: break-word; word-wrap: break-word;
color: $pre-color;
background-color: $pre-bg; background-color: $pre-bg;
border: 1px solid $pre-border-color; border: 1px solid $pre-border-color;
border-radius: $border-radius-base; border-radius: $border-radius-base;

View File

@ -10,6 +10,7 @@
.fade { .fade {
opacity: 0; opacity: 0;
@include transition(opacity .15s linear); @include transition(opacity .15s linear);
&.in { &.in {
opacity: 1; opacity: 1;
} }

View File

@ -38,15 +38,15 @@
min-width: 160px; min-width: 160px;
padding: 5px 0; padding: 5px 0;
margin: 2px 0 0; // override default ul margin: 2px 0 0; // override default ul
list-style: none;
font-size: $font-size-base; font-size: $font-size-base;
text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer) text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)
list-style: none;
background-color: $dropdown-bg; background-color: $dropdown-bg;
background-clip: padding-box;
border: 1px solid $dropdown-fallback-border; // IE8 fallback border: 1px solid $dropdown-fallback-border; // IE8 fallback
border: 1px solid $dropdown-border; border: 1px solid $dropdown-border;
border-radius: $border-radius-base; border-radius: $border-radius-base;
@include box-shadow(0 6px 12px rgba(0,0,0,.175)); @include box-shadow(0 6px 12px rgba(0, 0, 0, .175));
background-clip: padding-box;
// Aligns the dropdown menu to right // Aligns the dropdown menu to right
// //
@ -66,21 +66,18 @@
display: block; display: block;
padding: 3px 20px; padding: 3px 20px;
clear: both; clear: both;
font-weight: normal; font-weight: 400;
line-height: $line-height-base; line-height: $line-height-base;
color: $dropdown-link-color; color: $dropdown-link-color;
white-space: nowrap; // prevent links from randomly breaking onto new lines white-space: nowrap; // prevent links from randomly breaking onto new lines
}
}
// Hover/Focus state
.dropdown-menu > li > a {
&:hover, &:hover,
&:focus { &:focus {
text-decoration: none;
color: $dropdown-link-hover-color; color: $dropdown-link-hover-color;
text-decoration: none;
background-color: $dropdown-link-hover-bg; background-color: $dropdown-link-hover-bg;
} }
}
} }
// Active state // Active state
@ -90,8 +87,8 @@
&:focus { &:focus {
color: $dropdown-link-active-color; color: $dropdown-link-active-color;
text-decoration: none; text-decoration: none;
outline: 0;
background-color: $dropdown-link-active-bg; background-color: $dropdown-link-active-bg;
outline: 0;
} }
} }
@ -110,10 +107,10 @@
&:hover, &:hover,
&:focus { &:focus {
text-decoration: none; text-decoration: none;
cursor: $cursor-disabled;
background-color: transparent; background-color: transparent;
background-image: none; // Remove CSS gradient background-image: none; // Remove CSS gradient
@include reset-filter; @include reset-filter;
cursor: $cursor-disabled;
} }
} }
@ -135,8 +132,8 @@
// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown // Add extra class to `.dropdown-menu` to flip the alignment of the dropdown
// menu with the parent. // menu with the parent.
.dropdown-menu-right { .dropdown-menu-right {
left: auto; // Reset the default from `.dropdown-menu`
right: 0; right: 0;
left: auto; // Reset the default from `.dropdown-menu`
} }
// With v3, we enabled auto-flipping if you have a dropdown within a right // With v3, we enabled auto-flipping if you have a dropdown within a right
// aligned nav component. To enable the undoing of that, we provide an override // aligned nav component. To enable the undoing of that, we provide an override
@ -145,8 +142,8 @@
// This is only for left-aligning a dropdown menu within a `.navbar-right` or // This is only for left-aligning a dropdown menu within a `.navbar-right` or
// `.pull-right` nav component. // `.pull-right` nav component.
.dropdown-menu-left { .dropdown-menu-left {
left: 0;
right: auto; right: auto;
left: 0;
} }
// Dropdown section headers // Dropdown section headers
@ -162,10 +159,10 @@
// Backdrop to catch body clicks on mobile, etc. // Backdrop to catch body clicks on mobile, etc.
.dropdown-backdrop { .dropdown-backdrop {
position: fixed; position: fixed;
left: 0; top: 0;
right: 0; right: 0;
bottom: 0; bottom: 0;
top: 0; left: 0;
z-index: ($zindex-dropdown - 10); z-index: ($zindex-dropdown - 10);
} }
@ -184,10 +181,10 @@
.navbar-fixed-bottom .dropdown { .navbar-fixed-bottom .dropdown {
// Reverse the caret // Reverse the caret
.caret { .caret {
content: "";
border-top: 0; border-top: 0;
border-bottom: $caret-width-base dashed; border-bottom: $caret-width-base dashed;
border-bottom: $caret-width-base solid \9; // IE8 border-bottom: $caret-width-base solid \9; // IE8
content: "";
} }
// Different positioning for bottom up menu // Different positioning for bottom up menu
.dropdown-menu { .dropdown-menu {

View File

@ -8,13 +8,13 @@
// Restyle and baseline non-control form elements. // Restyle and baseline non-control form elements.
fieldset { fieldset {
padding: 0;
margin: 0;
border: 0;
// Chrome and Firefox set a `min-width: min-content;` on fieldsets, // Chrome and Firefox set a `min-width: min-content;` on fieldsets,
// so we reset that to ensure it behaves more like a standard block element. // so we reset that to ensure it behaves more like a standard block element.
// See https://github.com/twbs/bootstrap/issues/12359. // See https://github.com/twbs/bootstrap/issues/12359.
min-width: 0; min-width: 0;
padding: 0;
margin: 0;
border: 0;
} }
legend { legend {
@ -33,7 +33,7 @@ label {
display: inline-block; display: inline-block;
max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141) max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)
margin-bottom: 5px; margin-bottom: 5px;
font-weight: bold; font-weight: 700;
} }
@ -43,9 +43,18 @@ label {
// is required to ensure optimum display with or without those classes to better // is required to ensure optimum display with or without those classes to better
// address browser inconsistencies. // address browser inconsistencies.
// Override content-box in Normalize (* isn't specific enough)
input[type="search"] { input[type="search"] {
// Override content-box in Normalize (* isn't specific enough)
@include box-sizing(border-box); @include box-sizing(border-box);
// Search inputs in iOS
//
// This overrides the extra rounded corners on search inputs in iOS so that our
// `.form-control` class can properly style them. Note that this cannot simply
// be added to `.form-control` as it's not specific enough. For details, see
// https://github.com/twbs/bootstrap/issues/11586.
-webkit-appearance: none;
appearance: none;
} }
// Position radios and checkboxes better // Position radios and checkboxes better
@ -54,6 +63,16 @@ input[type="checkbox"] {
margin: 4px 0 0; margin: 4px 0 0;
margin-top: 1px \9; // IE8-9 margin-top: 1px \9; // IE8-9
line-height: normal; line-height: normal;
// Apply same disabled cursor tweak as for inputs
// Some special care is needed because <label>s don't inherit their parent's `cursor`.
//
// Note: Neither radios nor checkboxes can be readonly.
&[disabled],
&.disabled,
fieldset[disabled] & {
cursor: $cursor-disabled;
}
} }
input[type="file"] { input[type="file"] {
@ -123,7 +142,7 @@ output {
background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
border: 1px solid $input-border; border: 1px solid $input-border;
border-radius: $input-border-radius; // Note: This has no effect on <select>s in some browsers, due to the limited stylability of <select>s in CSS. border-radius: $input-border-radius; // Note: This has no effect on <select>s in some browsers, due to the limited stylability of <select>s in CSS.
@include box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); @include box-shadow(inset 0 1px 1px rgba(0, 0, 0, .075));
@include transition(border-color ease-in-out .15s, box-shadow ease-in-out .15s); @include transition(border-color ease-in-out .15s, box-shadow ease-in-out .15s);
// Customize the `:focus` state to imitate native WebKit styles. // Customize the `:focus` state to imitate native WebKit styles.
@ -134,8 +153,8 @@ output {
// Unstyle the caret on `<select>`s in IE10+. // Unstyle the caret on `<select>`s in IE10+.
&::-ms-expand { &::-ms-expand {
border: 0;
background-color: transparent; background-color: transparent;
border: 0;
} }
// Disabled and read-only inputs // Disabled and read-only inputs
@ -164,18 +183,6 @@ textarea.form-control {
} }
// Search inputs in iOS
//
// This overrides the extra rounded corners on search inputs in iOS so that our
// `.form-control` class can properly style them. Note that this cannot simply
// be added to `.form-control` as it's not specific enough. For details, see
// https://github.com/twbs/bootstrap/issues/11586.
input[type="search"] {
-webkit-appearance: none;
}
// Special styles for iOS temporal inputs // Special styles for iOS temporal inputs
// //
// In Mobile Safari, setting `display: block` on temporal inputs causes the // In Mobile Safari, setting `display: block` on temporal inputs causes the
@ -228,11 +235,19 @@ input[type="search"] {
margin-top: 10px; margin-top: 10px;
margin-bottom: 10px; margin-bottom: 10px;
// These are used on elements with <label> descendants
&.disabled,
fieldset[disabled] & {
label {
cursor: $cursor-disabled;
}
}
label { label {
min-height: $line-height-computed; // Ensure the input doesn't jump when there is no text min-height: $line-height-computed; // Ensure the input doesn't jump when there is no text
padding-left: 20px; padding-left: 20px;
margin-bottom: 0; margin-bottom: 0;
font-weight: normal; font-weight: 400;
cursor: pointer; cursor: pointer;
} }
} }
@ -241,8 +256,8 @@ input[type="search"] {
.checkbox input[type="checkbox"], .checkbox input[type="checkbox"],
.checkbox-inline input[type="checkbox"] { .checkbox-inline input[type="checkbox"] {
position: absolute; position: absolute;
margin-left: -20px;
margin-top: 4px \9; margin-top: 4px \9;
margin-left: -20px;
} }
.radio + .radio, .radio + .radio,
@ -257,9 +272,15 @@ input[type="search"] {
display: inline-block; display: inline-block;
padding-left: 20px; padding-left: 20px;
margin-bottom: 0; margin-bottom: 0;
font-weight: 400;
vertical-align: middle; vertical-align: middle;
font-weight: normal;
cursor: pointer; cursor: pointer;
// These are used directly on <label>s
&.disabled,
fieldset[disabled] & {
cursor: $cursor-disabled;
}
} }
.radio-inline + .radio-inline, .radio-inline + .radio-inline,
.checkbox-inline + .checkbox-inline { .checkbox-inline + .checkbox-inline {
@ -267,37 +288,6 @@ input[type="search"] {
margin-left: 10px; // space out consecutive inline controls margin-left: 10px; // space out consecutive inline controls
} }
// Apply same disabled cursor tweak as for inputs
// Some special care is needed because <label>s don't inherit their parent's `cursor`.
//
// Note: Neither radios nor checkboxes can be readonly.
input[type="radio"],
input[type="checkbox"] {
&[disabled],
&.disabled,
fieldset[disabled] & {
cursor: $cursor-disabled;
}
}
// These classes are used directly on <label>s
.radio-inline,
.checkbox-inline {
&.disabled,
fieldset[disabled] & {
cursor: $cursor-disabled;
}
}
// These classes are used on elements with <label> descendants
.radio,
.checkbox {
&.disabled,
fieldset[disabled] & {
label {
cursor: $cursor-disabled;
}
}
}
// Static form control text // Static form control text
// //
@ -305,17 +295,17 @@ input[type="checkbox"] {
// a horizontal form layout. // a horizontal form layout.
.form-control-static { .form-control-static {
min-height: ($line-height-computed + $font-size-base);
// Size it appropriately next to real form controls // Size it appropriately next to real form controls
padding-top: ($padding-base-vertical + 1); padding-top: ($padding-base-vertical + 1);
padding-bottom: ($padding-base-vertical + 1); padding-bottom: ($padding-base-vertical + 1);
// Remove default margin from `p` // Remove default margin from `p`
margin-bottom: 0; margin-bottom: 0;
min-height: ($line-height-computed + $font-size-base);
&.input-lg, &.input-lg,
&.input-sm { &.input-sm {
padding-left: 0;
padding-right: 0; padding-right: 0;
padding-left: 0;
} }
} }
@ -560,9 +550,9 @@ input[type="checkbox"] {
.checkbox, .checkbox,
.radio-inline, .radio-inline,
.checkbox-inline { .checkbox-inline {
padding-top: ($padding-base-vertical + 1); // Default padding plus a border
margin-top: 0; margin-top: 0;
margin-bottom: 0; margin-bottom: 0;
padding-top: ($padding-base-vertical + 1); // Default padding plus a border
} }
// Account for padding we're adding to ensure the alignment and of help text // Account for padding we're adding to ensure the alignment and of help text
// and other content below items // and other content below items
@ -580,9 +570,9 @@ input[type="checkbox"] {
// labels on narrow viewports stack the same as a default form example. // labels on narrow viewports stack the same as a default form example.
@media (min-width: $screen-sm-min) { @media (min-width: $screen-sm-min) {
.control-label { .control-label {
text-align: right;
margin-bottom: 0;
padding-top: ($padding-base-vertical + 1); // Default padding plus a border padding-top: ($padding-base-vertical + 1); // Default padding plus a border
margin-bottom: 0;
text-align: right;
} }
} }

View File

@ -10,13 +10,13 @@
@at-root { @at-root {
// Import the fonts // Import the fonts
@font-face { @font-face {
font-family: 'Glyphicons Halflings'; font-family: "Glyphicons Halflings";
src: url(if($bootstrap-sass-asset-helper, twbs-font-path('#{$icon-font-path}#{$icon-font-name}.eot'), '#{$icon-font-path}#{$icon-font-name}.eot')); src: url(if($bootstrap-sass-asset-helper, twbs-font-path("#{$icon-font-path}#{$icon-font-name}.eot"), "#{$icon-font-path}#{$icon-font-name}.eot"));
src: url(if($bootstrap-sass-asset-helper, twbs-font-path('#{$icon-font-path}#{$icon-font-name}.eot?#iefix'), '#{$icon-font-path}#{$icon-font-name}.eot?#iefix')) format('embedded-opentype'), src: url(if($bootstrap-sass-asset-helper, twbs-font-path("#{$icon-font-path}#{$icon-font-name}.eot?#iefix"), "#{$icon-font-path}#{$icon-font-name}.eot?#iefix")) format("embedded-opentype"),
url(if($bootstrap-sass-asset-helper, twbs-font-path('#{$icon-font-path}#{$icon-font-name}.woff2'), '#{$icon-font-path}#{$icon-font-name}.woff2')) format('woff2'), url(if($bootstrap-sass-asset-helper, twbs-font-path("#{$icon-font-path}#{$icon-font-name}.woff2"), "#{$icon-font-path}#{$icon-font-name}.woff2")) format("woff2"),
url(if($bootstrap-sass-asset-helper, twbs-font-path('#{$icon-font-path}#{$icon-font-name}.woff'), '#{$icon-font-path}#{$icon-font-name}.woff')) format('woff'), url(if($bootstrap-sass-asset-helper, twbs-font-path("#{$icon-font-path}#{$icon-font-name}.woff"), "#{$icon-font-path}#{$icon-font-name}.woff")) format("woff"),
url(if($bootstrap-sass-asset-helper, twbs-font-path('#{$icon-font-path}#{$icon-font-name}.ttf'), '#{$icon-font-path}#{$icon-font-name}.ttf')) format('truetype'), url(if($bootstrap-sass-asset-helper, twbs-font-path("#{$icon-font-path}#{$icon-font-name}.ttf"), "#{$icon-font-path}#{$icon-font-name}.ttf")) format("truetype"),
url(if($bootstrap-sass-asset-helper, twbs-font-path('#{$icon-font-path}#{$icon-font-name}.svg##{$icon-font-svg-id}'), '#{$icon-font-path}#{$icon-font-name}.svg##{$icon-font-svg-id}')) format('svg'); url(if($bootstrap-sass-asset-helper, twbs-font-path("#{$icon-font-path}#{$icon-font-name}.svg##{$icon-font-svg-id}"), "#{$icon-font-path}#{$icon-font-name}.svg##{$icon-font-svg-id}")) format("svg");
} }
} }
@ -25,9 +25,9 @@
position: relative; position: relative;
top: 1px; top: 1px;
display: inline-block; display: inline-block;
font-family: 'Glyphicons Halflings'; font-family: "Glyphicons Halflings";
font-style: normal; font-style: normal;
font-weight: normal; font-weight: 400;
line-height: 1; line-height: 1;
-webkit-font-smoothing: antialiased; -webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale; -moz-osx-font-smoothing: grayscale;

View File

@ -40,6 +40,16 @@
@include make-row; @include make-row;
} }
.row-no-gutters {
margin-right: 0;
margin-left: 0;
[class*="col-"] {
padding-right: 0;
padding-left: 0;
}
}
// Columns // Columns
// //

View File

@ -12,8 +12,8 @@
// Undo padding and float of grid classes // Undo padding and float of grid classes
&[class*="col-"] { &[class*="col-"] {
float: none; float: none;
padding-left: 0;
padding-right: 0; padding-right: 0;
padding-left: 0;
} }
.form-control { .form-control {
@ -77,7 +77,7 @@
.input-group-addon { .input-group-addon {
padding: $padding-base-vertical $padding-base-horizontal; padding: $padding-base-vertical $padding-base-horizontal;
font-size: $font-size-base; font-size: $font-size-base;
font-weight: normal; font-weight: 400;
line-height: 1; line-height: 1;
color: $input-color; color: $input-color;
text-align: center; text-align: center;

View File

@ -27,9 +27,9 @@
.container &, .container &,
.container-fluid & { .container-fluid & {
border-radius: $border-radius-large; // Only round corners at higher resolutions if contained in a container
padding-left: ($grid-gutter-width / 2);
padding-right: ($grid-gutter-width / 2); padding-right: ($grid-gutter-width / 2);
padding-left: ($grid-gutter-width / 2);
border-radius: $border-radius-large; // Only round corners at higher resolutions if contained in a container
} }
.container { .container {
@ -42,8 +42,8 @@
.container &, .container &,
.container-fluid & { .container-fluid & {
padding-left: ($jumbotron-padding * 2);
padding-right: ($jumbotron-padding * 2); padding-right: ($jumbotron-padding * 2);
padding-left: ($jumbotron-padding * 2);
} }
h1, h1,

View File

@ -6,7 +6,7 @@
display: inline; display: inline;
padding: .2em .6em .3em; padding: .2em .6em .3em;
font-size: 75%; font-size: 75%;
font-weight: bold; font-weight: 700;
line-height: 1; line-height: 1;
color: $label-color; color: $label-color;
text-align: center; text-align: center;

View File

@ -9,8 +9,8 @@
.list-group { .list-group {
// No need to set list-style: none; since .list-group-item is block level // No need to set list-style: none; since .list-group-item is block level
margin-bottom: 20px;
padding-left: 0; // reset padding because ul and ol padding-left: 0; // reset padding because ul and ol
margin-bottom: 20px;
} }
@ -35,44 +35,14 @@
margin-bottom: 0; margin-bottom: 0;
@include border-bottom-radius($list-group-border-radius); @include border-bottom-radius($list-group-border-radius);
} }
}
// Interactive list items
//
// Use anchor or button elements instead of `li`s or `div`s to create interactive items.
// Includes an extra `.active` modifier class for showing selected items.
a.list-group-item,
button.list-group-item {
color: $list-group-link-color;
.list-group-item-heading {
color: $list-group-link-heading-color;
}
// Hover state
&:hover,
&:focus {
text-decoration: none;
color: $list-group-link-hover-color;
background-color: $list-group-hover-bg;
}
}
button.list-group-item {
width: 100%;
text-align: left;
}
.list-group-item {
// Disabled state // Disabled state
&.disabled, &.disabled,
&.disabled:hover, &.disabled:hover,
&.disabled:focus { &.disabled:focus {
background-color: $list-group-disabled-bg;
color: $list-group-disabled-color; color: $list-group-disabled-color;
cursor: $cursor-disabled; cursor: $cursor-disabled;
background-color: $list-group-disabled-bg;
// Force color to inherit for custom content // Force color to inherit for custom content
.list-group-item-heading { .list-group-item-heading {
@ -105,6 +75,34 @@ button.list-group-item {
} }
// Interactive list items
//
// Use anchor or button elements instead of `li`s or `div`s to create interactive items.
// Includes an extra `.active` modifier class for showing selected items.
a.list-group-item,
button.list-group-item {
color: $list-group-link-color;
.list-group-item-heading {
color: $list-group-link-heading-color;
}
// Hover state
&:hover,
&:focus {
color: $list-group-link-hover-color;
text-decoration: none;
background-color: $list-group-hover-bg;
}
}
button.list-group-item {
width: 100%;
text-align: left;
}
// Contextual variants // Contextual variants
// //
// Add modifier classes to change text and background color on individual items. // Add modifier classes to change text and background color on individual items.

View File

@ -9,8 +9,8 @@
.media, .media,
.media-body { .media-body {
zoom: 1;
overflow: hidden; overflow: hidden;
zoom: 1;
} }
.media-body { .media-body {

View File

@ -14,14 +14,14 @@
// Container that the modal scrolls within // Container that the modal scrolls within
.modal { .modal {
display: none;
overflow: hidden;
position: fixed; position: fixed;
top: 0; top: 0;
right: 0; right: 0;
bottom: 0; bottom: 0;
left: 0; left: 0;
z-index: $zindex-modal; z-index: $zindex-modal;
display: none;
overflow: hidden;
-webkit-overflow-scrolling: touch; -webkit-overflow-scrolling: touch;
// Prevent Chrome on Windows from adding a focus outline. For details, see // Prevent Chrome on Windows from adding a focus outline. For details, see
@ -33,7 +33,7 @@
@include translate(0, -25%); @include translate(0, -25%);
@include transition-transform(0.3s ease-out); @include transition-transform(0.3s ease-out);
} }
&.in .modal-dialog { @include translate(0, 0) } &.in .modal-dialog { @include translate(0, 0); }
} }
.modal-open .modal { .modal-open .modal {
overflow-x: hidden; overflow-x: hidden;
@ -51,11 +51,11 @@
.modal-content { .modal-content {
position: relative; position: relative;
background-color: $modal-content-bg; background-color: $modal-content-bg;
background-clip: padding-box;
border: 1px solid $modal-content-fallback-border-color; //old browsers fallback (ie8 etc) border: 1px solid $modal-content-fallback-border-color; //old browsers fallback (ie8 etc)
border: 1px solid $modal-content-border-color; border: 1px solid $modal-content-border-color;
border-radius: $border-radius-large; border-radius: $border-radius-large;
@include box-shadow(0 3px 9px rgba(0,0,0,.5)); @include box-shadow(0 3px 9px rgba(0, 0, 0, .5));
background-clip: padding-box;
// Remove focus outline from opened modal // Remove focus outline from opened modal
outline: 0; outline: 0;
} }
@ -108,8 +108,8 @@
// Properly space out buttons // Properly space out buttons
.btn + .btn { .btn + .btn {
margin-left: 5px;
margin-bottom: 0; // account for input[type="submit"] which gets the bottom margin like all other inputs margin-bottom: 0; // account for input[type="submit"] which gets the bottom margin like all other inputs
margin-left: 5px;
} }
// but override that for button groups // but override that for button groups
.btn-group .btn + .btn { .btn-group .btn + .btn {
@ -138,7 +138,7 @@
margin: 30px auto; margin: 30px auto;
} }
.modal-content { .modal-content {
@include box-shadow(0 5px 15px rgba(0,0,0,.5)); @include box-shadow(0 5px 15px rgba(0, 0, 0, .5));
} }
// Modal sizes // Modal sizes

View File

@ -48,11 +48,11 @@
// content for the user's viewport. // content for the user's viewport.
.navbar-collapse { .navbar-collapse {
overflow-x: visible;
padding-right: $navbar-padding-horizontal; padding-right: $navbar-padding-horizontal;
padding-left: $navbar-padding-horizontal; padding-left: $navbar-padding-horizontal;
overflow-x: visible;
border-top: 1px solid transparent; border-top: 1px solid transparent;
box-shadow: inset 0 1px 0 rgba(255,255,255,.1); box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
@include clearfix; @include clearfix;
-webkit-overflow-scrolling: touch; -webkit-overflow-scrolling: touch;
@ -81,8 +81,8 @@
.navbar-fixed-top &, .navbar-fixed-top &,
.navbar-static-top &, .navbar-static-top &,
.navbar-fixed-bottom & { .navbar-fixed-bottom & {
padding-left: 0;
padding-right: 0; padding-right: 0;
padding-left: 0;
} }
} }
} }
@ -96,6 +96,27 @@
max-height: 200px; max-height: 200px;
} }
} }
// Fix the top/bottom navbars when screen real estate supports it
position: fixed;
right: 0;
left: 0;
z-index: $zindex-navbar-fixed;
// Undo the rounded corners
@media (min-width: $grid-float-breakpoint) {
border-radius: 0;
}
}
.navbar-fixed-top {
top: 0;
border-width: 0 0 1px;
}
.navbar-fixed-bottom {
bottom: 0;
margin-bottom: 0; // override .navbar defaults
border-width: 1px 0 0;
} }
@ -134,38 +155,15 @@
} }
} }
// Fix the top/bottom navbars when screen real estate supports it
.navbar-fixed-top,
.navbar-fixed-bottom {
position: fixed;
right: 0;
left: 0;
z-index: $zindex-navbar-fixed;
// Undo the rounded corners
@media (min-width: $grid-float-breakpoint) {
border-radius: 0;
}
}
.navbar-fixed-top {
top: 0;
border-width: 0 0 1px;
}
.navbar-fixed-bottom {
bottom: 0;
margin-bottom: 0; // override .navbar defaults
border-width: 1px 0 0;
}
// Brand/project name // Brand/project name
.navbar-brand { .navbar-brand {
float: left; float: left;
height: $navbar-height;
padding: $navbar-padding-vertical $navbar-padding-horizontal; padding: $navbar-padding-vertical $navbar-padding-horizontal;
font-size: $font-size-large; font-size: $font-size-large;
line-height: $line-height-computed; line-height: $line-height-computed;
height: $navbar-height;
&:hover, &:hover,
&:focus { &:focus {
@ -193,8 +191,8 @@
.navbar-toggle { .navbar-toggle {
position: relative; position: relative;
float: right; float: right;
margin-right: $navbar-padding-horizontal;
padding: 9px 10px; padding: 9px 10px;
margin-right: $navbar-padding-horizontal;
@include navbar-vertical-align(34px); @include navbar-vertical-align(34px);
background-color: transparent; background-color: transparent;
background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
@ -284,12 +282,12 @@
// our navbars. // our navbars.
.navbar-form { .navbar-form {
margin-left: -$navbar-padding-horizontal;
margin-right: -$navbar-padding-horizontal;
padding: 10px $navbar-padding-horizontal; padding: 10px $navbar-padding-horizontal;
margin-right: -$navbar-padding-horizontal;
margin-left: -$navbar-padding-horizontal;
border-top: 1px solid transparent; border-top: 1px solid transparent;
border-bottom: 1px solid transparent; border-bottom: 1px solid transparent;
$shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1); $shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
@include box-shadow($shadow); @include box-shadow($shadow);
// Mixin behavior for optimum display // Mixin behavior for optimum display
@ -311,11 +309,11 @@
// Undo 100% width for pull classes // Undo 100% width for pull classes
@media (min-width: $grid-float-breakpoint) { @media (min-width: $grid-float-breakpoint) {
width: auto; width: auto;
border: 0;
margin-left: 0;
margin-right: 0;
padding-top: 0; padding-top: 0;
padding-bottom: 0; padding-bottom: 0;
margin-right: 0;
margin-left: 0;
border: 0;
@include box-shadow(none); @include box-shadow(none);
} }
} }
@ -361,8 +359,8 @@
@media (min-width: $grid-float-breakpoint) { @media (min-width: $grid-float-breakpoint) {
float: left; float: left;
margin-left: $navbar-padding-horizontal;
margin-right: $navbar-padding-horizontal; margin-right: $navbar-padding-horizontal;
margin-left: $navbar-padding-horizontal;
} }
} }
@ -437,33 +435,15 @@
background-color: $navbar-default-link-disabled-bg; background-color: $navbar-default-link-disabled-bg;
} }
} }
}
.navbar-toggle {
border-color: $navbar-default-toggle-border-color;
&:hover,
&:focus {
background-color: $navbar-default-toggle-hover-bg;
}
.icon-bar {
background-color: $navbar-default-toggle-icon-bar-bg;
}
}
.navbar-collapse,
.navbar-form {
border-color: $navbar-default-border;
}
// Dropdown menu items // Dropdown menu items
.navbar-nav {
// Remove background color from open dropdown // Remove background color from open dropdown
> .open > a { > .open > a {
&, &,
&:hover, &:hover,
&:focus { &:focus {
background-color: $navbar-default-link-active-bg;
color: $navbar-default-link-active-color; color: $navbar-default-link-active-color;
background-color: $navbar-default-link-active-bg;
} }
} }
@ -498,6 +478,22 @@
} }
} }
.navbar-toggle {
border-color: $navbar-default-toggle-border-color;
&:hover,
&:focus {
background-color: $navbar-default-toggle-hover-bg;
}
.icon-bar {
background-color: $navbar-default-toggle-icon-bar-bg;
}
}
.navbar-collapse,
.navbar-form {
border-color: $navbar-default-border;
}
// Links in navbars // Links in navbars
// //
@ -571,33 +567,14 @@
background-color: $navbar-inverse-link-disabled-bg; background-color: $navbar-inverse-link-disabled-bg;
} }
} }
}
// Darken the responsive nav toggle
.navbar-toggle {
border-color: $navbar-inverse-toggle-border-color;
&:hover,
&:focus {
background-color: $navbar-inverse-toggle-hover-bg;
}
.icon-bar {
background-color: $navbar-inverse-toggle-icon-bar-bg;
}
}
.navbar-collapse,
.navbar-form {
border-color: darken($navbar-inverse-bg, 7%);
}
// Dropdowns // Dropdowns
.navbar-nav {
> .open > a { > .open > a {
&, &,
&:hover, &:hover,
&:focus { &:focus {
background-color: $navbar-inverse-link-active-bg;
color: $navbar-inverse-link-active-color; color: $navbar-inverse-link-active-color;
background-color: $navbar-inverse-link-active-bg;
} }
} }
@ -638,6 +615,23 @@
} }
} }
// Darken the responsive nav toggle
.navbar-toggle {
border-color: $navbar-inverse-toggle-border-color;
&:hover,
&:focus {
background-color: $navbar-inverse-toggle-hover-bg;
}
.icon-bar {
background-color: $navbar-inverse-toggle-icon-bar-bg;
}
}
.navbar-collapse,
.navbar-form {
border-color: darken($navbar-inverse-bg, 7%);
}
.navbar-link { .navbar-link {
color: $navbar-inverse-link-color; color: $navbar-inverse-link-color;
&:hover { &:hover {

View File

@ -7,8 +7,8 @@
// -------------------------------------------------- // --------------------------------------------------
.nav { .nav {
margin-bottom: 0;
padding-left: 0; // Override default ul/ol padding-left: 0; // Override default ul/ol
margin-bottom: 0;
list-style: none; list-style: none;
@include clearfix; @include clearfix;
@ -35,8 +35,8 @@
&:focus { &:focus {
color: $nav-disabled-link-hover-color; color: $nav-disabled-link-hover-color;
text-decoration: none; text-decoration: none;
background-color: transparent;
cursor: $cursor-disabled; cursor: $cursor-disabled;
background-color: transparent;
} }
} }
} }
@ -97,10 +97,10 @@
&:hover, &:hover,
&:focus { &:focus {
color: $nav-tabs-active-link-hover-color; color: $nav-tabs-active-link-hover-color;
cursor: default;
background-color: $nav-tabs-active-link-hover-bg; background-color: $nav-tabs-active-link-hover-bg;
border: 1px solid $nav-tabs-active-link-hover-border-color; border: 1px solid $nav-tabs-active-link-hover-border-color;
border-bottom-color: transparent; border-bottom-color: transparent;
cursor: default;
} }
} }
} }
@ -163,8 +163,8 @@
> li { > li {
float: none; float: none;
> a { > a {
text-align: center;
margin-bottom: 5px; margin-bottom: 5px;
text-align: center;
} }
} }

View File

@ -104,11 +104,14 @@ a:hover {
// ========================================================================== // ==========================================================================
// //
// Address styling not present in IE 8/9/10/11, Safari, and Chrome. // 1. Remove the bottom border in Chrome 57- and Firefox 39-.
// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
// //
abbr[title] { abbr[title] {
border-bottom: 1px dotted; border-bottom: none; // 1
text-decoration: underline; // 2
text-decoration: underline dotted; // 2
} }
// //

View File

@ -6,8 +6,8 @@
.pager { .pager {
padding-left: 0; padding-left: 0;
margin: $line-height-computed 0; margin: $line-height-computed 0;
list-style: none;
text-align: center; text-align: center;
list-style: none;
@include clearfix; @include clearfix;
li { li {
display: inline; display: inline;
@ -47,8 +47,8 @@
> a:focus, > a:focus,
> span { > span {
color: $pager-disabled-color; color: $pager-disabled-color;
background-color: $pager-bg;
cursor: $cursor-disabled; cursor: $cursor-disabled;
background-color: $pager-bg;
} }
} }
} }

View File

@ -14,12 +14,20 @@
position: relative; position: relative;
float: left; // Collapse white-space float: left; // Collapse white-space
padding: $padding-base-vertical $padding-base-horizontal; padding: $padding-base-vertical $padding-base-horizontal;
margin-left: -1px;
line-height: $line-height-base; line-height: $line-height-base;
text-decoration: none;
color: $pagination-color; color: $pagination-color;
text-decoration: none;
background-color: $pagination-bg; background-color: $pagination-bg;
border: 1px solid $pagination-border; border: 1px solid $pagination-border;
margin-left: -1px;
&:hover,
&:focus {
z-index: 2;
color: $pagination-hover-color;
background-color: $pagination-hover-bg;
border-color: $pagination-hover-border;
}
} }
&:first-child { &:first-child {
> a, > a,
@ -36,17 +44,6 @@
} }
} }
> li > a,
> li > span {
&:hover,
&:focus {
z-index: 2;
color: $pagination-hover-color;
background-color: $pagination-hover-bg;
border-color: $pagination-hover-border;
}
}
> .active > a, > .active > a,
> .active > span { > .active > span {
&, &,
@ -54,9 +51,9 @@
&:focus { &:focus {
z-index: 3; z-index: 3;
color: $pagination-active-color; color: $pagination-active-color;
cursor: default;
background-color: $pagination-active-bg; background-color: $pagination-active-bg;
border-color: $pagination-active-border; border-color: $pagination-active-border;
cursor: default;
} }
} }
@ -68,9 +65,9 @@
> a:hover, > a:hover,
> a:focus { > a:focus {
color: $pagination-disabled-color; color: $pagination-disabled-color;
cursor: $cursor-disabled;
background-color: $pagination-disabled-bg; background-color: $pagination-disabled-bg;
border-color: $pagination-disabled-border; border-color: $pagination-disabled-border;
cursor: $cursor-disabled;
} }
} }
} }

View File

@ -9,7 +9,7 @@
background-color: $panel-bg; background-color: $panel-bg;
border: 1px solid transparent; border: 1px solid transparent;
border-radius: $panel-border-radius; border-radius: $panel-border-radius;
@include box-shadow(0 1px 1px rgba(0,0,0,.05)); @include box-shadow(0 1px 1px rgba(0, 0, 0, .05));
} }
// Panel contents // Panel contents
@ -113,8 +113,8 @@
margin-bottom: 0; margin-bottom: 0;
caption { caption {
padding-left: $panel-body-padding;
padding-right: $panel-body-padding; padding-right: $panel-body-padding;
padding-left: $panel-body-padding;
} }
} }
// Add border top radius for first one // Add border top radius for first one
@ -147,8 +147,8 @@
> tbody:last-child, > tbody:last-child,
> tfoot:last-child { > tfoot:last-child {
> tr:last-child { > tr:last-child {
border-bottom-left-radius: ($panel-border-radius - 1);
border-bottom-right-radius: ($panel-border-radius - 1); border-bottom-right-radius: ($panel-border-radius - 1);
border-bottom-left-radius: ($panel-border-radius - 1);
td:first-child, td:first-child,
th:first-child { th:first-child {
@ -208,8 +208,8 @@
} }
} }
> .table-responsive { > .table-responsive {
border: 0;
margin-bottom: 0; margin-bottom: 0;
border: 0;
} }
} }

View File

@ -15,39 +15,24 @@
// So reset our font and text properties to avoid inheriting weird values. // So reset our font and text properties to avoid inheriting weird values.
@include reset-text; @include reset-text;
font-size: $font-size-base; font-size: $font-size-base;
background-color: $popover-bg; background-color: $popover-bg;
background-clip: padding-box; background-clip: padding-box;
border: 1px solid $popover-fallback-border-color; border: 1px solid $popover-fallback-border-color;
border: 1px solid $popover-border-color; border: 1px solid $popover-border-color;
border-radius: $border-radius-large; border-radius: $border-radius-large;
@include box-shadow(0 5px 10px rgba(0,0,0,.2)); @include box-shadow(0 5px 10px rgba(0, 0, 0, .2));
// Offset the popover to account for the popover arrow // Offset the popover to account for the popover arrow
&.top { margin-top: -$popover-arrow-width; } &.top { margin-top: -$popover-arrow-width; }
&.right { margin-left: $popover-arrow-width; } &.right { margin-left: $popover-arrow-width; }
&.bottom { margin-top: $popover-arrow-width; } &.bottom { margin-top: $popover-arrow-width; }
&.left { margin-left: -$popover-arrow-width; } &.left { margin-left: -$popover-arrow-width; }
}
.popover-title { // Arrows
margin: 0; // reset heading margin // .arrow is outer, .arrow:after is inner
padding: 8px 14px; > .arrow {
font-size: $font-size-base; border-width: $popover-arrow-outer-width;
background-color: $popover-title-bg;
border-bottom: 1px solid darken($popover-title-bg, 5%);
border-radius: ($border-radius-large - 1) ($border-radius-large - 1) 0 0;
}
.popover-content {
padding: 9px 14px;
}
// Arrows
//
// .arrow is outer, .arrow:after is inner
.popover > .arrow {
&, &,
&:after { &:after {
position: absolute; position: absolute;
@ -57,57 +42,54 @@
border-color: transparent; border-color: transparent;
border-style: solid; border-style: solid;
} }
}
.popover > .arrow {
border-width: $popover-arrow-outer-width;
}
.popover > .arrow:after {
border-width: $popover-arrow-width;
content: "";
}
.popover { &:after {
content: "";
border-width: $popover-arrow-width;
}
}
&.top > .arrow { &.top > .arrow {
bottom: -$popover-arrow-outer-width;
left: 50%; left: 50%;
margin-left: -$popover-arrow-outer-width; margin-left: -$popover-arrow-outer-width;
border-bottom-width: 0;
border-top-color: $popover-arrow-outer-fallback-color; // IE8 fallback border-top-color: $popover-arrow-outer-fallback-color; // IE8 fallback
border-top-color: $popover-arrow-outer-color; border-top-color: $popover-arrow-outer-color;
bottom: -$popover-arrow-outer-width; border-bottom-width: 0;
&:after { &:after {
content: " ";
bottom: 1px; bottom: 1px;
margin-left: -$popover-arrow-width; margin-left: -$popover-arrow-width;
border-bottom-width: 0; content: " ";
border-top-color: $popover-arrow-color; border-top-color: $popover-arrow-color;
border-bottom-width: 0;
} }
} }
&.right > .arrow { &.right > .arrow {
top: 50%; top: 50%;
left: -$popover-arrow-outer-width; left: -$popover-arrow-outer-width;
margin-top: -$popover-arrow-outer-width; margin-top: -$popover-arrow-outer-width;
border-left-width: 0;
border-right-color: $popover-arrow-outer-fallback-color; // IE8 fallback border-right-color: $popover-arrow-outer-fallback-color; // IE8 fallback
border-right-color: $popover-arrow-outer-color; border-right-color: $popover-arrow-outer-color;
&:after {
content: " ";
left: 1px;
bottom: -$popover-arrow-width;
border-left-width: 0; border-left-width: 0;
&:after {
bottom: -$popover-arrow-width;
left: 1px;
content: " ";
border-right-color: $popover-arrow-color; border-right-color: $popover-arrow-color;
border-left-width: 0;
} }
} }
&.bottom > .arrow { &.bottom > .arrow {
top: -$popover-arrow-outer-width;
left: 50%; left: 50%;
margin-left: -$popover-arrow-outer-width; margin-left: -$popover-arrow-outer-width;
border-top-width: 0; border-top-width: 0;
border-bottom-color: $popover-arrow-outer-fallback-color; // IE8 fallback border-bottom-color: $popover-arrow-outer-fallback-color; // IE8 fallback
border-bottom-color: $popover-arrow-outer-color; border-bottom-color: $popover-arrow-outer-color;
top: -$popover-arrow-outer-width;
&:after { &:after {
content: " ";
top: 1px; top: 1px;
margin-left: -$popover-arrow-width; margin-left: -$popover-arrow-width;
content: " ";
border-top-width: 0; border-top-width: 0;
border-bottom-color: $popover-arrow-color; border-bottom-color: $popover-arrow-color;
} }
@ -121,11 +103,24 @@
border-left-color: $popover-arrow-outer-fallback-color; // IE8 fallback border-left-color: $popover-arrow-outer-fallback-color; // IE8 fallback
border-left-color: $popover-arrow-outer-color; border-left-color: $popover-arrow-outer-color;
&:after { &:after {
content: " ";
right: 1px; right: 1px;
bottom: -$popover-arrow-width;
content: " ";
border-right-width: 0; border-right-width: 0;
border-left-color: $popover-arrow-color; border-left-color: $popover-arrow-color;
bottom: -$popover-arrow-width;
} }
} }
} }
.popover-title {
padding: 8px 14px;
margin: 0; // reset heading margin
font-size: $font-size-base;
background-color: $popover-title-bg;
border-bottom: 1px solid darken($popover-title-bg, 5%);
border-radius: ($border-radius-large - 1) ($border-radius-large - 1) 0 0;
}
.popover-content {
padding: 9px 14px;
}

View File

@ -9,10 +9,10 @@
*, *,
*:before, *:before,
*:after { *:after {
background: transparent !important;
color: #000 !important; // Black prints faster: h5bp.com/s color: #000 !important; // Black prints faster: h5bp.com/s
box-shadow: none !important;
text-shadow: none !important; text-shadow: none !important;
background: transparent !important;
box-shadow: none !important;
} }
a, a,
@ -96,6 +96,4 @@
border: 1px solid #ddd !important; border: 1px solid #ddd !important;
} }
} }
// Bootstrap specific changes end
} }

View File

@ -24,12 +24,12 @@
// Outer container // Outer container
.progress { .progress {
overflow: hidden;
height: $line-height-computed; height: $line-height-computed;
margin-bottom: $line-height-computed; margin-bottom: $line-height-computed;
overflow: hidden;
background-color: $progress-bg; background-color: $progress-bg;
border-radius: $progress-border-radius; border-radius: $progress-border-radius;
@include box-shadow(inset 0 1px 2px rgba(0,0,0,.1)); @include box-shadow(inset 0 1px 2px rgba(0, 0, 0, .1));
} }
// Bar of progress // Bar of progress
@ -42,7 +42,7 @@
color: $progress-bar-color; color: $progress-bar-color;
text-align: center; text-align: center;
background-color: $progress-bar-bg; background-color: $progress-bar-bg;
@include box-shadow(inset 0 -1px 0 rgba(0,0,0,.15)); @include box-shadow(inset 0 -1px 0 rgba(0, 0, 0, .15));
@include transition(width .6s ease); @include transition(width .6s ease);
} }

View File

@ -16,10 +16,10 @@
video { video {
position: absolute; position: absolute;
top: 0; top: 0;
left: 0;
bottom: 0; bottom: 0;
height: 100%; left: 0;
width: 100%; width: 100%;
height: 100%;
border: 0; border: 0;
} }
} }

View File

@ -14,9 +14,9 @@
// For more information, see the following: // For more information, see the following:
// //
// Issue: https://github.com/twbs/bootstrap/issues/10497 // Issue: https://github.com/twbs/bootstrap/issues/10497
// Docs: http://getbootstrap.com/getting-started/#support-ie10-width // Docs: https://getbootstrap.com/docs/3.4/getting-started/#support-ie10-width
// Source: http://timkadlec.com/2013/01/windows-phone-8-and-device-width/ // Source: https://timkadlec.com/2013/01/windows-phone-8-and-device-width/
// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/ // Source: https://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/
@at-root { @at-root {
@-ms-viewport { @-ms-viewport {

View File

@ -7,7 +7,7 @@
// //
// Heads up! This reset may cause conflicts with some third-party widgets. // Heads up! This reset may cause conflicts with some third-party widgets.
// For recommendations on resolving such conflicts, see // For recommendations on resolving such conflicts, see
// http://getbootstrap.com/getting-started/#third-box-sizing // https://getbootstrap.com/docs/3.4/getting-started/#third-box-sizing
* { * {
@include box-sizing(border-box); @include box-sizing(border-box);
} }
@ -21,7 +21,7 @@
html { html {
font-size: 10px; font-size: 10px;
-webkit-tap-highlight-color: rgba(0,0,0,0); -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
} }
body { body {
@ -120,21 +120,21 @@ hr {
// Only display content to screen readers // Only display content to screen readers
// //
// See: http://a11yproject.com/posts/how-to-hide-content // See: https://a11yproject.com/posts/how-to-hide-content
.sr-only { .sr-only {
position: absolute; position: absolute;
width: 1px; width: 1px;
height: 1px; height: 1px;
margin: -1px;
padding: 0; padding: 0;
margin: -1px;
overflow: hidden; overflow: hidden;
clip: rect(0,0,0,0); clip: rect(0, 0, 0, 0);
border: 0; border: 0;
} }
// Use in conjunction with .sr-only to only display content when it's focused. // Use in conjunction with .sr-only to only display content when it's focused.
// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 // Useful for "Skip to main content" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
// Credit: HTML5 Boilerplate // Credit: HTML5 Boilerplate
.sr-only-focusable { .sr-only-focusable {

View File

@ -5,13 +5,34 @@
table { table {
background-color: $table-bg; background-color: $table-bg;
// Table cell sizing
//
// Reset default table behavior
col[class*="col-"] {
position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)
display: table-column;
float: none;
}
td,
th {
&[class*="col-"] {
position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)
display: table-cell;
float: none;
}
}
} }
caption { caption {
padding-top: $table-cell-padding; padding-top: $table-cell-padding;
padding-bottom: $table-cell-padding; padding-bottom: $table-cell-padding;
color: $text-muted; color: $text-muted;
text-align: left; text-align: left;
} }
th { th {
text-align: left; text-align: left;
} }
@ -128,27 +149,6 @@ th {
} }
// Table cell sizing
//
// Reset default table behavior
table col[class*="col-"] {
position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)
float: none;
display: table-column;
}
table {
td,
th {
&[class*="col-"] {
position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)
float: none;
display: table-cell;
}
}
}
// Table backgrounds // Table backgrounds
// //
// Exact selectors below required to override `.table-striped` and prevent // Exact selectors below required to override `.table-striped` and prevent
@ -169,12 +169,12 @@ table {
// will display normally. // will display normally.
.table-responsive { .table-responsive {
min-height: .01%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837)
overflow-x: auto; overflow-x: auto;
min-height: 0.01%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837)
@media screen and (max-width: $screen-xs-max) { @media screen and (max-width: $screen-xs-max) {
width: 100%; width: 100%;
margin-bottom: ($line-height-computed * 0.75); margin-bottom: ($line-height-computed * .75);
overflow-y: hidden; overflow-y: hidden;
-ms-overflow-style: -ms-autohiding-scrollbar; -ms-overflow-style: -ms-autohiding-scrollbar;
border: 1px solid $table-border-color; border: 1px solid $table-border-color;

View File

@ -1,6 +1,6 @@
/*! /*!
* Bootstrap v3.3.7 (http://getbootstrap.com) * Bootstrap v3.4.1 (https://getbootstrap.com/)
* Copyright 2011-2016 Twitter, Inc. * Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/ */
@ -23,14 +23,14 @@
.btn-info, .btn-info,
.btn-warning, .btn-warning,
.btn-danger { .btn-danger {
text-shadow: 0 -1px 0 rgba(0,0,0,.2); text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
$shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075); $shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
@include box-shadow($shadow); @include box-shadow($shadow);
// Reset the shadow // Reset the shadow
&:active, &:active,
&.active { &.active {
@include box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); @include box-shadow(inset 0 3px 5px rgba(0, 0, 0, .125));
} }
&.disabled, &.disabled,
@ -88,7 +88,11 @@
} }
// Apply the mixin to the buttons // Apply the mixin to the buttons
.btn-default { @include btn-styles($btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; } .btn-default {
@include btn-styles($btn-default-bg);
text-shadow: 0 1px 0 #fff;
border-color: #ccc;
}
.btn-primary { @include btn-styles($btn-primary-bg); } .btn-primary { @include btn-styles($btn-primary-bg); }
.btn-success { @include btn-styles($btn-success-bg); } .btn-success { @include btn-styles($btn-success-bg); }
.btn-info { @include btn-styles($btn-info-bg); } .btn-info { @include btn-styles($btn-info-bg); }
@ -102,7 +106,7 @@
.thumbnail, .thumbnail,
.img-thumbnail { .img-thumbnail {
@include box-shadow(0 1px 2px rgba(0,0,0,.075)); @include box-shadow(0 1px 2px rgba(0, 0, 0, .075));
} }
@ -132,18 +136,18 @@
@include gradient-vertical($start-color: lighten($navbar-default-bg, 10%), $end-color: $navbar-default-bg); @include gradient-vertical($start-color: lighten($navbar-default-bg, 10%), $end-color: $navbar-default-bg);
@include reset-filter; // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered @include reset-filter; // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered
border-radius: $navbar-border-radius; border-radius: $navbar-border-radius;
$shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075); $shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
@include box-shadow($shadow); @include box-shadow($shadow);
.navbar-nav > .open > a, .navbar-nav > .open > a,
.navbar-nav > .active > a { .navbar-nav > .active > a {
@include gradient-vertical($start-color: darken($navbar-default-link-active-bg, 5%), $end-color: darken($navbar-default-link-active-bg, 2%)); @include gradient-vertical($start-color: darken($navbar-default-link-active-bg, 5%), $end-color: darken($navbar-default-link-active-bg, 2%));
@include box-shadow(inset 0 3px 9px rgba(0,0,0,.075)); @include box-shadow(inset 0 3px 9px rgba(0, 0, 0, .075));
} }
} }
.navbar-brand, .navbar-brand,
.navbar-nav > li > a { .navbar-nav > li > a {
text-shadow: 0 1px 0 rgba(255,255,255,.25); text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
} }
// Inverted navbar // Inverted navbar
@ -154,12 +158,12 @@
.navbar-nav > .open > a, .navbar-nav > .open > a,
.navbar-nav > .active > a { .navbar-nav > .active > a {
@include gradient-vertical($start-color: $navbar-inverse-link-active-bg, $end-color: lighten($navbar-inverse-link-active-bg, 2.5%)); @include gradient-vertical($start-color: $navbar-inverse-link-active-bg, $end-color: lighten($navbar-inverse-link-active-bg, 2.5%));
@include box-shadow(inset 0 3px 9px rgba(0,0,0,.25)); @include box-shadow(inset 0 3px 9px rgba(0, 0, 0, .25));
} }
.navbar-brand, .navbar-brand,
.navbar-nav > li > a { .navbar-nav > li > a {
text-shadow: 0 -1px 0 rgba(0,0,0,.25); text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
} }
} }
@ -189,8 +193,8 @@
// Common styles // Common styles
.alert { .alert {
text-shadow: 0 1px 0 rgba(255,255,255,.2); text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
$shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05); $shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
@include box-shadow($shadow); @include box-shadow($shadow);
} }
@ -241,7 +245,7 @@
.list-group { .list-group {
border-radius: $border-radius-base; border-radius: $border-radius-base;
@include box-shadow(0 1px 2px rgba(0,0,0,.075)); @include box-shadow(0 1px 2px rgba(0, 0, 0, .075));
} }
.list-group-item.active, .list-group-item.active,
.list-group-item.active:hover, .list-group-item.active:hover,
@ -262,7 +266,7 @@
// Common styles // Common styles
.panel { .panel {
@include box-shadow(0 1px 2px rgba(0,0,0,.05)); @include box-shadow(0 1px 2px rgba(0, 0, 0, .05));
} }
// Mixin for generating new styles // Mixin for generating new styles
@ -286,6 +290,6 @@
.well { .well {
@include gradient-vertical($start-color: darken($well-bg, 5%), $end-color: $well-bg); @include gradient-vertical($start-color: darken($well-bg, 5%), $end-color: $well-bg);
border-color: darken($well-bg, 10%); border-color: darken($well-bg, 10%);
$shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1); $shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
@include box-shadow($shadow); @include box-shadow($shadow);
} }

View File

@ -17,8 +17,8 @@
> img, > img,
a > img { a > img {
@include img-responsive; @include img-responsive;
margin-left: auto;
margin-right: auto; margin-right: auto;
margin-left: auto;
} }
// [converter] extracted a&:hover, a&:focus, a&.active to a.thumbnail:hover, a.thumbnail:focus, a.thumbnail.active // [converter] extracted a&:hover, a&:focus, a&.active to a.thumbnail:hover, a.thumbnail:focus, a.thumbnail.active

View File

@ -16,32 +16,24 @@
@include opacity(0); @include opacity(0);
&.in { @include opacity($tooltip-opacity); } &.in { @include opacity($tooltip-opacity); }
&.top { margin-top: -3px; padding: $tooltip-arrow-width 0; } &.top {
&.right { margin-left: 3px; padding: 0 $tooltip-arrow-width; } padding: $tooltip-arrow-width 0;
&.bottom { margin-top: 3px; padding: $tooltip-arrow-width 0; } margin-top: -3px;
&.left { margin-left: -3px; padding: 0 $tooltip-arrow-width; } }
} &.right {
padding: 0 $tooltip-arrow-width;
margin-left: 3px;
}
&.bottom {
padding: $tooltip-arrow-width 0;
margin-top: 3px;
}
&.left {
padding: 0 $tooltip-arrow-width;
margin-left: -3px;
}
// Wrapper for the tooltip content // Note: Deprecated .top-left, .top-right, .bottom-left, and .bottom-right as of v3.3.1
.tooltip-inner {
max-width: $tooltip-max-width;
padding: 3px 8px;
color: $tooltip-color;
text-align: center;
background-color: $tooltip-bg;
border-radius: $border-radius-base;
}
// Arrows
.tooltip-arrow {
position: absolute;
width: 0;
height: 0;
border-color: transparent;
border-style: solid;
}
// Note: Deprecated .top-left, .top-right, .bottom-left, and .bottom-right as of v3.3.1
.tooltip {
&.top .tooltip-arrow { &.top .tooltip-arrow {
bottom: 0; bottom: 0;
left: 50%; left: 50%;
@ -50,8 +42,8 @@
border-top-color: $tooltip-arrow-color; border-top-color: $tooltip-arrow-color;
} }
&.top-left .tooltip-arrow { &.top-left .tooltip-arrow {
bottom: 0;
right: $tooltip-arrow-width; right: $tooltip-arrow-width;
bottom: 0;
margin-bottom: -$tooltip-arrow-width; margin-bottom: -$tooltip-arrow-width;
border-width: $tooltip-arrow-width $tooltip-arrow-width 0; border-width: $tooltip-arrow-width $tooltip-arrow-width 0;
border-top-color: $tooltip-arrow-color; border-top-color: $tooltip-arrow-color;
@ -99,3 +91,22 @@
border-bottom-color: $tooltip-arrow-color; border-bottom-color: $tooltip-arrow-color;
} }
} }
// Wrapper for the tooltip content
.tooltip-inner {
max-width: $tooltip-max-width;
padding: 3px 8px;
color: $tooltip-color;
text-align: center;
background-color: $tooltip-bg;
border-radius: $border-radius-base;
}
// Arrows
.tooltip-arrow {
position: absolute;
width: 0;
height: 0;
border-color: transparent;
border-style: solid;
}

View File

@ -15,7 +15,7 @@ h1, h2, h3, h4, h5, h6,
small, small,
.small { .small {
font-weight: normal; font-weight: 400;
line-height: 1; line-height: 1;
color: $headings-small-color; color: $headings-small-color;
} }
@ -82,8 +82,8 @@ small,
mark, mark,
.mark { .mark {
background-color: $state-warning-bg;
padding: .2em; padding: .2em;
background-color: $state-warning-bg;
} }
// Alignment // Alignment
@ -176,8 +176,8 @@ ol {
> li { > li {
display: inline-block; display: inline-block;
padding-left: 5px;
padding-right: 5px; padding-right: 5px;
padding-left: 5px;
} }
} }
@ -191,7 +191,7 @@ dd {
line-height: $line-height-base; line-height: $line-height-base;
} }
dt { dt {
font-weight: bold; font-weight: 700;
} }
dd { dd {
margin-left: 0; // Undo browser default margin-left: 0; // Undo browser default
@ -226,12 +226,12 @@ dd {
// ------------------------- // -------------------------
// Abbreviations and acronyms // Abbreviations and acronyms
abbr[title],
// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257 // Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257
abbr[title],
abbr[data-original-title] { abbr[data-original-title] {
cursor: help; cursor: help;
border-bottom: 1px dotted $abbr-border-color;
} }
.initialism { .initialism {
font-size: 90%; font-size: 90%;
@extend .text-uppercase; @extend .text-uppercase;
@ -263,7 +263,7 @@ blockquote {
color: $blockquote-small-color; color: $blockquote-small-color;
&:before { &:before {
content: '\2014 \00A0'; // em dash, nbsp content: "\2014 \00A0"; // em dash, nbsp
} }
} }
} }
@ -275,17 +275,17 @@ blockquote {
blockquote.pull-right { blockquote.pull-right {
padding-right: 15px; padding-right: 15px;
padding-left: 0; padding-left: 0;
text-align: right;
border-right: 5px solid $blockquote-border-color; border-right: 5px solid $blockquote-border-color;
border-left: 0; border-left: 0;
text-align: right;
// Account for citation // Account for citation
footer, footer,
small, small,
.small { .small {
&:before { content: ''; } &:before { content: ""; }
&:after { &:after {
content: '\00A0 \2014'; // nbsp, em dash content: "\00A0 \2014"; // nbsp, em dash
} }
} }
} }

View File

@ -51,14 +51,14 @@ $font-family-base: $font-family-sans-serif !default;
$font-size-base: 14px !default; $font-size-base: 14px !default;
$font-size-large: ceil(($font-size-base * 1.25)) !default; // ~18px $font-size-large: ceil(($font-size-base * 1.25)) !default; // ~18px
$font-size-small: ceil(($font-size-base * 0.85)) !default; // ~12px $font-size-small: ceil(($font-size-base * .85)) !default; // ~12px
$font-size-h1: floor(($font-size-base * 2.6)) !default; // ~36px $font-size-h1: floor(($font-size-base * 2.6)) !default; // ~36px
$font-size-h2: floor(($font-size-base * 2.15)) !default; // ~30px $font-size-h2: floor(($font-size-base * 2.15)) !default; // ~30px
$font-size-h3: ceil(($font-size-base * 1.7)) !default; // ~24px $font-size-h3: ceil(($font-size-base * 1.7)) !default; // ~24px
$font-size-h4: ceil(($font-size-base * 1.25)) !default; // ~18px $font-size-h4: ceil(($font-size-base * 1.25)) !default; // ~18px
$font-size-h5: $font-size-base !default; $font-size-h5: $font-size-base !default;
$font-size-h6: ceil(($font-size-base * 0.85)) !default; // ~12px $font-size-h6: ceil(($font-size-base * .85)) !default; // ~12px
//** Unit-less `line-height` for use in components like buttons. //** Unit-less `line-height` for use in components like buttons.
$line-height-base: 1.428571429 !default; // 20/14 $line-height-base: 1.428571429 !default; // 20/14
@ -239,7 +239,7 @@ $cursor-disabled: not-allowed !default;
//** Background for the dropdown menu. //** Background for the dropdown menu.
$dropdown-bg: #fff !default; $dropdown-bg: #fff !default;
//** Dropdown menu `border-color`. //** Dropdown menu `border-color`.
$dropdown-border: rgba(0,0,0,.15) !default; $dropdown-border: rgba(0, 0, 0, .15) !default;
//** Dropdown menu `border-color` **for IE8**. //** Dropdown menu `border-color` **for IE8**.
$dropdown-fallback-border: #ccc !default; $dropdown-fallback-border: #ccc !default;
//** Divider color for between dropdown items. //** Divider color for between dropdown items.
@ -545,7 +545,7 @@ $popover-bg: #fff !default;
//** Popover maximum width //** Popover maximum width
$popover-max-width: 276px !default; $popover-max-width: 276px !default;
//** Popover border color //** Popover border color
$popover-border-color: rgba(0,0,0,.2) !default; $popover-border-color: rgba(0, 0, 0, .2) !default;
//** Popover fallback border color //** Popover fallback border color
$popover-fallback-border-color: #ccc !default; $popover-fallback-border-color: #ccc !default;
@ -603,7 +603,7 @@ $modal-title-line-height: $line-height-base !default;
//** Background color of modal content area //** Background color of modal content area
$modal-content-bg: #fff !default; $modal-content-bg: #fff !default;
//** Modal content border color //** Modal content border color
$modal-content-border-color: rgba(0,0,0,.2) !default; $modal-content-border-color: rgba(0, 0, 0, .2) !default;
//** Modal content border color **for IE8** //** Modal content border color **for IE8**
$modal-content-fallback-border-color: #999 !default; $modal-content-fallback-border-color: #999 !default;
@ -808,7 +808,7 @@ $breadcrumb-separator: "/" !default;
// //
//## //##
$carousel-text-shadow: 0 1px 2px rgba(0,0,0,.6) !default; $carousel-text-shadow: 0 1px 2px rgba(0, 0, 0, .6) !default;
$carousel-control-color: #fff !default; $carousel-control-color: #fff !default;
$carousel-control-width: 15% !default; $carousel-control-width: 15% !default;

View File

@ -11,10 +11,10 @@
background-color: $well-bg; background-color: $well-bg;
border: 1px solid $well-border; border: 1px solid $well-border;
border-radius: $border-radius-base; border-radius: $border-radius-base;
@include box-shadow(inset 0 1px 1px rgba(0,0,0,.05)); @include box-shadow(inset 0 1px 1px rgba(0, 0, 0, .05));
blockquote { blockquote {
border-color: #ddd; border-color: #ddd;
border-color: rgba(0,0,0,.15); border-color: rgba(0, 0, 0, .15);
} }
} }

View File

@ -1,13 +1,14 @@
// Alerts // Alerts
@mixin alert-variant($background, $border, $text-color) { @mixin alert-variant($background, $border, $text-color) {
color: $text-color;
background-color: $background; background-color: $background;
border-color: $border; border-color: $border;
color: $text-color;
hr { hr {
border-top-color: darken($border, 5%); border-top-color: darken($border, 5%);
} }
.alert-link { .alert-link {
color: darken($text-color, 10%); color: darken($text-color, 10%);
} }

View File

@ -1,18 +1,18 @@
// Single side border-radius // Single side border-radius
@mixin border-top-radius($radius) { @mixin border-top-radius($radius) {
border-top-right-radius: $radius;
border-top-left-radius: $radius; border-top-left-radius: $radius;
border-top-right-radius: $radius;
} }
@mixin border-right-radius($radius) { @mixin border-right-radius($radius) {
border-bottom-right-radius: $radius;
border-top-right-radius: $radius; border-top-right-radius: $radius;
border-bottom-right-radius: $radius;
} }
@mixin border-bottom-radius($radius) { @mixin border-bottom-radius($radius) {
border-bottom-right-radius: $radius; border-bottom-right-radius: $radius;
border-bottom-left-radius: $radius; border-bottom-left-radius: $radius;
} }
@mixin border-left-radius($radius) { @mixin border-left-radius($radius) {
border-bottom-left-radius: $radius;
border-top-left-radius: $radius; border-top-left-radius: $radius;
border-bottom-left-radius: $radius;
} }

View File

@ -24,6 +24,7 @@
.open > &.dropdown-toggle { .open > &.dropdown-toggle {
color: $color; color: $color;
background-color: darken($background, 10%); background-color: darken($background, 10%);
background-image: none;
border-color: darken($border, 12%); border-color: darken($border, 12%);
&:hover, &:hover,
@ -34,11 +35,6 @@
border-color: darken($border, 25%); border-color: darken($border, 25%);
} }
} }
&:active,
&.active,
.open > &.dropdown-toggle {
background-image: none;
}
&.disabled, &.disabled,
&[disabled], &[disabled],
fieldset[disabled] & { fieldset[disabled] & {

View File

@ -2,6 +2,6 @@
@mixin center-block() { @mixin center-block() {
display: block; display: block;
margin-left: auto;
margin-right: auto; margin-right: auto;
margin-left: auto;
} }

View File

@ -13,8 +13,8 @@
@mixin clearfix() { @mixin clearfix() {
&:before, &:before,
&:after { &:after {
content: " "; // 1
display: table; // 2 display: table; // 2
content: " "; // 1
} }
&:after { &:after {
clear: both; clear: both;

View File

@ -20,18 +20,18 @@
// Set the border and box shadow on specific inputs to match // Set the border and box shadow on specific inputs to match
.form-control { .form-control {
border-color: $border-color; border-color: $border-color;
@include box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work @include box-shadow(inset 0 1px 1px rgba(0, 0, 0, .075)); // Redeclare so transitions work
&:focus { &:focus {
border-color: darken($border-color, 10%); border-color: darken($border-color, 10%);
$shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten($border-color, 20%); $shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px lighten($border-color, 20%);
@include box-shadow($shadow); @include box-shadow($shadow);
} }
} }
// Set validation states also for addons // Set validation states also for addons
.input-group-addon { .input-group-addon {
color: $text-color; color: $text-color;
border-color: $border-color;
background-color: $background-color; background-color: $background-color;
border-color: $border-color;
} }
// Optional feedback icon // Optional feedback icon
.form-control-feedback { .form-control-feedback {
@ -57,7 +57,7 @@
&:focus { &:focus {
border-color: $color; border-color: $color;
outline: 0; outline: 0;
@include box-shadow(inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px $color-rgba); @include box-shadow(inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px $color-rgba);
} }
} }

View File

@ -1,5 +1,3 @@
// Gradients
// Horizontal gradient, from left to right // Horizontal gradient, from left to right
@ -10,8 +8,8 @@
background-image: -webkit-linear-gradient(left, $start-color $start-percent, $end-color $end-percent); // Safari 5.1-6, Chrome 10+ background-image: -webkit-linear-gradient(left, $start-color $start-percent, $end-color $end-percent); // Safari 5.1-6, Chrome 10+
background-image: -o-linear-gradient(left, $start-color $start-percent, $end-color $end-percent); // Opera 12 background-image: -o-linear-gradient(left, $start-color $start-percent, $end-color $end-percent); // Opera 12
background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+ background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=1); // IE9 and down filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=1); // IE9 and down
background-repeat: repeat-x;
} }
// Vertical gradient, from top to bottom // Vertical gradient, from top to bottom
@ -22,36 +20,36 @@
background-image: -webkit-linear-gradient(top, $start-color $start-percent, $end-color $end-percent); // Safari 5.1-6, Chrome 10+ background-image: -webkit-linear-gradient(top, $start-color $start-percent, $end-color $end-percent); // Safari 5.1-6, Chrome 10+
background-image: -o-linear-gradient(top, $start-color $start-percent, $end-color $end-percent); // Opera 12 background-image: -o-linear-gradient(top, $start-color $start-percent, $end-color $end-percent); // Opera 12
background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+ background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=0); // IE9 and down filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=0); // IE9 and down
background-repeat: repeat-x;
} }
@mixin gradient-directional($start-color: #555, $end-color: #333, $deg: 45deg) { @mixin gradient-directional($start-color: #555, $end-color: #333, $deg: 45deg) {
background-repeat: repeat-x;
background-image: -webkit-linear-gradient($deg, $start-color, $end-color); // Safari 5.1-6, Chrome 10+ background-image: -webkit-linear-gradient($deg, $start-color, $end-color); // Safari 5.1-6, Chrome 10+
background-image: -o-linear-gradient($deg, $start-color, $end-color); // Opera 12 background-image: -o-linear-gradient($deg, $start-color, $end-color); // Opera 12
background-image: linear-gradient($deg, $start-color, $end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+ background-image: linear-gradient($deg, $start-color, $end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+
background-repeat: repeat-x;
} }
@mixin gradient-horizontal-three-colors($start-color: #00b3ee, $mid-color: #7a43b6, $color-stop: 50%, $end-color: #c3325f) { @mixin gradient-horizontal-three-colors($start-color: #00b3ee, $mid-color: #7a43b6, $color-stop: 50%, $end-color: #c3325f) {
background-image: -webkit-linear-gradient(left, $start-color, $mid-color $color-stop, $end-color); background-image: -webkit-linear-gradient(left, $start-color, $mid-color $color-stop, $end-color);
background-image: -o-linear-gradient(left, $start-color, $mid-color $color-stop, $end-color); background-image: -o-linear-gradient(left, $start-color, $mid-color $color-stop, $end-color);
background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color); background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);
background-repeat: no-repeat;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=1); // IE9 and down, gets no color-stop at all for proper fallback filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=1); // IE9 and down, gets no color-stop at all for proper fallback
background-repeat: no-repeat;
} }
@mixin gradient-vertical-three-colors($start-color: #00b3ee, $mid-color: #7a43b6, $color-stop: 50%, $end-color: #c3325f) { @mixin gradient-vertical-three-colors($start-color: #00b3ee, $mid-color: #7a43b6, $color-stop: 50%, $end-color: #c3325f) {
background-image: -webkit-linear-gradient($start-color, $mid-color $color-stop, $end-color); background-image: -webkit-linear-gradient($start-color, $mid-color $color-stop, $end-color);
background-image: -o-linear-gradient($start-color, $mid-color $color-stop, $end-color); background-image: -o-linear-gradient($start-color, $mid-color $color-stop, $end-color);
background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color); background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);
background-repeat: no-repeat;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=0); // IE9 and down, gets no color-stop at all for proper fallback filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}', GradientType=0); // IE9 and down, gets no color-stop at all for proper fallback
background-repeat: no-repeat;
} }
@mixin gradient-radial($inner-color: #555, $outer-color: #333) { @mixin gradient-radial($inner-color: #555, $outer-color: #333) {
background-image: -webkit-radial-gradient(circle, $inner-color, $outer-color); background-image: -webkit-radial-gradient(circle, $inner-color, $outer-color);
background-image: radial-gradient(circle, $inner-color, $outer-color); background-image: radial-gradient(circle, $inner-color, $outer-color);
background-repeat: no-repeat; background-repeat: no-repeat;
} }
@mixin gradient-striped($color: rgba(255,255,255,.15), $angle: 45deg) { @mixin gradient-striped($color: rgba(255, 255, 255, .15), $angle: 45deg) {
background-image: -webkit-linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent); background-image: -webkit-linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);
background-image: -o-linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent); background-image: -o-linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);
background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent); background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);

View File

@ -13,8 +13,8 @@
// Prevent columns from collapsing when empty // Prevent columns from collapsing when empty
min-height: 1px; min-height: 1px;
// Inner gutter via padding // Inner gutter via padding
padding-left: ceil(($grid-gutter-width / 2));
padding-right: floor(($grid-gutter-width / 2)); padding-right: floor(($grid-gutter-width / 2));
padding-left: ceil(($grid-gutter-width / 2));
} }
} }

View File

@ -4,17 +4,17 @@
// Centered container element // Centered container element
@mixin container-fixed($gutter: $grid-gutter-width) { @mixin container-fixed($gutter: $grid-gutter-width) {
padding-right: ceil(($gutter / 2));
padding-left: floor(($gutter / 2));
margin-right: auto; margin-right: auto;
margin-left: auto; margin-left: auto;
padding-left: floor(($gutter / 2));
padding-right: ceil(($gutter / 2));
@include clearfix; @include clearfix;
} }
// Creates a wrapper for a series of columns // Creates a wrapper for a series of columns
@mixin make-row($gutter: $grid-gutter-width) { @mixin make-row($gutter: $grid-gutter-width) {
margin-left: ceil(($gutter / -2));
margin-right: floor(($gutter / -2)); margin-right: floor(($gutter / -2));
margin-left: ceil(($gutter / -2));
@include clearfix; @include clearfix;
} }
@ -24,8 +24,8 @@
float: left; float: left;
width: percentage(($columns / $grid-columns)); width: percentage(($columns / $grid-columns));
min-height: 1px; min-height: 1px;
padding-left: ($gutter / 2);
padding-right: ($gutter / 2); padding-right: ($gutter / 2);
padding-left: ($gutter / 2);
} }
@mixin make-xs-column-offset($columns) { @mixin make-xs-column-offset($columns) {
margin-left: percentage(($columns / $grid-columns)); margin-left: percentage(($columns / $grid-columns));
@ -41,8 +41,8 @@
@mixin make-sm-column($columns, $gutter: $grid-gutter-width) { @mixin make-sm-column($columns, $gutter: $grid-gutter-width) {
position: relative; position: relative;
min-height: 1px; min-height: 1px;
padding-left: ($gutter / 2);
padding-right: ($gutter / 2); padding-right: ($gutter / 2);
padding-left: ($gutter / 2);
@media (min-width: $screen-sm-min) { @media (min-width: $screen-sm-min) {
float: left; float: left;
@ -69,8 +69,8 @@
@mixin make-md-column($columns, $gutter: $grid-gutter-width) { @mixin make-md-column($columns, $gutter: $grid-gutter-width) {
position: relative; position: relative;
min-height: 1px; min-height: 1px;
padding-left: ($gutter / 2);
padding-right: ($gutter / 2); padding-right: ($gutter / 2);
padding-left: ($gutter / 2);
@media (min-width: $screen-md-min) { @media (min-width: $screen-md-min) {
float: left; float: left;
@ -97,8 +97,8 @@
@mixin make-lg-column($columns, $gutter: $grid-gutter-width) { @mixin make-lg-column($columns, $gutter: $grid-gutter-width) {
position: relative; position: relative;
min-height: 1px; min-height: 1px;
padding-left: ($gutter / 2);
padding-right: ($gutter / 2); padding-right: ($gutter / 2);
padding-left: ($gutter / 2);
@media (min-width: $screen-lg-min) { @media (min-width: $screen-lg-min) {
float: left; float: left;

View File

@ -1,8 +1,3 @@
// Image Mixins
// - Responsive image
// - Retina image
// Responsive image // Responsive image
// //
// Keep images from scaling beyond the width of their parents. // Keep images from scaling beyond the width of their parents.

View File

@ -1,8 +1,7 @@
// Opacity // Opacity
@mixin opacity($opacity) { @mixin opacity($opacity) {
opacity: $opacity; $opacity-ie: ($opacity * 100); // IE8 filter
// IE8 filter
$opacity-ie: ($opacity * 100);
filter: alpha(opacity=$opacity-ie); filter: alpha(opacity=$opacity-ie);
opacity: $opacity;
} }

View File

@ -2,17 +2,17 @@
font-family: $font-family-base; font-family: $font-family-base;
// We deliberately do NOT reset font-size. // We deliberately do NOT reset font-size.
font-style: normal; font-style: normal;
font-weight: normal; font-weight: 400;
letter-spacing: normal;
line-break: auto;
line-height: $line-height-base; line-height: $line-height-base;
line-break: auto;
text-align: left; // Fallback for where `start` is not supported text-align: left; // Fallback for where `start` is not supported
text-align: start; text-align: start;
text-decoration: none; text-decoration: none;
text-shadow: none; text-shadow: none;
text-transform: none; text-transform: none;
white-space: normal; letter-spacing: normal;
word-break: normal; word-break: normal;
word-spacing: normal; word-spacing: normal;
word-wrap: normal; word-wrap: normal;
white-space: normal;
} }

View File

@ -1,6 +1,6 @@
// Resize anything // Resize anything
@mixin resizable($direction) { @mixin resizable($direction) {
resize: $direction; // Options: horizontal, vertical, both
overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible` overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible`
resize: $direction; // Options: horizontal, vertical, both
} }

View File

@ -1,7 +1,3 @@
// Responsive utilities
//
// More easily include all the states for responsive-utilities.less.
// [converter] $parent hack // [converter] $parent hack
@mixin responsive-visibility($parent) { @mixin responsive-visibility($parent) {
#{$parent} { #{$parent} {

View File

@ -89,12 +89,12 @@
// Optional hyphenation // Optional hyphenation
@mixin hyphens($mode: auto) { @mixin hyphens($mode: auto) {
word-wrap: break-word;
-webkit-hyphens: $mode; -webkit-hyphens: $mode;
-moz-hyphens: $mode; -moz-hyphens: $mode;
-ms-hyphens: $mode; // IE10+ -ms-hyphens: $mode; // IE10+
-o-hyphens: $mode; -o-hyphens: $mode;
hyphens: $mode; hyphens: $mode;
word-wrap: break-word;
} }
// Placeholder text // Placeholder text