* #84 test data dump from CREST login * updated "credits" dialog (Google+ link) fixed login form layout * updated Cortex Data-Mapper * - #84 CREST Login (WIP) - New CREST controller - Database restructuring - improved type-casting for some controller functions - New login process - Fixed some bugs during the setup process (/setup root) - Added CREST request caching by response headers * pathfinder-84 [Feature Request] CREST Pilot Tracking, many smaller Bugfixes * pathfinder-84 [Feature Request] added develop JS files * closed #121 fixed wormhole signature type caching * closed #120 removed map-loading animation for larger maps (same behaviour as IGB) * closed #119 fixed wormhole signature id count * closed #114 Added check for already existing system when adding a new one. (fixed PDO 'duplicate entry' error) * closed #112 fixed DataTables error for missing "status" data (signature table) * closed #111 fixed convertDataToUTC(); client side date transformation * closed #109 fixed system TrueSec rounding * closed #103 fixed system updated timestamp in getData() * fixed CSS class for secStatus in Routes module * closed #121 fixed wormhole signature type caching * changed dateTime format from German to US format fixed some minor bugs in signatureTable module * closed #81 fixed "signature type" overwriting by "signature reader" update * closed #106 added new signature_types form C5/6 wormholes (gas/ore) * closed #129 fixed parameter hinting * closed #131 new "route search" algorithm, added current map systems to live search, added refresh/update functionality for each found route, added bulk route refresh function, added "meta map" route search (search on multiple maps), added route "filters" (restrict search on "stargates", "wormholes", "jumpbridges"), added route "filter" for wormholes (reduced/critical wormholes) closed #89 fixed "loop connections" on same system #84 added error messages for "invalid" CREST "Client ID" added "bootboxjs" (customized styled checkboxes/radio buttons) CSS only "Font Awesome" version upgrade 4.4.0 -> 4.61 "Bootbox.js" version upgrade 4.3.0 -> 4.4.0 fixed "system dialog" (added responsive layout) * closed #134 fixed db column type DT_INT (8 bytes) to DT_BIGINT * closed #138 added new cookie based login * closed #137 fixed javascript errors on trying to establish an "invalid" connection * - #84, #138 improved "character selection" on login page (expired cookies are deleted, character panel layout improvements) - added new "Server info panel" to the login page - added new cronjob to delete expired cookie authentication data * #138 enables character switching between characters which have same user * - PHP Framework upgrade 3.5.0 -> 3.5.1 (fixes some issues with CREST cURL caching, and SESSION management) - #138 added "cookie logout" to "logout" menu entry * - updated "feature page" with new feature descriptions and label - added some new images to the "feature gallery" - removed "beta" status from "magnetizing" feature on map menu - hide "server status" panel on "mobile" breakpoint * - #138 clear character authentication data on sold characters * closed #142 added custom "onsuspect()" session handler * #142 do not log suspect if no file is defined in pathfinder.ini * #142 added NullSec Data/Relic sites to C1/2/3 wormholes as signature option * #144 fixed "Character not found" warning * #144 fixed "Character not found" warning * closed #144 fixed broken routes panel in IGB * updated README.md for upcoming release * #147 response header validation * #149 changed comment for 'BASE' framework var * fixed map import * - added minimal SDE dump (EVE Online: Citadel) - #147 improved CREST API error logging (WIP) - improved SSO controller (removed access_token from public endpoints) * closed #154 added alliance maps to CREST API * - updated Gulp build dependencies - increased CREST timeout from 3s -> 4s - added "Accept" Headers for some CREST endpoints * cloased #147 * - closed #153 added character verification check for getAll(); Signatures Ajax endpoint * - updated README.md (added Slack developer chat information) * Bugfix frig holes (#159) * added missing frigate wormholes and fixed Q003 destination in shattered wormholes * changed C7 to 0.0 for Q003 * - fixed broken "graph" data for system * added a "failover" system for bad crest requests (HTTP status 5xx,.. ) * Red Gaint => Red Giant (#161) * closed #163 added CREST endpoint support for "waypoints" * fixed typo * closed #160 fixed tooltip container * - added new features to login page * closes #154 added alliance map support * fixed XML path for cronjobs * fixed a bug with inactive "private" maps * closes #175 added alternative environment configuration * - v1.0.0 build
957 lines
27 KiB
SCSS
957 lines
27 KiB
SCSS
//
|
|
// Mixins
|
|
// --------------------------------------------------
|
|
|
|
|
|
// Utilities
|
|
// -------------------------
|
|
|
|
// Clearfix
|
|
// Source: http://nicolasgallagher.com/micro-clearfix-hack/
|
|
//
|
|
// For modern browsers
|
|
// 1. The space content is one way to avoid an Opera bug when the
|
|
// contenteditable attribute is included anywhere else in the document.
|
|
// Otherwise it causes space to appear at the top and bottom of elements
|
|
// that are clearfixed.
|
|
// 2. The use of `table` rather than `block` is only necessary if using
|
|
// :before to contain the top-margins of child elements.
|
|
@mixin clearfix() {
|
|
&:before,
|
|
&:after {
|
|
content: " "; // 1
|
|
display: table; // 2
|
|
}
|
|
&:after {
|
|
clear: both;
|
|
}
|
|
}
|
|
|
|
// WebKit-style focus
|
|
@mixin tab-focus() {
|
|
// Default
|
|
outline: thin dotted;
|
|
// WebKit
|
|
outline: 5px auto -webkit-focus-ring-color;
|
|
outline-offset: -2px;
|
|
outline-color: $teal-lighter;
|
|
}
|
|
|
|
// Center-align a block level element
|
|
@mixin center-block() {
|
|
display: block;
|
|
margin-left: auto;
|
|
margin-right: auto;
|
|
}
|
|
|
|
// Sizing shortcuts
|
|
@mixin size($width, $height) {
|
|
width: $width;
|
|
height: $height;
|
|
}
|
|
@mixin square($size) {
|
|
@include size($size, $size);
|
|
}
|
|
|
|
// Placeholder text
|
|
@mixin placeholder($color: $input-color-placeholder) {
|
|
&::-moz-placeholder { color: $color; // Firefox
|
|
opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526
|
|
&:-ms-input-placeholder { color: $color; } // Internet Explorer 10+
|
|
&::-webkit-input-placeholder { color: $color; } // Safari and Chrome
|
|
}
|
|
|
|
// Text overflow
|
|
// Requires inline-block or block for proper styling
|
|
@mixin text-overflow() {
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
// CSS image replacement
|
|
//
|
|
// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for
|
|
// mixins being reused as classes with the same name, this doesn't hold up. As
|
|
// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`. Note
|
|
// that we cannot chain the mixins together in Less, so they are repeated.
|
|
//
|
|
// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757
|
|
|
|
// Deprecated as of v3.0.1 (will be removed in v4)
|
|
@mixin hide-text() {
|
|
font: #{0/0} a;
|
|
color: transparent;
|
|
text-shadow: none;
|
|
background-color: transparent;
|
|
border: 0;
|
|
}
|
|
// New mixin to use as of v3.0.1
|
|
@mixin text-hide() {
|
|
@include hide-text();
|
|
}
|
|
|
|
|
|
|
|
// CSS3 PROPERTIES
|
|
// --------------------------------------------------
|
|
|
|
// Single side border-radius
|
|
@mixin border-top-radius($radius) {
|
|
border-top-right-radius: $radius;
|
|
border-top-left-radius: $radius;
|
|
}
|
|
@mixin border-right-radius($radius) {
|
|
border-bottom-right-radius: $radius;
|
|
border-top-right-radius: $radius;
|
|
}
|
|
@mixin border-bottom-radius($radius) {
|
|
border-bottom-right-radius: $radius;
|
|
border-bottom-left-radius: $radius;
|
|
}
|
|
@mixin border-left-radius($radius) {
|
|
border-bottom-left-radius: $radius;
|
|
border-top-left-radius: $radius;
|
|
}
|
|
|
|
// Drop shadows
|
|
//
|
|
// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's
|
|
// supported browsers that have box shadow capabilities now support the
|
|
// standard `box-shadow` property.
|
|
@mixin box-shadow($shadow...) {
|
|
-webkit-box-shadow: $shadow; // iOS <4.3 & Android <4.1
|
|
box-shadow: $shadow;
|
|
}
|
|
|
|
// Transitions
|
|
@mixin transition($transition...) {
|
|
-webkit-transition: $transition;
|
|
transition: $transition;
|
|
}
|
|
@mixin transition-property($transition-property...) {
|
|
-webkit-transition-property: $transition-property;
|
|
transition-property: $transition-property;
|
|
}
|
|
@mixin transition-delay($transition-delay) {
|
|
-webkit-transition-delay: $transition-delay;
|
|
transition-delay: $transition-delay;
|
|
}
|
|
@mixin transition-duration($transition-duration...) {
|
|
-webkit-transition-duration: $transition-duration;
|
|
transition-duration: $transition-duration;
|
|
}
|
|
@mixin transition-transform($transition...) {
|
|
-webkit-transition: -webkit-transform $transition;
|
|
-moz-transition: -moz-transform $transition;
|
|
-o-transition: -o-transform $transition;
|
|
transition: transform $transition;
|
|
}
|
|
|
|
// Transformations
|
|
@mixin rotate($degrees) {
|
|
-webkit-transform: rotate($degrees);
|
|
-ms-transform: rotate($degrees); // IE9 only
|
|
transform: rotate($degrees);
|
|
}
|
|
@mixin scale($scale-args...) {
|
|
-webkit-transform: scale($scale-args);
|
|
-ms-transform: scale($scale-args); // IE9 only
|
|
transform: scale($scale-args);
|
|
}
|
|
@mixin translate($x, $y) {
|
|
-webkit-transform: translate($x, $y);
|
|
-ms-transform: translate($x, $y); // IE9 only
|
|
transform: translate($x, $y);
|
|
}
|
|
@mixin skew($x, $y) {
|
|
-webkit-transform: skew($x, $y);
|
|
-ms-transform: skewX($x) skewY($y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+
|
|
transform: skew($x, $y);
|
|
}
|
|
@mixin translate3d($x, $y, $z) {
|
|
-webkit-transform: translate3d($x, $y, $z);
|
|
transform: translate3d($x, $y, $z);
|
|
}
|
|
|
|
@mixin rotateX($degrees) {
|
|
-webkit-transform: rotateX($degrees);
|
|
-ms-transform: rotateX($degrees); // IE9 only
|
|
transform: rotateX($degrees);
|
|
}
|
|
@mixin rotateY($degrees) {
|
|
-webkit-transform: rotateY($degrees);
|
|
-ms-transform: rotateY($degrees); // IE9 only
|
|
transform: rotateY($degrees);
|
|
}
|
|
@mixin perspective($perspective) {
|
|
-webkit-perspective: $perspective;
|
|
-moz-perspective: $perspective;
|
|
perspective: $perspective;
|
|
}
|
|
@mixin perspective-origin($perspective) {
|
|
-webkit-perspective-origin: $perspective;
|
|
-moz-perspective-origin: $perspective;
|
|
perspective-origin: $perspective;
|
|
}
|
|
@mixin transform-origin($origin) {
|
|
-webkit-transform-origin: $origin;
|
|
-moz-transform-origin: $origin;
|
|
-ms-transform-origin: $origin; // IE9 only
|
|
transform-origin: $origin;
|
|
}
|
|
|
|
// Animations
|
|
@mixin animation($animation) {
|
|
-webkit-animation: $animation;
|
|
animation: $animation;
|
|
}
|
|
@mixin animation-name($name) {
|
|
-webkit-animation-name: $name;
|
|
animation-name: $name;
|
|
}
|
|
@mixin animation-duration($duration) {
|
|
-webkit-animation-duration: $duration;
|
|
animation-duration: $duration;
|
|
}
|
|
@mixin animation-timing-function($timing-function) {
|
|
-webkit-animation-timing-function: $timing-function;
|
|
animation-timing-function: $timing-function;
|
|
}
|
|
@mixin animation-delay($delay) {
|
|
-webkit-animation-delay: $delay;
|
|
animation-delay: $delay;
|
|
}
|
|
@mixin animation-iteration-count($iteration-count) {
|
|
-webkit-animation-iteration-count: $iteration-count;
|
|
animation-iteration-count: $iteration-count;
|
|
}
|
|
@mixin animation-direction($direction) {
|
|
-webkit-animation-direction: $direction;
|
|
animation-direction: $direction;
|
|
}
|
|
|
|
// Backface visibility
|
|
// Prevent browsers from flickering when using CSS 3D transforms.
|
|
// Default value is `visible`, but can be changed to `hidden`
|
|
@mixin backface-visibility($visibility){
|
|
-webkit-backface-visibility: $visibility;
|
|
-moz-backface-visibility: $visibility;
|
|
backface-visibility: $visibility;
|
|
}
|
|
|
|
// Box sizing
|
|
@mixin box-sizing($boxmodel) {
|
|
-webkit-box-sizing: $boxmodel;
|
|
-moz-box-sizing: $boxmodel;
|
|
box-sizing: $boxmodel;
|
|
}
|
|
|
|
// User select
|
|
// For selecting text on the page
|
|
@mixin user-select($select) {
|
|
-webkit-user-select: $select;
|
|
-moz-user-select: $select;
|
|
-ms-user-select: $select; // IE10+
|
|
user-select: $select;
|
|
}
|
|
|
|
// Resize anything
|
|
@mixin resizable($direction) {
|
|
resize: $direction; // Options: horizontal, vertical, both
|
|
overflow: auto; // Safari fix
|
|
}
|
|
|
|
// CSS3 Content Columns
|
|
@mixin content-columns($column-count, $column-gap: $grid-gutter-width) {
|
|
-webkit-column-count: $column-count;
|
|
-moz-column-count: $column-count;
|
|
column-count: $column-count;
|
|
-webkit-column-gap: $column-gap;
|
|
-moz-column-gap: $column-gap;
|
|
column-gap: $column-gap;
|
|
}
|
|
|
|
// Optional hyphenation
|
|
@mixin hyphens($mode: auto) {
|
|
word-wrap: break-word;
|
|
-webkit-hyphens: $mode;
|
|
-moz-hyphens: $mode;
|
|
-ms-hyphens: $mode; // IE10+
|
|
-o-hyphens: $mode;
|
|
hyphens: $mode;
|
|
}
|
|
|
|
// Opacity
|
|
@mixin opacity($opacity) {
|
|
opacity: $opacity;
|
|
// IE8 filter
|
|
$opacity-ie: ($opacity * 100);
|
|
filter: #{alpha(opacity=$opacity-ie)};
|
|
}
|
|
|
|
|
|
|
|
// GRADIENTS
|
|
// --------------------------------------------------
|
|
|
|
|
|
|
|
// Horizontal gradient, from left to right
|
|
//
|
|
// Creates two color stops, start and end, by specifying a color and position for each color stop.
|
|
// Color stops are not available in IE9 and below.
|
|
@mixin gradient-horizontal($start-color: #555, $end-color: #333, $start-percent: 0%, $end-percent: 100%) {
|
|
background-image: -webkit-linear-gradient(left, color-stop($start-color $start-percent), color-stop($end-color $end-percent)); // Safari 5.1-6, Chrome 10+
|
|
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
|
|
}
|
|
|
|
// Vertical gradient, from top to bottom
|
|
//
|
|
// Creates two color stops, start and end, by specifying a color and position for each color stop.
|
|
// Color stops are not available in IE9 and below.
|
|
@mixin gradient-vertical($start-color: #555, $end-color: #333, $start-percent: 0%, $end-percent: 100%) {
|
|
background-image: -webkit-linear-gradient(top, $start-color $start-percent, $end-color $end-percent); // Safari 5.1-6, Chrome 10+
|
|
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
|
|
}
|
|
|
|
@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: linear-gradient($deg, $start-color, $end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+
|
|
}
|
|
@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: 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
|
|
}
|
|
@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: 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
|
|
}
|
|
@mixin gradient-radial($inner-color: #555, $outer-color: #333) {
|
|
background-image: -webkit-radial-gradient(circle, $inner-color, $outer-color);
|
|
background-image: radial-gradient(circle, $inner-color, $outer-color);
|
|
background-repeat: no-repeat;
|
|
}
|
|
@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: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);
|
|
}
|
|
|
|
// Reset filters for IE
|
|
//
|
|
// When you need to remove a gradient background, do not forget to use this to reset
|
|
// the IE filter for IE9 and below.
|
|
@mixin reset-filter() {
|
|
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
|
}
|
|
|
|
|
|
|
|
// Retina images
|
|
//
|
|
// Short retina mixin for setting background-image and -size
|
|
|
|
@mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) {
|
|
background-image: url(if($bootstrap-sass-asset-helper, twbs-image-path("#{$file-1x}"), "#{$file-1x}"));
|
|
|
|
@media
|
|
only screen and (-webkit-min-device-pixel-ratio: 2),
|
|
only screen and ( min--moz-device-pixel-ratio: 2),
|
|
only screen and ( -o-min-device-pixel-ratio: 2/1),
|
|
only screen and ( min-device-pixel-ratio: 2),
|
|
only screen and ( min-resolution: 192dpi),
|
|
only screen and ( min-resolution: 2dppx) {
|
|
background-image: url(if($bootstrap-sass-asset-helper, twbs-image-path("#{$file-2x}"), "#{$file-2x}"));
|
|
background-size: $width-1x $height-1x;
|
|
}
|
|
}
|
|
|
|
|
|
// Responsive image
|
|
//
|
|
// Keep images from scaling beyond the width of their parents.
|
|
|
|
@mixin img-responsive($display: block) {
|
|
display: $display;
|
|
max-width: 100%; // Part 1: Set a maximum relative to the parent
|
|
height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching
|
|
}
|
|
|
|
|
|
// COMPONENT MIXINS
|
|
// --------------------------------------------------
|
|
|
|
// Horizontal dividers
|
|
// -------------------------
|
|
// Dividers (basically an hr) within dropdowns and nav lists
|
|
@mixin nav-divider($color: #e5e5e5) {
|
|
height: 1px;
|
|
margin: (($line-height-computed / 3) - 1) 0;
|
|
overflow: hidden;
|
|
background-color: $color;
|
|
}
|
|
|
|
// Panels
|
|
// -------------------------
|
|
@mixin panel-variant($border, $heading-text-color, $heading-bg-color, $heading-border) {
|
|
border-color: $border;
|
|
|
|
& > .panel-heading {
|
|
color: $heading-text-color;
|
|
background-color: $heading-bg-color;
|
|
border-color: $heading-border;
|
|
|
|
+ .panel-collapse .panel-body {
|
|
border-top-color: $border;
|
|
}
|
|
}
|
|
& > .panel-footer {
|
|
+ .panel-collapse .panel-body {
|
|
border-bottom-color: $border;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Alerts
|
|
// -------------------------
|
|
@mixin alert-variant($background, $border, $text-color) {
|
|
background-color: $background;
|
|
border-color: $border;
|
|
color: $text-color;
|
|
|
|
hr {
|
|
border-top-color: darken($border, 5%);
|
|
}
|
|
.alert-link {
|
|
color: darken($text-color, 10%);
|
|
}
|
|
}
|
|
|
|
// Tables
|
|
// -------------------------
|
|
@mixin table-row-variant($state, $background) {
|
|
// Exact selectors below required to override `.table-striped` and prevent
|
|
// inheritance to nested tables.
|
|
.table > thead > tr,
|
|
.table > tbody > tr,
|
|
.table > tfoot > tr {
|
|
> td.#{$state},
|
|
> th.#{$state},
|
|
&.#{$state} > td,
|
|
&.#{$state} > th {
|
|
background-color: $background;
|
|
}
|
|
}
|
|
|
|
// Hover states for `.table-hover`
|
|
// Note: this is not available for cells or rows within `thead` or `tfoot`.
|
|
.table-hover > tbody > tr {
|
|
> td.#{$state}:hover,
|
|
> th.#{$state}:hover,
|
|
&.#{$state}:hover > td,
|
|
&.#{$state}:hover > th {
|
|
background-color: darken($background, 5%);
|
|
}
|
|
}
|
|
}
|
|
|
|
// List Groups
|
|
// -------------------------
|
|
@mixin list-group-item-variant($state, $background, $color) {
|
|
.list-group-item-#{$state} {
|
|
color: $color;
|
|
background-color: $background;
|
|
|
|
// [converter] extracted a& to a.list-group-item-#{$state}
|
|
}
|
|
|
|
a.list-group-item-#{$state} {
|
|
color: $color;
|
|
|
|
.list-group-item-heading { color: inherit; }
|
|
|
|
&:hover,
|
|
&:focus {
|
|
color: $color;
|
|
background-color: darken($background, 5%);
|
|
}
|
|
&.active,
|
|
&.active:hover,
|
|
&.active:focus {
|
|
color: #fff;
|
|
background-color: $color;
|
|
border-color: $color;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Button variants
|
|
// -------------------------
|
|
// Easily pump out default styles, as well as :hover, :focus, :active,
|
|
// and disabled options for all buttons
|
|
@mixin button-variant($color, $background, $border) {
|
|
color: $color;
|
|
background-color: $background;
|
|
border-color: $border;
|
|
|
|
&:hover,
|
|
&:focus,
|
|
&:active,
|
|
&.active {
|
|
color: $color;
|
|
background-color: lighten($background, 8%);
|
|
border-color: lighten($border, 12%);
|
|
}
|
|
.open & { &.dropdown-toggle {
|
|
color: $color;
|
|
background-color: lighten($background, 8%);
|
|
border-color: lighten($border, 12%);
|
|
} }
|
|
&:active,
|
|
&.active {
|
|
background-image: none;
|
|
}
|
|
.open & { &.dropdown-toggle {
|
|
background-image: none;
|
|
} }
|
|
&.disabled,
|
|
&[disabled],
|
|
fieldset[disabled] & {
|
|
&,
|
|
&:hover,
|
|
&:focus,
|
|
&:active,
|
|
&.active {
|
|
background-color: $background;
|
|
border-color: $border;
|
|
}
|
|
}
|
|
|
|
.badge {
|
|
color: $background;
|
|
background-color: $color;
|
|
}
|
|
}
|
|
|
|
// Button sizes
|
|
// -------------------------
|
|
@mixin button-size($padding-vertical, $padding-horizontal, $font-size, $line-height, $border-radius) {
|
|
padding: $padding-vertical $padding-horizontal;
|
|
font-size: $font-size;
|
|
line-height: $line-height;
|
|
border-radius: $border-radius;
|
|
}
|
|
|
|
// Pagination
|
|
// -------------------------
|
|
@mixin pagination-size($padding-vertical, $padding-horizontal, $font-size, $border-radius) {
|
|
> li {
|
|
> a,
|
|
> span {
|
|
padding: $padding-vertical $padding-horizontal;
|
|
font-size: $font-size;
|
|
}
|
|
&:first-child {
|
|
> a,
|
|
> span {
|
|
@include border-left-radius($border-radius);
|
|
}
|
|
}
|
|
&:last-child {
|
|
> a,
|
|
> span {
|
|
@include border-right-radius($border-radius);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Labels
|
|
// -------------------------
|
|
@mixin label-variant($color) {
|
|
background-color: $color;
|
|
&[href] {
|
|
&:hover,
|
|
&:focus {
|
|
background-color: darken($color, 10%);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Contextual backgrounds
|
|
// -------------------------
|
|
// [converter] $parent hack
|
|
@mixin bg-variant($parent, $color) {
|
|
#{$parent} {
|
|
background-color: $color;
|
|
}
|
|
a#{$parent}:hover {
|
|
background-color: darken($color, 10%);
|
|
}
|
|
}
|
|
|
|
// Typography
|
|
// -------------------------
|
|
// [converter] $parent hack
|
|
@mixin text-emphasis-variant($parent, $color) {
|
|
#{$parent} {
|
|
color: $color;
|
|
}
|
|
a#{$parent}:hover {
|
|
color: darken($color, 10%);
|
|
}
|
|
}
|
|
|
|
// Navbar vertical align
|
|
// -------------------------
|
|
// Vertically center elements in the navbar.
|
|
// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.
|
|
@mixin navbar-vertical-align($element-height) {
|
|
margin-top: (($navbar-height - $element-height) / 2);
|
|
margin-bottom: (($navbar-height - $element-height) / 2);
|
|
}
|
|
|
|
// Progress bars
|
|
// -------------------------
|
|
@mixin progress-bar-variant($color) {
|
|
background-color: $color;
|
|
.progress-striped & {
|
|
@include gradient-striped();
|
|
}
|
|
}
|
|
|
|
// Responsive utilities
|
|
// -------------------------
|
|
// More easily include all the states for responsive-utilities.less.
|
|
// [converter] $parent hack
|
|
@mixin responsive-visibility($parent) {
|
|
#{$parent} {
|
|
display: block !important;
|
|
}
|
|
table#{$parent} { display: table; }
|
|
tr#{$parent} { display: table-row !important; }
|
|
th#{$parent},
|
|
td#{$parent} { display: table-cell !important; }
|
|
}
|
|
|
|
// [converter] $parent hack
|
|
@mixin responsive-invisibility($parent) {
|
|
#{$parent} {
|
|
display: none !important;
|
|
}
|
|
}
|
|
|
|
|
|
// Grid System
|
|
// -----------
|
|
|
|
// Centered container element
|
|
@mixin container-fixed() {
|
|
margin-right: auto;
|
|
margin-left: auto;
|
|
padding-left: ($grid-gutter-width / 2);
|
|
padding-right: ($grid-gutter-width / 2);
|
|
@include clearfix();
|
|
}
|
|
|
|
// Creates a wrapper for a series of columns
|
|
@mixin make-row($gutter: $grid-gutter-width) {
|
|
margin-left: ($gutter / -2);
|
|
margin-right: ($gutter / -2);
|
|
@include clearfix();
|
|
}
|
|
|
|
// Generate the extra small columns
|
|
@mixin make-xs-column($columns, $gutter: $grid-gutter-width) {
|
|
position: relative;
|
|
float: left;
|
|
width: percentage(($columns / $grid-columns));
|
|
min-height: 1px;
|
|
padding-left: ($gutter / 2);
|
|
padding-right: ($gutter / 2);
|
|
}
|
|
@mixin make-xs-column-offset($columns) {
|
|
@media (min-width: $screen-xs-min) {
|
|
margin-left: percentage(($columns / $grid-columns));
|
|
}
|
|
}
|
|
@mixin make-xs-column-push($columns) {
|
|
@media (min-width: $screen-xs-min) {
|
|
left: percentage(($columns / $grid-columns));
|
|
}
|
|
}
|
|
@mixin make-xs-column-pull($columns) {
|
|
@media (min-width: $screen-xs-min) {
|
|
right: percentage(($columns / $grid-columns));
|
|
}
|
|
}
|
|
|
|
|
|
// Generate the small columns
|
|
@mixin make-sm-column($columns, $gutter: $grid-gutter-width) {
|
|
position: relative;
|
|
min-height: 1px;
|
|
padding-left: ($gutter / 2);
|
|
padding-right: ($gutter / 2);
|
|
|
|
@media (min-width: $screen-sm-min) {
|
|
float: left;
|
|
width: percentage(($columns / $grid-columns));
|
|
}
|
|
}
|
|
@mixin make-sm-column-offset($columns) {
|
|
@media (min-width: $screen-sm-min) {
|
|
margin-left: percentage(($columns / $grid-columns));
|
|
}
|
|
}
|
|
@mixin make-sm-column-push($columns) {
|
|
@media (min-width: $screen-sm-min) {
|
|
left: percentage(($columns / $grid-columns));
|
|
}
|
|
}
|
|
@mixin make-sm-column-pull($columns) {
|
|
@media (min-width: $screen-sm-min) {
|
|
right: percentage(($columns / $grid-columns));
|
|
}
|
|
}
|
|
|
|
|
|
// Generate the medium columns
|
|
@mixin make-md-column($columns, $gutter: $grid-gutter-width) {
|
|
position: relative;
|
|
min-height: 1px;
|
|
padding-left: ($gutter / 2);
|
|
padding-right: ($gutter / 2);
|
|
|
|
@media (min-width: $screen-md-min) {
|
|
float: left;
|
|
width: percentage(($columns / $grid-columns));
|
|
}
|
|
}
|
|
@mixin make-md-column-offset($columns) {
|
|
@media (min-width: $screen-md-min) {
|
|
margin-left: percentage(($columns / $grid-columns));
|
|
}
|
|
}
|
|
@mixin make-md-column-push($columns) {
|
|
@media (min-width: $screen-md-min) {
|
|
left: percentage(($columns / $grid-columns));
|
|
}
|
|
}
|
|
@mixin make-md-column-pull($columns) {
|
|
@media (min-width: $screen-md-min) {
|
|
right: percentage(($columns / $grid-columns));
|
|
}
|
|
}
|
|
|
|
|
|
// Generate the large columns
|
|
@mixin make-lg-column($columns, $gutter: $grid-gutter-width) {
|
|
position: relative;
|
|
min-height: 1px;
|
|
padding-left: ($gutter / 2);
|
|
padding-right: ($gutter / 2);
|
|
|
|
@media (min-width: $screen-lg-min) {
|
|
float: left;
|
|
width: percentage(($columns / $grid-columns));
|
|
}
|
|
}
|
|
@mixin make-lg-column-offset($columns) {
|
|
@media (min-width: $screen-lg-min) {
|
|
margin-left: percentage(($columns / $grid-columns));
|
|
}
|
|
}
|
|
@mixin make-lg-column-push($columns) {
|
|
@media (min-width: $screen-lg-min) {
|
|
left: percentage(($columns / $grid-columns));
|
|
}
|
|
}
|
|
@mixin make-lg-column-pull($columns) {
|
|
@media (min-width: $screen-lg-min) {
|
|
right: percentage(($columns / $grid-columns));
|
|
}
|
|
}
|
|
|
|
|
|
// Framework grid generation
|
|
//
|
|
// Used only by Bootstrap to generate the correct number of grid classes given
|
|
// any value of `$grid-columns`.
|
|
|
|
// [converter] This is defined recursively in LESS, but Sass supports real loops
|
|
@mixin make-grid-columns() {
|
|
$list: '';
|
|
$i: 1;
|
|
$list: ".col-xs-#{$i}, .col-sm-#{$i}, .col-md-#{$i}, .col-lg-#{$i}";
|
|
@for $i from (1 + 1) through $grid-columns {
|
|
$list: "#{$list}, .col-xs-#{$i}, .col-sm-#{$i}, .col-md-#{$i}, .col-lg-#{$i}";
|
|
}
|
|
#{$list} {
|
|
position: relative;
|
|
// Prevent columns from collapsing when empty
|
|
min-height: 1px;
|
|
// Inner gutter via padding
|
|
padding-left: ($grid-gutter-width / 2);
|
|
padding-right: ($grid-gutter-width / 2);
|
|
}
|
|
}
|
|
|
|
|
|
// [converter] This is defined recursively in LESS, but Sass supports real loops
|
|
@mixin float-grid-columns($class) {
|
|
$list: '';
|
|
$i: 1;
|
|
$list: ".col-#{$class}-#{$i}";
|
|
@for $i from (1 + 1) through $grid-columns {
|
|
$list: "#{$list}, .col-#{$class}-#{$i}";
|
|
}
|
|
#{$list} {
|
|
float: left;
|
|
}
|
|
}
|
|
|
|
|
|
@mixin calc-grid-column($index, $class, $type) {
|
|
@if ($type == width) and ($index > 0) {
|
|
.col-#{$class}-#{$index} {
|
|
width: percentage(($index / $grid-columns));
|
|
}
|
|
}
|
|
@if ($type == push) {
|
|
.col-#{$class}-push-#{$index} {
|
|
left: percentage(($index / $grid-columns));
|
|
}
|
|
}
|
|
@if ($type == pull) {
|
|
.col-#{$class}-pull-#{$index} {
|
|
right: percentage(($index / $grid-columns));
|
|
}
|
|
}
|
|
@if ($type == offset) {
|
|
.col-#{$class}-offset-#{$index} {
|
|
margin-left: percentage(($index / $grid-columns));
|
|
}
|
|
}
|
|
}
|
|
|
|
// [converter] This is defined recursively in LESS, but Sass supports real loops
|
|
@mixin loop-grid-columns($columns, $class, $type) {
|
|
@for $i from 0 through $columns {
|
|
@include calc-grid-column($i, $class, $type);
|
|
}
|
|
}
|
|
|
|
|
|
// Create grid for specific class
|
|
@mixin make-grid($class) {
|
|
@include float-grid-columns($class);
|
|
@include loop-grid-columns($grid-columns, $class, width);
|
|
@include loop-grid-columns($grid-columns, $class, pull);
|
|
@include loop-grid-columns($grid-columns, $class, push);
|
|
@include loop-grid-columns($grid-columns, $class, offset);
|
|
}
|
|
|
|
// Form validation states
|
|
//
|
|
// Used in forms.less to generate the form validation CSS for warnings, errors,
|
|
// and successes.
|
|
|
|
@mixin form-control-validation($text-color: #555, $border-color: #ccc, $background-color: #f5f5f5) {
|
|
// Color the label and help text
|
|
.help-block,
|
|
.control-label,
|
|
.radio,
|
|
.checkbox,
|
|
.radio-inline,
|
|
.checkbox-inline {
|
|
color: $text-color;
|
|
}
|
|
// Set the border and box shadow on specific inputs to match
|
|
.form-control {
|
|
border-color: $border-color;
|
|
@include box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work
|
|
&:focus {
|
|
// border-color: darken($border-color, 5%);
|
|
$shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten($border-color, 20%);
|
|
@include box-shadow($shadow);
|
|
}
|
|
}
|
|
|
|
// select2 style
|
|
.select2-selection{
|
|
border: 1px solid !important;
|
|
border-color: $border-color !important;
|
|
@include box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work
|
|
}
|
|
|
|
// Set validation states also for addons
|
|
.input-group-addon {
|
|
color: $text-color;
|
|
border-color: $border-color;
|
|
background-color: $background-color;
|
|
}
|
|
// Optional feedback icon
|
|
.form-control-feedback {
|
|
color: $text-color;
|
|
}
|
|
}
|
|
|
|
// Form control focus state
|
|
//
|
|
// Generate a customized focus state and for any input with the specified color,
|
|
// which defaults to the `$input-focus-border` variable.
|
|
//
|
|
// We highly encourage you to not customize the default value, but instead use
|
|
// this to tweak colors on an as-needed basis. This aesthetic change is based on
|
|
// WebKit's default styles, but applicable to a wider range of browsers. Its
|
|
// usability and accessibility should be taken into account with any change.
|
|
//
|
|
// Example usage: change the default blue border and shadow to white for better
|
|
// contrast against a dark gray background.
|
|
|
|
@mixin form-control-focus($color: $input-border-focus) {
|
|
$color-rgba: rgba(red($color), green($color), blue($color), .6);
|
|
&:focus {
|
|
border-color: $color;
|
|
outline: 0;
|
|
@include box-shadow(inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px $color-rgba);
|
|
}
|
|
}
|
|
|
|
// Form control sizing
|
|
//
|
|
// Relative text size, padding, and border-radii changes for form controls. For
|
|
// horizontal sizing, wrap controls in the predefined grid classes. `<select>`
|
|
// element gets special love because it's special, and that's a fact!
|
|
|
|
// [converter] $parent hack
|
|
@mixin input-size($parent, $input-height, $padding-vertical, $padding-horizontal, $font-size, $line-height, $border-radius) {
|
|
#{$parent} {
|
|
height: $input-height;
|
|
padding: $padding-vertical $padding-horizontal;
|
|
font-size: $font-size;
|
|
line-height: $line-height;
|
|
border-radius: $border-radius;
|
|
}
|
|
|
|
select#{$parent} {
|
|
height: $input-height;
|
|
line-height: $input-height;
|
|
}
|
|
|
|
textarea#{$parent},
|
|
select[multiple]#{$parent} {
|
|
height: auto;
|
|
}
|
|
}
|