mirror of
https://github.com/jasny/bootstrap.git
synced 2026-04-24 03:00:49 -04:00
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:
38
Gruntfile.js
38
Gruntfile.js
@@ -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'
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
@@ -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)!
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
@@ -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">
|
||||
|
||||
50
css.html
50
css.html
@@ -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><head></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><head></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>
|
||||
|
||||
|
||||
|
||||
137
customize.html
137
customize.html
@@ -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>
|
||||
|
||||
6
dist/css/bootstrap.css
vendored
6
dist/css/bootstrap.css
vendored
@@ -1393,6 +1393,12 @@ pre code {
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 1px) {
|
||||
.container-smooth {
|
||||
max-width: 1170px;
|
||||
}
|
||||
}
|
||||
|
||||
table {
|
||||
max-width: 100%;
|
||||
background-color: transparent;
|
||||
|
||||
2
dist/css/bootstrap.min.css
vendored
2
dist/css/bootstrap.min.css
vendored
File diff suppressed because one or more lines are too long
1000
dist/extend/css/jasny-bootstrap.css
vendored
Normal file
1000
dist/extend/css/jasny-bootstrap.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
9
dist/extend/css/jasny-bootstrap.min.css
vendored
Normal file
9
dist/extend/css/jasny-bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
922
dist/extend/js/jasny-bootstrap.js
vendored
Normal file
922
dist/extend/js/jasny-bootstrap.js
vendored
Normal 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
6
dist/extend/js/jasny-bootstrap.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
6
dist/js/bootstrap.js
vendored
6
dist/js/bootstrap.js
vendored
@@ -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)
|
||||
|
||||
2
dist/js/bootstrap.min.js
vendored
2
dist/js/bootstrap.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -171,4 +171,4 @@
|
||||
}
|
||||
})
|
||||
|
||||
}(window.jQuery);
|
||||
}(window.jQuery)
|
||||
|
||||
@@ -356,4 +356,4 @@
|
||||
$this.inputmask($this.data())
|
||||
})
|
||||
|
||||
}(window.jQuery);
|
||||
}(window.jQuery)
|
||||
|
||||
@@ -79,4 +79,4 @@
|
||||
$(e.target).trigger('click.bs.rowlink')
|
||||
})
|
||||
|
||||
}(window.jQuery);
|
||||
}(window.jQuery)
|
||||
|
||||
39
less/alerts-fixed.less
Normal file
39
less/alerts-fixed.less
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) {
|
||||
.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;
|
||||
}
|
||||
}
|
||||
@@ -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
1
less/bootstrap.less
vendored
@@ -24,7 +24,6 @@
|
||||
@import "tables.less";
|
||||
@import "forms.less";
|
||||
@import "buttons.less";
|
||||
@import "button-labels.less";
|
||||
|
||||
// Components
|
||||
@import "component-animations.less";
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
//
|
||||
// Labels for buttons
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
@@ -158,3 +158,5 @@ input[type="button"] {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
@import "button-labels.less";
|
||||
|
||||
9
less/grid-container-smooth.less
Normal file
9
less/grid-container-smooth.less
Normal file
@@ -0,0 +1,9 @@
|
||||
// Smooth sizing container
|
||||
// -------------------------
|
||||
|
||||
@media (min-width: 1px) {
|
||||
.container-smooth {
|
||||
max-width: @container-lg-desktop;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
27
less/jasny-bootstrap.less
Normal 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";
|
||||
97
less/nav-tab-alignment.less
Normal file
97
less/nav-tab-alignment.less
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);
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
// -------------------------
|
||||
|
||||
Reference in New Issue
Block a user