mirror of
https://github.com/jasny/bootstrap.git
synced 2026-04-24 03:00:49 -04:00
Compare commits
42 Commits
dropdown-s
...
v3.1.3
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f4705f17fc | ||
|
|
c12018a0bd | ||
|
|
1dfd002bba | ||
|
|
04e4586372 | ||
|
|
c6541bfe45 | ||
|
|
73f80614b6 | ||
|
|
1e90ae4779 | ||
|
|
a088dad1c7 | ||
|
|
2712c97e85 | ||
|
|
d7c2eb8c91 | ||
|
|
3c3274093a | ||
|
|
662c5e2b3a | ||
|
|
e86f72dd03 | ||
|
|
46c665f161 | ||
|
|
9fd67af87c | ||
|
|
10b81be776 | ||
|
|
e822b1b3bf | ||
|
|
285689081d | ||
|
|
1001ad214d | ||
|
|
249cb84f6b | ||
|
|
660e376b96 | ||
|
|
e919330916 | ||
|
|
24f8bffbaf | ||
|
|
e5b9930599 | ||
|
|
8fd9aca993 | ||
|
|
0038dd8c9f | ||
|
|
27794ba4e3 | ||
|
|
9e28a9b2bc | ||
|
|
18116c5cd3 | ||
|
|
2336197e3a | ||
|
|
ee5a80a6c3 | ||
|
|
4dc46204b4 | ||
|
|
d5d4c5bd62 | ||
|
|
626d773366 | ||
|
|
a8a87b1958 | ||
|
|
3769a8a8fc | ||
|
|
1640650604 | ||
|
|
4c53740597 | ||
|
|
ca1145ca0b | ||
|
|
d87bea51c2 | ||
|
|
e9a6df2cbd | ||
|
|
90b09cb3f8 |
27
Gruntfile.js
27
Gruntfile.js
@@ -1,8 +1,8 @@
|
||||
/*!
|
||||
* Bootstrap's Gruntfile
|
||||
* http://getbootstrap.com
|
||||
* Copyright 2013-2014 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* Jasny Bootstrap's Gruntfile
|
||||
* http://jasny.github.io/bootstrap
|
||||
* Copyright 2013-2014 Arnold Daniels.
|
||||
* Licensed under Apache License 2.0 (https://github.com/jasny/bootstrap/blob/master/LICENSE)
|
||||
*/
|
||||
|
||||
module.exports = function (grunt) {
|
||||
@@ -98,6 +98,7 @@ module.exports = function (grunt) {
|
||||
},
|
||||
bootstrap: {
|
||||
src: [
|
||||
'js/transition.js',
|
||||
'js/offcanvas.js',
|
||||
'js/rowlink.js',
|
||||
'js/inputmask.js',
|
||||
@@ -298,14 +299,14 @@ module.exports = function (grunt) {
|
||||
}
|
||||
},
|
||||
|
||||
sed: {
|
||||
replace: {
|
||||
versionNumber: {
|
||||
pattern: (function () {
|
||||
var old = grunt.option('oldver');
|
||||
return old ? RegExp.quote(old) : old;
|
||||
})(),
|
||||
replacement: grunt.option('newver'),
|
||||
recursive: true
|
||||
src: ['*.js', '*.md', '*.json', '*.yml', 'js/*.js'],
|
||||
overwrite: true,
|
||||
replacements: [{
|
||||
from: grunt.option('oldver'),
|
||||
to: grunt.option('newver')
|
||||
}]
|
||||
}
|
||||
},
|
||||
|
||||
@@ -377,7 +378,7 @@ module.exports = function (grunt) {
|
||||
// Version numbering task.
|
||||
// grunt change-version-number --oldver=A.B.C --newver=X.Y.Z
|
||||
// This can be overzealous, so its changes should always be manually reviewed!
|
||||
grunt.registerTask('change-version-number', 'sed');
|
||||
grunt.registerTask('change-version-number', 'replace');
|
||||
|
||||
// task for building customizer
|
||||
grunt.registerTask('build-customizer', ['build-customizer-html', 'build-raw-files']);
|
||||
@@ -388,6 +389,6 @@ module.exports = function (grunt) {
|
||||
});
|
||||
|
||||
// Task for updating the npm packages used by the Travis build.
|
||||
grunt.registerTask('update-shrinkwrap', ['exec:npmUpdate', 'exec:npmShrinkWrap', '_update-shrinkwrap']);
|
||||
grunt.registerTask('update-shrinkwrap', ['exec:npmUpdate', 'exec:npmShrinkWrap', '∆update-shrinkwrap']);
|
||||
grunt.registerTask('∆update-shrinkwrap', function () { updateShrinkwrap.call(this, grunt); });
|
||||
};
|
||||
|
||||
10
_config.yml
10
_config.yml
@@ -19,13 +19,13 @@ exclude:
|
||||
- "vendor"
|
||||
|
||||
# Custom vars
|
||||
current_version: 3.1.0
|
||||
current_version: 3.1.3
|
||||
repo: https://github.com/jasny/bootstrap
|
||||
|
||||
download:
|
||||
source: https://github.com/jasny/bootstrap/archive/v3.1.0.zip
|
||||
dist: https://github.com/jasny/bootstrap/releases/download/v3.1.0/jasny-bootstrap-3.1.0-dist.zip
|
||||
source: https://github.com/jasny/bootstrap/archive/v3.1.3.zip
|
||||
dist: https://github.com/jasny/bootstrap/releases/download/v3.1.3/jasny-bootstrap-3.1.3-dist.zip
|
||||
|
||||
cdn:
|
||||
css: //cdnjs.cloudflare.com/ajax/libs/jasny-bootstrap/3.1.0/css/jasny-bootstrap.min.css
|
||||
js: //cdnjs.cloudflare.com/ajax/libs/jasny-bootstrap/3.1.0/js/jasny-bootstrap.min.js
|
||||
css: //cdnjs.cloudflare.com/ajax/libs/jasny-bootstrap/3.1.3/css/jasny-bootstrap.min.css
|
||||
js: //cdnjs.cloudflare.com/ajax/libs/jasny-bootstrap/3.1.3/js/jasny-bootstrap.min.js
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "jasny-bootstrap",
|
||||
"version": "3.1.0",
|
||||
"version": "3.1.3",
|
||||
"main": [
|
||||
"./dist/css/jasny-bootstrap.css",
|
||||
"./dist/js/jasny-bootstrap.js"
|
||||
@@ -16,6 +16,6 @@
|
||||
],
|
||||
"dependencies": {
|
||||
"jquery": ">= 1.9.0",
|
||||
"bootstrap": ">= 3.0.0"
|
||||
"bootstrap": ">= 3.1.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,6 @@
|
||||
}
|
||||
, "license": "Apache-2.0"
|
||||
, "require": {
|
||||
"twitter/bootstrap" : ">=3.0.0"
|
||||
"twitter/bootstrap" : ">=3.1.0"
|
||||
}
|
||||
}
|
||||
|
||||
53
dist/css/jasny-bootstrap.css
vendored
53
dist/css/jasny-bootstrap.css
vendored
@@ -1,5 +1,5 @@
|
||||
/*!
|
||||
* Jasny Bootstrap v3.1.1 (http://jasny.github.io/bootstrap)
|
||||
* Jasny Bootstrap v3.1.3 (http://jasny.github.io/bootstrap)
|
||||
* Copyright 2012-2014 Arnold Daniels
|
||||
* Licensed under Apache-2.0 (https://github.com/jasny/bootstrap/blob/master/LICENSE)
|
||||
*/
|
||||
@@ -60,43 +60,6 @@
|
||||
left: auto;
|
||||
border-radius: 0 2px 2px 0;
|
||||
}
|
||||
.dropdown-menu .dropdown {
|
||||
position: relative;
|
||||
}
|
||||
.dropdown-menu .dropdown > .dropdown-menu {
|
||||
top: 0;
|
||||
left: 100%;
|
||||
margin-top: -6px;
|
||||
margin-left: -1px;
|
||||
border-radius: 0 6px 6px 6px;
|
||||
|
||||
-webkit-border-radius: 0 6px 6px 6px;
|
||||
-moz-border-radius: 0 6px 6px;
|
||||
}
|
||||
.dropdown-menu .dropdown > a:after {
|
||||
display: block;
|
||||
float: right;
|
||||
width: 0;
|
||||
height: 0;
|
||||
margin-top: 5px;
|
||||
margin-right: -10px;
|
||||
content: " ";
|
||||
border-color: transparent;
|
||||
border-style: solid;
|
||||
border-width: 5px 0 5px 5px;
|
||||
border-left-color: #ccc;
|
||||
}
|
||||
.dropdown-menu .dropdown.pull-left {
|
||||
float: none;
|
||||
}
|
||||
.dropdown-menu .dropdown.pull-left > .dropdown-menu {
|
||||
left: -100%;
|
||||
margin-left: 10px;
|
||||
border-radius: 6px 0 6px 6px;
|
||||
|
||||
-webkit-border-radius: 6px 0 6px 6px;
|
||||
-moz-border-radius: 6px 0 6px 6px;
|
||||
}
|
||||
.nav-tabs-bottom {
|
||||
border-top: 1px solid #ddd;
|
||||
border-bottom: 0;
|
||||
@@ -177,7 +140,7 @@
|
||||
.navmenu,
|
||||
.navbar-offcanvas {
|
||||
width: 300px;
|
||||
height: 100%;
|
||||
height: auto;
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
border-radius: 4px;
|
||||
@@ -187,7 +150,9 @@
|
||||
.navbar-offcanvas {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
z-index: 1030;
|
||||
overflow-y: auto;
|
||||
border-radius: 0;
|
||||
}
|
||||
.navmenu-fixed-left,
|
||||
@@ -558,14 +523,13 @@
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
font-size: 23px;
|
||||
cursor: pointer;
|
||||
filter: alpha(opacity=0);
|
||||
opacity: 0;
|
||||
-webkit-transform: translate(-300px, 0) scale(4);
|
||||
transform: translate(-300px, 0) scale(4);
|
||||
|
||||
direction: ltr;
|
||||
}
|
||||
@@ -612,6 +576,13 @@
|
||||
.fileinput.input-group {
|
||||
display: table;
|
||||
}
|
||||
.fileinput.input-group > * {
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
}
|
||||
.fileinput.input-group > .btn-file {
|
||||
z-index: 1;
|
||||
}
|
||||
.fileinput-new.input-group .btn-file,
|
||||
.fileinput-new .input-group .btn-file {
|
||||
border-radius: 0 4px 4px 0;
|
||||
|
||||
2
dist/css/jasny-bootstrap.css.map
vendored
2
dist/css/jasny-bootstrap.css.map
vendored
File diff suppressed because one or more lines are too long
4
dist/css/jasny-bootstrap.min.css
vendored
4
dist/css/jasny-bootstrap.min.css
vendored
File diff suppressed because one or more lines are too long
125
dist/js/jasny-bootstrap.js
vendored
125
dist/js/jasny-bootstrap.js
vendored
@@ -1,5 +1,5 @@
|
||||
/*!
|
||||
* Jasny Bootstrap v3.1.1 (http://jasny.github.io/bootstrap)
|
||||
* Jasny Bootstrap v3.1.3 (http://jasny.github.io/bootstrap)
|
||||
* Copyright 2012-2014 Arnold Daniels
|
||||
* Licensed under Apache-2.0 (https://github.com/jasny/bootstrap/blob/master/LICENSE)
|
||||
*/
|
||||
@@ -7,7 +7,58 @@
|
||||
if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScript requires jQuery') }
|
||||
|
||||
/* ========================================================================
|
||||
* Bootstrap: offcanvas.js v3.1.1
|
||||
* Bootstrap: transition.js v3.1.3
|
||||
* http://getbootstrap.com/javascript/#transitions
|
||||
* ========================================================================
|
||||
* Copyright 2011-2014 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* ======================================================================== */
|
||||
|
||||
|
||||
+function ($) {
|
||||
'use strict';
|
||||
|
||||
// CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
|
||||
// ============================================================
|
||||
|
||||
function transitionEnd() {
|
||||
var el = document.createElement('bootstrap')
|
||||
|
||||
var transEndEventNames = {
|
||||
WebkitTransition : 'webkitTransitionEnd',
|
||||
MozTransition : 'transitionend',
|
||||
OTransition : 'oTransitionEnd otransitionend',
|
||||
transition : 'transitionend'
|
||||
}
|
||||
|
||||
for (var name in transEndEventNames) {
|
||||
if (el.style[name] !== undefined) {
|
||||
return { end: transEndEventNames[name] }
|
||||
}
|
||||
}
|
||||
|
||||
return false // explicit for ie8 ( ._.)
|
||||
}
|
||||
|
||||
if ($.support.transition !== undefined) return // Prevent conflict with Twitter Bootstrap
|
||||
|
||||
// http://blog.alexmaccaw.com/css-transitions
|
||||
$.fn.emulateTransitionEnd = function (duration) {
|
||||
var called = false, $el = this
|
||||
$(this).one($.support.transition.end, function () { called = true })
|
||||
var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
|
||||
setTimeout(callback, duration)
|
||||
return this
|
||||
}
|
||||
|
||||
$(function () {
|
||||
$.support.transition = transitionEnd()
|
||||
})
|
||||
|
||||
}(window.jQuery);
|
||||
|
||||
/* ========================================================================
|
||||
* Bootstrap: offcanvas.js v3.1.3
|
||||
* http://jasny.github.io/bootstrap/javascript/#offcanvas
|
||||
* ========================================================================
|
||||
* Copyright 2013-2014 Arnold Daniels
|
||||
@@ -45,6 +96,11 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
$(document).on('click', $.proxy(this.autohide, this))
|
||||
|
||||
if (this.options.toggle) this.toggle()
|
||||
|
||||
if (this.options.disablescrolling) {
|
||||
this.options.disableScrolling = this.options.disablescrolling
|
||||
delete this.options.disablescrolling
|
||||
}
|
||||
}
|
||||
|
||||
OffCanvas.DEFAULTS = {
|
||||
@@ -143,8 +199,10 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
var bodyWidth = $('body').width()
|
||||
var prop = 'padding-' + this.opposite(this.placement)
|
||||
|
||||
if ($('body').data('offcanvas-style') === undefined) $('body').data('offcanvas-style', $('body').attr('style'))
|
||||
|
||||
if ($('body').data('offcanvas-style') === undefined) {
|
||||
$('body').data('offcanvas-style', $('body').attr('style') || '')
|
||||
}
|
||||
|
||||
$('body').css('overflow', 'hidden')
|
||||
|
||||
if ($('body').width() > bodyWidth) {
|
||||
@@ -319,7 +377,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
}(window.jQuery);
|
||||
|
||||
/* ============================================================
|
||||
* Bootstrap: rowlink.js v3.1.0
|
||||
* Bootstrap: rowlink.js v3.1.3
|
||||
* http://jasny.github.io/bootstrap/javascript/#rowlink
|
||||
* ============================================================
|
||||
* Copyright 2012-2014 Arnold Daniels
|
||||
@@ -374,8 +432,8 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
$.fn.rowlink = function (options) {
|
||||
return this.each(function () {
|
||||
var $this = $(this)
|
||||
var data = $this.data('rowlink')
|
||||
if (!data) $this.data('rowlink', (data = new Rowlink(this, options)))
|
||||
var data = $this.data('bs.rowlink')
|
||||
if (!data) $this.data('bs.rowlink', (data = new Rowlink(this, options)))
|
||||
})
|
||||
}
|
||||
|
||||
@@ -395,8 +453,10 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
// ==================
|
||||
|
||||
$(document).on('click.bs.rowlink.data-api', '[data-link="row"]', function (e) {
|
||||
if ($(e.target).closest('.rowlink-skip').length !== 0) return
|
||||
|
||||
var $this = $(this)
|
||||
if ($this.data('rowlink')) return
|
||||
if ($this.data('bs.rowlink')) return
|
||||
$this.rowlink($this.data())
|
||||
$(e.target).trigger('click.bs.rowlink')
|
||||
})
|
||||
@@ -437,7 +497,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
if (isAndroid) return // No support because caret positioning doesn't work on Android
|
||||
|
||||
this.$element = $(element)
|
||||
this.options = $.extend({}, Inputmask.DEFAULS, options)
|
||||
this.options = $.extend({}, Inputmask.DEFAULTS, options)
|
||||
this.mask = String(this.options.mask)
|
||||
|
||||
this.init()
|
||||
@@ -446,13 +506,13 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
this.checkVal() //Perform initial check for existing values
|
||||
}
|
||||
|
||||
Inputmask.DEFAULS = {
|
||||
Inputmask.DEFAULTS = {
|
||||
mask: "",
|
||||
placeholder: "_",
|
||||
definitions: {
|
||||
'9': "[0-9]",
|
||||
'a': "[A-Za-z]",
|
||||
'?': "[A-Za-z0-9]",
|
||||
'w': "[A-Za-z0-9]",
|
||||
'*': "."
|
||||
}
|
||||
}
|
||||
@@ -735,9 +795,9 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
$.fn.inputmask = function (options) {
|
||||
return this.each(function () {
|
||||
var $this = $(this)
|
||||
var data = $this.data('inputmask')
|
||||
var data = $this.data('bs.inputmask')
|
||||
|
||||
if (!data) $this.data('inputmask', (data = new Inputmask(this, options)))
|
||||
if (!data) $this.data('bs.inputmask', (data = new Inputmask(this, options)))
|
||||
})
|
||||
}
|
||||
|
||||
@@ -758,14 +818,14 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
|
||||
$(document).on('focus.bs.inputmask.data-api', '[data-mask]', function (e) {
|
||||
var $this = $(this)
|
||||
if ($this.data('inputmask')) return
|
||||
if ($this.data('bs.inputmask')) return
|
||||
$this.inputmask($this.data())
|
||||
})
|
||||
|
||||
}(window.jQuery);
|
||||
|
||||
/* ===========================================================
|
||||
* Bootstrap: fileinput.js v3.1.1
|
||||
* Bootstrap: fileinput.js v3.1.3
|
||||
* http://jasny.github.com/bootstrap/javascript/#fileinput
|
||||
* ===========================================================
|
||||
* Copyright 2012-2014 Arnold Daniels
|
||||
@@ -800,14 +860,15 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
|
||||
this.$hidden = this.$element.find('input[type=hidden][name="' + this.name + '"]')
|
||||
if (this.$hidden.length === 0) {
|
||||
this.$hidden = $('<input type="hidden" />')
|
||||
this.$element.prepend(this.$hidden)
|
||||
this.$hidden = $('<input type="hidden">').insertBefore(this.$input)
|
||||
}
|
||||
|
||||
this.$preview = this.$element.find('.fileinput-preview')
|
||||
var height = this.$preview.css('height')
|
||||
if (this.$preview.css('display') != 'inline' && height != '0px' && height != 'none') this.$preview.css('line-height', height)
|
||||
|
||||
if (this.$preview.css('display') !== 'inline' && height !== '0px' && height !== 'none') {
|
||||
this.$preview.css('line-height', height)
|
||||
}
|
||||
|
||||
this.original = {
|
||||
exists: this.$element.hasClass('fileinput-exists'),
|
||||
preview: this.$preview.html(),
|
||||
@@ -826,9 +887,11 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
},
|
||||
|
||||
Fileinput.prototype.change = function(e) {
|
||||
if (e.target.files === undefined) e.target.files = e.target && e.target.value ? [ {name: e.target.value.replace(/^.+\\/, '')} ] : []
|
||||
var files = e.target.files === undefined ? (e.target && e.target.value ? [{ name: e.target.value.replace(/^.+\\/, '')}] : []) : e.target.files
|
||||
|
||||
e.stopPropagation()
|
||||
|
||||
if (e.target.files.length === 0) {
|
||||
if (files.length === 0) {
|
||||
this.clear()
|
||||
return
|
||||
}
|
||||
@@ -837,17 +900,17 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
this.$hidden.attr('name', '')
|
||||
this.$input.attr('name', this.name)
|
||||
|
||||
var file = e.target.files[0]
|
||||
var file = files[0]
|
||||
|
||||
if (this.$preview.length > 0 && (typeof file.type !== "undefined" ? file.type.match('image.*') : file.name.match(/\.(gif|png|jpe?g)$/i)) && typeof FileReader !== "undefined") {
|
||||
if (this.$preview.length > 0 && (typeof file.type !== "undefined" ? file.type.match(/^image\/(gif|png|jpeg)$/) : file.name.match(/\.(gif|png|jpe?g)$/i)) && typeof FileReader !== "undefined") {
|
||||
var reader = new FileReader()
|
||||
var preview = this.$preview
|
||||
var element = this.$element
|
||||
|
||||
reader.onload = function(re) {
|
||||
var $img = $('<img>') // .attr('src', re.target.result)
|
||||
var $img = $('<img>')
|
||||
$img[0].src = re.target.result
|
||||
e.target.files[0].result = re.target.result
|
||||
files[0].result = re.target.result
|
||||
|
||||
element.find('.fileinput-filename').text(file.name)
|
||||
|
||||
@@ -857,7 +920,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
preview.html($img)
|
||||
element.addClass('fileinput-exists').removeClass('fileinput-new')
|
||||
|
||||
element.trigger('change.bs.fileinput', e.target.files)
|
||||
element.trigger('change.bs.fileinput', files)
|
||||
}
|
||||
|
||||
reader.readAsDataURL(file)
|
||||
@@ -892,14 +955,14 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
this.$element.find('.fileinput-filename').text('')
|
||||
this.$element.addClass('fileinput-new').removeClass('fileinput-exists')
|
||||
|
||||
if (e !== false) {
|
||||
if (e !== undefined) {
|
||||
this.$input.trigger('change')
|
||||
this.$element.trigger('clear.bs.fileinput')
|
||||
}
|
||||
},
|
||||
|
||||
Fileinput.prototype.reset = function() {
|
||||
this.clear(false)
|
||||
this.clear()
|
||||
|
||||
this.$hidden.val(this.original.hiddenVal)
|
||||
this.$preview.html(this.original.preview)
|
||||
@@ -925,8 +988,8 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
$.fn.fileinput = function (options) {
|
||||
return this.each(function () {
|
||||
var $this = $(this),
|
||||
data = $this.data('fileinput')
|
||||
if (!data) $this.data('fileinput', (data = new Fileinput(this, options)))
|
||||
data = $this.data('bs.fileinput')
|
||||
if (!data) $this.data('bs.fileinput', (data = new Fileinput(this, options)))
|
||||
if (typeof options == 'string') data[options]()
|
||||
})
|
||||
}
|
||||
@@ -948,7 +1011,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
|
||||
$(document).on('click.fileinput.data-api', '[data-provides="fileinput"]', function (e) {
|
||||
var $this = $(this)
|
||||
if ($this.data('fileinput')) return
|
||||
if ($this.data('bs.fileinput')) return
|
||||
$this.fileinput($this.data())
|
||||
|
||||
var $target = $(e.target).closest('[data-dismiss="fileinput"],[data-trigger="fileinput"]');
|
||||
|
||||
4
dist/js/jasny-bootstrap.min.js
vendored
4
dist/js/jasny-bootstrap.min.js
vendored
File diff suppressed because one or more lines are too long
6
docs/assets/js/customize.min.js
vendored
6
docs/assets/js/customize.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -183,9 +183,14 @@ window.onload = function () { // wait for load in a dumb way because B-0
|
||||
return imports
|
||||
}
|
||||
|
||||
function generateLESS(lessFilename, lessFileIncludes, vars) {
|
||||
function generateLESS(lessFilename, lessFileIncludes, vars, additionalLessFiles) {
|
||||
var lessSource = __less[lessFilename]
|
||||
|
||||
// Additional imports files, not present in less file, but required to build
|
||||
$.each(additionalLessFiles || [], function(index, filename) {
|
||||
lessSource += __less[filename]
|
||||
})
|
||||
|
||||
$.each(includedLessFilenames(lessFilename), function(index, filename) {
|
||||
var fileInclude = lessFileIncludes[filename]
|
||||
|
||||
@@ -197,7 +202,7 @@ window.onload = function () { // wait for load in a dumb way because B-0
|
||||
|
||||
// Custom variables are added after Bootstrap variables so the custom
|
||||
// ones take precedence.
|
||||
if (('build/default-variables.less' === filename) && vars) lessSource += generateCustomCSS(vars)
|
||||
if (('variables.less' === filename) && vars) lessSource += generateCustomCSS(vars)
|
||||
})
|
||||
|
||||
lessSource = lessSource.replace(/@import[^\n]*/gi, '') //strip any imports
|
||||
@@ -206,7 +211,6 @@ window.onload = function () { // wait for load in a dumb way because B-0
|
||||
|
||||
function compileLESS(lessSource, baseFilename, intoResult) {
|
||||
var parser = new less.Parser({
|
||||
paths: ['build/default-variables.less', 'mixins.less'],
|
||||
optimization: 0,
|
||||
filename: baseFilename + '.css'
|
||||
}).parse(lessSource, function (err, tree) {
|
||||
@@ -239,7 +243,8 @@ window.onload = function () { // wait for load in a dumb way because B-0
|
||||
$(this).val() && (vars[$(this).prev().text()] = $(this).val())
|
||||
})
|
||||
|
||||
var bsLessSource = generateLESS('jasny-bootstrap.less', lessFileIncludes, vars)
|
||||
var bsLessSource = generateLESS('jasny-bootstrap.less', lessFileIncludes, vars,
|
||||
['build/variables.less', 'build/mixins.less'])
|
||||
|
||||
try {
|
||||
compileLESS(bsLessSource, 'jasny-bootstrap', result)
|
||||
|
||||
6
docs/assets/js/raw-files.min.js
vendored
6
docs/assets/js/raw-files.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -7,68 +7,6 @@ base_url: "../"
|
||||
---
|
||||
|
||||
|
||||
<!-- Multi level dropdowns
|
||||
================================================== -->
|
||||
<div class="bs-docs-section">
|
||||
<div class="page-header">
|
||||
<h1 id="navmenu">Multi level dropdowns</h1>
|
||||
</div>
|
||||
<p>Use multiple levels with <a href="http://getbootstrap.com/components/#dropdowns" target="_blank">Bootstrap's dropdown component</a> by adding a <code>.dropdown</code> a <code>.dropdown-menu</code>.</p>
|
||||
|
||||
<div class="bs-example">
|
||||
<div class="dropdown clearfix">
|
||||
<button class="btn dropdown-toggle sr-only" type="button" id="dropdownMenu1" data-toggle="dropdown">
|
||||
Dropdown
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu">
|
||||
<li><a href="#">Some action</a></li>
|
||||
<li><a href="#">Some other action</a></li>
|
||||
<li class="divider"></li>
|
||||
<li class="dropdown" data-toggle="dropdown">
|
||||
<a tabindex="-1" href="#">More options</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a tabindex="-1" href="#">Second level</a></li>
|
||||
<li class="dropdown" data-toggle="dropdown">
|
||||
<a href="#">Even more options</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="#">3rd level</a></li>
|
||||
<li><a href="#">Yet another action</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
{% highlight html %}
|
||||
<div class="dropdown">
|
||||
<button class="btn dropdown-toggle sr-only" type="button" id="dropdownMenu1" data-toggle="dropdown">
|
||||
Dropdown
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu">
|
||||
<li><a href="#">Some action</a></li>
|
||||
<li><a href="#">Some other action</a></li>
|
||||
<li class="divider"></li>
|
||||
<li class="dropdown" data-toggle="dropdown">
|
||||
<a tabindex="-1" href="#">More options</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a tabindex="-1" href="#">Second level</a></li>
|
||||
<li class="dropdown" data-toggle="dropdown">
|
||||
<a href="#">Even more options</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="#">3rd level</a></li>
|
||||
<li><a href="#">Yet another action</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
{% endhighlight %}
|
||||
</div>
|
||||
|
||||
<!-- Navmenu
|
||||
================================================== -->
|
||||
<div class="bs-docs-section">
|
||||
|
||||
@@ -123,6 +123,12 @@ base_url: "../"
|
||||
Off canvas
|
||||
</label>
|
||||
</div>
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<input type="checkbox" checked value="transition.js">
|
||||
Transitions <small>(required for any kind of animation)</small>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
2
docs/dist/css/jasny-bootstrap.css.map
vendored
2
docs/dist/css/jasny-bootstrap.css.map
vendored
File diff suppressed because one or more lines are too long
4
docs/dist/css/jasny-bootstrap.min.css
vendored
4
docs/dist/css/jasny-bootstrap.min.css
vendored
File diff suppressed because one or more lines are too long
4
docs/dist/js/jasny-bootstrap.min.js
vendored
4
docs/dist/js/jasny-bootstrap.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -1,95 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="">
|
||||
<link rel="shortcut icon" href="../../assets/ico/favicon.png">
|
||||
|
||||
<title>Navmenu Template for Bootstrap</title>
|
||||
|
||||
<!-- Bootstrap core CSS -->
|
||||
<link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="../../dist/css/jasny-bootstrap.min.css" rel="stylesheet">
|
||||
|
||||
<!-- Custom styles for this template -->
|
||||
|
||||
<!-- Just for debugging purposes. Don't actually copy this line! -->
|
||||
<!--[if lt IE 9]><script src="../../docs-assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
|
||||
|
||||
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
||||
<!--[if lt IE 9]>
|
||||
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
|
||||
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
|
||||
<![endif]-->
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="dropdown clearfix">
|
||||
<button class="btn dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown">
|
||||
Dropdown
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu">
|
||||
<li><a href="#">Some action</a></li>
|
||||
<li><a href="#">Some other action</a></li>
|
||||
<li class="divider"></li>
|
||||
<li class="dropdown">
|
||||
<a href="#" data-toggle="dropdown">More options</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="#">Second level</a></li>
|
||||
<li class="dropdown">
|
||||
<a href="#" data-toggle="dropdown">Even more options</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="#">3rd level</a></li>
|
||||
<li><a href="#">Yet another action</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="dropdown clearfix">
|
||||
<button class="btn dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown">
|
||||
Dropdown 2
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu">
|
||||
<li><a href="#">Some action</a></li>
|
||||
<li><a href="#">Some other action</a></li>
|
||||
<li class="divider"></li>
|
||||
<li class="dropdown">
|
||||
<a href="#" data-toggle="dropdown">More options</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="#">Second level</a></li>
|
||||
<li class="dropdown">
|
||||
<a href="#" data-toggle="dropdown">Even more options</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="#">3rd level</a></li>
|
||||
<li><a href="#">Yet another action</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Bootstrap core JavaScript
|
||||
================================================== -->
|
||||
<!-- Placed at the end of the document so the pages load faster -->
|
||||
<script src="https://code.jquery.com/jquery-1.10.2.min.js"></script>
|
||||
<!--script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script-->
|
||||
<script src="../../../js/dropdown.js"></script>
|
||||
<script src="../../dist/js/jasny-bootstrap.min.js"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
$(document).on('hidden.bs.dropdown', '.dropdown', function(e) {
|
||||
$(this).parents('[toggle=dropdown]').addClass('open')
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -41,7 +41,7 @@
|
||||
<li><a href="#">Link</a></li>
|
||||
<li class="dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a>
|
||||
<ul class="dropdown-menu">
|
||||
<ul class="dropdown-menu navmenu-nav">
|
||||
<li><a href="#">Action</a></li>
|
||||
<li><a href="#">Another action</a></li>
|
||||
<li><a href="#">Something else here</a></li>
|
||||
@@ -49,13 +49,6 @@
|
||||
<li class="dropdown-header">Nav header</li>
|
||||
<li><a href="#">Separated link</a></li>
|
||||
<li><a href="#">One more separated link</a></li>
|
||||
<li class="dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown">2nd level dropdown <b class="caret"></b></a>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="#">Subaction</a></li>
|
||||
<li><a href="#">Another subaction</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -85,11 +78,5 @@
|
||||
<script src="https://code.jquery.com/jquery-1.10.2.min.js"></script>
|
||||
<script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
|
||||
<script src="../../dist/js/jasny-bootstrap.min.js"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
$('.dropdown').on('hidden', function(e) {
|
||||
alert(1);
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -60,7 +60,7 @@ $.fn.bootstrapBtn = bootstrapButton // give $().bootstrapBtn the Boot
|
||||
|
||||
<h3 id="js-events">Events</h3>
|
||||
<p>Bootstrap provides custom events for most plugin's unique actions. Generally, these come in an infinitive and past participle form - where the infinitive (ex. <code>show</code>) is triggered at the start of an event, and its past participle form (ex. <code>shown</code>) is trigger on the completion of an action.</p>
|
||||
<p>As of 3.0.0, all Bootstrap events are namespaced.</p>
|
||||
<p>As of 3.1.2, all Bootstrap events are namespaced.</p>
|
||||
<p>All infinitive events provide <code>preventDefault</code> functionality. This provides the ability to stop the execution of an action before it starts.</p>
|
||||
{% highlight js %}
|
||||
$('#myMenu').on('show.bs.offcanvas', function (e) {
|
||||
@@ -396,8 +396,9 @@ $('.inputmask').inputmask({
|
||||
<tbody>
|
||||
<tr><td>9</td><td>Number</td></tr>
|
||||
<tr><td>a</td><td>Letter</td></tr>
|
||||
<tr><td>?</td><td>Alphanumeric</td></tr>
|
||||
<tr><td>w</td><td>Alphanumeric</td></tr>
|
||||
<tr><td>*</td><td>Any character</td></tr>
|
||||
<tr><td>?</td><td>Optional - any characters following will become optional</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
@@ -9,16 +9,21 @@
|
||||
var btoa = require('btoa');
|
||||
var fs = require('fs');
|
||||
|
||||
function getFiles(type) {
|
||||
function getFiles(type, subdirs, exclude) {
|
||||
var files = {};
|
||||
fs.readdirSync(type)
|
||||
.filter(function (path) {
|
||||
return new RegExp('\\.' + type + '$').test(path);
|
||||
})
|
||||
.forEach(function (path) {
|
||||
var fullPath = type + (path === 'variables.less' ? '/build/' : '/') + path;
|
||||
files[path] = fs.readFileSync(fullPath, 'utf8');
|
||||
});
|
||||
exclude = exclude || [];
|
||||
|
||||
subdirs.forEach(function(subdir) {
|
||||
var sub = subdir ? subdir + '/' : '';
|
||||
fs.readdirSync(type + '/' + sub)
|
||||
.filter(function (path) {
|
||||
return new RegExp('\\.' + type + '$').test(path) && exclude.indexOf(sub + path) === -1;
|
||||
})
|
||||
.forEach(function (path) {
|
||||
var fullPath = type + '/' + sub + path;
|
||||
files[sub + path] = fs.readFileSync(fullPath, 'utf8');
|
||||
});
|
||||
});
|
||||
return 'var __' + type + ' = ' + JSON.stringify(files) + '\n';
|
||||
}
|
||||
|
||||
@@ -26,6 +31,6 @@ module.exports = function generateRawFilesJs(banner) {
|
||||
if (!banner) {
|
||||
banner = '';
|
||||
}
|
||||
var files = banner + getFiles('js') + getFiles('less');
|
||||
var files = banner + getFiles('js', ['']) + getFiles('less', ['', 'build'], ['build/jasny-bootstrap.less']);
|
||||
fs.writeFileSync('docs/assets/js/raw-files.min.js', files);
|
||||
};
|
||||
|
||||
147
js/dropdown.js
147
js/dropdown.js
@@ -1,147 +0,0 @@
|
||||
/* ========================================================================
|
||||
* Bootstrap: dropdown.js v3.1.1
|
||||
* http://getbootstrap.com/javascript/#dropdowns
|
||||
* ========================================================================
|
||||
* Copyright 2011-2014 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* ======================================================================== */
|
||||
|
||||
|
||||
+function ($) {
|
||||
'use strict';
|
||||
|
||||
// DROPDOWN CLASS DEFINITION
|
||||
// =========================
|
||||
|
||||
var backdrop = '.dropdown-backdrop'
|
||||
var toggle = '[data-toggle="dropdown"]'
|
||||
var Dropdown = function (element) {
|
||||
$(element).on('click.bs.dropdown', this.toggle)
|
||||
}
|
||||
|
||||
Dropdown.prototype.toggle = function (e) {
|
||||
var $this = $(this)
|
||||
|
||||
if ($this.is('.disabled, :disabled')) return
|
||||
|
||||
var $parent = getParent($this)
|
||||
var isActive = $parent.hasClass('open')
|
||||
|
||||
clearMenus()
|
||||
|
||||
if (!isActive) {
|
||||
if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
|
||||
// if mobile we use a backdrop because click events don't delegate
|
||||
$('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus)
|
||||
}
|
||||
|
||||
var relatedTarget = { relatedTarget: this }
|
||||
$parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
|
||||
|
||||
if (e.isDefaultPrevented()) return
|
||||
|
||||
$parent
|
||||
.toggleClass('open')
|
||||
.trigger('shown.bs.dropdown', relatedTarget)
|
||||
|
||||
$this.trigger('focus')
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
Dropdown.prototype.keydown = function (e) {
|
||||
if (!/(38|40|27)/.test(e.keyCode)) return
|
||||
|
||||
var $this = $(this)
|
||||
|
||||
e.preventDefault()
|
||||
e.stopPropagation()
|
||||
|
||||
if ($this.is('.disabled, :disabled')) return
|
||||
|
||||
var $parent = getParent($this)
|
||||
var isActive = $parent.hasClass('open')
|
||||
|
||||
if (!isActive || (isActive && e.keyCode == 27)) {
|
||||
if (e.which == 27) $parent.find(toggle).trigger('focus')
|
||||
return $this.trigger('click')
|
||||
}
|
||||
|
||||
var desc = ' li:not(.divider):visible a'
|
||||
var $items = $parent.find('[role="menu"]' + desc + ', [role="listbox"]' + desc)
|
||||
|
||||
if (!$items.length) return
|
||||
|
||||
var index = $items.index($items.filter(':focus'))
|
||||
|
||||
if (e.keyCode == 38 && index > 0) index-- // up
|
||||
if (e.keyCode == 40 && index < $items.length - 1) index++ // down
|
||||
if (!~index) index = 0
|
||||
|
||||
$items.eq(index).trigger('focus')
|
||||
}
|
||||
|
||||
function clearMenus(e) {
|
||||
$(backdrop).remove()
|
||||
$(toggle).each(function () {
|
||||
var $parent = getParent($(this))
|
||||
var relatedTarget = { relatedTarget: this }
|
||||
if (!$parent.hasClass('open')) return
|
||||
$parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
|
||||
if (e.isDefaultPrevented()) return
|
||||
$parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)
|
||||
})
|
||||
}
|
||||
|
||||
function getParent($this) {
|
||||
var selector = $this.attr('data-target')
|
||||
|
||||
if (!selector) {
|
||||
selector = $this.attr('href')
|
||||
selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
|
||||
}
|
||||
|
||||
var $parent = selector && $(selector)
|
||||
|
||||
return $parent && $parent.length ? $parent : $this.parent()
|
||||
}
|
||||
|
||||
|
||||
// DROPDOWN PLUGIN DEFINITION
|
||||
// ==========================
|
||||
|
||||
var old = $.fn.dropdown
|
||||
|
||||
$.fn.dropdown = function (option) {
|
||||
return this.each(function () {
|
||||
var $this = $(this)
|
||||
var data = $this.data('bs.dropdown')
|
||||
|
||||
if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
|
||||
if (typeof option == 'string') data[option].call($this)
|
||||
})
|
||||
}
|
||||
|
||||
$.fn.dropdown.Constructor = Dropdown
|
||||
|
||||
|
||||
// DROPDOWN NO CONFLICT
|
||||
// ====================
|
||||
|
||||
$.fn.dropdown.noConflict = function () {
|
||||
$.fn.dropdown = old
|
||||
return this
|
||||
}
|
||||
|
||||
|
||||
// APPLY TO STANDARD DROPDOWN ELEMENTS
|
||||
// ===================================
|
||||
|
||||
$(document)
|
||||
.on('click.bs.dropdown.data-api', clearMenus)
|
||||
.on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
|
||||
.on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
|
||||
.on('keydown.bs.dropdown.data-api', toggle + ', [role="menu"], [role="listbox"]', Dropdown.prototype.keydown)
|
||||
|
||||
}(jQuery);
|
||||
@@ -1,5 +1,5 @@
|
||||
/* ===========================================================
|
||||
* Bootstrap: fileinput.js v3.1.1
|
||||
* Bootstrap: fileinput.js v3.1.3
|
||||
* http://jasny.github.com/bootstrap/javascript/#fileinput
|
||||
* ===========================================================
|
||||
* Copyright 2012-2014 Arnold Daniels
|
||||
@@ -34,14 +34,15 @@
|
||||
|
||||
this.$hidden = this.$element.find('input[type=hidden][name="' + this.name + '"]')
|
||||
if (this.$hidden.length === 0) {
|
||||
this.$hidden = $('<input type="hidden" />')
|
||||
this.$element.prepend(this.$hidden)
|
||||
this.$hidden = $('<input type="hidden">').insertBefore(this.$input)
|
||||
}
|
||||
|
||||
this.$preview = this.$element.find('.fileinput-preview')
|
||||
var height = this.$preview.css('height')
|
||||
if (this.$preview.css('display') != 'inline' && height != '0px' && height != 'none') this.$preview.css('line-height', height)
|
||||
|
||||
if (this.$preview.css('display') !== 'inline' && height !== '0px' && height !== 'none') {
|
||||
this.$preview.css('line-height', height)
|
||||
}
|
||||
|
||||
this.original = {
|
||||
exists: this.$element.hasClass('fileinput-exists'),
|
||||
preview: this.$preview.html(),
|
||||
@@ -60,9 +61,11 @@
|
||||
},
|
||||
|
||||
Fileinput.prototype.change = function(e) {
|
||||
if (e.target.files === undefined) e.target.files = e.target && e.target.value ? [ {name: e.target.value.replace(/^.+\\/, '')} ] : []
|
||||
var files = e.target.files === undefined ? (e.target && e.target.value ? [{ name: e.target.value.replace(/^.+\\/, '')}] : []) : e.target.files
|
||||
|
||||
e.stopPropagation()
|
||||
|
||||
if (e.target.files.length === 0) {
|
||||
if (files.length === 0) {
|
||||
this.clear()
|
||||
return
|
||||
}
|
||||
@@ -71,17 +74,17 @@
|
||||
this.$hidden.attr('name', '')
|
||||
this.$input.attr('name', this.name)
|
||||
|
||||
var file = e.target.files[0]
|
||||
var file = files[0]
|
||||
|
||||
if (this.$preview.length > 0 && (typeof file.type !== "undefined" ? file.type.match('image.*') : file.name.match(/\.(gif|png|jpe?g)$/i)) && typeof FileReader !== "undefined") {
|
||||
if (this.$preview.length > 0 && (typeof file.type !== "undefined" ? file.type.match(/^image\/(gif|png|jpeg)$/) : file.name.match(/\.(gif|png|jpe?g)$/i)) && typeof FileReader !== "undefined") {
|
||||
var reader = new FileReader()
|
||||
var preview = this.$preview
|
||||
var element = this.$element
|
||||
|
||||
reader.onload = function(re) {
|
||||
var $img = $('<img>') // .attr('src', re.target.result)
|
||||
var $img = $('<img>')
|
||||
$img[0].src = re.target.result
|
||||
e.target.files[0].result = re.target.result
|
||||
files[0].result = re.target.result
|
||||
|
||||
element.find('.fileinput-filename').text(file.name)
|
||||
|
||||
@@ -91,7 +94,7 @@
|
||||
preview.html($img)
|
||||
element.addClass('fileinput-exists').removeClass('fileinput-new')
|
||||
|
||||
element.trigger('change.bs.fileinput', e.target.files)
|
||||
element.trigger('change.bs.fileinput', files)
|
||||
}
|
||||
|
||||
reader.readAsDataURL(file)
|
||||
@@ -126,14 +129,14 @@
|
||||
this.$element.find('.fileinput-filename').text('')
|
||||
this.$element.addClass('fileinput-new').removeClass('fileinput-exists')
|
||||
|
||||
if (e !== false) {
|
||||
if (e !== undefined) {
|
||||
this.$input.trigger('change')
|
||||
this.$element.trigger('clear.bs.fileinput')
|
||||
}
|
||||
},
|
||||
|
||||
Fileinput.prototype.reset = function() {
|
||||
this.clear(false)
|
||||
this.clear()
|
||||
|
||||
this.$hidden.val(this.original.hiddenVal)
|
||||
this.$preview.html(this.original.preview)
|
||||
@@ -159,8 +162,8 @@
|
||||
$.fn.fileinput = function (options) {
|
||||
return this.each(function () {
|
||||
var $this = $(this),
|
||||
data = $this.data('fileinput')
|
||||
if (!data) $this.data('fileinput', (data = new Fileinput(this, options)))
|
||||
data = $this.data('bs.fileinput')
|
||||
if (!data) $this.data('bs.fileinput', (data = new Fileinput(this, options)))
|
||||
if (typeof options == 'string') data[options]()
|
||||
})
|
||||
}
|
||||
@@ -182,7 +185,7 @@
|
||||
|
||||
$(document).on('click.fileinput.data-api', '[data-provides="fileinput"]', function (e) {
|
||||
var $this = $(this)
|
||||
if ($this.data('fileinput')) return
|
||||
if ($this.data('bs.fileinput')) return
|
||||
$this.fileinput($this.data())
|
||||
|
||||
var $target = $(e.target).closest('[data-dismiss="fileinput"],[data-trigger="fileinput"]');
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
if (isAndroid) return // No support because caret positioning doesn't work on Android
|
||||
|
||||
this.$element = $(element)
|
||||
this.options = $.extend({}, Inputmask.DEFAULS, options)
|
||||
this.options = $.extend({}, Inputmask.DEFAULTS, options)
|
||||
this.mask = String(this.options.mask)
|
||||
|
||||
this.init()
|
||||
@@ -41,13 +41,13 @@
|
||||
this.checkVal() //Perform initial check for existing values
|
||||
}
|
||||
|
||||
Inputmask.DEFAULS = {
|
||||
Inputmask.DEFAULTS = {
|
||||
mask: "",
|
||||
placeholder: "_",
|
||||
definitions: {
|
||||
'9': "[0-9]",
|
||||
'a': "[A-Za-z]",
|
||||
'?': "[A-Za-z0-9]",
|
||||
'w': "[A-Za-z0-9]",
|
||||
'*': "."
|
||||
}
|
||||
}
|
||||
@@ -330,9 +330,9 @@
|
||||
$.fn.inputmask = function (options) {
|
||||
return this.each(function () {
|
||||
var $this = $(this)
|
||||
var data = $this.data('inputmask')
|
||||
var data = $this.data('bs.inputmask')
|
||||
|
||||
if (!data) $this.data('inputmask', (data = new Inputmask(this, options)))
|
||||
if (!data) $this.data('bs.inputmask', (data = new Inputmask(this, options)))
|
||||
})
|
||||
}
|
||||
|
||||
@@ -353,7 +353,7 @@
|
||||
|
||||
$(document).on('focus.bs.inputmask.data-api', '[data-mask]', function (e) {
|
||||
var $this = $(this)
|
||||
if ($this.data('inputmask')) return
|
||||
if ($this.data('bs.inputmask')) return
|
||||
$this.inputmask($this.data())
|
||||
})
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* ========================================================================
|
||||
* Bootstrap: offcanvas.js v3.1.1
|
||||
* Bootstrap: offcanvas.js v3.1.3
|
||||
* http://jasny.github.io/bootstrap/javascript/#offcanvas
|
||||
* ========================================================================
|
||||
* Copyright 2013-2014 Arnold Daniels
|
||||
@@ -37,6 +37,11 @@
|
||||
$(document).on('click', $.proxy(this.autohide, this))
|
||||
|
||||
if (this.options.toggle) this.toggle()
|
||||
|
||||
if (this.options.disablescrolling) {
|
||||
this.options.disableScrolling = this.options.disablescrolling
|
||||
delete this.options.disablescrolling
|
||||
}
|
||||
}
|
||||
|
||||
OffCanvas.DEFAULTS = {
|
||||
@@ -135,8 +140,10 @@
|
||||
var bodyWidth = $('body').width()
|
||||
var prop = 'padding-' + this.opposite(this.placement)
|
||||
|
||||
if ($('body').data('offcanvas-style') === undefined) $('body').data('offcanvas-style', $('body').attr('style'))
|
||||
|
||||
if ($('body').data('offcanvas-style') === undefined) {
|
||||
$('body').data('offcanvas-style', $('body').attr('style') || '')
|
||||
}
|
||||
|
||||
$('body').css('overflow', 'hidden')
|
||||
|
||||
if ($('body').width() > bodyWidth) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* ============================================================
|
||||
* Bootstrap: rowlink.js v3.1.0
|
||||
* Bootstrap: rowlink.js v3.1.3
|
||||
* http://jasny.github.io/bootstrap/javascript/#rowlink
|
||||
* ============================================================
|
||||
* Copyright 2012-2014 Arnold Daniels
|
||||
@@ -54,8 +54,8 @@
|
||||
$.fn.rowlink = function (options) {
|
||||
return this.each(function () {
|
||||
var $this = $(this)
|
||||
var data = $this.data('rowlink')
|
||||
if (!data) $this.data('rowlink', (data = new Rowlink(this, options)))
|
||||
var data = $this.data('bs.rowlink')
|
||||
if (!data) $this.data('bs.rowlink', (data = new Rowlink(this, options)))
|
||||
})
|
||||
}
|
||||
|
||||
@@ -75,8 +75,10 @@
|
||||
// ==================
|
||||
|
||||
$(document).on('click.bs.rowlink.data-api', '[data-link="row"]', function (e) {
|
||||
if ($(e.target).closest('.rowlink-skip').length !== 0) return
|
||||
|
||||
var $this = $(this)
|
||||
if ($this.data('rowlink')) return
|
||||
if ($this.data('bs.rowlink')) return
|
||||
$this.rowlink($this.data())
|
||||
$(e.target).trigger('click.bs.rowlink')
|
||||
})
|
||||
|
||||
@@ -1,6 +1,13 @@
|
||||
$(function () {
|
||||
|
||||
module('inputmask')
|
||||
var $input;
|
||||
|
||||
module('inputmask', {
|
||||
setup : function() {
|
||||
$input = $('<input type="text">').appendTo(document.body);
|
||||
$input.removeData('inputmask');
|
||||
}
|
||||
})
|
||||
|
||||
test('should provide no conflict', function () {
|
||||
var inputmask = $.fn.inputmask.noConflict()
|
||||
@@ -9,12 +16,66 @@ $(function () {
|
||||
})
|
||||
|
||||
test('should be defined on jquery object', function () {
|
||||
ok($(document.body).inputmask, 'inputmask method is defined')
|
||||
ok($input.inputmask, 'inputmask method is defined')
|
||||
})
|
||||
|
||||
test('should return element', function () {
|
||||
ok($(document.body).inputmask()[0] == document.body, 'document.body returned')
|
||||
ok($input.inputmask()[0] == $input[0], 'input returned')
|
||||
})
|
||||
|
||||
test('should use default mask', function() {
|
||||
var expected = ""
|
||||
$.fn.inputmask.Constructor.DEFAULTS.mask = expected
|
||||
|
||||
$input.inputmask()
|
||||
|
||||
equal(expected, $input.data('bs.inputmask').options.mask)
|
||||
})
|
||||
|
||||
test('should use default placeholder', function() {
|
||||
var expected = "_"
|
||||
$.fn.inputmask.Constructor.DEFAULTS.placeholder = expected
|
||||
|
||||
$input.inputmask()
|
||||
|
||||
equal(expected, $input.data('bs.inputmask').options.placeholder)
|
||||
})
|
||||
|
||||
test('should use default definitions', function() {
|
||||
var expected = {
|
||||
'0': "[0-9]",
|
||||
'A': "[A-Za-z]"
|
||||
}
|
||||
$.fn.inputmask.Constructor.DEFAULTS.definitions = expected
|
||||
|
||||
$input.inputmask()
|
||||
|
||||
deepEqual(expected, $input.data('bs.inputmask').options.definitions)
|
||||
})
|
||||
|
||||
test('should override mask when options.mask provided', function() {
|
||||
var expected = '99-99';
|
||||
$input.inputmask({ mask: expected})
|
||||
|
||||
equal(expected, $input.data('bs.inputmask').options.mask)
|
||||
})
|
||||
|
||||
test('should override placeholder when options.placeholder provided', function() {
|
||||
var expected = '-';
|
||||
$input.inputmask({ placeholder: expected})
|
||||
|
||||
equal(expected, $input.data('bs.inputmask').options.placeholder)
|
||||
})
|
||||
|
||||
test('should override definitions when options.definitions provided', function() {
|
||||
var expected = {
|
||||
'0': "[0-9]",
|
||||
'A': "[A-Za-z]"
|
||||
}
|
||||
|
||||
$input.inputmask({definitions: expected})
|
||||
|
||||
deepEqual(expected, $input.data('bs.inputmask').options.definitions)
|
||||
})
|
||||
|
||||
// TODO: add inputmask tests
|
||||
})
|
||||
|
||||
50
js/transition.js
Normal file
50
js/transition.js
Normal file
@@ -0,0 +1,50 @@
|
||||
/* ========================================================================
|
||||
* Bootstrap: transition.js v3.1.3
|
||||
* http://getbootstrap.com/javascript/#transitions
|
||||
* ========================================================================
|
||||
* Copyright 2011-2014 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* ======================================================================== */
|
||||
|
||||
|
||||
+function ($) {
|
||||
'use strict';
|
||||
|
||||
// CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
|
||||
// ============================================================
|
||||
|
||||
function transitionEnd() {
|
||||
var el = document.createElement('bootstrap')
|
||||
|
||||
var transEndEventNames = {
|
||||
WebkitTransition : 'webkitTransitionEnd',
|
||||
MozTransition : 'transitionend',
|
||||
OTransition : 'oTransitionEnd otransitionend',
|
||||
transition : 'transitionend'
|
||||
}
|
||||
|
||||
for (var name in transEndEventNames) {
|
||||
if (el.style[name] !== undefined) {
|
||||
return { end: transEndEventNames[name] }
|
||||
}
|
||||
}
|
||||
|
||||
return false // explicit for ie8 ( ._.)
|
||||
}
|
||||
|
||||
if ($.support.transition !== undefined) return // Prevent conflict with Twitter Bootstrap
|
||||
|
||||
// http://blog.alexmaccaw.com/css-transitions
|
||||
$.fn.emulateTransitionEnd = function (duration) {
|
||||
var called = false, $el = this
|
||||
$(this).one($.support.transition.end, function () { called = true })
|
||||
var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
|
||||
setTimeout(callback, duration)
|
||||
return this
|
||||
}
|
||||
|
||||
$(function () {
|
||||
$.support.transition = transitionEnd()
|
||||
})
|
||||
|
||||
}(window.jQuery);
|
||||
@@ -1,6 +1,6 @@
|
||||
// Fixed alerts
|
||||
//
|
||||
// Position to the top or bottom.
|
||||
// ------------------------------------------------
|
||||
|
||||
.alert-fixed-top,
|
||||
.alert-fixed-bottom {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
// Jasny Bootstrap with default variables
|
||||
|
||||
@import "variables.less";
|
||||
@import "mixins.less";
|
||||
@import "../jasny-bootstrap.less";
|
||||
|
||||
61
less/build/mixins.less
Normal file
61
less/build/mixins.less
Normal file
@@ -0,0 +1,61 @@
|
||||
//
|
||||
// These mixins are used when Jasny Bootstrap is
|
||||
// built without importing Twitter Bootstrap.
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
// CSS3 PROPERTIES
|
||||
// --------------------------------------------------
|
||||
|
||||
// Single side border-radius
|
||||
.border-top-radius(@radius) {
|
||||
border-top-right-radius: @radius;
|
||||
border-top-left-radius: @radius;
|
||||
}
|
||||
.border-right-radius(@radius) {
|
||||
border-bottom-right-radius: @radius;
|
||||
border-top-right-radius: @radius;
|
||||
}
|
||||
.border-bottom-radius(@radius) {
|
||||
border-bottom-right-radius: @radius;
|
||||
border-bottom-left-radius: @radius;
|
||||
}
|
||||
.border-left-radius(@radius) {
|
||||
border-bottom-left-radius: @radius;
|
||||
border-top-left-radius: @radius;
|
||||
}
|
||||
|
||||
// Drop shadows
|
||||
.box-shadow(@shadow) {
|
||||
-webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1
|
||||
box-shadow: @shadow;
|
||||
}
|
||||
.transition(@transition) {
|
||||
-webkit-transition: @transition;
|
||||
-o-transition: @transition;
|
||||
transition: @transition;
|
||||
}
|
||||
|
||||
// Transition
|
||||
.transition-property(@transition-property) {
|
||||
-webkit-transition-property: @transition-property;
|
||||
transition-property: @transition-property;
|
||||
}
|
||||
.transition-delay(@transition-delay) {
|
||||
-webkit-transition-delay: @transition-delay;
|
||||
transition-delay: @transition-delay;
|
||||
}
|
||||
.transition-duration(@transition-duration) {
|
||||
-webkit-transition-duration: @transition-duration;
|
||||
transition-duration: @transition-duration;
|
||||
}
|
||||
.transition-timing-function(@timing-function) {
|
||||
-webkit-transition-timing-function: @timing-function;
|
||||
transition-timing-function: @timing-function;
|
||||
}
|
||||
.transition-transform(@transition) {
|
||||
-webkit-transition: -webkit-transform @transition;
|
||||
-moz-transition: -moz-transform @transition;
|
||||
-o-transition: -o-transform @transition;
|
||||
transition: transform @transition;
|
||||
}
|
||||
@@ -1,6 +1,19 @@
|
||||
// Labels for buttons
|
||||
// --------------------------------------------------
|
||||
|
||||
.button-label-size(@padding-vertical; @padding-horizontal; @border-radius) {
|
||||
padding: @padding-vertical @padding-horizontal;
|
||||
left: (-1 * @padding-horizontal);
|
||||
border-radius: (@border-radius - 1px) 0 0 (@border-radius - 1px);
|
||||
|
||||
&.btn-label-right {
|
||||
left: auto;
|
||||
right: (-1 * @padding-horizontal);
|
||||
border-radius: 0 (@border-radius - 1px) (@border-radius - 1px) 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.btn-labeled {
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
|
||||
@@ -1,54 +0,0 @@
|
||||
// Dropdown-submenu.less
|
||||
// Multi level dropdowns
|
||||
//
|
||||
// Based on work by Maks Surguy (https://twitter.com/msurguy)
|
||||
// http://bootsnipp.com/snippets/featured/multi-level-dropdown-menu-bs3
|
||||
// ------------------------------------------------
|
||||
|
||||
.dropdown-menu .dropdown {
|
||||
position: relative;
|
||||
|
||||
> .dropdown-menu {
|
||||
top: 0;
|
||||
left: 100%;
|
||||
margin-top: -6px;
|
||||
margin-left: -1px;
|
||||
-webkit-border-radius: 0 6px 6px 6px;
|
||||
-moz-border-radius: 0 6px 6px;
|
||||
border-radius: 0 6px 6px 6px;
|
||||
}
|
||||
|
||||
&.open > .dropdown-menu {
|
||||
display: block;
|
||||
}
|
||||
|
||||
> a:after {
|
||||
display: block;
|
||||
content: " ";
|
||||
float: right;
|
||||
width: 0;
|
||||
height: 0;
|
||||
border-color: transparent;
|
||||
border-style: solid;
|
||||
border-width: 5px 0 5px 5px;
|
||||
border-left-color: #ccc;
|
||||
margin-top: 5px;
|
||||
margin-right: -10px;
|
||||
}
|
||||
|
||||
&.open > a:after {
|
||||
border-left-color: #fff;
|
||||
}
|
||||
|
||||
&.pull-left {
|
||||
float: none;
|
||||
|
||||
> .dropdown-menu {
|
||||
left: -100%;
|
||||
margin-left: 10px;
|
||||
-webkit-border-radius: 6px 0 6px 6px;
|
||||
-moz-border-radius: 6px 0 6px 6px;
|
||||
border-radius: 6px 0 6px 6px;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -13,10 +13,9 @@
|
||||
margin: 0;
|
||||
opacity: 0;
|
||||
filter: alpha(opacity=0);
|
||||
transform: translate(-300px, 0) scale(4);
|
||||
-webkit-transform: translate(-300px, 0) scale(4);
|
||||
font-size: 23px;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
direction: ltr;
|
||||
cursor: pointer;
|
||||
}
|
||||
@@ -66,6 +65,14 @@
|
||||
|
||||
.fileinput.input-group {
|
||||
display: table;
|
||||
|
||||
> * {
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
}
|
||||
> .btn-file {
|
||||
z-index: 1;
|
||||
}
|
||||
}
|
||||
|
||||
// Not 100% correct, but helps in typical use case
|
||||
|
||||
@@ -2,14 +2,12 @@
|
||||
|
||||
// Core variables and mixins
|
||||
@import "variables.less";
|
||||
@import "mixins.less";
|
||||
|
||||
// Core CSS
|
||||
@import "grid-container-smooth.less";
|
||||
@import "button-labels.less";
|
||||
|
||||
// Components
|
||||
@import "dropdown-submenu.less";
|
||||
@import "nav-tab-alignment.less";
|
||||
@import "navmenu.less";
|
||||
@import "alerts-fixed.less";
|
||||
|
||||
@@ -1,47 +0,0 @@
|
||||
//
|
||||
// Mixins
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
// CSS3 PROPERTIES
|
||||
// --------------------------------------------------
|
||||
|
||||
// Single side border-radius
|
||||
.border-top-radius(@radius) {
|
||||
border-top-right-radius: @radius;
|
||||
border-top-left-radius: @radius;
|
||||
}
|
||||
.border-right-radius(@radius) {
|
||||
border-bottom-right-radius: @radius;
|
||||
border-top-right-radius: @radius;
|
||||
}
|
||||
.border-bottom-radius(@radius) {
|
||||
border-bottom-right-radius: @radius;
|
||||
border-bottom-left-radius: @radius;
|
||||
}
|
||||
.border-left-radius(@radius) {
|
||||
border-bottom-left-radius: @radius;
|
||||
border-top-left-radius: @radius;
|
||||
}
|
||||
|
||||
// Drop shadows
|
||||
.box-shadow(@shadow) {
|
||||
-webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1
|
||||
box-shadow: @shadow;
|
||||
}
|
||||
|
||||
|
||||
// BUTTONS
|
||||
// --------------------------------------------------
|
||||
|
||||
.button-label-size(@padding-vertical; @padding-horizontal; @border-radius) {
|
||||
padding: @padding-vertical @padding-horizontal;
|
||||
left: (-1 * @padding-horizontal);
|
||||
border-radius: (@border-radius - 1px) 0 0 (@border-radius - 1px);
|
||||
|
||||
&.btn-label-right {
|
||||
left: auto;
|
||||
right: (-1 * @padding-horizontal);
|
||||
border-radius: 0 (@border-radius - 1px) (@border-radius - 1px) 0;
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,3 @@
|
||||
//
|
||||
// Navmenu and offcanvas navbar
|
||||
// --------------------------------------------------
|
||||
|
||||
@@ -11,7 +10,7 @@
|
||||
.navmenu,
|
||||
.navbar-offcanvas {
|
||||
width: @navmenu-width;
|
||||
height: 100%;
|
||||
height: auto;
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
border-radius: @border-radius-base;
|
||||
@@ -23,6 +22,8 @@
|
||||
position: fixed;
|
||||
z-index: @zindex-navmenu-fixed;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
overflow-y: auto;
|
||||
border-radius: 0;
|
||||
}
|
||||
.navmenu-fixed-left,
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
//
|
||||
// Off canvas navigation
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
//
|
||||
// Rowlink
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
14
package.json
14
package.json
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "jasny-bootstrap",
|
||||
"description": "Additional features and components for Bootstrap",
|
||||
"version": "3.1.1",
|
||||
"version": "3.1.3",
|
||||
"keywords": [
|
||||
"bootstrap",
|
||||
"css"
|
||||
@@ -30,24 +30,24 @@
|
||||
"grunt": "~0.4.2",
|
||||
"grunt-banner": "~0.2.0",
|
||||
"grunt-contrib-clean": "~0.5.0",
|
||||
"grunt-contrib-concat": "~0.3.0",
|
||||
"grunt-contrib-concat": "~0.4.0",
|
||||
"grunt-contrib-connect": "~0.7.0",
|
||||
"grunt-contrib-copy": "~0.5.0",
|
||||
"grunt-contrib-csslint": "~0.2.0",
|
||||
"grunt-contrib-cssmin": "~0.9.0",
|
||||
"grunt-contrib-jade": "~0.11.0",
|
||||
"grunt-contrib-jshint": "~0.8.0",
|
||||
"grunt-contrib-less": "~0.10.0",
|
||||
"grunt-contrib-jshint": "~0.10.0",
|
||||
"grunt-contrib-less": "~0.11.0",
|
||||
"grunt-contrib-qunit": "~0.4.0",
|
||||
"grunt-contrib-uglify": "~0.4.0",
|
||||
"grunt-contrib-watch": "~0.5.3",
|
||||
"grunt-contrib-watch": "~0.6.0",
|
||||
"grunt-csscomb": "~2.0.1",
|
||||
"grunt-exec": "~0.4.2",
|
||||
"grunt-html-validation": "~0.1.13",
|
||||
"grunt-jekyll": "~0.4.1",
|
||||
"grunt-jscs-checker": "~0.4.0",
|
||||
"grunt-saucelabs": "~5.0.0",
|
||||
"grunt-sed": "~0.1.1",
|
||||
"grunt-saucelabs": "~5.1.0",
|
||||
"grunt-text-replace": "~0.3.0",
|
||||
"load-grunt-tasks": "~0.4.0",
|
||||
"markdown": "~0.5.0"
|
||||
},
|
||||
|
||||
39
scss/_alerts-fixed.scss
Normal file
39
scss/_alerts-fixed.scss
Normal file
@@ -0,0 +1,39 @@
|
||||
// Fixed alerts
|
||||
// Position to the top or bottom.
|
||||
// ------------------------------------------------
|
||||
|
||||
.alert-fixed-top,
|
||||
.alert-fixed-bottom {
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
z-index: $zindex-alert-fixed;
|
||||
border-radius: 0;
|
||||
margin: 0;
|
||||
left: 0;
|
||||
|
||||
@media (min-width: $alert-fixed-width) {
|
||||
width: $alert-fixed-width;
|
||||
left: 50%;
|
||||
margin-left: (-1 * ($alert-fixed-width / 2));
|
||||
}
|
||||
}
|
||||
|
||||
.alert-fixed-top {
|
||||
top: 0;
|
||||
border-width: 0 0 1px 0;
|
||||
|
||||
@media (min-width: $alert-fixed-width) {
|
||||
@include border-bottom-radius($alert-border-radius);
|
||||
border-width: 0 1px 1px 1px;
|
||||
}
|
||||
}
|
||||
|
||||
.alert-fixed-bottom {
|
||||
bottom: 0;
|
||||
border-width: 1px 0 0 0;
|
||||
|
||||
@media (min-width: $alert-fixed-width) {
|
||||
@include border-top-radius($alert-border-radius);
|
||||
border-width: 1px 1px 0 1px;
|
||||
}
|
||||
}
|
||||
38
scss/_button-labels.scss
Normal file
38
scss/_button-labels.scss
Normal file
@@ -0,0 +1,38 @@
|
||||
// Labels for buttons
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin button-label-size($padding-vertical, $padding-horizontal, $border-radius) {
|
||||
padding: $padding-vertical $padding-horizontal;
|
||||
left: (-1 * $padding-horizontal);
|
||||
border-radius: ($border-radius - 1px) 0 0 ($border-radius - 1px);
|
||||
|
||||
&.btn-label-right {
|
||||
left: auto;
|
||||
right: (-1 * $padding-horizontal);
|
||||
border-radius: 0 ($border-radius - 1px) ($border-radius - 1px) 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.btn-labeled {
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
.btn-label {
|
||||
position: relative;
|
||||
background: transparent;
|
||||
background: rgba(0, 0, 0, 0.15);
|
||||
display: inline-block;
|
||||
@include button-label-size($padding-base-vertical, $padding-base-horizontal, $border-radius-base);
|
||||
}
|
||||
|
||||
.btn-lg .btn-label {
|
||||
@include button-label-size($padding-large-vertical, $padding-large-horizontal, $border-radius-large);
|
||||
}
|
||||
.btn-sm .btn-label {
|
||||
@include button-label-size($padding-small-vertical, $padding-small-horizontal, $border-radius-small);
|
||||
}
|
||||
.btn-xs .btn-label {
|
||||
@include button-label-size(1px, 5px, $border-radius-small);
|
||||
}
|
||||
114
scss/_fileinput.scss
Normal file
114
scss/_fileinput.scss
Normal file
@@ -0,0 +1,114 @@
|
||||
// Fileinput
|
||||
// CSS for file upload button and fileinput widget
|
||||
// ------------------------------------------------
|
||||
|
||||
.btn-file {
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
vertical-align: middle;
|
||||
> input {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
margin: 0;
|
||||
opacity: 0;
|
||||
filter: alpha(opacity=0);
|
||||
font-size: 23px;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
direction: ltr;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
.fileinput {
|
||||
margin-bottom: 9px;
|
||||
display: inline-block;
|
||||
.form-control {
|
||||
padding-top: 7px;
|
||||
padding-bottom: 5px;
|
||||
display: inline-block;
|
||||
margin-bottom: 0px;
|
||||
vertical-align: middle;
|
||||
cursor: text;
|
||||
}
|
||||
.thumbnail {
|
||||
overflow: hidden;
|
||||
display: inline-block;
|
||||
margin-bottom: 5px;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
> img {
|
||||
max-height: 100%;
|
||||
}
|
||||
}
|
||||
.btn {
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
.fileinput-exists .fileinput-new,
|
||||
.fileinput-new .fileinput-exists {
|
||||
display: none;
|
||||
}
|
||||
.fileinput-inline .fileinput-controls {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.fileinput-filename {
|
||||
vertical-align: middle;
|
||||
display: inline-block;
|
||||
overflow: hidden;
|
||||
}
|
||||
.form-control .fileinput-filename {
|
||||
vertical-align: bottom;
|
||||
}
|
||||
|
||||
.fileinput.input-group {
|
||||
display: table;
|
||||
}
|
||||
|
||||
// Not 100% correct, but helps in typical use case
|
||||
.fileinput-new.input-group .btn-file,
|
||||
.fileinput-new .input-group .btn-file {
|
||||
border-radius: 0 $border-radius-base $border-radius-base 0;
|
||||
|
||||
&.btn-xs,
|
||||
&.btn-sm {
|
||||
border-radius: 0 $border-radius-small $border-radius-small 0;
|
||||
}
|
||||
&.btn-lg {
|
||||
border-radius: 0 $border-radius-large $border-radius-large 0;
|
||||
}
|
||||
}
|
||||
|
||||
.form-group.has-warning .fileinput {
|
||||
.fileinput-preview {
|
||||
color: $state-warning-text;
|
||||
}
|
||||
.thumbnail {
|
||||
border-color: $state-warning-border;
|
||||
}
|
||||
}
|
||||
.form-group.has-error .fileinput {
|
||||
.fileinput-preview {
|
||||
color: $state-danger-text;
|
||||
}
|
||||
.thumbnail {
|
||||
border-color: $state-danger-border;
|
||||
}
|
||||
}
|
||||
.form-group.has-success .fileinput {
|
||||
.fileinput-preview {
|
||||
color: $state-success-text;
|
||||
}
|
||||
.thumbnail {
|
||||
border-color: $state-success-border;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Input group fixes
|
||||
|
||||
.input-group-addon:not(:first-child) {
|
||||
border-left: 0;
|
||||
}
|
||||
10
scss/_grid-container-smooth.scss
Normal file
10
scss/_grid-container-smooth.scss
Normal file
@@ -0,0 +1,10 @@
|
||||
// Smooth sizing container
|
||||
// -------------------------
|
||||
|
||||
.container-smooth {
|
||||
max-width: $container-lg;
|
||||
|
||||
@media (min-width: 1px) {
|
||||
width: auto;
|
||||
}
|
||||
}
|
||||
97
scss/_nav-tab-alignment.scss
Normal file
97
scss/_nav-tab-alignment.scss
Normal file
@@ -0,0 +1,97 @@
|
||||
// Alignment options
|
||||
// -------------------------
|
||||
|
||||
// bottom
|
||||
.nav-tabs-bottom {
|
||||
border-bottom: 0;
|
||||
border-top: 1px solid $nav-tabs-border-color;
|
||||
|
||||
> li {
|
||||
margin-bottom: 0;
|
||||
margin-top: -1px;
|
||||
|
||||
> a {
|
||||
border-radius: 0 0 $border-radius-base $border-radius-base;
|
||||
}
|
||||
|
||||
> a:hover,
|
||||
> a:focus,
|
||||
&.active > a,
|
||||
&.active > a:hover,
|
||||
&.active > a:focus {
|
||||
border: 1px solid $nav-tabs-active-link-hover-border-color;
|
||||
border-top-color: transparent;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// left
|
||||
.nav-tabs-left {
|
||||
border-bottom: 0;
|
||||
border-right: 1px solid $nav-tabs-border-color;
|
||||
|
||||
> li {
|
||||
margin-bottom: 0;
|
||||
margin-right: -1px;
|
||||
float: none;
|
||||
|
||||
> a {
|
||||
border-radius: $border-radius-base 0 0 $border-radius-base;
|
||||
margin-right: 0;
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
|
||||
> a:hover,
|
||||
> a:focus,
|
||||
&.active > a,
|
||||
&.active > a:hover,
|
||||
&.active > a:focus {
|
||||
border: 1px solid $nav-tabs-active-link-hover-border-color;
|
||||
border-right-color: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
.row > & {
|
||||
padding-right: 0;
|
||||
padding-left: ($grid-gutter-width / 2);
|
||||
margin-right: -1px;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
|
||||
& + .tab-content {
|
||||
border-left: 1px solid $nav-tabs-active-link-hover-border-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// right
|
||||
.nav-tabs-right {
|
||||
border-bottom: 0;
|
||||
border-left: 1px solid $nav-tabs-border-color;
|
||||
|
||||
> li {
|
||||
margin-bottom: 0;
|
||||
margin-left: -1px;
|
||||
float: none;
|
||||
|
||||
> a {
|
||||
border-radius: 0 $border-radius-base $border-radius-base 0;
|
||||
margin-left: 0;
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
|
||||
> a:hover,
|
||||
> a:focus,
|
||||
&.active > a,
|
||||
&.active > a:hover,
|
||||
&.active > a:focus {
|
||||
border: 1px solid $nav-tabs-active-link-hover-border-color;
|
||||
border-left-color: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
.row > & {
|
||||
padding-left: 0;
|
||||
padding-right: ($grid-gutter-width / 2);
|
||||
}
|
||||
}
|
||||
273
scss/_navmenu.scss
Normal file
273
scss/_navmenu.scss
Normal file
@@ -0,0 +1,273 @@
|
||||
// Navmenu and offcanvas navbar
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
// Wrapper and base class
|
||||
//
|
||||
// Provide a static navmenu from which we expand to create the fixed navmenu
|
||||
// variations.
|
||||
|
||||
.navmenu,
|
||||
.navbar-offcanvas {
|
||||
width: $navmenu-width;
|
||||
height: 100%;
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
border-radius: $border-radius-base;
|
||||
}
|
||||
|
||||
.navmenu-fixed-left,
|
||||
.navmenu-fixed-right,
|
||||
.navbar-offcanvas {
|
||||
position: fixed;
|
||||
z-index: $zindex-navmenu-fixed;
|
||||
top: 0;
|
||||
border-radius: 0;
|
||||
}
|
||||
.navmenu-fixed-left,
|
||||
.navbar-offcanvas.navmenu-fixed-left {
|
||||
left: 0;
|
||||
right: auto;
|
||||
border-width: 0 1px 0 0;
|
||||
bottom: 0;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.navmenu-fixed-right,
|
||||
.navbar-offcanvas {
|
||||
left: auto;
|
||||
right: 0;
|
||||
border-width: 0 0 0 1px;
|
||||
}
|
||||
|
||||
.navmenu-nav {
|
||||
margin-bottom: $navmenu-margin-vertical;
|
||||
|
||||
&.dropdown-menu {
|
||||
position: static;
|
||||
margin: 0;
|
||||
padding-top: 0;
|
||||
float: none;
|
||||
border: none;
|
||||
@include box-shadow(none);
|
||||
border-radius: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.navbar-offcanvas {
|
||||
.navbar-nav {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
@media (min-width: $grid-float-breakpoint) {
|
||||
width: auto;
|
||||
border-top: 0;
|
||||
box-shadow: none;
|
||||
|
||||
&.offcanvas {
|
||||
position: static;
|
||||
display: block !important;
|
||||
height: auto !important;
|
||||
padding-bottom: 0; // Override default setting
|
||||
overflow: visible !important;
|
||||
}
|
||||
|
||||
// Account for first and last children spacing
|
||||
.navbar-nav.navbar-left:first-child {
|
||||
margin-left: -$navbar-padding-horizontal;
|
||||
}
|
||||
.navbar-nav.navbar-right:last-child {
|
||||
margin-right: -$navbar-padding-horizontal;
|
||||
}
|
||||
|
||||
.navmenu-brand {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Brand/project name
|
||||
|
||||
.navmenu-brand {
|
||||
display: block;
|
||||
font-size: $font-size-large;
|
||||
line-height: $line-height-computed;
|
||||
padding: $nav-link-padding;
|
||||
&:hover,
|
||||
&:focus {
|
||||
text-decoration: none;
|
||||
}
|
||||
margin: $navmenu-margin-vertical 0;
|
||||
}
|
||||
|
||||
// Alternate navmenus
|
||||
// --------------------------------------------------
|
||||
|
||||
// Default navmenu
|
||||
.navmenu-default,
|
||||
.navbar-default .navbar-offcanvas {
|
||||
background-color: $navmenu-default-bg;
|
||||
border-color: $navmenu-default-border;
|
||||
|
||||
.navmenu-brand {
|
||||
color: $navmenu-default-brand-color;
|
||||
&:hover,
|
||||
&:focus {
|
||||
color: $navmenu-default-brand-hover-color;
|
||||
background-color: $navmenu-default-brand-hover-bg;
|
||||
}
|
||||
}
|
||||
|
||||
.navmenu-text {
|
||||
color: $navmenu-default-color;
|
||||
}
|
||||
|
||||
.navmenu-nav {
|
||||
// Caret should match text color on hover
|
||||
> .dropdown > a:hover .caret,
|
||||
> .dropdown > a:focus .caret {
|
||||
border-top-color: $navmenu-default-link-hover-color;
|
||||
border-bottom-color: $navmenu-default-link-hover-color;
|
||||
}
|
||||
|
||||
// Remove background color from open dropdown
|
||||
> .open > a {
|
||||
&,
|
||||
&:hover,
|
||||
&:focus {
|
||||
background-color: $navmenu-default-link-active-bg;
|
||||
color: $navmenu-default-link-active-color;
|
||||
.caret {
|
||||
border-top-color: $navmenu-default-link-active-color;
|
||||
border-bottom-color: $navmenu-default-link-active-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
> .dropdown > a .caret {
|
||||
border-top-color: $navmenu-default-link-color;
|
||||
border-bottom-color: $navmenu-default-link-color;
|
||||
}
|
||||
&.dropdown-menu {
|
||||
background-color: $navmenu-default-link-active-bg;
|
||||
& > .divider {
|
||||
background-color: $navmenu-default-bg;
|
||||
}
|
||||
> .active > a {
|
||||
&,
|
||||
&:hover,
|
||||
&:focus {
|
||||
background-color: darken($navmenu-default-link-active-bg, 6.5%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
> li > a {
|
||||
color: $navmenu-default-link-color;
|
||||
&:hover,
|
||||
&:focus {
|
||||
color: $navmenu-default-link-hover-color;
|
||||
background-color: $navmenu-default-link-hover-bg;
|
||||
}
|
||||
}
|
||||
> .active > a {
|
||||
&,
|
||||
&:hover,
|
||||
&:focus {
|
||||
color: $navmenu-default-link-active-color;
|
||||
background-color: $navmenu-default-link-active-bg;
|
||||
}
|
||||
}
|
||||
> .disabled > a {
|
||||
&,
|
||||
&:hover,
|
||||
&:focus {
|
||||
color: $navmenu-default-link-disabled-color;
|
||||
background-color: $navmenu-default-link-disabled-bg;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Inverse navmenu
|
||||
.navmenu-inverse,
|
||||
.navbar-inverse .navbar-offcanvas {
|
||||
background-color: $navmenu-inverse-bg;
|
||||
border-color: $navmenu-inverse-border;
|
||||
|
||||
.navmenu-brand {
|
||||
color: $navmenu-inverse-brand-color;
|
||||
&:hover,
|
||||
&:focus {
|
||||
color: $navmenu-inverse-brand-hover-color;
|
||||
background-color: $navmenu-inverse-brand-hover-bg;
|
||||
}
|
||||
}
|
||||
|
||||
.navmenu-text {
|
||||
color: $navmenu-inverse-color;
|
||||
}
|
||||
|
||||
.navmenu-nav {
|
||||
// Caret should match text color on hover
|
||||
> .dropdown > a:hover .caret,
|
||||
> .dropdown > a:focus .caret {
|
||||
border-top-color: $navmenu-inverse-link-hover-color;
|
||||
border-bottom-color: $navmenu-inverse-link-hover-color;
|
||||
}
|
||||
|
||||
// Remove background color from open dropdown
|
||||
> .open > a {
|
||||
&,
|
||||
&:hover,
|
||||
&:focus {
|
||||
background-color: $navmenu-inverse-link-active-bg;
|
||||
color: $navmenu-inverse-link-active-color;
|
||||
.caret {
|
||||
border-top-color: $navmenu-inverse-link-active-color;
|
||||
border-bottom-color: $navmenu-inverse-link-active-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
> .dropdown > a .caret {
|
||||
border-top-color: $navmenu-inverse-link-color;
|
||||
border-bottom-color: $navmenu-inverse-link-color;
|
||||
}
|
||||
&.dropdown-menu {
|
||||
background-color: $navmenu-inverse-link-active-bg;
|
||||
& > .divider {
|
||||
background-color: $navmenu-inverse-bg;
|
||||
}
|
||||
> .active > a {
|
||||
&,
|
||||
&:hover,
|
||||
&:focus {
|
||||
background-color: darken($navmenu-inverse-link-active-bg, 6.5%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
> li > a {
|
||||
color: $navmenu-inverse-link-color;
|
||||
&:hover,
|
||||
&:focus {
|
||||
color: $navmenu-inverse-link-hover-color;
|
||||
background-color: $navmenu-inverse-link-hover-bg;
|
||||
}
|
||||
}
|
||||
> .active > a {
|
||||
&,
|
||||
&:hover,
|
||||
&:focus {
|
||||
color: $navmenu-inverse-link-active-color;
|
||||
background-color: $navmenu-inverse-link-active-bg;
|
||||
}
|
||||
}
|
||||
> .disabled > a {
|
||||
&,
|
||||
&:hover,
|
||||
&:focus {
|
||||
color: $navmenu-inverse-link-disabled-color;
|
||||
background-color: $navmenu-inverse-link-disabled-bg;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
48
scss/_offcanvas.scss
Normal file
48
scss/_offcanvas.scss
Normal file
@@ -0,0 +1,48 @@
|
||||
// Off canvas navigation
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin offcanvas {
|
||||
display: none;
|
||||
&.in {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: $screen-xs-max) {
|
||||
.offcanvas-xs {
|
||||
@include offcanvas;
|
||||
}
|
||||
}
|
||||
@media (max-width: $screen-sm-max) {
|
||||
.offcanvas-sm {
|
||||
@include offcanvas;
|
||||
}
|
||||
}
|
||||
@media (max-width: $screen-md-max) {
|
||||
.offcanvas-md {
|
||||
@include offcanvas;
|
||||
}
|
||||
}
|
||||
.offcanvas-lg {
|
||||
@include offcanvas;
|
||||
}
|
||||
|
||||
.canvas-sliding {
|
||||
-webkit-transition: top 0.35s, left 0.35s, bottom 0.35s, right 0.35s;
|
||||
transition: top 0.35s, left 0.35s, bottom 0.35s, right 0.35s;
|
||||
}
|
||||
|
||||
.offcanvas-clone {
|
||||
height: 0px !important;
|
||||
width: 0px !important;
|
||||
overflow: hidden !important;
|
||||
border: none !important;
|
||||
margin: 0px !important;
|
||||
padding: 0px !important;
|
||||
position: absolute !important;
|
||||
top: auto !important;
|
||||
left: auto !important;
|
||||
bottom: 0px !important;
|
||||
right: 0px !important;
|
||||
opacity: 0 !important;
|
||||
}
|
||||
22
scss/_rowlink.scss
Normal file
22
scss/_rowlink.scss
Normal file
@@ -0,0 +1,22 @@
|
||||
// Rowlink
|
||||
// --------------------------------------------------
|
||||
|
||||
.table.rowlink,
|
||||
.table .rowlink {
|
||||
td:not(.rowlink-skip) {
|
||||
cursor: pointer;
|
||||
|
||||
a {
|
||||
color: inherit;
|
||||
font: inherit;
|
||||
text-decoration: inherit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.table-hover.rowlink,
|
||||
.table-hover .rowlink {
|
||||
tr:hover td {
|
||||
background-color: darken($table-bg-hover, 15%);
|
||||
}
|
||||
}
|
||||
66
scss/_variables.scss
Normal file
66
scss/_variables.scss
Normal file
@@ -0,0 +1,66 @@
|
||||
//
|
||||
// Variables
|
||||
//
|
||||
// Either Twitter Bootstrap's "variables.less" or this package's
|
||||
// "default-variables.less" should be loaded before this file.
|
||||
// -------------------------------------------------------------
|
||||
|
||||
$zindex-navmenu-fixed: 1030 !default;
|
||||
$zindex-alert-fixed: 1035 !default;
|
||||
|
||||
$container-smooth: $container-lg !default;
|
||||
|
||||
$alert-fixed-width: $screen-md-min !default;
|
||||
|
||||
|
||||
//== Navmenu
|
||||
|
||||
// Basics of a navmenu
|
||||
$navmenu-width: 300px !default;
|
||||
$navmenu-margin-vertical: (0.5 * $line-height-computed) !default;
|
||||
$navmenu-default-color: #777 !default;
|
||||
$navmenu-default-bg: #f8f8f8 !default;
|
||||
$navmenu-default-border: darken($navmenu-default-bg, 6.5%) !default;
|
||||
|
||||
// Navmenu links
|
||||
$navmenu-default-link-color: #777 !default;
|
||||
$navmenu-default-link-hover-color: #333 !default;
|
||||
$navmenu-default-link-hover-bg: transparent !default;
|
||||
$navmenu-default-link-active-color: #555 !default;
|
||||
$navmenu-default-link-active-bg: darken($navmenu-default-bg, 6.5%) !default;
|
||||
$navmenu-default-link-disabled-color: #ccc !default;
|
||||
$navmenu-default-link-disabled-bg: transparent !default;
|
||||
|
||||
// Navmenu brand label
|
||||
$navmenu-default-brand-color: $navmenu-default-link-color !default;
|
||||
$navmenu-default-brand-hover-color: darken($navmenu-default-link-color, 10%) !default;
|
||||
$navmenu-default-brand-hover-bg: transparent !default;
|
||||
|
||||
|
||||
// Inverted navmenu
|
||||
//
|
||||
// Reset inverted navmenu basics
|
||||
$navmenu-inverse-color: $gray-light !default;
|
||||
$navmenu-inverse-bg: #222 !default;
|
||||
$navmenu-inverse-border: darken($navmenu-inverse-bg, 10%) !default;
|
||||
|
||||
// Inverted navmenu links
|
||||
$navmenu-inverse-link-color: $gray-light !default;
|
||||
$navmenu-inverse-link-hover-color: #fff !default;
|
||||
$navmenu-inverse-link-hover-bg: transparent !default;
|
||||
$navmenu-inverse-link-active-color: $navmenu-inverse-link-hover-color !default;
|
||||
$navmenu-inverse-link-active-bg: darken($navmenu-inverse-bg, 10%) !default;
|
||||
$navmenu-inverse-link-disabled-color: #444 !default;
|
||||
$navmenu-inverse-link-disabled-bg: transparent !default;
|
||||
|
||||
// Inverted navmenu brand label
|
||||
$navmenu-inverse-brand-color: $navmenu-inverse-link-color !default;
|
||||
$navmenu-inverse-brand-hover-color: #fff !default;
|
||||
$navmenu-inverse-brand-hover-bg: transparent !default;
|
||||
|
||||
// Inverted navmenu search
|
||||
// Normal navmenu needs no special styles or vars
|
||||
$navmenu-inverse-search-bg: lighten($navmenu-inverse-bg, 25%) !default;
|
||||
$navmenu-inverse-search-bg-focus: #fff !default;
|
||||
$navmenu-inverse-search-border: $navmenu-inverse-bg !default;
|
||||
$navmenu-inverse-search-placeholder-color: #ccc !default;
|
||||
19
scss/jasny-bootstrap.scss
Normal file
19
scss/jasny-bootstrap.scss
Normal file
@@ -0,0 +1,19 @@
|
||||
// Twitter Bootstrap's "variables.scss" should already be imported
|
||||
|
||||
// Core variables and mixins
|
||||
@import "variables";
|
||||
@import "mixins";
|
||||
|
||||
// Core CSS
|
||||
@import "grid-container-smooth";
|
||||
@import "button-labels";
|
||||
|
||||
// Components
|
||||
@import "nav-tab-alignment";
|
||||
@import "navmenu";
|
||||
@import "alerts-fixed";
|
||||
|
||||
// Components w/ JavaScript
|
||||
@import "offcanvas";
|
||||
@import "rowlink";
|
||||
@import "fileinput";
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user