mirror of
https://github.com/jasny/bootstrap.git
synced 2026-04-24 03:00:49 -04:00
Compare commits
52 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f4705f17fc | ||
|
|
c12018a0bd | ||
|
|
1dfd002bba | ||
|
|
04e4586372 | ||
|
|
c6541bfe45 | ||
|
|
73f80614b6 | ||
|
|
1e90ae4779 | ||
|
|
a088dad1c7 | ||
|
|
2712c97e85 | ||
|
|
d7c2eb8c91 | ||
|
|
3c3274093a | ||
|
|
662c5e2b3a | ||
|
|
e86f72dd03 | ||
|
|
46c665f161 | ||
|
|
9fd67af87c | ||
|
|
10b81be776 | ||
|
|
e822b1b3bf | ||
|
|
285689081d | ||
|
|
1001ad214d | ||
|
|
249cb84f6b | ||
|
|
660e376b96 | ||
|
|
e919330916 | ||
|
|
24f8bffbaf | ||
|
|
e5b9930599 | ||
|
|
8fd9aca993 | ||
|
|
0038dd8c9f | ||
|
|
27794ba4e3 | ||
|
|
9e28a9b2bc | ||
|
|
18116c5cd3 | ||
|
|
2336197e3a | ||
|
|
ee5a80a6c3 | ||
|
|
4dc46204b4 | ||
|
|
d5d4c5bd62 | ||
|
|
626d773366 | ||
|
|
a8a87b1958 | ||
|
|
3769a8a8fc | ||
|
|
1640650604 | ||
|
|
4c53740597 | ||
|
|
ca1145ca0b | ||
|
|
d87bea51c2 | ||
|
|
e9a6df2cbd | ||
|
|
90b09cb3f8 | ||
|
|
ec797fb799 | ||
|
|
36613f1655 | ||
|
|
2ac056ab82 | ||
|
|
523965b3d5 | ||
|
|
59aef49163 | ||
|
|
ac9e37fc64 | ||
|
|
00a5a2d55b | ||
|
|
9b5357120e | ||
|
|
a43e720494 | ||
|
|
32a5370467 |
32
Gruntfile.js
32
Gruntfile.js
@@ -1,8 +1,8 @@
|
||||
/*!
|
||||
* Bootstrap's Gruntfile
|
||||
* http://getbootstrap.com
|
||||
* Copyright 2013-2014 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* Jasny Bootstrap's Gruntfile
|
||||
* http://jasny.github.io/bootstrap
|
||||
* Copyright 2013-2014 Arnold Daniels.
|
||||
* Licensed under Apache License 2.0 (https://github.com/jasny/bootstrap/blob/master/LICENSE)
|
||||
*/
|
||||
|
||||
module.exports = function (grunt) {
|
||||
@@ -98,6 +98,7 @@ module.exports = function (grunt) {
|
||||
},
|
||||
bootstrap: {
|
||||
src: [
|
||||
'js/transition.js',
|
||||
'js/offcanvas.js',
|
||||
'js/rowlink.js',
|
||||
'js/inputmask.js',
|
||||
@@ -298,14 +299,14 @@ module.exports = function (grunt) {
|
||||
}
|
||||
},
|
||||
|
||||
sed: {
|
||||
replace: {
|
||||
versionNumber: {
|
||||
pattern: (function () {
|
||||
var old = grunt.option('oldver');
|
||||
return old ? RegExp.quote(old) : old;
|
||||
})(),
|
||||
replacement: grunt.option('newver'),
|
||||
recursive: true
|
||||
src: ['*.js', '*.md', '*.json', '*.yml', 'js/*.js'],
|
||||
overwrite: true,
|
||||
replacements: [{
|
||||
from: grunt.option('oldver'),
|
||||
to: grunt.option('newver')
|
||||
}]
|
||||
}
|
||||
},
|
||||
|
||||
@@ -371,10 +372,13 @@ module.exports = function (grunt) {
|
||||
// Default task.
|
||||
grunt.registerTask('default', ['dist', 'build-customizer']);
|
||||
|
||||
// Documentation task.
|
||||
grunt.registerTask('docs', ['jekyll', 'dist-docs']);
|
||||
|
||||
// Version numbering task.
|
||||
// grunt change-version-number --oldver=A.B.C --newver=X.Y.Z
|
||||
// This can be overzealous, so its changes should always be manually reviewed!
|
||||
grunt.registerTask('change-version-number', 'sed');
|
||||
grunt.registerTask('change-version-number', 'replace');
|
||||
|
||||
// task for building customizer
|
||||
grunt.registerTask('build-customizer', ['build-customizer-html', 'build-raw-files']);
|
||||
@@ -385,6 +389,6 @@ module.exports = function (grunt) {
|
||||
});
|
||||
|
||||
// Task for updating the npm packages used by the Travis build.
|
||||
grunt.registerTask('update-shrinkwrap', ['exec:npmUpdate', 'exec:npmShrinkWrap', '_update-shrinkwrap']);
|
||||
grunt.registerTask('_update-shrinkwrap', function () { updateShrinkwrap.call(this, grunt); });
|
||||
grunt.registerTask('update-shrinkwrap', ['exec:npmUpdate', 'exec:npmShrinkWrap', '∆update-shrinkwrap']);
|
||||
grunt.registerTask('∆update-shrinkwrap', function () { updateShrinkwrap.call(this, grunt); });
|
||||
};
|
||||
|
||||
72
README.md
72
README.md
@@ -1,6 +1,6 @@
|
||||
# [Jasny Bootstrap](http://jasny.github.io/bootstrap/) [](http://travis-ci.org/jasny/bootstrap)[](https://david-dm.org/jasny/bootstrap#info=devDependencies)
|
||||
|
||||
Jasny Bootstrap is a fork of the famous [Twitter Bootstrap](http://getbootstrap.com/) with added components.
|
||||
Jasny Bootstrap is an extension of the famous [Twitter Bootstrap](http://getbootstrap.com/), adding the following components:
|
||||
|
||||
* [Button labels](http://jasny.github.io/bootstrap/css/#buttons-labels)
|
||||
* [Off canvas navmenu](http://jasny.github.io/bootstrap/components/#navmenu)
|
||||
@@ -16,9 +16,9 @@ To get started, check out <http://jasny.github.io/bootstrap>!
|
||||
|
||||
Three quick start options are available:
|
||||
|
||||
* [Download the latest release](https://github.com/jasny/bootstrap/releases/tag/v3.0.0-p7).
|
||||
* [Download the latest release](https://github.com/jasny/bootstrap/releases/download/v3.1.0/jasny-bootstrap-3.1.0-dist.zip).
|
||||
* Clone the repo: `git clone git://github.com/jasny/bootstrap.git`.
|
||||
* Install with [Bower](http://bower.io): `bower install bootstrap=jasny/bootstrap`. To install Jasny Bootstrap next to Twitter Bootstrap use `bower install jasny-bootstrap=jasny/bootstrap`.
|
||||
* Install with [Bower](http://bower.io): `bower install bootstrap=jasny-bootstrap`.
|
||||
|
||||
Read the [Getting Started page](http://jasny.github.io/bootstrap/getting-started/) for information on the framework contents, templates and examples, and more.
|
||||
|
||||
@@ -27,28 +27,7 @@ Read the [Getting Started page](http://jasny.github.io/bootstrap/getting-started
|
||||
Within the download you'll find the following directories and files, logically grouping common assets and providing both compiled and minified variations. You'll see something like this:
|
||||
|
||||
```
|
||||
bootstrap/
|
||||
├── css/
|
||||
│ ├── bootstrap.css
|
||||
│ ├── bootstrap.min.css
|
||||
│ ├── bootstrap-theme.css
|
||||
│ └── bootstrap-theme.min.css
|
||||
├── js/
|
||||
│ ├── bootstrap.js
|
||||
│ └── bootstrap.min.js
|
||||
└── fonts/
|
||||
├── glyphicons-halflings-regular.eot
|
||||
├── glyphicons-halflings-regular.svg
|
||||
├── glyphicons-halflings-regular.ttf
|
||||
└── glyphicons-halflings-regular.woff
|
||||
```
|
||||
|
||||
We provide compiled CSS and JS (`bootstrap.*`), as well as compiled and minified CSS and JS (`bootstrap.min.*`). Fonts from Glyphicons are included, as is the optional Bootstrap theme.
|
||||
|
||||
Alternatively you can extend Twitter Bootstrap by downloading <code>jasny-bootstrap.*</code> files from the extension package, in conjunction with the original Twitter Bootstrap files or a custom build of Bootstrap. The structure of (the compiled) Jasny Bootstrap extension package is:
|
||||
|
||||
```
|
||||
extend/
|
||||
jasny-bootstrap/
|
||||
├── css/
|
||||
│ ├── jasny-bootstrap.css
|
||||
│ ├── jasny-bootstrap.min.css
|
||||
@@ -57,6 +36,11 @@ extend/
|
||||
└── jasny-bootstrap.min.js
|
||||
```
|
||||
|
||||
We provide compiled CSS and JS (`jasny-bootstrap.*`), as well as compiled and minified CSS and JS (`jasny-bootstrap.min.*`).
|
||||
|
||||
Jasny Bootstrap should be loaded after Twitter Bootstrap.
|
||||
|
||||
|
||||
## Bugs and feature requests
|
||||
|
||||
Have a bug or a feature request? [Please open a new issue](https://github.com/jasny/bootstrap/issues). Before opening any issue, please search for existing issues and read the [Issue Guidelines](https://github.com/necolas/issue-guidelines), written by [Nicolas Gallagher](https://github.com/necolas/).
|
||||
@@ -67,7 +51,7 @@ You may use [this JS Bin](http://jsbin.com/iKumuWo/1/edit) as a template for you
|
||||
|
||||
## Documentation
|
||||
|
||||
Bootstrap's documentation, included in this repo in the root directory, is built with [Jekyll](http://jekyllrb.com) and publicly hosted on GitHub Pages at <http://jasny.github.io/bootstrap>. The docs may also be run locally.
|
||||
Jasny Bootstrap's documentation, included in this repo in the root directory, is built with [Jekyll](http://jekyllrb.com) and publicly hosted on GitHub Pages at <http://jasny.github.io/bootstrap>. The docs may also be run locally.
|
||||
|
||||
### Running documentation locally
|
||||
|
||||
@@ -80,7 +64,7 @@ Learn more about using Jekyll by reading its [documentation](http://jekyllrb.com
|
||||
|
||||
### Documentation for previous releases
|
||||
|
||||
Documentation for v2.3.2 has been made available for the time being at <http://jasny.github.io/bootstrap/2.3.2/> while folks transition to Bootstrap 3.
|
||||
Documentation for v2.3.1 has been made available for the time being at <http://jasny.github.io/bootstrap/2.3.1/> while folks transition to Bootstrap 3.
|
||||
|
||||
[Previous releases](https://github.com/jasny/bootstrap/releases) and their documentation are also available for download.
|
||||
|
||||
@@ -123,15 +107,12 @@ Should you encounter problems with installing dependencies or running Grunt comm
|
||||
|
||||
## Contributing
|
||||
|
||||
Please read through our [contributing guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md). Included are directions for opening issues, coding standards, and notes on development.
|
||||
Please read through our [contributing guidelines](https://github.com/jasny/bootstrap/blob/master/CONTRIBUTING.md). Included are directions for opening issues, coding standards, and notes on development.
|
||||
|
||||
More over, if your pull request contains JavaScript patches or features, you must include relevant unit tests. All HTML and CSS should conform to the [Code Guide](http://github.com/mdo/code-guide), maintained by [Mark Otto](http://github.com/mdo).
|
||||
|
||||
Editor preferences are available in the [editor config](.editorconfig) for easy use in common text editors. Read more and download plugins at <http://editorconfig.org>.
|
||||
|
||||
With v3.1, we're moving from the Apache 2 to the MIT license for the Bootstrap code (not the docs). Please see the [contributing guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md) for more information.
|
||||
|
||||
|
||||
## Community
|
||||
|
||||
Keep track of development and community news.
|
||||
@@ -141,28 +122,28 @@ Keep track of development and community news.
|
||||
|
||||
|
||||
|
||||
|
||||
## Versioning
|
||||
|
||||
Jasny Bootstrap follows the version of Twitter Bootstrap added with a custom patch number.
|
||||
For transparency into our release cycle and in striving to maintain backward compatibility, Jasny Bootstrap is maintained under the Semantic Versioning guidelines. Sometimes we screw up, but we'll adhere to these rules whenever possible.
|
||||
|
||||
`<major>.<minor>.<patch>-p<jasny patch>`
|
||||
Releases will be numbered with the following format:
|
||||
|
||||
`<major>.<minor>.<patch>`
|
||||
|
||||
And constructed with the following guidelines:
|
||||
|
||||
- Breaking backward compatibility **bumps the major** while resetting minor and patch
|
||||
- New additions without breaking backward compatibility **bumps the minor** while resetting the patch
|
||||
- Bug fixes and misc changes **bumps only the patch**
|
||||
|
||||
For more information on SemVer, please visit <http://semver.org/>.
|
||||
|
||||
__The major version will follow Twitter Bootstraps major version. This means backward compatibility will only be broken if Twitter Bootstrap does so.__
|
||||
|
||||
Backwards compatibility is only broken if Twitter Bootstrap also does so, in which case the major is incremented.
|
||||
|
||||
|
||||
## Authors
|
||||
|
||||
**Mark Otto**
|
||||
|
||||
+ <http://twitter.com/mdo>
|
||||
+ <http://github.com/mdo>
|
||||
|
||||
**Jacob Thornton**
|
||||
|
||||
+ <http://twitter.com/fat>
|
||||
+ <http://github.com/fat>
|
||||
|
||||
**Arnold Daniels**
|
||||
|
||||
+ [http://twitter.com/ArnoldDaniels](http://twitter.com/ArnoldDaniels)
|
||||
@@ -172,5 +153,4 @@ Backwards compatibility is only broken if Twitter Bootstrap also does so, in whi
|
||||
|
||||
## Copyright and license
|
||||
|
||||
Copyright 2013 Twitter, Inc under [the Apache 2.0 license](LICENSE).
|
||||
Copyright 2013 Jasny BV under [the Apache 2.0 license](LICENSE).
|
||||
|
||||
10
_config.yml
10
_config.yml
@@ -19,13 +19,13 @@ exclude:
|
||||
- "vendor"
|
||||
|
||||
# Custom vars
|
||||
current_version: 3.1.0
|
||||
current_version: 3.1.3
|
||||
repo: https://github.com/jasny/bootstrap
|
||||
|
||||
download:
|
||||
source: https://github.com/jasny/bootstrap/archive/v3.1.0.zip
|
||||
dist: https://github.com/jasny/bootstrap/releases/download/v3.1.0/bootstrap-3.1.0-dist.zip
|
||||
source: https://github.com/jasny/bootstrap/archive/v3.1.3.zip
|
||||
dist: https://github.com/jasny/bootstrap/releases/download/v3.1.3/jasny-bootstrap-3.1.3-dist.zip
|
||||
|
||||
cdn:
|
||||
css: //cdnjs.cloudflare.com/ajax/libs/jasny-bootstrap/3.1.0/css/jasny-bootstrap.min.css
|
||||
js: //cdnjs.cloudflare.com/ajax/libs/jasny-bootstrap/3.1.0/js/jasny-bootstrap.min.js
|
||||
css: //cdnjs.cloudflare.com/ajax/libs/jasny-bootstrap/3.1.3/css/jasny-bootstrap.min.css
|
||||
js: //cdnjs.cloudflare.com/ajax/libs/jasny-bootstrap/3.1.3/js/jasny-bootstrap.min.js
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "jasny-bootstrap",
|
||||
"version": "3.1.0",
|
||||
"version": "3.1.3",
|
||||
"main": [
|
||||
"./dist/css/jasny-bootstrap.css",
|
||||
"./dist/js/jasny-bootstrap.js"
|
||||
@@ -16,6 +16,6 @@
|
||||
],
|
||||
"dependencies": {
|
||||
"jquery": ">= 1.9.0",
|
||||
"bootstrap": ">= 3.0.0"
|
||||
"bootstrap": ">= 3.1.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,6 @@
|
||||
}
|
||||
, "license": "Apache-2.0"
|
||||
, "require": {
|
||||
"twitter/bootstrap" : ">=3.0.0"
|
||||
"twitter/bootstrap" : ">=3.1.0"
|
||||
}
|
||||
}
|
||||
|
||||
34
dist/css/jasny-bootstrap.css
vendored
34
dist/css/jasny-bootstrap.css
vendored
@@ -1,12 +1,15 @@
|
||||
/*!
|
||||
* Jasny Bootstrap v3.1.0 (http://jasny.github.io/bootstrap)
|
||||
* Jasny Bootstrap v3.1.3 (http://jasny.github.io/bootstrap)
|
||||
* Copyright 2012-2014 Arnold Daniels
|
||||
* Licensed under Apache-2.0 (https://github.com/jasny/bootstrap/blob/master/LICENSE)
|
||||
*/
|
||||
|
||||
.container-smooth {
|
||||
max-width: 1170px;
|
||||
}
|
||||
@media (min-width: 1px) {
|
||||
.container-smooth {
|
||||
max-width: 1170px;
|
||||
width: auto;
|
||||
}
|
||||
}
|
||||
.btn-labeled {
|
||||
@@ -137,7 +140,7 @@
|
||||
.navmenu,
|
||||
.navbar-offcanvas {
|
||||
width: 300px;
|
||||
height: 100%;
|
||||
height: auto;
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
border-radius: 4px;
|
||||
@@ -147,16 +150,21 @@
|
||||
.navbar-offcanvas {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
z-index: 1030;
|
||||
overflow-y: auto;
|
||||
border-radius: 0;
|
||||
}
|
||||
.navmenu-fixed-left,
|
||||
.navbar-offcanvas {
|
||||
.navbar-offcanvas.navmenu-fixed-left {
|
||||
right: auto;
|
||||
left: 0;
|
||||
border-width: 0 1px 0 0;
|
||||
}
|
||||
.navmenu-fixed-right {
|
||||
.navmenu-fixed-right,
|
||||
.navbar-offcanvas {
|
||||
right: 0;
|
||||
left: auto;
|
||||
border-width: 0 0 0 1px;
|
||||
}
|
||||
.navmenu-nav {
|
||||
@@ -515,13 +523,13 @@
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
font-size: 23px;
|
||||
cursor: pointer;
|
||||
filter: alpha(opacity=0);
|
||||
opacity: 0;
|
||||
transform: translate(-300px, 0) scale(4);
|
||||
|
||||
direction: ltr;
|
||||
}
|
||||
@@ -565,13 +573,27 @@
|
||||
.form-control .fileinput-filename {
|
||||
vertical-align: bottom;
|
||||
}
|
||||
.fileinput.input-group {
|
||||
display: table;
|
||||
}
|
||||
.fileinput.input-group > * {
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
}
|
||||
.fileinput.input-group > .btn-file {
|
||||
z-index: 1;
|
||||
}
|
||||
.fileinput-new.input-group .btn-file,
|
||||
.fileinput-new .input-group .btn-file {
|
||||
border-radius: 0 4px 4px 0;
|
||||
}
|
||||
.fileinput-new.input-group .btn-file.btn-xs,
|
||||
.fileinput-new .input-group .btn-file.btn-xs,
|
||||
.fileinput-new.input-group .btn-file.btn-sm,
|
||||
.fileinput-new .input-group .btn-file.btn-sm {
|
||||
border-radius: 0 3px 3px 0;
|
||||
}
|
||||
.fileinput-new.input-group .btn-file.btn-lg,
|
||||
.fileinput-new .input-group .btn-file.btn-lg {
|
||||
border-radius: 0 6px 6px 0;
|
||||
}
|
||||
|
||||
2
dist/css/jasny-bootstrap.css.map
vendored
2
dist/css/jasny-bootstrap.css.map
vendored
File diff suppressed because one or more lines are too long
4
dist/css/jasny-bootstrap.min.css
vendored
4
dist/css/jasny-bootstrap.min.css
vendored
File diff suppressed because one or more lines are too long
243
dist/js/jasny-bootstrap.js
vendored
243
dist/js/jasny-bootstrap.js
vendored
@@ -1,5 +1,5 @@
|
||||
/*!
|
||||
* Jasny Bootstrap v3.1.0 (http://jasny.github.io/bootstrap)
|
||||
* Jasny Bootstrap v3.1.3 (http://jasny.github.io/bootstrap)
|
||||
* Copyright 2012-2014 Arnold Daniels
|
||||
* Licensed under Apache-2.0 (https://github.com/jasny/bootstrap/blob/master/LICENSE)
|
||||
*/
|
||||
@@ -7,12 +7,61 @@
|
||||
if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScript requires jQuery') }
|
||||
|
||||
/* ========================================================================
|
||||
* Bootstrap: offcanvas.js v3.0.3-p7
|
||||
* http://jasny.github.io/bootstrap/javascript.html#offcanvas
|
||||
*
|
||||
* Based on Boostrap collapse.js by Twitter, Inc.
|
||||
* Bootstrap: transition.js v3.1.3
|
||||
* http://getbootstrap.com/javascript/#transitions
|
||||
* ========================================================================
|
||||
* Copyright 2013 Jasny, BV.
|
||||
* Copyright 2011-2014 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* ======================================================================== */
|
||||
|
||||
|
||||
+function ($) {
|
||||
'use strict';
|
||||
|
||||
// CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
|
||||
// ============================================================
|
||||
|
||||
function transitionEnd() {
|
||||
var el = document.createElement('bootstrap')
|
||||
|
||||
var transEndEventNames = {
|
||||
WebkitTransition : 'webkitTransitionEnd',
|
||||
MozTransition : 'transitionend',
|
||||
OTransition : 'oTransitionEnd otransitionend',
|
||||
transition : 'transitionend'
|
||||
}
|
||||
|
||||
for (var name in transEndEventNames) {
|
||||
if (el.style[name] !== undefined) {
|
||||
return { end: transEndEventNames[name] }
|
||||
}
|
||||
}
|
||||
|
||||
return false // explicit for ie8 ( ._.)
|
||||
}
|
||||
|
||||
if ($.support.transition !== undefined) return // Prevent conflict with Twitter Bootstrap
|
||||
|
||||
// http://blog.alexmaccaw.com/css-transitions
|
||||
$.fn.emulateTransitionEnd = function (duration) {
|
||||
var called = false, $el = this
|
||||
$(this).one($.support.transition.end, function () { called = true })
|
||||
var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
|
||||
setTimeout(callback, duration)
|
||||
return this
|
||||
}
|
||||
|
||||
$(function () {
|
||||
$.support.transition = transitionEnd()
|
||||
})
|
||||
|
||||
}(window.jQuery);
|
||||
|
||||
/* ========================================================================
|
||||
* Bootstrap: offcanvas.js v3.1.3
|
||||
* http://jasny.github.io/bootstrap/javascript/#offcanvas
|
||||
* ========================================================================
|
||||
* Copyright 2013-2014 Arnold Daniels
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License")
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -36,6 +85,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
this.$element = $(element)
|
||||
this.options = $.extend({}, OffCanvas.DEFAULTS, options)
|
||||
this.state = null
|
||||
this.placement = null
|
||||
|
||||
if (this.options.recalc) {
|
||||
this.calcClone()
|
||||
@@ -46,17 +96,23 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
$(document).on('click', $.proxy(this.autohide, this))
|
||||
|
||||
if (this.options.toggle) this.toggle()
|
||||
|
||||
if (this.options.disablescrolling) {
|
||||
this.options.disableScrolling = this.options.disablescrolling
|
||||
delete this.options.disablescrolling
|
||||
}
|
||||
}
|
||||
|
||||
OffCanvas.DEFAULTS = {
|
||||
toggle: true,
|
||||
placement: 'left',
|
||||
placement: 'auto',
|
||||
autohide: true,
|
||||
recalc: true
|
||||
recalc: true,
|
||||
disableScrolling: true
|
||||
}
|
||||
|
||||
OffCanvas.prototype.offset = function () {
|
||||
switch (this.options.placement) {
|
||||
switch (this.placement) {
|
||||
case 'left':
|
||||
case 'right': return this.$element.outerWidth()
|
||||
case 'top':
|
||||
@@ -65,26 +121,31 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
}
|
||||
|
||||
OffCanvas.prototype.calcPlacement = function () {
|
||||
var horizontal = $(window).width() / this.$element.width(),
|
||||
vertical = $(window).height() / this.$element.height()
|
||||
|
||||
if (this.options.placement !== 'auto') {
|
||||
this.placement = this.options.placement
|
||||
return
|
||||
}
|
||||
|
||||
if (!this.$element.hasClass('in')) {
|
||||
this.$element.css('visiblity', 'hidden !important').addClass('in')
|
||||
}
|
||||
|
||||
var horizontal = $(window).width() / this.$element.width()
|
||||
var vertical = $(window).height() / this.$element.height()
|
||||
|
||||
var 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)
|
||||
var size_a = parseInt(element.css(a), 10)
|
||||
var size_b = parseInt(element.css(b), 10)
|
||||
|
||||
return size_a > size_b ? b : a
|
||||
}
|
||||
|
||||
this.options.placement = horizontal > vertical ? ab('left', 'right') : ab('top', 'bottom')
|
||||
|
||||
this.placement = horizontal >= vertical ? ab('left', 'right') : ab('top', 'bottom')
|
||||
|
||||
if (this.$element.css('visibility') === 'hidden !important') {
|
||||
this.$element.removeClass('in').css('visiblity', '')
|
||||
}
|
||||
@@ -114,12 +175,12 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
// Use jQuery animation if CSS transitions aren't supported
|
||||
if (!$.support.transition) {
|
||||
var anim = {}
|
||||
anim[this.options.placement] = "+=" + offset
|
||||
anim[this.placement] = "+=" + offset
|
||||
return elements.animate(anim, 350, callback)
|
||||
}
|
||||
|
||||
var placement = this.options.placement,
|
||||
opposite = this.opposite(placement)
|
||||
var placement = this.placement
|
||||
var opposite = this.opposite(placement)
|
||||
|
||||
elements.each(function() {
|
||||
if ($(this).css(placement) !== 'auto')
|
||||
@@ -136,10 +197,12 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
|
||||
OffCanvas.prototype.disableScrolling = function() {
|
||||
var bodyWidth = $('body').width()
|
||||
var prop = 'padding-' + this.opposite(this.options.placement)
|
||||
var prop = 'padding-' + this.opposite(this.placement)
|
||||
|
||||
if ($('body').data('offcanvas-style') === undefined) $('body').data('offcanvas-style', $('body').attr('style'))
|
||||
|
||||
if ($('body').data('offcanvas-style') === undefined) {
|
||||
$('body').data('offcanvas-style', $('body').attr('style') || '')
|
||||
}
|
||||
|
||||
$('body').css('overflow', 'hidden')
|
||||
|
||||
if ($('body').width() > bodyWidth) {
|
||||
@@ -158,17 +221,22 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
this.$element.trigger(startEvent)
|
||||
if (startEvent.isDefaultPrevented()) return
|
||||
|
||||
if (this.options.placement === 'auto') this.calcPlacement()
|
||||
|
||||
this.state = 'sliding'
|
||||
|
||||
this.state = 'slide-in'
|
||||
this.calcPlacement();
|
||||
|
||||
var elements = this.getCanvasElements()
|
||||
var offset = this.offset(),
|
||||
placement = this.options.placement,
|
||||
opposite = this.opposite(placement)
|
||||
var placement = this.placement
|
||||
var opposite = this.opposite(placement)
|
||||
var offset = this.offset()
|
||||
|
||||
if (elements.index(this.$element) !== -1) {
|
||||
$(this.$element).data('offcanvas-style', $(this.$element).attr('style') || '')
|
||||
this.$element.css(placement, -1 * offset)
|
||||
this.$element.css(placement); // Workaround: Need to get the CSS property for it to be applied before the next line of code
|
||||
}
|
||||
|
||||
elements.addClass('canvas-sliding').each(function() {
|
||||
$(this).data('offcanvas-style', $(this).attr('style') || '')
|
||||
if ($(this).data('offcanvas-style') === undefined) $(this).data('offcanvas-style', $(this).attr('style') || '')
|
||||
if ($(this).css('position') === 'static') $(this).css('position', 'relative')
|
||||
if (($(this).css(placement) === 'auto' || $(this).css(placement) === '0px') &&
|
||||
($(this).css(opposite) === 'auto' || $(this).css(opposite) === '0px')) {
|
||||
@@ -176,11 +244,11 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
}
|
||||
})
|
||||
|
||||
if (elements.index(this.$element) !== -1) this.$element.css(placement, -1 * offset)
|
||||
|
||||
this.disableScrolling()
|
||||
if (this.options.disableScrolling) this.disableScrolling()
|
||||
|
||||
var complete = function () {
|
||||
if (this.state != 'slide-in') return
|
||||
|
||||
this.state = 'slid'
|
||||
|
||||
elements.removeClass('canvas-sliding').addClass('canvas-slid')
|
||||
@@ -200,18 +268,22 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
this.$element.trigger(startEvent)
|
||||
if (startEvent.isDefaultPrevented()) return
|
||||
|
||||
this.state = 'sliding'
|
||||
this.state = 'slide-out'
|
||||
|
||||
var elements = $('.canvas-slid')
|
||||
var placement = this.placement
|
||||
var offset = -1 * this.offset()
|
||||
|
||||
var complete = function () {
|
||||
if (this.state != 'slide-out') return
|
||||
|
||||
this.state = null
|
||||
|
||||
this.placement = null
|
||||
|
||||
this.$element.removeClass('in')
|
||||
|
||||
elements.removeClass('canvas-sliding')
|
||||
elements.add('body').each(function() {
|
||||
elements.add(this.$element).add('body').each(function() {
|
||||
$(this).attr('style', $(this).data('offcanvas-style')).removeData('offcanvas-style')
|
||||
})
|
||||
|
||||
@@ -226,7 +298,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
}
|
||||
|
||||
OffCanvas.prototype.toggle = function () {
|
||||
if (this.state === 'sliding') return
|
||||
if (this.state === 'slide-in' || this.state === 'slide-out') return
|
||||
this[this.state === 'slid' ? 'hide' : 'show']()
|
||||
}
|
||||
|
||||
@@ -238,17 +310,18 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
}
|
||||
|
||||
OffCanvas.prototype.recalc = function () {
|
||||
if (this.state() !== 'slid' || this.$calcClone.css('display') === 'none') return
|
||||
if (this.$calcClone.css('display') === 'none' || (this.state !== 'slid' && this.state !== 'slide-in')) return
|
||||
|
||||
var offset = -1 * this.offset()
|
||||
this.state = null
|
||||
this.placement = null
|
||||
var elements = this.getCanvasElements()
|
||||
|
||||
var placement = this.options.placement
|
||||
this.getCanvasElements().each(function() {
|
||||
$(this).css(placement, (parseInt($(this).css(placement), 10) || 0) + offset)
|
||||
}).removeClass('canvas-slid')
|
||||
this.$element.removeClass('in')
|
||||
|
||||
$('body').css('overflow', '')
|
||||
this.$element.css(placement, '').removeClass('in canvas-slid')
|
||||
elements.removeClass('canvas-slid')
|
||||
elements.add(this.$element).add('body').each(function() {
|
||||
$(this).attr('style', $(this).data('offcanvas-style')).removeData('offcanvas-style')
|
||||
})
|
||||
}
|
||||
|
||||
OffCanvas.prototype.autohide = function (e) {
|
||||
@@ -264,10 +337,10 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
return this.each(function () {
|
||||
var $this = $(this)
|
||||
var data = $this.data('bs.offcanvas')
|
||||
var options = $.extend({}, OffCanvas.DEFAULTS, $this.data(), typeof option == 'object' && option)
|
||||
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]()
|
||||
if (typeof option === 'string') data[option]()
|
||||
})
|
||||
}
|
||||
|
||||
@@ -304,10 +377,10 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
}(window.jQuery);
|
||||
|
||||
/* ============================================================
|
||||
* Bootstrap: rowlink.js v3.0.0-p7
|
||||
* http://jasny.github.io/bootstrap/javascript.html#rowlink
|
||||
* Bootstrap: rowlink.js v3.1.3
|
||||
* http://jasny.github.io/bootstrap/javascript/#rowlink
|
||||
* ============================================================
|
||||
* Copyright 2012 Jasny BV, Netherlands.
|
||||
* Copyright 2012-2014 Arnold Daniels
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -359,8 +432,8 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
$.fn.rowlink = function (options) {
|
||||
return this.each(function () {
|
||||
var $this = $(this)
|
||||
var data = $this.data('rowlink')
|
||||
if (!data) $this.data('rowlink', (data = new Rowlink(this, options)))
|
||||
var data = $this.data('bs.rowlink')
|
||||
if (!data) $this.data('bs.rowlink', (data = new Rowlink(this, options)))
|
||||
})
|
||||
}
|
||||
|
||||
@@ -380,8 +453,10 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
// ==================
|
||||
|
||||
$(document).on('click.bs.rowlink.data-api', '[data-link="row"]', function (e) {
|
||||
if ($(e.target).closest('.rowlink-skip').length !== 0) return
|
||||
|
||||
var $this = $(this)
|
||||
if ($this.data('rowlink')) return
|
||||
if ($this.data('bs.rowlink')) return
|
||||
$this.rowlink($this.data())
|
||||
$(e.target).trigger('click.bs.rowlink')
|
||||
})
|
||||
@@ -389,11 +464,12 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
}(window.jQuery);
|
||||
|
||||
/* ===========================================================
|
||||
* Bootstrap: inputmask.js v3.0.0-p7
|
||||
* http://jasny.github.io/bootstrap/javascript.html#inputmask
|
||||
* Bootstrap: inputmask.js v3.1.0
|
||||
* http://jasny.github.io/bootstrap/javascript/#inputmask
|
||||
*
|
||||
* Based on Masked Input plugin by Josh Bush (digitalbush.com)
|
||||
* ===========================================================
|
||||
* Copyright 2012 Jasny BV, Netherlands.
|
||||
* Copyright 2012-2014 Arnold Daniels
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License")
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -421,7 +497,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
if (isAndroid) return // No support because caret positioning doesn't work on Android
|
||||
|
||||
this.$element = $(element)
|
||||
this.options = $.extend({}, Inputmask.DEFAULS, options)
|
||||
this.options = $.extend({}, Inputmask.DEFAULTS, options)
|
||||
this.mask = String(this.options.mask)
|
||||
|
||||
this.init()
|
||||
@@ -430,13 +506,13 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
this.checkVal() //Perform initial check for existing values
|
||||
}
|
||||
|
||||
Inputmask.DEFAULS = {
|
||||
Inputmask.DEFAULTS = {
|
||||
mask: "",
|
||||
placeholder: "_",
|
||||
definitions: {
|
||||
'9': "[0-9]",
|
||||
'a': "[A-Za-z]",
|
||||
'?': "[A-Za-z0-9]",
|
||||
'w': "[A-Za-z0-9]",
|
||||
'*': "."
|
||||
}
|
||||
}
|
||||
@@ -719,9 +795,9 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
$.fn.inputmask = function (options) {
|
||||
return this.each(function () {
|
||||
var $this = $(this)
|
||||
var data = $this.data('inputmask')
|
||||
var data = $this.data('bs.inputmask')
|
||||
|
||||
if (!data) $this.data('inputmask', (data = new Inputmask(this, options)))
|
||||
if (!data) $this.data('bs.inputmask', (data = new Inputmask(this, options)))
|
||||
})
|
||||
}
|
||||
|
||||
@@ -742,17 +818,17 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
|
||||
$(document).on('focus.bs.inputmask.data-api', '[data-mask]', function (e) {
|
||||
var $this = $(this)
|
||||
if ($this.data('inputmask')) return
|
||||
if ($this.data('bs.inputmask')) return
|
||||
$this.inputmask($this.data())
|
||||
})
|
||||
|
||||
}(window.jQuery);
|
||||
|
||||
/* ===========================================================
|
||||
* Bootstrap: fileinput.js v3.1.0
|
||||
* Bootstrap: fileinput.js v3.1.3
|
||||
* http://jasny.github.com/bootstrap/javascript/#fileinput
|
||||
* ===========================================================
|
||||
* Copyright 2012-2014 Jasny BV, Netherlands.
|
||||
* Copyright 2012-2014 Arnold Daniels
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License")
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -784,14 +860,15 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
|
||||
this.$hidden = this.$element.find('input[type=hidden][name="' + this.name + '"]')
|
||||
if (this.$hidden.length === 0) {
|
||||
this.$hidden = $('<input type="hidden" />')
|
||||
this.$element.prepend(this.$hidden)
|
||||
this.$hidden = $('<input type="hidden">').insertBefore(this.$input)
|
||||
}
|
||||
|
||||
this.$preview = this.$element.find('.fileinput-preview')
|
||||
var height = this.$preview.css('height')
|
||||
if (this.$preview.css('display') != 'inline' && height != '0px' && height != 'none') this.$preview.css('line-height', height)
|
||||
|
||||
if (this.$preview.css('display') !== 'inline' && height !== '0px' && height !== 'none') {
|
||||
this.$preview.css('line-height', height)
|
||||
}
|
||||
|
||||
this.original = {
|
||||
exists: this.$element.hasClass('fileinput-exists'),
|
||||
preview: this.$preview.html(),
|
||||
@@ -810,24 +887,30 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
},
|
||||
|
||||
Fileinput.prototype.change = function(e) {
|
||||
if (e.target.files === undefined) e.target.files = e.target && e.target.value ? [ {name: e.target.value.replace(/^.+\\/, '')} ] : []
|
||||
if (e.target.files.length === 0) return
|
||||
var files = e.target.files === undefined ? (e.target && e.target.value ? [{ name: e.target.value.replace(/^.+\\/, '')}] : []) : e.target.files
|
||||
|
||||
e.stopPropagation()
|
||||
|
||||
if (files.length === 0) {
|
||||
this.clear()
|
||||
return
|
||||
}
|
||||
|
||||
this.$hidden.val('')
|
||||
this.$hidden.attr('name', '')
|
||||
this.$input.attr('name', this.name)
|
||||
|
||||
var file = e.target.files[0]
|
||||
var file = files[0]
|
||||
|
||||
if (this.$preview.length > 0 && (typeof file.type !== "undefined" ? file.type.match('image.*') : file.name.match(/\.(gif|png|jpe?g)$/i)) && typeof FileReader !== "undefined") {
|
||||
if (this.$preview.length > 0 && (typeof file.type !== "undefined" ? file.type.match(/^image\/(gif|png|jpeg)$/) : file.name.match(/\.(gif|png|jpe?g)$/i)) && typeof FileReader !== "undefined") {
|
||||
var reader = new FileReader()
|
||||
var preview = this.$preview
|
||||
var element = this.$element
|
||||
|
||||
reader.onload = function(re) {
|
||||
var $img = $('<img>') // .attr('src', re.target.result)
|
||||
var $img = $('<img>')
|
||||
$img[0].src = re.target.result
|
||||
e.target.files[0].result = re.target.result
|
||||
files[0].result = re.target.result
|
||||
|
||||
element.find('.fileinput-filename').text(file.name)
|
||||
|
||||
@@ -837,7 +920,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
preview.html($img)
|
||||
element.addClass('fileinput-exists').removeClass('fileinput-new')
|
||||
|
||||
element.trigger('change.bs.fileinput', e.target.files)
|
||||
element.trigger('change.bs.fileinput', files)
|
||||
}
|
||||
|
||||
reader.readAsDataURL(file)
|
||||
@@ -872,14 +955,14 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
this.$element.find('.fileinput-filename').text('')
|
||||
this.$element.addClass('fileinput-new').removeClass('fileinput-exists')
|
||||
|
||||
if (e !== false) {
|
||||
if (e !== undefined) {
|
||||
this.$input.trigger('change')
|
||||
this.$element.trigger('clear.bs.fileinput')
|
||||
}
|
||||
},
|
||||
|
||||
Fileinput.prototype.reset = function() {
|
||||
this.clear(false)
|
||||
this.clear()
|
||||
|
||||
this.$hidden.val(this.original.hiddenVal)
|
||||
this.$preview.html(this.original.preview)
|
||||
@@ -905,8 +988,8 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
$.fn.fileinput = function (options) {
|
||||
return this.each(function () {
|
||||
var $this = $(this),
|
||||
data = $this.data('fileinput')
|
||||
if (!data) $this.data('fileinput', (data = new Fileinput(this, options)))
|
||||
data = $this.data('bs.fileinput')
|
||||
if (!data) $this.data('bs.fileinput', (data = new Fileinput(this, options)))
|
||||
if (typeof options == 'string') data[options]()
|
||||
})
|
||||
}
|
||||
@@ -928,7 +1011,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Jasny Bootstrap\'s JavaScr
|
||||
|
||||
$(document).on('click.fileinput.data-api', '[data-provides="fileinput"]', function (e) {
|
||||
var $this = $(this)
|
||||
if ($this.data('fileinput')) return
|
||||
if ($this.data('bs.fileinput')) return
|
||||
$this.fileinput($this.data())
|
||||
|
||||
var $target = $(e.target).closest('[data-dismiss="fileinput"],[data-trigger="fileinput"]');
|
||||
|
||||
4
dist/js/jasny-bootstrap.min.js
vendored
4
dist/js/jasny-bootstrap.min.js
vendored
File diff suppressed because one or more lines are too long
8
docs/assets/js/customize.min.js
vendored
8
docs/assets/js/customize.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -183,9 +183,14 @@ window.onload = function () { // wait for load in a dumb way because B-0
|
||||
return imports
|
||||
}
|
||||
|
||||
function generateLESS(lessFilename, lessFileIncludes, vars) {
|
||||
function generateLESS(lessFilename, lessFileIncludes, vars, additionalLessFiles) {
|
||||
var lessSource = __less[lessFilename]
|
||||
|
||||
// Additional imports files, not present in less file, but required to build
|
||||
$.each(additionalLessFiles || [], function(index, filename) {
|
||||
lessSource += __less[filename]
|
||||
})
|
||||
|
||||
$.each(includedLessFilenames(lessFilename), function(index, filename) {
|
||||
var fileInclude = lessFileIncludes[filename]
|
||||
|
||||
@@ -197,7 +202,7 @@ window.onload = function () { // wait for load in a dumb way because B-0
|
||||
|
||||
// Custom variables are added after Bootstrap variables so the custom
|
||||
// ones take precedence.
|
||||
if (('build/default-variables.less' === filename) && vars) lessSource += generateCustomCSS(vars)
|
||||
if (('variables.less' === filename) && vars) lessSource += generateCustomCSS(vars)
|
||||
})
|
||||
|
||||
lessSource = lessSource.replace(/@import[^\n]*/gi, '') //strip any imports
|
||||
@@ -206,7 +211,6 @@ window.onload = function () { // wait for load in a dumb way because B-0
|
||||
|
||||
function compileLESS(lessSource, baseFilename, intoResult) {
|
||||
var parser = new less.Parser({
|
||||
paths: ['build/default-variables.less', 'mixins.less'],
|
||||
optimization: 0,
|
||||
filename: baseFilename + '.css'
|
||||
}).parse(lessSource, function (err, tree) {
|
||||
@@ -239,7 +243,8 @@ window.onload = function () { // wait for load in a dumb way because B-0
|
||||
$(this).val() && (vars[$(this).prev().text()] = $(this).val())
|
||||
})
|
||||
|
||||
var bsLessSource = generateLESS('jasny-bootstrap.less', lessFileIncludes, vars)
|
||||
var bsLessSource = generateLESS('jasny-bootstrap.less', lessFileIncludes, vars,
|
||||
['build/variables.less', 'build/mixins.less'])
|
||||
|
||||
try {
|
||||
compileLESS(bsLessSource, 'jasny-bootstrap', result)
|
||||
|
||||
6
docs/assets/js/raw-files.min.js
vendored
6
docs/assets/js/raw-files.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -123,6 +123,12 @@ base_url: "../"
|
||||
Off canvas
|
||||
</label>
|
||||
</div>
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<input type="checkbox" checked value="transition.js">
|
||||
Transitions <small>(required for any kind of animation)</small>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
2
docs/dist/css/jasny-bootstrap.css.map
vendored
2
docs/dist/css/jasny-bootstrap.css.map
vendored
File diff suppressed because one or more lines are too long
4
docs/dist/css/jasny-bootstrap.min.css
vendored
4
docs/dist/css/jasny-bootstrap.min.css
vendored
File diff suppressed because one or more lines are too long
4
docs/dist/js/jasny-bootstrap.min.js
vendored
4
docs/dist/js/jasny-bootstrap.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -44,9 +44,10 @@
|
||||
<div class="navbar-offcanvas offcanvas">
|
||||
<a class="navmenu-brand" href="#">Project name</a>
|
||||
<ul class="nav navbar-nav">
|
||||
<li class="active"><a href="#">Link</a></li>
|
||||
<li><a href="#">Link</a></li>
|
||||
<li><a href="#">Link</a></li>
|
||||
<li><a href="../navmenu/">Slide in</a></li>
|
||||
<li><a href="../navmenu-push/">Push</a></li>
|
||||
<li><a href="../navmenu-reveal">Reveal</a></li>
|
||||
<li class="active"><a href="./">Off canvas navbar</a></li>
|
||||
<li class="dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a>
|
||||
<ul class="dropdown-menu">
|
||||
@@ -68,6 +69,11 @@
|
||||
<h1>Offcanvas Navbar example</h1>
|
||||
<p>This example demonstrates using the offcanvas plugin with the navbar.</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
By default the navbar is show on the right side of the screen. You can show it on the left side instead by
|
||||
adding <code>.navmenu-fixed-left</code> to the <code>.navbar-offcanvas</code>.
|
||||
</p>
|
||||
</div> <!-- /container -->
|
||||
|
||||
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
<li><a href="../navmenu/">Slide in</a></li>
|
||||
<li class="active"><a href="./">Push</a></li>
|
||||
<li><a href="../navmenu-reveal/">Reveal</a></li>
|
||||
<li><a href="../navbar-offcanvas/">Off canvas navbar</a></li>
|
||||
</ul>
|
||||
<ul class="nav navmenu-nav">
|
||||
<li><a href="#">Link</a></li>
|
||||
@@ -76,5 +77,6 @@
|
||||
<script src="https://code.jquery.com/jquery-1.10.2.min.js"></script>
|
||||
<script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
|
||||
<script src="../../dist/js/jasny-bootstrap.min.js"></script>
|
||||
<script src="../../../js/offcanvas.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
<li><a href="../navmenu/">Slide in</a></li>
|
||||
<li><a href="../navmenu-push/">Push</a></li>
|
||||
<li class="active"><a href="./">Reveal</a></li>
|
||||
<li><a href="../navbar-offcanvas/">Off canvas navbar</a></li>
|
||||
</ul>
|
||||
<ul class="nav navmenu-nav">
|
||||
<li><a href="#">Link</a></li>
|
||||
@@ -69,7 +70,7 @@
|
||||
<p class="lead">This example demonstrates the use of the offcanvas plugin with a reveal effect.</p>
|
||||
<p>On the contrary of the push effect, the menu doesn't move with the canvas.</p>
|
||||
<p>You get the reveal effect by wrapping the content in a div and setting the <code>canvas</code> option to target that div.</p>
|
||||
<p>Note that in this example, the navmenu doesn't have the <code>.offcanvas</code> class, but is placed under the canvas by setting the <code>z-index</code>.</p>
|
||||
<p>Note that in this example, the navmenu doesn't have the <code>offcanvas</code> class, but is placed under the canvas by setting the <code>z-index</code>.</p>
|
||||
<p>Also take a look at the examples for a navmenu with <a href="../navmenu">slide in effect</a> and <a href="../navmenu-push">push effect</a>.</p>
|
||||
</div><!-- /.container -->
|
||||
</div>
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
<li class="active"><a href="./">Slide in</a></li>
|
||||
<li><a href="../navmenu-push/">Push</a></li>
|
||||
<li><a href="../navmenu-reveal/">Reveal</a></li>
|
||||
<li><a href="../navbar-offcanvas/">Off canvas navbar</a></li>
|
||||
</ul>
|
||||
<ul class="nav navmenu-nav">
|
||||
<li><a href="#">Link</a></li>
|
||||
|
||||
@@ -60,7 +60,7 @@ $.fn.bootstrapBtn = bootstrapButton // give $().bootstrapBtn the Boot
|
||||
|
||||
<h3 id="js-events">Events</h3>
|
||||
<p>Bootstrap provides custom events for most plugin's unique actions. Generally, these come in an infinitive and past participle form - where the infinitive (ex. <code>show</code>) is triggered at the start of an event, and its past participle form (ex. <code>shown</code>) is trigger on the completion of an action.</p>
|
||||
<p>As of 3.0.0, all Bootstrap events are namespaced.</p>
|
||||
<p>As of 3.1.2, all Bootstrap events are namespaced.</p>
|
||||
<p>All infinitive events provide <code>preventDefault</code> functionality. This provides the ability to stop the execution of an action before it starts.</p>
|
||||
{% highlight js %}
|
||||
$('#myMenu').on('show.bs.offcanvas', function (e) {
|
||||
@@ -180,6 +180,12 @@ $('.navmenu').offcanvas()
|
||||
<td>true</td>
|
||||
<td>Calculate if off canvas should be disabled for this viewport width on window resize. If your elements always gets hidden on window resize, try setting this to false.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>disableScrolling</td>
|
||||
<td>boolean</td>
|
||||
<td>true</td>
|
||||
<td>Disable scrolling when the off canvas element is shown, by setting overflow to hidden for the body.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
@@ -390,8 +396,9 @@ $('.inputmask').inputmask({
|
||||
<tbody>
|
||||
<tr><td>9</td><td>Number</td></tr>
|
||||
<tr><td>a</td><td>Letter</td></tr>
|
||||
<tr><td>?</td><td>Alphanumeric</td></tr>
|
||||
<tr><td>w</td><td>Alphanumeric</td></tr>
|
||||
<tr><td>*</td><td>Any character</td></tr>
|
||||
<tr><td>?</td><td>Optional - any characters following will become optional</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
@@ -416,21 +423,17 @@ $('.inputmask').inputmask({
|
||||
|
||||
<h3>File input widgets</h3>
|
||||
<div class="bs-example">
|
||||
<div class="fileinput fileinput-new" data-provides="fileinput">
|
||||
<div class="input-group">
|
||||
<div class="form-control" data-trigger="fileinput"><i class="glyphicon glyphicon-file fileinput-exists"></i> <span class="fileinput-filename"></span></div>
|
||||
<span class="input-group-addon btn btn-default btn-file"><span class="fileinput-new">Select file</span><span class="fileinput-exists">Change</span><input type="file"></span>
|
||||
<a href="#" class="input-group-addon btn btn-default fileinput-exists" data-dismiss="fileinput">Remove</a>
|
||||
</div>
|
||||
<div class="fileinput fileinput-new input-group" data-provides="fileinput">
|
||||
<div class="form-control" data-trigger="fileinput"><i class="glyphicon glyphicon-file fileinput-exists"></i> <span class="fileinput-filename"></span></div>
|
||||
<span class="input-group-addon btn btn-default btn-file"><span class="fileinput-new">Select file</span><span class="fileinput-exists">Change</span><input type="file"></span>
|
||||
<a href="#" class="input-group-addon btn btn-default fileinput-exists" data-dismiss="fileinput">Remove</a>
|
||||
</div>
|
||||
</div>
|
||||
{% highlight html %}
|
||||
<div class="fileinput fileinput-new" data-provides="fileinput">
|
||||
<div class="input-group">
|
||||
<div class="form-control" data-trigger="fileinput"><i class="glyphicon glyphicon-file fileinput-exists"></i> <span class="fileinput-filename"></span></div>
|
||||
<span class="input-group-addon btn btn-default btn-file"><span class="fileinput-new">Select file</span><span class="fileinput-exists">Change</span><input type="file" name="..."></span>
|
||||
<a href="#" class="input-group-addon btn btn-default fileinput-exists" data-dismiss="fileinput">Remove</a>
|
||||
</div>
|
||||
<div class="fileinput fileinput-new input-group" data-provides="fileinput">
|
||||
<div class="form-control" data-trigger="fileinput"><i class="glyphicon glyphicon-file fileinput-exists"></i> <span class="fileinput-filename"></span></div>
|
||||
<span class="input-group-addon btn btn-default btn-file"><span class="fileinput-new">Select file</span><span class="fileinput-exists">Change</span><input type="file" name="..."></span>
|
||||
<a href="#" class="input-group-addon btn btn-default fileinput-exists" data-dismiss="fileinput">Remove</a>
|
||||
</div>
|
||||
{% endhighlight %}
|
||||
|
||||
|
||||
@@ -9,16 +9,21 @@
|
||||
var btoa = require('btoa');
|
||||
var fs = require('fs');
|
||||
|
||||
function getFiles(type) {
|
||||
function getFiles(type, subdirs, exclude) {
|
||||
var files = {};
|
||||
fs.readdirSync(type)
|
||||
.filter(function (path) {
|
||||
return new RegExp('\\.' + type + '$').test(path);
|
||||
})
|
||||
.forEach(function (path) {
|
||||
var fullPath = type + (path === 'variables.less' ? '/build/' : '/') + path;
|
||||
files[path] = fs.readFileSync(fullPath, 'utf8');
|
||||
});
|
||||
exclude = exclude || [];
|
||||
|
||||
subdirs.forEach(function(subdir) {
|
||||
var sub = subdir ? subdir + '/' : '';
|
||||
fs.readdirSync(type + '/' + sub)
|
||||
.filter(function (path) {
|
||||
return new RegExp('\\.' + type + '$').test(path) && exclude.indexOf(sub + path) === -1;
|
||||
})
|
||||
.forEach(function (path) {
|
||||
var fullPath = type + '/' + sub + path;
|
||||
files[sub + path] = fs.readFileSync(fullPath, 'utf8');
|
||||
});
|
||||
});
|
||||
return 'var __' + type + ' = ' + JSON.stringify(files) + '\n';
|
||||
}
|
||||
|
||||
@@ -26,6 +31,6 @@ module.exports = function generateRawFilesJs(banner) {
|
||||
if (!banner) {
|
||||
banner = '';
|
||||
}
|
||||
var files = banner + getFiles('js') + getFiles('less');
|
||||
var files = banner + getFiles('js', ['']) + getFiles('less', ['', 'build'], ['build/jasny-bootstrap.less']);
|
||||
fs.writeFileSync('docs/assets/js/raw-files.min.js', files);
|
||||
};
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* ===========================================================
|
||||
* Bootstrap: fileinput.js v3.1.0
|
||||
* Bootstrap: fileinput.js v3.1.3
|
||||
* http://jasny.github.com/bootstrap/javascript/#fileinput
|
||||
* ===========================================================
|
||||
* Copyright 2012-2014 Arnold Daniels
|
||||
@@ -34,14 +34,15 @@
|
||||
|
||||
this.$hidden = this.$element.find('input[type=hidden][name="' + this.name + '"]')
|
||||
if (this.$hidden.length === 0) {
|
||||
this.$hidden = $('<input type="hidden" />')
|
||||
this.$element.prepend(this.$hidden)
|
||||
this.$hidden = $('<input type="hidden">').insertBefore(this.$input)
|
||||
}
|
||||
|
||||
this.$preview = this.$element.find('.fileinput-preview')
|
||||
var height = this.$preview.css('height')
|
||||
if (this.$preview.css('display') != 'inline' && height != '0px' && height != 'none') this.$preview.css('line-height', height)
|
||||
|
||||
if (this.$preview.css('display') !== 'inline' && height !== '0px' && height !== 'none') {
|
||||
this.$preview.css('line-height', height)
|
||||
}
|
||||
|
||||
this.original = {
|
||||
exists: this.$element.hasClass('fileinput-exists'),
|
||||
preview: this.$preview.html(),
|
||||
@@ -60,24 +61,30 @@
|
||||
},
|
||||
|
||||
Fileinput.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
|
||||
var files = e.target.files === undefined ? (e.target && e.target.value ? [{ name: e.target.value.replace(/^.+\\/, '')}] : []) : e.target.files
|
||||
|
||||
e.stopPropagation()
|
||||
|
||||
if (files.length === 0) {
|
||||
this.clear()
|
||||
return
|
||||
}
|
||||
|
||||
this.$hidden.val('')
|
||||
this.$hidden.attr('name', '')
|
||||
this.$input.attr('name', this.name)
|
||||
|
||||
var file = e.target.files[0]
|
||||
var file = files[0]
|
||||
|
||||
if (this.$preview.length > 0 && (typeof file.type !== "undefined" ? file.type.match('image.*') : file.name.match(/\.(gif|png|jpe?g)$/i)) && typeof FileReader !== "undefined") {
|
||||
if (this.$preview.length > 0 && (typeof file.type !== "undefined" ? file.type.match(/^image\/(gif|png|jpeg)$/) : file.name.match(/\.(gif|png|jpe?g)$/i)) && typeof FileReader !== "undefined") {
|
||||
var reader = new FileReader()
|
||||
var preview = this.$preview
|
||||
var element = this.$element
|
||||
|
||||
reader.onload = function(re) {
|
||||
var $img = $('<img>') // .attr('src', re.target.result)
|
||||
var $img = $('<img>')
|
||||
$img[0].src = re.target.result
|
||||
e.target.files[0].result = re.target.result
|
||||
files[0].result = re.target.result
|
||||
|
||||
element.find('.fileinput-filename').text(file.name)
|
||||
|
||||
@@ -87,7 +94,7 @@
|
||||
preview.html($img)
|
||||
element.addClass('fileinput-exists').removeClass('fileinput-new')
|
||||
|
||||
element.trigger('change.bs.fileinput', e.target.files)
|
||||
element.trigger('change.bs.fileinput', files)
|
||||
}
|
||||
|
||||
reader.readAsDataURL(file)
|
||||
@@ -122,14 +129,14 @@
|
||||
this.$element.find('.fileinput-filename').text('')
|
||||
this.$element.addClass('fileinput-new').removeClass('fileinput-exists')
|
||||
|
||||
if (e !== false) {
|
||||
if (e !== undefined) {
|
||||
this.$input.trigger('change')
|
||||
this.$element.trigger('clear.bs.fileinput')
|
||||
}
|
||||
},
|
||||
|
||||
Fileinput.prototype.reset = function() {
|
||||
this.clear(false)
|
||||
this.clear()
|
||||
|
||||
this.$hidden.val(this.original.hiddenVal)
|
||||
this.$preview.html(this.original.preview)
|
||||
@@ -155,8 +162,8 @@
|
||||
$.fn.fileinput = function (options) {
|
||||
return this.each(function () {
|
||||
var $this = $(this),
|
||||
data = $this.data('fileinput')
|
||||
if (!data) $this.data('fileinput', (data = new Fileinput(this, options)))
|
||||
data = $this.data('bs.fileinput')
|
||||
if (!data) $this.data('bs.fileinput', (data = new Fileinput(this, options)))
|
||||
if (typeof options == 'string') data[options]()
|
||||
})
|
||||
}
|
||||
@@ -178,7 +185,7 @@
|
||||
|
||||
$(document).on('click.fileinput.data-api', '[data-provides="fileinput"]', function (e) {
|
||||
var $this = $(this)
|
||||
if ($this.data('fileinput')) return
|
||||
if ($this.data('bs.fileinput')) return
|
||||
$this.fileinput($this.data())
|
||||
|
||||
var $target = $(e.target).closest('[data-dismiss="fileinput"],[data-trigger="fileinput"]');
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
if (isAndroid) return // No support because caret positioning doesn't work on Android
|
||||
|
||||
this.$element = $(element)
|
||||
this.options = $.extend({}, Inputmask.DEFAULS, options)
|
||||
this.options = $.extend({}, Inputmask.DEFAULTS, options)
|
||||
this.mask = String(this.options.mask)
|
||||
|
||||
this.init()
|
||||
@@ -41,13 +41,13 @@
|
||||
this.checkVal() //Perform initial check for existing values
|
||||
}
|
||||
|
||||
Inputmask.DEFAULS = {
|
||||
Inputmask.DEFAULTS = {
|
||||
mask: "",
|
||||
placeholder: "_",
|
||||
definitions: {
|
||||
'9': "[0-9]",
|
||||
'a': "[A-Za-z]",
|
||||
'?': "[A-Za-z0-9]",
|
||||
'w': "[A-Za-z0-9]",
|
||||
'*': "."
|
||||
}
|
||||
}
|
||||
@@ -330,9 +330,9 @@
|
||||
$.fn.inputmask = function (options) {
|
||||
return this.each(function () {
|
||||
var $this = $(this)
|
||||
var data = $this.data('inputmask')
|
||||
var data = $this.data('bs.inputmask')
|
||||
|
||||
if (!data) $this.data('inputmask', (data = new Inputmask(this, options)))
|
||||
if (!data) $this.data('bs.inputmask', (data = new Inputmask(this, options)))
|
||||
})
|
||||
}
|
||||
|
||||
@@ -353,7 +353,7 @@
|
||||
|
||||
$(document).on('focus.bs.inputmask.data-api', '[data-mask]', function (e) {
|
||||
var $this = $(this)
|
||||
if ($this.data('inputmask')) return
|
||||
if ($this.data('bs.inputmask')) return
|
||||
$this.inputmask($this.data())
|
||||
})
|
||||
|
||||
|
||||
110
js/offcanvas.js
110
js/offcanvas.js
@@ -1,8 +1,6 @@
|
||||
/* ========================================================================
|
||||
* Bootstrap: offcanvas.js v3.1.0
|
||||
* Bootstrap: offcanvas.js v3.1.3
|
||||
* http://jasny.github.io/bootstrap/javascript/#offcanvas
|
||||
*
|
||||
* Based on Boostrap collapse.js by Twitter, Inc.
|
||||
* ========================================================================
|
||||
* Copyright 2013-2014 Arnold Daniels
|
||||
*
|
||||
@@ -28,6 +26,7 @@
|
||||
this.$element = $(element)
|
||||
this.options = $.extend({}, OffCanvas.DEFAULTS, options)
|
||||
this.state = null
|
||||
this.placement = null
|
||||
|
||||
if (this.options.recalc) {
|
||||
this.calcClone()
|
||||
@@ -38,17 +37,23 @@
|
||||
$(document).on('click', $.proxy(this.autohide, this))
|
||||
|
||||
if (this.options.toggle) this.toggle()
|
||||
|
||||
if (this.options.disablescrolling) {
|
||||
this.options.disableScrolling = this.options.disablescrolling
|
||||
delete this.options.disablescrolling
|
||||
}
|
||||
}
|
||||
|
||||
OffCanvas.DEFAULTS = {
|
||||
toggle: true,
|
||||
placement: 'left',
|
||||
placement: 'auto',
|
||||
autohide: true,
|
||||
recalc: true
|
||||
recalc: true,
|
||||
disableScrolling: true
|
||||
}
|
||||
|
||||
OffCanvas.prototype.offset = function () {
|
||||
switch (this.options.placement) {
|
||||
switch (this.placement) {
|
||||
case 'left':
|
||||
case 'right': return this.$element.outerWidth()
|
||||
case 'top':
|
||||
@@ -57,26 +62,31 @@
|
||||
}
|
||||
|
||||
OffCanvas.prototype.calcPlacement = function () {
|
||||
var horizontal = $(window).width() / this.$element.width(),
|
||||
vertical = $(window).height() / this.$element.height()
|
||||
|
||||
if (this.options.placement !== 'auto') {
|
||||
this.placement = this.options.placement
|
||||
return
|
||||
}
|
||||
|
||||
if (!this.$element.hasClass('in')) {
|
||||
this.$element.css('visiblity', 'hidden !important').addClass('in')
|
||||
}
|
||||
|
||||
var horizontal = $(window).width() / this.$element.width()
|
||||
var vertical = $(window).height() / this.$element.height()
|
||||
|
||||
var 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)
|
||||
var size_a = parseInt(element.css(a), 10)
|
||||
var size_b = parseInt(element.css(b), 10)
|
||||
|
||||
return size_a > size_b ? b : a
|
||||
}
|
||||
|
||||
this.options.placement = horizontal > vertical ? ab('left', 'right') : ab('top', 'bottom')
|
||||
|
||||
this.placement = horizontal >= vertical ? ab('left', 'right') : ab('top', 'bottom')
|
||||
|
||||
if (this.$element.css('visibility') === 'hidden !important') {
|
||||
this.$element.removeClass('in').css('visiblity', '')
|
||||
}
|
||||
@@ -106,12 +116,12 @@
|
||||
// Use jQuery animation if CSS transitions aren't supported
|
||||
if (!$.support.transition) {
|
||||
var anim = {}
|
||||
anim[this.options.placement] = "+=" + offset
|
||||
anim[this.placement] = "+=" + offset
|
||||
return elements.animate(anim, 350, callback)
|
||||
}
|
||||
|
||||
var placement = this.options.placement,
|
||||
opposite = this.opposite(placement)
|
||||
var placement = this.placement
|
||||
var opposite = this.opposite(placement)
|
||||
|
||||
elements.each(function() {
|
||||
if ($(this).css(placement) !== 'auto')
|
||||
@@ -128,10 +138,12 @@
|
||||
|
||||
OffCanvas.prototype.disableScrolling = function() {
|
||||
var bodyWidth = $('body').width()
|
||||
var prop = 'padding-' + this.opposite(this.options.placement)
|
||||
var prop = 'padding-' + this.opposite(this.placement)
|
||||
|
||||
if ($('body').data('offcanvas-style') === undefined) $('body').data('offcanvas-style', $('body').attr('style'))
|
||||
|
||||
if ($('body').data('offcanvas-style') === undefined) {
|
||||
$('body').data('offcanvas-style', $('body').attr('style') || '')
|
||||
}
|
||||
|
||||
$('body').css('overflow', 'hidden')
|
||||
|
||||
if ($('body').width() > bodyWidth) {
|
||||
@@ -150,17 +162,22 @@
|
||||
this.$element.trigger(startEvent)
|
||||
if (startEvent.isDefaultPrevented()) return
|
||||
|
||||
if (this.options.placement === 'auto') this.calcPlacement()
|
||||
|
||||
this.state = 'sliding'
|
||||
|
||||
this.state = 'slide-in'
|
||||
this.calcPlacement();
|
||||
|
||||
var elements = this.getCanvasElements()
|
||||
var offset = this.offset(),
|
||||
placement = this.options.placement,
|
||||
opposite = this.opposite(placement)
|
||||
var placement = this.placement
|
||||
var opposite = this.opposite(placement)
|
||||
var offset = this.offset()
|
||||
|
||||
if (elements.index(this.$element) !== -1) {
|
||||
$(this.$element).data('offcanvas-style', $(this.$element).attr('style') || '')
|
||||
this.$element.css(placement, -1 * offset)
|
||||
this.$element.css(placement); // Workaround: Need to get the CSS property for it to be applied before the next line of code
|
||||
}
|
||||
|
||||
elements.addClass('canvas-sliding').each(function() {
|
||||
$(this).data('offcanvas-style', $(this).attr('style') || '')
|
||||
if ($(this).data('offcanvas-style') === undefined) $(this).data('offcanvas-style', $(this).attr('style') || '')
|
||||
if ($(this).css('position') === 'static') $(this).css('position', 'relative')
|
||||
if (($(this).css(placement) === 'auto' || $(this).css(placement) === '0px') &&
|
||||
($(this).css(opposite) === 'auto' || $(this).css(opposite) === '0px')) {
|
||||
@@ -168,11 +185,11 @@
|
||||
}
|
||||
})
|
||||
|
||||
if (elements.index(this.$element) !== -1) this.$element.css(placement, -1 * offset)
|
||||
|
||||
this.disableScrolling()
|
||||
if (this.options.disableScrolling) this.disableScrolling()
|
||||
|
||||
var complete = function () {
|
||||
if (this.state != 'slide-in') return
|
||||
|
||||
this.state = 'slid'
|
||||
|
||||
elements.removeClass('canvas-sliding').addClass('canvas-slid')
|
||||
@@ -192,18 +209,22 @@
|
||||
this.$element.trigger(startEvent)
|
||||
if (startEvent.isDefaultPrevented()) return
|
||||
|
||||
this.state = 'sliding'
|
||||
this.state = 'slide-out'
|
||||
|
||||
var elements = $('.canvas-slid')
|
||||
var placement = this.placement
|
||||
var offset = -1 * this.offset()
|
||||
|
||||
var complete = function () {
|
||||
if (this.state != 'slide-out') return
|
||||
|
||||
this.state = null
|
||||
|
||||
this.placement = null
|
||||
|
||||
this.$element.removeClass('in')
|
||||
|
||||
elements.removeClass('canvas-sliding')
|
||||
elements.add('body').each(function() {
|
||||
elements.add(this.$element).add('body').each(function() {
|
||||
$(this).attr('style', $(this).data('offcanvas-style')).removeData('offcanvas-style')
|
||||
})
|
||||
|
||||
@@ -218,7 +239,7 @@
|
||||
}
|
||||
|
||||
OffCanvas.prototype.toggle = function () {
|
||||
if (this.state === 'sliding') return
|
||||
if (this.state === 'slide-in' || this.state === 'slide-out') return
|
||||
this[this.state === 'slid' ? 'hide' : 'show']()
|
||||
}
|
||||
|
||||
@@ -230,17 +251,18 @@
|
||||
}
|
||||
|
||||
OffCanvas.prototype.recalc = function () {
|
||||
if (this.state() !== 'slid' || this.$calcClone.css('display') === 'none') return
|
||||
if (this.$calcClone.css('display') === 'none' || (this.state !== 'slid' && this.state !== 'slide-in')) return
|
||||
|
||||
var offset = -1 * this.offset()
|
||||
this.state = null
|
||||
this.placement = null
|
||||
var elements = this.getCanvasElements()
|
||||
|
||||
var placement = this.options.placement
|
||||
this.getCanvasElements().each(function() {
|
||||
$(this).css(placement, (parseInt($(this).css(placement), 10) || 0) + offset)
|
||||
}).removeClass('canvas-slid')
|
||||
this.$element.removeClass('in')
|
||||
|
||||
$('body').css('overflow', '')
|
||||
this.$element.css(placement, '').removeClass('in canvas-slid')
|
||||
elements.removeClass('canvas-slid')
|
||||
elements.add(this.$element).add('body').each(function() {
|
||||
$(this).attr('style', $(this).data('offcanvas-style')).removeData('offcanvas-style')
|
||||
})
|
||||
}
|
||||
|
||||
OffCanvas.prototype.autohide = function (e) {
|
||||
@@ -256,10 +278,10 @@
|
||||
return this.each(function () {
|
||||
var $this = $(this)
|
||||
var data = $this.data('bs.offcanvas')
|
||||
var options = $.extend({}, OffCanvas.DEFAULTS, $this.data(), typeof option == 'object' && option)
|
||||
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]()
|
||||
if (typeof option === 'string') data[option]()
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* ============================================================
|
||||
* Bootstrap: rowlink.js v3.1.0
|
||||
* Bootstrap: rowlink.js v3.1.3
|
||||
* http://jasny.github.io/bootstrap/javascript/#rowlink
|
||||
* ============================================================
|
||||
* Copyright 2012-2014 Arnold Daniels
|
||||
@@ -54,8 +54,8 @@
|
||||
$.fn.rowlink = function (options) {
|
||||
return this.each(function () {
|
||||
var $this = $(this)
|
||||
var data = $this.data('rowlink')
|
||||
if (!data) $this.data('rowlink', (data = new Rowlink(this, options)))
|
||||
var data = $this.data('bs.rowlink')
|
||||
if (!data) $this.data('bs.rowlink', (data = new Rowlink(this, options)))
|
||||
})
|
||||
}
|
||||
|
||||
@@ -75,8 +75,10 @@
|
||||
// ==================
|
||||
|
||||
$(document).on('click.bs.rowlink.data-api', '[data-link="row"]', function (e) {
|
||||
if ($(e.target).closest('.rowlink-skip').length !== 0) return
|
||||
|
||||
var $this = $(this)
|
||||
if ($this.data('rowlink')) return
|
||||
if ($this.data('bs.rowlink')) return
|
||||
$this.rowlink($this.data())
|
||||
$(e.target).trigger('click.bs.rowlink')
|
||||
})
|
||||
|
||||
@@ -1,6 +1,13 @@
|
||||
$(function () {
|
||||
|
||||
module('inputmask')
|
||||
var $input;
|
||||
|
||||
module('inputmask', {
|
||||
setup : function() {
|
||||
$input = $('<input type="text">').appendTo(document.body);
|
||||
$input.removeData('inputmask');
|
||||
}
|
||||
})
|
||||
|
||||
test('should provide no conflict', function () {
|
||||
var inputmask = $.fn.inputmask.noConflict()
|
||||
@@ -9,12 +16,66 @@ $(function () {
|
||||
})
|
||||
|
||||
test('should be defined on jquery object', function () {
|
||||
ok($(document.body).inputmask, 'inputmask method is defined')
|
||||
ok($input.inputmask, 'inputmask method is defined')
|
||||
})
|
||||
|
||||
test('should return element', function () {
|
||||
ok($(document.body).inputmask()[0] == document.body, 'document.body returned')
|
||||
ok($input.inputmask()[0] == $input[0], 'input returned')
|
||||
})
|
||||
|
||||
test('should use default mask', function() {
|
||||
var expected = ""
|
||||
$.fn.inputmask.Constructor.DEFAULTS.mask = expected
|
||||
|
||||
$input.inputmask()
|
||||
|
||||
equal(expected, $input.data('bs.inputmask').options.mask)
|
||||
})
|
||||
|
||||
test('should use default placeholder', function() {
|
||||
var expected = "_"
|
||||
$.fn.inputmask.Constructor.DEFAULTS.placeholder = expected
|
||||
|
||||
$input.inputmask()
|
||||
|
||||
equal(expected, $input.data('bs.inputmask').options.placeholder)
|
||||
})
|
||||
|
||||
test('should use default definitions', function() {
|
||||
var expected = {
|
||||
'0': "[0-9]",
|
||||
'A': "[A-Za-z]"
|
||||
}
|
||||
$.fn.inputmask.Constructor.DEFAULTS.definitions = expected
|
||||
|
||||
$input.inputmask()
|
||||
|
||||
deepEqual(expected, $input.data('bs.inputmask').options.definitions)
|
||||
})
|
||||
|
||||
test('should override mask when options.mask provided', function() {
|
||||
var expected = '99-99';
|
||||
$input.inputmask({ mask: expected})
|
||||
|
||||
equal(expected, $input.data('bs.inputmask').options.mask)
|
||||
})
|
||||
|
||||
test('should override placeholder when options.placeholder provided', function() {
|
||||
var expected = '-';
|
||||
$input.inputmask({ placeholder: expected})
|
||||
|
||||
equal(expected, $input.data('bs.inputmask').options.placeholder)
|
||||
})
|
||||
|
||||
test('should override definitions when options.definitions provided', function() {
|
||||
var expected = {
|
||||
'0': "[0-9]",
|
||||
'A': "[A-Za-z]"
|
||||
}
|
||||
|
||||
$input.inputmask({definitions: expected})
|
||||
|
||||
deepEqual(expected, $input.data('bs.inputmask').options.definitions)
|
||||
})
|
||||
|
||||
// TODO: add inputmask tests
|
||||
})
|
||||
|
||||
50
js/transition.js
Normal file
50
js/transition.js
Normal file
@@ -0,0 +1,50 @@
|
||||
/* ========================================================================
|
||||
* Bootstrap: transition.js v3.1.3
|
||||
* http://getbootstrap.com/javascript/#transitions
|
||||
* ========================================================================
|
||||
* Copyright 2011-2014 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* ======================================================================== */
|
||||
|
||||
|
||||
+function ($) {
|
||||
'use strict';
|
||||
|
||||
// CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
|
||||
// ============================================================
|
||||
|
||||
function transitionEnd() {
|
||||
var el = document.createElement('bootstrap')
|
||||
|
||||
var transEndEventNames = {
|
||||
WebkitTransition : 'webkitTransitionEnd',
|
||||
MozTransition : 'transitionend',
|
||||
OTransition : 'oTransitionEnd otransitionend',
|
||||
transition : 'transitionend'
|
||||
}
|
||||
|
||||
for (var name in transEndEventNames) {
|
||||
if (el.style[name] !== undefined) {
|
||||
return { end: transEndEventNames[name] }
|
||||
}
|
||||
}
|
||||
|
||||
return false // explicit for ie8 ( ._.)
|
||||
}
|
||||
|
||||
if ($.support.transition !== undefined) return // Prevent conflict with Twitter Bootstrap
|
||||
|
||||
// http://blog.alexmaccaw.com/css-transitions
|
||||
$.fn.emulateTransitionEnd = function (duration) {
|
||||
var called = false, $el = this
|
||||
$(this).one($.support.transition.end, function () { called = true })
|
||||
var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
|
||||
setTimeout(callback, duration)
|
||||
return this
|
||||
}
|
||||
|
||||
$(function () {
|
||||
$.support.transition = transitionEnd()
|
||||
})
|
||||
|
||||
}(window.jQuery);
|
||||
@@ -1,6 +1,6 @@
|
||||
// Fixed alerts
|
||||
//
|
||||
// Position to the top or bottom.
|
||||
// ------------------------------------------------
|
||||
|
||||
.alert-fixed-top,
|
||||
.alert-fixed-bottom {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
// Jasny Bootstrap with default variables
|
||||
|
||||
@import "variables.less";
|
||||
@import "mixins.less";
|
||||
@import "../jasny-bootstrap.less";
|
||||
|
||||
61
less/build/mixins.less
Normal file
61
less/build/mixins.less
Normal file
@@ -0,0 +1,61 @@
|
||||
//
|
||||
// These mixins are used when Jasny Bootstrap is
|
||||
// built without importing Twitter Bootstrap.
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
// CSS3 PROPERTIES
|
||||
// --------------------------------------------------
|
||||
|
||||
// Single side border-radius
|
||||
.border-top-radius(@radius) {
|
||||
border-top-right-radius: @radius;
|
||||
border-top-left-radius: @radius;
|
||||
}
|
||||
.border-right-radius(@radius) {
|
||||
border-bottom-right-radius: @radius;
|
||||
border-top-right-radius: @radius;
|
||||
}
|
||||
.border-bottom-radius(@radius) {
|
||||
border-bottom-right-radius: @radius;
|
||||
border-bottom-left-radius: @radius;
|
||||
}
|
||||
.border-left-radius(@radius) {
|
||||
border-bottom-left-radius: @radius;
|
||||
border-top-left-radius: @radius;
|
||||
}
|
||||
|
||||
// Drop shadows
|
||||
.box-shadow(@shadow) {
|
||||
-webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1
|
||||
box-shadow: @shadow;
|
||||
}
|
||||
.transition(@transition) {
|
||||
-webkit-transition: @transition;
|
||||
-o-transition: @transition;
|
||||
transition: @transition;
|
||||
}
|
||||
|
||||
// Transition
|
||||
.transition-property(@transition-property) {
|
||||
-webkit-transition-property: @transition-property;
|
||||
transition-property: @transition-property;
|
||||
}
|
||||
.transition-delay(@transition-delay) {
|
||||
-webkit-transition-delay: @transition-delay;
|
||||
transition-delay: @transition-delay;
|
||||
}
|
||||
.transition-duration(@transition-duration) {
|
||||
-webkit-transition-duration: @transition-duration;
|
||||
transition-duration: @transition-duration;
|
||||
}
|
||||
.transition-timing-function(@timing-function) {
|
||||
-webkit-transition-timing-function: @timing-function;
|
||||
transition-timing-function: @timing-function;
|
||||
}
|
||||
.transition-transform(@transition) {
|
||||
-webkit-transition: -webkit-transform @transition;
|
||||
-moz-transition: -moz-transform @transition;
|
||||
-o-transition: -o-transform @transition;
|
||||
transition: transform @transition;
|
||||
}
|
||||
@@ -1,6 +1,19 @@
|
||||
// Labels for buttons
|
||||
// --------------------------------------------------
|
||||
|
||||
.button-label-size(@padding-vertical; @padding-horizontal; @border-radius) {
|
||||
padding: @padding-vertical @padding-horizontal;
|
||||
left: (-1 * @padding-horizontal);
|
||||
border-radius: (@border-radius - 1px) 0 0 (@border-radius - 1px);
|
||||
|
||||
&.btn-label-right {
|
||||
left: auto;
|
||||
right: (-1 * @padding-horizontal);
|
||||
border-radius: 0 (@border-radius - 1px) (@border-radius - 1px) 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.btn-labeled {
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
|
||||
@@ -13,9 +13,9 @@
|
||||
margin: 0;
|
||||
opacity: 0;
|
||||
filter: alpha(opacity=0);
|
||||
transform: translate(-300px, 0) scale(4);
|
||||
font-size: 23px;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
direction: ltr;
|
||||
cursor: pointer;
|
||||
}
|
||||
@@ -63,16 +63,30 @@
|
||||
vertical-align: bottom;
|
||||
}
|
||||
|
||||
.fileinput.input-group {
|
||||
display: table;
|
||||
|
||||
> * {
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
}
|
||||
> .btn-file {
|
||||
z-index: 1;
|
||||
}
|
||||
}
|
||||
|
||||
// Not 100% correct, but helps in typical use case
|
||||
.fileinput-new.input-group .btn-file,
|
||||
.fileinput-new .input-group .btn-file {
|
||||
border-radius: 0 @border-radius-base @border-radius-base 0;
|
||||
}
|
||||
.fileinput-new .input-group .btn-file.btn-xs,
|
||||
.fileinput-new .input-group .btn-file.btn-sm {
|
||||
border-radius: 0 @border-radius-small @border-radius-small 0;
|
||||
}
|
||||
.fileinput-new .input-group .btn-file.btn-lg {
|
||||
border-radius: 0 @border-radius-large @border-radius-large 0;
|
||||
|
||||
&.btn-xs,
|
||||
&.btn-sm {
|
||||
border-radius: 0 @border-radius-small @border-radius-small 0;
|
||||
}
|
||||
&.btn-lg {
|
||||
border-radius: 0 @border-radius-large @border-radius-large 0;
|
||||
}
|
||||
}
|
||||
|
||||
.form-group.has-warning .fileinput {
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
// Smooth sizing container
|
||||
// -------------------------
|
||||
|
||||
@media (min-width: 1px) {
|
||||
.container-smooth {
|
||||
max-width: @container-lg;
|
||||
.container-smooth {
|
||||
max-width: @container-lg;
|
||||
|
||||
@media (min-width: 1px) {
|
||||
width: auto;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
|
||||
// Core variables and mixins
|
||||
@import "variables.less";
|
||||
@import "mixins.less";
|
||||
|
||||
// Core CSS
|
||||
@import "grid-container-smooth.less";
|
||||
|
||||
@@ -1,47 +0,0 @@
|
||||
//
|
||||
// Mixins
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
// CSS3 PROPERTIES
|
||||
// --------------------------------------------------
|
||||
|
||||
// Single side border-radius
|
||||
.border-top-radius(@radius) {
|
||||
border-top-right-radius: @radius;
|
||||
border-top-left-radius: @radius;
|
||||
}
|
||||
.border-right-radius(@radius) {
|
||||
border-bottom-right-radius: @radius;
|
||||
border-top-right-radius: @radius;
|
||||
}
|
||||
.border-bottom-radius(@radius) {
|
||||
border-bottom-right-radius: @radius;
|
||||
border-bottom-left-radius: @radius;
|
||||
}
|
||||
.border-left-radius(@radius) {
|
||||
border-bottom-left-radius: @radius;
|
||||
border-top-left-radius: @radius;
|
||||
}
|
||||
|
||||
// Drop shadows
|
||||
.box-shadow(@shadow) {
|
||||
-webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1
|
||||
box-shadow: @shadow;
|
||||
}
|
||||
|
||||
|
||||
// BUTTONS
|
||||
// --------------------------------------------------
|
||||
|
||||
.button-label-size(@padding-vertical; @padding-horizontal; @border-radius) {
|
||||
padding: @padding-vertical @padding-horizontal;
|
||||
left: (-1 * @padding-horizontal);
|
||||
border-radius: (@border-radius - 1px) 0 0 (@border-radius - 1px);
|
||||
|
||||
&.btn-label-right {
|
||||
left: auto;
|
||||
right: (-1 * @padding-horizontal);
|
||||
border-radius: 0 (@border-radius - 1px) (@border-radius - 1px) 0;
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,3 @@
|
||||
//
|
||||
// Navmenu and offcanvas navbar
|
||||
// --------------------------------------------------
|
||||
|
||||
@@ -11,7 +10,7 @@
|
||||
.navmenu,
|
||||
.navbar-offcanvas {
|
||||
width: @navmenu-width;
|
||||
height: 100%;
|
||||
height: auto;
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
border-radius: @border-radius-base;
|
||||
@@ -23,14 +22,19 @@
|
||||
position: fixed;
|
||||
z-index: @zindex-navmenu-fixed;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
overflow-y: auto;
|
||||
border-radius: 0;
|
||||
}
|
||||
.navmenu-fixed-left,
|
||||
.navbar-offcanvas {
|
||||
.navbar-offcanvas.navmenu-fixed-left {
|
||||
left: 0;
|
||||
right: auto;
|
||||
border-width: 0 1px 0 0;
|
||||
}
|
||||
.navmenu-fixed-right {
|
||||
.navmenu-fixed-right,
|
||||
.navbar-offcanvas {
|
||||
left: auto;
|
||||
right: 0;
|
||||
border-width: 0 0 0 1px;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
//
|
||||
// Off canvas navigation
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
//
|
||||
// Rowlink
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
28
package.json
28
package.json
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "jasny-bootstrap",
|
||||
"description": "Additional features and components for Bootstrap",
|
||||
"version": "3.1.0",
|
||||
"version": "3.1.3",
|
||||
"keywords": [
|
||||
"bootstrap",
|
||||
"css"
|
||||
@@ -30,25 +30,25 @@
|
||||
"grunt": "~0.4.2",
|
||||
"grunt-banner": "~0.2.0",
|
||||
"grunt-contrib-clean": "~0.5.0",
|
||||
"grunt-contrib-concat": "~0.3.0",
|
||||
"grunt-contrib-connect": "~0.6.0",
|
||||
"grunt-contrib-concat": "~0.4.0",
|
||||
"grunt-contrib-connect": "~0.7.0",
|
||||
"grunt-contrib-copy": "~0.5.0",
|
||||
"grunt-contrib-csslint": "~0.2.0",
|
||||
"grunt-contrib-cssmin": "~0.7.0",
|
||||
"grunt-contrib-jade": "~0.9.1",
|
||||
"grunt-contrib-jshint": "~0.8.0",
|
||||
"grunt-contrib-less": "~0.9.0",
|
||||
"grunt-contrib-cssmin": "~0.9.0",
|
||||
"grunt-contrib-jade": "~0.11.0",
|
||||
"grunt-contrib-jshint": "~0.10.0",
|
||||
"grunt-contrib-less": "~0.11.0",
|
||||
"grunt-contrib-qunit": "~0.4.0",
|
||||
"grunt-contrib-uglify": "~0.3.0",
|
||||
"grunt-contrib-watch": "~0.5.3",
|
||||
"grunt-contrib-uglify": "~0.4.0",
|
||||
"grunt-contrib-watch": "~0.6.0",
|
||||
"grunt-csscomb": "~2.0.1",
|
||||
"grunt-exec": "0.4.2",
|
||||
"grunt-exec": "~0.4.2",
|
||||
"grunt-html-validation": "~0.1.13",
|
||||
"grunt-jekyll": "~0.4.1",
|
||||
"grunt-jscs-checker": "~0.3.0",
|
||||
"grunt-saucelabs": "~5.0.0",
|
||||
"grunt-sed": "~0.1.1",
|
||||
"load-grunt-tasks": "~0.3.0",
|
||||
"grunt-jscs-checker": "~0.4.0",
|
||||
"grunt-saucelabs": "~5.1.0",
|
||||
"grunt-text-replace": "~0.3.0",
|
||||
"load-grunt-tasks": "~0.4.0",
|
||||
"markdown": "~0.5.0"
|
||||
},
|
||||
"jspm": {
|
||||
|
||||
39
scss/_alerts-fixed.scss
Normal file
39
scss/_alerts-fixed.scss
Normal file
@@ -0,0 +1,39 @@
|
||||
// Fixed alerts
|
||||
// Position to the top or bottom.
|
||||
// ------------------------------------------------
|
||||
|
||||
.alert-fixed-top,
|
||||
.alert-fixed-bottom {
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
z-index: $zindex-alert-fixed;
|
||||
border-radius: 0;
|
||||
margin: 0;
|
||||
left: 0;
|
||||
|
||||
@media (min-width: $alert-fixed-width) {
|
||||
width: $alert-fixed-width;
|
||||
left: 50%;
|
||||
margin-left: (-1 * ($alert-fixed-width / 2));
|
||||
}
|
||||
}
|
||||
|
||||
.alert-fixed-top {
|
||||
top: 0;
|
||||
border-width: 0 0 1px 0;
|
||||
|
||||
@media (min-width: $alert-fixed-width) {
|
||||
@include border-bottom-radius($alert-border-radius);
|
||||
border-width: 0 1px 1px 1px;
|
||||
}
|
||||
}
|
||||
|
||||
.alert-fixed-bottom {
|
||||
bottom: 0;
|
||||
border-width: 1px 0 0 0;
|
||||
|
||||
@media (min-width: $alert-fixed-width) {
|
||||
@include border-top-radius($alert-border-radius);
|
||||
border-width: 1px 1px 0 1px;
|
||||
}
|
||||
}
|
||||
38
scss/_button-labels.scss
Normal file
38
scss/_button-labels.scss
Normal file
@@ -0,0 +1,38 @@
|
||||
// Labels for buttons
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin button-label-size($padding-vertical, $padding-horizontal, $border-radius) {
|
||||
padding: $padding-vertical $padding-horizontal;
|
||||
left: (-1 * $padding-horizontal);
|
||||
border-radius: ($border-radius - 1px) 0 0 ($border-radius - 1px);
|
||||
|
||||
&.btn-label-right {
|
||||
left: auto;
|
||||
right: (-1 * $padding-horizontal);
|
||||
border-radius: 0 ($border-radius - 1px) ($border-radius - 1px) 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.btn-labeled {
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
.btn-label {
|
||||
position: relative;
|
||||
background: transparent;
|
||||
background: rgba(0, 0, 0, 0.15);
|
||||
display: inline-block;
|
||||
@include button-label-size($padding-base-vertical, $padding-base-horizontal, $border-radius-base);
|
||||
}
|
||||
|
||||
.btn-lg .btn-label {
|
||||
@include button-label-size($padding-large-vertical, $padding-large-horizontal, $border-radius-large);
|
||||
}
|
||||
.btn-sm .btn-label {
|
||||
@include button-label-size($padding-small-vertical, $padding-small-horizontal, $border-radius-small);
|
||||
}
|
||||
.btn-xs .btn-label {
|
||||
@include button-label-size(1px, 5px, $border-radius-small);
|
||||
}
|
||||
114
scss/_fileinput.scss
Normal file
114
scss/_fileinput.scss
Normal file
@@ -0,0 +1,114 @@
|
||||
// Fileinput
|
||||
// CSS for file upload button and fileinput widget
|
||||
// ------------------------------------------------
|
||||
|
||||
.btn-file {
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
vertical-align: middle;
|
||||
> input {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
margin: 0;
|
||||
opacity: 0;
|
||||
filter: alpha(opacity=0);
|
||||
font-size: 23px;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
direction: ltr;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
.fileinput {
|
||||
margin-bottom: 9px;
|
||||
display: inline-block;
|
||||
.form-control {
|
||||
padding-top: 7px;
|
||||
padding-bottom: 5px;
|
||||
display: inline-block;
|
||||
margin-bottom: 0px;
|
||||
vertical-align: middle;
|
||||
cursor: text;
|
||||
}
|
||||
.thumbnail {
|
||||
overflow: hidden;
|
||||
display: inline-block;
|
||||
margin-bottom: 5px;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
> img {
|
||||
max-height: 100%;
|
||||
}
|
||||
}
|
||||
.btn {
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
.fileinput-exists .fileinput-new,
|
||||
.fileinput-new .fileinput-exists {
|
||||
display: none;
|
||||
}
|
||||
.fileinput-inline .fileinput-controls {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.fileinput-filename {
|
||||
vertical-align: middle;
|
||||
display: inline-block;
|
||||
overflow: hidden;
|
||||
}
|
||||
.form-control .fileinput-filename {
|
||||
vertical-align: bottom;
|
||||
}
|
||||
|
||||
.fileinput.input-group {
|
||||
display: table;
|
||||
}
|
||||
|
||||
// Not 100% correct, but helps in typical use case
|
||||
.fileinput-new.input-group .btn-file,
|
||||
.fileinput-new .input-group .btn-file {
|
||||
border-radius: 0 $border-radius-base $border-radius-base 0;
|
||||
|
||||
&.btn-xs,
|
||||
&.btn-sm {
|
||||
border-radius: 0 $border-radius-small $border-radius-small 0;
|
||||
}
|
||||
&.btn-lg {
|
||||
border-radius: 0 $border-radius-large $border-radius-large 0;
|
||||
}
|
||||
}
|
||||
|
||||
.form-group.has-warning .fileinput {
|
||||
.fileinput-preview {
|
||||
color: $state-warning-text;
|
||||
}
|
||||
.thumbnail {
|
||||
border-color: $state-warning-border;
|
||||
}
|
||||
}
|
||||
.form-group.has-error .fileinput {
|
||||
.fileinput-preview {
|
||||
color: $state-danger-text;
|
||||
}
|
||||
.thumbnail {
|
||||
border-color: $state-danger-border;
|
||||
}
|
||||
}
|
||||
.form-group.has-success .fileinput {
|
||||
.fileinput-preview {
|
||||
color: $state-success-text;
|
||||
}
|
||||
.thumbnail {
|
||||
border-color: $state-success-border;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Input group fixes
|
||||
|
||||
.input-group-addon:not(:first-child) {
|
||||
border-left: 0;
|
||||
}
|
||||
10
scss/_grid-container-smooth.scss
Normal file
10
scss/_grid-container-smooth.scss
Normal file
@@ -0,0 +1,10 @@
|
||||
// Smooth sizing container
|
||||
// -------------------------
|
||||
|
||||
.container-smooth {
|
||||
max-width: $container-lg;
|
||||
|
||||
@media (min-width: 1px) {
|
||||
width: auto;
|
||||
}
|
||||
}
|
||||
97
scss/_nav-tab-alignment.scss
Normal file
97
scss/_nav-tab-alignment.scss
Normal file
@@ -0,0 +1,97 @@
|
||||
// Alignment options
|
||||
// -------------------------
|
||||
|
||||
// bottom
|
||||
.nav-tabs-bottom {
|
||||
border-bottom: 0;
|
||||
border-top: 1px solid $nav-tabs-border-color;
|
||||
|
||||
> li {
|
||||
margin-bottom: 0;
|
||||
margin-top: -1px;
|
||||
|
||||
> a {
|
||||
border-radius: 0 0 $border-radius-base $border-radius-base;
|
||||
}
|
||||
|
||||
> a:hover,
|
||||
> a:focus,
|
||||
&.active > a,
|
||||
&.active > a:hover,
|
||||
&.active > a:focus {
|
||||
border: 1px solid $nav-tabs-active-link-hover-border-color;
|
||||
border-top-color: transparent;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// left
|
||||
.nav-tabs-left {
|
||||
border-bottom: 0;
|
||||
border-right: 1px solid $nav-tabs-border-color;
|
||||
|
||||
> li {
|
||||
margin-bottom: 0;
|
||||
margin-right: -1px;
|
||||
float: none;
|
||||
|
||||
> a {
|
||||
border-radius: $border-radius-base 0 0 $border-radius-base;
|
||||
margin-right: 0;
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
|
||||
> a:hover,
|
||||
> a:focus,
|
||||
&.active > a,
|
||||
&.active > a:hover,
|
||||
&.active > a:focus {
|
||||
border: 1px solid $nav-tabs-active-link-hover-border-color;
|
||||
border-right-color: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
.row > & {
|
||||
padding-right: 0;
|
||||
padding-left: ($grid-gutter-width / 2);
|
||||
margin-right: -1px;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
|
||||
& + .tab-content {
|
||||
border-left: 1px solid $nav-tabs-active-link-hover-border-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// right
|
||||
.nav-tabs-right {
|
||||
border-bottom: 0;
|
||||
border-left: 1px solid $nav-tabs-border-color;
|
||||
|
||||
> li {
|
||||
margin-bottom: 0;
|
||||
margin-left: -1px;
|
||||
float: none;
|
||||
|
||||
> a {
|
||||
border-radius: 0 $border-radius-base $border-radius-base 0;
|
||||
margin-left: 0;
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
|
||||
> a:hover,
|
||||
> a:focus,
|
||||
&.active > a,
|
||||
&.active > a:hover,
|
||||
&.active > a:focus {
|
||||
border: 1px solid $nav-tabs-active-link-hover-border-color;
|
||||
border-left-color: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
.row > & {
|
||||
padding-left: 0;
|
||||
padding-right: ($grid-gutter-width / 2);
|
||||
}
|
||||
}
|
||||
273
scss/_navmenu.scss
Normal file
273
scss/_navmenu.scss
Normal file
@@ -0,0 +1,273 @@
|
||||
// Navmenu and offcanvas navbar
|
||||
// --------------------------------------------------
|
||||
|
||||
|
||||
// Wrapper and base class
|
||||
//
|
||||
// Provide a static navmenu from which we expand to create the fixed navmenu
|
||||
// variations.
|
||||
|
||||
.navmenu,
|
||||
.navbar-offcanvas {
|
||||
width: $navmenu-width;
|
||||
height: 100%;
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
border-radius: $border-radius-base;
|
||||
}
|
||||
|
||||
.navmenu-fixed-left,
|
||||
.navmenu-fixed-right,
|
||||
.navbar-offcanvas {
|
||||
position: fixed;
|
||||
z-index: $zindex-navmenu-fixed;
|
||||
top: 0;
|
||||
border-radius: 0;
|
||||
}
|
||||
.navmenu-fixed-left,
|
||||
.navbar-offcanvas.navmenu-fixed-left {
|
||||
left: 0;
|
||||
right: auto;
|
||||
border-width: 0 1px 0 0;
|
||||
bottom: 0;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.navmenu-fixed-right,
|
||||
.navbar-offcanvas {
|
||||
left: auto;
|
||||
right: 0;
|
||||
border-width: 0 0 0 1px;
|
||||
}
|
||||
|
||||
.navmenu-nav {
|
||||
margin-bottom: $navmenu-margin-vertical;
|
||||
|
||||
&.dropdown-menu {
|
||||
position: static;
|
||||
margin: 0;
|
||||
padding-top: 0;
|
||||
float: none;
|
||||
border: none;
|
||||
@include box-shadow(none);
|
||||
border-radius: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.navbar-offcanvas {
|
||||
.navbar-nav {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
@media (min-width: $grid-float-breakpoint) {
|
||||
width: auto;
|
||||
border-top: 0;
|
||||
box-shadow: none;
|
||||
|
||||
&.offcanvas {
|
||||
position: static;
|
||||
display: block !important;
|
||||
height: auto !important;
|
||||
padding-bottom: 0; // Override default setting
|
||||
overflow: visible !important;
|
||||
}
|
||||
|
||||
// Account for first and last children spacing
|
||||
.navbar-nav.navbar-left:first-child {
|
||||
margin-left: -$navbar-padding-horizontal;
|
||||
}
|
||||
.navbar-nav.navbar-right:last-child {
|
||||
margin-right: -$navbar-padding-horizontal;
|
||||
}
|
||||
|
||||
.navmenu-brand {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Brand/project name
|
||||
|
||||
.navmenu-brand {
|
||||
display: block;
|
||||
font-size: $font-size-large;
|
||||
line-height: $line-height-computed;
|
||||
padding: $nav-link-padding;
|
||||
&:hover,
|
||||
&:focus {
|
||||
text-decoration: none;
|
||||
}
|
||||
margin: $navmenu-margin-vertical 0;
|
||||
}
|
||||
|
||||
// Alternate navmenus
|
||||
// --------------------------------------------------
|
||||
|
||||
// Default navmenu
|
||||
.navmenu-default,
|
||||
.navbar-default .navbar-offcanvas {
|
||||
background-color: $navmenu-default-bg;
|
||||
border-color: $navmenu-default-border;
|
||||
|
||||
.navmenu-brand {
|
||||
color: $navmenu-default-brand-color;
|
||||
&:hover,
|
||||
&:focus {
|
||||
color: $navmenu-default-brand-hover-color;
|
||||
background-color: $navmenu-default-brand-hover-bg;
|
||||
}
|
||||
}
|
||||
|
||||
.navmenu-text {
|
||||
color: $navmenu-default-color;
|
||||
}
|
||||
|
||||
.navmenu-nav {
|
||||
// Caret should match text color on hover
|
||||
> .dropdown > a:hover .caret,
|
||||
> .dropdown > a:focus .caret {
|
||||
border-top-color: $navmenu-default-link-hover-color;
|
||||
border-bottom-color: $navmenu-default-link-hover-color;
|
||||
}
|
||||
|
||||
// Remove background color from open dropdown
|
||||
> .open > a {
|
||||
&,
|
||||
&:hover,
|
||||
&:focus {
|
||||
background-color: $navmenu-default-link-active-bg;
|
||||
color: $navmenu-default-link-active-color;
|
||||
.caret {
|
||||
border-top-color: $navmenu-default-link-active-color;
|
||||
border-bottom-color: $navmenu-default-link-active-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
> .dropdown > a .caret {
|
||||
border-top-color: $navmenu-default-link-color;
|
||||
border-bottom-color: $navmenu-default-link-color;
|
||||
}
|
||||
&.dropdown-menu {
|
||||
background-color: $navmenu-default-link-active-bg;
|
||||
& > .divider {
|
||||
background-color: $navmenu-default-bg;
|
||||
}
|
||||
> .active > a {
|
||||
&,
|
||||
&:hover,
|
||||
&:focus {
|
||||
background-color: darken($navmenu-default-link-active-bg, 6.5%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
> li > a {
|
||||
color: $navmenu-default-link-color;
|
||||
&:hover,
|
||||
&:focus {
|
||||
color: $navmenu-default-link-hover-color;
|
||||
background-color: $navmenu-default-link-hover-bg;
|
||||
}
|
||||
}
|
||||
> .active > a {
|
||||
&,
|
||||
&:hover,
|
||||
&:focus {
|
||||
color: $navmenu-default-link-active-color;
|
||||
background-color: $navmenu-default-link-active-bg;
|
||||
}
|
||||
}
|
||||
> .disabled > a {
|
||||
&,
|
||||
&:hover,
|
||||
&:focus {
|
||||
color: $navmenu-default-link-disabled-color;
|
||||
background-color: $navmenu-default-link-disabled-bg;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Inverse navmenu
|
||||
.navmenu-inverse,
|
||||
.navbar-inverse .navbar-offcanvas {
|
||||
background-color: $navmenu-inverse-bg;
|
||||
border-color: $navmenu-inverse-border;
|
||||
|
||||
.navmenu-brand {
|
||||
color: $navmenu-inverse-brand-color;
|
||||
&:hover,
|
||||
&:focus {
|
||||
color: $navmenu-inverse-brand-hover-color;
|
||||
background-color: $navmenu-inverse-brand-hover-bg;
|
||||
}
|
||||
}
|
||||
|
||||
.navmenu-text {
|
||||
color: $navmenu-inverse-color;
|
||||
}
|
||||
|
||||
.navmenu-nav {
|
||||
// Caret should match text color on hover
|
||||
> .dropdown > a:hover .caret,
|
||||
> .dropdown > a:focus .caret {
|
||||
border-top-color: $navmenu-inverse-link-hover-color;
|
||||
border-bottom-color: $navmenu-inverse-link-hover-color;
|
||||
}
|
||||
|
||||
// Remove background color from open dropdown
|
||||
> .open > a {
|
||||
&,
|
||||
&:hover,
|
||||
&:focus {
|
||||
background-color: $navmenu-inverse-link-active-bg;
|
||||
color: $navmenu-inverse-link-active-color;
|
||||
.caret {
|
||||
border-top-color: $navmenu-inverse-link-active-color;
|
||||
border-bottom-color: $navmenu-inverse-link-active-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
> .dropdown > a .caret {
|
||||
border-top-color: $navmenu-inverse-link-color;
|
||||
border-bottom-color: $navmenu-inverse-link-color;
|
||||
}
|
||||
&.dropdown-menu {
|
||||
background-color: $navmenu-inverse-link-active-bg;
|
||||
& > .divider {
|
||||
background-color: $navmenu-inverse-bg;
|
||||
}
|
||||
> .active > a {
|
||||
&,
|
||||
&:hover,
|
||||
&:focus {
|
||||
background-color: darken($navmenu-inverse-link-active-bg, 6.5%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
> li > a {
|
||||
color: $navmenu-inverse-link-color;
|
||||
&:hover,
|
||||
&:focus {
|
||||
color: $navmenu-inverse-link-hover-color;
|
||||
background-color: $navmenu-inverse-link-hover-bg;
|
||||
}
|
||||
}
|
||||
> .active > a {
|
||||
&,
|
||||
&:hover,
|
||||
&:focus {
|
||||
color: $navmenu-inverse-link-active-color;
|
||||
background-color: $navmenu-inverse-link-active-bg;
|
||||
}
|
||||
}
|
||||
> .disabled > a {
|
||||
&,
|
||||
&:hover,
|
||||
&:focus {
|
||||
color: $navmenu-inverse-link-disabled-color;
|
||||
background-color: $navmenu-inverse-link-disabled-bg;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
48
scss/_offcanvas.scss
Normal file
48
scss/_offcanvas.scss
Normal file
@@ -0,0 +1,48 @@
|
||||
// Off canvas navigation
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin offcanvas {
|
||||
display: none;
|
||||
&.in {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: $screen-xs-max) {
|
||||
.offcanvas-xs {
|
||||
@include offcanvas;
|
||||
}
|
||||
}
|
||||
@media (max-width: $screen-sm-max) {
|
||||
.offcanvas-sm {
|
||||
@include offcanvas;
|
||||
}
|
||||
}
|
||||
@media (max-width: $screen-md-max) {
|
||||
.offcanvas-md {
|
||||
@include offcanvas;
|
||||
}
|
||||
}
|
||||
.offcanvas-lg {
|
||||
@include offcanvas;
|
||||
}
|
||||
|
||||
.canvas-sliding {
|
||||
-webkit-transition: top 0.35s, left 0.35s, bottom 0.35s, right 0.35s;
|
||||
transition: top 0.35s, left 0.35s, bottom 0.35s, right 0.35s;
|
||||
}
|
||||
|
||||
.offcanvas-clone {
|
||||
height: 0px !important;
|
||||
width: 0px !important;
|
||||
overflow: hidden !important;
|
||||
border: none !important;
|
||||
margin: 0px !important;
|
||||
padding: 0px !important;
|
||||
position: absolute !important;
|
||||
top: auto !important;
|
||||
left: auto !important;
|
||||
bottom: 0px !important;
|
||||
right: 0px !important;
|
||||
opacity: 0 !important;
|
||||
}
|
||||
22
scss/_rowlink.scss
Normal file
22
scss/_rowlink.scss
Normal file
@@ -0,0 +1,22 @@
|
||||
// Rowlink
|
||||
// --------------------------------------------------
|
||||
|
||||
.table.rowlink,
|
||||
.table .rowlink {
|
||||
td:not(.rowlink-skip) {
|
||||
cursor: pointer;
|
||||
|
||||
a {
|
||||
color: inherit;
|
||||
font: inherit;
|
||||
text-decoration: inherit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.table-hover.rowlink,
|
||||
.table-hover .rowlink {
|
||||
tr:hover td {
|
||||
background-color: darken($table-bg-hover, 15%);
|
||||
}
|
||||
}
|
||||
66
scss/_variables.scss
Normal file
66
scss/_variables.scss
Normal file
@@ -0,0 +1,66 @@
|
||||
//
|
||||
// Variables
|
||||
//
|
||||
// Either Twitter Bootstrap's "variables.less" or this package's
|
||||
// "default-variables.less" should be loaded before this file.
|
||||
// -------------------------------------------------------------
|
||||
|
||||
$zindex-navmenu-fixed: 1030 !default;
|
||||
$zindex-alert-fixed: 1035 !default;
|
||||
|
||||
$container-smooth: $container-lg !default;
|
||||
|
||||
$alert-fixed-width: $screen-md-min !default;
|
||||
|
||||
|
||||
//== Navmenu
|
||||
|
||||
// Basics of a navmenu
|
||||
$navmenu-width: 300px !default;
|
||||
$navmenu-margin-vertical: (0.5 * $line-height-computed) !default;
|
||||
$navmenu-default-color: #777 !default;
|
||||
$navmenu-default-bg: #f8f8f8 !default;
|
||||
$navmenu-default-border: darken($navmenu-default-bg, 6.5%) !default;
|
||||
|
||||
// Navmenu links
|
||||
$navmenu-default-link-color: #777 !default;
|
||||
$navmenu-default-link-hover-color: #333 !default;
|
||||
$navmenu-default-link-hover-bg: transparent !default;
|
||||
$navmenu-default-link-active-color: #555 !default;
|
||||
$navmenu-default-link-active-bg: darken($navmenu-default-bg, 6.5%) !default;
|
||||
$navmenu-default-link-disabled-color: #ccc !default;
|
||||
$navmenu-default-link-disabled-bg: transparent !default;
|
||||
|
||||
// Navmenu brand label
|
||||
$navmenu-default-brand-color: $navmenu-default-link-color !default;
|
||||
$navmenu-default-brand-hover-color: darken($navmenu-default-link-color, 10%) !default;
|
||||
$navmenu-default-brand-hover-bg: transparent !default;
|
||||
|
||||
|
||||
// Inverted navmenu
|
||||
//
|
||||
// Reset inverted navmenu basics
|
||||
$navmenu-inverse-color: $gray-light !default;
|
||||
$navmenu-inverse-bg: #222 !default;
|
||||
$navmenu-inverse-border: darken($navmenu-inverse-bg, 10%) !default;
|
||||
|
||||
// Inverted navmenu links
|
||||
$navmenu-inverse-link-color: $gray-light !default;
|
||||
$navmenu-inverse-link-hover-color: #fff !default;
|
||||
$navmenu-inverse-link-hover-bg: transparent !default;
|
||||
$navmenu-inverse-link-active-color: $navmenu-inverse-link-hover-color !default;
|
||||
$navmenu-inverse-link-active-bg: darken($navmenu-inverse-bg, 10%) !default;
|
||||
$navmenu-inverse-link-disabled-color: #444 !default;
|
||||
$navmenu-inverse-link-disabled-bg: transparent !default;
|
||||
|
||||
// Inverted navmenu brand label
|
||||
$navmenu-inverse-brand-color: $navmenu-inverse-link-color !default;
|
||||
$navmenu-inverse-brand-hover-color: #fff !default;
|
||||
$navmenu-inverse-brand-hover-bg: transparent !default;
|
||||
|
||||
// Inverted navmenu search
|
||||
// Normal navmenu needs no special styles or vars
|
||||
$navmenu-inverse-search-bg: lighten($navmenu-inverse-bg, 25%) !default;
|
||||
$navmenu-inverse-search-bg-focus: #fff !default;
|
||||
$navmenu-inverse-search-border: $navmenu-inverse-bg !default;
|
||||
$navmenu-inverse-search-placeholder-color: #ccc !default;
|
||||
19
scss/jasny-bootstrap.scss
Normal file
19
scss/jasny-bootstrap.scss
Normal file
@@ -0,0 +1,19 @@
|
||||
// Twitter Bootstrap's "variables.scss" should already be imported
|
||||
|
||||
// Core variables and mixins
|
||||
@import "variables";
|
||||
@import "mixins";
|
||||
|
||||
// Core CSS
|
||||
@import "grid-container-smooth";
|
||||
@import "button-labels";
|
||||
|
||||
// Components
|
||||
@import "nav-tab-alignment";
|
||||
@import "navmenu";
|
||||
@import "alerts-fixed";
|
||||
|
||||
// Components w/ JavaScript
|
||||
@import "offcanvas";
|
||||
@import "rowlink";
|
||||
@import "fileinput";
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user