├── .travis.yml
├── docs
├── build
│ ├── node_modules
│ │ ├── hogan.js
│ │ │ ├── .git_ignore
│ │ │ ├── .gitmodules
│ │ │ ├── test
│ │ │ │ ├── html
│ │ │ │ │ └── list.html
│ │ │ │ ├── templates
│ │ │ │ │ └── list.mustache
│ │ │ │ ├── index.html
│ │ │ │ ├── spec
│ │ │ │ │ ├── Rakefile
│ │ │ │ │ ├── Changes
│ │ │ │ │ ├── TESTING.md
│ │ │ │ │ ├── specs
│ │ │ │ │ │ ├── comments.json
│ │ │ │ │ │ ├── partials.json
│ │ │ │ │ │ ├── comments.yml
│ │ │ │ │ │ ├── delimiters.json
│ │ │ │ │ │ └── partials.yml
│ │ │ │ │ └── README.md
│ │ │ │ ├── spec.js
│ │ │ │ └── mustache.js
│ │ │ ├── web
│ │ │ │ ├── favicon.ico
│ │ │ │ ├── images
│ │ │ │ │ ├── logo.png
│ │ │ │ │ ├── noise.png
│ │ │ │ │ ├── stripes.png
│ │ │ │ │ └── small-hogan-icon.png
│ │ │ │ └── builds
│ │ │ │ │ └── 1.0.5
│ │ │ │ │ └── template-1.0.5.min.js
│ │ │ ├── package.json
│ │ │ ├── wrappers
│ │ │ │ ├── js.mustache
│ │ │ │ ├── amd.js.mustache
│ │ │ │ ├── common.js.mustache
│ │ │ │ └── mustache.js.mustache
│ │ │ ├── lib
│ │ │ │ └── hogan.js
│ │ │ ├── tools
│ │ │ │ ├── web_templates.js
│ │ │ │ └── release.js
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ └── bin
│ │ │ │ └── hulk
│ │ └── .bin
│ │ │ └── hulk
│ ├── package.json
│ └── index.js
├── assets
│ ├── ico
│ │ ├── favicon.ico
│ │ ├── favicon.png
│ │ ├── apple-touch-icon-114-precomposed.png
│ │ ├── apple-touch-icon-144-precomposed.png
│ │ ├── apple-touch-icon-57-precomposed.png
│ │ └── apple-touch-icon-72-precomposed.png
│ ├── font
│ │ ├── iconic_fill.eot
│ │ ├── iconic_fill.otf
│ │ ├── iconic_fill.ttf
│ │ ├── iconic_fill.woff
│ │ ├── iconic_stroke.eot
│ │ ├── iconic_stroke.otf
│ │ ├── iconic_stroke.ttf
│ │ └── iconic_stroke.woff
│ ├── img
│ │ ├── jasny-logo.png
│ │ ├── examples
│ │ │ ├── slide-01.jpg
│ │ │ ├── slide-02.jpg
│ │ │ ├── slide-03.jpg
│ │ │ ├── browser-icon-chrome.png
│ │ │ ├── browser-icon-firefox.png
│ │ │ ├── browser-icon-safari.png
│ │ │ ├── bootstrap-example-fluid.png
│ │ │ ├── bootstrap-example-signin.png
│ │ │ ├── bootstrap-example-starter.png
│ │ │ ├── bootstrap-example-carousel.png
│ │ │ ├── bootstrap-example-marketing.png
│ │ │ ├── bootstrap-example-justified-nav.png
│ │ │ ├── bootstrap-example-sticky-footer.png
│ │ │ └── bootstrap-example-marketing-narrow.png
│ │ ├── extended-by-jasny.png
│ │ ├── jasny-logo-emboss.png
│ │ ├── less-logo-large.png
│ │ ├── example-sites
│ │ │ ├── kippt.png
│ │ │ ├── fleetio.png
│ │ │ ├── jshint.png
│ │ │ ├── 8020select.png
│ │ │ ├── soundready.png
│ │ │ ├── adoptahydrant.png
│ │ │ ├── breakingnews.png
│ │ │ └── gathercontent.png
│ │ ├── grid-baseline-20px.png
│ │ ├── bootstrap-docs-readme.png
│ │ ├── bs-docs-twitter-github.png
│ │ ├── glyphicons-halflings.png
│ │ ├── bootstrap-mdo-sfmoma-01.jpg
│ │ ├── bootstrap-mdo-sfmoma-02.jpg
│ │ ├── bootstrap-mdo-sfmoma-03.jpg
│ │ ├── bs-docs-masthead-pattern.png
│ │ ├── responsive-illustrations.png
│ │ ├── bs-docs-bootstrap-features.png
│ │ ├── glyphicons-halflings-white.png
│ │ └── bs-docs-responsive-illustrations.png
│ └── js
│ │ ├── catincan.js
│ │ ├── google-code-prettify
│ │ └── prettify.css
│ │ ├── bootstrap-transition.js
│ │ ├── html5shiv.js
│ │ ├── bootstrap-rowlink.js
│ │ ├── bootstrap-alert.js
│ │ ├── bootstrap-button.js
│ │ ├── bootstrap-popover.js
│ │ ├── README.md
│ │ ├── bootstrap-affix.js
│ │ └── bootstrap-tab.js
└── examples
│ ├── starter-template.html
│ └── signin.html
├── font
├── iconic_fill.eot
├── iconic_fill.otf
├── iconic_fill.ttf
├── iconic_fill.woff
├── iconic_stroke.eot
├── iconic_stroke.otf
├── iconic_stroke.ttf
└── iconic_stroke.woff
├── img
├── glyphicons-halflings.png
└── glyphicons-halflings-white.png
├── component.json
├── less
├── layouts-semifluid.responsive-1200px-min.less
├── action-areas.less
├── page-alert.responsive-1200px-min.less
├── layouts-semifluid.less
├── layouts.less
├── rowlink.less
├── component-animations.less
├── jasny-forms.responsive-1200px-min.less
├── utilities.less
├── grid.less
├── page-alert.less
├── breadcrumbs.less
├── jasny-forms.responsive-767px-max.less
├── responsive-768px-979px.less
├── page-alert.responsive-767px-max.less
├── responsive-row-desktop.less
├── hero-unit.less
├── responsive-tables.less
├── wells.less
├── responsive-1200px-min.less
├── close.less
├── accordion.less
├── jasny-forms.responsive-768px-979px.less
├── jasny-bootstrap.less
├── jasny-responsive.less
├── pager.less
├── media.less
├── scaffolding.less
├── action-links.less
├── responsive.less
├── thumbnails.less
├── code.less
├── alerts.less
├── bootstrap.less
├── responsive-utilities.less
├── tooltip.less
├── jasny-forms.less
├── labels-badges.less
├── modals.less
├── fileupload.less
├── tests
│ └── forms-responsive.html
├── pagination.less
├── carousel.less
├── progress-bars.less
├── jasny-navs-tabbable.less
└── popovers.less
├── js
├── .jshintrc
├── tests
│ ├── unit
│ │ ├── bootstrap-transition.js
│ │ ├── bootstrap-phantom.js
│ │ ├── bootstrap-affix.js
│ │ ├── bootstrap-scrollspy.js
│ │ ├── bootstrap-alert.js
│ │ ├── bootstrap-tab.js
│ │ └── bootstrap-collapse.js
│ ├── server.js
│ ├── index.html
│ └── phantom.js
├── bootstrap.js
├── bootstrap-transition.js
├── bootstrap-rowlink.js
├── bootstrap-alert.js
├── bootstrap-button.js
├── bootstrap-popover.js
├── bootstrap-affix.js
└── bootstrap-tab.js
├── composer.json
├── .gitignore
├── package.json
└── CONTRIBUTING.md
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - 0.6
--------------------------------------------------------------------------------
/docs/build/node_modules/hogan.js/.git_ignore:
--------------------------------------------------------------------------------
1 | node_modules
2 |
--------------------------------------------------------------------------------
/font/iconic_fill.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/font/iconic_fill.eot
--------------------------------------------------------------------------------
/font/iconic_fill.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/font/iconic_fill.otf
--------------------------------------------------------------------------------
/font/iconic_fill.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/font/iconic_fill.ttf
--------------------------------------------------------------------------------
/font/iconic_fill.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/font/iconic_fill.woff
--------------------------------------------------------------------------------
/font/iconic_stroke.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/font/iconic_stroke.eot
--------------------------------------------------------------------------------
/font/iconic_stroke.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/font/iconic_stroke.otf
--------------------------------------------------------------------------------
/font/iconic_stroke.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/font/iconic_stroke.ttf
--------------------------------------------------------------------------------
/font/iconic_stroke.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/font/iconic_stroke.woff
--------------------------------------------------------------------------------
/docs/assets/ico/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/ico/favicon.ico
--------------------------------------------------------------------------------
/docs/assets/ico/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/ico/favicon.png
--------------------------------------------------------------------------------
/img/glyphicons-halflings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/img/glyphicons-halflings.png
--------------------------------------------------------------------------------
/docs/assets/font/iconic_fill.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/font/iconic_fill.eot
--------------------------------------------------------------------------------
/docs/assets/font/iconic_fill.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/font/iconic_fill.otf
--------------------------------------------------------------------------------
/docs/assets/font/iconic_fill.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/font/iconic_fill.ttf
--------------------------------------------------------------------------------
/docs/assets/img/jasny-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/img/jasny-logo.png
--------------------------------------------------------------------------------
/docs/assets/font/iconic_fill.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/font/iconic_fill.woff
--------------------------------------------------------------------------------
/docs/assets/font/iconic_stroke.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/font/iconic_stroke.eot
--------------------------------------------------------------------------------
/docs/assets/font/iconic_stroke.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/font/iconic_stroke.otf
--------------------------------------------------------------------------------
/docs/assets/font/iconic_stroke.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/font/iconic_stroke.ttf
--------------------------------------------------------------------------------
/img/glyphicons-halflings-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/img/glyphicons-halflings-white.png
--------------------------------------------------------------------------------
/docs/assets/font/iconic_stroke.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/font/iconic_stroke.woff
--------------------------------------------------------------------------------
/docs/assets/img/examples/slide-01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/img/examples/slide-01.jpg
--------------------------------------------------------------------------------
/docs/assets/img/examples/slide-02.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/img/examples/slide-02.jpg
--------------------------------------------------------------------------------
/docs/assets/img/examples/slide-03.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/img/examples/slide-03.jpg
--------------------------------------------------------------------------------
/docs/assets/img/extended-by-jasny.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/img/extended-by-jasny.png
--------------------------------------------------------------------------------
/docs/assets/img/jasny-logo-emboss.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/img/jasny-logo-emboss.png
--------------------------------------------------------------------------------
/docs/assets/img/less-logo-large.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/img/less-logo-large.png
--------------------------------------------------------------------------------
/docs/assets/img/example-sites/kippt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/img/example-sites/kippt.png
--------------------------------------------------------------------------------
/docs/assets/img/grid-baseline-20px.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/img/grid-baseline-20px.png
--------------------------------------------------------------------------------
/docs/assets/img/bootstrap-docs-readme.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/img/bootstrap-docs-readme.png
--------------------------------------------------------------------------------
/docs/assets/img/bs-docs-twitter-github.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/img/bs-docs-twitter-github.png
--------------------------------------------------------------------------------
/docs/assets/img/example-sites/fleetio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/img/example-sites/fleetio.png
--------------------------------------------------------------------------------
/docs/assets/img/example-sites/jshint.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/img/example-sites/jshint.png
--------------------------------------------------------------------------------
/docs/assets/img/glyphicons-halflings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/img/glyphicons-halflings.png
--------------------------------------------------------------------------------
/docs/assets/img/bootstrap-mdo-sfmoma-01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/img/bootstrap-mdo-sfmoma-01.jpg
--------------------------------------------------------------------------------
/docs/assets/img/bootstrap-mdo-sfmoma-02.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/img/bootstrap-mdo-sfmoma-02.jpg
--------------------------------------------------------------------------------
/docs/assets/img/bootstrap-mdo-sfmoma-03.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/img/bootstrap-mdo-sfmoma-03.jpg
--------------------------------------------------------------------------------
/docs/assets/img/bs-docs-masthead-pattern.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/img/bs-docs-masthead-pattern.png
--------------------------------------------------------------------------------
/docs/assets/img/example-sites/8020select.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/img/example-sites/8020select.png
--------------------------------------------------------------------------------
/docs/assets/img/example-sites/soundready.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/img/example-sites/soundready.png
--------------------------------------------------------------------------------
/docs/assets/img/responsive-illustrations.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/img/responsive-illustrations.png
--------------------------------------------------------------------------------
/docs/build/node_modules/hogan.js/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "test/spec"]
2 | path = test/spec
3 | url = https://github.com/mustache/spec.git
4 |
--------------------------------------------------------------------------------
/docs/assets/img/bs-docs-bootstrap-features.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/img/bs-docs-bootstrap-features.png
--------------------------------------------------------------------------------
/docs/assets/img/example-sites/adoptahydrant.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/img/example-sites/adoptahydrant.png
--------------------------------------------------------------------------------
/docs/assets/img/example-sites/breakingnews.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/img/example-sites/breakingnews.png
--------------------------------------------------------------------------------
/docs/assets/img/example-sites/gathercontent.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/img/example-sites/gathercontent.png
--------------------------------------------------------------------------------
/docs/assets/img/glyphicons-halflings-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/img/glyphicons-halflings-white.png
--------------------------------------------------------------------------------
/docs/assets/img/examples/browser-icon-chrome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/img/examples/browser-icon-chrome.png
--------------------------------------------------------------------------------
/docs/assets/img/examples/browser-icon-firefox.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/img/examples/browser-icon-firefox.png
--------------------------------------------------------------------------------
/docs/assets/img/examples/browser-icon-safari.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/img/examples/browser-icon-safari.png
--------------------------------------------------------------------------------
/docs/build/node_modules/hogan.js/test/html/list.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/docs/build/node_modules/hogan.js/web/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/build/node_modules/hogan.js/web/favicon.ico
--------------------------------------------------------------------------------
/docs/assets/ico/apple-touch-icon-114-precomposed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/ico/apple-touch-icon-114-precomposed.png
--------------------------------------------------------------------------------
/docs/assets/ico/apple-touch-icon-144-precomposed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/ico/apple-touch-icon-144-precomposed.png
--------------------------------------------------------------------------------
/docs/assets/ico/apple-touch-icon-57-precomposed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/ico/apple-touch-icon-57-precomposed.png
--------------------------------------------------------------------------------
/docs/assets/ico/apple-touch-icon-72-precomposed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/ico/apple-touch-icon-72-precomposed.png
--------------------------------------------------------------------------------
/docs/assets/img/bs-docs-responsive-illustrations.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/img/bs-docs-responsive-illustrations.png
--------------------------------------------------------------------------------
/docs/assets/img/examples/bootstrap-example-fluid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/img/examples/bootstrap-example-fluid.png
--------------------------------------------------------------------------------
/docs/build/node_modules/hogan.js/web/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/build/node_modules/hogan.js/web/images/logo.png
--------------------------------------------------------------------------------
/docs/assets/img/examples/bootstrap-example-signin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/img/examples/bootstrap-example-signin.png
--------------------------------------------------------------------------------
/docs/assets/img/examples/bootstrap-example-starter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/img/examples/bootstrap-example-starter.png
--------------------------------------------------------------------------------
/docs/build/node_modules/hogan.js/test/templates/list.mustache:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/docs/build/node_modules/hogan.js/web/images/noise.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/build/node_modules/hogan.js/web/images/noise.png
--------------------------------------------------------------------------------
/docs/assets/img/examples/bootstrap-example-carousel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/img/examples/bootstrap-example-carousel.png
--------------------------------------------------------------------------------
/docs/assets/img/examples/bootstrap-example-marketing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/img/examples/bootstrap-example-marketing.png
--------------------------------------------------------------------------------
/docs/build/node_modules/hogan.js/web/images/stripes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/build/node_modules/hogan.js/web/images/stripes.png
--------------------------------------------------------------------------------
/docs/assets/img/examples/bootstrap-example-justified-nav.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/img/examples/bootstrap-example-justified-nav.png
--------------------------------------------------------------------------------
/docs/assets/img/examples/bootstrap-example-sticky-footer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/img/examples/bootstrap-example-sticky-footer.png
--------------------------------------------------------------------------------
/docs/assets/img/examples/bootstrap-example-marketing-narrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/assets/img/examples/bootstrap-example-marketing-narrow.png
--------------------------------------------------------------------------------
/docs/build/node_modules/hogan.js/web/images/small-hogan-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fcoury/bootstrap/master/docs/build/node_modules/hogan.js/web/images/small-hogan-icon.png
--------------------------------------------------------------------------------
/docs/build/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "bootstrap-doc-builder"
3 | , "version": "0.0.1"
4 | , "description": "build bootstrap docs"
5 | , "dependencies": { "hogan.js": "1.0.5-dev" }
6 | }
7 |
--------------------------------------------------------------------------------
/component.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "bootstrap",
3 | "version": "2.3.1-j6",
4 | "main": ["./docs/assets/js/bootstrap.js", "./docs/assets/css/bootstrap.css"],
5 | "dependencies": {
6 | "jquery": "~1.8.0"
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/less/layouts-semifluid.responsive-1200px-min.less:
--------------------------------------------------------------------------------
1 | // RESPONSIVE CLASSES
2 | // ------------------
3 |
4 | // Semi-fluid container can grow up to size for big desktops
5 | .container-semifluid {
6 | max-width: 1170px;
7 | }
8 |
--------------------------------------------------------------------------------
/less/action-areas.less:
--------------------------------------------------------------------------------
1 | // Action-areas.less
2 | // -----------------
3 |
4 | // Page header actions
5 | .header-actions {
6 | line-height: 36px;
7 | padding: 0 20px;
8 | }
9 |
10 | // Table actions
11 | .table-actions {
12 | .clearfix();
13 | padding-bottom: 20px;
14 | }
15 |
--------------------------------------------------------------------------------
/js/.jshintrc:
--------------------------------------------------------------------------------
1 | {
2 | "validthis": true,
3 | "laxcomma" : true,
4 | "laxbreak" : true,
5 | "browser" : true,
6 | "eqnull" : true,
7 | "debug" : true,
8 | "devel" : true,
9 | "boss" : true,
10 | "expr" : true,
11 | "asi" : true,
12 | "evil" : true
13 | }
14 |
--------------------------------------------------------------------------------
/less/page-alert.responsive-1200px-min.less:
--------------------------------------------------------------------------------
1 | // Page-alert.responsive.less
2 | // Responsive CSS for page alerts - Large desktop and up
3 | // -----------------------------------------------------
4 |
5 | @media (min-width: 1200px) {
6 | // Bigger page-alert
7 | .page-alert .alert {
8 | width: 700px;
9 | margin-left: -375px;
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/less/layouts-semifluid.less:
--------------------------------------------------------------------------------
1 | // Layouts
2 | // Fixed-width and fluid (with sidebar) layouts
3 | // --------------------------------------------
4 |
5 | // Fluid container for small screens, fixed for big screens
6 | .container-semifluid {
7 | .container-fixed();
8 | padding-left: @gridGutterWidth;
9 | padding-right: @gridGutterWidth;
10 | max-width: @gridRowWidth;
11 | }
12 |
--------------------------------------------------------------------------------
/less/layouts.less:
--------------------------------------------------------------------------------
1 | //
2 | // Layouts
3 | // --------------------------------------------------
4 |
5 |
6 | // Container (centered, fixed-width layouts)
7 | .container {
8 | .container-fixed();
9 | }
10 |
11 | // Fluid layouts (left aligned, with sidebar, min- & max-width content)
12 | .container-fluid {
13 | padding-right: @gridGutterWidth;
14 | padding-left: @gridGutterWidth;
15 | .clearfix();
16 | }
--------------------------------------------------------------------------------
/less/rowlink.less:
--------------------------------------------------------------------------------
1 | // Rowlink.less
2 | // CSS for rowlink plugin
3 | // ----------------------
4 |
5 | tr.rowlink td {
6 | cursor: pointer;
7 | &.nolink {
8 | cursor: auto;
9 | }
10 | }
11 |
12 | .table tbody tr.rowlink:hover td {
13 | background-color: darken(@tableBackgroundHover, 15%);
14 | }
15 |
16 | a.rowlink {
17 | color: inherit;
18 | font: inherit;
19 | text-decoration: inherit;
20 | }
21 |
--------------------------------------------------------------------------------
/less/component-animations.less:
--------------------------------------------------------------------------------
1 | //
2 | // Component animations
3 | // --------------------------------------------------
4 |
5 |
6 | .fade {
7 | opacity: 0;
8 | .transition(opacity .15s linear);
9 | &.in {
10 | opacity: 1;
11 | }
12 | }
13 |
14 | .collapse {
15 | position: relative;
16 | height: 0;
17 | overflow: hidden;
18 | .transition(height .35s ease);
19 | &.in {
20 | height: auto;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/docs/build/node_modules/hogan.js/test/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | test
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/less/jasny-forms.responsive-1200px-min.less:
--------------------------------------------------------------------------------
1 | // General improvements on form styling for large desktop and up
2 | // -------------------------------------------------------------
3 |
4 | @media (min-width: 1200px) {
5 | .small-labels {
6 | .control-group > label {
7 | width: 80px;
8 | }
9 | .controls {
10 | margin-left: 100px;
11 | }
12 | .form-actions {
13 | padding-left: 100px;
14 | }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/js/tests/unit/bootstrap-transition.js:
--------------------------------------------------------------------------------
1 | $(function () {
2 |
3 | module("bootstrap-transition")
4 |
5 | test("should be defined on jquery support object", function () {
6 | ok($.support.transition !== undefined, 'transition object is defined')
7 | })
8 |
9 | test("should provide an end object", function () {
10 | ok($.support.transition ? $.support.transition.end : true, 'end string is defined')
11 | })
12 |
13 | })
--------------------------------------------------------------------------------
/less/utilities.less:
--------------------------------------------------------------------------------
1 | //
2 | // Utility classes
3 | // --------------------------------------------------
4 |
5 |
6 | // Quick floats
7 | .pull-right {
8 | float: right;
9 | }
10 | .pull-left {
11 | float: left;
12 | }
13 |
14 | // Toggling content
15 | .hide {
16 | display: none;
17 | }
18 | .show {
19 | display: block;
20 | }
21 |
22 | // Visibility
23 | .invisible {
24 | visibility: hidden;
25 | }
26 |
27 | // For Affix plugin
28 | .affix {
29 | position: fixed;
30 | }
31 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "jasny/bootstrap"
3 | , "description": "Sleek, intuitive, and powerful front-end framework for faster and easier web development."
4 | , "keywords": ["bootstrap", "css"]
5 | , "homepage": "http://jasny.github.com/bootstrap/"
6 | , "authors": [
7 | {"name": "Twitter Inc."}
8 | , {"name": "Arnold Daniels", "email": "arnold@jasny.net", "homepage": "http://www.jasny.net"}
9 | ]
10 | , "license": "Apache-2.0"
11 | , "replace": { "twitter/bootstrap" : "2.3.1" }
12 | }
13 |
--------------------------------------------------------------------------------
/less/grid.less:
--------------------------------------------------------------------------------
1 | //
2 | // Grid system
3 | // --------------------------------------------------
4 |
5 |
6 | // Fixed (940px)
7 | #grid > .core(@gridColumnWidth, @gridGutterWidth);
8 |
9 | // Fluid (940px)
10 | #grid > .fluid(@fluidGridColumnWidth, @fluidGridGutterWidth);
11 |
12 | // Reset utility classes due to specificity
13 | [class*="span"].hide,
14 | .row-fluid [class*="span"].hide {
15 | display: none;
16 | }
17 |
18 | [class*="span"].pull-right,
19 | .row-fluid [class*="span"].pull-right {
20 | float: right;
21 | }
22 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Numerous always-ignore extensions
2 | *.diff
3 | *.err
4 | *.orig
5 | *.log
6 | *.rej
7 | *.swo
8 | *.swp
9 | *.zip
10 | *.vi
11 | *~
12 | *.sass-cache
13 |
14 | # OS or Editor folders
15 | .DS_Store
16 | ._*
17 | Thumbs.db
18 | .cache
19 | .project
20 | .settings
21 | .tmproj
22 | *.esproj
23 | nbproject
24 | *.sublime-project
25 | *.sublime-workspace
26 | .c9revisions
27 |
28 | # Komodo
29 | *.komodoproject
30 | .komodotools
31 |
32 | # Folders to ignore
33 | .hg
34 | .svn
35 | .CVS
36 | .idea
37 | node_modules
38 | dist
39 |
--------------------------------------------------------------------------------
/less/page-alert.less:
--------------------------------------------------------------------------------
1 | // Page-alert.less
2 | // An alert at the top of the page
3 | // -------------------------------
4 |
5 | .page-alert {
6 | position: absolute;
7 | width: 0;
8 | top: 0;
9 | left: 50%;
10 | z-index: 1020;
11 | .alert {
12 | width: 550px;
13 | margin-left: -300px; // incl half of 49px horizontal padding
14 | border-top-width: 0;
15 | .border-radius(0 0 4px 4px);
16 | }
17 | }
18 | .navbar-fixed-top + .page-alert {
19 | top: 40px;
20 | }
21 | body > .page-alert {
22 | position: fixed;
23 | }
24 |
--------------------------------------------------------------------------------
/less/breadcrumbs.less:
--------------------------------------------------------------------------------
1 | //
2 | // Breadcrumbs
3 | // --------------------------------------------------
4 |
5 |
6 | .breadcrumb {
7 | padding: 8px 15px;
8 | margin: 0 0 @baseLineHeight;
9 | list-style: none;
10 | background-color: #f5f5f5;
11 | .border-radius(@baseBorderRadius);
12 | > li {
13 | display: inline-block;
14 | .ie7-inline-block();
15 | text-shadow: 0 1px 0 @white;
16 | > .divider {
17 | padding: 0 5px;
18 | color: #ccc;
19 | }
20 | }
21 | > .active {
22 | color: @grayLight;
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/less/jasny-forms.responsive-767px-max.less:
--------------------------------------------------------------------------------
1 | // General improvements on form styling for Landscape phone to desktop/tablet
2 | // --------------------------------------------------------------------------
3 |
4 | @media (max-width: 480px) {
5 | // Move over all input controls and content
6 | .form-horizontal .controls,
7 | .form-horizontal .well .controls,
8 | .small-labels .controls {
9 | margin-left: 0;
10 | }
11 | }
12 |
13 | @media (max-width: 768px) {
14 | .form-horizontal .form-actions {
15 | padding-left: 18px;
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/less/responsive-768px-979px.less:
--------------------------------------------------------------------------------
1 | //
2 | // Responsive: Tablet to desktop
3 | // --------------------------------------------------
4 |
5 |
6 | @media (min-width: 768px) and (max-width: 979px) {
7 |
8 | // Fixed grid
9 | #grid > .core(@gridColumnWidth768, @gridGutterWidth768);
10 |
11 | // Fluid grid
12 | #grid > .fluid(@fluidGridColumnWidth768, @fluidGridGutterWidth768);
13 |
14 | // Input grid
15 | #grid > .input(@gridColumnWidth768, @gridGutterWidth768);
16 |
17 | // No need to reset .thumbnails here since it's the same @gridGutterWidth
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/less/page-alert.responsive-767px-max.less:
--------------------------------------------------------------------------------
1 | // Page-alert.responsive.less
2 | // Responsive CSS for page alerts - Landscape phone to desktop/tablet
3 | // ------------------------------------------------------------------
4 |
5 | @media (max-width: 480px) {
6 | // Show page alert as normal alert
7 | .page-alert {
8 | position: static;
9 | width: auto;
10 | .alert {
11 | width: auto;
12 | margin-left: 0;
13 | border-top-width: 1px;
14 | .border-radius(4px);
15 | }
16 | }
17 | body > .page-alert {
18 | position: static;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/less/responsive-row-desktop.less:
--------------------------------------------------------------------------------
1 | // Row-desktop.responsive.less
2 | // Only show as a row on a desktop, not on a tablet
3 | // ------------------------------------------------
4 |
5 | @media (min-width: 768px) and (max-width: 979px) {
6 | .row-desktop {
7 | &.row-fluid {
8 | width: 100%;
9 | }
10 | // Undo negative margin on rows
11 | &.row {
12 | margin-left: 0;
13 | }
14 | // Make all columns even
15 | > [class*="span"],
16 | > [class*="span"] {
17 | float: none;
18 | display: block;
19 | width: auto;
20 | margin: 0;
21 | }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/less/hero-unit.less:
--------------------------------------------------------------------------------
1 | //
2 | // Hero unit
3 | // --------------------------------------------------
4 |
5 |
6 | .hero-unit {
7 | padding: 60px;
8 | margin-bottom: 30px;
9 | font-size: 18px;
10 | font-weight: 200;
11 | line-height: @baseLineHeight * 1.5;
12 | color: @heroUnitLeadColor;
13 | background-color: @heroUnitBackground;
14 | .border-radius(6px);
15 | h1 {
16 | margin-bottom: 0;
17 | font-size: 60px;
18 | line-height: 1;
19 | color: @heroUnitHeadingColor;
20 | letter-spacing: -1px;
21 | }
22 | li {
23 | line-height: @baseLineHeight * 1.5; // Reset since we specify in type.less
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/docs/build/node_modules/hogan.js/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "hogan.js"
3 | , "description": "A mustache compiler."
4 | , "version": "1.0.5-dev"
5 | , "keywords": ["mustache", "template"]
6 | , "main": "./lib/hogan.js"
7 | , "homepage": "http://twitter.github.com/hogan.js/"
8 | , "author": "Twitter Inc."
9 | , "repository": {
10 | "type": "git"
11 | , "url": "https://github.com/twitter/hogan.js.git"
12 | }
13 | , "licenses": [
14 | { "type": "Apache-2.0"
15 | , "url": "http://www.apache.org/licenses/LICENSE-2.0"
16 | }
17 | ]
18 | , "devDependencies": { "uglify-js": "*" }
19 | , "bin" : { "hulk" : "./bin/hulk" }
20 | }
21 |
--------------------------------------------------------------------------------
/less/responsive-tables.less:
--------------------------------------------------------------------------------
1 | @media (max-width: 767px) {
2 | .table-responsive tr {
3 | display: block;
4 | padding: 8px;
5 | }
6 | .table-bordered.table-responsive tr {
7 | border: 1px solid #DDD;
8 | border-top: 0;
9 | border-right: 0;
10 | }
11 | .table-responsive td, .table-responsive th {
12 | display: block;
13 | padding: 0;
14 | border: none;
15 | font-weight: normal;
16 | }
17 | .table-responsive th {
18 | font-style: italic;
19 | }
20 |
21 | .responsive-strong {
22 | font-weight: bold;
23 | }
24 | .responsive-em {
25 | font-style: italic;
26 | }
27 | .responsive-soft {
28 | color: #999;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/js/tests/server.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Simple connect server for phantom.js
3 | * Adapted from Modernizr
4 | */
5 |
6 | var connect = require('connect')
7 | , url = require('url')
8 | , querystring = require('querystring')
9 | , http = require('http')
10 | , fs = require('fs')
11 | , app = connect()
12 | .use(connect.static(__dirname + '/../../'))
13 | .use(function(req, res, next) {
14 | if (url.parse(req.url).pathname == '/data') res.end(querystring.parse(url.parse(req.url).query).items)
15 | else next()
16 | })
17 |
18 | http.createServer(app).listen(3000);
19 |
20 | fs.writeFileSync(__dirname + '/pid.txt', process.pid, 'utf-8')
--------------------------------------------------------------------------------
/less/wells.less:
--------------------------------------------------------------------------------
1 | //
2 | // Wells
3 | // --------------------------------------------------
4 |
5 |
6 | // Base class
7 | .well {
8 | min-height: 20px;
9 | padding: 19px;
10 | margin-bottom: 20px;
11 | background-color: @wellBackground;
12 | border: 1px solid darken(@wellBackground, 7%);
13 | .border-radius(@baseBorderRadius);
14 | .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));
15 | blockquote {
16 | border-color: #ddd;
17 | border-color: rgba(0,0,0,.15);
18 | }
19 | }
20 |
21 | // Sizes
22 | .well-large {
23 | padding: 24px;
24 | .border-radius(@borderRadiusLarge);
25 | }
26 | .well-small {
27 | padding: 9px;
28 | .border-radius(@borderRadiusSmall);
29 | }
30 |
--------------------------------------------------------------------------------
/less/responsive-1200px-min.less:
--------------------------------------------------------------------------------
1 | //
2 | // Responsive: Large desktop and up
3 | // --------------------------------------------------
4 |
5 |
6 | @media (min-width: 1200px) {
7 |
8 | // Fixed grid
9 | #grid > .core(@gridColumnWidth1200, @gridGutterWidth1200);
10 |
11 | // Fluid grid
12 | #grid > .fluid(@fluidGridColumnWidth1200, @fluidGridGutterWidth1200);
13 |
14 | // Input grid
15 | #grid > .input(@gridColumnWidth1200, @gridGutterWidth1200);
16 |
17 | // Thumbnails
18 | .thumbnails {
19 | margin-left: -@gridGutterWidth1200;
20 | }
21 | .thumbnails > li {
22 | margin-left: @gridGutterWidth1200;
23 | }
24 | .row-fluid .thumbnails {
25 | margin-left: 0;
26 | }
27 |
28 | }
29 |
--------------------------------------------------------------------------------
/docs/build/node_modules/hogan.js/wrappers/js.mustache:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2011 Twitter, Inc.
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 |
16 | {{{template}}}
17 | {{{compiler}}}
18 |
--------------------------------------------------------------------------------
/less/close.less:
--------------------------------------------------------------------------------
1 | //
2 | // Close icons
3 | // --------------------------------------------------
4 |
5 |
6 | .close {
7 | float: right;
8 | font-size: 20px;
9 | font-weight: bold;
10 | line-height: @baseLineHeight;
11 | color: @black;
12 | text-shadow: 0 1px 0 rgba(255,255,255,1);
13 | .opacity(20);
14 | &:hover,
15 | &:focus {
16 | color: @black;
17 | text-decoration: none;
18 | cursor: pointer;
19 | .opacity(40);
20 | }
21 | }
22 |
23 | // Additional properties for button version
24 | // iOS requires the button element instead of an anchor tag.
25 | // If you want the anchor version, it requires `href="#"`.
26 | button.close {
27 | padding: 0;
28 | cursor: pointer;
29 | background: transparent;
30 | border: 0;
31 | -webkit-appearance: none;
32 | }
--------------------------------------------------------------------------------
/less/accordion.less:
--------------------------------------------------------------------------------
1 | //
2 | // Accordion
3 | // --------------------------------------------------
4 |
5 |
6 | // Parent container
7 | .accordion {
8 | margin-bottom: @baseLineHeight;
9 | }
10 |
11 | // Group == heading + body
12 | .accordion-group {
13 | margin-bottom: 2px;
14 | border: 1px solid #e5e5e5;
15 | .border-radius(@baseBorderRadius);
16 | }
17 | .accordion-heading {
18 | border-bottom: 0;
19 | }
20 | .accordion-heading .accordion-toggle {
21 | display: block;
22 | padding: 8px 15px;
23 | }
24 |
25 | // General toggle styles
26 | .accordion-toggle {
27 | cursor: pointer;
28 | }
29 |
30 | // Inner needs the styles because you can't animate properly with any styles on the element
31 | .accordion-inner {
32 | padding: 9px 15px;
33 | border-top: 1px solid #e5e5e5;
34 | }
35 |
--------------------------------------------------------------------------------
/js/tests/unit/bootstrap-phantom.js:
--------------------------------------------------------------------------------
1 | // Logging setup for phantom integration
2 | // adapted from Modernizr
3 |
4 | QUnit.begin = function () {
5 | console.log("Starting test suite")
6 | console.log("================================================\n")
7 | }
8 |
9 | QUnit.moduleDone = function (opts) {
10 | if (opts.failed === 0) {
11 | console.log("\u2714 All tests passed in '" + opts.name + "' module")
12 | } else {
13 | console.log("\u2716 " + opts.failed + " tests failed in '" + opts.name + "' module")
14 | }
15 | }
16 |
17 | QUnit.done = function (opts) {
18 | console.log("\n================================================")
19 | console.log("Tests completed in " + opts.runtime + " milliseconds")
20 | console.log(opts.passed + " tests of " + opts.total + " passed, " + opts.failed + " failed.")
21 | }
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "bootstrap"
3 | , "description": "Sleek, intuitive, and powerful front-end framework for faster and easier web development."
4 | , "version": "2.3.1-j6"
5 | , "keywords": ["bootstrap", "css"]
6 | , "homepage": "http://jasny.github.com/bootstrap/"
7 | , "author": "Arnold Daniels "
8 | , "scripts": { "test": "make test" }
9 | , "repository": {
10 | "type": "git"
11 | , "url": "https://github.com/jasny/bootstrap.git"
12 | }
13 | , "licenses": [
14 | {
15 | "type": "Apache-2.0"
16 | , "url": "http://www.apache.org/licenses/LICENSE-2.0"
17 | }
18 | ]
19 | , "devDependencies": {
20 | "uglify-js": "1.3.4"
21 | , "jshint": "0.9.1"
22 | , "recess": "1.1.6"
23 | , "connect": "2.1.3"
24 | , "hogan.js": "2.0.0"
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/docs/build/node_modules/hogan.js/wrappers/amd.js.mustache:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2011 Twitter, Inc.
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 |
16 | {{{template}}}
17 | {{{compiler}}}
18 |
19 | if (typeof define === 'function' && define.amd) {
20 | define(Hogan);
21 | }
22 |
--------------------------------------------------------------------------------
/less/jasny-forms.responsive-768px-979px.less:
--------------------------------------------------------------------------------
1 | // General improvements on form styling for Tablet to desktop
2 | // ----------------------------------------------------------
3 |
4 | @media (min-width: 768px) and (max-width: 979px) {
5 | .form-horizontal {
6 | .control-label {
7 | width: 100px;
8 | }
9 | .controls {
10 | margin-left: 110px;
11 | }
12 | .form-actions {
13 | padding-left: 110px;
14 | }
15 | }
16 | .form-horizontal .well {
17 | .control-label {
18 | width: 80px;
19 | }
20 | .controls {
21 | margin-left: 90px;
22 | }
23 | }
24 |
25 | .small-labels {
26 | .control-group > label {
27 | width: 50px;
28 | }
29 | .controls {
30 | margin-left: 60px;
31 | }
32 | .form-actions {
33 | padding-left: 60px;
34 | }
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/docs/build/node_modules/hogan.js/wrappers/common.js.mustache:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2011 Twitter, Inc.
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 |
16 | {{{template}}}
17 | {{{compiler}}}
18 |
19 | if (typeof module !== 'undefined' && module.exports) {
20 | module.exports = Hogan;
21 | }
22 |
--------------------------------------------------------------------------------
/docs/build/node_modules/hogan.js/lib/hogan.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2011 Twitter, Inc.
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 |
16 | // This file is for use with Node.js. See dist/ for browser files.
17 |
18 | var Hogan = require('./compiler');
19 | Hogan.Template = require('./template').Template;
20 | module.exports = Hogan;
--------------------------------------------------------------------------------
/less/jasny-bootstrap.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * Jasny Bootstrap Extensions j3
3 | *
4 | * Copyright 2012 Jasny BV
5 | * Licensed under the Apache License v2.0
6 | * http://www.apache.org/licenses/LICENSE-2.0
7 | *
8 | * Extended with pride by @ArnoldDaniels of jasny.net
9 | */
10 |
11 | // Core variables and mixins
12 | @import "variables.less"; // Modify this for custom colors, font-sizes, etc
13 | @import "mixins.less";
14 |
15 | // Grid system and page structure
16 | @import "layouts-semifluid.less";
17 |
18 | // Base CSS
19 | @import "jasny-forms.less";
20 | @import "forms-uneditable.less";
21 | @import "action-areas.less";
22 | @import "rowlink.less";
23 |
24 | // Components: Buttons & Alerts
25 | @import "action-links.less";
26 | @import "iconic.less";
27 | @import "page-alert.less";
28 | @import "fileupload.less";
29 |
30 | // Components: Nav
31 | @import "jasny-navs-tabbable.less";
32 |
--------------------------------------------------------------------------------
/docs/build/node_modules/hogan.js/test/spec/Rakefile:
--------------------------------------------------------------------------------
1 | require 'json'
2 | require 'yaml'
3 |
4 | # Our custom YAML tags must retain their magic.
5 | %w[ code ].each do |tag|
6 | YAML::add_builtin_type(tag) { |_,val| val.merge(:__tag__ => tag) }
7 | end
8 |
9 | desc 'Build all alternate versions of the specs.'
10 | multitask :build => [ 'build:json' ]
11 |
12 | namespace :build do
13 | note = 'Do not edit this file; changes belong in the appropriate YAML file.'
14 |
15 | desc 'Build JSON versions of the specs.'
16 | task :json do
17 | rm(Dir['specs/*.json'], :verbose => false)
18 | Dir.glob('specs/*.yml').each do |filename|
19 | json_file = filename.gsub('.yml', '.json')
20 |
21 | File.open(json_file, 'w') do |file|
22 | doc = YAML.load_file(filename)
23 | file << doc.merge(:__ATTN__ => note).to_json()
24 | end
25 | end
26 | end
27 | end
28 |
--------------------------------------------------------------------------------
/docs/assets/js/catincan.js:
--------------------------------------------------------------------------------
1 | (function () {
2 | var div = document.createElement("div");
3 | div.id = "catincan-ribbon";
4 | var img = document.createElement("img");
5 | img.src = "https://www.catincan.com/sites/all/themes/catincan2/ribbons/images/catincan-ribbon-l02.png";
6 | img.style.position = "absolute";
7 | img.style.top = 0;
8 | img.style.left = 0;
9 | img.style.width = "192px";
10 | img.style.height = "198px";
11 | img.useMap = "#triangle";
12 | div.appendChild (img);
13 | var map = document.createElement("map");
14 | map.name="triangle";
15 | var area = document.createElement("area");
16 | area.shape = "poly";
17 | area.coords = "0,0,192,0,0,198";
18 | area.href = "https://www.catincan.com/projects/close/jasny-bootstrap";
19 | map.appendChild(area);
20 | div.appendChild (map);
21 | document.getElementsByTagName ("body")[0].appendChild (div);
22 | })()
23 |
--------------------------------------------------------------------------------
/js/tests/unit/bootstrap-affix.js:
--------------------------------------------------------------------------------
1 | $(function () {
2 |
3 | module("bootstrap-affix")
4 |
5 | test("should provide no conflict", function () {
6 | var affix = $.fn.affix.noConflict()
7 | ok(!$.fn.affix, 'affix was set back to undefined (org value)')
8 | $.fn.affix = affix
9 | })
10 |
11 | test("should be defined on jquery object", function () {
12 | ok($(document.body).affix, 'affix method is defined')
13 | })
14 |
15 | test("should return element", function () {
16 | ok($(document.body).affix()[0] == document.body, 'document.body returned')
17 | })
18 |
19 | test("should exit early if element is not visible", function () {
20 | var $affix = $('
').affix()
21 | $affix.data('affix').checkPosition()
22 | ok(!$affix.hasClass('affix'), 'affix class was not added')
23 | })
24 |
25 | })
--------------------------------------------------------------------------------
/less/jasny-responsive.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * Jasny Bootstrap Responsive Extensions j3
3 | *
4 | * Copyright 2012 Jasny BV
5 | * Licensed under the Apache License v2.0
6 | * http://www.apache.org/licenses/LICENSE-2.0
7 | *
8 | * Extended with pride by @ArnoldDaniels of jasny.net
9 | */
10 |
11 | // Core variables and mixins
12 | @import "variables.less"; // Modify this for custom colors, font-sizes, etc
13 | @import "mixins.less";
14 |
15 | // Grid system and page structure
16 | @import "layouts-semifluid.responsive-1200px-min.less";
17 | @import "responsive-row-desktop.less";
18 | @import "responsive-tables.less";
19 |
20 | // Base CSS
21 | @import "jasny-forms.responsive-767px-max.less";
22 | @import "jasny-forms.responsive-768px-979px.less";
23 | @import "jasny-forms.responsive-1200px-min.less";
24 |
25 | // Components: Buttons & Alerts
26 | @import "page-alert.responsive-767px-max.less";
27 | @import "page-alert.responsive-1200px-min.less";
28 |
--------------------------------------------------------------------------------
/less/pager.less:
--------------------------------------------------------------------------------
1 | //
2 | // Pager pagination
3 | // --------------------------------------------------
4 |
5 |
6 | .pager {
7 | margin: @baseLineHeight 0;
8 | list-style: none;
9 | text-align: center;
10 | .clearfix();
11 | }
12 | .pager li {
13 | display: inline;
14 | }
15 | .pager li > a,
16 | .pager li > span {
17 | display: inline-block;
18 | padding: 5px 14px;
19 | background-color: #fff;
20 | border: 1px solid #ddd;
21 | .border-radius(15px);
22 | }
23 | .pager li > a:hover,
24 | .pager li > a:focus {
25 | text-decoration: none;
26 | background-color: #f5f5f5;
27 | }
28 | .pager .next > a,
29 | .pager .next > span {
30 | float: right;
31 | }
32 | .pager .previous > a,
33 | .pager .previous > span {
34 | float: left;
35 | }
36 | .pager .disabled > a,
37 | .pager .disabled > a:hover,
38 | .pager .disabled > a:focus,
39 | .pager .disabled > span {
40 | color: @grayLight;
41 | background-color: #fff;
42 | cursor: default;
43 | }
--------------------------------------------------------------------------------
/docs/assets/js/google-code-prettify/prettify.css:
--------------------------------------------------------------------------------
1 | .com { color: #93a1a1; }
2 | .lit { color: #195f91; }
3 | .pun, .opn, .clo { color: #93a1a1; }
4 | .fun { color: #dc322f; }
5 | .str, .atv { color: #D14; }
6 | .kwd, .prettyprint .tag { color: #1e347b; }
7 | .typ, .atn, .dec, .var { color: teal; }
8 | .pln { color: #48484c; }
9 |
10 | .prettyprint {
11 | padding: 8px;
12 | background-color: #f7f7f9;
13 | border: 1px solid #e1e1e8;
14 | }
15 | .prettyprint.linenums {
16 | -webkit-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
17 | -moz-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
18 | box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
19 | }
20 |
21 | /* Specify class=linenums on a pre to get line numbering */
22 | ol.linenums {
23 | margin: 0 0 0 33px; /* IE indents via margin-left */
24 | }
25 | ol.linenums li {
26 | padding-left: 12px;
27 | color: #bebec5;
28 | line-height: 20px;
29 | text-shadow: 0 1px 0 #fff;
30 | }
--------------------------------------------------------------------------------
/less/media.less:
--------------------------------------------------------------------------------
1 | // Media objects
2 | // Source: http://stubbornella.org/content/?p=497
3 | // --------------------------------------------------
4 |
5 |
6 | // Common styles
7 | // -------------------------
8 |
9 | // Clear the floats
10 | .media,
11 | .media-body {
12 | overflow: hidden;
13 | *overflow: visible;
14 | zoom: 1;
15 | }
16 |
17 | // Proper spacing between instances of .media
18 | .media,
19 | .media .media {
20 | margin-top: 15px;
21 | }
22 | .media:first-child {
23 | margin-top: 0;
24 | }
25 |
26 | // For images and videos, set to block
27 | .media-object {
28 | display: block;
29 | }
30 |
31 | // Reset margins on headings for tighter default spacing
32 | .media-heading {
33 | margin: 0 0 5px;
34 | }
35 |
36 |
37 | // Media image alignment
38 | // -------------------------
39 |
40 | .media > .pull-left {
41 | margin-right: 10px;
42 | }
43 | .media > .pull-right {
44 | margin-left: 10px;
45 | }
46 |
47 |
48 | // Media list variation
49 | // -------------------------
50 |
51 | // Undo default ul/ol styles
52 | .media-list {
53 | margin-left: 0;
54 | list-style: none;
55 | }
56 |
--------------------------------------------------------------------------------
/less/scaffolding.less:
--------------------------------------------------------------------------------
1 | //
2 | // Scaffolding
3 | // --------------------------------------------------
4 |
5 |
6 | // Body reset
7 | // -------------------------
8 |
9 | body {
10 | margin: 0;
11 | font-family: @baseFontFamily;
12 | font-size: @baseFontSize;
13 | line-height: @baseLineHeight;
14 | color: @textColor;
15 | background-color: @bodyBackground;
16 | }
17 |
18 |
19 | // Links
20 | // -------------------------
21 |
22 | a {
23 | color: @linkColor;
24 | text-decoration: none;
25 | }
26 | a:hover,
27 | a:focus {
28 | color: @linkColorHover;
29 | text-decoration: underline;
30 | }
31 |
32 |
33 | // Images
34 | // -------------------------
35 |
36 | // Rounded corners
37 | .img-rounded {
38 | .border-radius(6px);
39 | }
40 |
41 | // Add polaroid-esque trim
42 | .img-polaroid {
43 | padding: 4px;
44 | background-color: #fff;
45 | border: 1px solid #ccc;
46 | border: 1px solid rgba(0,0,0,.2);
47 | .box-shadow(0 1px 3px rgba(0,0,0,.1));
48 | }
49 |
50 | // Perfect circle
51 | .img-circle {
52 | .border-radius(500px); // crank the border-radius so it works with most reasonably sized images
53 | }
54 |
--------------------------------------------------------------------------------
/docs/build/node_modules/hogan.js/test/spec/Changes:
--------------------------------------------------------------------------------
1 | 2011-03-20: v1.1.2
2 | Added tests for standalone tags at string boundaries.
3 | Added tests for rendering lambda returns after delimiter changes.
4 |
5 | 2011-03-20: v1.0.3
6 | Added tests for standalone tags at string boundaries.
7 | Added tests for rendering lambda returns after delimiter changes.
8 |
9 | 2011-03-05: v1.1.1
10 | Added tests for indented inline sections.
11 | Added tests for Windows-style newlines.
12 |
13 | 2011-03-05: v1.0.2
14 | Added tests for indented inline sections.
15 | Added tests for Windows-style newlines.
16 |
17 | 2011-03-04: v1.1.0
18 | Implicit iterators.
19 | A single period (`.`) may now be used as a name in Interpolation tags,
20 | which represents the top of stack (cast as a String).
21 | Dotted names.
22 | Names containing one or more periods should be resolved as chained
23 | properties; naïvely, this is like nesting section tags, but with some
24 | built-in scoping protections.
25 |
26 | 2011-03-02: v1.0.1
27 | Clarifying a point in the README about version compliance.
28 | Adding high-level documentation to each spec file.
29 |
30 | 2011-02-28: v1.0.0
31 | Initial Release
32 |
--------------------------------------------------------------------------------
/less/action-links.less:
--------------------------------------------------------------------------------
1 | // ACTION LINK STYLES
2 | // ------------------
3 |
4 | .act {
5 | background: inherit;
6 | border: none;
7 | display: inline;
8 | padding: 0;
9 | color: #555555;
10 | font-weight: bold;
11 | .transition(text-shadow .1s linear);
12 | &:hover {
13 | color: #333333;
14 | text-decoration: none;
15 | text-shadow: 1px 1px 3px rgba(85, 85, 85, 0.5);
16 | }
17 | }
18 |
19 | // Mixin for alternative styles
20 | .act-style(@normal, @hover) {
21 | color: @normal;
22 | &:hover {
23 | color: @hover;
24 | text-shadow: 1px 1px 3px hsla(hue(@normal), saturation(@normal), lightness(@normal), 0.5);
25 | }
26 | }
27 |
28 | // Alternative styles
29 | .act-primary {
30 | .act-style(#006DCC, #0044CC);
31 | }
32 | .act-info {
33 | .act-style(#49AFCD, #2F96B4);
34 | }
35 | .act-success {
36 | .act-style(#51A351, #468847);
37 | }
38 | .act-warning {
39 | .act-style(#C09853, #F89406);
40 | }
41 | .act-danger {
42 | .act-style(#B94A48, #BD362F);
43 | }
44 |
45 | .act.disabled,
46 | .act[disabled] {
47 | color: #AAAAAA;
48 | cursor: not-allowed;
49 | &:hover {
50 | color: #AAAAAA;
51 | text-shadow: none;
52 | }
53 | }
54 |
55 | .form-actions .act {
56 | line-height: 30px;
57 | }
58 |
--------------------------------------------------------------------------------
/less/responsive.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap Responsive v2.3.1
3 | *
4 | * Copyright 2012 Twitter, Inc
5 | * Licensed under the Apache License v2.0
6 | * http://www.apache.org/licenses/LICENSE-2.0
7 | *
8 | * Designed and built with all the love in the world @twitter by @mdo and @fat.
9 | */
10 |
11 |
12 | // Responsive.less
13 | // For phone and tablet devices
14 | // -------------------------------------------------------------
15 |
16 |
17 | // REPEAT VARIABLES & MIXINS
18 | // -------------------------
19 | // Required since we compile the responsive stuff separately
20 |
21 | @import "variables.less"; // Modify this for custom colors, font-sizes, etc
22 | @import "mixins.less";
23 |
24 |
25 | // RESPONSIVE CLASSES
26 | // ------------------
27 |
28 | @import "responsive-utilities.less";
29 |
30 |
31 | // MEDIA QUERIES
32 | // ------------------
33 |
34 | // Large desktops
35 | @import "responsive-1200px-min.less";
36 |
37 | // Tablets to regular desktops
38 | @import "responsive-768px-979px.less";
39 |
40 | // Phones to portrait tablets and narrow desktops
41 | @import "responsive-767px-max.less";
42 |
43 |
44 | // RESPONSIVE NAVBAR
45 | // ------------------
46 |
47 | // From 979px and below, show a button to toggle navbar contents
48 | @import "responsive-navbar.less";
49 |
--------------------------------------------------------------------------------
/js/tests/unit/bootstrap-scrollspy.js:
--------------------------------------------------------------------------------
1 | $(function () {
2 |
3 | module("bootstrap-scrollspy")
4 |
5 | test("should provide no conflict", function () {
6 | var scrollspy = $.fn.scrollspy.noConflict()
7 | ok(!$.fn.scrollspy, 'scrollspy was set back to undefined (org value)')
8 | $.fn.scrollspy = scrollspy
9 | })
10 |
11 | test("should be defined on jquery object", function () {
12 | ok($(document.body).scrollspy, 'scrollspy method is defined')
13 | })
14 |
15 | test("should return element", function () {
16 | ok($(document.body).scrollspy()[0] == document.body, 'document.body returned')
17 | })
18 |
19 | test("should switch active class on scroll", function () {
20 | var sectionHTML = '
'
21 | , $section = $(sectionHTML).append('#qunit-fixture')
22 | , topbarHTML =''
23 | + '
'
24 | + '
'
25 | + '
'
26 | + '
'
29 | + '
'
30 | + '
'
31 | + '
'
32 | , $topbar = $(topbarHTML).scrollspy()
33 |
34 | ok($topbar.find('.active', true))
35 | })
36 |
37 | })
--------------------------------------------------------------------------------
/docs/build/node_modules/hogan.js/tools/web_templates.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2011 Twitter, Inc.
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 |
16 | var Hogan = require(__dirname + '/../lib/hogan.js');
17 | var fs = require('fs');
18 | var path = require('path');
19 |
20 | // Substitute variables in the homepage with values from package.json
21 | var homeTemplatePath = __dirname + '/../build/gh-pages/index.html.mustache';
22 | var contextPath = __dirname + '/../dist/nodejs/package.json';
23 |
24 | var homepage = fs.readFileSync(homeTemplatePath).toString();
25 | var context = JSON.parse(fs.readFileSync(contextPath).toString());
26 |
27 | var template = Hogan.compile(homepage);
28 |
29 | fs.writeFileSync(path.dirname(homeTemplatePath) + '/index.html',
30 | template.render(context));
31 |
32 | fs.unlinkSync(homeTemplatePath);
--------------------------------------------------------------------------------
/less/thumbnails.less:
--------------------------------------------------------------------------------
1 | //
2 | // Thumbnails
3 | // --------------------------------------------------
4 |
5 |
6 | // Note: `.thumbnails` and `.thumbnails > li` are overriden in responsive files
7 |
8 | // Make wrapper ul behave like the grid
9 | .thumbnails {
10 | margin-left: -@gridGutterWidth;
11 | list-style: none;
12 | .clearfix();
13 | }
14 | // Fluid rows have no left margin
15 | .row-fluid .thumbnails {
16 | margin-left: 0;
17 | }
18 |
19 | // Float li to make thumbnails appear in a row
20 | .thumbnails > li {
21 | float: left; // Explicity set the float since we don't require .span* classes
22 | margin-bottom: @baseLineHeight;
23 | margin-left: @gridGutterWidth;
24 | }
25 |
26 | // The actual thumbnail (can be `a` or `div`)
27 | .thumbnail {
28 | display: block;
29 | padding: 4px;
30 | line-height: @baseLineHeight;
31 | border: 1px solid #ddd;
32 | .border-radius(@baseBorderRadius);
33 | .box-shadow(0 1px 3px rgba(0,0,0,.055));
34 | .transition(all .2s ease-in-out);
35 | }
36 | // Add a hover/focus state for linked versions only
37 | a.thumbnail:hover,
38 | a.thumbnail:focus {
39 | border-color: @linkColor;
40 | .box-shadow(0 1px 4px rgba(0,105,214,.25));
41 | }
42 |
43 | // Images and captions
44 | .thumbnail > img {
45 | display: block;
46 | max-width: 100%;
47 | margin-left: auto;
48 | margin-right: auto;
49 | }
50 | .thumbnail .caption {
51 | padding: 9px;
52 | color: @gray;
53 | }
54 |
--------------------------------------------------------------------------------
/less/code.less:
--------------------------------------------------------------------------------
1 | //
2 | // Code (inline and blocK)
3 | // --------------------------------------------------
4 |
5 |
6 | // Inline and block code styles
7 | code,
8 | pre {
9 | padding: 0 3px 2px;
10 | #font > #family > .monospace;
11 | font-size: @baseFontSize - 2;
12 | color: @grayDark;
13 | .border-radius(3px);
14 | }
15 |
16 | // Inline code
17 | code {
18 | padding: 2px 4px;
19 | color: #d14;
20 | background-color: #f7f7f9;
21 | border: 1px solid #e1e1e8;
22 | white-space: nowrap;
23 | }
24 |
25 | // Blocks of code
26 | pre {
27 | display: block;
28 | padding: (@baseLineHeight - 1) / 2;
29 | margin: 0 0 @baseLineHeight / 2;
30 | font-size: @baseFontSize - 1; // 14px to 13px
31 | line-height: @baseLineHeight;
32 | word-break: break-all;
33 | word-wrap: break-word;
34 | white-space: pre;
35 | white-space: pre-wrap;
36 | background-color: #f5f5f5;
37 | border: 1px solid #ccc; // fallback for IE7-8
38 | border: 1px solid rgba(0,0,0,.15);
39 | .border-radius(@baseBorderRadius);
40 |
41 | // Make prettyprint styles more spaced out for readability
42 | &.prettyprint {
43 | margin-bottom: @baseLineHeight;
44 | }
45 |
46 | // Account for some code outputs that place code tags in pre tags
47 | code {
48 | padding: 0;
49 | color: inherit;
50 | white-space: pre;
51 | white-space: pre-wrap;
52 | background-color: transparent;
53 | border: 0;
54 | }
55 | }
56 |
57 | // Enable scrollable blocks of code
58 | .pre-scrollable {
59 | max-height: 340px;
60 | overflow-y: scroll;
61 | }
--------------------------------------------------------------------------------
/docs/build/node_modules/hogan.js/Makefile:
--------------------------------------------------------------------------------
1 | REPO = git@github.com:twitter/hogan.js.git
2 | BUILD := build
3 | VERSION = ${shell node -e 'var s = JSON.parse(require("fs").readFileSync("package.json").toString()).version; console.log(s.substring(0, s.indexOf("-")));'}
4 |
5 | #
6 | # Run command line tests
7 | #
8 | test:
9 | @ node test/index.js
10 |
11 | #
12 | # Run Mustache spec tests
13 | #
14 | spec:
15 | @ node test/spec.js
16 |
17 | #
18 | # Run benchmark
19 | #
20 | benchmark:
21 | @ node benchmark/console/index.js
22 |
23 | clean:
24 | @ rm -rf dist/*
25 | #
26 | # Make a new version of Hogan from the current dev version.
27 | #
28 | release: clean
29 | @ echo "Creating a new version of Hogan."
30 | @ mkdir -p dist/nodejs
31 | @ cp -R lib dist/nodejs/lib
32 | @ node tools/release.js
33 | @ mkdir -p web/builds/$(VERSION)
34 | @ cp dist/*.* web/builds/$(VERSION)/.
35 | #
36 | # Make the gh-pages website
37 | #
38 | # This target builds the hogan.js github website using hogan.js.
39 | #
40 | # cd into build/gh-pages to check in the new site.
41 | #
42 | GH_PAGES = $(BUILD)/gh-pages
43 | web: | pages
44 | @cp -R web/* $(GH_PAGES)
45 | @@ node tools/web_templates.js
46 | @echo
47 | @echo "Website built in $(GH_PAGES)."
48 |
49 | #
50 | # Checkout the gh-pages branch.
51 | #
52 | pages: | $(BUILD)
53 | @if [ ! -d "$(GH_PAGES)" ]; then \
54 | git clone -b gh-pages $(REPO) $(GH_PAGES); \
55 | rm -rf $(GH_PAGES)/*; \
56 | fi;
57 | @mkdir -p $(GH_PAGES)/images
58 |
59 | $(BUILD):
60 | mkdir -p $(BUILD)
61 |
62 | .PHONY: test spec benchmark web release
63 |
--------------------------------------------------------------------------------
/docs/build/index.js:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 | var hogan = require('hogan.js')
3 | , fs = require('fs')
4 | , prod = process.argv[2] == 'production'
5 | , title = 'Jasny Bootstrap'
6 |
7 | var info, version, layout, pages
8 |
9 | // get version
10 | info = fs.readFileSync(__dirname + '/../../package.json', 'utf-8')
11 | info = JSON.parse(info)
12 | version = info.version
13 |
14 | // compile layout template
15 | layout = fs.readFileSync(__dirname + '/../templates/layout.mustache', 'utf-8')
16 | layout = hogan.compile(layout, { sectionTags: [{o:'_i', c:'i'}] })
17 |
18 | // retrieve pages
19 | pages = fs.readdirSync(__dirname + '/../templates/pages')
20 |
21 | // iterate over pages
22 | pages.forEach(function (name) {
23 |
24 | if (!name.match(/\.mustache$/)) return
25 |
26 | var page = fs.readFileSync(__dirname + '/../templates/pages/' + name, 'utf-8')
27 | , context = {}
28 |
29 | context[name.replace(/\.mustache$/, '')] = 'active'
30 | context._i = true
31 | context.production = prod
32 | context.title = name
33 | .replace(/\.mustache/, '')
34 | .replace(/\-.*/, '')
35 | .replace(/(.)/, function ($1) { return $1.toUpperCase() })
36 | context.version = version
37 | context.jasny_version = version.replace(/^.+-/, '')
38 |
39 | if (context.title == 'Index') {
40 | context.title = title
41 | } else {
42 | context.title += ' · ' + title
43 | }
44 |
45 | page = hogan.compile(page, { sectionTags: [{o:'_i', c:'i'}] })
46 | page = layout.render(context, {
47 | body: page
48 | })
49 |
50 | fs.writeFileSync(__dirname + '/../' + name.replace(/mustache$/, 'html'), page, 'utf-8')
51 | })
--------------------------------------------------------------------------------
/less/alerts.less:
--------------------------------------------------------------------------------
1 | //
2 | // Alerts
3 | // --------------------------------------------------
4 |
5 |
6 | // Base styles
7 | // -------------------------
8 |
9 | .alert {
10 | padding: 8px 35px 8px 14px;
11 | margin-bottom: @baseLineHeight;
12 | text-shadow: 0 1px 0 rgba(255,255,255,.5);
13 | background-color: @warningBackground;
14 | border: 1px solid @warningBorder;
15 | .border-radius(@baseBorderRadius);
16 | }
17 | .alert,
18 | .alert h4 {
19 | // Specified for the h4 to prevent conflicts of changing @headingsColor
20 | color: @warningText;
21 | }
22 | .alert h4 {
23 | margin: 0;
24 | }
25 |
26 | // Adjust close link position
27 | .alert .close {
28 | position: relative;
29 | top: -2px;
30 | right: -21px;
31 | line-height: @baseLineHeight;
32 | }
33 |
34 |
35 | // Alternate styles
36 | // -------------------------
37 |
38 | .alert-success {
39 | background-color: @successBackground;
40 | border-color: @successBorder;
41 | color: @successText;
42 | }
43 | .alert-success h4 {
44 | color: @successText;
45 | }
46 | .alert-danger,
47 | .alert-error {
48 | background-color: @errorBackground;
49 | border-color: @errorBorder;
50 | color: @errorText;
51 | }
52 | .alert-danger h4,
53 | .alert-error h4 {
54 | color: @errorText;
55 | }
56 | .alert-info {
57 | background-color: @infoBackground;
58 | border-color: @infoBorder;
59 | color: @infoText;
60 | }
61 | .alert-info h4 {
62 | color: @infoText;
63 | }
64 |
65 |
66 | // Block alerts
67 | // -------------------------
68 |
69 | .alert-block {
70 | padding-top: 14px;
71 | padding-bottom: 14px;
72 | }
73 | .alert-block > p,
74 | .alert-block > ul {
75 | margin-bottom: 0;
76 | }
77 | .alert-block p + p {
78 | margin-top: 5px;
79 | }
80 |
--------------------------------------------------------------------------------
/js/bootstrap.js:
--------------------------------------------------------------------------------
1 | !function() {
2 | var ts = document.getElementsByTagName("script")
3 | var dir = ts[ ts.length - 1 ].src.replace(/\/[^\/]+$/, '')
4 |
5 | document.write('')
6 | document.write('')
7 | document.write('')
8 | document.write('')
9 | document.write('')
10 | document.write('')
11 | document.write('')
12 | document.write('')
13 | document.write('')
14 | document.write('')
15 | document.write('')
16 | document.write('')
17 | document.write('')
18 | document.write('')
19 | document.write('')
20 | document.write('')
21 | }();
--------------------------------------------------------------------------------
/less/bootstrap.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap v2.3.1
3 | *
4 | * Copyright 2012 Twitter, Inc
5 | * Licensed under the Apache License v2.0
6 | * http://www.apache.org/licenses/LICENSE-2.0
7 | *
8 | * Designed and built with all the love in the world @twitter by @mdo and @fat.
9 | */
10 |
11 | // Core variables and mixins
12 | @import "variables.less"; // Modify this for custom colors, font-sizes, etc
13 | @import "mixins.less";
14 |
15 | // CSS Reset
16 | @import "reset.less";
17 |
18 | // Grid system and page structure
19 | @import "scaffolding.less";
20 | @import "grid.less";
21 | @import "layouts.less";
22 |
23 | // Base CSS
24 | @import "type.less";
25 | @import "code.less";
26 | @import "forms.less";
27 | @import "tables.less";
28 |
29 | // Components: common
30 | @import "sprites.less";
31 | @import "dropdowns.less";
32 | @import "wells.less";
33 | @import "component-animations.less";
34 | @import "close.less";
35 |
36 | // Components: Buttons & Alerts
37 | @import "buttons.less";
38 | @import "button-groups.less";
39 | @import "alerts.less"; // Note: alerts share common CSS with buttons and thus have styles in buttons.less
40 |
41 | // Components: Nav
42 | @import "navs.less";
43 | @import "navbar.less";
44 | @import "breadcrumbs.less";
45 | @import "pagination.less";
46 | @import "pager.less";
47 |
48 | // Components: Popovers
49 | @import "modals.less";
50 | @import "tooltip.less";
51 | @import "popovers.less";
52 |
53 | // Components: Misc
54 | @import "thumbnails.less";
55 | @import "media.less";
56 | @import "labels-badges.less";
57 | @import "progress-bars.less";
58 | @import "accordion.less";
59 | @import "carousel.less";
60 | @import "hero-unit.less";
61 |
62 | // Utility classes
63 | @import "utilities.less"; // Has to be last to override when necessary
64 |
--------------------------------------------------------------------------------
/less/responsive-utilities.less:
--------------------------------------------------------------------------------
1 | //
2 | // Responsive: Utility classes
3 | // --------------------------------------------------
4 |
5 |
6 | // IE10 Metro responsive
7 | // Required for Windows 8 Metro split-screen snapping with IE10
8 | // Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/
9 | @-ms-viewport{
10 | width: device-width;
11 | }
12 |
13 | // Hide from screenreaders and browsers
14 | // Credit: HTML5 Boilerplate
15 | .hidden {
16 | display: none;
17 | visibility: hidden;
18 | }
19 |
20 | // Visibility utilities
21 |
22 | // For desktops
23 | .visible-phone { display: none !important; }
24 | .visible-tablet { display: none !important; }
25 | .hidden-phone { }
26 | .hidden-tablet { }
27 | .hidden-desktop { display: none !important; }
28 | .visible-desktop { display: inherit !important; }
29 |
30 | // Tablets & small desktops only
31 | @media (min-width: 768px) and (max-width: 979px) {
32 | // Hide everything else
33 | .hidden-desktop { display: inherit !important; }
34 | .visible-desktop { display: none !important ; }
35 | // Show
36 | .visible-tablet { display: inherit !important; }
37 | // Hide
38 | .hidden-tablet { display: none !important; }
39 | }
40 |
41 | // Phones only
42 | @media (max-width: 767px) {
43 | // Hide everything else
44 | .hidden-desktop { display: inherit !important; }
45 | .visible-desktop { display: none !important; }
46 | // Show
47 | .visible-phone { display: inherit !important; } // Use inherit to restore previous behavior
48 | // Hide
49 | .hidden-phone { display: none !important; }
50 | }
51 |
52 | // Print utilities
53 | .visible-print { display: none !important; }
54 | .hidden-print { }
55 |
56 | @media print {
57 | .visible-print { display: inherit !important; }
58 | .hidden-print { display: none !important; }
59 | }
60 |
--------------------------------------------------------------------------------
/less/tooltip.less:
--------------------------------------------------------------------------------
1 | //
2 | // Tooltips
3 | // --------------------------------------------------
4 |
5 |
6 | // Base class
7 | .tooltip {
8 | position: absolute;
9 | z-index: @zindexTooltip;
10 | display: block;
11 | visibility: visible;
12 | font-size: 11px;
13 | line-height: 1.4;
14 | .opacity(0);
15 | &.in { .opacity(80); }
16 | &.top { margin-top: -3px; padding: 5px 0; }
17 | &.right { margin-left: 3px; padding: 0 5px; }
18 | &.bottom { margin-top: 3px; padding: 5px 0; }
19 | &.left { margin-left: -3px; padding: 0 5px; }
20 | }
21 |
22 | // Wrapper for the tooltip content
23 | .tooltip-inner {
24 | max-width: 200px;
25 | padding: 8px;
26 | color: @tooltipColor;
27 | text-align: center;
28 | text-decoration: none;
29 | background-color: @tooltipBackground;
30 | .border-radius(@baseBorderRadius);
31 | }
32 |
33 | // Arrows
34 | .tooltip-arrow {
35 | position: absolute;
36 | width: 0;
37 | height: 0;
38 | border-color: transparent;
39 | border-style: solid;
40 | }
41 | .tooltip {
42 | &.top .tooltip-arrow {
43 | bottom: 0;
44 | left: 50%;
45 | margin-left: -@tooltipArrowWidth;
46 | border-width: @tooltipArrowWidth @tooltipArrowWidth 0;
47 | border-top-color: @tooltipArrowColor;
48 | }
49 | &.right .tooltip-arrow {
50 | top: 50%;
51 | left: 0;
52 | margin-top: -@tooltipArrowWidth;
53 | border-width: @tooltipArrowWidth @tooltipArrowWidth @tooltipArrowWidth 0;
54 | border-right-color: @tooltipArrowColor;
55 | }
56 | &.left .tooltip-arrow {
57 | top: 50%;
58 | right: 0;
59 | margin-top: -@tooltipArrowWidth;
60 | border-width: @tooltipArrowWidth 0 @tooltipArrowWidth @tooltipArrowWidth;
61 | border-left-color: @tooltipArrowColor;
62 | }
63 | &.bottom .tooltip-arrow {
64 | top: 0;
65 | left: 50%;
66 | margin-left: -@tooltipArrowWidth;
67 | border-width: 0 @tooltipArrowWidth @tooltipArrowWidth;
68 | border-bottom-color: @tooltipArrowColor;
69 | }
70 | }
71 |
--------------------------------------------------------------------------------
/docs/build/node_modules/hogan.js/test/spec/TESTING.md:
--------------------------------------------------------------------------------
1 | Testing your Mustache implementation against this specification should be
2 | relatively simple. If you have a readily available testing framework on your
3 | platform, your task may be even simpler.
4 |
5 | In general, the process for each `.yml` file is as follows:
6 |
7 | 1. Use a YAML parser to load the file.
8 |
9 | 2. For each test in the 'tests' array:
10 |
11 | 1. Ensure that each element of the 'partials' hash (if it exists) is
12 | stored in a place where the interpreter will look for it.
13 |
14 | 2. If your implementation will not support lambdas, feel free to skip over
15 | the optional '~lambdas.yml' file.
16 |
17 | 2.1. If your implementation will support lambdas, ensure that each member of
18 | 'data' tagged with '!code' is properly processed into a language-
19 | specific lambda reference.
20 |
21 | * e.g. Given this YAML data hash:
22 |
23 | `{ x: !code { ruby: 'proc { "x" }', perl: 'sub { "x" }' } }`
24 |
25 | a Ruby-based Mustache implementation would process it such that it
26 | was equivalent to this Ruby hash:
27 |
28 | `{ 'x' => proc { "x" } }`
29 |
30 | * If your implementation language does not currently have lambda
31 | examples in the spec, feel free to implement them and send a pull
32 | request.
33 |
34 | * The JSON version of the spec represents these tagged values as a hash
35 | with a '`__tag__`' key of 'code'.
36 |
37 | 3. Render the template (stored in the 'template' key) with the given 'data'
38 | hash.
39 |
40 | 4. Compare the results of your rendering against the 'expected' value; any
41 | differences should be reported, along with any useful debugging
42 | information.
43 |
44 | * Of note, the 'desc' key contains a rough one-line description of the
45 | behavior being tested -- this is most useful in conjunction with the
46 | file name and test 'name'.
47 |
--------------------------------------------------------------------------------
/js/bootstrap-transition.js:
--------------------------------------------------------------------------------
1 | /* ===================================================
2 | * bootstrap-transition.js v2.3.1
3 | * http://twitter.github.com/bootstrap/javascript.html#transitions
4 | * ===================================================
5 | * Copyright 2012 Twitter, Inc.
6 | *
7 | * Licensed under the Apache License, Version 2.0 (the "License");
8 | * you may not use this file except in compliance with the License.
9 | * You may obtain a copy of the License at
10 | *
11 | * http://www.apache.org/licenses/LICENSE-2.0
12 | *
13 | * Unless required by applicable law or agreed to in writing, software
14 | * distributed under the License is distributed on an "AS IS" BASIS,
15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 | * See the License for the specific language governing permissions and
17 | * limitations under the License.
18 | * ========================================================== */
19 |
20 |
21 | !function ($) {
22 |
23 | "use strict"; // jshint ;_;
24 |
25 |
26 | /* CSS TRANSITION SUPPORT (http://www.modernizr.com/)
27 | * ======================================================= */
28 |
29 | $(function () {
30 |
31 | $.support.transition = (function () {
32 |
33 | var transitionEnd = (function () {
34 |
35 | var el = document.createElement('bootstrap')
36 | , transEndEventNames = {
37 | 'WebkitTransition' : 'webkitTransitionEnd'
38 | , 'MozTransition' : 'transitionend'
39 | , 'OTransition' : 'oTransitionEnd otransitionend'
40 | , 'transition' : 'transitionend'
41 | }
42 | , name
43 |
44 | for (name in transEndEventNames){
45 | if (el.style[name] !== undefined) {
46 | return transEndEventNames[name]
47 | }
48 | }
49 |
50 | }())
51 |
52 | return transitionEnd && {
53 | end: transitionEnd
54 | }
55 |
56 | })()
57 |
58 | })
59 |
60 | }(window.jQuery);
--------------------------------------------------------------------------------
/docs/assets/js/bootstrap-transition.js:
--------------------------------------------------------------------------------
1 | /* ===================================================
2 | * bootstrap-transition.js v2.3.1
3 | * http://twitter.github.com/bootstrap/javascript.html#transitions
4 | * ===================================================
5 | * Copyright 2012 Twitter, Inc.
6 | *
7 | * Licensed under the Apache License, Version 2.0 (the "License");
8 | * you may not use this file except in compliance with the License.
9 | * You may obtain a copy of the License at
10 | *
11 | * http://www.apache.org/licenses/LICENSE-2.0
12 | *
13 | * Unless required by applicable law or agreed to in writing, software
14 | * distributed under the License is distributed on an "AS IS" BASIS,
15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 | * See the License for the specific language governing permissions and
17 | * limitations under the License.
18 | * ========================================================== */
19 |
20 |
21 | !function ($) {
22 |
23 | "use strict"; // jshint ;_;
24 |
25 |
26 | /* CSS TRANSITION SUPPORT (http://www.modernizr.com/)
27 | * ======================================================= */
28 |
29 | $(function () {
30 |
31 | $.support.transition = (function () {
32 |
33 | var transitionEnd = (function () {
34 |
35 | var el = document.createElement('bootstrap')
36 | , transEndEventNames = {
37 | 'WebkitTransition' : 'webkitTransitionEnd'
38 | , 'MozTransition' : 'transitionend'
39 | , 'OTransition' : 'oTransitionEnd otransitionend'
40 | , 'transition' : 'transitionend'
41 | }
42 | , name
43 |
44 | for (name in transEndEventNames){
45 | if (el.style[name] !== undefined) {
46 | return transEndEventNames[name]
47 | }
48 | }
49 |
50 | }())
51 |
52 | return transitionEnd && {
53 | end: transitionEnd
54 | }
55 |
56 | })()
57 |
58 | })
59 |
60 | }(window.jQuery);
--------------------------------------------------------------------------------
/less/jasny-forms.less:
--------------------------------------------------------------------------------
1 | // Forms.less
2 | // General improvements on form styling
3 | // ------------------------------------
4 |
5 |
6 | // GENERAL STYLES
7 | // --------------
8 |
9 | form {
10 | > *:last-child {
11 | margin-bottom: 0;
12 | }
13 | }
14 |
15 | label input[type="image"],
16 | label input[type="checkbox"],
17 | label input[type="radio"] {
18 | vertical-align: middle;
19 | }
20 |
21 | select {
22 | padding-left: 2px;
23 | }
24 |
25 | // Smaller labels
26 | // --------------
27 | .small-labels {
28 | .control-group > label {
29 | width: 70px;
30 | }
31 | .controls {
32 | margin-left: 80px;
33 | }
34 | .form-actions {
35 | padding-left: 80px;
36 | }
37 | }
38 |
39 |
40 | // Combining horizonal and vertical forms
41 | // --------------------------------------
42 |
43 | .form-vertical .form-horizontal {
44 | .control-group > label {
45 | text-align: left;
46 | }
47 | }
48 | .form-horizontal .form-vertical {
49 | .control-group > label {
50 | float: none;
51 | padding-top: 0;
52 | text-align: left;
53 | }
54 | .controls {
55 | margin-left: 0;
56 | }
57 | &.form-actions, .form-actions {
58 | padding-left: 20px;
59 | }
60 | }
61 |
62 | .control-group .control-group {
63 | margin-bottom: 0;
64 | }
65 |
66 |
67 | // Wells in forms
68 | // --------------
69 |
70 | .form-horizontal .well {
71 | .control-label {
72 | width: 120px;
73 | }
74 | .controls {
75 | margin-left: 140px;
76 | }
77 | }
78 |
79 | form .well > *:last-child {
80 | margin-bottom: 0;
81 | }
82 |
83 |
84 | // CSS for editor textarea
85 | // -----------------------
86 |
87 | .editor {
88 | .box-sizing(border-box);
89 | height: 100px;
90 | width: 100%;
91 | padding: 5px;
92 | }
93 | .uneditable-textarea.editor-html {
94 | white-space: normal;
95 | padding: 5px 3px 5px 5px;
96 | }
97 | textarea.editor-html {
98 | visibility: hidden; // Assume it will be replaced
99 | }
100 |
--------------------------------------------------------------------------------
/docs/build/node_modules/hogan.js/web/builds/1.0.5/template-1.0.5.min.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @preserve Copyright 2012 Twitter, Inc.
3 | * @license http://www.apache.org/licenses/LICENSE-2.0.txt
4 | */
5 | var Hogan={};(function(a){function h(a){return a=String(a===null||a===undefined?"":a),g.test(a)?a.replace(b,"&").replace(c,"<").replace(d,">").replace(e,"'").replace(f,"""):a}a.Template=function j(a,b,c){a&&(this.r=a),this.c=c,this.text=b||""},a.Template.prototype={r:function(a,b,c){return""},v:h,render:function(b,c,d){return this.ri([b],c||{},d)},ri:function(a,b,c){return this.r(a,b,c)},rp:function(a,b,c,d){var e=c[a];return e?(this.c&&typeof e=="string"&&(e=this.c.compile(e)),e.ri(b,c,d)):""},rs:function(a,b,c){var d="",e=a[a.length-1];if(!i(e))return d=c(a,b);for(var f=0;f=0;h--){f=b[h];if(f&&typeof f=="object"&&a in f){e=f[a],g=!0;break}}return g?(!d&&typeof e=="function"&&(e=this.lv(e,b,c)),e):d?!1:""},ho:function(a,b,c,d,e){var f=this.c,g=a.call(b,d,function(a){return f.compile(a,{delimiters:e}).render(b,c)}),h=f.compile(g.toString(),{delimiters:e}).render(b,c);return this.b=h,!1},b:"",ls:function(a,b,c,d,e,f,g){var h=b[b.length-1],i=null;if(!d&&this.c&&a.length>0)return this.ho(a,h,c,this.text.substring(e,f),g);i=a.call(h);if(typeof i=="function"){if(d)return!0;if(this.c)return this.ho(i,h,c,this.text.substring(e,f),g)}return i},lv:function(a,b,c){var d=b[b.length-1],e=a.call(d);return typeof e=="function"&&(e=e.call(d)),e=e.toString(),this.c&&~e.indexOf("{{")?this.c.compile(e).render(d,c):e}};var b=/&/g,c=//g,e=/\'/g,f=/\"/g,g=/[&<>\"\']/,i=Array.isArray||function(a){return Object.prototype.toString.call(a)==="[object Array]"}})(typeof exports!="undefined"?exports:Hogan)
--------------------------------------------------------------------------------
/less/labels-badges.less:
--------------------------------------------------------------------------------
1 | //
2 | // Labels and badges
3 | // --------------------------------------------------
4 |
5 |
6 | // Base classes
7 | .label,
8 | .badge {
9 | display: inline-block;
10 | padding: 2px 4px;
11 | font-size: @baseFontSize * .846;
12 | font-weight: bold;
13 | line-height: 14px; // ensure proper line-height if floated
14 | color: @white;
15 | vertical-align: baseline;
16 | white-space: nowrap;
17 | text-shadow: 0 -1px 0 rgba(0,0,0,.25);
18 | background-color: @grayLight;
19 | }
20 | // Set unique padding and border-radii
21 | .label {
22 | .border-radius(3px);
23 | }
24 | .badge {
25 | padding-left: 9px;
26 | padding-right: 9px;
27 | .border-radius(9px);
28 | }
29 |
30 | // Empty labels/badges collapse
31 | .label,
32 | .badge {
33 | &:empty {
34 | display: none;
35 | }
36 | }
37 |
38 | // Hover/focus state, but only for links
39 | a {
40 | &.label:hover,
41 | &.label:focus,
42 | &.badge:hover,
43 | &.badge:focus {
44 | color: @white;
45 | text-decoration: none;
46 | cursor: pointer;
47 | }
48 | }
49 |
50 | // Colors
51 | // Only give background-color difference to links (and to simplify, we don't qualifty with `a` but [href] attribute)
52 | .label,
53 | .badge {
54 | // Important (red)
55 | &-important { background-color: @errorText; }
56 | &-important[href] { background-color: darken(@errorText, 10%); }
57 | // Warnings (orange)
58 | &-warning { background-color: @orange; }
59 | &-warning[href] { background-color: darken(@orange, 10%); }
60 | // Success (green)
61 | &-success { background-color: @successText; }
62 | &-success[href] { background-color: darken(@successText, 10%); }
63 | // Info (turquoise)
64 | &-info { background-color: @infoText; }
65 | &-info[href] { background-color: darken(@infoText, 10%); }
66 | // Inverse (black)
67 | &-inverse { background-color: @grayDark; }
68 | &-inverse[href] { background-color: darken(@grayDark, 10%); }
69 | }
70 |
71 | // Quick fix for labels/badges in buttons
72 | .btn {
73 | .label,
74 | .badge {
75 | position: relative;
76 | top: -1px;
77 | }
78 | }
79 | .btn-mini {
80 | .label,
81 | .badge {
82 | top: 0;
83 | }
84 | }
85 |
--------------------------------------------------------------------------------
/docs/build/node_modules/hogan.js/wrappers/mustache.js.mustache:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2011 Twitter, Inc.
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 |
16 | // A wrapper for compatibility with Mustache.js, quirks and all
17 |
18 | {{{template}}}
19 | {{{compiler}}}
20 |
21 | var Mustache = (function (Hogan) {
22 |
23 | // Mustache.js has non-spec partial context behavior
24 | function mustachePartial(name, context, partials, indent) {
25 | var partialScope = this.f(name, context, partials, 0);
26 | var cx = context;
27 | if (partialScope) {
28 | cx = cx.concat(partialScope);
29 | }
30 |
31 | return Hogan.Template.prototype.rp.call(this, name, cx, partials, indent);
32 | }
33 |
34 | var HoganTemplateWrapper = function(renderFunc, text, compiler){
35 | this.rp = mustachePartial;
36 | Hogan.Template.call(this, renderFunc, text, compiler);
37 | };
38 | HoganTemplateWrapper.prototype = Hogan.Template.prototype;
39 |
40 | // Add a wrapper for Hogan's generate method. Mustache and Hogan keep
41 | // separate caches, and Mustache returns wrapped templates.
42 | var wrapper;
43 | var HoganWrapper = function(){
44 | this.cache = {};
45 | this.generate = function(code, text, options) {
46 | return new HoganTemplateWrapper(new Function('c', 'p', 'i', code), text, wrapper);
47 | }
48 | };
49 | HoganWrapper.prototype = Hogan;
50 | wrapper = new HoganWrapper();
51 |
52 | return {
53 | to_html: function(text, data, partials, sendFun) {
54 | var template = wrapper.compile(text);
55 | var result = template.render(data, partials);
56 | if (!sendFun) {
57 | return result;
58 | }
59 |
60 | sendFun(result);
61 | }
62 | }
63 |
64 | })(Hogan);
65 |
--------------------------------------------------------------------------------
/docs/build/node_modules/hogan.js/test/spec/specs/comments.json:
--------------------------------------------------------------------------------
1 | {"__ATTN__":"Do not edit this file; changes belong in the appropriate YAML file.","overview":"Comment tags represent content that should never appear in the resulting\noutput.\n\nThe tag's content may contain any substring (including newlines) EXCEPT the\nclosing delimiter.\n\nComment tags SHOULD be treated as standalone when appropriate.\n","tests":[{"name":"Inline","data":{},"expected":"1234567890","template":"12345{{! Comment Block! }}67890","desc":"Comment blocks should be removed from the template."},{"name":"Multiline","data":{},"expected":"1234567890\n","template":"12345{{!\n This is a\n multi-line comment...\n}}67890\n","desc":"Multiline comments should be permitted."},{"name":"Standalone","data":{},"expected":"Begin.\nEnd.\n","template":"Begin.\n{{! Comment Block! }}\nEnd.\n","desc":"All standalone comment lines should be removed."},{"name":"Indented Standalone","data":{},"expected":"Begin.\nEnd.\n","template":"Begin.\n {{! Indented Comment Block! }}\nEnd.\n","desc":"All standalone comment lines should be removed."},{"name":"Standalone Line Endings","data":{},"expected":"|\r\n|","template":"|\r\n{{! Standalone Comment }}\r\n|","desc":"\"\\r\\n\" should be considered a newline for standalone tags."},{"name":"Standalone Without Previous Line","data":{},"expected":"!","template":" {{! I'm Still Standalone }}\n!","desc":"Standalone tags should not require a newline to precede them."},{"name":"Standalone Without Newline","data":{},"expected":"!\n","template":"!\n {{! I'm Still Standalone }}","desc":"Standalone tags should not require a newline to follow them."},{"name":"Multiline Standalone","data":{},"expected":"Begin.\nEnd.\n","template":"Begin.\n{{!\nSomething's going on here...\n}}\nEnd.\n","desc":"All standalone comment lines should be removed."},{"name":"Indented Multiline Standalone","data":{},"expected":"Begin.\nEnd.\n","template":"Begin.\n {{!\n Something's going on here...\n }}\nEnd.\n","desc":"All standalone comment lines should be removed."},{"name":"Indented Inline","data":{},"expected":" 12 \n","template":" 12 {{! 34 }}\n","desc":"Inline comments should not strip whitespace"},{"name":"Surrounding Whitespace","data":{},"expected":"12345 67890","template":"12345 {{! Comment Block! }} 67890","desc":"Comment removal should preserve surrounding whitespace."}]}
--------------------------------------------------------------------------------
/js/tests/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Bootstrap Plugin Test Suite
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
--------------------------------------------------------------------------------
/docs/assets/js/html5shiv.js:
--------------------------------------------------------------------------------
1 | /*
2 | HTML5 Shiv v3.6.2pre | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
3 | */
4 | (function(l,f){function m(){var a=e.elements;return"string"==typeof a?a.split(" "):a}function i(a){var b=n[a[o]];b||(b={},h++,a[o]=h,n[h]=b);return b}function p(a,b,c){b||(b=f);if(g)return b.createElement(a);c||(c=i(b));b=c.cache[a]?c.cache[a].cloneNode():r.test(a)?(c.cache[a]=c.createElem(a)).cloneNode():c.createElem(a);return b.canHaveChildren&&!s.test(a)?c.frag.appendChild(b):b}function t(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag();
5 | a.createElement=function(c){return!e.shivMethods?b.createElem(c):p(c,a,b)};a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/\w+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c("'+a+'")'})+");return n}")(e,b.frag)}function q(a){a||(a=f);var b=i(a);if(e.shivCSS&&!j&&!b.hasCSS){var c,d=a;c=d.createElement("p");d=d.getElementsByTagName("head")[0]||d.documentElement;c.innerHTML="x";
6 | c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML=" ";j="hidden"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement("a");var c=f.createDocumentFragment();b="undefined"==typeof c.cloneNode||
7 | "undefined"==typeof c.createDocumentFragment||"undefined"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",version:"3.6.2pre",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:"default",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f);if(g)return a.createDocumentFragment();
8 | for(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;d×'
22 | + 'Holy guacamole! Best check yo self, you\'re not looking too good.
'
23 | + ''
24 | , alert = $(alertHTML).alert()
25 |
26 | alert.find('.close').click()
27 |
28 | ok(!alert.hasClass('in'), 'remove .in class on .close click')
29 | })
30 |
31 | test("should remove element when clicking .close", function () {
32 | $.support.transition = false
33 |
34 | var alertHTML = ''
35 | + '
× '
36 | + '
Holy guacamole! Best check yo self, you\'re not looking too good.
'
37 | + '
'
38 | , alert = $(alertHTML).appendTo('#qunit-fixture').alert()
39 |
40 | ok($('#qunit-fixture').find('.alert-message').length, 'element added to dom')
41 |
42 | alert.find('.close').click()
43 |
44 | ok(!$('#qunit-fixture').find('.alert-message').length, 'element removed from dom')
45 | })
46 |
47 | test("should not fire closed when close is prevented", function () {
48 | $.support.transition = false
49 | stop();
50 | $('
')
51 | .bind('close', function (e) {
52 | e.preventDefault();
53 | ok(true);
54 | start();
55 | })
56 | .bind('closed', function () {
57 | ok(false);
58 | })
59 | .alert('close')
60 | })
61 |
62 | })
--------------------------------------------------------------------------------
/js/bootstrap-rowlink.js:
--------------------------------------------------------------------------------
1 | /* ============================================================
2 | * bootstrap-rowlink.js j1
3 | * http://jasny.github.com/bootstrap/javascript.html#rowlink
4 | * ============================================================
5 | * Copyright 2012 Jasny BV, Netherlands.
6 | *
7 | * Licensed under the Apache License, Version 2.0 (the "License");
8 | * you may not use this file except in compliance with the License.
9 | * You may obtain a copy of the License at
10 | *
11 | * http://www.apache.org/licenses/LICENSE-2.0
12 | *
13 | * Unless required by applicable law or agreed to in writing, software
14 | * distributed under the License is distributed on an "AS IS" BASIS,
15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 | * See the License for the specific language governing permissions and
17 | * limitations under the License.
18 | * ============================================================ */
19 |
20 | !function ($) {
21 |
22 | "use strict"; // jshint ;_;
23 |
24 | var Rowlink = function (element, options) {
25 | options = $.extend({}, $.fn.rowlink.defaults, options)
26 | var tr = element.nodeName.toLowerCase() == 'tr' ? $(element) : $(element).find('tr:has(td)')
27 |
28 | tr.each(function() {
29 | var link = $(this).find(options.target).first()
30 | if (!link.length) return
31 |
32 | var href = link.attr('href')
33 |
34 | $(this).find('td').not('.nolink').click(function() {
35 | window.location = href;
36 | })
37 |
38 | $(this).addClass('rowlink')
39 | link.replaceWith(link.html())
40 | })
41 | }
42 |
43 |
44 | /* ROWLINK PLUGIN DEFINITION
45 | * =========================== */
46 |
47 | $.fn.rowlink = function (options) {
48 | return this.each(function () {
49 | var $this = $(this)
50 | , data = $this.data('rowlink')
51 | if (!data) $this.data('rowlink', (data = new Rowlink(this, options)))
52 | })
53 | }
54 |
55 | $.fn.rowlink.defaults = {
56 | target: "a"
57 | }
58 |
59 | $.fn.rowlink.Constructor = Rowlink
60 |
61 |
62 | /* ROWLINK DATA-API
63 | * ================== */
64 |
65 | $(function () {
66 | $('[data-provide="rowlink"],[data-provides="rowlink"]').each(function () {
67 | $(this).rowlink($(this).data())
68 | })
69 | })
70 |
71 | }(window.jQuery);
72 |
--------------------------------------------------------------------------------
/docs/assets/js/bootstrap-rowlink.js:
--------------------------------------------------------------------------------
1 | /* ============================================================
2 | * bootstrap-rowlink.js j1
3 | * http://jasny.github.com/bootstrap/javascript.html#rowlink
4 | * ============================================================
5 | * Copyright 2012 Jasny BV, Netherlands.
6 | *
7 | * Licensed under the Apache License, Version 2.0 (the "License");
8 | * you may not use this file except in compliance with the License.
9 | * You may obtain a copy of the License at
10 | *
11 | * http://www.apache.org/licenses/LICENSE-2.0
12 | *
13 | * Unless required by applicable law or agreed to in writing, software
14 | * distributed under the License is distributed on an "AS IS" BASIS,
15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 | * See the License for the specific language governing permissions and
17 | * limitations under the License.
18 | * ============================================================ */
19 |
20 | !function ($) {
21 |
22 | "use strict"; // jshint ;_;
23 |
24 | var Rowlink = function (element, options) {
25 | options = $.extend({}, $.fn.rowlink.defaults, options)
26 | var tr = element.nodeName.toLowerCase() == 'tr' ? $(element) : $(element).find('tr:has(td)')
27 |
28 | tr.each(function() {
29 | var link = $(this).find(options.target).first()
30 | if (!link.length) return
31 |
32 | var href = link.attr('href')
33 |
34 | $(this).find('td').not('.nolink').click(function() {
35 | window.location = href;
36 | })
37 |
38 | $(this).addClass('rowlink')
39 | link.replaceWith(link.html())
40 | })
41 | }
42 |
43 |
44 | /* ROWLINK PLUGIN DEFINITION
45 | * =========================== */
46 |
47 | $.fn.rowlink = function (options) {
48 | return this.each(function () {
49 | var $this = $(this)
50 | , data = $this.data('rowlink')
51 | if (!data) $this.data('rowlink', (data = new Rowlink(this, options)))
52 | })
53 | }
54 |
55 | $.fn.rowlink.defaults = {
56 | target: "a"
57 | }
58 |
59 | $.fn.rowlink.Constructor = Rowlink
60 |
61 |
62 | /* ROWLINK DATA-API
63 | * ================== */
64 |
65 | $(function () {
66 | $('[data-provide="rowlink"],[data-provides="rowlink"]').each(function () {
67 | $(this).rowlink($(this).data())
68 | })
69 | })
70 |
71 | }(window.jQuery);
72 |
--------------------------------------------------------------------------------
/less/modals.less:
--------------------------------------------------------------------------------
1 | //
2 | // Modals
3 | // --------------------------------------------------
4 |
5 | // Background
6 | .modal-backdrop {
7 | position: fixed;
8 | top: 0;
9 | right: 0;
10 | bottom: 0;
11 | left: 0;
12 | z-index: @zindexModalBackdrop;
13 | background-color: @black;
14 | // Fade for backdrop
15 | &.fade { opacity: 0; }
16 | }
17 |
18 | .modal-backdrop,
19 | .modal-backdrop.fade.in {
20 | .opacity(80);
21 | }
22 |
23 | // Base modal
24 | .modal {
25 | position: fixed;
26 | top: 10%;
27 | left: 50%;
28 | z-index: @zindexModal;
29 | width: 560px;
30 | margin-left: -280px;
31 | background-color: @white;
32 | border: 1px solid #999;
33 | border: 1px solid rgba(0,0,0,.3);
34 | *border: 1px solid #999; /* IE6-7 */
35 | .border-radius(6px);
36 | .box-shadow(0 3px 7px rgba(0,0,0,0.3));
37 | .background-clip(padding-box);
38 | // Remove focus outline from opened modal
39 | outline: none;
40 |
41 | &.fade {
42 | .transition(e('opacity .3s linear, top .3s ease-out'));
43 | top: -25%;
44 | }
45 | &.fade.in { top: 10%; }
46 | }
47 | .modal-header {
48 | padding: 9px 15px;
49 | border-bottom: 1px solid #eee;
50 | // Close icon
51 | .close { margin-top: 2px; }
52 | // Heading
53 | h3 {
54 | margin: 0;
55 | line-height: 30px;
56 | }
57 | }
58 |
59 | // Body (where all modal content resides)
60 | .modal-body {
61 | position: relative;
62 | overflow-y: auto;
63 | max-height: 400px;
64 | padding: 15px;
65 | }
66 | // Remove bottom margin if need be
67 | .modal-form {
68 | margin-bottom: 0;
69 | }
70 |
71 | // Footer (for actions)
72 | .modal-footer {
73 | padding: 14px 15px 15px;
74 | margin-bottom: 0;
75 | text-align: right; // right align buttons
76 | background-color: #f5f5f5;
77 | border-top: 1px solid #ddd;
78 | .border-radius(0 0 6px 6px);
79 | .box-shadow(inset 0 1px 0 @white);
80 | .clearfix(); // clear it in case folks use .pull-* classes on buttons
81 |
82 | // Properly space out buttons
83 | .btn + .btn {
84 | margin-left: 5px;
85 | margin-bottom: 0; // account for input[type="submit"] which gets the bottom margin like all other inputs
86 | }
87 | // but override that for button groups
88 | .btn-group .btn + .btn {
89 | margin-left: -1px;
90 | }
91 | // and override it for block buttons as well
92 | .btn-block + .btn-block {
93 | margin-left: 0;
94 | }
95 | }
96 |
--------------------------------------------------------------------------------
/js/tests/phantom.js:
--------------------------------------------------------------------------------
1 | // Simple phantom.js integration script
2 | // Adapted from Modernizr
3 |
4 | function waitFor(testFx, onReady, timeOutMillis) {
5 | var maxtimeOutMillis = timeOutMillis ? timeOutMillis : 5001 //< Default Max Timout is 5s
6 | , start = new Date().getTime()
7 | , condition = false
8 | , interval = setInterval(function () {
9 | if ((new Date().getTime() - start < maxtimeOutMillis) && !condition) {
10 | // If not time-out yet and condition not yet fulfilled
11 | condition = (typeof(testFx) === "string" ? eval(testFx) : testFx()) //< defensive code
12 | } else {
13 | if (!condition) {
14 | // If condition still not fulfilled (timeout but condition is 'false')
15 | console.log("'waitFor()' timeout")
16 | phantom.exit(1)
17 | } else {
18 | // Condition fulfilled (timeout and/or condition is 'true')
19 | typeof(onReady) === "string" ? eval(onReady) : onReady() //< Do what it's supposed to do once the condition is fulfilled
20 | clearInterval(interval) //< Stop this interval
21 | }
22 | }
23 | }, 100) //< repeat check every 100ms
24 | }
25 |
26 |
27 | if (phantom.args.length === 0 || phantom.args.length > 2) {
28 | console.log('Usage: phantom.js URL')
29 | phantom.exit()
30 | }
31 |
32 | var page = new WebPage()
33 |
34 | // Route "console.log()" calls from within the Page context to the main Phantom context (i.e. current "this")
35 | page.onConsoleMessage = function(msg) {
36 | console.log(msg)
37 | };
38 |
39 | page.open(phantom.args[0], function(status){
40 | if (status !== "success") {
41 | console.log("Unable to access network")
42 | phantom.exit()
43 | } else {
44 | waitFor(function(){
45 | return page.evaluate(function(){
46 | var el = document.getElementById('qunit-testresult')
47 | if (el && el.innerText.match('completed')) {
48 | return true
49 | }
50 | return false
51 | })
52 | }, function(){
53 | var failedNum = page.evaluate(function(){
54 | var el = document.getElementById('qunit-testresult')
55 | try {
56 | return el.getElementsByClassName('failed')[0].innerHTML
57 | } catch (e) { }
58 | return 10000
59 | });
60 | phantom.exit((parseInt(failedNum, 10) > 0) ? 1 : 0)
61 | })
62 | }
63 | })
--------------------------------------------------------------------------------
/docs/build/node_modules/hogan.js/test/spec.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2011 Twitter, Inc.
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 |
16 | var Hogan = Hogan || require('../lib/hogan');
17 | var doc = this["document"];
18 | var fs = require('fs');
19 |
20 | var passed = 0;
21 | var failed = 0;
22 |
23 | if (!this["output"]) {
24 | var output = function (string) {
25 | return doc ? doc.write(string + ' ') : console.log(string);
26 | };
27 | }
28 |
29 | function runTest(tests) {
30 | tests.forEach(function(test) {
31 | var partials = {};
32 | for (var i in test.partials) {
33 | partials[i] = Hogan.compile(test.partials[i]);
34 | }
35 | var t = Hogan.compile(test.template);
36 |
37 | if (test.data.lambda) {
38 | var func = (new Function ('return ' + test.data.lambda.js)());
39 | test.data.lambda = function() { return func; };
40 | }
41 |
42 | var s = t.render(test.data, partials);
43 | is(s, test.expected, test.name + ': ' + test.desc);
44 | });
45 | }
46 |
47 | var testDir = './test/spec/specs';
48 | var files = fs.readdirSync(testDir)
49 | .filter(function(f) { return f.indexOf('.json') > 0; })
50 | .map(function(f) { return testDir + '/' + f});
51 |
52 | for (var i = 0; i < files.length; i++) {
53 | var test = JSON.parse(fs.readFileSync(files[i]).toString());
54 | runTest(test.tests);
55 | }
56 |
57 | function is(got, expected, msg) {
58 | if (got === expected) {
59 | output("OK: " + msg);
60 | ++passed;
61 | } else {
62 | output("FAIL: " + msg);
63 | output("Expected |" + expected + "|");
64 | output(" Got |" + got + "|");
65 | ++failed;
66 | }
67 | }
68 |
69 | function complete() {
70 | output("\nTests Complete");
71 | output("--------------");
72 | output("Passed: " + passed);
73 | output("Failed: " + failed);
74 | output("\n");
75 | }
76 |
77 | complete();
78 |
--------------------------------------------------------------------------------
/less/fileupload.less:
--------------------------------------------------------------------------------
1 | // Fileupload.less
2 | // CSS for file upload button and fileupload widget
3 | // ------------------------------------------------
4 |
5 | .btn-file {
6 | overflow: hidden;
7 | position: relative;
8 | vertical-align: middle;
9 | > input {
10 | position: absolute;
11 | top: 0;
12 | right: 0;
13 | margin: 0;
14 | opacity: 0;
15 | filter: alpha(opacity=0);
16 | transform: translate(-300px, 0) scale(4);
17 | font-size: 23px;
18 | direction: ltr;
19 | cursor: pointer;
20 | }
21 | }
22 |
23 | .fileupload {
24 | margin-bottom: 9px;
25 | .uneditable-input {
26 | display: inline-block;
27 | margin-bottom: 0px;
28 | vertical-align: middle;
29 | cursor: text;
30 | }
31 | .thumbnail {
32 | overflow: hidden;
33 | display: inline-block;
34 | margin-bottom: 5px;
35 | vertical-align: middle;
36 | text-align: center;
37 | > img {
38 | display: inline-block;
39 | vertical-align: middle;
40 | max-height: 100%;
41 | }
42 | }
43 | .btn {
44 | vertical-align: middle;
45 | }
46 | }
47 | .fileupload-exists .fileupload-new,
48 | .fileupload-new .fileupload-exists {
49 | display: none;
50 | }
51 | .fileupload-inline .fileupload-controls {
52 | display: inline;
53 | }
54 |
55 | // Not 100% correct, but helps in typical use case
56 | .fileupload-new .input-append .btn-file {
57 | .border-radius(0 3px 3px 0)
58 | }
59 |
60 | .thumbnail-borderless .thumbnail {
61 | border: none;
62 | padding: 0;
63 | .border-radius(0);
64 | .box-shadow(none);
65 | }
66 | .fileupload-new.thumbnail-borderless .thumbnail {
67 | border: 1px solid #ddd;
68 | }
69 |
70 | .control-group.warning .fileupload {
71 | .uneditable-input {
72 | color: #a47e3c;
73 | border-color: #a47e3c;
74 | }
75 | .fileupload-preview {
76 | color: #a47e3c;
77 | }
78 | .thumbnail {
79 | border-color: #a47e3c;
80 | }
81 | }
82 | .control-group.error .fileupload {
83 | .uneditable-input {
84 | color: #b94a48;
85 | border-color: #b94a48;
86 | }
87 | .fileupload-preview {
88 | color: #b94a48;
89 | }
90 | .thumbnail {
91 | border-color: #b94a48;
92 | }
93 | }
94 | .control-group.success .fileupload {
95 | .uneditable-input {
96 | color: #468847;
97 | border-color: #468847;
98 | }
99 | .fileupload-preview {
100 | color: #468847;
101 | }
102 | .thumbnail {
103 | border-color: #468847;
104 | }
105 | }
--------------------------------------------------------------------------------
/less/tests/forms-responsive.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Bootstrap, from Twitter
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
19 |
20 |
21 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
69 |
70 |
71 |
72 |
--------------------------------------------------------------------------------
/docs/build/node_modules/hogan.js/README.md:
--------------------------------------------------------------------------------
1 | ## Hogan.js - A mustache compiler.
2 |
3 | [Hogan.js](http://twitter.github.com/hogan.js/) is a compiler for the
4 | [Mustache](http://mustache.github.com/) templating language. For information
5 | on Mustache, see the [manpage](http://mustache.github.com/mustache.5.html) and
6 | the [spec](https://github.com/mustache/spec).
7 |
8 | ## Basics
9 |
10 | Hogan compiles templates to HoganTemplate objects, which have a render method.
11 |
12 | ```js
13 | var data = {
14 | screenName: "dhg",
15 | };
16 |
17 | var template = Hogan.compile("Follow @{{screenName}}.");
18 | var output = template.render(data);
19 |
20 | // prints "Follow @dhg."
21 | console.log(output);
22 | ```
23 |
24 | ## Features
25 |
26 | Hogan is fast--try it on your workload.
27 |
28 | Hogan has separate scanning, parsing and code generation phases. This way it's
29 | possible to add new features without touching the scanner at all, and many
30 | different code generation techniques can be tried without changing the parser.
31 |
32 | Hogan exposes scan and parse methods. These can be useful for
33 | pre-processing templates on the server.
34 |
35 | ```js
36 | var text = "{{^check}}{{i18n}}No{{/i18n}}{{/check}}";
37 | text += "{{#check}}{{i18n}}Yes{{/i18n}}{{/check}}";
38 | var tree = Hogan.parse(Hogan.scan(text));
39 |
40 | // outputs "# check"
41 | console.log(tree[0].tag + " " + tree[0].name);
42 |
43 | // outputs "Yes"
44 | console.log(tree[1].nodes[0].nodes[0]);
45 | ```
46 |
47 | It's also possible to use HoganTemplate objects without the Hogan compiler
48 | present. That means you can pre-compile your templates on the server, and
49 | avoid shipping the compiler. However, the optional lambda features from the
50 | Mustache spec do require the compiler to be present.
51 |
52 | ## Why Hogan.js?
53 |
54 | Why another templating library?
55 |
56 | Hogan.js was written to meet three templating library requirements: good
57 | performance, standalone template objects, and a parser API.
58 |
59 | ## Issues
60 |
61 | Have a bug? Please create an issue here on GitHub!
62 |
63 | https://github.com/twitter/hogan.js/issues
64 |
65 | ## Versioning
66 |
67 | For transparency and insight into our release cycle, releases will be numbered with the follow format:
68 |
69 | `..`
70 |
71 | And constructed with the following guidelines:
72 |
73 | * Breaking backwards compatibility bumps the major
74 | * New additions without breaking backwards compatibility bumps the minor
75 | * Bug fixes and misc changes bump the patch
76 |
77 | For more information on semantic versioning, please visit http://semver.org/.
78 |
79 | ## Authors
80 |
81 | **Robert Sayre**
82 |
83 | + http://github.com/sayrer
84 |
85 | **Jacob Thornton**
86 |
87 | + http://github.com/fat
88 |
89 | ## License
90 |
91 | Copyright 2011 Twitter, Inc.
92 |
93 | Licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0
--------------------------------------------------------------------------------
/js/bootstrap-alert.js:
--------------------------------------------------------------------------------
1 | /* ==========================================================
2 | * bootstrap-alert.js v2.3.1
3 | * http://twitter.github.com/bootstrap/javascript.html#alerts
4 | * ==========================================================
5 | * Copyright 2012 Twitter, Inc.
6 | *
7 | * Licensed under the Apache License, Version 2.0 (the "License");
8 | * you may not use this file except in compliance with the License.
9 | * You may obtain a copy of the License at
10 | *
11 | * http://www.apache.org/licenses/LICENSE-2.0
12 | *
13 | * Unless required by applicable law or agreed to in writing, software
14 | * distributed under the License is distributed on an "AS IS" BASIS,
15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 | * See the License for the specific language governing permissions and
17 | * limitations under the License.
18 | * ========================================================== */
19 |
20 |
21 | !function ($) {
22 |
23 | "use strict"; // jshint ;_;
24 |
25 |
26 | /* ALERT CLASS DEFINITION
27 | * ====================== */
28 |
29 | var dismiss = '[data-dismiss="alert"]'
30 | , Alert = function (el) {
31 | $(el).on('click', dismiss, this.close)
32 | }
33 |
34 | Alert.prototype.close = function (e) {
35 | var $this = $(this)
36 | , selector = $this.attr('data-target')
37 | , $parent
38 |
39 | if (!selector) {
40 | selector = $this.attr('href')
41 | selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
42 | }
43 |
44 | $parent = $(selector)
45 |
46 | e && e.preventDefault()
47 |
48 | $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
49 |
50 | $parent.trigger(e = $.Event('close'))
51 |
52 | if (e.isDefaultPrevented()) return
53 |
54 | $parent.removeClass('in')
55 |
56 | function removeElement() {
57 | $parent
58 | .trigger('closed')
59 | .remove()
60 | }
61 |
62 | $.support.transition && $parent.hasClass('fade') ?
63 | $parent.on($.support.transition.end, removeElement) :
64 | removeElement()
65 | }
66 |
67 |
68 | /* ALERT PLUGIN DEFINITION
69 | * ======================= */
70 |
71 | var old = $.fn.alert
72 |
73 | $.fn.alert = function (option) {
74 | return this.each(function () {
75 | var $this = $(this)
76 | , data = $this.data('alert')
77 | if (!data) $this.data('alert', (data = new Alert(this)))
78 | if (typeof option == 'string') data[option].call($this)
79 | })
80 | }
81 |
82 | $.fn.alert.Constructor = Alert
83 |
84 |
85 | /* ALERT NO CONFLICT
86 | * ================= */
87 |
88 | $.fn.alert.noConflict = function () {
89 | $.fn.alert = old
90 | return this
91 | }
92 |
93 |
94 | /* ALERT DATA-API
95 | * ============== */
96 |
97 | $(document).on('click.alert.data-api', dismiss, Alert.prototype.close)
98 |
99 | }(window.jQuery);
--------------------------------------------------------------------------------
/docs/assets/js/bootstrap-alert.js:
--------------------------------------------------------------------------------
1 | /* ==========================================================
2 | * bootstrap-alert.js v2.3.1
3 | * http://twitter.github.com/bootstrap/javascript.html#alerts
4 | * ==========================================================
5 | * Copyright 2012 Twitter, Inc.
6 | *
7 | * Licensed under the Apache License, Version 2.0 (the "License");
8 | * you may not use this file except in compliance with the License.
9 | * You may obtain a copy of the License at
10 | *
11 | * http://www.apache.org/licenses/LICENSE-2.0
12 | *
13 | * Unless required by applicable law or agreed to in writing, software
14 | * distributed under the License is distributed on an "AS IS" BASIS,
15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 | * See the License for the specific language governing permissions and
17 | * limitations under the License.
18 | * ========================================================== */
19 |
20 |
21 | !function ($) {
22 |
23 | "use strict"; // jshint ;_;
24 |
25 |
26 | /* ALERT CLASS DEFINITION
27 | * ====================== */
28 |
29 | var dismiss = '[data-dismiss="alert"]'
30 | , Alert = function (el) {
31 | $(el).on('click', dismiss, this.close)
32 | }
33 |
34 | Alert.prototype.close = function (e) {
35 | var $this = $(this)
36 | , selector = $this.attr('data-target')
37 | , $parent
38 |
39 | if (!selector) {
40 | selector = $this.attr('href')
41 | selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
42 | }
43 |
44 | $parent = $(selector)
45 |
46 | e && e.preventDefault()
47 |
48 | $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
49 |
50 | $parent.trigger(e = $.Event('close'))
51 |
52 | if (e.isDefaultPrevented()) return
53 |
54 | $parent.removeClass('in')
55 |
56 | function removeElement() {
57 | $parent
58 | .trigger('closed')
59 | .remove()
60 | }
61 |
62 | $.support.transition && $parent.hasClass('fade') ?
63 | $parent.on($.support.transition.end, removeElement) :
64 | removeElement()
65 | }
66 |
67 |
68 | /* ALERT PLUGIN DEFINITION
69 | * ======================= */
70 |
71 | var old = $.fn.alert
72 |
73 | $.fn.alert = function (option) {
74 | return this.each(function () {
75 | var $this = $(this)
76 | , data = $this.data('alert')
77 | if (!data) $this.data('alert', (data = new Alert(this)))
78 | if (typeof option == 'string') data[option].call($this)
79 | })
80 | }
81 |
82 | $.fn.alert.Constructor = Alert
83 |
84 |
85 | /* ALERT NO CONFLICT
86 | * ================= */
87 |
88 | $.fn.alert.noConflict = function () {
89 | $.fn.alert = old
90 | return this
91 | }
92 |
93 |
94 | /* ALERT DATA-API
95 | * ============== */
96 |
97 | $(document).on('click.alert.data-api', dismiss, Alert.prototype.close)
98 |
99 | }(window.jQuery);
--------------------------------------------------------------------------------
/docs/build/node_modules/.bin/hulk:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | /*
4 | * Copyright 2011 Twitter, Inc.
5 | * Licensed under the Apache License, Version 2.0 (the "License");
6 | * you may not use this file except in compliance with the License.
7 | * You may obtain a copy of the License at
8 | *
9 | * http://www.apache.org/licenses/LICENSE-2.0
10 | *
11 | * Unless required by applicable law or agreed to in writing, software
12 | * distributed under the License is distributed on an "AS IS" BASIS,
13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | * See the License for the specific language governing permissions and
15 | * limitations under the License.
16 | */
17 |
18 | var hogan = require('../lib/hogan.js'),
19 | path = require('path'),
20 | fs = require('fs');
21 |
22 | var specials = ['/', '.', '*', '+', '?', '|','(', ')', '[', ']', '{', '}', '\\'],
23 | specialsRegExp = new RegExp('(\\' + specials.join('|\\') + ')', 'g'),
24 | templates;
25 |
26 |
27 | // Escape special regexp characters
28 | function esc(text) {
29 | return text.replace(specialsRegExp, '\\$1');
30 | }
31 |
32 |
33 | // Check for dirs and correct ext (<3 for windows)
34 | function extractFiles(args) {
35 | var usage = 'USAGE: hulk ./templates/*.mustaches\n' +
36 | 'NOTE: hulk supports the "*" wildcard and allows you to target specific extensions too',
37 | files = [];
38 |
39 | if (!args.length) {
40 | console.log(usage);
41 | process.exit(-1);
42 | }
43 |
44 | args.forEach(function (arg) {
45 |
46 | if (/\*/.test(arg)) {
47 | arg = arg.split('*');
48 | return files = files.concat(
49 | fs.readdirSync(arg[0] || '.')
50 | .map(function (f) {
51 | return new RegExp(esc(arg[1]) + '$').test(f) && path.join(arg[0], f);
52 | })
53 | .filter(function (f) {
54 | return f;
55 | })
56 | );
57 | }
58 |
59 | files.push(arg);
60 |
61 | })
62 |
63 | return files;
64 | }
65 |
66 |
67 | // Remove utf-8 byte order mark, http://en.wikipedia.org/wiki/Byte_order_mark
68 | function removeByteOrderMark(text) {
69 | if (text.charCodeAt(0) === 0xfeff) {
70 | return text.substring(1);
71 | }
72 | return text;
73 | }
74 |
75 |
76 | // Write a template foreach file that matches template extension
77 | templates = extractFiles(process.argv.slice(2))
78 | .map(function (file) {
79 | var openedFile = fs.readFileSync(file, 'utf-8'), name;
80 | if (!openedFile) return;
81 | name = file.replace(/\..*$/, '');
82 | openedFile = removeByteOrderMark(openedFile.trim());
83 | return 'templates.' + name + ' = new Hogan.Template(' + hogan.compile(openedFile, { asString: 1 }) + ');';
84 | })
85 | .filter(function (t) {
86 | return t;
87 | });
88 |
89 |
90 | // Output templates
91 | if (!templates.length) return;
92 | console.log('var templates = {};');
93 | console.log(templates.join('\n'));
--------------------------------------------------------------------------------
/docs/build/node_modules/hogan.js/bin/hulk:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | /*
4 | * Copyright 2011 Twitter, Inc.
5 | * Licensed under the Apache License, Version 2.0 (the "License");
6 | * you may not use this file except in compliance with the License.
7 | * You may obtain a copy of the License at
8 | *
9 | * http://www.apache.org/licenses/LICENSE-2.0
10 | *
11 | * Unless required by applicable law or agreed to in writing, software
12 | * distributed under the License is distributed on an "AS IS" BASIS,
13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | * See the License for the specific language governing permissions and
15 | * limitations under the License.
16 | */
17 |
18 | var hogan = require('../lib/hogan.js'),
19 | path = require('path'),
20 | fs = require('fs');
21 |
22 | var specials = ['/', '.', '*', '+', '?', '|','(', ')', '[', ']', '{', '}', '\\'],
23 | specialsRegExp = new RegExp('(\\' + specials.join('|\\') + ')', 'g'),
24 | templates;
25 |
26 |
27 | // Escape special regexp characters
28 | function esc(text) {
29 | return text.replace(specialsRegExp, '\\$1');
30 | }
31 |
32 |
33 | // Check for dirs and correct ext (<3 for windows)
34 | function extractFiles(args) {
35 | var usage = 'USAGE: hulk ./templates/*.mustaches\n' +
36 | 'NOTE: hulk supports the "*" wildcard and allows you to target specific extensions too',
37 | files = [];
38 |
39 | if (!args.length) {
40 | console.log(usage);
41 | process.exit(-1);
42 | }
43 |
44 | args.forEach(function (arg) {
45 |
46 | if (/\*/.test(arg)) {
47 | arg = arg.split('*');
48 | return files = files.concat(
49 | fs.readdirSync(arg[0] || '.')
50 | .map(function (f) {
51 | return new RegExp(esc(arg[1]) + '$').test(f) && path.join(arg[0], f);
52 | })
53 | .filter(function (f) {
54 | return f;
55 | })
56 | );
57 | }
58 |
59 | files.push(arg);
60 |
61 | })
62 |
63 | return files;
64 | }
65 |
66 |
67 | // Remove utf-8 byte order mark, http://en.wikipedia.org/wiki/Byte_order_mark
68 | function removeByteOrderMark(text) {
69 | if (text.charCodeAt(0) === 0xfeff) {
70 | return text.substring(1);
71 | }
72 | return text;
73 | }
74 |
75 |
76 | // Write a template foreach file that matches template extension
77 | templates = extractFiles(process.argv.slice(2))
78 | .map(function (file) {
79 | var openedFile = fs.readFileSync(file, 'utf-8'), name;
80 | if (!openedFile) return;
81 | name = file.replace(/\..*$/, '');
82 | openedFile = removeByteOrderMark(openedFile.trim());
83 | return 'templates.' + name + ' = new Hogan.Template(' + hogan.compile(openedFile, { asString: 1 }) + ');';
84 | })
85 | .filter(function (t) {
86 | return t;
87 | });
88 |
89 |
90 | // Output templates
91 | if (!templates.length) return;
92 | console.log('var templates = {};');
93 | console.log(templates.join('\n'));
--------------------------------------------------------------------------------
/docs/build/node_modules/hogan.js/test/spec/specs/partials.json:
--------------------------------------------------------------------------------
1 | {"__ATTN__":"Do not edit this file; changes belong in the appropriate YAML file.","overview":"Partial tags are used to expand an external template into the current\ntemplate.\n\nThe tag's content MUST be a non-whitespace character sequence NOT containing\nthe current closing delimiter.\n\nThis tag's content names the partial to inject. Set Delimiter tags MUST NOT\naffect the parsing of a partial. The partial MUST be rendered against the\ncontext stack local to the tag. If the named partial cannot be found, the\nempty string SHOULD be used instead, as in interpolations.\n\nPartial tags SHOULD be treated as standalone when appropriate. If this tag\nis used standalone, any whitespace preceding the tag should treated as\nindentation, and prepended to each line of the partial before rendering.\n","tests":[{"name":"Basic Behavior","data":{},"expected":"\"from partial\"","template":"\"{{>text}}\"","desc":"The greater-than operator should expand to the named partial.","partials":{"text":"from partial"}},{"name":"Failed Lookup","data":{},"expected":"\"\"","template":"\"{{>text}}\"","desc":"The empty string should be used when the named partial is not found.","partials":{}},{"name":"Context","data":{"text":"content"},"expected":"\"*content*\"","template":"\"{{>partial}}\"","desc":"The greater-than operator should operate within the current context.","partials":{"partial":"*{{text}}*"}},{"name":"Recursion","data":{"content":"X","nodes":[{"content":"Y","nodes":[]}]},"expected":"X>","template":"{{>node}}","desc":"The greater-than operator should properly recurse.","partials":{"node":"{{content}}<{{#nodes}}{{>node}}{{/nodes}}>"}},{"name":"Surrounding Whitespace","data":{},"expected":"| \t|\t |","template":"| {{>partial}} |","desc":"The greater-than operator should not alter surrounding whitespace.","partials":{"partial":"\t|\t"}},{"name":"Inline Indentation","data":{"data":"|"},"expected":" | >\n>\n","template":" {{data}} {{> partial}}\n","desc":"Whitespace should be left untouched.","partials":{"partial":">\n>"}},{"name":"Standalone Line Endings","data":{},"expected":"|\r\n>|","template":"|\r\n{{>partial}}\r\n|","desc":"\"\\r\\n\" should be considered a newline for standalone tags.","partials":{"partial":">"}},{"name":"Standalone Without Previous Line","data":{},"expected":" >\n >>","template":" {{>partial}}\n>","desc":"Standalone tags should not require a newline to precede them.","partials":{"partial":">\n>"}},{"name":"Standalone Without Newline","data":{},"expected":">\n >\n >","template":">\n {{>partial}}","desc":"Standalone tags should not require a newline to follow them.","partials":{"partial":">\n>"}},{"name":"Standalone Indentation","data":{"content":"<\n->"},"expected":"\\\n |\n <\n->\n |\n/\n","template":"\\\n {{>partial}}\n/\n","desc":"Each line of the partial should be indented before rendering.","partials":{"partial":"|\n{{{content}}}\n|\n"}},{"name":"Padding Whitespace","data":{"boolean":true},"expected":"|[]|","template":"|{{> partial }}|","desc":"Superfluous in-tag whitespace should be ignored.","partials":{"partial":"[]"}}]}
--------------------------------------------------------------------------------
/docs/build/node_modules/hogan.js/test/spec/specs/comments.yml:
--------------------------------------------------------------------------------
1 | overview: |
2 | Comment tags represent content that should never appear in the resulting
3 | output.
4 |
5 | The tag's content may contain any substring (including newlines) EXCEPT the
6 | closing delimiter.
7 |
8 | Comment tags SHOULD be treated as standalone when appropriate.
9 | tests:
10 | - name: Inline
11 | desc: Comment blocks should be removed from the template.
12 | data: { }
13 | template: '12345{{! Comment Block! }}67890'
14 | expected: '1234567890'
15 |
16 | - name: Multiline
17 | desc: Multiline comments should be permitted.
18 | data: { }
19 | template: |
20 | 12345{{!
21 | This is a
22 | multi-line comment...
23 | }}67890
24 | expected: |
25 | 1234567890
26 |
27 | - name: Standalone
28 | desc: All standalone comment lines should be removed.
29 | data: { }
30 | template: |
31 | Begin.
32 | {{! Comment Block! }}
33 | End.
34 | expected: |
35 | Begin.
36 | End.
37 |
38 | - name: Indented Standalone
39 | desc: All standalone comment lines should be removed.
40 | data: { }
41 | template: |
42 | Begin.
43 | {{! Indented Comment Block! }}
44 | End.
45 | expected: |
46 | Begin.
47 | End.
48 |
49 | - name: Standalone Line Endings
50 | desc: '"\r\n" should be considered a newline for standalone tags.'
51 | data: { }
52 | template: "|\r\n{{! Standalone Comment }}\r\n|"
53 | expected: "|\r\n|"
54 |
55 | - name: Standalone Without Previous Line
56 | desc: Standalone tags should not require a newline to precede them.
57 | data: { }
58 | template: " {{! I'm Still Standalone }}\n!"
59 | expected: "!"
60 |
61 | - name: Standalone Without Newline
62 | desc: Standalone tags should not require a newline to follow them.
63 | data: { }
64 | template: "!\n {{! I'm Still Standalone }}"
65 | expected: "!\n"
66 |
67 | - name: Multiline Standalone
68 | desc: All standalone comment lines should be removed.
69 | data: { }
70 | template: |
71 | Begin.
72 | {{!
73 | Something's going on here...
74 | }}
75 | End.
76 | expected: |
77 | Begin.
78 | End.
79 |
80 | - name: Indented Multiline Standalone
81 | desc: All standalone comment lines should be removed.
82 | data: { }
83 | template: |
84 | Begin.
85 | {{!
86 | Something's going on here...
87 | }}
88 | End.
89 | expected: |
90 | Begin.
91 | End.
92 |
93 | - name: Indented Inline
94 | desc: Inline comments should not strip whitespace
95 | data: { }
96 | template: " 12 {{! 34 }}\n"
97 | expected: " 12 \n"
98 |
99 | - name: Surrounding Whitespace
100 | desc: Comment removal should preserve surrounding whitespace.
101 | data: { }
102 | template: '12345 {{! Comment Block! }} 67890'
103 | expected: '12345 67890'
104 |
--------------------------------------------------------------------------------
/docs/build/node_modules/hogan.js/tools/release.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2011 Twitter, Inc.
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 |
16 | var fs = require('fs');
17 | var path = require('path');
18 | var Hogan = require(__dirname + '/../lib/hogan');
19 | var minlicense = '/**\n* @preserve Copyright 2012 Twitter, Inc.\n* @license http://www.apache.org/licenses/LICENSE-2.0.txt\n*/\n';
20 |
21 | function read(path) {
22 | return fs.readFileSync(path).toString()
23 | }
24 |
25 | // Good enough for little js files
26 | function copy(src, dst) {
27 | return fs.writeFileSync(dst, read(src));
28 | }
29 |
30 | function uglify(src, dst) {
31 | var jsp = require("uglify-js").parser;
32 | var pro = require("uglify-js").uglify;
33 | var orig_code = read(src);
34 | var ast = jsp.parse(orig_code); // parse code and get the initial AST
35 | ast = pro.ast_mangle(ast); // get a new AST with mangled names
36 | ast = pro.ast_squeeze(ast); // get an AST with compression optimizations
37 | fs.writeFileSync(dst, minlicense + pro.gen_code(ast));
38 | }
39 |
40 | var packageJSON = JSON.parse(read('package.json'));
41 | var version = packageJSON.version.substring(0, packageJSON.version.indexOf('-'));
42 |
43 | function removeFirstComment(text) {
44 | return text.substring(text.indexOf('*/') + 2);
45 | }
46 |
47 | var context = {
48 | template: removeFirstComment(read(__dirname + '/../lib/template.js')),
49 | compiler: removeFirstComment(read(__dirname + '/../lib/compiler.js'))
50 | };
51 |
52 | var wrapperPath = '/../wrappers/';
53 | var wrappers = fs.readdirSync(__dirname + wrapperPath).map(function(f) {
54 | return __dirname + wrapperPath + f;
55 | });
56 |
57 | var distPath = __dirname + '/../dist/';
58 | wrappers.forEach(function(wrapper) {
59 | var tail = path.basename(wrapper, '.mustache');
60 | var target = distPath + 'hogan-' + version + '.' + tail;
61 | var uglified = distPath + 'hogan-' + version + '.min.' + tail;
62 | fs.writeFileSync(target, Hogan.compile(read(wrapper)).render(context));
63 | uglify(target, uglified);
64 | });
65 |
66 | // Also release Hogan.Template on its own.
67 | var templateTarget = distPath + 'template-' + version + '.js';
68 | fs.writeFileSync(templateTarget, read(__dirname + '/../lib/template.js'));
69 | uglify(templateTarget, distPath + 'template-' + version + '.min.js');
70 |
71 | // Add packageJSON to node distribution
72 | packageJSON.version = version;
73 | fs.writeFileSync(__dirname + '/../dist/nodejs/package.json',
74 | JSON.stringify(packageJSON, null, " "));
75 |
--------------------------------------------------------------------------------
/js/tests/unit/bootstrap-tab.js:
--------------------------------------------------------------------------------
1 | $(function () {
2 |
3 | module("bootstrap-tabs")
4 |
5 | test("should provide no conflict", function () {
6 | var tab = $.fn.tab.noConflict()
7 | ok(!$.fn.tab, 'tab was set back to undefined (org value)')
8 | $.fn.tab = tab
9 | })
10 |
11 | test("should be defined on jquery object", function () {
12 | ok($(document.body).tab, 'tabs method is defined')
13 | })
14 |
15 | test("should return element", function () {
16 | ok($(document.body).tab()[0] == document.body, 'document.body returned')
17 | })
18 |
19 | test("should activate element by tab id", function () {
20 | var tabsHTML =
21 | ''
25 |
26 | $('').appendTo("#qunit-fixture")
27 |
28 | $(tabsHTML).find('li:last a').tab('show')
29 | equals($("#qunit-fixture").find('.active').attr('id'), "profile")
30 |
31 | $(tabsHTML).find('li:first a').tab('show')
32 | equals($("#qunit-fixture").find('.active').attr('id'), "home")
33 | })
34 |
35 | test("should activate element by tab id", function () {
36 | var pillsHTML =
37 | ''
41 |
42 | $('').appendTo("#qunit-fixture")
43 |
44 | $(pillsHTML).find('li:last a').tab('show')
45 | equals($("#qunit-fixture").find('.active').attr('id'), "profile")
46 |
47 | $(pillsHTML).find('li:first a').tab('show')
48 | equals($("#qunit-fixture").find('.active').attr('id'), "home")
49 | })
50 |
51 |
52 | test("should not fire closed when close is prevented", function () {
53 | $.support.transition = false
54 | stop();
55 | $('
')
56 | .bind('show', function (e) {
57 | e.preventDefault();
58 | ok(true);
59 | start();
60 | })
61 | .bind('shown', function () {
62 | ok(false);
63 | })
64 | .tab('show')
65 | })
66 |
67 | test("show and shown events should reference correct relatedTarget", function () {
68 | var dropHTML =
69 | ''
70 | + '1 '
71 | + ''
75 | + ' '
76 | + ' '
77 |
78 | $(dropHTML).find('ul>li:first a').tab('show').end()
79 | .find('ul>li:last a').on('show', function(event){
80 | equals(event.relatedTarget.hash, "#1-1")
81 | }).on('shown', function(event){
82 | equals(event.relatedTarget.hash, "#1-1")
83 | }).tab('show')
84 | })
85 |
86 | })
--------------------------------------------------------------------------------
/docs/build/node_modules/hogan.js/test/mustache.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2011 Twitter, Inc.
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 |
16 | var doc = this['document'];
17 | var fs = require('fs');
18 |
19 | var passed = 0;
20 | var failed = 0;
21 |
22 | if (!this['output']) {
23 | var output = function (string) {
24 | return doc ? doc.write(string + ' ') : console.log(string);
25 | };
26 | }
27 |
28 | var Hogan = require(__dirname + '/../lib/hogan');
29 | var template = fs.readFileSync(__dirname + '/../lib/template.js').toString();
30 | var compiler = fs.readFileSync(__dirname + '/../lib/compiler.js').toString();
31 | var mustache_wrapper = fs.readFileSync(__dirname + '/../wrappers/mustache.js.mustache').toString();
32 |
33 | // Create a Mustache.js emulator from the distribution template
34 | var engines = (new Function(Hogan.compile(mustache_wrapper).render({template: template, compiler: compiler}) +
35 | '; return {Hogan: Hogan, Mustache: Mustache};'))();
36 |
37 | var Mustache = engines.Mustache;
38 | var Hogan2 = engines.Hogan;
39 |
40 |
41 | // sanity check
42 | is(Mustache.hasOwnProperty('to_html'), true, 'Mustache has to_html method.');
43 |
44 | // Check for Mustache.js partial resolution behavior.
45 | var context = {
46 | foo: 'bar',
47 | mypartial: {
48 | baz: 'qux'
49 | }
50 | }
51 | var text = 'abc {{foo}} def {{>mypartial}} ghi';
52 | var partialText = '{{baz}}';
53 | var s = Mustache.to_html(text, context, {'mypartial': partialText});
54 | is(s, 'abc bar def qux ghi', 'Correct emulation of Mustache.js partial-name-in-context resolution.');
55 |
56 | // Now check to see that the Hogan resolution is unaffected.
57 | var t = Hogan2.compile(text);
58 | s = t.render(context, {'mypartial': partialText});
59 | is(s, 'abc bar def ghi', 'Hogan behavior not changed by Mustache.js emulation.');
60 |
61 | // Check for sendFun behavior
62 | var buf = "";
63 | function send(s) {
64 | buf += "-FOO " + s + " FOO-";
65 | }
66 | var s = Mustache.to_html(text, context, {'mypartial': partialText}, send);
67 | is(buf, '-FOO abc bar def qux ghi FOO-', 'Correct emulation of Mustache.js sendFun.');
68 |
69 |
70 | function is(got, expected, msg) {
71 | if (got === expected) {
72 | output("OK: " + msg);
73 | ++passed;
74 | } else {
75 | output("FAIL: " + msg);
76 | output("Expected |" + expected + "|");
77 | output(" Got |" + got + "|");
78 | ++failed;
79 | }
80 | }
81 |
82 | function complete() {
83 | output("\nTests Complete");
84 | output("--------------");
85 | output("Passed: " + passed);
86 | output("Failed: " + failed);
87 | output("\n");
88 | }
89 |
90 | complete();
--------------------------------------------------------------------------------
/js/tests/unit/bootstrap-collapse.js:
--------------------------------------------------------------------------------
1 | $(function () {
2 |
3 | module("bootstrap-collapse")
4 |
5 | test("should provide no conflict", function () {
6 | var collapse = $.fn.collapse.noConflict()
7 | ok(!$.fn.collapse, 'collapse was set back to undefined (org value)')
8 | $.fn.collapse = collapse
9 | })
10 |
11 | test("should be defined on jquery object", function () {
12 | ok($(document.body).collapse, 'collapse method is defined')
13 | })
14 |
15 | test("should return element", function () {
16 | ok($(document.body).collapse()[0] == document.body, 'document.body returned')
17 | })
18 |
19 | test("should show a collapsed element", function () {
20 | var el = $('
').collapse('show')
21 | ok(el.hasClass('in'), 'has class in')
22 | ok(/height/.test(el.attr('style')), 'has height set')
23 | })
24 |
25 | test("should hide a collapsed element", function () {
26 | var el = $('
').collapse('hide')
27 | ok(!el.hasClass('in'), 'does not have class in')
28 | ok(/height/.test(el.attr('style')), 'has height set')
29 | })
30 |
31 | test("should not fire shown when show is prevented", function () {
32 | $.support.transition = false
33 | stop()
34 | $('
')
35 | .bind('show', function (e) {
36 | e.preventDefault();
37 | ok(true);
38 | start();
39 | })
40 | .bind('shown', function () {
41 | ok(false);
42 | })
43 | .collapse('show')
44 | })
45 |
46 | test("should reset style to auto after finishing opening collapse", function () {
47 | $.support.transition = false
48 | stop()
49 | $('
')
50 | .bind('show', function () {
51 | ok(this.style.height == '0px')
52 | })
53 | .bind('shown', function () {
54 | ok(this.style.height == 'auto')
55 | start()
56 | })
57 | .collapse('show')
58 | })
59 |
60 | test("should add active class to target when collapse shown", function () {
61 | $.support.transition = false
62 | stop()
63 |
64 | var target = $(' ')
65 | .appendTo($('#qunit-fixture'))
66 |
67 | var collapsible = $('
')
68 | .appendTo($('#qunit-fixture'))
69 | .on('show', function () {
70 | ok(!target.hasClass('collapsed'))
71 | start()
72 | })
73 |
74 | target.click()
75 | })
76 |
77 | test("should remove active class to target when collapse hidden", function () {
78 | $.support.transition = false
79 | stop()
80 |
81 | var target = $(' ')
82 | .appendTo($('#qunit-fixture'))
83 |
84 | var collapsible = $('
')
85 | .appendTo($('#qunit-fixture'))
86 | .on('hide', function () {
87 | ok(target.hasClass('collapsed'))
88 | start()
89 | })
90 |
91 | target.click()
92 | })
93 |
94 | })
--------------------------------------------------------------------------------
/less/pagination.less:
--------------------------------------------------------------------------------
1 | //
2 | // Pagination (multiple pages)
3 | // --------------------------------------------------
4 |
5 | // Space out pagination from surrounding content
6 | .pagination {
7 | margin: @baseLineHeight 0;
8 | }
9 |
10 | .pagination ul {
11 | // Allow for text-based alignment
12 | display: inline-block;
13 | .ie7-inline-block();
14 | // Reset default ul styles
15 | margin-left: 0;
16 | margin-bottom: 0;
17 | // Visuals
18 | .border-radius(@baseBorderRadius);
19 | .box-shadow(0 1px 2px rgba(0,0,0,.05));
20 | }
21 | .pagination ul > li {
22 | display: inline; // Remove list-style and block-level defaults
23 | }
24 | .pagination ul > li > a,
25 | .pagination ul > li > span {
26 | float: left; // Collapse white-space
27 | padding: 4px 12px;
28 | line-height: @baseLineHeight;
29 | text-decoration: none;
30 | background-color: @paginationBackground;
31 | border: 1px solid @paginationBorder;
32 | border-left-width: 0;
33 | }
34 | .pagination ul > li > a:hover,
35 | .pagination ul > li > a:focus,
36 | .pagination ul > .active > a,
37 | .pagination ul > .active > span {
38 | background-color: @paginationActiveBackground;
39 | }
40 | .pagination ul > .active > a,
41 | .pagination ul > .active > span {
42 | color: @grayLight;
43 | cursor: default;
44 | }
45 | .pagination ul > .disabled > span,
46 | .pagination ul > .disabled > a,
47 | .pagination ul > .disabled > a:hover,
48 | .pagination ul > .disabled > a:focus {
49 | color: @grayLight;
50 | background-color: transparent;
51 | cursor: default;
52 | }
53 | .pagination ul > li:first-child > a,
54 | .pagination ul > li:first-child > span {
55 | border-left-width: 1px;
56 | .border-left-radius(@baseBorderRadius);
57 | }
58 | .pagination ul > li:last-child > a,
59 | .pagination ul > li:last-child > span {
60 | .border-right-radius(@baseBorderRadius);
61 | }
62 |
63 |
64 | // Alignment
65 | // --------------------------------------------------
66 |
67 | .pagination-centered {
68 | text-align: center;
69 | }
70 | .pagination-right {
71 | text-align: right;
72 | }
73 |
74 |
75 | // Sizing
76 | // --------------------------------------------------
77 |
78 | // Large
79 | .pagination-large {
80 | ul > li > a,
81 | ul > li > span {
82 | padding: @paddingLarge;
83 | font-size: @fontSizeLarge;
84 | }
85 | ul > li:first-child > a,
86 | ul > li:first-child > span {
87 | .border-left-radius(@borderRadiusLarge);
88 | }
89 | ul > li:last-child > a,
90 | ul > li:last-child > span {
91 | .border-right-radius(@borderRadiusLarge);
92 | }
93 | }
94 |
95 | // Small and mini
96 | .pagination-mini,
97 | .pagination-small {
98 | ul > li:first-child > a,
99 | ul > li:first-child > span {
100 | .border-left-radius(@borderRadiusSmall);
101 | }
102 | ul > li:last-child > a,
103 | ul > li:last-child > span {
104 | .border-right-radius(@borderRadiusSmall);
105 | }
106 | }
107 |
108 | // Small
109 | .pagination-small {
110 | ul > li > a,
111 | ul > li > span {
112 | padding: @paddingSmall;
113 | font-size: @fontSizeSmall;
114 | }
115 | }
116 | // Mini
117 | .pagination-mini {
118 | ul > li > a,
119 | ul > li > span {
120 | padding: @paddingMini;
121 | font-size: @fontSizeMini;
122 | }
123 | }
124 |
--------------------------------------------------------------------------------
/less/carousel.less:
--------------------------------------------------------------------------------
1 | //
2 | // Carousel
3 | // --------------------------------------------------
4 |
5 |
6 | .carousel {
7 | position: relative;
8 | margin-bottom: @baseLineHeight;
9 | line-height: 1;
10 | }
11 |
12 | .carousel-inner {
13 | overflow: hidden;
14 | width: 100%;
15 | position: relative;
16 | }
17 |
18 | .carousel-inner {
19 |
20 | > .item {
21 | display: none;
22 | position: relative;
23 | .transition(.6s ease-in-out left);
24 |
25 | // Account for jankitude on images
26 | > img,
27 | > a > img {
28 | display: block;
29 | line-height: 1;
30 | }
31 | }
32 |
33 | > .active,
34 | > .next,
35 | > .prev { display: block; }
36 |
37 | > .active {
38 | left: 0;
39 | }
40 |
41 | > .next,
42 | > .prev {
43 | position: absolute;
44 | top: 0;
45 | width: 100%;
46 | }
47 |
48 | > .next {
49 | left: 100%;
50 | }
51 | > .prev {
52 | left: -100%;
53 | }
54 | > .next.left,
55 | > .prev.right {
56 | left: 0;
57 | }
58 |
59 | > .active.left {
60 | left: -100%;
61 | }
62 | > .active.right {
63 | left: 100%;
64 | }
65 |
66 | }
67 |
68 | // Left/right controls for nav
69 | // ---------------------------
70 |
71 | .carousel-control {
72 | position: absolute;
73 | top: 40%;
74 | left: 15px;
75 | width: 40px;
76 | height: 40px;
77 | margin-top: -20px;
78 | font-size: 60px;
79 | font-weight: 100;
80 | line-height: 30px;
81 | color: @white;
82 | text-align: center;
83 | background: @grayDarker;
84 | border: 3px solid @white;
85 | .border-radius(23px);
86 | .opacity(50);
87 |
88 | // we can't have this transition here
89 | // because webkit cancels the carousel
90 | // animation if you trip this while
91 | // in the middle of another animation
92 | // ;_;
93 | // .transition(opacity .2s linear);
94 |
95 | // Reposition the right one
96 | &.right {
97 | left: auto;
98 | right: 15px;
99 | }
100 |
101 | // Hover/focus state
102 | &:hover,
103 | &:focus {
104 | color: @white;
105 | text-decoration: none;
106 | .opacity(90);
107 | }
108 | }
109 |
110 | // Carousel indicator pips
111 | // -----------------------------
112 | .carousel-indicators {
113 | position: absolute;
114 | top: 15px;
115 | right: 15px;
116 | z-index: 5;
117 | margin: 0;
118 | list-style: none;
119 |
120 | li {
121 | display: block;
122 | float: left;
123 | width: 10px;
124 | height: 10px;
125 | margin-left: 5px;
126 | text-indent: -999px;
127 | background-color: #ccc;
128 | background-color: rgba(255,255,255,.25);
129 | border-radius: 5px;
130 | }
131 | .active {
132 | background-color: #fff;
133 | }
134 | }
135 |
136 | // Caption for text below images
137 | // -----------------------------
138 |
139 | .carousel-caption {
140 | position: absolute;
141 | left: 0;
142 | right: 0;
143 | bottom: 0;
144 | padding: 15px;
145 | background: @grayDark;
146 | background: rgba(0,0,0,.75);
147 | }
148 | .carousel-caption h4,
149 | .carousel-caption p {
150 | color: @white;
151 | line-height: @baseLineHeight;
152 | }
153 | .carousel-caption h4 {
154 | margin: 0 0 5px;
155 | }
156 | .carousel-caption p {
157 | margin-bottom: 0;
158 | }
159 |
--------------------------------------------------------------------------------
/docs/build/node_modules/hogan.js/test/spec/README.md:
--------------------------------------------------------------------------------
1 | The repository at https://github.com/mustache/spec is the formal standard for
2 | Mustache. It defines both normal usage and edge-case behavior for libraries
3 | parsing the Mustache templating language (or a superset thereof).
4 |
5 | The specification is developed as a series of YAML files, under the `specs`
6 | directory.
7 |
8 | Versioning
9 | ----------
10 | This specification is being [semantically versioned](http://semver.org).
11 | Roughly described, major version changes will always represent backwards
12 | incompatible changes, minor version changes will always represent new language
13 | features and will be backwards compatible, and patch ('tiny') version changes
14 | will always be bug fixes. For the purposes of semantic versioning, the public
15 | API is the contents of the `specs` directory and the algorithm for testing
16 | against it.
17 |
18 | Mustache implementations SHOULD report the most recent version of the spec
19 | (major and minor version numbers). If an implementation has support for any
20 | optional modules, they SHOULD indicate so with a remark attached to the
21 | version number (e.g. "vX.Y, including lambdas" or "v.X.Y+λ"). It is
22 | RECOMMENDED that implementations not supporting at least v1.0.0 of this spec
23 | refer to themselves as "Mustache-like", or "Mustache-inspired".
24 |
25 | Alternate Formats
26 | -----------------
27 |
28 | Since YAML is a reasonably complex format that not every language has good
29 | tools for working with, we also provide JSON versions of the specs on a
30 | best-effort basis.
31 |
32 | These should be identical to the YAML specifications, but if you find the need
33 | to regenerate them, they can be trivially rebuilt by invoking `rake build`.
34 |
35 | It is also worth noting that some specifications (notably, the lambda module)
36 | rely on YAML "tags" to denote special types of data (e.g. source code). Since
37 | JSON offers no way to denote this, a special key ("`__tag__`") is injected
38 | with the name of the tag as its value. See `TESTING.md` for more information
39 | about handling tagged data.
40 |
41 | Optional Modules
42 | ----------------
43 |
44 | Specification files beginning with a tilde (`~`) describe optional modules.
45 | At present, the only module being described as optional is regarding support
46 | for lambdas. As a guideline, a module may be a candidate for optionality
47 | when:
48 |
49 | * It does not affect the core syntax of the language.
50 | * It does not significantly affect the output of rendered templates.
51 | * It concerns implementation language features or data types that are not
52 | common to or core in every targeted language.
53 | * The lack of support by an implementation does not diminish the usage of
54 | Mustache in the target language.
55 |
56 | As an example, the lambda module is primarily concerned with the handling of a
57 | particular data type (code). This is a type of data that may be difficult to
58 | support in some languages, and users of those languages will not see the lack
59 | as an 'inconsistency' between implementations.
60 |
61 | Support for specific pragmas or syntax extensions, however, are best managed
62 | outside this core specification, as adjunct specifications.
63 |
64 | Implementors are strongly encouraged to support any and all modules they are
65 | reasonably capable of supporting.
66 |
--------------------------------------------------------------------------------
/docs/build/node_modules/hogan.js/test/spec/specs/delimiters.json:
--------------------------------------------------------------------------------
1 | {"__ATTN__":"Do not edit this file; changes belong in the appropriate YAML file.","overview":"Set Delimiter tags are used to change the tag delimiters for all content\nfollowing the tag in the current compilation unit.\n\nThe tag's content MUST be any two non-whitespace sequences (separated by\nwhitespace) EXCEPT an equals sign ('=') followed by the current closing\ndelimiter.\n\nSet Delimiter tags SHOULD be treated as standalone when appropriate.\n","tests":[{"name":"Pair Behavior","data":{"text":"Hey!"},"expected":"(Hey!)","template":"{{=<% %>=}}(<%text%>)","desc":"The equals sign (used on both sides) should permit delimiter changes."},{"name":"Special Characters","data":{"text":"It worked!"},"expected":"(It worked!)","template":"({{=[ ]=}}[text])","desc":"Characters with special meaning regexen should be valid delimiters."},{"name":"Sections","data":{"section":true,"data":"I got interpolated."},"expected":"[\n I got interpolated.\n |data|\n\n {{data}}\n I got interpolated.\n]\n","template":"[\n{{#section}}\n {{data}}\n |data|\n{{/section}}\n\n{{= | | =}}\n|#section|\n {{data}}\n |data|\n|/section|\n]\n","desc":"Delimiters set outside sections should persist."},{"name":"Inverted Sections","data":{"section":false,"data":"I got interpolated."},"expected":"[\n I got interpolated.\n |data|\n\n {{data}}\n I got interpolated.\n]\n","template":"[\n{{^section}}\n {{data}}\n |data|\n{{/section}}\n\n{{= | | =}}\n|^section|\n {{data}}\n |data|\n|/section|\n]\n","desc":"Delimiters set outside inverted sections should persist."},{"name":"Partial Inheritence","data":{"value":"yes"},"expected":"[ .yes. ]\n[ .yes. ]\n","template":"[ {{>include}} ]\n{{= | | =}}\n[ |>include| ]\n","desc":"Delimiters set in a parent template should not affect a partial.","partials":{"include":".{{value}}."}},{"name":"Post-Partial Behavior","data":{"value":"yes"},"expected":"[ .yes. .yes. ]\n[ .yes. .|value|. ]\n","template":"[ {{>include}} ]\n[ .{{value}}. .|value|. ]\n","desc":"Delimiters set in a partial should not affect the parent template.","partials":{"include":".{{value}}. {{= | | =}} .|value|."}},{"name":"Surrounding Whitespace","data":{},"expected":"| |","template":"| {{=@ @=}} |","desc":"Surrounding whitespace should be left untouched."},{"name":"Outlying Whitespace (Inline)","data":{},"expected":" | \n","template":" | {{=@ @=}}\n","desc":"Whitespace should be left untouched."},{"name":"Standalone Tag","data":{},"expected":"Begin.\nEnd.\n","template":"Begin.\n{{=@ @=}}\nEnd.\n","desc":"Standalone lines should be removed from the template."},{"name":"Indented Standalone Tag","data":{},"expected":"Begin.\nEnd.\n","template":"Begin.\n {{=@ @=}}\nEnd.\n","desc":"Indented standalone lines should be removed from the template."},{"name":"Standalone Line Endings","data":{},"expected":"|\r\n|","template":"|\r\n{{= @ @ =}}\r\n|","desc":"\"\\r\\n\" should be considered a newline for standalone tags."},{"name":"Standalone Without Previous Line","data":{},"expected":"=","template":" {{=@ @=}}\n=","desc":"Standalone tags should not require a newline to precede them."},{"name":"Standalone Without Newline","data":{},"expected":"=\n","template":"=\n {{=@ @=}}","desc":"Standalone tags should not require a newline to follow them."},{"name":"Pair with Padding","data":{},"expected":"||","template":"|{{= @ @ =}}|","desc":"Superfluous in-tag whitespace should be ignored."}]}
--------------------------------------------------------------------------------
/js/bootstrap-button.js:
--------------------------------------------------------------------------------
1 | /* ============================================================
2 | * bootstrap-button.js v2.3.1
3 | * http://twitter.github.com/bootstrap/javascript.html#buttons
4 | * ============================================================
5 | * Copyright 2012 Twitter, Inc.
6 | *
7 | * Licensed under the Apache License, Version 2.0 (the "License");
8 | * you may not use this file except in compliance with the License.
9 | * You may obtain a copy of the License at
10 | *
11 | * http://www.apache.org/licenses/LICENSE-2.0
12 | *
13 | * Unless required by applicable law or agreed to in writing, software
14 | * distributed under the License is distributed on an "AS IS" BASIS,
15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 | * See the License for the specific language governing permissions and
17 | * limitations under the License.
18 | * ============================================================ */
19 |
20 |
21 | !function ($) {
22 |
23 | "use strict"; // jshint ;_;
24 |
25 |
26 | /* BUTTON PUBLIC CLASS DEFINITION
27 | * ============================== */
28 |
29 | var Button = function (element, options) {
30 | this.$element = $(element)
31 | this.options = $.extend({}, $.fn.button.defaults, options)
32 | }
33 |
34 | Button.prototype.setState = function (state) {
35 | var d = 'disabled'
36 | , $el = this.$element
37 | , data = $el.data()
38 | , val = $el.is('input') ? 'val' : 'html'
39 |
40 | state = state + 'Text'
41 | data.resetText || $el.data('resetText', $el[val]())
42 |
43 | $el[val](data[state] || this.options[state])
44 |
45 | // push to event loop to allow forms to submit
46 | setTimeout(function () {
47 | state == 'loadingText' ?
48 | $el.addClass(d).attr(d, d) :
49 | $el.removeClass(d).removeAttr(d)
50 | }, 0)
51 | }
52 |
53 | Button.prototype.toggle = function () {
54 | var $parent = this.$element.closest('[data-toggle="buttons-radio"]')
55 |
56 | $parent && $parent
57 | .find('.active')
58 | .removeClass('active')
59 |
60 | this.$element.toggleClass('active')
61 | }
62 |
63 |
64 | /* BUTTON PLUGIN DEFINITION
65 | * ======================== */
66 |
67 | var old = $.fn.button
68 |
69 | $.fn.button = function (option) {
70 | return this.each(function () {
71 | var $this = $(this)
72 | , data = $this.data('button')
73 | , options = typeof option == 'object' && option
74 | if (!data) $this.data('button', (data = new Button(this, options)))
75 | if (option == 'toggle') data.toggle()
76 | else if (option) data.setState(option)
77 | })
78 | }
79 |
80 | $.fn.button.defaults = {
81 | loadingText: 'loading...'
82 | }
83 |
84 | $.fn.button.Constructor = Button
85 |
86 |
87 | /* BUTTON NO CONFLICT
88 | * ================== */
89 |
90 | $.fn.button.noConflict = function () {
91 | $.fn.button = old
92 | return this
93 | }
94 |
95 |
96 | /* BUTTON DATA-API
97 | * =============== */
98 |
99 | $(document).on('click.button.data-api', '[data-toggle^=button]', function (e) {
100 | var $btn = $(e.target)
101 | if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
102 | $btn.button('toggle')
103 | })
104 |
105 | }(window.jQuery);
--------------------------------------------------------------------------------
/docs/assets/js/bootstrap-button.js:
--------------------------------------------------------------------------------
1 | /* ============================================================
2 | * bootstrap-button.js v2.3.1
3 | * http://twitter.github.com/bootstrap/javascript.html#buttons
4 | * ============================================================
5 | * Copyright 2012 Twitter, Inc.
6 | *
7 | * Licensed under the Apache License, Version 2.0 (the "License");
8 | * you may not use this file except in compliance with the License.
9 | * You may obtain a copy of the License at
10 | *
11 | * http://www.apache.org/licenses/LICENSE-2.0
12 | *
13 | * Unless required by applicable law or agreed to in writing, software
14 | * distributed under the License is distributed on an "AS IS" BASIS,
15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 | * See the License for the specific language governing permissions and
17 | * limitations under the License.
18 | * ============================================================ */
19 |
20 |
21 | !function ($) {
22 |
23 | "use strict"; // jshint ;_;
24 |
25 |
26 | /* BUTTON PUBLIC CLASS DEFINITION
27 | * ============================== */
28 |
29 | var Button = function (element, options) {
30 | this.$element = $(element)
31 | this.options = $.extend({}, $.fn.button.defaults, options)
32 | }
33 |
34 | Button.prototype.setState = function (state) {
35 | var d = 'disabled'
36 | , $el = this.$element
37 | , data = $el.data()
38 | , val = $el.is('input') ? 'val' : 'html'
39 |
40 | state = state + 'Text'
41 | data.resetText || $el.data('resetText', $el[val]())
42 |
43 | $el[val](data[state] || this.options[state])
44 |
45 | // push to event loop to allow forms to submit
46 | setTimeout(function () {
47 | state == 'loadingText' ?
48 | $el.addClass(d).attr(d, d) :
49 | $el.removeClass(d).removeAttr(d)
50 | }, 0)
51 | }
52 |
53 | Button.prototype.toggle = function () {
54 | var $parent = this.$element.closest('[data-toggle="buttons-radio"]')
55 |
56 | $parent && $parent
57 | .find('.active')
58 | .removeClass('active')
59 |
60 | this.$element.toggleClass('active')
61 | }
62 |
63 |
64 | /* BUTTON PLUGIN DEFINITION
65 | * ======================== */
66 |
67 | var old = $.fn.button
68 |
69 | $.fn.button = function (option) {
70 | return this.each(function () {
71 | var $this = $(this)
72 | , data = $this.data('button')
73 | , options = typeof option == 'object' && option
74 | if (!data) $this.data('button', (data = new Button(this, options)))
75 | if (option == 'toggle') data.toggle()
76 | else if (option) data.setState(option)
77 | })
78 | }
79 |
80 | $.fn.button.defaults = {
81 | loadingText: 'loading...'
82 | }
83 |
84 | $.fn.button.Constructor = Button
85 |
86 |
87 | /* BUTTON NO CONFLICT
88 | * ================== */
89 |
90 | $.fn.button.noConflict = function () {
91 | $.fn.button = old
92 | return this
93 | }
94 |
95 |
96 | /* BUTTON DATA-API
97 | * =============== */
98 |
99 | $(document).on('click.button.data-api', '[data-toggle^=button]', function (e) {
100 | var $btn = $(e.target)
101 | if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
102 | $btn.button('toggle')
103 | })
104 |
105 | }(window.jQuery);
--------------------------------------------------------------------------------
/less/progress-bars.less:
--------------------------------------------------------------------------------
1 | //
2 | // Progress bars
3 | // --------------------------------------------------
4 |
5 |
6 | // ANIMATIONS
7 | // ----------
8 |
9 | // Webkit
10 | @-webkit-keyframes progress-bar-stripes {
11 | from { background-position: 40px 0; }
12 | to { background-position: 0 0; }
13 | }
14 |
15 | // Firefox
16 | @-moz-keyframes progress-bar-stripes {
17 | from { background-position: 40px 0; }
18 | to { background-position: 0 0; }
19 | }
20 |
21 | // IE9
22 | @-ms-keyframes progress-bar-stripes {
23 | from { background-position: 40px 0; }
24 | to { background-position: 0 0; }
25 | }
26 |
27 | // Opera
28 | @-o-keyframes progress-bar-stripes {
29 | from { background-position: 0 0; }
30 | to { background-position: 40px 0; }
31 | }
32 |
33 | // Spec
34 | @keyframes progress-bar-stripes {
35 | from { background-position: 40px 0; }
36 | to { background-position: 0 0; }
37 | }
38 |
39 |
40 |
41 | // THE BARS
42 | // --------
43 |
44 | // Outer container
45 | .progress {
46 | overflow: hidden;
47 | height: @baseLineHeight;
48 | margin-bottom: @baseLineHeight;
49 | #gradient > .vertical(#f5f5f5, #f9f9f9);
50 | .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));
51 | .border-radius(@baseBorderRadius);
52 | }
53 |
54 | // Bar of progress
55 | .progress .bar {
56 | width: 0%;
57 | height: 100%;
58 | color: @white;
59 | float: left;
60 | font-size: 12px;
61 | text-align: center;
62 | text-shadow: 0 -1px 0 rgba(0,0,0,.25);
63 | #gradient > .vertical(#149bdf, #0480be);
64 | .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));
65 | .box-sizing(border-box);
66 | .transition(width .6s ease);
67 | }
68 | .progress .bar + .bar {
69 | .box-shadow(~"inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15)");
70 | }
71 |
72 | // Striped bars
73 | .progress-striped .bar {
74 | #gradient > .striped(#149bdf);
75 | .background-size(40px 40px);
76 | }
77 |
78 | // Call animation for the active one
79 | .progress.active .bar {
80 | -webkit-animation: progress-bar-stripes 2s linear infinite;
81 | -moz-animation: progress-bar-stripes 2s linear infinite;
82 | -ms-animation: progress-bar-stripes 2s linear infinite;
83 | -o-animation: progress-bar-stripes 2s linear infinite;
84 | animation: progress-bar-stripes 2s linear infinite;
85 | }
86 |
87 |
88 |
89 | // COLORS
90 | // ------
91 |
92 | // Danger (red)
93 | .progress-danger .bar, .progress .bar-danger {
94 | #gradient > .vertical(#ee5f5b, #c43c35);
95 | }
96 | .progress-danger.progress-striped .bar, .progress-striped .bar-danger {
97 | #gradient > .striped(#ee5f5b);
98 | }
99 |
100 | // Success (green)
101 | .progress-success .bar, .progress .bar-success {
102 | #gradient > .vertical(#62c462, #57a957);
103 | }
104 | .progress-success.progress-striped .bar, .progress-striped .bar-success {
105 | #gradient > .striped(#62c462);
106 | }
107 |
108 | // Info (teal)
109 | .progress-info .bar, .progress .bar-info {
110 | #gradient > .vertical(#5bc0de, #339bb9);
111 | }
112 | .progress-info.progress-striped .bar, .progress-striped .bar-info {
113 | #gradient > .striped(#5bc0de);
114 | }
115 |
116 | // Warning (orange)
117 | .progress-warning .bar, .progress .bar-warning {
118 | #gradient > .vertical(lighten(@orange, 15%), @orange);
119 | }
120 | .progress-warning.progress-striped .bar, .progress-striped .bar-warning {
121 | #gradient > .striped(lighten(@orange, 15%));
122 | }
123 |
--------------------------------------------------------------------------------
/docs/examples/starter-template.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Bootstrap, from Twitter
6 |
7 |
8 |
9 |
10 |
11 |
12 |
17 |
18 |
19 |
20 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
53 |
54 |
55 |
56 |
Bootstrap starter template
57 |
Use this document as a way to quick start any new project. All you get is this message and a barebones HTML document.
58 |
59 |
60 |
61 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
--------------------------------------------------------------------------------
/less/jasny-navs-tabbable.less:
--------------------------------------------------------------------------------
1 | // Jasny.navs-tabbable.less
2 | // Improvements for tabbable component declared in navs.less
3 | // ---------------------------------------------------------
4 |
5 |
6 | // No outline for tabs and pills
7 | .nav-tabs > li > a,
8 | .nav-pills > li > a {
9 | outline: none;
10 | }
11 |
12 | // Disabled tab
13 | .nav-tabs > li.disabled > a {
14 | color: #CCCCCC;
15 | cursor: not-allowed;
16 | }
17 |
18 |
19 | // TABBABLE
20 | // --------
21 |
22 |
23 | // COMMON STYLES
24 | // -------------
25 |
26 | // Clear any floats
27 | .tabbable {
28 | .clearfix();
29 | border-style: solid;
30 | border-color: #ddd;
31 | border-width: 0px;
32 | }
33 |
34 | // Make the tab content grow correctly
35 | .tabbable > .nav-tabs {
36 | margin: 0;
37 | }
38 | .tab-content {
39 | overflow: auto; // prevent content from running below tabs
40 | border-style: solid;
41 | border-color: #ddd;
42 | border-width: 0px;
43 | padding: 18px 0 0 0;
44 | }
45 |
46 | // Tabs on top
47 | .tabbable-bordered {
48 | .border-radius(4px);
49 | > .tab-content {
50 | border-width: 0 1px 1px 1px;
51 | padding: 20px 20px 10px 20px;
52 | .border-radius(0 0 4px 4px);
53 | }
54 | }
55 |
56 | // Container as tabbable
57 | body > .container.tabbable > .nav-tabs {
58 | padding-top: 15px;
59 | }
60 |
61 | // BOTTOM
62 | // ------
63 |
64 | .tabs-below > .tab-content {
65 | padding: 0 0 10px 0;
66 | }
67 | .tabs-below.tabbable-bordered {
68 | > .tab-content {
69 | border-width: 1px 1px 0 1px;
70 | padding: 20px 20px 10px 20px;
71 | .border-radius(4px 4px 0 0);
72 | }
73 | }
74 | body > .container.tabs-below.tabbable-bodered > .tab-content {
75 | border-top-width: 0;
76 | .border-radius(0)
77 | }
78 |
79 | // LEFT & RIGHT
80 | // ------------
81 |
82 | // Common styles
83 | .tabs-left,
84 | .tabs-right {
85 | margin-bottom: 20px;
86 | }
87 | .tabs-left > .nav-tabs,
88 | .tabs-right > .nav-tabs {
89 | position: relative;
90 | z-index: 1;
91 | margin-bottom: 0;
92 | }
93 | .tabs-left > .tab-content,
94 | .tabs-right > .tab-content {
95 | overflow: hidden;
96 | }
97 |
98 | // Tabs on the left
99 | .tabs-left > .nav-tabs {
100 | left: 1px;
101 | }
102 | .tabs-left > .nav-tabs > .active > a,
103 | .tabs-left > .nav-tabs > .active > a:hover {
104 | border-color: #ddd transparent #ddd #ddd;
105 | *border-right-color: @white;
106 | }
107 | .tabs-left > .tab-content {
108 | padding: 0 0 0 19px;
109 | border-left-width: 1px;
110 | }
111 | .tabs-left.tabbable-bordered {
112 | border-width: 0 1px 0 0;
113 | > .tab-content {
114 | border-width: 1px 0 1px 1px;
115 | padding: 20px 20px 10px 20px;
116 | .border-radius(0 4px 4px 0);
117 | }
118 | }
119 | body > .container.tabs-left.tabbable-bodered > .tab-content {
120 | border-top-width: 0;
121 | .border-radius(0 0 4px 0);
122 | }
123 |
124 | // Tabs on the right
125 | .tabs-right > .nav-tabs {
126 | right: 1px;
127 | }
128 | .tabs-right > .nav-tabs > .active > a,
129 | .tabs-right > .nav-tabs > .active > a:hover {
130 | border-color: #ddd #ddd #ddd transparent;
131 | *border-left-color: @white;
132 | }
133 | .tabs-right > .tab-content {
134 | padding: 0 19px 0 0;
135 | border-right-width: 1px;
136 | }
137 | .tabs-right.tabbable-bordered {
138 | border-width: 0 0 0 1px;
139 | > .tab-content {
140 | border-width: 1px 1px 1px 0;
141 | padding: 20px 20px 10px 20px;
142 | .border-radius(4px 0 0 4px);
143 | }
144 | }
145 | body > .container.tabs-right.tabbable-bodered > .tab-content {
146 | border-top-width: 0;
147 | .border-radius(0 0 0 4px);
148 | }
--------------------------------------------------------------------------------
/js/bootstrap-popover.js:
--------------------------------------------------------------------------------
1 | /* ===========================================================
2 | * bootstrap-popover.js v2.3.1
3 | * http://twitter.github.com/bootstrap/javascript.html#popovers
4 | * ===========================================================
5 | * Copyright 2012 Twitter, Inc.
6 | *
7 | * Licensed under the Apache License, Version 2.0 (the "License");
8 | * you may not use this file except in compliance with the License.
9 | * You may obtain a copy of the License at
10 | *
11 | * http://www.apache.org/licenses/LICENSE-2.0
12 | *
13 | * Unless required by applicable law or agreed to in writing, software
14 | * distributed under the License is distributed on an "AS IS" BASIS,
15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 | * See the License for the specific language governing permissions and
17 | * limitations under the License.
18 | * =========================================================== */
19 |
20 |
21 | !function ($) {
22 |
23 | "use strict"; // jshint ;_;
24 |
25 |
26 | /* POPOVER PUBLIC CLASS DEFINITION
27 | * =============================== */
28 |
29 | var Popover = function (element, options) {
30 | this.init('popover', element, options)
31 | }
32 |
33 |
34 | /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js
35 | ========================================== */
36 |
37 | Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {
38 |
39 | constructor: Popover
40 |
41 | , setContent: function () {
42 | var $tip = this.tip()
43 | , title = this.getTitle()
44 | , content = this.getContent()
45 |
46 | $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
47 | $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content)
48 |
49 | $tip.removeClass('fade top bottom left right in')
50 | }
51 |
52 | , hasContent: function () {
53 | return this.getTitle() || this.getContent()
54 | }
55 |
56 | , getContent: function () {
57 | var content
58 | , $e = this.$element
59 | , o = this.options
60 |
61 | content = (typeof o.content == 'function' ? o.content.call($e[0]) : o.content)
62 | || $e.attr('data-content')
63 |
64 | return content
65 | }
66 |
67 | , tip: function () {
68 | if (!this.$tip) {
69 | this.$tip = $(this.options.template)
70 | }
71 | return this.$tip
72 | }
73 |
74 | , destroy: function () {
75 | this.hide().$element.off('.' + this.type).removeData(this.type)
76 | }
77 |
78 | })
79 |
80 |
81 | /* POPOVER PLUGIN DEFINITION
82 | * ======================= */
83 |
84 | var old = $.fn.popover
85 |
86 | $.fn.popover = function (option) {
87 | return this.each(function () {
88 | var $this = $(this)
89 | , data = $this.data('popover')
90 | , options = typeof option == 'object' && option
91 | if (!data) $this.data('popover', (data = new Popover(this, options)))
92 | if (typeof option == 'string') data[option]()
93 | })
94 | }
95 |
96 | $.fn.popover.Constructor = Popover
97 |
98 | $.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, {
99 | placement: 'right'
100 | , trigger: 'click'
101 | , content: ''
102 | , template: ''
103 | })
104 |
105 |
106 | /* POPOVER NO CONFLICT
107 | * =================== */
108 |
109 | $.fn.popover.noConflict = function () {
110 | $.fn.popover = old
111 | return this
112 | }
113 |
114 | }(window.jQuery);
115 |
--------------------------------------------------------------------------------
/docs/assets/js/bootstrap-popover.js:
--------------------------------------------------------------------------------
1 | /* ===========================================================
2 | * bootstrap-popover.js v2.3.1
3 | * http://twitter.github.com/bootstrap/javascript.html#popovers
4 | * ===========================================================
5 | * Copyright 2012 Twitter, Inc.
6 | *
7 | * Licensed under the Apache License, Version 2.0 (the "License");
8 | * you may not use this file except in compliance with the License.
9 | * You may obtain a copy of the License at
10 | *
11 | * http://www.apache.org/licenses/LICENSE-2.0
12 | *
13 | * Unless required by applicable law or agreed to in writing, software
14 | * distributed under the License is distributed on an "AS IS" BASIS,
15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 | * See the License for the specific language governing permissions and
17 | * limitations under the License.
18 | * =========================================================== */
19 |
20 |
21 | !function ($) {
22 |
23 | "use strict"; // jshint ;_;
24 |
25 |
26 | /* POPOVER PUBLIC CLASS DEFINITION
27 | * =============================== */
28 |
29 | var Popover = function (element, options) {
30 | this.init('popover', element, options)
31 | }
32 |
33 |
34 | /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js
35 | ========================================== */
36 |
37 | Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {
38 |
39 | constructor: Popover
40 |
41 | , setContent: function () {
42 | var $tip = this.tip()
43 | , title = this.getTitle()
44 | , content = this.getContent()
45 |
46 | $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
47 | $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content)
48 |
49 | $tip.removeClass('fade top bottom left right in')
50 | }
51 |
52 | , hasContent: function () {
53 | return this.getTitle() || this.getContent()
54 | }
55 |
56 | , getContent: function () {
57 | var content
58 | , $e = this.$element
59 | , o = this.options
60 |
61 | content = (typeof o.content == 'function' ? o.content.call($e[0]) : o.content)
62 | || $e.attr('data-content')
63 |
64 | return content
65 | }
66 |
67 | , tip: function () {
68 | if (!this.$tip) {
69 | this.$tip = $(this.options.template)
70 | }
71 | return this.$tip
72 | }
73 |
74 | , destroy: function () {
75 | this.hide().$element.off('.' + this.type).removeData(this.type)
76 | }
77 |
78 | })
79 |
80 |
81 | /* POPOVER PLUGIN DEFINITION
82 | * ======================= */
83 |
84 | var old = $.fn.popover
85 |
86 | $.fn.popover = function (option) {
87 | return this.each(function () {
88 | var $this = $(this)
89 | , data = $this.data('popover')
90 | , options = typeof option == 'object' && option
91 | if (!data) $this.data('popover', (data = new Popover(this, options)))
92 | if (typeof option == 'string') data[option]()
93 | })
94 | }
95 |
96 | $.fn.popover.Constructor = Popover
97 |
98 | $.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, {
99 | placement: 'right'
100 | , trigger: 'click'
101 | , content: ''
102 | , template: ''
103 | })
104 |
105 |
106 | /* POPOVER NO CONFLICT
107 | * =================== */
108 |
109 | $.fn.popover.noConflict = function () {
110 | $.fn.popover = old
111 | return this
112 | }
113 |
114 | }(window.jQuery);
115 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing to Bootstrap
2 |
3 | Looking to contribute something to Bootstrap? **Here's how you can help.**
4 |
5 |
6 |
7 | ## Reporting issues
8 |
9 | We only accept issues that are bug reports or feature requests. Bugs must be isolated and reproducible problems that we can fix within the Bootstrap core. Please read the following guidelines before opening any issue.
10 |
11 | 1. **Search for existing issues.** We get a lot of duplicate issues, and you'd help us out a lot by first checking if someone else has reported the same issue. Moreover, the issue may have already been resolved with a fix available.
12 | 2. **Create an isolated and reproducible test case.** Be sure the problem exists in Bootstrap's code with a [reduced test cases](http://css-tricks.com/reduced-test-cases/) that should be included in each bug report.
13 | 3. **Include a live example.** Make use of jsFiddle or jsBin to share your isolated test cases.
14 | 4. **Share as much information as possible.** Include operating system and version, browser and version, version of Bootstrap, customized or vanilla build, etc. where appropriate. Also include steps to reproduce the bug.
15 |
16 |
17 |
18 | ## Key branches
19 |
20 | - `master` is the latest, deployed version.
21 | - `gh-pages` is the hosted docs (not to be used for pull requests).
22 | - `*-wip` is the official work in progress branch for the next release.
23 |
24 |
25 |
26 | ## Notes on the repo
27 |
28 | As of v2.0.0, Bootstrap's documentation is powered by Mustache templates and built via `make` before each commit and release. This was done to enable internationalization (translation) in a future release by uploading our strings to the [Twitter Translation Center](http://translate.twttr.com/). Any edits to the docs should be first done in the Mustache files and then recompiled into the HTML.
29 |
30 |
31 |
32 | ## Pull requests
33 |
34 | - Try to submit pull requests against the latest `*-wip` branch for easier merging
35 | - Any changes to the docs must be made to the Mustache templates, not just the compiled HTML pages
36 | - CSS changes must be done in .less files first, never just the compiled files
37 | - If modifying the .less files, always recompile and commit the compiled files bootstrap.css and bootstrap.min.css
38 | - Try not to pollute your pull request with unintended changes--keep them simple and small
39 | - Try to share which browsers your code has been tested in before submitting a pull request
40 |
41 |
42 |
43 | ## Coding standards: HTML
44 |
45 | - Two spaces for indentation, never tabs
46 | - Double quotes only, never single quotes
47 | - Always use proper indentation
48 | - Use tags and elements appropriate for an HTML5 doctype (e.g., self-closing tags)
49 |
50 |
51 |
52 | ## Coding standards: CSS
53 |
54 | - Adhere to the [Recess CSS property order](http://markdotto.com/2011/11/29/css-property-order/)
55 | - Multiple-line approach (one property and value per line)
56 | - Always a space after a property's colon (.e.g, `display: block;` and not `display:block;`)
57 | - End all lines with a semi-colon
58 | - For multiple, comma-separated selectors, place each selector on it's own line
59 | - Attribute selectors, like `input[type="text"]` should always wrap the attribute's value in double quotes, for consistency and safety (see this [blog post on unquoted attribute values](http://mathiasbynens.be/notes/unquoted-attribute-values) that can lead to XSS attacks).
60 |
61 |
62 |
63 | ## Coding standards: JS
64 |
65 | - No semicolons
66 | - Comma first
67 | - 2 spaces (no tabs)
68 | - strict mode
69 | - "Attractive"
70 |
71 |
72 |
73 | ## License
74 |
75 | By contributing your code, you agree to license your contribution under the terms of the APLv2: https://github.com/twitter/bootstrap/blob/master/LICENSE
76 |
--------------------------------------------------------------------------------
/less/popovers.less:
--------------------------------------------------------------------------------
1 | //
2 | // Popovers
3 | // --------------------------------------------------
4 |
5 |
6 | .popover {
7 | position: absolute;
8 | top: 0;
9 | left: 0;
10 | z-index: @zindexPopover;
11 | display: none;
12 | max-width: 276px;
13 | padding: 1px;
14 | text-align: left; // Reset given new insertion method
15 | background-color: @popoverBackground;
16 | -webkit-background-clip: padding-box;
17 | -moz-background-clip: padding;
18 | background-clip: padding-box;
19 | border: 1px solid #ccc;
20 | border: 1px solid rgba(0,0,0,.2);
21 | .border-radius(6px);
22 | .box-shadow(0 5px 10px rgba(0,0,0,.2));
23 |
24 | // Overrides for proper insertion
25 | white-space: normal;
26 |
27 | // Offset the popover to account for the popover arrow
28 | &.top { margin-top: -10px; }
29 | &.right { margin-left: 10px; }
30 | &.bottom { margin-top: 10px; }
31 | &.left { margin-left: -10px; }
32 | }
33 |
34 | .popover-title {
35 | margin: 0; // reset heading margin
36 | padding: 8px 14px;
37 | font-size: 14px;
38 | font-weight: normal;
39 | line-height: 18px;
40 | background-color: @popoverTitleBackground;
41 | border-bottom: 1px solid darken(@popoverTitleBackground, 5%);
42 | .border-radius(5px 5px 0 0);
43 |
44 | &:empty {
45 | display: none;
46 | }
47 | }
48 |
49 | .popover-content {
50 | padding: 9px 14px;
51 | }
52 |
53 | // Arrows
54 | //
55 | // .arrow is outer, .arrow:after is inner
56 |
57 | .popover .arrow,
58 | .popover .arrow:after {
59 | position: absolute;
60 | display: block;
61 | width: 0;
62 | height: 0;
63 | border-color: transparent;
64 | border-style: solid;
65 | }
66 | .popover .arrow {
67 | border-width: @popoverArrowOuterWidth;
68 | }
69 | .popover .arrow:after {
70 | border-width: @popoverArrowWidth;
71 | content: "";
72 | }
73 |
74 | .popover {
75 | &.top .arrow {
76 | left: 50%;
77 | margin-left: -@popoverArrowOuterWidth;
78 | border-bottom-width: 0;
79 | border-top-color: #999; // IE8 fallback
80 | border-top-color: @popoverArrowOuterColor;
81 | bottom: -@popoverArrowOuterWidth;
82 | &:after {
83 | bottom: 1px;
84 | margin-left: -@popoverArrowWidth;
85 | border-bottom-width: 0;
86 | border-top-color: @popoverArrowColor;
87 | }
88 | }
89 | &.right .arrow {
90 | top: 50%;
91 | left: -@popoverArrowOuterWidth;
92 | margin-top: -@popoverArrowOuterWidth;
93 | border-left-width: 0;
94 | border-right-color: #999; // IE8 fallback
95 | border-right-color: @popoverArrowOuterColor;
96 | &:after {
97 | left: 1px;
98 | bottom: -@popoverArrowWidth;
99 | border-left-width: 0;
100 | border-right-color: @popoverArrowColor;
101 | }
102 | }
103 | &.bottom .arrow {
104 | left: 50%;
105 | margin-left: -@popoverArrowOuterWidth;
106 | border-top-width: 0;
107 | border-bottom-color: #999; // IE8 fallback
108 | border-bottom-color: @popoverArrowOuterColor;
109 | top: -@popoverArrowOuterWidth;
110 | &:after {
111 | top: 1px;
112 | margin-left: -@popoverArrowWidth;
113 | border-top-width: 0;
114 | border-bottom-color: @popoverArrowColor;
115 | }
116 | }
117 |
118 | &.left .arrow {
119 | top: 50%;
120 | right: -@popoverArrowOuterWidth;
121 | margin-top: -@popoverArrowOuterWidth;
122 | border-right-width: 0;
123 | border-left-color: #999; // IE8 fallback
124 | border-left-color: @popoverArrowOuterColor;
125 | &:after {
126 | right: 1px;
127 | border-right-width: 0;
128 | border-left-color: @popoverArrowColor;
129 | bottom: -@popoverArrowWidth;
130 | }
131 | }
132 |
133 | }
134 |
--------------------------------------------------------------------------------
/docs/assets/js/README.md:
--------------------------------------------------------------------------------
1 | ## 2.0 BOOTSTRAP JS PHILOSOPHY
2 | These are the high-level design rules which guide the development of Bootstrap's plugin apis.
3 |
4 | ---
5 |
6 | ### DATA-ATTRIBUTE API
7 |
8 | We believe you should be able to use all plugins provided by Bootstrap purely through the markup API without writing a single line of javascript.
9 |
10 | We acknowledge that this isn't always the most performant and sometimes it may be desirable to turn this functionality off altogether. Therefore, as of 2.0 we provide the ability to disable the data attribute API by unbinding all events on the body namespaced with `'data-api'`. This looks like this:
11 |
12 | $('body').off('.data-api')
13 |
14 | To target a specific plugin, just include the plugins name as a namespace along with the data-api namespace like this:
15 |
16 | $('body').off('.alert.data-api')
17 |
18 | ---
19 |
20 | ### PROGRAMMATIC API
21 |
22 | We also believe you should be able to use all plugins provided by Bootstrap purely through the JS API.
23 |
24 | All public APIs should be single, chainable methods, and return the collection acted upon.
25 |
26 | $(".btn.danger").button("toggle").addClass("fat")
27 |
28 | All methods should accept an optional options object, a string which targets a particular method, or null which initiates the default behavior:
29 |
30 | $("#myModal").modal() // initialized with defaults
31 | $("#myModal").modal({ keyboard: false }) // initialized with now keyboard
32 | $("#myModal").modal('show') // initializes and invokes show immediately afterqwe2
33 |
34 | ---
35 |
36 | ### OPTIONS
37 |
38 | Options should be sparse and add universal value. We should pick the right defaults.
39 |
40 | All plugins should have a default object which can be modified to effect all instance's default options. The defaults object should be available via `$.fn.plugin.defaults`.
41 |
42 | $.fn.modal.defaults = { … }
43 |
44 | An options definition should take the following form:
45 |
46 | *noun*: *adjective* - describes or modifies a quality of an instance
47 |
48 | examples:
49 |
50 | backdrop: true
51 | keyboard: false
52 | placement: 'top'
53 |
54 | ---
55 |
56 | ### EVENTS
57 |
58 | All events should have an infinitive and past participle form. The infinitive is fired just before an action takes place, the past participle on completion of the action.
59 |
60 | show | shown
61 | hide | hidden
62 |
63 | ---
64 |
65 | ### CONSTRUCTORS
66 |
67 | Each plugin should expose it's raw constructor on a `Constructor` property -- accessed in the following way:
68 |
69 |
70 | $.fn.popover.Constructor
71 |
72 | ---
73 |
74 | ### DATA ACCESSOR
75 |
76 | Each plugin stores a copy of the invoked class on an object. This class instance can be accessed directly through jQuery's data API like this:
77 |
78 | $('[rel=popover]').data('popover') instanceof $.fn.popover.Constructor
79 |
80 | ---
81 |
82 | ### DATA ATTRIBUTES
83 |
84 | Data attributes should take the following form:
85 |
86 | - data-{{verb}}={{plugin}} - defines main interaction
87 | - data-target || href^=# - defined on "control" element (if element controls an element other than self)
88 | - data-{{noun}} - defines class instance options
89 |
90 | examples:
91 |
92 | // control other targets
93 | data-toggle="modal" data-target="#foo"
94 | data-toggle="collapse" data-target="#foo" data-parent="#bar"
95 |
96 | // defined on element they control
97 | data-spy="scroll"
98 |
99 | data-dismiss="modal"
100 | data-dismiss="alert"
101 |
102 | data-toggle="dropdown"
103 |
104 | data-toggle="button"
105 | data-toggle="buttons-checkbox"
106 | data-toggle="buttons-radio"
--------------------------------------------------------------------------------
/docs/build/node_modules/hogan.js/test/spec/specs/partials.yml:
--------------------------------------------------------------------------------
1 | overview: |
2 | Partial tags are used to expand an external template into the current
3 | template.
4 |
5 | The tag's content MUST be a non-whitespace character sequence NOT containing
6 | the current closing delimiter.
7 |
8 | This tag's content names the partial to inject. Set Delimiter tags MUST NOT
9 | affect the parsing of a partial. The partial MUST be rendered against the
10 | context stack local to the tag. If the named partial cannot be found, the
11 | empty string SHOULD be used instead, as in interpolations.
12 |
13 | Partial tags SHOULD be treated as standalone when appropriate. If this tag
14 | is used standalone, any whitespace preceding the tag should treated as
15 | indentation, and prepended to each line of the partial before rendering.
16 | tests:
17 | - name: Basic Behavior
18 | desc: The greater-than operator should expand to the named partial.
19 | data: { }
20 | template: '"{{>text}}"'
21 | partials: { text: 'from partial' }
22 | expected: '"from partial"'
23 |
24 | - name: Failed Lookup
25 | desc: The empty string should be used when the named partial is not found.
26 | data: { }
27 | template: '"{{>text}}"'
28 | partials: { }
29 | expected: '""'
30 |
31 | - name: Context
32 | desc: The greater-than operator should operate within the current context.
33 | data: { text: 'content' }
34 | template: '"{{>partial}}"'
35 | partials: { partial: '*{{text}}*' }
36 | expected: '"*content*"'
37 |
38 | - name: Recursion
39 | desc: The greater-than operator should properly recurse.
40 | data: { content: "X", nodes: [ { content: "Y", nodes: [] } ] }
41 | template: '{{>node}}'
42 | partials: { node: '{{content}}<{{#nodes}}{{>node}}{{/nodes}}>' }
43 | expected: 'X>'
44 |
45 | # Whitespace Sensitivity
46 |
47 | - name: Surrounding Whitespace
48 | desc: The greater-than operator should not alter surrounding whitespace.
49 | data: { }
50 | template: '| {{>partial}} |'
51 | partials: { partial: "\t|\t" }
52 | expected: "| \t|\t |"
53 |
54 | - name: Inline Indentation
55 | desc: Whitespace should be left untouched.
56 | data: { data: '|' }
57 | template: " {{data}} {{> partial}}\n"
58 | partials: { partial: ">\n>" }
59 | expected: " | >\n>\n"
60 |
61 | - name: Standalone Line Endings
62 | desc: '"\r\n" should be considered a newline for standalone tags.'
63 | data: { }
64 | template: "|\r\n{{>partial}}\r\n|"
65 | partials: { partial: ">" }
66 | expected: "|\r\n>|"
67 |
68 | - name: Standalone Without Previous Line
69 | desc: Standalone tags should not require a newline to precede them.
70 | data: { }
71 | template: " {{>partial}}\n>"
72 | partials: { partial: ">\n>"}
73 | expected: " >\n >>"
74 |
75 | - name: Standalone Without Newline
76 | desc: Standalone tags should not require a newline to follow them.
77 | data: { }
78 | template: ">\n {{>partial}}"
79 | partials: { partial: ">\n>" }
80 | expected: ">\n >\n >"
81 |
82 | - name: Standalone Indentation
83 | desc: Each line of the partial should be indented before rendering.
84 | data: { content: "<\n->" }
85 | template: |
86 | \
87 | {{>partial}}
88 | /
89 | partials:
90 | partial: |
91 | |
92 | {{{content}}}
93 | |
94 | expected: |
95 | \
96 | |
97 | <
98 | ->
99 | |
100 | /
101 |
102 | # Whitespace Insensitivity
103 |
104 | - name: Padding Whitespace
105 | desc: Superfluous in-tag whitespace should be ignored.
106 | data: { boolean: true }
107 | template: "|{{> partial }}|"
108 | partials: { partial: "[]" }
109 | expected: '|[]|'
110 |
--------------------------------------------------------------------------------
/docs/examples/signin.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Sign in · Twitter Bootstrap
6 |
7 |
8 |
9 |
10 |
11 |
12 |
45 |
46 |
47 |
48 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
73 |
74 |
75 |
76 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
--------------------------------------------------------------------------------
/js/bootstrap-affix.js:
--------------------------------------------------------------------------------
1 | /* ==========================================================
2 | * bootstrap-affix.js v2.3.1
3 | * http://twitter.github.com/bootstrap/javascript.html#affix
4 | * ==========================================================
5 | * Copyright 2012 Twitter, Inc.
6 | *
7 | * Licensed under the Apache License, Version 2.0 (the "License");
8 | * you may not use this file except in compliance with the License.
9 | * You may obtain a copy of the License at
10 | *
11 | * http://www.apache.org/licenses/LICENSE-2.0
12 | *
13 | * Unless required by applicable law or agreed to in writing, software
14 | * distributed under the License is distributed on an "AS IS" BASIS,
15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 | * See the License for the specific language governing permissions and
17 | * limitations under the License.
18 | * ========================================================== */
19 |
20 |
21 | !function ($) {
22 |
23 | "use strict"; // jshint ;_;
24 |
25 |
26 | /* AFFIX CLASS DEFINITION
27 | * ====================== */
28 |
29 | var Affix = function (element, options) {
30 | this.options = $.extend({}, $.fn.affix.defaults, options)
31 | this.$window = $(window)
32 | .on('scroll.affix.data-api', $.proxy(this.checkPosition, this))
33 | .on('click.affix.data-api', $.proxy(function () { setTimeout($.proxy(this.checkPosition, this), 1) }, this))
34 | this.$element = $(element)
35 | this.checkPosition()
36 | }
37 |
38 | Affix.prototype.checkPosition = function () {
39 | if (!this.$element.is(':visible')) return
40 |
41 | var scrollHeight = $(document).height()
42 | , scrollTop = this.$window.scrollTop()
43 | , position = this.$element.offset()
44 | , offset = this.options.offset
45 | , offsetBottom = offset.bottom
46 | , offsetTop = offset.top
47 | , reset = 'affix affix-top affix-bottom'
48 | , affix
49 |
50 | if (typeof offset != 'object') offsetBottom = offsetTop = offset
51 | if (typeof offsetTop == 'function') offsetTop = offset.top()
52 | if (typeof offsetBottom == 'function') offsetBottom = offset.bottom()
53 |
54 | affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ?
55 | false : offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ?
56 | 'bottom' : offsetTop != null && scrollTop <= offsetTop ?
57 | 'top' : false
58 |
59 | if (this.affixed === affix) return
60 |
61 | this.affixed = affix
62 | this.unpin = affix == 'bottom' ? position.top - scrollTop : null
63 |
64 | this.$element.removeClass(reset).addClass('affix' + (affix ? '-' + affix : ''))
65 | }
66 |
67 |
68 | /* AFFIX PLUGIN DEFINITION
69 | * ======================= */
70 |
71 | var old = $.fn.affix
72 |
73 | $.fn.affix = function (option) {
74 | return this.each(function () {
75 | var $this = $(this)
76 | , data = $this.data('affix')
77 | , options = typeof option == 'object' && option
78 | if (!data) $this.data('affix', (data = new Affix(this, options)))
79 | if (typeof option == 'string') data[option]()
80 | })
81 | }
82 |
83 | $.fn.affix.Constructor = Affix
84 |
85 | $.fn.affix.defaults = {
86 | offset: 0
87 | }
88 |
89 |
90 | /* AFFIX NO CONFLICT
91 | * ================= */
92 |
93 | $.fn.affix.noConflict = function () {
94 | $.fn.affix = old
95 | return this
96 | }
97 |
98 |
99 | /* AFFIX DATA-API
100 | * ============== */
101 |
102 | $(window).on('load', function () {
103 | $('[data-spy="affix"]').each(function () {
104 | var $spy = $(this)
105 | , data = $spy.data()
106 |
107 | data.offset = data.offset || {}
108 |
109 | data.offsetBottom && (data.offset.bottom = data.offsetBottom)
110 | data.offsetTop && (data.offset.top = data.offsetTop)
111 |
112 | $spy.affix(data)
113 | })
114 | })
115 |
116 |
117 | }(window.jQuery);
--------------------------------------------------------------------------------
/docs/assets/js/bootstrap-affix.js:
--------------------------------------------------------------------------------
1 | /* ==========================================================
2 | * bootstrap-affix.js v2.3.1
3 | * http://twitter.github.com/bootstrap/javascript.html#affix
4 | * ==========================================================
5 | * Copyright 2012 Twitter, Inc.
6 | *
7 | * Licensed under the Apache License, Version 2.0 (the "License");
8 | * you may not use this file except in compliance with the License.
9 | * You may obtain a copy of the License at
10 | *
11 | * http://www.apache.org/licenses/LICENSE-2.0
12 | *
13 | * Unless required by applicable law or agreed to in writing, software
14 | * distributed under the License is distributed on an "AS IS" BASIS,
15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 | * See the License for the specific language governing permissions and
17 | * limitations under the License.
18 | * ========================================================== */
19 |
20 |
21 | !function ($) {
22 |
23 | "use strict"; // jshint ;_;
24 |
25 |
26 | /* AFFIX CLASS DEFINITION
27 | * ====================== */
28 |
29 | var Affix = function (element, options) {
30 | this.options = $.extend({}, $.fn.affix.defaults, options)
31 | this.$window = $(window)
32 | .on('scroll.affix.data-api', $.proxy(this.checkPosition, this))
33 | .on('click.affix.data-api', $.proxy(function () { setTimeout($.proxy(this.checkPosition, this), 1) }, this))
34 | this.$element = $(element)
35 | this.checkPosition()
36 | }
37 |
38 | Affix.prototype.checkPosition = function () {
39 | if (!this.$element.is(':visible')) return
40 |
41 | var scrollHeight = $(document).height()
42 | , scrollTop = this.$window.scrollTop()
43 | , position = this.$element.offset()
44 | , offset = this.options.offset
45 | , offsetBottom = offset.bottom
46 | , offsetTop = offset.top
47 | , reset = 'affix affix-top affix-bottom'
48 | , affix
49 |
50 | if (typeof offset != 'object') offsetBottom = offsetTop = offset
51 | if (typeof offsetTop == 'function') offsetTop = offset.top()
52 | if (typeof offsetBottom == 'function') offsetBottom = offset.bottom()
53 |
54 | affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ?
55 | false : offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ?
56 | 'bottom' : offsetTop != null && scrollTop <= offsetTop ?
57 | 'top' : false
58 |
59 | if (this.affixed === affix) return
60 |
61 | this.affixed = affix
62 | this.unpin = affix == 'bottom' ? position.top - scrollTop : null
63 |
64 | this.$element.removeClass(reset).addClass('affix' + (affix ? '-' + affix : ''))
65 | }
66 |
67 |
68 | /* AFFIX PLUGIN DEFINITION
69 | * ======================= */
70 |
71 | var old = $.fn.affix
72 |
73 | $.fn.affix = function (option) {
74 | return this.each(function () {
75 | var $this = $(this)
76 | , data = $this.data('affix')
77 | , options = typeof option == 'object' && option
78 | if (!data) $this.data('affix', (data = new Affix(this, options)))
79 | if (typeof option == 'string') data[option]()
80 | })
81 | }
82 |
83 | $.fn.affix.Constructor = Affix
84 |
85 | $.fn.affix.defaults = {
86 | offset: 0
87 | }
88 |
89 |
90 | /* AFFIX NO CONFLICT
91 | * ================= */
92 |
93 | $.fn.affix.noConflict = function () {
94 | $.fn.affix = old
95 | return this
96 | }
97 |
98 |
99 | /* AFFIX DATA-API
100 | * ============== */
101 |
102 | $(window).on('load', function () {
103 | $('[data-spy="affix"]').each(function () {
104 | var $spy = $(this)
105 | , data = $spy.data()
106 |
107 | data.offset = data.offset || {}
108 |
109 | data.offsetBottom && (data.offset.bottom = data.offsetBottom)
110 | data.offsetTop && (data.offset.top = data.offsetTop)
111 |
112 | $spy.affix(data)
113 | })
114 | })
115 |
116 |
117 | }(window.jQuery);
--------------------------------------------------------------------------------
/js/bootstrap-tab.js:
--------------------------------------------------------------------------------
1 | /* ========================================================
2 | * bootstrap-tab.js v2.3.1
3 | * http://twitter.github.com/bootstrap/javascript.html#tabs
4 | * ========================================================
5 | * Copyright 2012 Twitter, Inc.
6 | *
7 | * Licensed under the Apache License, Version 2.0 (the "License");
8 | * you may not use this file except in compliance with the License.
9 | * You may obtain a copy of the License at
10 | *
11 | * http://www.apache.org/licenses/LICENSE-2.0
12 | *
13 | * Unless required by applicable law or agreed to in writing, software
14 | * distributed under the License is distributed on an "AS IS" BASIS,
15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 | * See the License for the specific language governing permissions and
17 | * limitations under the License.
18 | * ======================================================== */
19 |
20 |
21 | !function ($) {
22 |
23 | "use strict"; // jshint ;_;
24 |
25 |
26 | /* TAB CLASS DEFINITION
27 | * ==================== */
28 |
29 | var Tab = function (element) {
30 | this.element = $(element)
31 | }
32 |
33 | Tab.prototype = {
34 |
35 | constructor: Tab
36 |
37 | , show: function () {
38 | var $this = this.element
39 | , $ul = $this.closest('ul:not(.dropdown-menu)')
40 | , selector = $this.attr('data-target')
41 | , previous
42 | , $target
43 | , e
44 |
45 | if (!selector) {
46 | selector = $this.attr('href')
47 | selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
48 | }
49 |
50 | if ( $this.parent('li').hasClass('active') ) return
51 |
52 | previous = $ul.find('.active:last a')[0]
53 |
54 | e = $.Event('show', {
55 | relatedTarget: previous
56 | })
57 |
58 | $this.trigger(e)
59 |
60 | if (e.isDefaultPrevented()) return
61 |
62 | $target = $(selector)
63 |
64 | this.activate($this.parent('li'), $ul)
65 | this.activate($target, $target.parent(), function () {
66 | $this.trigger({
67 | type: 'shown'
68 | , relatedTarget: previous
69 | })
70 | })
71 | }
72 |
73 | , activate: function ( element, container, callback) {
74 | var $active = container.find('> .active')
75 | , transition = callback
76 | && $.support.transition
77 | && $active.hasClass('fade')
78 |
79 | function next() {
80 | $active
81 | .removeClass('active')
82 | .find('> .dropdown-menu > .active')
83 | .removeClass('active')
84 |
85 | element.addClass('active')
86 |
87 | if (transition) {
88 | element[0].offsetWidth // reflow for transition
89 | element.addClass('in')
90 | } else {
91 | element.removeClass('fade')
92 | }
93 |
94 | if ( element.parent('.dropdown-menu') ) {
95 | element.closest('li.dropdown').addClass('active')
96 | }
97 |
98 | callback && callback()
99 | }
100 |
101 | transition ?
102 | $active.one($.support.transition.end, next) :
103 | next()
104 |
105 | $active.removeClass('in')
106 | }
107 | }
108 |
109 |
110 | /* TAB PLUGIN DEFINITION
111 | * ===================== */
112 |
113 | var old = $.fn.tab
114 |
115 | $.fn.tab = function ( option ) {
116 | return this.each(function () {
117 | var $this = $(this)
118 | , data = $this.data('tab')
119 | if (!data) $this.data('tab', (data = new Tab(this)))
120 | if (typeof option == 'string') data[option]()
121 | })
122 | }
123 |
124 | $.fn.tab.Constructor = Tab
125 |
126 |
127 | /* TAB NO CONFLICT
128 | * =============== */
129 |
130 | $.fn.tab.noConflict = function () {
131 | $.fn.tab = old
132 | return this
133 | }
134 |
135 |
136 | /* TAB DATA-API
137 | * ============ */
138 |
139 | $(document).on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
140 | e.preventDefault()
141 | $(this).tab('show')
142 | })
143 |
144 | }(window.jQuery);
--------------------------------------------------------------------------------
/docs/assets/js/bootstrap-tab.js:
--------------------------------------------------------------------------------
1 | /* ========================================================
2 | * bootstrap-tab.js v2.3.1
3 | * http://twitter.github.com/bootstrap/javascript.html#tabs
4 | * ========================================================
5 | * Copyright 2012 Twitter, Inc.
6 | *
7 | * Licensed under the Apache License, Version 2.0 (the "License");
8 | * you may not use this file except in compliance with the License.
9 | * You may obtain a copy of the License at
10 | *
11 | * http://www.apache.org/licenses/LICENSE-2.0
12 | *
13 | * Unless required by applicable law or agreed to in writing, software
14 | * distributed under the License is distributed on an "AS IS" BASIS,
15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 | * See the License for the specific language governing permissions and
17 | * limitations under the License.
18 | * ======================================================== */
19 |
20 |
21 | !function ($) {
22 |
23 | "use strict"; // jshint ;_;
24 |
25 |
26 | /* TAB CLASS DEFINITION
27 | * ==================== */
28 |
29 | var Tab = function (element) {
30 | this.element = $(element)
31 | }
32 |
33 | Tab.prototype = {
34 |
35 | constructor: Tab
36 |
37 | , show: function () {
38 | var $this = this.element
39 | , $ul = $this.closest('ul:not(.dropdown-menu)')
40 | , selector = $this.attr('data-target')
41 | , previous
42 | , $target
43 | , e
44 |
45 | if (!selector) {
46 | selector = $this.attr('href')
47 | selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
48 | }
49 |
50 | if ( $this.parent('li').hasClass('active') ) return
51 |
52 | previous = $ul.find('.active:last a')[0]
53 |
54 | e = $.Event('show', {
55 | relatedTarget: previous
56 | })
57 |
58 | $this.trigger(e)
59 |
60 | if (e.isDefaultPrevented()) return
61 |
62 | $target = $(selector)
63 |
64 | this.activate($this.parent('li'), $ul)
65 | this.activate($target, $target.parent(), function () {
66 | $this.trigger({
67 | type: 'shown'
68 | , relatedTarget: previous
69 | })
70 | })
71 | }
72 |
73 | , activate: function ( element, container, callback) {
74 | var $active = container.find('> .active')
75 | , transition = callback
76 | && $.support.transition
77 | && $active.hasClass('fade')
78 |
79 | function next() {
80 | $active
81 | .removeClass('active')
82 | .find('> .dropdown-menu > .active')
83 | .removeClass('active')
84 |
85 | element.addClass('active')
86 |
87 | if (transition) {
88 | element[0].offsetWidth // reflow for transition
89 | element.addClass('in')
90 | } else {
91 | element.removeClass('fade')
92 | }
93 |
94 | if ( element.parent('.dropdown-menu') ) {
95 | element.closest('li.dropdown').addClass('active')
96 | }
97 |
98 | callback && callback()
99 | }
100 |
101 | transition ?
102 | $active.one($.support.transition.end, next) :
103 | next()
104 |
105 | $active.removeClass('in')
106 | }
107 | }
108 |
109 |
110 | /* TAB PLUGIN DEFINITION
111 | * ===================== */
112 |
113 | var old = $.fn.tab
114 |
115 | $.fn.tab = function ( option ) {
116 | return this.each(function () {
117 | var $this = $(this)
118 | , data = $this.data('tab')
119 | if (!data) $this.data('tab', (data = new Tab(this)))
120 | if (typeof option == 'string') data[option]()
121 | })
122 | }
123 |
124 | $.fn.tab.Constructor = Tab
125 |
126 |
127 | /* TAB NO CONFLICT
128 | * =============== */
129 |
130 | $.fn.tab.noConflict = function () {
131 | $.fn.tab = old
132 | return this
133 | }
134 |
135 |
136 | /* TAB DATA-API
137 | * ============ */
138 |
139 | $(document).on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
140 | e.preventDefault()
141 | $(this).tab('show')
142 | })
143 |
144 | }(window.jQuery);
--------------------------------------------------------------------------------