Added files and vars to customizer

Make grunt build jasny-bootstrap files (in extend folder)
Put modifications on existing components in own file
Small fixups
This commit is contained in:
Arnold Daniels
2013-10-27 21:16:41 +01:00
parent 404b080309
commit ecbffbc315
30 changed files with 2337 additions and 186 deletions

View File

@@ -9,7 +9,7 @@ module.exports = function(grunt) {
// Metadata.
pkg: grunt.file.readJSON('package.json'),
banner: '/**\n' +
'* <%= pkg.name %>.js v<%= pkg.version %> by @fat and @mdo\n' +
'* bootstrap.js v<%= pkg.version %> by @fat and @mdo\n' +
'* Copyright <%= grunt.template.today("yyyy") %> <%= pkg.author %>\n' +
'* <%= _.pluck(pkg.licenses, "url").join(", ") %>\n' +
'*/\n',
@@ -59,7 +59,16 @@ module.exports = function(grunt) {
'js/inputmask.js',
'js/fileinput.js'
],
dest: 'dist/js/<%= pkg.name %>.js'
dest: 'dist/js/bootstrap.js'
},
jasny: {
src: [
'js/offcanvas.js',
'js/rowlink.js',
'js/inputmask.js',
'js/fileinput.js'
],
dest: 'dist/extend/js/jasny-bootstrap.js'
}
},
@@ -69,7 +78,11 @@ module.exports = function(grunt) {
},
bootstrap: {
src: ['<%= concat.bootstrap.dest %>'],
dest: 'dist/js/<%= pkg.name %>.min.js'
dest: 'dist/js/bootstrap.min.js'
},
jasny: {
src: ['<%= concat.jasny.dest %>'],
dest: 'dist/extend/js/jasny-bootstrap.min.js'
}
},
@@ -79,25 +92,36 @@ module.exports = function(grunt) {
},
bootstrap: {
src: ['less/bootstrap.less'],
dest: 'dist/css/<%= pkg.name %>.css'
dest: 'dist/css/bootstrap.css'
},
min: {
options: {
compress: true
},
src: ['less/bootstrap.less'],
dest: 'dist/css/<%= pkg.name %>.min.css'
dest: 'dist/css/bootstrap.min.css'
},
jasny: {
src: ['less/jasny-bootstrap.less'],
dest: 'dist/extend/css/jasny-bootstrap.css'
},
jasny_min: {
options: {
compress: true
},
src: ['less/jasny-bootstrap.less'],
dest: 'dist/extend/css/jasny-bootstrap.min.css'
},
theme: {
src: ['less/theme.less'],
dest: 'dist/css/<%= pkg.name %>-theme.css'
dest: 'dist/css/bootstrap-theme.css'
},
theme_min: {
options: {
compress: true
},
src: ['less/theme.less'],
dest: 'dist/css/<%= pkg.name %>-theme.min.css'
dest: 'dist/css/bootstrap-theme.min.css'
}
},

View File

@@ -4,9 +4,10 @@ Jasny Bootstrap is a fork of the famous [Twitter Bootstrap](http://getbootstrap.
* [Button labels](http://jasny.github.io/bootstrap/css/#buttons-labels)
* [Off canvas navmenu](http://jasny.github.io/bootstrap/components/#navmenu)
* [Fixed alerts](http://jasny.github.io/bootstrap/components/#alerts-fixed)
* [Row link](http://jasny.github.io/bootstrap/javascript/#rowlink)
* [Input mask](http://jasny.github.io/bootstrap/javascript/#inputmask)
* [File upload widget](http://jasny.github.io/bootstrap/javascript/#fileupload)
* [File input widget](http://jasny.github.io/bootstrap/javascript/#fileupload)
To get started, check out [http://jasny.github.io/bootstrap/](http://jasny.github.io/bootstrap)!

View File

@@ -1,11 +1,11 @@
<li>
<li class="bs-jasny">
<a href="#overview">Overview</a>
<ul class="nav">
<li><a href="#overview-doctype">HTML5 doctype</a></li>
<li><a href="#overview-mobile">Mobile first</a></li>
<li><a href="#overview-responsive-images">Responsive images</a></li>
<li><a href="#overview-type-links">Typography and links</a></li>
<li><a href="#overview-normalize">Normalize</a></li>
<li class="bs-twbs"><a href="#overview-doctype">HTML5 doctype</a></li>
<li class="bs-twbs"><a href="#overview-mobile">Mobile first</a></li>
<li class="bs-twbs"><a href="#overview-responsive-images">Responsive images</a></li>
<li class="bs-twbs"><a href="#overview-type-links">Typography and links</a></li>
<li class="bs-twbs"><a href="#overview-normalize">Normalize</a></li>
<li><a href="#overview-container">Containers</a></li>
</ul>
</li>

View File

@@ -12,6 +12,7 @@
<li><a href="#variables-form-states">Form states</a></li>
<li><a href="#variables-alerts">Alerts</a></li>
<li><a href="#variables-navbar">Navbar</a></li>
<li><a href="#variables-navmenu">Navmenu</a></li>
<li><a href="#variables-nav">Nav</a></li>
<li><a href="#variables-tables">Tables</a></li>
<li><a href="#variables-forms">Forms</a></li>

View File

@@ -1,7 +1,7 @@
<div class="bs-old-docs">
<div class="container">
<strong>
<a href="{{ page.base_url }}2.3.2/">Looking for Bootstrap 2.3.2 docs?</a>
<a href="{{ page.base_url }}2.3.1/">Looking for Bootstrap 2.3.1 docs?</a>
</strong>
We've moved it to a new home while we push forward with Bootstrap 3.
</div>

File diff suppressed because one or more lines are too long

View File

@@ -1869,7 +1869,7 @@ body { padding-bottom: 70px; }
<h2 id="navmenu-offcanvas">Off canvas</h2>
<p>With the <a href="../javascript/#offcanvas">offcanvas plugin</a>, you can hide the navmenu off canvas. This is especially usefull for screens with a small viewport.</p>
<p>With the <a href="../javascript/#offcanvas">offcanvas plugin</a>, you can hide the navmenu off canvas. This is especially useful for screens with a small viewport.</p>
<div class="bs-example bs-navmenu-offcanvas-example">
<div id="myNavmenuCanvas">
<nav id="myNavmenu" class="navmenu navmenu-default navmenu-fixed-left offcanvas" role="navigation">

View File

@@ -9,14 +9,16 @@ base_url: "../"
<!-- Global Bootstrap settings
================================================== -->
<div class="bs-docs-section">
<div class="bs-docs-section bs-jasny">
<div class="page-header">
<h1 id="overview">Overview</h1>
</div>
<p class="lead">Get the lowdown on the key pieces of Bootstrap's infrastructure, including our approach to better, faster, stronger web development.</p>
<div class="bs-twbs">
<p class="lead">Get the lowdown on the key pieces of Bootstrap's infrastructure, including our approach to better, faster, stronger web development.</p>
<h3 id="overview-doctype">HTML5 doctype</h3>
<p>Bootstrap makes use of certain HTML elements and CSS properties that require the use of the HTML5 doctype. Include it at the beginning of all your projects.</p>
<h3 id="overview-doctype">HTML5 doctype</h3>
<p>Bootstrap makes use of certain HTML elements and CSS properties that require the use of the HTML5 doctype. Include it at the beginning of all your projects.</p>
{% highlight html %}
<!DOCTYPE html>
<html lang="en">
@@ -24,9 +26,9 @@ base_url: "../"
</html>
{% endhighlight %}
<h3 id="overview-mobile">Mobile first</h3>
<p>With Bootstrap 2, we added optional mobile friendly styles for key aspects of the framework. With Bootstrap 3, we've rewritten the project to be mobile friendly from the start. Instead of adding on optional mobile styles, they're baked right into the core. In fact, <strong>Bootstrap is mobile first</strong>. Mobile first styles can be found throughout the entire library instead of in separate files.</p>
<p>To ensure proper rendering and touch zooming, <strong>add the viewport meta tag</strong> to your <code>&lt;head&gt;</code>.</p>
<h3 id="overview-mobile">Mobile first</h3>
<p>With Bootstrap 2, we added optional mobile friendly styles for key aspects of the framework. With Bootstrap 3, we've rewritten the project to be mobile friendly from the start. Instead of adding on optional mobile styles, they're baked right into the core. In fact, <strong>Bootstrap is mobile first</strong>. Mobile first styles can be found throughout the entire library instead of in separate files.</p>
<p>To ensure proper rendering and touch zooming, <strong>add the viewport meta tag</strong> to your <code>&lt;head&gt;</code>.</p>
{% highlight html %}
<meta name="viewport" content="width=device-width, initial-scale=1.0">
{% endhighlight %}
@@ -35,32 +37,36 @@ base_url: "../"
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
{% endhighlight %}
<h3 id="overview-responsive-images">Responsive images</h3>
<p>Images in Bootstrap 3 can be made responsive-friendly via the addition of the <code>.img-responsive</code> class. This applies <code>max-width: 100%;</code> and <code>height: auto;</code> to the image so that it scales nicely to the parent element.</p>
<h3 id="overview-responsive-images">Responsive images</h3>
<p>Images in Bootstrap 3 can be made responsive-friendly via the addition of the <code>.img-responsive</code> class. This applies <code>max-width: 100%;</code> and <code>height: auto;</code> to the image so that it scales nicely to the parent element.</p>
{% highlight html %}
<img src="..." class="img-responsive" alt="Responsive image">
{% endhighlight %}
<h3 id="overview-type-links">Typography and links</h3>
<p>Bootstrap sets basic global display, typography, and link styles. Specifically, we:</p>
<ul>
<li>Remove <code>margin</code> on the body</li>
<li>Set <code>background-color: white;</code> on the <code>body</code></li>
<li>Use the <code>@font-family-base</code>, <code>@font-size-base</code>, and <code>@line-height-base</code> attributes as our typographic base</li>
<li>Set the global link color via <code>@link-color</code> and apply link underlines only on <code>:hover</code></li>
</ul>
<p>These styles can be found within <code>scaffolding.less</code>.</p>
<h3 id="overview-normalize">Normalize</h3>
<p>For improved cross-browser rendering, we use <a href="http://necolas.github.io/normalize.css/" target="_blank">Normalize</a>, a project by <a href="http://twitter.com/necolas" target="_blank">Nicolas Gallagher</a> and <a href="http://twitter.com/jon_neal" target="_blank">Jonathan Neal</a>.</p>
<h3 id="overview-type-links">Typography and links</h3>
<p>Bootstrap sets basic global display, typography, and link styles. Specifically, we:</p>
<ul>
<li>Remove <code>margin</code> on the body</li>
<li>Set <code>background-color: white;</code> on the <code>body</code></li>
<li>Use the <code>@font-family-base</code>, <code>@font-size-base</code>, and <code>@line-height-base</code> attributes as our typographic base</li>
<li>Set the global link color via <code>@link-color</code> and apply link underlines only on <code>:hover</code></li>
</ul>
<p>These styles can be found within <code>scaffolding.less</code>.</p>
<h3 id="overview-normalize">Normalize</h3>
<p>For improved cross-browser rendering, we use <a href="http://necolas.github.io/normalize.css/" target="_blank">Normalize</a>, a project by <a href="http://twitter.com/necolas" target="_blank">Nicolas Gallagher</a> and <a href="http://twitter.com/jon_neal" target="_blank">Jonathan Neal</a>.</p>
</div>
<h3 id="overview-container">Containers</h3>
<p>Easily center a page's contents by wrapping its contents in a <code>.container</code>. Containers set <code>max-width</code> at various media query breakpoints to match our grid system.</p>
<div class="bs-twbs">
<p>Easily center a page's contents by wrapping its contents in a <code>.container</code>. Containers set <code>max-width</code> at various media query breakpoints to match our grid system.</p>
{% highlight html %}
<div class="container">
...
</div>
{% endhighlight %}
</div>
<p>Added <code>.container-smooth</code> a container to use the same <code>max-width</code> for all viewport sizes. This means that the container size won't jump at media query breakpoints.</p>
</div>

View File

@@ -94,6 +94,12 @@ base_url: "../"
Navbar
</label>
</div>
<div class="checkbox">
<label>
<input type="checkbox" checked value="navmenu.less" data-dependencies="utilities.less,navs.less">
Navmenu
</label>
</div>
<div class="checkbox">
<label>
<input type="checkbox" checked value="breadcrumbs.less">
@@ -212,6 +218,30 @@ base_url: "../"
Carousel
</label>
</div>
<div class="checkbox">
<label>
<input type="checkbox" checked value="offcanvas.less">
Off canvas
</label>
</div>
<div class="checkbox">
<label>
<input type="checkbox" checked value="rowlink.less">
Row link
</label>
</div>
<div class="checkbox">
<label>
<input type="checkbox" checked value="inputmask.less">
Input mask
</label>
</div>
<div class="checkbox">
<label>
<input type="checkbox" checked value="fileinput.less">
File input
</label>
</div>
<h3>Utilities</h3>
<div class="checkbox">
@@ -295,6 +325,24 @@ base_url: "../"
Togglable tabs
</label>
</div>
<div class="checkbox">
<label>
<input type="checkbox" checked value="rowlink.js">
Row link
</label>
</div>
<div class="checkbox">
<label>
<input type="checkbox" checked value="inputmask.js">
Input mask
</label>
</div>
<div class="checkbox">
<label>
<input type="checkbox" checked value="fileinput.js">
File input
</label>
</div>
</div>
<div class="col-lg-6">
<h4>Magic</h4>
@@ -316,6 +364,12 @@ base_url: "../"
Scrollspy
</label>
</div>
<div class="checkbox">
<label>
<input type="checkbox" checked value="offcanvas.js">
Off canvas
</label>
</div>
<div class="checkbox">
<label>
<input type="checkbox" checked value="transition.js">
@@ -764,6 +818,89 @@ base_url: "../"
</div>
<h2 id="variables-navmenu">Navmenu</h2>
<div class="row">
<div class="col-lg-6">
<h3>Default navmenu</h3>
<h4>Basics</h4>
<label>@navmenu-width</label>
<input type="text" class="form-control" placeholder="300px" data-var="@navmenu-width">
<label>@navmenu-default-color</label>
<input type="text" class="form-control" placeholder="#777" data-var="@navmenu-default-color">
<label>@navmenu-default-bg</label>
<input type="text" class="form-control" placeholder="#eee" data-var="@navmenu-default-bg">
<label>@navmenu-border-radius</label>
<input type="text" class="form-control" placeholder="@border-radius-base" data-var="@navmenu-border-radius">
<h4>Links</h4>
<label>@navmenu-default-link-color</label>
<input type="text" class="form-control" placeholder="#777" data-var="@navmenu-default-link-color">
<label>@navmenu-default-link-hover-color</label>
<input type="text" class="form-control" placeholder="#333" data-var="@navmenu-default-link-hover-color">
<label>@navmenu-default-link-hover-bg</label>
<input type="text" class="form-control" placeholder="transparent" data-var="@navmenu-default-link-hover-bg">
<label>@navmenu-default-link-active-color</label>
<input type="text" class="form-control" placeholder="#555" data-var="@navmenu-default-link-active-color">
<label>@navmenu-default-link-active-bg</label>
<input type="text" class="form-control" placeholder="darken(@navmenu-bg, 10%)" data-var="@navmenu-default-link-active-bg">
<label>@navmenu-default-link-disabled-color</label>
<input type="text" class="form-control" placeholder="#ccc" data-var="@navmenu-default-link-disabled-color">
<label>@navmenu-default-link-disabled-bg</label>
<input type="text" class="form-control" placeholder="transparent" data-var="@navmenu-default-link-disabled-bg">
<h4>Brand</h4>
<label>@navmenu-default-brand-color</label>
<input type="text" class="form-control" placeholder="@navmenu-link-color" data-var="@navmenu-default-brand-color">
<label>@navmenu-default-brand-hover-color</label>
<input type="text" class="form-control" placeholder="darken(@navmenu-link-color, 10%)" data-var="@navmenu-default-brand-hover-color">
<label>@navmenu-default-brand-hover-bg</label>
<input type="text" class="form-control" placeholder="transparent" data-var="@navmenu-default-brand-hover-bg">
<h4>Toggle</h4>
<label>@navmenu-default-toggle-hover-bg</label>
<input type="text" class="form-control" placeholder="#ddd" data-var="@navmenu-default-toggle-hover-bg">
<label>@navmenu-default-toggle-icon-bar-bg</label>
<input type="text" class="form-control" placeholder="#ccc" data-var="@navmenu-default-toggle-icon-bar-bg">
<label>@navmenu-default-toggle-border-color</label>
<input type="text" class="form-control" placeholder="#ddd" data-var="@navmenu-default-toggle-border-color">
</div>
<div class="col-lg-6">
<h3>Inverted navmenu</h3>
<h4>Basics</h4>
<label>@navmenu-inverse-color</label>
<input type="text" class="form-control" placeholder="@gray-light" data-var="@navmenu-inverse-color">
<label>@navmenu-inverse-bg</label>
<input type="text" class="form-control" placeholder="#222" data-var="@navmenu-inverse-bg">
<h4>Links</h4>
<label>@navmenu-inverse-link-color</label>
<input type="text" class="form-control" placeholder="@gray-light" data-var="@navmenu-inverse-link-color">
<label>@navmenu-inverse-link-hover-color</label>
<input type="text" class="form-control" placeholder="#fff" data-var="@navmenu-inverse-link-hover-color">
<label>@navmenu-inverse-link-hover-bg</label>
<input type="text" class="form-control" placeholder="transparent" data-var="@navmenu-inverse-link-hover-bg">
<label>@navmenu-inverse-link-active-color</label>
<input type="text" class="form-control" placeholder="@navmenu-inverse-link-hover-color" data-var="@navmenu-inverse-link-active-color">
<label>@navmenu-inverse-link-active-bg</label>
<input type="text" class="form-control" placeholder="darken(@navmenu-inverse-bg, 10%)" data-var="@navmenu-inverse-link-active-bg">
<label>@navmenu-inverse-link-disabled-color</label>
<input type="text" class="form-control" placeholder="#444" data-var="@navmenu-inverse-link-disabled-color">
<label>@navmenu-inverse-link-disabled-bg</label>
<input type="text" class="form-control" placeholder="transparent" data-var="@navmenu-inverse-link-disabled-bg">
<h4>Brand</h4>
<label>@navmenu-inverse-brand-color</label>
<input type="text" class="form-control" placeholder="@navmenu-inverse-link-color" data-var="@navmenu-inverse-brand-color">
<label>@navmenu-inverse-brand-hover-color</label>
<input type="text" class="form-control" placeholder="#fff" data-var="@navmenu-inverse-brand-hover-color">
<label>@navmenu-inverse-brand-hover-bg</label>
<input type="text" class="form-control" placeholder="transparent" data-var="@navmenu-inverse-brand-hover-bg">
<h4>Toggle</h4>
<label>@navmenu-inverse-toggle-hover-bg</label>
<input type="text" class="form-control" placeholder="#333" data-var="@navmenu-inverse-toggle-hover-bg">
<label>@navmenu-inverse-toggle-icon-bar-bg</label>
<input type="text" class="form-control" placeholder="#fff" data-var="@navmenu-inverse-toggle-icon-bar-bg">
<label>@navmenu-inverse-toggle-border-color</label>
<input type="text" class="form-control" placeholder="#333" data-var="@navmenu-inverse-toggle-border-color">
</div>
</div>
<h2 id="variables-nav">Nav</h2>
<h3>Default nav</h3>

View File

@@ -1393,6 +1393,12 @@ pre code {
}
}
@media (min-width: 1px) {
.container-smooth {
max-width: 1170px;
}
}
table {
max-width: 100%;
background-color: transparent;

File diff suppressed because one or more lines are too long

1000
dist/extend/css/jasny-bootstrap.css vendored Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

922
dist/extend/js/jasny-bootstrap.js vendored Normal file
View File

@@ -0,0 +1,922 @@
/**
* bootstrap.js v3.0.0-p7 by @fat and @mdo
* Copyright 2013 Jasny BV
* http://www.apache.org/licenses/LICENSE-2.0
*/
if (!jQuery) { throw new Error("Bootstrap requires jQuery") }
/* ========================================================================
* Bootstrap: offcanvas.js v3.0.0-p7
* http://jasny.github.io/bootstrap/javascript.html#offcanvas
*
* Based on Boostrap collapse.js by Twitter, Inc.
* ========================================================================
* Copyright 2013 Jasny, BV.
*
* Licensed under the Apache License, Version 2.0 (the "License")
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ======================================================================== */
+function ($) { "use strict";
// OFFCANVAS PUBLIC CLASS DEFINITION
// ================================
var OffCanvas = function (element, options) {
this.$element = $(element)
this.$canvas = options.canvas ? $(options.canvas) : this.$element
this.options = $.extend({}, OffCanvas.DEFAULTS, options)
this.transitioning = null
this.calcTransform()
// If transform or transition aren't supported just slide the element
if (!this.transform) this.$canvas = this.$element
if (this.options.placement === 'auto')
this.options.placement = this.calcPlacement()
if (this.options.recalc) {
this.calcClone()
$(window).on('resize.bs.offcanvas', $.proxy(this.recalc, this))
}
if (this.options.autohide)
$(document).on('click.bs.offcanvas', $.proxy(this.autohide, this))
// Workaround: IE doesn't move fixed elements with translate
var isIE = window.navigator.appName == 'Microsoft Internet Explorer'
if (isIE && this.$canvas !== this.$element) {
var elems = this.$canvas.find('*').filter(function() {
return $(this).css("position") === 'fixed'
})
this.$canvas = this.$canvas.add(elems)
}
if (this.options.toggle) this.toggle()
}
OffCanvas.DEFAULTS = {
toggle: true,
placement: 'auto',
autohide: true,
recalc: true
}
OffCanvas.prototype.calcTransform = function() {
this.transform = false
// Don't use transform with jQuery animations just to move the element
if (!$.support.transition && this.$canvas === this.$element) return
var $el = $('<div style="visibility: hidden"></div>'),
props = {
'transform':'transform',
'webkitTransform':'-webkit-transform',
'OTransform':'-o-transform',
'msTransform':'-ms-transform',
'MozTransform':'-moz-transform'
}
// Add it to the body to get the computed style.
$el.appendTo($('body'))
for (var prop in props) {
if ($el[0].style[prop] === undefined) continue
$el[0].style[prop] = "translate3d(1px,1px,1px)"
var m = window.getComputedStyle($el[0]).getPropertyValue(props[prop])
this.transform = props[prop]
this.translate = m.match(/^matrix3d/) ? 'translate3d' : 'translate'
break
}
$el.remove()
}
OffCanvas.prototype.calcPlacement = function () {
var horizontal = $(window).width() / this.$element.width(),
vertical = $(window).height() / this.$element.height(),
$element = this.$element
function ab(a, b) {
if ($element.css(b) === 'auto') return a
if ($element.css(a) === 'auto') return b
var size_a = parseInt($element.css(a), 10),
size_b = parseInt($element.css(b), 10)
return size_a > size_b ? b : a
}
return horizontal > vertical ? ab('left', 'right') : ab('top', 'bottom')
}
OffCanvas.prototype.offset = function () {
switch (this.options.placement) {
case 'left':
case 'right': return this.$element.outerWidth()
case 'top':
case 'bottom': return this.$element.outerHeight()
}
}
OffCanvas.prototype.slideTransform = function (offset, callback) {
var placement = this.options.placement,
prop = this.transform
offset *= (placement === 'right' || placement === 'bottom' ? -1 : 1)
var css = placement === 'left' || placement === 'right' ?
"{}px, 0" : "0, {}px"
if (this.translate === 'translate3d') css += ', 0'
css = this.translate + "(" + css + ")"
// Use jQuery animation if CSS transitions aren't supported
if (!$.support.transition) {
return this.$canvas.animate({ borderSpacing: offset }, {
step: function(now, fx) {
$(this).css(prop, css.replace('{}', now))
},
complete: callback,
duration: 350
})
}
this.$canvas.css(prop, css.replace('{}', offset))
this.$element
.one($.support.transition.end, callback)
.emulateTransitionEnd(350)
}
OffCanvas.prototype.slidePosition = function (offset, callback) {
// Use jQuery animation if CSS transitions aren't supported
if (!$.support.transition) {
var anim = {}
anim[this.options.placement] = offset
return this.$canvas.animate(anim, 350, callback)
}
this.$canvas.css(this.options.placement, offset)
this.$element
.one($.support.transition.end, callback)
.emulateTransitionEnd(350)
}
OffCanvas.prototype.show = function () {
if (this.transitioning || this.$canvas.hasClass('canvas-slid')) return
var startEvent = $.Event('show.bs.offcanvas')
this.$element.trigger(startEvent)
if (startEvent.isDefaultPrevented()) return
var complete = function () {
this.$canvas
.addClass('canvas-slid')
.removeClass('canvas-sliding')
this.transitioning = 0
this.$element.trigger('shown.bs.offcanvas')
}
if (!this.$element.is(':visible') || !this.transform)
this.$element.css(this.options.placement, -1 * this.offset() + "px")
this.$element.addClass('in')
this.$canvas.addClass('canvas-sliding')
if (this.$canvas != this.$element) $('body').css('overflow-x', 'hidden')
this.transitioning = 1
if (this.transform) this.slideTransform(this.offset(), $.proxy(complete, this))
else this.slidePosition(0, $.proxy(complete, this))
}
OffCanvas.prototype.hide = function (fast) {
if (this.transitioning || !this.$canvas.hasClass('canvas-slid')) return
var startEvent = $.Event('hide.bs.offcanvas')
this.$element.trigger(startEvent)
if (startEvent.isDefaultPrevented()) return
var complete = function () {
this.transitioning = 0
this.$element
.removeClass('in')
.css('left', '').css('right', '').css('top', '').css('bottom', '')
this.$canvas
.removeClass('canvas-sliding canvas-slid')
.css('transform', '')
$('body').css('overflow-x', '')
this.$element.trigger('hidden.bs.offcanvas')
}
if (fast) return complete.call(this)
this.$canvas.removeClass('canvas-slid').addClass('canvas-sliding')
this.transitioning = 1
if (this.transform) this.slideTransform(0, $.proxy(complete, this))
else this.slidePosition(-1 * this.offset(), $.proxy(complete, this))
}
OffCanvas.prototype.toggle = function () {
this[this.$canvas.hasClass('canvas-slid') ? 'hide' : 'show']()
}
OffCanvas.prototype.calcClone = function() {
this.$calcClone = this.$element.clone()
.html('')
.addClass('offcanvas-clone').removeClass('in')
.appendTo($('body'))
}
OffCanvas.prototype.recalc = function () {
if (this.$calcClone.css('display') !== 'none') this.hide(true)
}
OffCanvas.prototype.autohide = function (e) {
if ($(e.target).closest(this.$element).length === 0) this.hide()
}
// OFFCANVAS PLUGIN DEFINITION
// ==========================
var old = $.fn.offcanvas
$.fn.offcanvas = function (option) {
return this.each(function () {
var $this = $(this)
var data = $this.data('bs.offcanvas')
var options = $.extend({}, OffCanvas.DEFAULTS, $this.data(), typeof option == 'object' && option)
if (!data) $this.data('bs.offcanvas', (data = new OffCanvas(this, options)))
if (typeof option == 'string') data[option]()
})
}
$.fn.offcanvas.Constructor = OffCanvas
// OFFCANVAS NO CONFLICT
// ====================
$.fn.offcanvas.noConflict = function () {
$.fn.offcanvas = old
return this
}
// OFFCANVAS DATA-API
// =================
$(document).on('click.bs.offcanvas.data-api', '[data-toggle=offcanvas]', function (e) {
var $this = $(this), href
var target = $this.attr('data-target')
|| e.preventDefault()
|| (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
var $canvas = $(target)
var data = $canvas.data('bs.offcanvas')
var option = data ? 'toggle' : $this.data()
e.stopPropagation()
if (data) data.toggle()
else $canvas.offcanvas(option)
})
}(window.jQuery)
/* ============================================================
* Bootstrap: rowlink.js v3.0.0-p7
* http://jasny.github.io/bootstrap/javascript.html#rowlink
* ============================================================
* Copyright 2012 Jasny BV, Netherlands.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ============================================================ */
+function ($) { "use strict";
var Rowlink = function (element, options) {
this.$element = $(element)
this.options = $.extend({}, Rowlink.DEFAULTS, options)
this.$element.on('click.bs.rowlink', 'td:not(.rowlink-skip)', $.proxy(this.click, this))
}
Rowlink.DEFAULTS = {
target: "a"
}
Rowlink.prototype.click = function(e) {
var target = $(e.currentTarget).closest('tr').find(this.options.target)[0]
if ($(e.target)[0] === target) return
e.preventDefault();
if (target.click) {
target.click()
} else if(document.createEvent) {
var evt = document.createEvent("MouseEvents");
evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
target.dispatchEvent(evt);
}
}
// ROWLINK PLUGIN DEFINITION
// ===========================
$.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)))
})
}
$.fn.rowlink.Constructor = Rowlink
// ROWLINK NO CONFLICT
// ====================
$.fn.rowlink.noConflict = function () {
$.fn.inputmask = old
return this
}
// ROWLINK DATA-API
// ==================
$(document).on('click.bs.rowlink.data-api', '[data-link="row"]', function (e) {
var $this = $(this)
if ($this.data('rowlink')) return
$this.rowlink($this.data())
$(e.target).trigger('click.bs.rowlink')
})
}(window.jQuery)
/* ===========================================================
* Bootstrap: inputmask.js v3.0.0-p7
* http://jasny.github.io/bootstrap/javascript.html#inputmask
* Based on Masked Input plugin by Josh Bush (digitalbush.com)
* ===========================================================
* Copyright 2012 Jasny BV, Netherlands.
*
* Licensed under the Apache License, Version 2.0 (the "License")
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ========================================================== */
+function ($) { "use strict";
var isIphone = (window.orientation !== undefined)
var isAndroid = navigator.userAgent.toLowerCase().indexOf("android") > -1
var isIE = window.navigator.appName == 'Microsoft Internet Explorer'
// INPUTMASK PUBLIC CLASS DEFINITION
// =================================
var Inputmask = function (element, options) {
if (isAndroid) return // No support because caret positioning doesn't work on Android
this.$element = $(element)
this.options = $.extend({}, Inputmask.DEFAULS, options)
this.mask = String(this.options.mask)
this.init()
this.listen()
this.checkVal() //Perform initial check for existing values
}
Inputmask.DEFAULS = {
mask: "",
placeholder: "_",
definitions: {
'9': "[0-9]",
'a': "[A-Za-z]",
'?': "[A-Za-z0-9]",
'*': "."
}
}
Inputmask.prototype.init = function() {
var defs = this.options.definitions
var len = this.mask.length
this.tests = []
this.partialPosition = this.mask.length
this.firstNonMaskPos = null
$.each(this.mask.split(""), $.proxy(function(i, c) {
if (c == '?') {
len--
this.partialPosition = i
} else if (defs[c]) {
this.tests.push(new RegExp(defs[c]))
if(this.firstNonMaskPos === null)
this.firstNonMaskPos = this.tests.length - 1
} else {
this.tests.push(null)
}
}, this))
this.buffer = $.map(this.mask.split(""), $.proxy(function(c, i) {
if (c != '?') return defs[c] ? this.options.placeholder : c
}, this))
this.focusText = this.$element.val()
this.$element.data("rawMaskFn", $.proxy(function() {
return $.map(this.buffer, function(c, i) {
return this.tests[i] && c != this.options.placeholder ? c : null
}).join('')
}, this))
}
Inputmask.prototype.listen = function() {
if (this.$element.attr("readonly")) return
var pasteEventName = (isIE ? 'paste' : 'input') + ".mask"
this.$element
.on("unmask.bs.inputmask", $.proxy(this.unmask, this))
.on("focus.bs.inputmask", $.proxy(this.focusEvent, this))
.on("blur.bs.inputmask", $.proxy(this.blurEvent, this))
.on("keydown.bs.inputmask", $.proxy(this.keydownEvent, this))
.on("keypress.bs.inputmask", $.proxy(this.keypressEvent, this))
.on(pasteEventName, $.proxy(this.pasteEvent, this))
}
//Helper Function for Caret positioning
Inputmask.prototype.caret = function(begin, end) {
if (this.$element.length === 0) return
if (typeof begin == 'number') {
end = (typeof end == 'number') ? end : begin
return this.$element.each(function() {
if (this.setSelectionRange) {
this.setSelectionRange(begin, end)
} else if (this.createTextRange) {
var range = this.createTextRange()
range.collapse(true)
range.moveEnd('character', end)
range.moveStart('character', begin)
range.select()
}
})
} else {
if (this.$element[0].setSelectionRange) {
begin = this.$element[0].selectionStart
end = this.$element[0].selectionEnd
} else if (document.selection && document.selection.createRange) {
var range = document.selection.createRange()
begin = 0 - range.duplicate().moveStart('character', -100000)
end = begin + range.text.length
}
return {
begin: begin,
end: end
}
}
}
Inputmask.prototype.seekNext = function(pos) {
var len = this.mask.length
while (++pos <= len && !this.tests[pos]);
return pos
}
Inputmask.prototype.seekPrev = function(pos) {
while (--pos >= 0 && !this.tests[pos]);
return pos
}
Inputmask.prototype.shiftL = function(begin,end) {
var len = this.mask.length
if(begin<0) return
for (var i = begin,j = this.seekNext(end); i < len; i++) {
if (this.tests[i]) {
if (j < len && this.tests[i].test(this.buffer[j])) {
this.buffer[i] = this.buffer[j]
this.buffer[j] = this.options.placeholder
} else
break
j = this.seekNext(j)
}
}
this.writeBuffer()
this.caret(Math.max(this.firstNonMaskPos, begin))
}
Inputmask.prototype.shiftR = function(pos) {
var len = this.mask.length
for (var i = pos, c = this.options.placeholder; i < len; i++) {
if (this.tests[i]) {
var j = this.seekNext(i)
var t = this.buffer[i]
this.buffer[i] = c
if (j < len && this.tests[j].test(t))
c = t
else
break
}
}
},
Inputmask.prototype.unmask = function() {
this.$element
.unbind(".mask")
.removeData("inputmask")
}
Inputmask.prototype.focusEvent = function() {
this.focusText = this.$element.val()
var len = this.mask.length
var pos = this.checkVal()
this.writeBuffer()
var that = this
var moveCaret = function() {
if (pos == len)
that.caret(0, pos)
else
that.caret(pos)
}
moveCaret()
setTimeout(moveCaret, 50)
}
Inputmask.prototype.blurEvent = function() {
this.checkVal()
if (this.$element.val() !== this.focusText)
this.$element.trigger('change')
}
Inputmask.prototype.keydownEvent = function(e) {
var k=e.which
//backspace, delete, and escape get special treatment
if (k == 8 || k == 46 || (isIphone && k == 127)) {
var pos = this.caret(),
begin = pos.begin,
end = pos.end
if (end-begin === 0) {
begin = k!=46 ? this.seekPrev(begin) : (end=this.seekNext(begin-1))
end = k==46 ? this.seekNext(end) : end
}
this.clearBuffer(begin, end)
this.shiftL(begin,end-1)
return false
} else if (k == 27) {//escape
this.$element.val(this.focusText)
this.caret(0, this.checkVal())
return false
}
}
Inputmask.prototype.keypressEvent = function(e) {
var len = this.mask.length
var k = e.which,
pos = this.caret()
if (e.ctrlKey || e.altKey || e.metaKey || k<32) {//Ignore
return true
} else if (k) {
if (pos.end - pos.begin !== 0) {
this.clearBuffer(pos.begin, pos.end)
this.shiftL(pos.begin, pos.end-1)
}
var p = this.seekNext(pos.begin - 1)
if (p < len) {
var c = String.fromCharCode(k)
if (this.tests[p].test(c)) {
this.shiftR(p)
this.buffer[p] = c
this.writeBuffer()
var next = this.seekNext(p)
this.caret(next)
}
}
return false
}
}
Inputmask.prototype.pasteEvent = function() {
var that = this
setTimeout(function() {
that.caret(that.checkVal(true))
}, 0)
}
Inputmask.prototype.clearBuffer = function(start, end) {
var len = this.mask.length
for (var i = start; i < end && i < len; i++) {
if (this.tests[i])
this.buffer[i] = this.options.placeholder
}
}
Inputmask.prototype.writeBuffer = function() {
return this.$element.val(this.buffer.join('')).val()
}
Inputmask.prototype.checkVal = function(allow) {
var len = this.mask.length
//try to place characters where they belong
var test = this.$element.val()
var lastMatch = -1
for (var i = 0, pos = 0; i < len; i++) {
if (this.tests[i]) {
this.buffer[i] = this.options.placeholder
while (pos++ < test.length) {
var c = test.charAt(pos - 1)
if (this.tests[i].test(c)) {
this.buffer[i] = c
lastMatch = i
break
}
}
if (pos > test.length)
break
} else if (this.buffer[i] == test.charAt(pos) && i != this.partialPosition) {
pos++
lastMatch = i
}
}
if (!allow && lastMatch + 1 < this.partialPosition) {
this.$element.val("")
this.clearBuffer(0, len)
} else if (allow || lastMatch + 1 >= this.partialPosition) {
this.writeBuffer()
if (!allow) this.$element.val(this.$element.val().substring(0, lastMatch + 1))
}
return (this.partialPosition ? i : this.firstNonMaskPos)
}
// INPUTMASK PLUGIN DEFINITION
// ===========================
var old = $.fn.inputmask
$.fn.inputmask = function (options) {
return this.each(function () {
var $this = $(this)
var data = $this.data('inputmask')
if (!data) $this.data('inputmask', (data = new Inputmask(this, options)))
})
}
$.fn.inputmask.Constructor = Inputmask
// INPUTMASK NO CONFLICT
// ====================
$.fn.inputmask.noConflict = function () {
$.fn.inputmask = old
return this
}
// INPUTMASK DATA-API
// ==================
$(document).on('focus.bs.inputmask.data-api', '[data-mask]', function (e) {
var $this = $(this)
if ($this.data('inputmask')) return
$this.inputmask($this.data())
})
}(window.jQuery)
/* ===========================================================
* Bootstrap: fileinput.js v3.0.0-p7
* http://jasny.github.com/bootstrap/javascript.html#fileinput
* ===========================================================
* Copyright 2012 Jasny BV, Netherlands.
*
* Licensed under the Apache License, Version 2.0 (the "License")
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ========================================================== */
+function ($) { "use strict";
var isIE = window.navigator.appName == 'Microsoft Internet Explorer'
// FILEUPLOAD PUBLIC CLASS DEFINITION
// =================================
var Fileupload = function (element, options) {
this.$element = $(element)
this.type = this.$element.data('uploadtype') || (this.$element.find('.thumbnail').length > 0 ? "image" : "file")
this.$input = this.$element.find(':file')
if (this.$input.length === 0) return
this.name = this.$input.attr('name') || options.name
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.$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)
this.original = {
exists: this.$element.hasClass('fileinput-exists'),
preview: this.$preview.html(),
hiddenVal: this.$hidden.val()
}
this.listen()
}
Fileupload.prototype.listen = function() {
this.$input.on('change.bs.fileinput', $.proxy(this.change, this))
$(this.$input[0].form).on('reset.bs.fileinput', $.proxy(this.reset, this))
this.$element.find('[data-trigger="fileinput"]').on('click.bs.fileinput', $.proxy(this.trigger, this))
this.$element.find('[data-dismiss="fileinput"]').on('click.bs.fileinput', $.proxy(this.clear, this))
},
Fileupload.prototype.change = function(e) {
if (e.target.files === undefined) e.target.files = e.target && e.target.value ? [ {name: e.target.value.replace(/^.+\\/, '')} ] : []
if (e.target.files.length === 0) return
this.$hidden.val('')
this.$hidden.attr('name', '')
this.$input.attr('name', this.name)
var file = e.target.files[0]
if (this.type === "image" && this.$preview.length > 0 && (typeof file.type !== "undefined" ? file.type.match('image.*') : 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)
e.target.files[0].result = re.target.result
// if parent has max-height, using `(max-)height: 100%` on child doesn't take padding and border into account
if (preview.css('max-height') != 'none') $img.css('max-height', parseInt(preview.css('max-height'), 10) - parseInt(preview.css('padding-top'), 10) - parseInt(preview.css('padding-bottom'), 10) - parseInt(preview.css('border-top'), 10) - parseInt(preview.css('border-bottom'), 10))
preview.html($img)
element.addClass('fileinput-exists').removeClass('fileinput-new')
this.$element.trigger('change.bs.fileinput', e.target.files)
}
reader.readAsDataURL(file)
} else {
this.$preview.text(file)
this.$element.addClass('fileinput-exists').removeClass('fileinput-new')
this.$element.trigger('change.bs.fileinput')
}
},
Fileupload.prototype.clear = function(e) {
if (e) e.preventDefault()
this.$hidden.val('')
this.$hidden.attr('name', this.name)
this.$input.attr('name', '')
//ie8+ doesn't support changing the value of input with type=file so clone instead
if (isIE) {
var inputClone = this.$input.clone(true);
this.$input.after(inputClone);
this.$input.remove();
this.$input = inputClone;
} else {
this.$input.val('')
}
this.$preview.html('')
this.$element.addClass('fileinput-new').removeClass('fileinput-exists')
if (e !== false) {
this.$input.trigger('change')
this.$element.trigger('clear.bs.fileinput')
}
},
Fileupload.prototype.reset = function() {
this.clear(false)
this.$hidden.val(this.original.hiddenVal)
this.$preview.html(this.original.preview)
if (this.original.exists) this.$element.addClass('fileinput-exists').removeClass('fileinput-new')
else this.$element.addClass('fileinput-new').removeClass('fileinput-exists')
this.$element.trigger('reset.bs.fileinput')
},
Fileupload.prototype.trigger = function(e) {
this.$input.trigger('click')
e.preventDefault()
}
// FILEUPLOAD PLUGIN DEFINITION
// ===========================
$.fn.fileinput = function (options) {
return this.each(function () {
var $this = $(this)
, data = $this.data('fileinput')
if (!data) $this.data('fileinput', (data = new Fileupload(this, options)))
if (typeof options == 'string') data[options]()
})
}
$.fn.fileinput.Constructor = Fileupload
// FILEUPLOAD DATA-API
// ==================
$(document).on('click.fileinput.data-api', '[data-provides="fileinput"]', function (e) {
var $this = $(this)
if ($this.data('fileinput')) return
$this.fileinput($this.data())
var $target = $(e.target).closest('[data-dismiss="fileinput"],[data-trigger="fileinput"]');
if ($target.length > 0) {
e.preventDefault()
$target.trigger('click.bs.fileinput')
}
})
}(window.jQuery)

6
dist/extend/js/jasny-bootstrap.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -2378,7 +2378,7 @@ if (!jQuery) { throw new Error("Bootstrap requires jQuery") }
$(e.target).trigger('click.bs.rowlink')
})
}(window.jQuery);
}(window.jQuery)
/* ===========================================================
* Bootstrap: inputmask.js v3.0.0-p7
@@ -2738,7 +2738,7 @@ if (!jQuery) { throw new Error("Bootstrap requires jQuery") }
$this.inputmask($this.data())
})
}(window.jQuery);
}(window.jQuery)
/* ===========================================================
* Bootstrap: fileinput.js v3.0.0-p7
@@ -2913,4 +2913,4 @@ if (!jQuery) { throw new Error("Bootstrap requires jQuery") }
}
})
}(window.jQuery);
}(window.jQuery)

File diff suppressed because one or more lines are too long

View File

@@ -171,4 +171,4 @@
}
})
}(window.jQuery);
}(window.jQuery)

View File

@@ -356,4 +356,4 @@
$this.inputmask($this.data())
})
}(window.jQuery);
}(window.jQuery)

View File

@@ -79,4 +79,4 @@
$(e.target).trigger('click.bs.rowlink')
})
}(window.jQuery);
}(window.jQuery)

39
less/alerts-fixed.less Normal file
View 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) {
.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) {
.border-top-radius(@alert-border-radius);
border-width: 1px 1px 0 1px;
}
}

View File

@@ -67,42 +67,4 @@
}
// Fixed
//
// 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) {
.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) {
.border-top-radius(@alert-border-radius);
border-width: 1px 1px 0 1px;
}
}
@import "alerts-fixed.less";

1
less/bootstrap.less vendored
View File

@@ -24,7 +24,6 @@
@import "tables.less";
@import "forms.less";
@import "buttons.less";
@import "button-labels.less";
// Components
@import "component-animations.less";

View File

@@ -1,4 +1,3 @@
//
// Labels for buttons
// --------------------------------------------------

View File

@@ -158,3 +158,5 @@ input[type="button"] {
width: 100%;
}
}
@import "button-labels.less";

View File

@@ -0,0 +1,9 @@
// Smooth sizing container
// -------------------------
@media (min-width: 1px) {
.container-smooth {
max-width: @container-lg-desktop;
}
}

View File

@@ -344,3 +344,5 @@
.col-lg-offset-10 { margin-left: percentage((10/ @grid-columns)); }
.col-lg-offset-11 { margin-left: percentage((11/ @grid-columns)); }
}
@import "grid-container-smooth.less";

27
less/jasny-bootstrap.less Normal file
View File

@@ -0,0 +1,27 @@
/*!
* Jasny extension p7 to Bootstrap v3.0.0
*
* Copyright 2013 Twitter, Inc
* Licensed under the Apache License v2.0
* http://www.apache.org/licenses/LICENSE-2.0
*
* Designed and built with all the love in the world by @mdo and @fat.
*/
// Core variables and mixins
@import "variables.less";
@import "mixins.less";
// Core CSS
@import "grid-container-smooth.less";
@import "buttons.less";
// Components
@import "nav-tab-alignment.less";
@import "navmenu.less";
@import "alerts-fixed.less";
// Components w/ JavaScript
@import "offcanvas.less";
@import "rowlink.less";
@import "fileinput.less";

View 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);
}
}

View File

@@ -205,104 +205,7 @@
}
}
// 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);
}
}
@import "nav-tab-alignment.less";
// Dropdowns
// -------------------------